[llvm] r346238 - [InstCombine] propagate fast-math-flags when folding fcmp+fneg, part 2

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 6 07:58:57 PST 2018


Author: spatel
Date: Tue Nov  6 07:58:57 2018
New Revision: 346238

URL: http://llvm.org/viewvc/llvm-project?rev=346238&view=rev
Log:
[InstCombine] propagate fast-math-flags when folding fcmp+fneg, part 2

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=346238&r1=346237&r2=346238&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Tue Nov  6 07:58:57 2018
@@ -5467,9 +5467,10 @@ Instruction *InstCombiner::visitFCmpInst
   Value *X, *Y;
   if (match(Op0, m_FNeg(m_Value(X)))) {
     if (match(Op1, m_FNeg(m_Value(Y)))) {
-      // FIXME: Drops FMF.
       // fcmp pred (fneg X), (fneg Y) -> fcmp swap(pred) X, Y
-      return new FCmpInst(I.getSwappedPredicate(), X, Y);
+      Instruction *NewFCmp = new FCmpInst(I.getSwappedPredicate(), X, Y);
+      NewFCmp->copyFastMathFlags(&I);
+      return NewFCmp;
     }
 
     Constant *C;

Modified: llvm/trunk/test/Transforms/InstCombine/fcmp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/fcmp.ll?rev=346238&r1=346237&r2=346238&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/fcmp.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/fcmp.ll Tue Nov  6 07:58:57 2018
@@ -104,7 +104,7 @@ define <2 x i1> @fcmp_fneg_fmf_vec(<2 x
 
 define i1 @fneg_fneg_swap_pred(float %x, float %y) {
 ; CHECK-LABEL: @fneg_fneg_swap_pred(
-; CHECK-NEXT:    [[CMP:%.*]] = fcmp ogt float [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp nnan ogt float [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %neg1 = fsub float -0.0, %x
@@ -115,7 +115,7 @@ define i1 @fneg_fneg_swap_pred(float %x,
 
 define <2 x i1> @fneg_fneg_swap_pred_vec(<2 x float> %x, <2 x float> %y) {
 ; CHECK-LABEL: @fneg_fneg_swap_pred_vec(
-; CHECK-NEXT:    [[CMP:%.*]] = fcmp ogt <2 x float> [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp ninf ogt <2 x float> [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret <2 x i1> [[CMP]]
 ;
   %neg1 = fsub <2 x float> <float -0.0, float -0.0>, %x




More information about the llvm-commits mailing list