Call unbounded broadcast only when necessary.
Call unbounded broadcast only when necessary.

Here's a before & after HLO for `max(f32[?,10], f32[?,10])` where implicit broadcasting is not necessary:

Before:
```
HloModule UnboundedBinaryOpTest_6.17, entry_computation_layout={(f32[?,10]{1,0}, f32[?,10]{1,0})->f32[?,10]{1,0}}

ENTRY %UnboundedBinaryOpTest_6.17 (lhs.1: f32[?,10], rhs.2: f32[?,10]) -> f32[?,10] {
  %constant.3 = s32[1]{0} constant({1})
  %constant.7 = s32[1]{0} constant({1})
  %lhs.1 = f32[?,10]{1,0} parameter(0)
  %get-dimension-size.4 = s32[] get-dimension-size(f32[?,10]{1,0} %lhs.1), dimensions={0}
  %reshape.5 = s32[1]{0} reshape(s32[] %get-dimension-size.4)
  %constant.6 = s32[1]{0} constant({10})
  %concatenate.11 = s32[2]{0} concatenate(s32[1]{0} %reshape.5, s32[1]{0} %constant.6), dimensions={0}
  %rhs.2 = f32[?,10]{1,0} parameter(1)
  %get-dimension-size.8 = s32[] get-dimension-size(f32[?,10]{1,0} %rhs.2), dimensions={0}
  %reshape.9 = s32[1]{0} reshape(s32[] %get-dimension-size.8)
  %constant.10 = s32[1]{0} constant({10})
  %concatenate.12 = s32[2]{0} concatenate(s32[1]{0} %reshape.9, s32[1]{0} %constant.10), dimensions={0}
  %maximum.13 = s32[2]{0} maximum(s32[2]{0} %concatenate.11, s32[2]{0} %concatenate.12)
  %custom-call.14 = f32[?,10]{1,0} custom-call(f32[?,10]{1,0} %lhs.1, s32[2]{0} %maximum.13), custom_call_target="mhlo.dynamic_broadcast_in_dim", backend_config={broadcast_dimensions=[0,1]}
  %custom-call.15 = f32[?,10]{1,0} custom-call(f32[?,10]{1,0} %rhs.2, s32[2]{0} %maximum.13), custom_call_target="mhlo.dynamic_broadcast_in_dim", backend_config={broadcast_dimensions=[0,1]}
  ROOT %maximum.16 = f32[?,10]{1,0} maximum(f32[?,10]{1,0} %custom-call.14, f32[?,10]{1,0} %custom-call.15)
}
```

After:
```
HloModule UnboundedBinaryOpTest_6.4, entry_computation_layout={(f32[?,10]{1,0}, f32[?,10]{1,0})->f32[?,10]{1,0}}

ENTRY %UnboundedBinaryOpTest_6.4 (lhs.1: f32[?,10], rhs.2: f32[?,10]) -> f32[?,10] {
  %lhs.1 = f32[?,10]{1,0} parameter(0)
  %rhs.2 = f32[?,10]{1,0} parameter(1)
  ROOT %maximum.3 = f32[?,10]{1,0} maximum(f32[?,10]{1,0} %lhs.1, f32[?,10]{1,0} %rhs.2)
}
```

FUTURE_COPYBARA_INTEGRATE_REVIEW=https://github.com/openxla/xla/pull/10631 from Intel-tensorflow:yimei/fix_cpu_bf16_support 9b4f9136f1976b4432e1a60f2deb4a17c150dd3f
