diff options
author | Chris Lattner <sabre@nondot.org> | 2006-09-03 00:05:09 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-09-03 00:05:09 +0000 |
commit | f8f724a2b1a919b03e5a9906af773181ea42e138 (patch) | |
tree | 130023bbdba7e2df62eead670d34ae1a7933e488 /llvm/lib/CodeGen | |
parent | 5e02f4e141fdad1aca37289e74fb578338238f5c (diff) | |
download | bcm5719-llvm-f8f724a2b1a919b03e5a9906af773181ea42e138.tar.gz bcm5719-llvm-f8f724a2b1a919b03e5a9906af773181ea42e138.zip |
Move two methods out of line, make them work when the record for a machine
instruction includes physregs.
llvm-svn: 30061
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/LiveVariables.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/LiveVariables.cpp b/llvm/lib/CodeGen/LiveVariables.cpp index 4f203e983b7..4e5c96ec211 100644 --- a/llvm/lib/CodeGen/LiveVariables.cpp +++ b/llvm/lib/CodeGen/LiveVariables.cpp @@ -415,3 +415,39 @@ void LiveVariables::instructionChanged(MachineInstr *OldMI, RegistersDead.erase(OldMI); } } + +/// removeVirtualRegistersKilled - Remove all killed info for the specified +/// instruction. +void LiveVariables::removeVirtualRegistersKilled(MachineInstr *MI) { + std::map<MachineInstr*, std::vector<unsigned> >::iterator I = + RegistersKilled.find(MI); + if (I == RegistersKilled.end()) return; + + std::vector<unsigned> &Regs = I->second; + for (unsigned i = 0, e = Regs.size(); i != e; ++i) { + if (MRegisterInfo::isVirtualRegister(Regs[i])) { + bool removed = getVarInfo(Regs[i]).removeKill(MI); + assert(removed && "kill not in register's VarInfo?"); + } + } + RegistersKilled.erase(I); +} + +/// removeVirtualRegistersDead - Remove all of the dead registers for the +/// specified instruction from the live variable information. +void LiveVariables::removeVirtualRegistersDead(MachineInstr *MI) { + std::map<MachineInstr*, std::vector<unsigned> >::iterator I = + RegistersDead.find(MI); + if (I == RegistersDead.end()) return; + + std::vector<unsigned> &Regs = I->second; + for (unsigned i = 0, e = Regs.size(); i != e; ++i) { + if (MRegisterInfo::isVirtualRegister(Regs[i])) { + bool removed = getVarInfo(Regs[i]).removeKill(MI); + assert(removed && "kill not in register's VarInfo?"); + } + } + RegistersDead.erase(I); +} + + |