[llvm] InstCombine: Handle canonicalize in SimplifyDemandedFPClass (PR #173189)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 24 05:17:46 PST 2025


================
@@ -2106,6 +2106,77 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Value *V,
       Known.copysign(KnownSign);
       break;
     }
+    case Intrinsic::canonicalize: {
+      Type *EltTy = VTy->getScalarType();
+
+      // TODO: This could have more refined support for PositiveZero denormal
+      // mode.
+      if (EltTy->isIEEELikeFPTy()) {
+        DenormalMode Mode = F.getDenormalMode(EltTy->getFltSemantics());
+
+        FPClassTest SrcDemandedMask = DemandedMask;
+
+        // A demanded quiet nan result may have come from a signaling nan, so we
+        // need to expand the demanded mask.
+        if ((DemandedMask & fcQNan) != fcNone)
+          SrcDemandedMask |= fcSNan;
+
+        // This cannot have produced a signaling nan, so we can trim any snan
+        // inputs.
+        if ((DemandedMask & fcSNan) != fcNone)
----------------
dtcxzyw wrote:

```suggestion
        if ((DemandedMask & fcSNan) == fcNone)
```

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


More information about the llvm-commits mailing list