Changes in directory llvm/lib/Transforms/Scalar:
InstructionCombining.cpp updated: 1.447 -> 1.448 --- Log message: Canonicalize (X+C1)*C2 -> X*C2+C1*C2 This implements Transforms/InstCombine/add.ll:test31 --- Diffs of the changes: (+13 -0) InstructionCombining.cpp | 13 +++++++++++++ 1 files changed, 13 insertions(+) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.447 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.448 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.447 Thu Mar 2 19:34:17 2006 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Sat Mar 4 00:04:02 2006 @@ -1622,6 +1622,19 @@ if (Op1F->getValue() == 1.0) return ReplaceInstUsesWith(I, Op0); // Eliminate 'mul double %X, 1.0' } + + if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0)) + if (Op0I->getOpcode() == Instruction::Add && Op0I->hasOneUse() && + isa<ConstantInt>(Op0I->getOperand(1))) { + // Canonicalize (X+C1)*C2 -> X*C2+C1*C2. + Instruction *Add = BinaryOperator::createMul(Op0I->getOperand(0), + Op1, "tmp"); + InsertNewInstBefore(Add, I); + Value *C1C2 = ConstantExpr::getMul(Op1, + cast<Constant>(Op0I->getOperand(1))); + return BinaryOperator::createAdd(Add, C1C2); + + } // Try to fold constant mul into select arguments. if (SelectInst *SI = dyn_cast<SelectInst>(Op0)) _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits