mirror of
https://github.com/RPCS3/llvm.git
synced 2026-08-26 18:26:51 -04:00
[InstCombine] simplify code for X * -1.0 --> -X; NFC
I've added random FMF to one of the tests to show those are propagated. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@326377 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -563,13 +563,9 @@ Instruction *InstCombiner::visitFMul(BinaryOperator &I) {
|
||||
if (match(Op0, m_FNeg(m_Value(X))))
|
||||
return BinaryOperator::CreateFMulFMF(X, ConstantExpr::getFNeg(C), &I);
|
||||
|
||||
// (fmul X, -1.0) --> (fsub -0.0, X)
|
||||
if (match(C, m_SpecificFP(-1.0))) {
|
||||
Constant *NegZero = ConstantFP::getNegativeZero(Op1->getType());
|
||||
Instruction *RI = BinaryOperator::CreateFSub(NegZero, Op0);
|
||||
RI->copyFastMathFlags(&I);
|
||||
return RI;
|
||||
}
|
||||
// X * -1.0 --> -X
|
||||
if (match(C, m_SpecificFP(-1.0)))
|
||||
return BinaryOperator::CreateFNegFMF(Op0, &I);
|
||||
|
||||
if (AllowReassociate && C->isFiniteNonZeroFP()) {
|
||||
// Let MDC denote an expression in one of these forms:
|
||||
|
||||
@@ -153,10 +153,10 @@ define float @test9(float %x) {
|
||||
; PR18532
|
||||
define <4 x float> @test10(<4 x float> %x) {
|
||||
; CHECK-LABEL: @test10(
|
||||
; CHECK-NEXT: [[MUL:%.*]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, [[X:%.*]]
|
||||
; CHECK-NEXT: [[MUL:%.*]] = fsub arcp afn <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, [[X:%.*]]
|
||||
; CHECK-NEXT: ret <4 x float> [[MUL]]
|
||||
;
|
||||
%mul = fmul <4 x float> %x, <float -1.0, float -1.0, float -1.0, float -1.0>
|
||||
%mul = fmul arcp afn <4 x float> %x, <float -1.0, float -1.0, float -1.0, float -1.0>
|
||||
ret <4 x float> %mul
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user