[llvm] [InstCombine] Fold (X * 0.0) * constant => X * 0.0 #85241 (PR #92512)

via llvm-commits llvm-commits at lists.llvm.org
Thu May 23 02:03:10 PDT 2024


================
@@ -905,6 +905,16 @@ Instruction *InstCombinerImpl::visitFMul(BinaryOperator &I) {
     }
   }
 
+  // (X * 0.0) * constant => X * 0.0
+  if (match(Op0, m_FMul(m_Value(X), m_AnyZeroFP())) &&
+      match(Op1, m_Constant(C))) {
+    Constant *C1 = cast<Constant>(cast<Instruction>(Op0)->getOperand(1));
+    if (Constant *CC1 =
+            ConstantFoldBinaryOpOperands(Instruction::FMul, C, C1, DL)) {
+      return BinaryOperator::CreateFMulFMF(X, CC1, I.getFastMathFlags());
----------------
SahilPatidar wrote:

It is still propagating `ninf` even though I used `return BinaryOperator::CreateFMul(X, CC1);`. I don't understand if it is happening internally during the `BinaryOperator ` creation.

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


More information about the llvm-commits mailing list