[InstCombine] propagate fast-math-flags when folding fcmp+fpext, part 2
authorSanjay Patel <spatel@rotateright.com>
Tue, 6 Nov 2018 16:45:27 +0000 (16:45 +0000)
committerSanjay Patel <spatel@rotateright.com>
Tue, 6 Nov 2018 16:45:27 +0000 (16:45 +0000)
llvm-svn: 346242

llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/test/Transforms/InstCombine/fcmp.ll

index e8e78d2e6527c3d2373dc30fd5519d1c07497e89..62493decb4a1ae9f02295a1c7ec3e07bb1ef5c46 100644 (file)
@@ -5483,9 +5483,12 @@ Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) {
       Fabs.clearSign();
       if (!Lossy &&
           ((Fabs.compare(APFloat::getSmallestNormalized(FPSem)) !=
-            APFloat::cmpLessThan) || Fabs.isZero()))
-        // TODO: Propagate FMF.
-        return new FCmpInst(Pred, X, ConstantFP::get(C->getContext(), F));
+            APFloat::cmpLessThan) || Fabs.isZero())) {
+        Instruction *NewFCmp =
+            new FCmpInst(Pred, X, ConstantFP::get(C->getContext(), F));
+        NewFCmp->copyFastMathFlags(&I);
+        return NewFCmp;
+      }
     }
   }
 
index b72adc19a8eb959e1f202e6285b7c4eec24155fc..8ba4dd2515706779b0510cb382604af5d444af45 100644 (file)
@@ -18,7 +18,7 @@ define i1 @test1(float %x, float %y) {
 
 define i1 @test2(float %a) {
 ; CHECK-LABEL: @test2(
-; CHECK-NEXT:    [[CMP:%.*]] = fcmp ogt float [[A:%.*]], 1.000000e+00
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp ninf ogt float [[A:%.*]], 1.000000e+00
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %ext = fpext float %a to double