From 8d2623d49a7b53f2bb25f2b61c14aecb91e19154 Mon Sep 17 00:00:00 2001 From: Nate Begeman Date: Tue, 12 Jul 2005 03:04:49 +0000 Subject: [PATCH] Clean up and add comments to the newly implemented subtarget code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22396 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Target/TargetMachine.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/include/llvm/Target/TargetMachine.h b/include/llvm/Target/TargetMachine.h index efeb61d4997..5376f452f0f 100644 --- a/include/llvm/Target/TargetMachine.h +++ b/include/llvm/Target/TargetMachine.h @@ -64,6 +64,10 @@ protected: // Can only create subclasses... /// TargetMachine(const std::string &name, IntrinsicLowering *IL, const Module &M); + + /// getSubtargetImpl - virtual method implemented by subclasses that returns + /// a reference to that target's TargetSubtarget-derived member variable. + virtual const TargetSubtarget *getSubtargetImpl() const { return 0; } public: virtual ~TargetMachine(); @@ -98,11 +102,14 @@ public: virtual const TargetFrameInfo *getFrameInfo() const { return 0; } const TargetData &getTargetData() const { return DataLayout; } - virtual const TargetSubtarget *getSubtargetImpl() const { return 0; } + /// getSubtarget - This method returns a pointer to the specified type of + /// TargetSubtarget. In debug builds, it verifies that the object being + /// returned is of the correct type. template STC *getSubtarget() const { - assert(getSubtargetImpl() && dynamic_cast(getSubtargetImpl()) && + const TargetSubtarget *TST = getSubtargetImpl(); + assert(getSubtargetImpl() && dynamic_cast(TST) && "Not the right kind of subtarget!"); - return (STC*)getSubtargetImpl(); + return (STC*)TST; } /// getRegisterInfo - If register information is available, return it. If