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.

llvm-svn: 81060
This commit is contained in:
Bob Wilson 2009-09-05 01:19:16 +00:00
parent dc7f7b7ac3
commit 7f20002993
3 changed files with 8 additions and 5 deletions

View File

@ -774,7 +774,10 @@ namespace llvm {
void ComputeJoinedWeight(const LiveInterval &Other); void ComputeJoinedWeight(const LiveInterval &Other);
bool operator<(const LiveInterval& other) const { 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; void print(raw_ostream &OS, const TargetRegisterInfo *TRI = 0) const;

View File

@ -1,6 +1,6 @@
; RUN: llvm-as < %s | llc -march=x86 -stats |& grep {Number of reloads omited} | grep 2 ; RUN: llvm-as < %s | llc -march=x86 -stats |& grep {Number of reloads omited} | grep 1
; RUN: llvm-as < %s | llc -march=x86 -stats |& not grep {Number of available reloads turned into copies} ; RUN: llvm-as < %s | llc -march=x86 -stats |& grep {Number of available reloads turned into copies} | grep 1
; RUN: llvm-as < %s | llc -march=x86 -stats |& grep {Number of machine instrs printed} | grep 39 ; RUN: llvm-as < %s | llc -march=x86 -stats |& grep {Number of machine instrs printed} | grep 40
; PR3495 ; PR3495
; The loop reversal kicks in once here, resulting in one fewer instruction. ; The loop reversal kicks in once here, resulting in one fewer instruction.

View File

@ -1,7 +1,7 @@
; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin10 -relocation-model=pic -disable-fp-elim -color-ss-with-regs -stats -info-output-file - > %t ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin10 -relocation-model=pic -disable-fp-elim -color-ss-with-regs -stats -info-output-file - > %t
; RUN: grep stackcoloring %t | grep "loads eliminated" ; RUN: grep stackcoloring %t | grep "loads eliminated"
; RUN: grep stackcoloring %t | grep "stack slot refs replaced with reg refs" | grep 5 ; RUN: grep stackcoloring %t | grep "stack slot refs replaced with reg refs" | grep 5
; RUN: grep asm-printer %t | grep 182 ; RUN: grep asm-printer %t | grep 181
type { [62 x %struct.Bitvec*] } ; type %0 type { [62 x %struct.Bitvec*] } ; type %0
type { i8* } ; type %1 type { i8* } ; type %1