Implement sub.ll:test17, -X/C -> X/-C
authorChris Lattner <sabre@nondot.org>
Sat, 9 Oct 2004 02:50:40 +0000 (02:50 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 9 Oct 2004 02:50:40 +0000 (02:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16863 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 5b477b3a409753f54477002f81fa830c95f16527..f663ae6137f3a2063e2c7180a0a0bd77a3b8ba54 100644 (file)
@@ -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;