[llvm] [InstCombine] Fold its select user into select (PR #83405)

via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 17 22:12:30 PDT 2024


================
@@ -500,6 +500,48 @@ static bool isSelect01(const APInt &C1I, const APInt &C2I) {
   return C1I.isOne() || C1I.isAllOnes() || C2I.isOne() || C2I.isAllOnes();
 }
 
+/// Try to simplify a select instruction when the user of its select user
+/// indicates the condition.
+static bool simplifySeqSelectWithSameCond(SelectInst &SI,
+                                          const SimplifyQuery &SQ,
+                                          InstCombinerImpl &IC) {
+  Value *CondVal = SI.getCondition();
+  if (isa<Constant>(CondVal))
+    return false;
+
+  auto TrysimplifySeqSelect = [=, &SI, &IC](unsigned OpIndex) {
+    assert((OpIndex == 1 || OpIndex == 2) && "Unexpected operand index");
+    Type *CondType = CondVal->getType();
+    Value *RepOp = OpIndex == 1 ? ConstantInt::getTrue(CondType)
+                                : ConstantInt::getFalse(CondType);
+    SelectInst *SINext = &SI;
+    Value *ValOp = SINext->getOperand(OpIndex);
+    Value *CondNext;
+    while (match(ValOp, m_Select(m_Value(CondNext), m_Value(), m_Value()))) {
+      if (CondNext == CondVal)
----------------
vfdff wrote:

Thanks, I'll address that with a following seperate patch

https://github.com/llvm/llvm-project/pull/83405


More information about the llvm-commits mailing list