Ensure all defs referring to a virtual register are marked dead by addRegisterDead().

There can be multiple defs for a single virtual register when they are defining
sub-registers.

The missing <dead> flag was stopping the inline spiller from eliminating dead
code after rematerialization.

llvm-svn: 128888
This commit is contained in:
Jakob Stoklund Olesen 2011-04-05 16:53:50 +00:00
parent 7dd4d6e2e8
commit 76ad3debab
2 changed files with 7 additions and 8 deletions

View File

@ -1543,13 +1543,8 @@ bool MachineInstr::addRegisterDead(unsigned IncomingReg,
continue;
if (Reg == IncomingReg) {
if (!Found) {
if (MO.isDead())
// The register is already marked dead.
return true;
MO.setIsDead();
Found = true;
}
} else if (hasAliases && MO.isDead() &&
TargetRegisterInfo::isPhysicalRegister(Reg)) {
// There exists a super-register that's marked dead.

View File

@ -1,6 +1,10 @@
; RUN: llc < %s -mtriple=i386-apple-darwin10 | not grep movaps
; RUN: llc < %s -mtriple=i386-apple-darwin10 | FileCheck %s
; RUN: llc < %s -mtriple=i386-apple-darwin10 -regalloc=basic | FileCheck %s
; rdar://6509240
; CHECK: os_clock
; CHECK-NOT: movaps
type { %struct.TValue } ; type %0
type { %struct.L_Umaxalign, i32, %struct.Node* } ; type %1
%struct.CallInfo = type { %struct.TValue*, %struct.TValue*, %struct.TValue*, i32*, i32, i32 }