@@ -19419,38 +19419,24 @@ class HorizontalReduction {
19419
19419
return Builder.CreateBinOp((Instruction::BinaryOps)RdxOpcode, LHS, RHS,
19420
19420
Name);
19421
19421
}
19422
- case RecurKind::FMax:
19423
- return Builder.CreateBinaryIntrinsic(Intrinsic::maxnum, LHS, RHS);
19424
- case RecurKind::FMin:
19425
- return Builder.CreateBinaryIntrinsic(Intrinsic::minnum, LHS, RHS);
19426
- case RecurKind::FMaximum:
19427
- return Builder.CreateBinaryIntrinsic(Intrinsic::maximum, LHS, RHS);
19428
- case RecurKind::FMinimum:
19429
- return Builder.CreateBinaryIntrinsic(Intrinsic::minimum, LHS, RHS);
19430
19422
case RecurKind::SMax:
19431
- if (UseSelect) {
19432
- Value *Cmp = Builder.CreateICmpSGT(LHS, RHS, Name);
19433
- return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19434
- }
19435
- return Builder.CreateBinaryIntrinsic(Intrinsic::smax, LHS, RHS);
19436
19423
case RecurKind::SMin:
19437
- if (UseSelect) {
19438
- Value *Cmp = Builder.CreateICmpSLT(LHS, RHS, Name);
19439
- return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19440
- }
19441
- return Builder.CreateBinaryIntrinsic(Intrinsic::smin, LHS, RHS);
19442
19424
case RecurKind::UMax:
19425
+ case RecurKind::UMin: {
19443
19426
if (UseSelect) {
19444
- Value *Cmp = Builder.CreateICmpUGT(LHS, RHS, Name);
19445
- return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19446
- }
19447
- return Builder.CreateBinaryIntrinsic(Intrinsic::umax, LHS, RHS);
19448
- case RecurKind::UMin:
19449
- if (UseSelect) {
19450
- Value *Cmp = Builder.CreateICmpULT(LHS, RHS, Name);
19427
+ CmpInst::Predicate Pred = llvm::getMinMaxReductionPredicate(Kind);
19428
+ Value *Cmp = Builder.CreateCmp(Pred, LHS, RHS, Name);
19451
19429
return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19452
19430
}
19453
- return Builder.CreateBinaryIntrinsic(Intrinsic::umin, LHS, RHS);
19431
+ }
19432
+ [[fallthrough]];
19433
+ case RecurKind::FMax:
19434
+ case RecurKind::FMin:
19435
+ case RecurKind::FMaximum:
19436
+ case RecurKind::FMinimum: {
19437
+ Intrinsic::ID Id = llvm::getMinMaxReductionIntrinsicOp(Kind);
19438
+ return Builder.CreateBinaryIntrinsic(Id, LHS, RHS);
19439
+ }
19454
19440
default:
19455
19441
llvm_unreachable("Unknown reduction operation.");
19456
19442
}
0 commit comments