[llvm-branch-commits] [llvm] InstCombine: Handle nsz in copysign SimplifyDemandedFPClass (PR #176916)

Yingwei Zheng via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Jan 20 07:50:41 PST 2026


================
@@ -2081,6 +2081,32 @@ static Value *simplifyDemandedFPClassFnegFabs(KnownFPClass &Known, Value *Src,
   return nullptr;
 }
 
+static Value *simplifyDemandedFPClassCopysignMag(Value *MagSrc,
+                                                 FPClassTest DemandedMask,
+                                                 KnownFPClass KnownSrc,
+                                                 bool NSZ) {
+  if (NSZ) {
+    constexpr FPClassTest NegOrZero = fcNegative | fcPosZero;
+    constexpr FPClassTest PosOrZero = fcPositive | fcNegZero;
+
+    if ((DemandedMask & ~NegOrZero) == fcNone &&
+        KnownSrc.isKnownNever(KnownFPClass::OrderedGreaterThanZeroMask | fcNan))
+      return MagSrc;
+
+    if ((DemandedMask & ~PosOrZero) == fcNone &&
+        KnownSrc.isKnownNever(KnownFPClass::OrderedLessThanZeroMask | fcNan))
+      return MagSrc;
+  } else {
+    if ((DemandedMask & ~fcNegative) == fcNone && KnownSrc.SignBit == true)
----------------
dtcxzyw wrote:

Missing positive tests.

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


More information about the llvm-branch-commits mailing list