Skip to content

Commit 631f066

Browse files
committed
Refactor logic and add additional tests
1 parent dbf9870 commit 631f066

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2759,9 +2759,10 @@ static Instruction *foldFNegIntoConstant(Instruction &I, const DataLayout &DL) {
27592759
// -(X * C) --> X * (-C)
27602760
if (match(FNegOp, m_FMul(m_Value(X), m_Constant(C))))
27612761
if (Constant *NegC = ConstantFoldUnaryOpOperand(Instruction::FNeg, C, DL)) {
2762-
FastMathFlags Flag = I.getFastMathFlags() | FNegOp->getFastMathFlags();
2763-
Flag.setNoInfs(I.getFastMathFlags().noInfs() &&
2764-
FNegOp->getFastMathFlags().noInfs());
2762+
FastMathFlags FMF = I.getFastMathFlags();
2763+
FastMathFlags OpFMF = FNegOp->getFastMathFlags();
2764+
FastMathFlags Flag = FMF | OpFMF;
2765+
Flag.setNoInfs(FMF.noInfs() && OpFMF.noInfs());
27652766
return BinaryOperator::CreateFMulFMF(X, NegC, Flag);
27662767
}
27672768
// -(X / C) --> X / (-C)

llvm/test/Transforms/InstCombine/fneg.ll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1233,4 +1233,14 @@ define <2 x float> @test_fneg_nnan_ninf_mul_with_vec_const(<2 x float> %a) {
12331233
ret <2 x float> %f2
12341234
}
12351235

1236+
define <2 x float> @test_fneg_nnan_ninf_mul_ninf_with_vec_const(<2 x float> %a) {
1237+
; CHECK-LABEL: @test_fneg_nnan_ninf_mul_ninf_with_vec_const(
1238+
; CHECK-NEXT: [[F2:%.*]] = fmul nnan ninf <2 x float> [[A:%.*]], <float -0.000000e+00, float 0.000000e+00>
1239+
; CHECK-NEXT: ret <2 x float> [[F2]]
1240+
;
1241+
%f1 = fmul ninf <2 x float> %a, <float 0.000000, float -0.000000>
1242+
%f2 = fneg nnan ninf <2 x float> %f1
1243+
ret <2 x float> %f2
1244+
}
1245+
12361246
!0 = !{}

0 commit comments

Comments
 (0)