summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2012-11-13 00:34:44 +0000
committerAndrew Trick <atrick@apple.com>2012-11-13 00:34:44 +0000
commitedac22a9f3b1355c01ae4fb66958e93db2387ffb (patch)
treea329a9b019c92f7780a9a528e39be8c01c421006 /llvm/lib/CodeGen
parent3d699e02ae3912a987d60aa516bb0af718367889 (diff)
downloadbcm5719-llvm-edac22a9f3b1355c01ae4fb66958e93db2387ffb.tar.gz
bcm5719-llvm-edac22a9f3b1355c01ae4fb66958e93db2387ffb.zip
Cleanup the main RegisterCoalescer loop.
Block priorities still apply outside loops. llvm-svn: 167793
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/RegisterCoalescer.cpp33
1 files changed, 10 insertions, 23 deletions
diff --git a/llvm/lib/CodeGen/RegisterCoalescer.cpp b/llvm/lib/CodeGen/RegisterCoalescer.cpp
index 7d69176729d..57aa6f95ad3 100644
--- a/llvm/lib/CodeGen/RegisterCoalescer.cpp
+++ b/llvm/lib/CodeGen/RegisterCoalescer.cpp
@@ -2001,30 +2001,17 @@ void RegisterCoalescer::joinAllIntervals() {
DEBUG(dbgs() << "********** JOINING INTERVALS ***********\n");
assert(WorkList.empty() && "Old data still around.");
- if (Loops->empty()) {
- // If there are no loops in the function, join intervals in function order.
- for (MachineFunction::iterator I = MF->begin(), E = MF->end();
- I != E; ++I)
- copyCoalesceInMBB(I);
- } else {
- // Otherwise, join intervals in inner loops before other intervals.
- // Unfortunately we can't just iterate over loop hierarchy here because
- // there may be more MBB's than BB's. Collect MBB's for sorting.
-
- // Join intervals in the function prolog first. We want to join physical
- // registers with virtual registers before the intervals got too long.
- std::vector<MBBPriorityInfo> MBBs;
- for (MachineFunction::iterator I = MF->begin(), E = MF->end();I != E;++I){
- MachineBasicBlock *MBB = I;
- MBBs.push_back(MBBPriorityInfo(MBB, Loops->getLoopDepth(MBB),
- isSplitEdge(MBB)));
- }
- std::sort(MBBs.begin(), MBBs.end(), MBBPriorityCompare());
-
- // Finally, join intervals in loop nest order.
- for (unsigned i = 0, e = MBBs.size(); i != e; ++i)
- copyCoalesceInMBB(MBBs[i].MBB);
+ std::vector<MBBPriorityInfo> MBBs;
+ for (MachineFunction::iterator I = MF->begin(), E = MF->end();I != E;++I){
+ MachineBasicBlock *MBB = I;
+ MBBs.push_back(MBBPriorityInfo(MBB, Loops->getLoopDepth(MBB),
+ isSplitEdge(MBB)));
}
+ std::sort(MBBs.begin(), MBBs.end(), MBBPriorityCompare());
+
+ // Coalesce intervals in MBB priority order.
+ for (unsigned i = 0, e = MBBs.size(); i != e; ++i)
+ copyCoalesceInMBB(MBBs[i].MBB);
// Joining intervals can allow other intervals to be joined. Iteratively join
// until we make no progress.
OpenPOWER on IntegriCloud