Changes in directory llvm/lib/CodeGen/SelectionDAG:

DAGCombiner.cpp updated: 1.278 -> 1.279
---
Log message:

Also replace uses of SRL if that's also folded during ReduceLoadWidth().

---
Diffs of the changes:  (+8 -1)

 DAGCombiner.cpp |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.278 
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.279
--- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.278 Thu Mar 22 21:16:52 2007
+++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp       Fri Mar 23 15:55:21 2007
@@ -2279,6 +2279,7 @@
 
   unsigned EVTBits = MVT::getSizeInBits(EVT);
   unsigned ShAmt = 0;
+  bool CombineSRL =  false;
   if (N0.getOpcode() == ISD::SRL && N0.hasOneUse()) {
     if (ConstantSDNode *N01 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
       ShAmt = N01->getValue();
@@ -2288,6 +2289,7 @@
         if (MVT::getSizeInBits(N0.getValueType()) <= EVTBits)
           return SDOperand();
         ShAmt /= 8;
+        CombineSRL = true;
       }
     }
   }
@@ -2317,7 +2319,12 @@
       : DAG.getExtLoad(ExtType, VT, LN0->getChain(), NewPtr,
                        LN0->getSrcValue(), LN0->getSrcValueOffset(), EVT);
     AddToWorkList(N);
-    CombineTo(N0.Val, Load, Load.getValue(1));
+    if (CombineSRL) {
+      std::vector<SDNode*> NowDead;
+      DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), Load.getValue(1), NowDead);
+      CombineTo(N->getOperand(0).Val, Load);
+    } else
+      CombineTo(N0.Val, Load, Load.getValue(1));
     if (ShAmt)
       return DAG.getNode(N->getOpcode(), VT, Load);
     return SDOperand(N, 0);   // Return N so it doesn't get rechecked!



_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to