Changes in directory llvm/lib/CodeGen/SelectionDAG:
DAGCombiner.cpp updated: 1.97 -> 1.98 --- Log message: fold c1 << (x + c2) into (c1 << c2) << x. fix a warning. --- Diffs of the changes: (+7 -1) DAGCombiner.cpp | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.97 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.98 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.97 Sun Feb 5 01:36:48 2006 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Sun Feb 5 02:07:24 2006 @@ -838,7 +838,7 @@ if (N1.getOpcode() == ISD::SHL) { if (ConstantSDNode *SHC = dyn_cast<ConstantSDNode>(N1.getOperand(0))) { if (isPowerOf2_64(SHC->getValue())) { - SDOperand Add = DAG.getNode(ISD::ADD, VT, N1, DAG.getConstant(-1, VT)); + SDOperand Add = DAG.getNode(ISD::ADD, VT, N1,DAG.getConstant(~0ULL,VT)); WorkList.push_back(Add.Val); return DAG.getNode(ISD::AND, VT, N0, Add); } @@ -1288,6 +1288,12 @@ // fold (shl 0, x) -> 0 if (N0C && N0C->isNullValue()) return N0; + // fold (shl c1, (add x, c2)) -> (shl c1 << c2, x) + if (N0C && N1.getOpcode() == ISD::ADD && + N1.getOperand(1).getOpcode() == ISD::Constant) { + SDOperand LHS = DAG.getNode(ISD::SHL, VT, N0, N1.getOperand(1)); + return DAG.getNode(ISD::SHL, VT, LHS, N1.getOperand(0)); + } // fold (shl x, c >= size(x)) -> undef if (N1C && N1C->getValue() >= OpSizeInBits) return DAG.getNode(ISD::UNDEF, VT); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits