@@ -19431,38 +19431,23 @@ class HorizontalReduction {
19431
19431
return Builder.CreateBinOp((Instruction::BinaryOps)RdxOpcode, LHS, RHS,
19432
19432
Name);
19433
19433
}
19434
- case RecurKind::FMax:
19435
- return Builder.CreateBinaryIntrinsic(Intrinsic::maxnum, LHS, RHS);
19436
- case RecurKind::FMin:
19437
- return Builder.CreateBinaryIntrinsic(Intrinsic::minnum, LHS, RHS);
19438
- case RecurKind::FMaximum:
19439
- return Builder.CreateBinaryIntrinsic(Intrinsic::maximum, LHS, RHS);
19440
- case RecurKind::FMinimum:
19441
- return Builder.CreateBinaryIntrinsic(Intrinsic::minimum, LHS, RHS);
19442
19434
case RecurKind::SMax:
19443
- if (UseSelect) {
19444
- Value *Cmp = Builder.CreateICmpSGT(LHS, RHS, Name);
19445
- return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19446
- }
19447
- return Builder.CreateBinaryIntrinsic(Intrinsic::smax, LHS, RHS);
19448
19435
case RecurKind::SMin:
19449
- if (UseSelect) {
19450
- Value *Cmp = Builder.CreateICmpSLT(LHS, RHS, Name);
19451
- return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19452
- }
19453
- return Builder.CreateBinaryIntrinsic(Intrinsic::smin, LHS, RHS);
19454
19436
case RecurKind::UMax:
19455
- if (UseSelect) {
19456
- Value *Cmp = Builder.CreateICmpUGT(LHS, RHS, Name);
19457
- return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19458
- }
19459
- return Builder.CreateBinaryIntrinsic(Intrinsic::umax, LHS, RHS);
19460
19437
case RecurKind::UMin:
19461
19438
if (UseSelect) {
19462
- Value *Cmp = Builder.CreateICmpULT(LHS, RHS, Name);
19439
+ CmpInst::Predicate Pred = llvm::getMinMaxReductionPredicate(Kind);
19440
+ Value *Cmp = Builder.CreateICmp(Pred, LHS, RHS, Name);
19463
19441
return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19464
19442
}
19465
- return Builder.CreateBinaryIntrinsic(Intrinsic::umin, LHS, RHS);
19443
+ [[fallthrough]];
19444
+ case RecurKind::FMax:
19445
+ case RecurKind::FMin:
19446
+ case RecurKind::FMaximum:
19447
+ case RecurKind::FMinimum: {
19448
+ Intrinsic::ID Id = llvm::getMinMaxReductionIntrinsicOp(Kind);
19449
+ return Builder.CreateBinaryIntrinsic(Id, LHS, RHS);
19450
+ }
19466
19451
default:
19467
19452
llvm_unreachable("Unknown reduction operation.");
19468
19453
}
0 commit comments