[llvm-branch-commits] [llvm] InstCombine: Implement SimplifyDemandedFPClass for fma (PR #175616)

Yingwei Zheng via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Jan 13 09:00:35 PST 2026


================
@@ -2417,6 +2421,53 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       Known.copysign(KnownSign);
       break;
     }
+    case Intrinsic::fma:
+    case Intrinsic::fmuladd: {
+      // We can't do any simplification on the source besides stripping out
+      // unneeded nans.
+      FPClassTest SrcDemandedMask = (DemandedMask & fcNan) | ~fcNan;
+
+      KnownFPClass KnownSrc[3];
+
+      Type *EltTy = VTy->getScalarType();
+      if (CI->getArgOperand(0) == CI->getArgOperand(1) &&
+          isGuaranteedNotToBeUndef(CI->getArgOperand(0), SQ.AC, CxtI, SQ.DT,
+                                   Depth + 1)) {
+        if (SimplifyDemandedFPClass(CI, 0, SrcDemandedMask, KnownSrc[0],
+                                    Depth + 1) ||
+            SimplifyDemandedFPClass(CI, 2, SrcDemandedMask, KnownSrc[2],
+                                    Depth + 1))
+          return I;
+
+        KnownSrc[1] = KnownSrc[0];
+        DenormalMode Mode = F.getDenormalMode(EltTy->getFltSemantics());
+        Known = KnownFPClass::fma_square(KnownSrc[0], KnownSrc[2], Mode);
+      } else {
+        for (int OpIdx = 0; OpIdx != 3; ++OpIdx) {
+          if (SimplifyDemandedFPClass(CI, OpIdx, SrcDemandedMask,
+                                      KnownSrc[OpIdx], Depth + 1))
+            return CI;
+        }
+
+        DenormalMode Mode = F.getDenormalMode(EltTy->getFltSemantics());
+        Known = KnownFPClass::fma(KnownSrc[0], KnownSrc[1], KnownSrc[2], Mode);
+      }
+
+      FPClassTest ValidResults = DemandedMask & Known.KnownFPClasses;
+      if (Constant *SingleVal =
+              getFPClassConstant(VTy, ValidResults, /*IsCanonicalizing=*/true))
+        return SingleVal;
+
+      FastMathFlags InferredFMF = inferFastMathValueFlags(
+          FMF, ValidResults, {KnownSrc[0], KnownSrc[1], KnownSrc[2]});
----------------
dtcxzyw wrote:

```suggestion
          FMF, ValidResults, KnownSrc);
```

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


More information about the llvm-branch-commits mailing list