diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2014-01-18 16:43:14 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2014-01-18 16:43:14 +0000 |
commit | 8e937c39bb389e9aeb92467b99e76373bf547bab (patch) | |
tree | 0abf27aeace1eb1ff1b92912ae00a16fdc1a5006 | |
parent | bedf842b78d00dc481a83edf7f1a3ca5f21a3805 (diff) | |
download | llvm-8e937c39bb389e9aeb92467b99e76373bf547bab.tar.gz llvm-8e937c39bb389e9aeb92467b99e76373bf547bab.tar.bz2 llvm-8e937c39bb389e9aeb92467b99e76373bf547bab.tar.xz |
InstCombine: Make the (fmul X, -1.0) -> (fsub -0.0, X) transform handle vectors too.
PR18532.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199553 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/InstCombine/InstCombineMulDivRem.cpp | 10 | ||||
-rw-r--r-- | test/Transforms/InstCombine/fmul.ll | 9 |
2 files changed, 13 insertions, 6 deletions
diff --git a/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp b/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp index f61d82340b..2fcd003bcb 100644 --- a/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp +++ b/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp @@ -425,17 +425,15 @@ Instruction *InstCombiner::visitFMul(BinaryOperator &I) { if (Instruction *NV = FoldOpIntoPhi(I)) return NV; - ConstantFP *C = dyn_cast<ConstantFP>(Op1); - // (fmul X, -1.0) --> (fsub -0.0, X) - if (C && C->isExactlyValue(-1.0)) { - Instruction *RI = BinaryOperator::CreateFSub( - ConstantFP::getNegativeZero(C->getType()), - Op0); + if (match(Op1, m_SpecificFP(-1.0))) { + Constant *NegZero = ConstantFP::getNegativeZero(Op1->getType()); + Instruction *RI = BinaryOperator::CreateFSub(NegZero, Op0); RI->copyFastMathFlags(&I); return RI; } + ConstantFP *C = dyn_cast<ConstantFP>(Op1); if (C && AllowReassociate && C->getValueAPF().isFiniteNonZero()) { // Let MDC denote an expression in one of these forms: // X * C, C/X, X/C, where C is a constant. diff --git a/test/Transforms/InstCombine/fmul.ll b/test/Transforms/InstCombine/fmul.ll index 0b4a90d88f..fdfc8df0a2 100644 --- a/test/Transforms/InstCombine/fmul.ll +++ b/test/Transforms/InstCombine/fmul.ll @@ -104,3 +104,12 @@ define float @test9(float %x) { ; CHECK: fsub } +; PR18532 +define <4 x float> @test10(<4 x float> %x) { + %mul = fmul <4 x float> %x, <float -1.0, float -1.0, float -1.0, float -1.0> + ret <4 x float> %mul + +; CHECK-LABEL: @test10( +; CHECK-NOT: fmul +; CHECK: fsub +} |