[llvm] [InstCombine] Enable more fabs fold when the user ignores sign bit of zero/NaN (PR #139861)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed May 21 01:18:23 PDT 2025
================
@@ -2773,6 +2773,47 @@ Instruction *InstCombinerImpl::foldAndOrOfSelectUsingImpliedCond(Value *Op,
return nullptr;
}
+/// Return true if the sign bit of result can be ignored when the result is
+/// zero.
+static bool ignoreSignBitOfZero(Instruction &I) {
+ if (I.hasNoSignedZeros())
+ return true;
+
+ // Check if the sign bit is ignored by the only user.
+ if (!I.hasOneUse())
+ return false;
+ Instruction *User = I.user_back();
+
+ // fcmp treats both positive and negative zero as equal.
+ if (User->getOpcode() == Instruction::FCmp)
+ return true;
+
+ if (auto *FPOp = dyn_cast<FPMathOperator>(User))
+ return FPOp->hasNoSignedZeros();
+
+ return false;
+}
+
+/// Return true if the sign bit of result can be ignored when the result is NaN.
+static bool ignoreSignBitOfNaN(Instruction &I) {
+ if (I.hasNoNaNs())
+ return true;
+
+ // Check if the sign bit is ignored by the only user.
+ if (!I.hasOneUse())
+ return false;
+ Instruction *User = I.user_back();
+
+ // fcmp ignores the sign bit of NaN.
----------------
arsenm wrote:
All proper floating point instructions kind of ignore the sign bit of a nan, this is just one particular instance. Eventually we should have a utility function to identify all potentially canonicalizing instructions which we can ignore the nan sign bit from
https://github.com/llvm/llvm-project/pull/139861
More information about the llvm-commits
mailing list