When unfolding a load during scheduling, the new operator node has
authorDan Gohman <gohman@apple.com>
Mon, 23 Mar 2009 20:20:43 +0000 (20:20 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 23 Mar 2009 20:20:43 +0000 (20:20 +0000)
a data dependency on the load node, so it really needs a
data-dependence edge to the load node, even if the load previously
existed.

And add a few comments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67554 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp

index 8e449971db333b96d61760d8bf75d79fa86c33a0..705e4de272a3e6a8f87d0391165eb0f2675c7021 100644 (file)
@@ -410,6 +410,7 @@ SUnit *ScheduleDAGRRList::CopyAndMoveSuccessors(SUnit *SU) {
       NewSU->isCommutable = true;
     ComputeLatency(NewSU);
 
+    // Record all the edges to and from the old SU, by category.
     SmallVector<SDep, 4> ChainPreds;
     SmallVector<SDep, 4> ChainSuccs;
     SmallVector<SDep, 4> LoadPreds;
@@ -433,6 +434,7 @@ SUnit *ScheduleDAGRRList::CopyAndMoveSuccessors(SUnit *SU) {
         NodeSuccs.push_back(*I);
     }
 
+    // Now assign edges to the newly-created nodes.
     for (unsigned i = 0, e = ChainPreds.size(); i != e; ++i) {
       const SDep &Pred = ChainPreds[i];
       RemovePred(SU, Pred);
@@ -468,9 +470,10 @@ SUnit *ScheduleDAGRRList::CopyAndMoveSuccessors(SUnit *SU) {
         AddPred(SuccDep, D);
       }
     } 
-    if (isNewLoad) {
-      AddPred(NewSU, SDep(LoadSU, SDep::Order, LoadSU->Latency));
-    }
+
+    // Add a data dependency to reflect that NewSU reads the value defined
+    // by LoadSU.
+    AddPred(NewSU, SDep(LoadSU, SDep::Data, LoadSU->Latency));
 
     if (isNewLoad)
       AvailableQueue->addNode(LoadSU);