[llvm] 3c2b185 - [InstCombine] Avoid ConstantExpr::getSelect() use (NFCI)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 27 07:32:20 PST 2023
Author: Nikita Popov
Date: 2023-02-27T16:32:11+01:00
New Revision: 3c2b1853d17065680c2bdac3623ad1fac4f215ec
URL: https://github.com/llvm/llvm-project/commit/3c2b1853d17065680c2bdac3623ad1fac4f215ec
DIFF: https://github.com/llvm/llvm-project/commit/3c2b1853d17065680c2bdac3623ad1fac4f215ec.diff
LOG: [InstCombine] Avoid ConstantExpr::getSelect() use (NFCI)
Instead let IRBuilder take care of constant folding.
In preparation for removing select constantexprs.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index b585de05e9ea6..b7fe9ff239a3f 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -1082,7 +1082,8 @@ static Instruction *foldClampRangeOfTwo(IntrinsicInst *II,
/// If this min/max has a constant operand and an operand that is a matching
/// min/max with a constant operand, constant-fold the 2 constant operands.
-static Instruction *reassociateMinMaxWithConstants(IntrinsicInst *II) {
+static Value *reassociateMinMaxWithConstants(IntrinsicInst *II,
+ IRBuilderBase &Builder) {
Intrinsic::ID MinMaxID = II->getIntrinsicID();
auto *LHS = dyn_cast<IntrinsicInst>(II->getArgOperand(0));
if (!LHS || LHS->getIntrinsicID() != MinMaxID)
@@ -1095,12 +1096,10 @@ static Instruction *reassociateMinMaxWithConstants(IntrinsicInst *II) {
// max (max X, C0), C1 --> max X, (max C0, C1) --> max X, NewC
ICmpInst::Predicate Pred = MinMaxIntrinsic::getPredicate(MinMaxID);
- Constant *CondC = ConstantExpr::getICmp(Pred, C0, C1);
- Constant *NewC = ConstantExpr::getSelect(CondC, C0, C1);
-
- Module *Mod = II->getModule();
- Function *MinMax = Intrinsic::getDeclaration(Mod, MinMaxID, II->getType());
- return CallInst::Create(MinMax, {LHS->getArgOperand(0), NewC});
+ Value *CondC = Builder.CreateICmp(Pred, C0, C1);
+ Value *NewC = Builder.CreateSelect(CondC, C0, C1);
+ return Builder.CreateIntrinsic(MinMaxID, II->getType(),
+ {LHS->getArgOperand(0), NewC});
}
/// If this min/max has a matching min/max operand with a constant, try to push
@@ -1572,8 +1571,8 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
if (Instruction *R = FoldOpIntoSelect(*II, Sel))
return R;
- if (Instruction *NewMinMax = reassociateMinMaxWithConstants(II))
- return NewMinMax;
+ if (Value *NewMinMax = reassociateMinMaxWithConstants(II, Builder))
+ return replaceInstUsesWith(*II, NewMinMax);
if (Instruction *R = reassociateMinMaxWithConstantInOperand(II, Builder))
return R;
More information about the llvm-commits
mailing list