summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/RegAlloc
diff options
context:
space:
mode:
authorBrian Gaeke <gaeke@uiuc.edu>2003-10-24 21:21:58 +0000
committerBrian Gaeke <gaeke@uiuc.edu>2003-10-24 21:21:58 +0000
commiteca381c7e83ddc5a496bcea807e91819c9542554 (patch)
treecf7e14d34157b2007cc3c58c9db7180f504de210 /llvm/lib/CodeGen/RegAlloc
parent9ab7fbef6041969cc0189fd198d6eeaf65a19064 (diff)
downloadbcm5719-llvm-eca381c7e83ddc5a496bcea807e91819c9542554.tar.gz
bcm5719-llvm-eca381c7e83ddc5a496bcea807e91819c9542554.zip
Publicize the type of FnAllocState.
Prototype option to save state in a global instead of as a Constant in the Module. (Turned off, for now, with the on/off switch welded in the off position. You get the idea.) llvm-svn: 9500
Diffstat (limited to 'llvm/lib/CodeGen/RegAlloc')
-rw-r--r--llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp11
-rw-r--r--llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h6
2 files changed, 15 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp b/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
index 82ba0cc693c..e70c90b0394 100644
--- a/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
+++ b/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
@@ -48,6 +48,12 @@
RegAllocDebugLevel_t DEBUG_RA;
+/// The reoptimizer wants to be able to grovel through the register
+/// allocator's state after it has done its job. This is a hack.
+///
+PhyRegAlloc::SavedStateMapTy ExportedFnAllocState;
+const bool SaveStateToModule = false;
+
static cl::opt<RegAllocDebugLevel_t, true>
DRA_opt("dregalloc", cl::Hidden, cl::location(DEBUG_RA),
cl::desc("enable register allocation debugging information"),
@@ -1184,6 +1190,11 @@ bool PhyRegAlloc::doFinalization (Module &M) {
if (!SaveRegAllocState)
return false; // Nothing to do here, unless we're saving state.
+ if (!SaveStateToModule) {
+ ExportedFnAllocState = FnAllocState;
+ return false;
+ }
+
// Convert FnAllocState to a single Constant array and add it
// to the Module.
ArrayType *AT = ArrayType::get (AllocInfo::getConstantType (), 0);
diff --git a/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h b/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h
index db23f481615..5fdd60f7ee0 100644
--- a/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h
+++ b/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h
@@ -85,11 +85,11 @@ class PhyRegAlloc : public FunctionPass {
AddedInstrns AddedInstrAtEntry; // to store instrns added at entry
const LoopInfo *LoopDepthCalc; // to calculate loop depths
- std::map<const Function *, std::vector<AllocInfo> > FnAllocState;
-
PhyRegAlloc(const PhyRegAlloc&); // DO NOT IMPLEMENT
void operator=(const PhyRegAlloc&); // DO NOT IMPLEMENT
public:
+ typedef std::map<const Function *, std::vector<AllocInfo> > SavedStateMapTy;
+
inline PhyRegAlloc (const TargetMachine &TM_) :
TM (TM_), MRI (TM.getRegInfo ()),
NumOfRegClasses (MRI.getNumOfRegClasses ()) { }
@@ -113,6 +113,8 @@ public:
inline RegClass *getRegClassByID(unsigned id) { return RegClassList[id]; }
private:
+ SavedStateMapTy FnAllocState;
+
void addInterference(const Value *Def, const ValueSet *LVSet,
bool isCallInst);
bool markAllocatedRegs(MachineInstr* MInst);
OpenPOWER on IntegriCloud