diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2007-02-27 21:09:48 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2007-02-27 21:09:48 +0000 |
| commit | 51f54640de6c0a597e134edf18c288a79b6fa347 (patch) | |
| tree | 927483f479f970921244b5ad8805b1dd44f5060b /llvm/lib/CodeGen/RegisterScavenging.cpp | |
| parent | 16fd33ac5c5d96515370345c80dabf4aac1646cb (diff) | |
| download | bcm5719-llvm-51f54640de6c0a597e134edf18c288a79b6fa347.tar.gz bcm5719-llvm-51f54640de6c0a597e134edf18c288a79b6fa347.zip | |
RegScavenger interface change to make it more flexible.
llvm-svn: 34690
Diffstat (limited to 'llvm/lib/CodeGen/RegisterScavenging.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/RegisterScavenging.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/llvm/lib/CodeGen/RegisterScavenging.cpp b/llvm/lib/CodeGen/RegisterScavenging.cpp index 3ee0f97f779..0f980a71236 100644 --- a/llvm/lib/CodeGen/RegisterScavenging.cpp +++ b/llvm/lib/CodeGen/RegisterScavenging.cpp @@ -25,12 +25,12 @@ #include "llvm/ADT/STLExtras.h" using namespace llvm; -RegScavenger::RegScavenger(MachineBasicBlock *mbb) - : MBB(mbb), MBBIInited(false) { +void RegScavenger::init() { const MachineFunction &MF = *MBB->getParent(); const TargetMachine &TM = MF.getTarget(); const MRegisterInfo *RegInfo = TM.getRegisterInfo(); + MBBI = MBB->begin(); NumPhysRegs = RegInfo->getNumRegs(); RegStates.resize(NumPhysRegs, true); @@ -50,15 +50,16 @@ RegScavenger::RegScavenger(MachineBasicBlock *mbb) for (MachineBasicBlock::const_livein_iterator I = MBB->livein_begin(), E = MBB->livein_end(); I != E; ++I) setUsed(*I); + + Initialized = true; } void RegScavenger::forward() { assert(MBBI != MBB->end() && "Already at the end of the basic block!"); // Move ptr forward. - if (!MBBIInited) { - MBBI = MBB->begin(); - MBBIInited = true; - } else + if (!Initialized) + init(); + else MBBI = next(MBBI); MachineInstr *MI = MBBI; @@ -133,16 +134,6 @@ void RegScavenger::backward() { setUsed(ChangedRegs); } -void RegScavenger::forward(MachineBasicBlock::iterator I) { - while (MBBI != I) - forward(); -} - -void RegScavenger::backward(MachineBasicBlock::iterator I) { - while (MBBI != I) - backward(); -} - /// CreateRegClassMask - Set the bits that represent the registers in the /// TargetRegisterClass. static void CreateRegClassMask(const TargetRegisterClass *RC, BitVector &Mask) { @@ -167,3 +158,14 @@ unsigned RegScavenger::FindUnusedReg(const TargetRegisterClass *RegClass, int Reg = RegStatesCopy.find_first(); return (Reg == -1) ? 0 : Reg; } + +void RegScavenger::clear() { + if (MBB) { + MBBI = MBB->end(); + MBB = NULL; + } + + NumPhysRegs = 0; + Initialized = false; + RegStates.clear(); +} |

