@@ -19401,38 +19401,24 @@ class HorizontalReduction {
1940119401 case RecurKind::FMul:
1940219402 return Builder.CreateBinOp((Instruction::BinaryOps)RdxOpcode, LHS, RHS,
1940319403 Name);
19404- case RecurKind::FMax:
19405- return Builder.CreateBinaryIntrinsic(Intrinsic::maxnum, LHS, RHS);
19406- case RecurKind::FMin:
19407- return Builder.CreateBinaryIntrinsic(Intrinsic::minnum, LHS, RHS);
19408- case RecurKind::FMaximum:
19409- return Builder.CreateBinaryIntrinsic(Intrinsic::maximum, LHS, RHS);
19410- case RecurKind::FMinimum:
19411- return Builder.CreateBinaryIntrinsic(Intrinsic::minimum, LHS, RHS);
1941219404 case RecurKind::SMax:
19413- if (UseSelect) {
19414- Value *Cmp = Builder.CreateICmpSGT(LHS, RHS, Name);
19415- return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19416- }
19417- return Builder.CreateBinaryIntrinsic(Intrinsic::smax, LHS, RHS);
1941819405 case RecurKind::SMin:
19419- if (UseSelect) {
19420- Value *Cmp = Builder.CreateICmpSLT(LHS, RHS, Name);
19421- return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19422- }
19423- return Builder.CreateBinaryIntrinsic(Intrinsic::smin, LHS, RHS);
1942419406 case RecurKind::UMax:
19407+ case RecurKind::UMin: {
1942519408 if (UseSelect) {
19426- Value *Cmp = Builder.CreateICmpUGT(LHS, RHS, Name);
19427- return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19428- }
19429- return Builder.CreateBinaryIntrinsic(Intrinsic::umax, LHS, RHS);
19430- case RecurKind::UMin:
19431- if (UseSelect) {
19432- Value *Cmp = Builder.CreateICmpULT(LHS, RHS, Name);
19409+ CmpInst::Predicate Pred = llvm::getMinMaxReductionPredicate(Kind);
19410+ Value *Cmp = Builder.CreateCmp(Pred, LHS, RHS, Name);
1943319411 return Builder.CreateSelect(Cmp, LHS, RHS, Name);
1943419412 }
19435- return Builder.CreateBinaryIntrinsic(Intrinsic::umin, LHS, RHS);
19413+ }
19414+ [[fallthrough]];
19415+ case RecurKind::FMax:
19416+ case RecurKind::FMin:
19417+ case RecurKind::FMaximum:
19418+ case RecurKind::FMinimum: {
19419+ Intrinsic::ID Id = llvm::getMinMaxReductionIntrinsicOp(Kind);
19420+ return Builder.CreateBinaryIntrinsic(Id, LHS, RHS);
19421+ }
1943619422 default:
1943719423 llvm_unreachable("Unknown reduction operation.");
1943819424 }
0 commit comments