summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/MachineScheduler.cpp
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2012-04-24 18:04:37 +0000
committerAndrew Trick <atrick@apple.com>2012-04-24 18:04:37 +0000
commitc3ea00565f18ea04b23e135c44d3cdd165252db5 (patch)
tree329eb17715fd074fe7b0f038b3008d1814c11051 /llvm/lib/CodeGen/MachineScheduler.cpp
parentcc45a283207f969ca3d9091dd07569f87bd5c462 (diff)
downloadbcm5719-llvm-c3ea00565f18ea04b23e135c44d3cdd165252db5.tar.gz
bcm5719-llvm-c3ea00565f18ea04b23e135c44d3cdd165252db5.zip
misched: try (not too hard) to place debug values where they belong
llvm-svn: 155458
Diffstat (limited to 'llvm/lib/CodeGen/MachineScheduler.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineScheduler.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineScheduler.cpp b/llvm/lib/CodeGen/MachineScheduler.cpp
index 6c2e07cb521..53003d8dac7 100644
--- a/llvm/lib/CodeGen/MachineScheduler.cpp
+++ b/llvm/lib/CodeGen/MachineScheduler.cpp
@@ -359,6 +359,8 @@ protected:
void releaseSuccessors(SUnit *SU);
void releasePred(SUnit *SU, SDep *PredEdge);
void releasePredecessors(SUnit *SU);
+
+ void placeDebugValues();
};
} // namespace
@@ -526,6 +528,29 @@ void ScheduleDAGMI::schedule() {
SU->isScheduled = true;
}
assert(CurrentTop == CurrentBottom && "Nonempty unscheduled zone.");
+
+ placeDebugValues();
+}
+
+/// Reinsert any remaining debug_values, just like the PostRA scheduler.
+void ScheduleDAGMI::placeDebugValues() {
+ // If first instruction was a DBG_VALUE then put it back.
+ if (FirstDbgValue) {
+ BB->splice(RegionBegin, BB, FirstDbgValue);
+ RegionBegin = FirstDbgValue;
+ }
+
+ for (std::vector<std::pair<MachineInstr *, MachineInstr *> >::iterator
+ DI = DbgValues.end(), DE = DbgValues.begin(); DI != DE; --DI) {
+ std::pair<MachineInstr *, MachineInstr *> P = *prior(DI);
+ MachineInstr *DbgValue = P.first;
+ MachineBasicBlock::iterator OrigPrevMI = P.second;
+ BB->splice(++OrigPrevMI, BB, DbgValue);
+ if (OrigPrevMI == llvm::prior(RegionEnd))
+ RegionEnd = DbgValue;
+ }
+ DbgValues.clear();
+ FirstDbgValue = NULL;
}
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud