[llvm] r346321 - [InstCombine] add fold for fabs(X) u< 0.0
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 7 07:11:32 PST 2018
Author: spatel
Date: Wed Nov 7 07:11:32 2018
New Revision: 346321
URL: http://llvm.org/viewvc/llvm-project?rev=346321&view=rev
Log:
[InstCombine] add fold for fabs(X) u< 0.0
The sibling fold for 'oge' --> 'ord' was already here,
but this half was missing.
The result of fabs() must be positive or nan, so asking
if the result is negative or nan is the same as asking
if the result is nan.
This is another step towards fixing:
https://bugs.llvm.org/show_bug.cgi?id=39475
Modified:
llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/trunk/test/Transforms/InstCombine/fcmp.ll
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp?rev=346321&r1=346320&r2=346321&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Wed Nov 7 07:11:32 2018
@@ -5311,6 +5311,11 @@ static Instruction *foldFabsWithFcmpZero
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:
Modified: llvm/trunk/test/Transforms/InstCombine/fcmp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/fcmp.ll?rev=346321&r1=346320&r2=346321&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/fcmp.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/fcmp.ll Wed Nov 7 07:11:32 2018
@@ -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)
More information about the llvm-commits
mailing list