diff options
author | Andrew Trick <atrick@apple.com> | 2012-04-24 18:04:37 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-04-24 18:04:37 +0000 |
commit | c3ea00565f18ea04b23e135c44d3cdd165252db5 (patch) | |
tree | 329eb17715fd074fe7b0f038b3008d1814c11051 /llvm/lib/CodeGen/MachineScheduler.cpp | |
parent | cc45a283207f969ca3d9091dd07569f87bd5c462 (diff) | |
download | bcm5719-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.cpp | 25 |
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; } //===----------------------------------------------------------------------===// |