Changes in directory llvm/lib/CodeGen/SelectionDAG:
DAGCombiner.cpp updated: 1.198 -> 1.199 --- Log message: Fix chain dropping in load and drop unused stores in ret blocks. --- Diffs of the changes: (+14 -7) DAGCombiner.cpp | 21 ++++++++++++++------- 1 files changed, 14 insertions(+), 7 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.198 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.199 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.198 Mon Sep 25 11:29:54 2006 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Mon Sep 25 14:32:58 2006 @@ -2650,13 +2650,13 @@ SDOperand ReplLoad = DAG.getLoad(N->getValueType(0), BetterChain, Ptr, SrcValue); - // Replace uses with token. - CombineTo(N, ReplLoad.getValue(0), ReplLoad.getValue(1)); - - // Old chain needs to be cleaned up. - AddToWorkList(Chain.Val); - - // Don't recombine on token. + // Create token factor to keep chain around. + SDOperand Token = DAG.getNode(ISD::TokenFactor, MVT::Other, + Chain, ReplLoad.getValue(1)); + + // Replace uses with load and token factor. + CombineTo(N, ReplLoad.getValue(0), Token); + return SDOperand(N, 0); } } @@ -2712,6 +2712,13 @@ } if (CombinerAA) { + // If the store ptr is a frame index and the frame index has a use of one + // and this is a return block, then the store is redundant. + if (Ptr.hasOneUse() && isa<FrameIndexSDNode>(Ptr) && + DAG.getRoot().getOpcode() == ISD::RET) { + return Chain; + } + // Walk up chain skipping non-aliasing memory nodes. SDOperand BetterChain = FindBetterChain(N, Chain); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits