mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-13 09:33:50 +00:00
All targets are now allowed to have their own MachineFunctionInfo objects,
also, make getInfo do some checking and cast to the appropriate concrete type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15903 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b406d84dd8
commit
8bdf87d1d8
@ -23,6 +23,12 @@
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class Function;
|
||||
class TargetMachine;
|
||||
class SSARegMap;
|
||||
class MachineFrameInfo;
|
||||
class MachineConstantPool;
|
||||
|
||||
// ilist_traits
|
||||
template <>
|
||||
class ilist_traits<MachineBasicBlock> {
|
||||
@ -58,15 +64,13 @@ public:
|
||||
ilist_iterator<MachineBasicBlock> last);
|
||||
};
|
||||
|
||||
|
||||
class Function;
|
||||
class TargetMachine;
|
||||
class SSARegMap;
|
||||
class MachineFrameInfo;
|
||||
class MachineConstantPool;
|
||||
// MachineFunctionInfoBase - This is a gross SparcV9 hack
|
||||
struct MachineFunctionInfoBase { virtual ~MachineFunctionInfoBase() {}; };
|
||||
class MachineFunctionInfo;
|
||||
/// MachineFunctionInfo - This class can be derived from and used by targets to
|
||||
/// hold private target-specific information for each MachineFunction. Objects
|
||||
/// of type are accessed/created with MF::getInfo and destroyed when the
|
||||
/// MachineFunction is destroyed.
|
||||
struct MachineFunctionInfo {
|
||||
virtual ~MachineFunctionInfo() {};
|
||||
};
|
||||
|
||||
class MachineFunction : private Annotation {
|
||||
const Function *Fn;
|
||||
@ -78,8 +82,9 @@ class MachineFunction : private Annotation {
|
||||
// Keeping track of mapping from SSA values to registers
|
||||
SSARegMap *SSARegMapping;
|
||||
|
||||
// Used to keep track of frame and constant area information for SparcV9 BE.
|
||||
mutable MachineFunctionInfoBase *MFInfo;
|
||||
// Used to keep track of target-specific per-machine function information for
|
||||
// the target implementation.
|
||||
MachineFunctionInfo *MFInfo;
|
||||
|
||||
// Keep track of objects allocated on the stack.
|
||||
MachineFrameInfo *FrameInfo;
|
||||
@ -124,7 +129,14 @@ public:
|
||||
/// MachineFunctionInfo - Keep track of various per-function pieces of
|
||||
/// information for the sparc backend.
|
||||
///
|
||||
MachineFunctionInfo *getInfo() const;
|
||||
template<typename Ty>
|
||||
Ty *getInfo() {
|
||||
if (!MFInfo) MFInfo = new Ty(*this);
|
||||
|
||||
assert((void*)dynamic_cast<Ty*>(MFInfo) == (void*)MFInfo &&
|
||||
"Invalid concrete type or multiple inheritence for getInfo");
|
||||
return static_cast<Ty*>(MFInfo);
|
||||
}
|
||||
|
||||
/// getBlockNumbered - MachineBasicBlocks are automatically numbered when they
|
||||
/// are inserted into the machine function. The block number for a machine
|
||||
|
Loading…
x
Reference in New Issue
Block a user