Changes in directory llvm/lib/CodeGen/SelectionDAG:
DAGCombiner.cpp updated: 1.119 -> 1.120 --- Log message: fold (mul (add x, c1), c2) -> (add (mul x, c2), c1*c2) fold (shl (add x, c1), c2) -> (add (shl x, c2), c1<<c2) This allows us to compile CodeGen/PowerPC/addi-reassoc.ll into: _test1: slwi r2, r4, 4 add r2, r2, r3 lwz r3, 36(r2) blr _test2: mulli r2, r4, 5 add r2, r2, r3 lbz r2, 11(r2) extsb r3, r2 blr instead of: _test1: addi r2, r4, 2 slwi r2, r2, 4 add r2, r3, r2 lwz r3, 4(r2) blr _test2: addi r2, r4, 2 mulli r2, r2, 5 add r2, r3, r2 lbz r2, 1(r2) extsb r3, r2 blr --- Diffs of the changes: (+14 -1) DAGCombiner.cpp | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.119 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.120 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.119 Wed Mar 1 15:47:21 2006 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Sat Mar 4 17:33:26 2006 @@ -802,7 +802,13 @@ return DAG.getNode(ISD::SHL, VT, Mul, Sh.getOperand(1)); } } - + // fold (mul (add x, c1), c2) -> (add (mul x, c2), c1*c2) + if (N1C && N0.getOpcode() == ISD::ADD && N0.Val->hasOneUse() && + isa<ConstantSDNode>(N0.getOperand(1))) { + return DAG.getNode(ISD::ADD, VT, + DAG.getNode(ISD::MUL, VT, N0.getOperand(0), N1), + DAG.getNode(ISD::MUL, VT, N0.getOperand(1), N1)); + } // reassociate mul SDOperand RMUL = ReassociateOps(ISD::MUL, N0, N1); @@ -1446,6 +1452,13 @@ if (N1C && N0.getOpcode() == ISD::SRA && N1 == N0.getOperand(1)) return DAG.getNode(ISD::AND, VT, N0.getOperand(0), DAG.getConstant(~0ULL << N1C->getValue(), VT)); + // fold (shl (add x, c1), c2) -> (add (shl x, c2), c1<<c2) + if (N1C && N0.getOpcode() == ISD::ADD && N0.Val->hasOneUse() && + isa<ConstantSDNode>(N0.getOperand(1))) { + return DAG.getNode(ISD::ADD, VT, + DAG.getNode(ISD::SHL, VT, N0.getOperand(0), N1), + DAG.getNode(ISD::SHL, VT, N0.getOperand(1), N1)); + } return SDOperand(); } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits