[llvm] [InstCombine] Support trunc to i1 in foldSelectICmpAnd (PR #127905)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 19 23:45:50 PST 2025
================
@@ -128,33 +128,42 @@ static Value *foldSelectICmpAnd(SelectInst &Sel, ICmpInst *Cmp,
// If this is a vector select, we need a vector compare.
Type *SelType = Sel.getType();
- if (SelType->isVectorTy() != Cmp->getType()->isVectorTy())
+ if (SelType->isVectorTy() != CondVal->getType()->isVectorTy())
return nullptr;
Value *V;
APInt AndMask;
bool CreateAnd = false;
- ICmpInst::Predicate Pred = Cmp->getPredicate();
- if (ICmpInst::isEquality(Pred)) {
- if (!match(Cmp->getOperand(1), m_Zero()))
- return nullptr;
+ CmpPredicate Pred;
+ Value *CmpLHS, *CmpRHS;
- V = Cmp->getOperand(0);
- const APInt *AndRHS;
- if (!match(V, m_And(m_Value(), m_Power2(AndRHS))))
- return nullptr;
+ if (match(CondVal, m_ICmp(Pred, m_Value(CmpLHS), m_Value(CmpRHS)))) {
----------------
dtcxzyw wrote:
We should avoid duplicate matches in `foldSelectICmpAndBinOp`.
https://github.com/llvm/llvm-project/pull/127905
More information about the llvm-commits
mailing list