[llvm] [InstCombine] Fold +0.0 - x to -x if we known x is non positive zero (PR #215871)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 13 13:46:02 PDT 2026


================
@@ -3290,6 +3290,18 @@ Instruction *InstCombinerImpl::visitFSub(BinaryOperator &I) {
   if (match(&I, m_FNeg(m_Value(Op))))
     return UnaryOperator::CreateFNegFMF(Op, &I);
 
+  // fsub +0.0, X ==> fneg X if known X is never +0.0
+  if (match(I.getOperand(0), m_PosZeroFP())) {
+    Value *X = I.getOperand(1);
+    DenormalMode Mode = I.getFunction()->getDenormalMode(
+        X->getType()->getScalarType()->getFltSemantics());
+    KnownFPClass Known = computeKnownFPClass(
+        X, fcPosZero | fcSubnormal, getSimplifyQuery().getWithInstruction(&I));
+    if (Known.isKnownNeverLogicalPosZero(Mode) &&
+        (Mode.Input == DenormalMode::IEEE || Known.isKnownNeverSubnormal()))
----------------
arsenm wrote:

I'm not sure why you need the extra checks after Known.isKnownNeverLogicalPosZero

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


More information about the llvm-commits mailing list