diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-11-13 20:36:40 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-11-13 20:36:40 +0000 |
commit | d190b8216f5a12eaa3ba0f34238fe08e26de1765 (patch) | |
tree | 1f5648b76819f8a60431a47cc5ddc1d402db04b4 /llvm/lib/CodeGen/LiveVariables.cpp | |
parent | bdd124036d7c14391d5c0d8eb08ac89f079af638 (diff) | |
download | llvm-d190b8216f5a12eaa3ba0f34238fe08e26de1765.zip llvm-d190b8216f5a12eaa3ba0f34238fe08e26de1765.tar.gz llvm-d190b8216f5a12eaa3ba0f34238fe08e26de1765.tar.bz2 |
Fix PR5410: LiveVariables lost subreg def:
D0<def,dead> = ...
...
= S0<use, kill>
S0<def> = ...
...
D0<def> =
The first D0 def is correctly marked dead, however, livevariables should have
added an implicit def of S0 or we end up with a use without a def.
llvm-svn: 88690
Diffstat (limited to 'llvm/lib/CodeGen/LiveVariables.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LiveVariables.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/LiveVariables.cpp b/llvm/lib/CodeGen/LiveVariables.cpp index cba0371..16a79bb 100644 --- a/llvm/lib/CodeGen/LiveVariables.cpp +++ b/llvm/lib/CodeGen/LiveVariables.cpp @@ -230,8 +230,9 @@ MachineInstr *LiveVariables::FindLastPartialDef(unsigned Reg, /// implicit defs to a machine instruction if there was an earlier def of its /// super-register. void LiveVariables::HandlePhysRegUse(unsigned Reg, MachineInstr *MI) { + MachineInstr *LastDef = PhysRegDef[Reg]; // If there was a previous use or a "full" def all is well. - if (!PhysRegDef[Reg] && !PhysRegUse[Reg]) { + if (!LastDef && !PhysRegUse[Reg]) { // Otherwise, the last sub-register def implicitly defines this register. // e.g. // AH = @@ -265,6 +266,11 @@ void LiveVariables::HandlePhysRegUse(unsigned Reg, MachineInstr *MI) { } } } + else if (LastDef && !PhysRegUse[Reg] && + !LastDef->findRegisterDefOperand(Reg)) + // Last def defines the super register, add an implicit def of reg. + LastDef->addOperand(MachineOperand::CreateReg(Reg, + true/*IsDef*/, true/*IsImp*/)); // Remember this use. PhysRegUse[Reg] = MI; |