diff options
author | Bob Wilson <bob.wilson@apple.com> | 2009-09-05 01:19:16 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@apple.com> | 2009-09-05 01:19:16 +0000 |
commit | da4ae4be5b2b8fa35ef989e548530833428f36bf (patch) | |
tree | c52591d2d1555f1ff541da9ca54accc9a68118ad /include | |
parent | bd1d6a8ce1197de640df52e1da2e63e8ce8d8705 (diff) |
Stabilize the order of live intervals in the priority_queue used by the
linear scan reg alloc. This fixes a problem I ran into where extracting
a function from a larger file caused the generated code to change (masking
the problem I was trying to debug) because the allocator behaved differently.
This changes the results for two X86 regression checks. stack-color-with-reg
is improved, with one less instruction, but pr3495 is worse, with one more
copy. As far as I can tell, these tests were just getting lucky or unlucky,
so I've changed the expected results.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81060 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/LiveInterval.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h index 921c5572b9..2a8c2c8841 100644 --- a/include/llvm/CodeGen/LiveInterval.h +++ b/include/llvm/CodeGen/LiveInterval.h @@ -774,7 +774,10 @@ namespace llvm { void ComputeJoinedWeight(const LiveInterval &Other); bool operator<(const LiveInterval& other) const { - return beginIndex() < other.beginIndex(); + const MachineInstrIndex &thisIndex = beginIndex(); + const MachineInstrIndex &otherIndex = other.beginIndex(); + return (thisIndex < otherIndex || + (thisIndex == otherIndex && reg < other.reg)); } void print(raw_ostream &OS, const TargetRegisterInfo *TRI = 0) const; |