message: Change code generation of fmax/min to fcmp+select when fast math is enabled.
  This enables vectorization of min/max reductions.
  RELNOTES: n/a
diff: @@ -293,19 +293,27 @@ StatusOr<llvm::Value*> ElementalIrEmitter::EmitFloatBinaryOp(
  llvm::Value* ElementalIrEmitter::EmitFloatMax(llvm::Value* lhs_value,
  llvm::Value* rhs_value) const {
  - // TODO(b/64580527): We can do better here if fast-math is enabled.
  + if (ir_builder_->getFastMathFlags().noNaNs()) {
  + auto cmp = ir_builder_->CreateFCmpUGE(lhs_value, rhs_value);
  + return ir_builder_->CreateSelect(cmp, lhs_value, rhs_value);
  + } else {
  return llvm_ir::EmitCallToIntrinsic(llvm::Intrinsic::maxnum,
  {lhs_value, rhs_value},
  {lhs_value->getType()}, ir_builder_);
  }
  +}
  llvm::Value* ElementalIrEmitter::EmitFloatMin(llvm::Value* lhs_value,
  llvm::Value* rhs_value) const {
  - // TODO(b/64580527): We can do better here if fast-math is enabled.
  + if (ir_builder_->getFastMathFlags().noNaNs()) {
  + auto cmp = ir_builder_->CreateFCmpULE(lhs_value, rhs_value);
  + return ir_builder_->CreateSelect(cmp, lhs_value, rhs_value);
  + } else {
  return llvm_ir::EmitCallToIntrinsic(llvm::Intrinsic::minnum,
  {lhs_value, rhs_value},
  {lhs_value->getType()}, ir_builder_);
  }
  +}
  StatusOr<llvm::Value*> ElementalIrEmitter::EmitErfInv(PrimitiveType prim_type,
  llvm::Value* x) const {
  