[llvm] [InstCombine] Improve folding of `icmp pred (and X, Mask/~Mask), Y)` (PR #81562)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 12 20:38:18 PST 2024
================
@@ -4068,11 +4068,115 @@ Instruction *InstCombinerImpl::foldSelectICmp(ICmpInst::Predicate Pred,
return nullptr;
}
+// Returns of V is a Mask ((X + 1) & X == 0) or ~Mask (-Pow2OrZero)
+static bool isMaskOrZero(const Value *V, bool Not, const SimplifyQuery &Q,
+ unsigned Depth = 0) {
+ if (Not ? match(V, m_NegatedPower2OrZero()) : match(V, m_LowBitMaskOrZero()))
+ return true;
+ if (V->getType()->getScalarSizeInBits() == 1)
+ return true;
+ if (Depth++ >= MaxAnalysisRecursionDepth)
+ return false;
+ Value *X;
+ if (match(V, m_Not(m_Value(X))))
+ return isMaskOrZero(X, !Not, Q, Depth);
+ const Operator *I = dyn_cast<Operator>(V);
+ if (I == nullptr)
+ return false;
+ switch (I->getOpcode()) {
----------------
goldsteinn wrote:
Sorry, in the commit no the summary: https://alive2.llvm.org/ce/z/fSQ3nZ
added to summary as well.
https://github.com/llvm/llvm-project/pull/81562
More information about the llvm-commits
mailing list