https://github.com/arsenm updated 
https://github.com/llvm/llvm-project/pull/174023

>From 1c3d261925f681ac68a6eaf24d227004d0dfc34e Mon Sep 17 00:00:00 2001
From: Matt Arsenault <[email protected]>
Date: Tue, 30 Dec 2025 20:19:45 +0100
Subject: [PATCH] InstCombine: Handle fmul by -0 case in
 SimplifyDemandedFPClass

The fmul visitor handles this case as copysign and fneg.
---
 .../InstCombineSimplifyDemanded.cpp           | 22 +++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp 
b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
index 5e200560e83d1..cd46f5f0bc881 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
@@ -2180,8 +2180,6 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Value 
*V,
     // X * -0.0 --> copysign(0.0, -X)
 
     // TODO: Apply knowledge of no-infinity returns to sources.
-
-    // TODO: Known -0, turn into copysign(y, fneg(x)) like visitFMul.
     if (KnownLHS.isKnownNeverInfOrNaN() &&
         KnownRHS.isKnownAlways(fcPosZero | fcNan)) {
       // => copysign(+0, lhs)
@@ -2200,6 +2198,26 @@ Value 
*InstCombinerImpl::SimplifyDemandedUseFPClass(Value *V,
       return Copysign;
     }
 
+    if (KnownLHS.isKnownNeverInfOrNaN() &&
+        KnownRHS.isKnownAlways(fcNegZero | fcNan)) {
+      // => copysign(0, fneg(lhs))
+      // Note: Dropping canonicalize
+      Value *Copysign =
+          Builder.CreateCopySign(Y, Builder.CreateFNegFMF(X, FMF), FMF);
+      Copysign->takeName(I);
+      return Copysign;
+    }
+
+    if (KnownLHS.isKnownAlways(fcNegZero | fcNan) &&
+        KnownRHS.isKnownNeverInfOrNaN()) {
+      // => copysign(+0, fneg(rhs))
+      // Note: Dropping canonicalize
+      Value *Copysign =
+          Builder.CreateCopySign(X, Builder.CreateFNegFMF(Y, FMF), FMF);
+      Copysign->takeName(I);
+      return Copysign;
+    }
+
     Type *EltTy = VTy->getScalarType();
     DenormalMode Mode = F.getDenormalMode(EltTy->getFltSemantics());
 

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to