aboutsummaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/RegisterScavenging.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2007-02-27 22:58:43 +0000
committerEvan Cheng <evan.cheng@apple.com>2007-02-27 22:58:43 +0000
commit898218cc5edecea1275ee266b2cd13313ea6b67b (patch)
tree6e54d09cacea3e902a681b23953e1e159ee6a6d9 /lib/CodeGen/RegisterScavenging.cpp
parent3e8a541bf4c3b221240cf4940743d1177fb79d0c (diff)
downloadexternal_llvm-898218cc5edecea1275ee266b2cd13313ea6b67b.zip
external_llvm-898218cc5edecea1275ee266b2cd13313ea6b67b.tar.gz
external_llvm-898218cc5edecea1275ee266b2cd13313ea6b67b.tar.bz2
Some more code clean up.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34700 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/RegisterScavenging.cpp')
-rw-r--r--lib/CodeGen/RegisterScavenging.cpp52
1 files changed, 29 insertions, 23 deletions
diff --git a/lib/CodeGen/RegisterScavenging.cpp b/lib/CodeGen/RegisterScavenging.cpp
index 6856511..c921e20 100644
--- a/lib/CodeGen/RegisterScavenging.cpp
+++ b/lib/CodeGen/RegisterScavenging.cpp
@@ -26,44 +26,50 @@
using namespace llvm;
void RegScavenger::init(MachineBasicBlock *mbb) {
- if (mbb)
- MBB = mbb;
-
- const MachineFunction &MF = *MBB->getParent();
+ 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);
+ assert((NumPhysRegs == 0 || NumPhysRegs == RegInfo->getNumRegs()) &&
+ "Target changed?");
+
+ if (!MBB) {
+ NumPhysRegs = RegInfo->getNumRegs();
+ ReservedRegs = RegInfo->getReservedRegs(MF);
+ RegStates.resize(NumPhysRegs);
+
+ // Create callee-saved registers bitvector.
+ CalleeSavedRegs.resize(NumPhysRegs);
+ const unsigned *CSRegs = RegInfo->getCalleeSavedRegs();
+ if (CSRegs != NULL)
+ for (unsigned i = 0; CSRegs[i]; ++i)
+ CalleeSavedRegs.set(CSRegs[i]);
+ }
+
+ MBB = mbb;
+
+ // All registers started out unused.
+ RegStates.set();
// Create reserved registers bitvector.
- ReservedRegs = RegInfo->getReservedRegs(MF);
RegStates ^= ReservedRegs;
- // Create callee-saved registers bitvector.
- CalleeSavedRegs.resize(NumPhysRegs);
- const unsigned *CSRegs = RegInfo->getCalleeSavedRegs();
- if (CSRegs != NULL)
- for (unsigned i = 0; CSRegs[i]; ++i)
- CalleeSavedRegs.set(CSRegs[i]);
-
// Live-in registers are in use.
if (!MBB->livein_empty())
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 (!Initialized)
- init();
- else
+ if (!Tracking) {
+ MBBI = MBB->begin();
+ Tracking = true;
+ } else {
+ assert(MBBI != MBB->end() && "Already at the end of the basic block!");
MBBI = next(MBBI);
+ }
MachineInstr *MI = MBBI;
// Process uses first.
@@ -102,6 +108,7 @@ void RegScavenger::forward() {
}
void RegScavenger::backward() {
+ assert(Tracking && "Not tracking states!");
assert(MBBI != MBB->begin() && "Already at start of basic block!");
// Move ptr backward.
MBBI = prior(MBBI);
@@ -168,7 +175,6 @@ void RegScavenger::clear() {
MBB = NULL;
}
- NumPhysRegs = 0;
- Initialized = false;
+ Tracking = false;
RegStates.clear();
}