#include "llvm/ADT/STLExtras.h"
using namespace llvm;
-void RegScavenger::init(MachineBasicBlock *mbb) {
+void RegScavenger::enterBasicBlock(MachineBasicBlock *mbb) {
const MachineFunction &MF = *mbb->getParent();
const TargetMachine &TM = MF.getTarget();
const MRegisterInfo *RegInfo = TM.getRegisterInfo();
if (!MBB) {
NumPhysRegs = RegInfo->getNumRegs();
- ReservedRegs = RegInfo->getReservedRegs(MF);
RegStates.resize(NumPhysRegs);
+ // Create reserved registers bitvector.
+ ReservedRegs = RegInfo->getReservedRegs(MF);
+
// Create callee-saved registers bitvector.
CalleeSavedRegs.resize(NumPhysRegs);
const unsigned *CSRegs = RegInfo->getCalleeSavedRegs();
// All registers started out unused.
RegStates.set();
- // Create reserved registers bitvector.
+ // Reserved registers are always used.
RegStates ^= ReservedRegs;
// Live-in registers are in use.
for (MachineBasicBlock::const_livein_iterator I = MBB->livein_begin(),
E = MBB->livein_end(); I != E; ++I)
setUsed(*I);
+
+ Tracking = false;
}
void RegScavenger::forward() {
int Reg = RegStatesCopy.find_first();
return (Reg == -1) ? 0 : Reg;
}
-
-void RegScavenger::clear() {
- if (MBB) {
- MBBI = MBB->end();
- MBB = NULL;
- }
-
- Tracking = false;
- RegStates.clear();
-}