Skip to content

Commit 56a37a3

Browse files
authored
[SLPVectorizer] Refactor HorizontalReduction::createOp (NFC) (#121549)
This patch simplifies select-based integer min/max reductions by utilizing `llvm::getMinMaxReductionPredicate`, and generates intrinsic-based min/max reductions by utilizing `llvm::getMinMaxReductionIntrinsicOp`.
1 parent 76af93f commit 56a37a3

File tree

1 file changed

+10
-25
lines changed

1 file changed

+10
-25
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19431,38 +19431,23 @@ class HorizontalReduction {
1943119431
return Builder.CreateBinOp((Instruction::BinaryOps)RdxOpcode, LHS, RHS,
1943219432
Name);
1943319433
}
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);
1944219434
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);
1944819435
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);
1945419436
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);
1946019437
case RecurKind::UMin:
1946119438
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);
1946319441
return Builder.CreateSelect(Cmp, LHS, RHS, Name);
1946419442
}
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+
}
1946619451
default:
1946719452
llvm_unreachable("Unknown reduction operation.");
1946819453
}

0 commit comments

Comments
 (0)