[llvm] [InstCombine] canonicalize operands of fcmp ord/uno if they are known NaN (PR #97763)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 5 20:38:43 PDT 2024
================
@@ -8103,13 +8103,22 @@ Instruction *InstCombinerImpl::visitFCmpInst(FCmpInst &I) {
// If we're just checking for a NaN (ORD/UNO) and have a non-NaN operand,
// then canonicalize the operand to 0.0.
if (Pred == CmpInst::FCMP_ORD || Pred == CmpInst::FCMP_UNO) {
- if (!match(Op0, m_PosZeroFP()) &&
- isKnownNeverNaN(Op0, 0, getSimplifyQuery().getWithInstruction(&I)))
- return replaceOperand(I, 0, ConstantFP::getZero(OpType));
-
- if (!match(Op1, m_PosZeroFP()) &&
- isKnownNeverNaN(Op1, 0, getSimplifyQuery().getWithInstruction(&I)))
- return replaceOperand(I, 1, ConstantFP::getZero(OpType));
+ if (!match(Op0, m_PosZeroFP())) {
+ KnownFPClass Known0 = computeKnownFPClass(Op0, fcAllFlags, &I);
+ if (Known0.isKnownNeverNaN())
+ return replaceOperand(I, 0, ConstantFP::getZero(OpType));
+ if (Known0.isKnownAlwaysNaN())
+ return replaceInstUsesWith(I,
+ Builder.getInt1(Pred == CmpInst::FCMP_UNO));
----------------
dtcxzyw wrote:
Don't use `Builder.getInt1`. It will fail when folding a vector fcmp.
https://github.com/llvm/llvm-project/pull/97763
More information about the llvm-commits
mailing list