[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