Instcombine: X * -1 -> -X
authorChris Lattner <sabre@nondot.org>
Wed, 25 Jun 2003 17:09:20 +0000 (17:09 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 25 Jun 2003 17:09:20 +0000 (17:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6904 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 505313ba9c3e26b2ae2eb3ce9a08f992b7e54ec6..696575e3d6b981680c2ae0351f6a7a42926d560a 100644 (file)
@@ -361,10 +361,11 @@ Instruction *InstCombiner::visitMul(BinaryOperator &I) {
   if (Constant *Op1 = dyn_cast<Constant>(I.getOperand(1))) {
     if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) {
       const Type *Ty = CI->getType();
-      uint64_t Val = Ty->isSigned() ?
-                          (uint64_t)cast<ConstantSInt>(CI)->getValue() : 
-                                    cast<ConstantUInt>(CI)->getValue();
+      int64_t Val = Ty->isSigned() ?        cast<ConstantSInt>(CI)->getValue() :
+                                   (int64_t)cast<ConstantUInt>(CI)->getValue();
       switch (Val) {
+      case -1:                               // X * -1 -> -X
+        return BinaryOperator::createNeg(Op0, I.getName());
       case 0:
         return ReplaceInstUsesWith(I, Op1);  // Eliminate 'mul double %X, 0'
       case 1: