Implement InstCombine/add.ll:test21
authorChris Lattner <sabre@nondot.org>
Sun, 27 Jun 2004 22:51:36 +0000 (22:51 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 27 Jun 2004 22:51:36 +0000 (22:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14443 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 826e2c765e7b92a10aa11d262aa84c323ca8bb10..28e2eec0b41e5736c1654c2642dd23f886c7f5ec 100644 (file)
@@ -1520,10 +1520,15 @@ Instruction *InstCombiner::visitSetCondInst(BinaryOperator &I) {
       if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Op0)) {
         switch (BO->getOpcode()) {
         case Instruction::Add:
-          if (CI->isNullValue()) {
+          // Replace ((add A, B) != C) with (A != C-B) if B & C are constants.
+          if (ConstantInt *BOp1C = dyn_cast<ConstantInt>(BO->getOperand(1))) {
+            return new SetCondInst(I.getOpcode(), BO->getOperand(0),
+                                   ConstantExpr::getSub(CI, BOp1C));
+          } else if (CI->isNullValue()) {
             // Replace ((add A, B) != 0) with (A != -B) if A or B is
             // efficiently invertible, or if the add has just this one use.
             Value *BOp0 = BO->getOperand(0), *BOp1 = BO->getOperand(1);
+            
             if (Value *NegVal = dyn_castNegVal(BOp1))
               return new SetCondInst(I.getOpcode(), BOp0, NegVal);
             else if (Value *NegVal = dyn_castNegVal(BOp0))