diff options
author | Chris Lattner <sabre@nondot.org> | 2008-02-18 17:50:16 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-02-18 17:50:16 +0000 |
commit | 1e3c501cb8ac34110f53a2315d2afa7632be9d9e (patch) | |
tree | dc30a806367801a9257ed1c2367be7570672da44 /llvm/lib | |
parent | 0af56010288ca9862ec99d781119742065cee705 (diff) | |
download | bcm5719-llvm-1e3c501cb8ac34110f53a2315d2afa7632be9d9e.tar.gz bcm5719-llvm-1e3c501cb8ac34110f53a2315d2afa7632be9d9e.zip |
Transforming -A + -B --> -(A + B) isn't safe for FP, thanks
to Dale for noticing this!
llvm-svn: 47276
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Scalar/InstructionCombining.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp index 9d0990f51b8..f89d1f2aeee 100644 --- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp @@ -2092,10 +2092,12 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) { // -A + B --> B - A // -A + -B --> -(A + B) if (Value *LHSV = dyn_castNegVal(LHS)) { - if (Value *RHSV = dyn_castNegVal(RHS)) { - Instruction *NewAdd = BinaryOperator::createAdd(LHSV, RHSV, "sum"); - InsertNewInstBefore(NewAdd, I); - return BinaryOperator::createNeg(NewAdd); + if (LHS->getType()->isIntOrIntVector()) { + if (Value *RHSV = dyn_castNegVal(RHS)) { + Instruction *NewAdd = BinaryOperator::createAdd(LHSV, RHSV, "sum"); + InsertNewInstBefore(NewAdd, I); + return BinaryOperator::createNeg(NewAdd); + } } return BinaryOperator::createSub(RHS, LHSV); |