aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-10-09 02:50:40 +0000
committerChris Lattner <sabre@nondot.org>2004-10-09 02:50:40 +0000
commita052f8297ab4b9bdc8b3ef5bd65b95b439c3cf56 (patch)
treefc21ae8353acfea921b2ceb2b49aec3110397c22 /lib/Transforms
parent23e25632269024636ffd54de6ef1e5dddfd697fa (diff)
Implement sub.ll:test17, -X/C -> X/-C
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16863 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Scalar/InstructionCombining.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp
index 5b477b3a40..f663ae6137 100644
--- a/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -946,6 +946,11 @@ Instruction *InstCombiner::visitDiv(BinaryOperator &I) {
return new ShiftInst(Instruction::Shr, I.getOperand(0),
ConstantUInt::get(Type::UByteTy, C));
+ // -X/C -> X/-C
+ if (RHS->getType()->isSigned())
+ if (Value *LHSNeg = dyn_castNegVal(I.getOperand(0)))
+ return BinaryOperator::createDiv(LHSNeg, ConstantExpr::getNeg(RHS));
+
if (isa<PHINode>(I.getOperand(0)) && !RHS->isNullValue())
if (Instruction *NV = FoldOpIntoPhi(I))
return NV;