[llvm] [InstCombine] Fold `X > C2 ? X + C1 : C2 + C1` to `max(X, C2) + C1` (PR #116888)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 19 17:14:08 PST 2024
================
@@ -1898,6 +1898,44 @@ static Instruction *foldSelectICmpEq(SelectInst &SI, ICmpInst *ICI,
return nullptr;
}
+// Turn (select (Cmp X C1) (BOp X C2) C3)
+// -> (select (Cmp X C1) (BOp X C2) (BOp C1 C2))
+// -> (BOp (select (Cmp X C1) X C1) C2)
+// iff C3 == BOp C1 C2
+// This allows for better canonicalization.
+static Instruction *canonicalizeConstToBOp(SelectInst &SI, Value *TrueVal,
+ Value *FalseVal,
+ InstCombinerImpl &IC) {
+ Value *CondVal = SI.getCondition();
+
+ BinaryOperator *BOp;
+ Constant *C1, *C2, *C3;
+ Value *X;
+ ICmpInst::Predicate Predicate;
+
+ if (!match(CondVal, m_c_ICmp(Predicate, m_Value(X), m_Constant(C1))))
----------------
dtcxzyw wrote:
```suggestion
if (!match(CondVal, m_ICmp(Predicate, m_Value(X), m_Constant(C1))))
```
We always canonicalize constants to the RHS.
https://github.com/llvm/llvm-project/pull/116888
More information about the llvm-commits
mailing list