diff options
author | Jim Laskey <jlaskey@mac.com> | 2005-12-19 16:30:13 +0000 |
---|---|---|
committer | Jim Laskey <jlaskey@mac.com> | 2005-12-19 16:30:13 +0000 |
commit | ce23987e6be1e236c41a2801c478d19d11083fce (patch) | |
tree | b9e7f9dba765c552b0950adfc9eb04499d7617cc /llvm/lib | |
parent | 7767a654b08da43025abb2c15e8643d16dd6a79d (diff) | |
download | bcm5719-llvm-ce23987e6be1e236c41a2801c478d19d11083fce.tar.gz bcm5719-llvm-ce23987e6be1e236c41a2801c478d19d11083fce.zip |
Create a strong dependency for loads following stores. This will leave a
latency period between the two.
llvm-svn: 24860
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp index 0ca2f19d5bf..efaf73c573f 100644 --- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp @@ -281,7 +281,9 @@ public: InstrStage *StageBegin; // First stage in itinerary InstrStage *StageEnd; // Last+1 stage in itinerary unsigned Latency; // Total cycles to complete instruction - bool IsCall; // Is function call + bool IsCall : 1; // Is function call + bool IsLoad : 1; // Is memory load + bool IsStore : 1; // Is memory store unsigned Slot; // Node's time slot NodeGroup *Group; // Grouping information unsigned VRBase; // Virtual register base @@ -756,6 +758,8 @@ void SimpleSched::GatherSchedulingInfo() { // Get machine opcode MachineOpCode TOpc = Node->getTargetOpcode(); NI->IsCall = TII.isCall(TOpc); + NI->IsLoad = TII.isLoad(TOpc); + NI->IsStore = TII.isStore(TOpc); if (TII.isLoad(TOpc)) NI->StageBegin = &LoadStage; else if (TII.isStore(TOpc)) NI->StageBegin = &StoreStage; @@ -857,7 +861,7 @@ void SimpleSched::PrepareNodeInfo() { /// I.E., B must wait for latency of A. bool SimpleSched::isStrongDependency(NodeInfo *A, NodeInfo *B) { // If A defines for B then it's a strong dependency - return isDefiner(A, B); + return isDefiner(A, B) || (A->IsStore && B->IsLoad); } /// isWeakDependency Return true if node A produces a result that will |