aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-08-18 18:13:16 +0000
committerChris Lattner <sabre@nondot.org>2004-08-18 18:13:16 +0000
commit8bdf87d1d8abde45c40b2698dd9af8407007281c (patch)
tree342fedf392b3cc32ef7d719f5e2893a66fedd05e
parentb406d84dd8f8faee31d891ab9af298c672f98256 (diff)
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
-rw-r--r--include/llvm/CodeGen/MachineFunction.h36
1 files changed, 24 insertions, 12 deletions
diff --git a/include/llvm/CodeGen/MachineFunction.h b/include/llvm/CodeGen/MachineFunction.h
index 3969e60230..ec72f6eb44 100644
--- a/include/llvm/CodeGen/MachineFunction.h
+++ b/include/llvm/CodeGen/MachineFunction.h
@@ -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