diff options
author | Andrew Trick <atrick@apple.com> | 2013-08-30 04:36:57 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2013-08-30 04:36:57 +0000 |
commit | 2bc74c2887d7a67a70d13e58b9411087f4df77ed (patch) | |
tree | e7366c4800f69729298f329c8bc4dbbcb7c89317 /llvm/lib/CodeGen/ScheduleDAGInstrs.cpp | |
parent | ff60477306946ea9ddaa1c51fc007394d5549b92 (diff) | |
download | bcm5719-llvm-2bc74c2887d7a67a70d13e58b9411087f4df77ed.tar.gz bcm5719-llvm-2bc74c2887d7a67a70d13e58b9411087f4df77ed.zip |
mi-sched: update PressureDiffs on-the-fly for liveness.
This removes all expensive pressure tracking logic from the scheduling
critical path of node comparison.
llvm-svn: 189643
Diffstat (limited to 'llvm/lib/CodeGen/ScheduleDAGInstrs.cpp')
-rw-r--r-- | llvm/lib/CodeGen/ScheduleDAGInstrs.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp b/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp index 9b317e30a98..33cdea6f19c 100644 --- a/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp +++ b/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp @@ -408,7 +408,13 @@ void ScheduleDAGInstrs::addVRegUseDeps(SUnit *SU, unsigned OperIdx) { unsigned Reg = MI->getOperand(OperIdx).getReg(); // Record this local VReg use. - VRegUses.insert(VReg2SUnit(Reg, SU)); + VReg2UseMap::iterator UI = VRegUses.find(Reg); + for (; UI != VRegUses.end(); ++UI) { + if (UI->SU == SU) + break; + } + if (UI == VRegUses.end()) + VRegUses.insert(VReg2SUnit(Reg, SU)); // Lookup this operand's reaching definition. assert(LIS && "vreg dependencies requires LiveIntervals"); @@ -755,7 +761,7 @@ void ScheduleDAGInstrs::buildSchedGraph(AliasAnalysis *AA, if (RPTracker) { PressureDiff *PDiff = PDiffs ? &(*PDiffs)[SU->NodeNum] : 0; - RPTracker->recede(PDiff); + RPTracker->recede(/*LiveUses=*/0, PDiff); assert(RPTracker->getPos() == prior(MII) && "RPTracker can't find MI"); } |