[llvm] [InstCombine] Fold `mul (sext bool X), Y` into `select X, -Y, 0` (PR #84792)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 14 06:34:44 PDT 2024


================
@@ -448,6 +448,15 @@ Instruction *InstCombinerImpl::visitMul(BinaryOperator &I) {
   if (match(Op1, m_ZExt(m_Value(X))) && X->getType()->isIntOrIntVectorTy(1))
     return SelectInst::Create(X, Op0, ConstantInt::getNullValue(Ty));
 
+  // mul (sext X), Y -> select X, -Y, 0
+  // mul Y, (sext X) -> select X, -Y, 0
+  if (match(&I, m_c_Mul(m_OneUse(m_SExt(m_Value(X))), m_Value(Y))) &&
+      X->getType()->isIntOrIntVectorTy(1))
+    return SelectInst::Create(X,
+                              Builder.CreateNeg(Y, Y->getName() + ".neg", false,
----------------
dtcxzyw wrote:

```suggestion
                              Builder.CreateNeg(Y, "", /*HasNUW=*/false,
```

I don't think the name is valuable.
BTW, `NUWNeg` is meaningless :( I will remove it later.



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


More information about the llvm-commits mailing list