mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-17 03:30:28 +00:00
RegAllocGreedy: Improve live interval order in ReverseLocal mode
When allocating live intervals in linear order and all of them are local to a single basic block you get an optimal coloring. This is also true if you reverse the order, but it is not true if you sort live ranges beginnings in reverse order, change to sort live range endings in reverse order. Take the following live ranges for example: |---| |--------| |----------| |-------| They get colored suboptimally with 3 registers if you sort the live range starting points in reverse order (but optimally with live range begins in order, or live range ends in reverse order). Apparently the previous strategy was intentional because of allocation time considerations. I am having a hard time replicating these effects, while I see substantial improvements in allocation quality with this change. No testcase as none of the (in tree) targets use reverse order mode. Differential Revision: http://reviews.llvm.org/D8625 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233742 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fcadd6d973
commit
3f1ec42ec7
@ -552,7 +552,7 @@ void RAGreedy::enqueue(PQueue &CurQueue, LiveInterval *LI) {
|
||||
// Allocating bottom up may allow many short LRGs to be assigned first
|
||||
// to one of the cheap registers. This could be much faster for very
|
||||
// large blocks on targets with many physical registers.
|
||||
Prio = Indexes->getZeroIndex().getInstrDistance(LI->beginIndex());
|
||||
Prio = Indexes->getZeroIndex().getInstrDistance(LI->endIndex());
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
Loading…
Reference in New Issue
Block a user