mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
add hooks to hang target-specific goop off MachineModuleInfo,
move MachineFunctionInfo virtual method out of line to give it a home. llvm-svn: 81940
This commit is contained in:
parent
d34c7760b3
commit
8457d8c557
@ -63,7 +63,7 @@ private:
|
||||
/// of type are accessed/created with MF::getInfo and destroyed when the
|
||||
/// MachineFunction is destroyed.
|
||||
struct MachineFunctionInfo {
|
||||
virtual ~MachineFunctionInfo() {}
|
||||
virtual ~MachineFunctionInfo();
|
||||
};
|
||||
|
||||
class MachineFunction {
|
||||
@ -159,8 +159,8 @@ public:
|
||||
///
|
||||
void setAlignment(unsigned A) { Alignment = A; }
|
||||
|
||||
/// MachineFunctionInfo - Keep track of various per-function pieces of
|
||||
/// information for backends that would like to do so.
|
||||
/// getInfo - Keep track of various per-function pieces of information for
|
||||
/// backends that would like to do so.
|
||||
///
|
||||
template<typename Ty>
|
||||
Ty *getInfo() {
|
||||
|
@ -54,6 +54,17 @@ class MachineFunction;
|
||||
class Module;
|
||||
class PointerType;
|
||||
class StructType;
|
||||
|
||||
|
||||
/// MachineModuleInfoImpl - This class can be derived from and used by targets
|
||||
/// to hold private target-specific information for each Module. Objects of
|
||||
/// type are accessed/created with MMI::getInfo and destroyed when the
|
||||
/// MachineModuleInfo is destroyed.
|
||||
struct MachineModuleInfoImpl {
|
||||
virtual ~MachineModuleInfoImpl();
|
||||
};
|
||||
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// LandingPadInfo - This structure is used to retain landing pad info for
|
||||
@ -80,7 +91,10 @@ struct LandingPadInfo {
|
||||
/// schemes and reformated for specific use.
|
||||
///
|
||||
class MachineModuleInfo : public ImmutablePass {
|
||||
private:
|
||||
/// TargetMMI - This is the target-specific implementation of
|
||||
/// MachineModuleInfoImpl, which lets them accumulate whatever info they want.
|
||||
MachineModuleInfoImpl *TargetMMI;
|
||||
|
||||
// LabelIDList - One entry per assigned label. Normally the entry is equal to
|
||||
// the list index(+1). If the entry is zero then the label has been deleted.
|
||||
// Any other value indicates the label has been deleted by is mapped to
|
||||
@ -132,14 +146,9 @@ public:
|
||||
MachineModuleInfo();
|
||||
~MachineModuleInfo();
|
||||
|
||||
/// doInitialization - Initialize the state for a new module.
|
||||
///
|
||||
bool doInitialization();
|
||||
|
||||
/// doFinalization - Tear down the state after completion of a module.
|
||||
///
|
||||
bool doFinalization();
|
||||
|
||||
|
||||
/// BeginFunction - Begin gathering function meta information.
|
||||
///
|
||||
void BeginFunction(MachineFunction *MF);
|
||||
@ -148,6 +157,24 @@ public:
|
||||
///
|
||||
void EndFunction();
|
||||
|
||||
/// getInfo - Keep track of various per-function pieces of information for
|
||||
/// backends that would like to do so.
|
||||
///
|
||||
template<typename Ty>
|
||||
Ty *getInfo() {
|
||||
if (TargetMMI == 0)
|
||||
TargetMMI = new Ty(*this);
|
||||
|
||||
assert((void*)dynamic_cast<Ty*>(TargetMMI) == (void*)TargetMMI &&
|
||||
"Invalid concrete type or multiple inheritence for getInfo");
|
||||
return static_cast<Ty*>(TargetMMI);
|
||||
}
|
||||
|
||||
template<typename Ty>
|
||||
const Ty *getInfo() const {
|
||||
return const_cast<MachineModuleInfo*>(this)->getInfo<Ty>();
|
||||
}
|
||||
|
||||
/// AnalyzeModule - Scan the module for global debug information.
|
||||
///
|
||||
void AnalyzeModule(Module &M);
|
||||
|
@ -73,6 +73,9 @@ FunctionPass *llvm::createMachineFunctionPrinterPass(raw_ostream &OS,
|
||||
// MachineFunction implementation
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
// Out of line virtual method.
|
||||
MachineFunctionInfo::~MachineFunctionInfo() {}
|
||||
|
||||
void ilist_traits<MachineBasicBlock>::deleteNode(MachineBasicBlock *MBB) {
|
||||
MBB->getParent()->DeleteMachineBasicBlock(MBB);
|
||||
}
|
||||
|
@ -32,23 +32,23 @@ static RegisterPass<MachineModuleInfo>
|
||||
X("machinemoduleinfo", "Module Information");
|
||||
char MachineModuleInfo::ID = 0;
|
||||
|
||||
// Out of line virtual method.
|
||||
MachineModuleInfoImpl::~MachineModuleInfoImpl() {}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
MachineModuleInfo::MachineModuleInfo()
|
||||
: ImmutablePass(&ID)
|
||||
, LabelIDList()
|
||||
, FrameMoves()
|
||||
, LandingPads()
|
||||
, Personalities()
|
||||
, TargetMMI(0)
|
||||
, CallsEHReturn(0)
|
||||
, CallsUnwindInit(0)
|
||||
, DbgInfoAvailable(false)
|
||||
{
|
||||
, DbgInfoAvailable(false) {
|
||||
// Always emit some info, by default "no personality" info.
|
||||
Personalities.push_back(NULL);
|
||||
}
|
||||
MachineModuleInfo::~MachineModuleInfo() {
|
||||
|
||||
MachineModuleInfo::~MachineModuleInfo() {
|
||||
delete TargetMMI;
|
||||
}
|
||||
|
||||
/// doInitialization - Initialize the state for a new module.
|
||||
|
Loading…
x
Reference in New Issue
Block a user