From 60b8e3a66b64dfb7b7b9d1815018265fd38edaa4 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 11 Apr 2023 14:56:50 -0400 Subject: [PATCH] InstCombine: Pass all parameters to isKnownNeverNaN Allows assume handling to work. --- llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp | 6 ++++-- llvm/test/Transforms/InstCombine/is_fpclass.ll | 6 ++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp index d5b2aa6..e1a8073 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp @@ -7152,10 +7152,12 @@ 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, DL, &TLI)) + if (!match(Op0, m_PosZeroFP()) && isKnownNeverNaN(Op0, DL, &TLI, 0, + &AC, &I, &DT, &ORE)) return replaceOperand(I, 0, ConstantFP::getZero(OpType)); - if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, DL, &TLI)) + if (!match(Op1, m_PosZeroFP()) && + isKnownNeverNaN(Op1, DL, &TLI, 0, &AC, &I, &DT, &ORE)) return replaceOperand(I, 1, ConstantFP::getZero(OpType)); } diff --git a/llvm/test/Transforms/InstCombine/is_fpclass.ll b/llvm/test/Transforms/InstCombine/is_fpclass.ll index bb76fdf..b937128 100644 --- a/llvm/test/Transforms/InstCombine/is_fpclass.ll +++ b/llvm/test/Transforms/InstCombine/is_fpclass.ll @@ -2712,8 +2712,7 @@ define i1 @test_class_is_nan_assume_ord(float %x) { ; CHECK-LABEL: @test_class_is_nan_assume_ord( ; CHECK-NEXT: [[ORD:%.*]] = fcmp ord float [[X:%.*]], 0.000000e+00 ; CHECK-NEXT: call void @llvm.assume(i1 [[ORD]]) -; CHECK-NEXT: [[CLASS:%.*]] = fcmp uno float [[X]], 0.000000e+00 -; CHECK-NEXT: ret i1 [[CLASS]] +; CHECK-NEXT: ret i1 false ; %ord = fcmp ord float %x, 0.0 call void @llvm.assume(i1 %ord) @@ -2738,8 +2737,7 @@ define i1 @test_class_is_nan_assume_not_eq_pinf(float %x) { ; CHECK-LABEL: @test_class_is_nan_assume_not_eq_pinf( ; CHECK-NEXT: [[ORD:%.*]] = fcmp oeq float [[X:%.*]], 0x7FF0000000000000 ; CHECK-NEXT: call void @llvm.assume(i1 [[ORD]]) -; CHECK-NEXT: [[CLASS:%.*]] = fcmp uno float [[X]], 0.000000e+00 -; CHECK-NEXT: ret i1 [[CLASS]] +; CHECK-NEXT: ret i1 false ; %ord = fcmp oeq float %x, 0x7FF0000000000000 call void @llvm.assume(i1 %ord) -- 2.7.4