aboutsummaryrefslogtreecommitdiffstats
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
parent3e8a541bf4c3b221240cf4940743d1177fb79d0c (diff)
downloadexternal_llvm-898218cc5edecea1275ee266b2cd13313ea6b67b.tar.gz
external_llvm-898218cc5edecea1275ee266b2cd13313ea6b67b.tar.bz2
external_llvm-898218cc5edecea1275ee266b2cd13313ea6b67b.zip
Some more code clean up.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34700 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/CodeGen/RegisterScavenging.h11
-rw-r--r--lib/CodeGen/RegisterScavenging.cpp52
2 files changed, 35 insertions, 28 deletions
diff --git a/include/llvm/CodeGen/RegisterScavenging.h b/include/llvm/CodeGen/RegisterScavenging.h
index 4a82fc5ef6..52dae023ee 100644
--- a/include/llvm/CodeGen/RegisterScavenging.h
+++ b/include/llvm/CodeGen/RegisterScavenging.h
@@ -29,8 +29,9 @@ class RegScavenger {
MachineBasicBlock::iterator MBBI;
unsigned NumPhysRegs;
- /// Initialized - All states are initialized and ready to go!
- bool Initialized;
+ /// Tracking - True if RegScavenger is currently tracking the liveness of
+ /// registers.
+ bool Tracking;
/// RegStates - The current state of all the physical registers immediately
/// before MBBI. One bit per physical register. If bit is set that means it's
@@ -39,14 +40,14 @@ class RegScavenger {
public:
RegScavenger()
- : MBB(NULL), Initialized(false) {};
+ : MBB(NULL), NumPhysRegs(0), Tracking(false) {};
RegScavenger(MachineBasicBlock *mbb)
- : MBB(mbb), Initialized(false) {};
+ : MBB(mbb), NumPhysRegs(0), Tracking(false) {};
/// Init - Initialize the states.
///
- void init(MachineBasicBlock *mbb = NULL);
+ void init(MachineBasicBlock *mbb);
/// Reset - Discard previous states and re-initialize the states given for
/// the specific basic block.
diff --git a/lib/CodeGen/RegisterScavenging.cpp b/lib/CodeGen/RegisterScavenging.cpp
index 6856511bce..c921e201b9 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();
}