[llvm] [InstCombine] Fold select(X >s 0, 0, -X) | smax(X, 0) to abs(X) (PR #165200)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 27 08:35:47 PDT 2025
================
@@ -3997,6 +3997,20 @@ static Value *foldOrUnsignedUMulOverflowICmp(BinaryOperator &I,
return nullptr;
}
+// Fold select(X >s 0, 0, -X) | smax(X, 0) --> abs(X)
+static Value *FoldOrOfSelectSmaxToAbs(BinaryOperator &I,
+ InstCombiner::BuilderTy &Builder) {
+ CmpPredicate Pred;
+ Value *X;
+ if (match(&I, m_c_Or(m_Select(m_ICmp(Pred, m_Value(X), m_ZeroInt()),
+ m_ZeroInt(), m_Sub(m_ZeroInt(), m_Deferred(X))),
+ m_OneUse(m_Intrinsic<Intrinsic::smax>(m_Deferred(X),
+ m_ZeroInt())))) &&
+ Pred == ICmpInst::ICMP_SGT)
----------------
dtcxzyw wrote:
```suggestion
if (match(&I, m_c_Or(m_Select(m_SpecificICmp(ICmpInst::ICMP_SGT, m_Value(X), m_ZeroInt()),
m_ZeroInt(), m_Sub(m_ZeroInt(), m_Deferred(X))),
m_OneUse(m_Intrinsic<Intrinsic::smax>(m_Deferred(X),
m_ZeroInt())))))
```
https://github.com/llvm/llvm-project/pull/165200
More information about the llvm-commits
mailing list