diff options
| author | Roman Divacky <rdivacky@FreeBSD.org> | 2009-10-15 07:47:49 +0000 | 
|---|---|---|
| committer | Roman Divacky <rdivacky@FreeBSD.org> | 2009-10-15 07:47:49 +0000 | 
| commit | 26137f35958fa2237eceb06ef7003e3c19159129 (patch) | |
| tree | 6441ce5f8a25ef18b4a8082f3cc834f7c8556f61 /lib/CodeGen/LiveVariables.cpp | |
| parent | 59850d0874429601812bc13408cb1f776649027c (diff) | |
Notes
Diffstat (limited to 'lib/CodeGen/LiveVariables.cpp')
| -rw-r--r-- | lib/CodeGen/LiveVariables.cpp | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/CodeGen/LiveVariables.cpp b/lib/CodeGen/LiveVariables.cpp index 139e0291ea7a..96c655c1a9b8 100644 --- a/lib/CodeGen/LiveVariables.cpp +++ b/lib/CodeGen/LiveVariables.cpp @@ -323,10 +323,21 @@ bool LiveVariables::HandlePhysRegKill(unsigned Reg, MachineInstr *MI) {        // The last partial def kills the register.        LastPartDef->addOperand(MachineOperand::CreateReg(Reg, false/*IsDef*/,                                                  true/*IsImp*/, true/*IsKill*/)); -    else +    else { +      MachineOperand *MO = +        LastRefOrPartRef->findRegisterDefOperand(Reg, false, TRI); +      bool NeedEC = MO->isEarlyClobber() && MO->getReg() != Reg;        // If the last reference is the last def, then it's not used at all.        // That is, unless we are currently processing the last reference itself.        LastRefOrPartRef->addRegisterDead(Reg, TRI, true); +      if (NeedEC) { +        // If we are adding a subreg def and the superreg def is marked early +        // clobber, add an early clobber marker to the subreg def. +        MO = LastRefOrPartRef->findRegisterDefOperand(Reg); +        if (MO) +          MO->setIsEarlyClobber(); +      } +    }    } else if (!PhysRegUse[Reg]) {      // Partial uses. Mark register def dead and add implicit def of      // sub-registers which are used.  | 
