[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