@@ -19401,38 +19401,24 @@ class HorizontalReduction {
19401
19401
case RecurKind::FMul:
19402
19402
return Builder.CreateBinOp((Instruction::BinaryOps)RdxOpcode, LHS, RHS,
19403
19403
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);
19412
19404
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);
19418
19405
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);
19424
19406
case RecurKind::UMax:
19407
+ case RecurKind::UMin: {
19425
19408
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);
19433
19411
return Builder.CreateSelect(Cmp, LHS, RHS, Name);
19434
19412
}
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
+ }
19436
19422
default:
19437
19423
llvm_unreachable("Unknown reduction operation.");
19438
19424
}
0 commit comments