diff options
author | Gabor Greif <ggreif@gmail.com> | 2009-03-07 12:33:24 +0000 |
---|---|---|
committer | Gabor Greif <ggreif@gmail.com> | 2009-03-07 12:33:24 +0000 |
commit | 0dd2a6a89f49438b239638ab147ac5746d6c32c3 (patch) | |
tree | d56d4d2f8f90f2b2ae6248e18631cc6896968f12 | |
parent | 7afd3e1599222dc691cca9e601800878c8546663 (diff) | |
download | external_llvm-0dd2a6a89f49438b239638ab147ac5746d6c32c3.zip external_llvm-0dd2a6a89f49438b239638ab147ac5746d6c32c3.tar.gz external_llvm-0dd2a6a89f49438b239638ab147ac5746d6c32c3.tar.bz2 |
simplify the way how traits get hold of the symbol table
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66336 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/BasicBlock.h | 7 | ||||
-rw-r--r-- | include/llvm/Module.h | 19 | ||||
-rw-r--r-- | include/llvm/SymbolTableListTraits.h | 10 | ||||
-rw-r--r-- | lib/VMCore/BasicBlock.cpp | 8 |
4 files changed, 16 insertions, 28 deletions
diff --git a/include/llvm/BasicBlock.h b/include/llvm/BasicBlock.h index 0de71008..072f615 100644 --- a/include/llvm/BasicBlock.h +++ b/include/llvm/BasicBlock.h @@ -45,8 +45,6 @@ template<> struct ilist_traits<Instruction> Instruction *provideInitialHead() const { return createSentinel(); } Instruction *ensureHead(Instruction*) const { return createSentinel(); } static void noteHead(Instruction*, Instruction*) {} - - static ValueSymbolTable *getSymTab(BasicBlock *ItemParent); private: mutable ilist_node<Instruction> Sentinel; }; @@ -184,10 +182,15 @@ public: /// const InstListType &getInstList() const { return InstList; } InstListType &getInstList() { return InstList; } + + /// getSublistAccess() - returns pointer to member of instruction list static iplist<Instruction> BasicBlock::*getSublistAccess(Instruction*) { return &BasicBlock::InstList; } + /// getValueSymbolTable() - returns pointer to symbol table (if any) + ValueSymbolTable *getValueSymbolTable(); + /// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const BasicBlock *) { return true; } static inline bool classof(const Value *V) { diff --git a/include/llvm/Module.h b/include/llvm/Module.h index 2564ddc..9d0b2b6 100644 --- a/include/llvm/Module.h +++ b/include/llvm/Module.h @@ -31,21 +31,18 @@ template<> struct ilist_traits<Function> // createSentinel is used to create a node that marks the end of the list. static Function *createSentinel(); static void destroySentinel(Function *F) { delete F; } - static inline ValueSymbolTable *getSymTab(Module *M); }; template<> struct ilist_traits<GlobalVariable> : public SymbolTableListTraits<GlobalVariable, Module> { // createSentinel is used to create a node that marks the end of the list. static GlobalVariable *createSentinel(); static void destroySentinel(GlobalVariable *GV) { delete GV; } - static inline ValueSymbolTable *getSymTab(Module *M); }; template<> struct ilist_traits<GlobalAlias> : public SymbolTableListTraits<GlobalAlias, Module> { // createSentinel is used to create a node that marks the end of the list. static GlobalAlias *createSentinel(); static void destroySentinel(GlobalAlias *GA) { delete GA; } - static inline ValueSymbolTable *getSymTab(Module *M); }; /// A Module instance is used to store all the information related to an @@ -409,22 +406,6 @@ inline raw_ostream &operator<<(raw_ostream &O, const Module &M) { M.print(O, 0); return O; } - - -inline ValueSymbolTable * -ilist_traits<Function>::getSymTab(Module *M) { - return M ? &M->getValueSymbolTable() : 0; -} - -inline ValueSymbolTable * -ilist_traits<GlobalVariable>::getSymTab(Module *M) { - return M ? &M->getValueSymbolTable() : 0; -} - -inline ValueSymbolTable * -ilist_traits<GlobalAlias>::getSymTab(Module *M) { - return M ? &M->getValueSymbolTable() : 0; -} } // End llvm namespace diff --git a/include/llvm/SymbolTableListTraits.h b/include/llvm/SymbolTableListTraits.h index 44f64dc..337b76f 100644 --- a/include/llvm/SymbolTableListTraits.h +++ b/include/llvm/SymbolTableListTraits.h @@ -55,8 +55,12 @@ public: } static iplist<ValueSubClass> &getList(ItemParentClass *Par) { - return Par->*(Par->getSublistAccess((ValueSubClass*)0)); -} + return Par->*(Par->getSublistAccess((ValueSubClass*)0)); + } + + static ValueSymbolTable *getSymTab(ItemParentClass *Par) { + return Par ? toPtr(Par->getValueSymbolTable()) : 0; + } void addNodeToList(ValueSubClass *V); void removeNodeFromList(ValueSubClass *V); @@ -66,6 +70,8 @@ public: //private: template<typename TPtr> void setSymTabObject(TPtr *, TPtr); + static ValueSymbolTable *toPtr(ValueSymbolTable *P) { return P; } + static ValueSymbolTable *toPtr(ValueSymbolTable &R) { return &R; } }; } // End llvm namespace diff --git a/lib/VMCore/BasicBlock.cpp b/lib/VMCore/BasicBlock.cpp index f682231..3065766 100644 --- a/lib/VMCore/BasicBlock.cpp +++ b/lib/VMCore/BasicBlock.cpp @@ -23,11 +23,9 @@ #include <algorithm> using namespace llvm; -inline ValueSymbolTable * -ilist_traits<Instruction>::getSymTab(BasicBlock *BB) { - if (BB) - if (Function *F = BB->getParent()) - return &F->getValueSymbolTable(); +ValueSymbolTable *BasicBlock::getValueSymbolTable() { + if (Function *F = getParent()) + return &F->getValueSymbolTable(); return 0; } |