diff options
author | Chris Lattner <sabre@nondot.org> | 2004-10-09 02:50:40 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-10-09 02:50:40 +0000 |
commit | a052f8297ab4b9bdc8b3ef5bd65b95b439c3cf56 (patch) | |
tree | fc21ae8353acfea921b2ceb2b49aec3110397c22 /lib/Transforms | |
parent | 23e25632269024636ffd54de6ef1e5dddfd697fa (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.cpp | 5 |
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; |