[llvm] [InstCombine]combine mul(abs(x), abs(y)) to abs(mul(x, y)) (PR #78395)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 17 02:55:50 PST 2024


================
@@ -330,6 +330,18 @@ Instruction *InstCombinerImpl::visitMul(BinaryOperator &I) {
       return BinaryOperator::CreateMul(X, X);
   }
 
+  {
+    Value *X, *Y;
+    // abs(X) * abs(Y) -> abs(X * Y)
+    if (I.hasNoSignedWrap() &&
+        match(Op0, m_Intrinsic<Intrinsic::abs>(m_Value(X), m_AllOnes())) &&
+        match(Op1, m_Intrinsic<Intrinsic::abs>(m_Value(Y), m_AllOnes())))
----------------
nikic wrote:

You will also need `m_OneUse`. Please also add multi-use tests.

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


More information about the llvm-commits mailing list