From 7a3abdc63c0cc4e5d5411c3add0e909c6ac49e79 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 3 Sep 2006 00:05:09 +0000 Subject: Move two methods out of line, make them work when the record for a machine instruction includes physregs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30061 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/LiveVariables.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'lib/CodeGen') diff --git a/lib/CodeGen/LiveVariables.cpp b/lib/CodeGen/LiveVariables.cpp index 4f203e9..4e5c96e 100644 --- a/lib/CodeGen/LiveVariables.cpp +++ b/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 >::iterator I = + RegistersKilled.find(MI); + if (I == RegistersKilled.end()) return; + + std::vector &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 >::iterator I = + RegistersDead.find(MI); + if (I == RegistersDead.end()) return; + + std::vector &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); +} + + -- cgit v1.1