diff options
Diffstat (limited to 'lib/CodeGen/LiveVariables.cpp')
| -rw-r--r-- | lib/CodeGen/LiveVariables.cpp | 42 | 
1 files changed, 21 insertions, 21 deletions
| diff --git a/lib/CodeGen/LiveVariables.cpp b/lib/CodeGen/LiveVariables.cpp index 68c85394d4cd3..519990e04a2c5 100644 --- a/lib/CodeGen/LiveVariables.cpp +++ b/lib/CodeGen/LiveVariables.cpp @@ -365,27 +365,7 @@ bool LiveVariables::HandlePhysRegKill(unsigned Reg, MachineInstr *MI) {      }    } -  if (LastRefOrPartRef == PhysRegDef[Reg] && LastRefOrPartRef != MI) { -    if (LastPartDef) -      // The last partial def kills the register. -      LastPartDef->addOperand(MachineOperand::CreateReg(Reg, false/*IsDef*/, -                                                true/*IsImp*/, true/*IsKill*/)); -    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]) { +  if (!PhysRegUse[Reg]) {      // Partial uses. Mark register def dead and add implicit def of      // sub-registers which are used.      // EAX<dead>  = op  AL<imp-def> @@ -419,6 +399,26 @@ bool LiveVariables::HandlePhysRegKill(unsigned Reg, MachineInstr *MI) {        for (const unsigned *SS = TRI->getSubRegisters(SubReg); *SS; ++SS)          PartUses.erase(*SS);      } +  } else if (LastRefOrPartRef == PhysRegDef[Reg] && LastRefOrPartRef != MI) { +    if (LastPartDef) +      // The last partial def kills the register. +      LastPartDef->addOperand(MachineOperand::CreateReg(Reg, false/*IsDef*/, +                                                true/*IsImp*/, true/*IsKill*/)); +    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      LastRefOrPartRef->addRegisterKilled(Reg, TRI, true);    return true; | 
