diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp | 5 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/fcmp.ll | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp index c6dbfd92844..d5164222321 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp @@ -5311,6 +5311,11 @@ static Instruction *foldFabsWithFcmpZero(FCmpInst &I) { assert(!I.hasNoNaNs() && "fcmp should have simplified"); return new FCmpInst(FCmpInst::FCMP_ORD, X, I.getOperand(1)); + case FCmpInst::FCMP_ULT: + // fabs(X) u< 0.0 --> isnan(X) + assert(!I.hasNoNaNs() && "fcmp should have simplified"); + return new FCmpInst(FCmpInst::FCMP_UNO, X, I.getOperand(1)); + case FCmpInst::FCMP_OEQ: case FCmpInst::FCMP_UEQ: case FCmpInst::FCMP_ONE: diff --git a/llvm/test/Transforms/InstCombine/fcmp.ll b/llvm/test/Transforms/InstCombine/fcmp.ll index e14a56bbcb2..c49ed262ab8 100644 --- a/llvm/test/Transforms/InstCombine/fcmp.ll +++ b/llvm/test/Transforms/InstCombine/fcmp.ll @@ -219,8 +219,7 @@ define i1 @fabs_oge(double %a) { define i1 @fabs_ult(double %a) { ; CHECK-LABEL: @fabs_ult( -; CHECK-NEXT: [[CALL:%.*]] = call double @llvm.fabs.f64(double [[A:%.*]]) -; CHECK-NEXT: [[CMP:%.*]] = fcmp reassoc arcp ult double [[CALL]], 0.000000e+00 +; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double [[A:%.*]], 0.000000e+00 ; CHECK-NEXT: ret i1 [[CMP]] ; %call = call double @llvm.fabs.f64(double %a) |