[llvm] [InstCombine] Fold `ceil(X / (2 ^ C)) == 0` -> `X == 0` (PR #143683)
Iris Shi via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 13 19:15:52 PDT 2025
================
@@ -1300,17 +1300,16 @@ Instruction *InstCombinerImpl::foldICmpWithZero(ICmpInst &Cmp) {
// will fold to a constant elsewhere.
}
- // (X >> C) + ((X & ((1 << C) - 1)) != 0) == 0 -> X == 0
- if (Pred == ICmpInst::ICMP_EQ) {
+ // (X >> C) | ((X & ((1 << C) - 1)) != 0) == 0 -> X == 0
+ if (ICmpInst::isEquality(Pred)) {
Value *X;
const APInt *C1, *C2;
- CmpPredicate PredNE;
if (match(Cmp.getOperand(0),
- m_OneUse(
- m_Add(m_LShr(m_Value(X), m_APInt(C1)),
- m_ZExt(m_ICmp(PredNE, m_And(m_Deferred(X), m_APInt(C2)),
- m_Zero()))))) &&
- PredNE == CmpInst::ICMP_NE &&
+ m_OneUse(m_c_Or(
+ m_LShr(m_Value(X), m_APInt(C1)),
+ m_ZExt(m_SpecificICmp(ICmpInst::ICMP_NE,
+ m_And(m_Deferred(X), m_APInt(C2)),
+ m_Zero()))))) &&
*C2 == APInt::getLowBitsSet(C2->getBitWidth(), C1->getZExtValue()))
return new ICmpInst(ICmpInst::ICMP_EQ, X,
----------------
el-ev wrote:
Fixed, thanks!
https://github.com/llvm/llvm-project/pull/143683
More information about the llvm-commits
mailing list