diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-05-04 23:12:22 +0000 |
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-05-04 23:12:22 +0000 |
| commit | 4fd600b648be1f10581519106c8da087ecbcc539 (patch) | |
| tree | bc73fd333a9644eb1a680e0ca48c079e739d698d | |
| parent | 10ebffa48a592e2e03b2e8478b03ccdd0e8da2d5 (diff) | |
| download | bcm5719-llvm-4fd600b648be1f10581519106c8da087ecbcc539.tar.gz bcm5719-llvm-4fd600b648be1f10581519106c8da087ecbcc539.zip | |
Order register classes by spill size first, members last.
This is still a topological ordering such that every register class gets
a smaller enum value than its sub-classes.
Placing the smaller spill sizes first makes a difference for the
super-register class bit masks. When looking for a super-register class,
we usually want the smallest possible kind of super-register. That is
now available as the first bit set in the bit mask.
llvm-svn: 156222
| -rw-r--r-- | llvm/utils/TableGen/CodeGenRegisters.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/llvm/utils/TableGen/CodeGenRegisters.cpp b/llvm/utils/TableGen/CodeGenRegisters.cpp index a9eed98a5b5..03073a18c12 100644 --- a/llvm/utils/TableGen/CodeGenRegisters.cpp +++ b/llvm/utils/TableGen/CodeGenRegisters.cpp @@ -611,13 +611,6 @@ static int TopoOrderRC(const void *PA, const void *PB) { if (A == B) return 0; - // Order by descending set size. Note that the classes' allocation order may - // not have been computed yet. The Members set is always vaild. - if (A->getMembers().size() > B->getMembers().size()) - return -1; - if (A->getMembers().size() < B->getMembers().size()) - return 1; - // Order by ascending spill size. if (A->SpillSize < B->SpillSize) return -1; @@ -630,6 +623,13 @@ static int TopoOrderRC(const void *PA, const void *PB) { if (A->SpillAlignment > B->SpillAlignment) return 1; + // Order by descending set size. Note that the classes' allocation order may + // not have been computed yet. The Members set is always vaild. + if (A->getMembers().size() > B->getMembers().size()) + return -1; + if (A->getMembers().size() < B->getMembers().size()) + return 1; + // Finally order by name as a tie breaker. return StringRef(A->getName()).compare(B->getName()); } |

