diff options
author | Dan Gohman <gohman@apple.com> | 2009-03-23 20:20:43 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-03-23 20:20:43 +0000 |
commit | ed0e8d44ce684962c27536d8e52108a1f258c678 (patch) | |
tree | 8c268626fe3e68125e46c25abe82bece06c15d73 /llvm/lib | |
parent | 673a4eef07c28da72c4aa0c2e7ce6b98ff55ef0a (diff) | |
download | bcm5719-llvm-ed0e8d44ce684962c27536d8e52108a1f258c678.tar.gz bcm5719-llvm-ed0e8d44ce684962c27536d8e52108a1f258c678.zip |
When unfolding a load during scheduling, the new operator node has
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.
llvm-svn: 67554
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp index 8e449971db3..705e4de272a 100644 --- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp @@ -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); |