From: Sanjay Patel Date: Wed, 20 Feb 2019 00:20:38 +0000 (+0000) Subject: Revert "[InstSimplify] use any-zero matcher for fcmp folds" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=81e598fa8a3ade57360e1adf8fd10e0b6679e5b9;p=llvm Revert "[InstSimplify] use any-zero matcher for fcmp folds" This reverts commit 058bb8351351d56d2a4e8a772570231f9e5305e5. Forgot to update another test affected by this change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354408 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/InstructionSimplify.cpp b/lib/Analysis/InstructionSimplify.cpp index 092aaf610ca..843b3e97c07 100644 --- a/lib/Analysis/InstructionSimplify.cpp +++ b/lib/Analysis/InstructionSimplify.cpp @@ -3648,31 +3648,6 @@ static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS, } // Handle fcmp with constant RHS. - if (match(RHS, m_AnyZeroFP())) { - switch (Pred) { - case FCmpInst::FCMP_OGE: - if (FMF.noNaNs() && CannotBeOrderedLessThanZero(LHS, Q.TLI)) - return getTrue(RetTy); - break; - case FCmpInst::FCMP_UGE: - if (CannotBeOrderedLessThanZero(LHS, Q.TLI)) - return getTrue(RetTy); - break; - case FCmpInst::FCMP_ULT: - if (FMF.noNaNs() && CannotBeOrderedLessThanZero(LHS, Q.TLI)) - return getFalse(RetTy); - break; - case FCmpInst::FCMP_OLT: - if (CannotBeOrderedLessThanZero(LHS, Q.TLI)) - return getFalse(RetTy); - break; - default: - break; - } - } - - // TODO: Use match with a specific FP value, so these work with vectors with - // undef lanes. const APFloat *C; if (match(RHS, m_APFloat(C))) { // Check whether the constant is an infinity. @@ -3700,6 +3675,28 @@ static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS, break; } } + } + if (C->isZero()) { + switch (Pred) { + case FCmpInst::FCMP_OGE: + if (FMF.noNaNs() && CannotBeOrderedLessThanZero(LHS, Q.TLI)) + return getTrue(RetTy); + break; + case FCmpInst::FCMP_UGE: + if (CannotBeOrderedLessThanZero(LHS, Q.TLI)) + return getTrue(RetTy); + break; + case FCmpInst::FCMP_ULT: + if (FMF.noNaNs() && CannotBeOrderedLessThanZero(LHS, Q.TLI)) + return getFalse(RetTy); + break; + case FCmpInst::FCMP_OLT: + if (CannotBeOrderedLessThanZero(LHS, Q.TLI)) + return getFalse(RetTy); + break; + default: + break; + } } else if (C->isNegative()) { assert(!C->isNaN() && "Unexpected NaN constant!"); // TODO: We can catch more cases by using a range check rather than diff --git a/test/Transforms/InstSimplify/floating-point-compare.ll b/test/Transforms/InstSimplify/floating-point-compare.ll index 5ce56e029d3..77db0522c98 100644 --- a/test/Transforms/InstSimplify/floating-point-compare.ll +++ b/test/Transforms/InstSimplify/floating-point-compare.ll @@ -399,7 +399,9 @@ define <2 x i1> @fabs_is_not_negative_poszero(<2 x float> %V) { define <2 x i1> @fabs_is_not_negative_anyzero(<2 x float> %V) { ; CHECK-LABEL: @fabs_is_not_negative_anyzero( -; CHECK-NEXT: ret <2 x i1> zeroinitializer +; CHECK-NEXT: [[ABS:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> [[V:%.*]]) +; CHECK-NEXT: [[CMP:%.*]] = fcmp olt <2 x float> [[ABS]], +; CHECK-NEXT: ret <2 x i1> [[CMP]] ; %abs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %V) %cmp = fcmp olt <2 x float> %abs, @@ -408,7 +410,9 @@ define <2 x i1> @fabs_is_not_negative_anyzero(<2 x float> %V) { define <3 x i1> @fabs_is_not_negative_negzero_undef(<3 x float> %V) { ; CHECK-LABEL: @fabs_is_not_negative_negzero_undef( -; CHECK-NEXT: ret <3 x i1> zeroinitializer +; CHECK-NEXT: [[ABS:%.*]] = call <3 x float> @llvm.fabs.v3f32(<3 x float> [[V:%.*]]) +; CHECK-NEXT: [[CMP:%.*]] = fcmp olt <3 x float> [[ABS]], +; CHECK-NEXT: ret <3 x i1> [[CMP]] ; %abs = call <3 x float> @llvm.fabs.v3f32(<3 x float> %V) %cmp = fcmp olt <3 x float> %abs, @@ -417,7 +421,9 @@ define <3 x i1> @fabs_is_not_negative_negzero_undef(<3 x float> %V) { define <3 x i1> @fabs_is_not_negative_poszero_undef(<3 x float> %V) { ; CHECK-LABEL: @fabs_is_not_negative_poszero_undef( -; CHECK-NEXT: ret <3 x i1> zeroinitializer +; CHECK-NEXT: [[ABS:%.*]] = call <3 x float> @llvm.fabs.v3f32(<3 x float> [[V:%.*]]) +; CHECK-NEXT: [[CMP:%.*]] = fcmp olt <3 x float> [[ABS]], +; CHECK-NEXT: ret <3 x i1> [[CMP]] ; %abs = call <3 x float> @llvm.fabs.v3f32(<3 x float> %V) %cmp = fcmp olt <3 x float> %abs, @@ -426,7 +432,9 @@ define <3 x i1> @fabs_is_not_negative_poszero_undef(<3 x float> %V) { define <3 x i1> @fabs_is_not_negative_anyzero_undef(<3 x float> %V) { ; CHECK-LABEL: @fabs_is_not_negative_anyzero_undef( -; CHECK-NEXT: ret <3 x i1> zeroinitializer +; CHECK-NEXT: [[ABS:%.*]] = call <3 x float> @llvm.fabs.v3f32(<3 x float> [[V:%.*]]) +; CHECK-NEXT: [[CMP:%.*]] = fcmp olt <3 x float> [[ABS]], +; CHECK-NEXT: ret <3 x i1> [[CMP]] ; %abs = call <3 x float> @llvm.fabs.v3f32(<3 x float> %V) %cmp = fcmp olt <3 x float> %abs,