Changes in directory llvm/lib/CodeGen/SelectionDAG:
DAGCombiner.cpp updated: 1.277 -> 1.278 --- Log message: A couple of bug fixes for reducing load width xform: 1. Address offset is in bytes. 2. Make sure truncate node uses are replaced with new load. --- Diffs of the changes: (+16 -7) DAGCombiner.cpp | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.277 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.278 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.277 Wed Mar 21 20:54:19 2007 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Mar 22 21:16:52 2007 @@ -2017,8 +2017,11 @@ // fold (sext (truncate (srl (load x), c))) -> (sext (smaller load (x+c/n))) if (N0.getOpcode() == ISD::TRUNCATE) { SDOperand NarrowLoad = ReduceLoadWidth(N0.Val); - if (NarrowLoad.Val) - N0 = NarrowLoad; + if (NarrowLoad.Val) { + if (NarrowLoad.Val != N0.Val) + CombineTo(N0.Val, NarrowLoad); + return DAG.getNode(ISD::SIGN_EXTEND, VT, NarrowLoad); + } } // See if the value being truncated is already sign extended. If so, just @@ -2109,8 +2112,11 @@ // fold (zext (truncate (srl (load x), c))) -> (zext (small load (x+c/n))) if (N0.getOpcode() == ISD::TRUNCATE) { SDOperand NarrowLoad = ReduceLoadWidth(N0.Val); - if (NarrowLoad.Val) - N0 = NarrowLoad; + if (NarrowLoad.Val) { + if (NarrowLoad.Val != N0.Val) + CombineTo(N0.Val, NarrowLoad); + return DAG.getNode(ISD::ZERO_EXTEND, VT, NarrowLoad); + } } // fold (zext (truncate x)) -> (and x, mask) @@ -2189,8 +2195,11 @@ // fold (aext (truncate (srl (load x), c))) -> (aext (small load (x+c/n))) if (N0.getOpcode() == ISD::TRUNCATE) { SDOperand NarrowLoad = ReduceLoadWidth(N0.Val); - if (NarrowLoad.Val) - N0 = NarrowLoad; + if (NarrowLoad.Val) { + if (NarrowLoad.Val != N0.Val) + CombineTo(N0.Val, NarrowLoad); + return DAG.getNode(ISD::ANY_EXTEND, VT, NarrowLoad); + } } // fold (aext (truncate x)) @@ -2278,7 +2287,7 @@ N0 = N0.getOperand(0); if (MVT::getSizeInBits(N0.getValueType()) <= EVTBits) return SDOperand(); - ShAmt /= EVTBits; + ShAmt /= 8; } } } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits