diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Bytecode/Format.h | 5 | ||||
-rw-r--r-- | include/llvm/Function.h | 4 | ||||
-rw-r--r-- | include/llvm/Module.h | 12 | ||||
-rw-r--r-- | include/llvm/SymbolTable.h | 52 | ||||
-rw-r--r-- | include/llvm/TypeSymbolTable.h | 4 |
5 files changed, 17 insertions, 60 deletions
diff --git a/include/llvm/Bytecode/Format.h b/include/llvm/Bytecode/Format.h index 562d8ff011..fc896b895d 100644 --- a/include/llvm/Bytecode/Format.h +++ b/include/llvm/Bytecode/Format.h @@ -35,7 +35,7 @@ public: ModuleBlockID = 1, ///< Module block that contains other blocks. FunctionBlockID = 2, ///< Function block identifier ConstantPoolBlockID = 3, ///< Constant pool identifier - SymbolTableBlockID = 4, ///< Symbol table identifier + ValueSymbolTableBlockID= 4, ///< Value Symbol table identifier ModuleGlobalInfoBlockID= 5, ///< Module global info identifier GlobalTypePlaneBlockID = 6, ///< Global type plan identifier InstructionListBlockID = 7, ///< All instructions in a function @@ -46,8 +46,9 @@ public: /// instructions to be encoded more efficiently because VBR takes fewer /// bytes with smaller values. /// @brief Value Compaction Table Block - CompactionTableBlockID = 0x08, + CompactionTableBlockID = 8, + TypeSymbolTableBlockID = 9, ///< Value Symbol table identifier // Not a block id, just used to count them NumberOfBlockIDs }; diff --git a/include/llvm/Function.h b/include/llvm/Function.h index 7346c3b3e3..a31e7f4834 100644 --- a/include/llvm/Function.h +++ b/include/llvm/Function.h @@ -163,8 +163,8 @@ public: /// getSymbolTable() - Return the symbol table... /// - inline SymbolTable &getSymbolTable() { return *SymTab; } - inline const SymbolTable &getSymbolTable() const { return *SymTab; } + inline SymbolTable &getValueSymbolTable() { return *SymTab; } + inline const SymbolTable &getValueSymbolTable() const { return *SymTab; } //===--------------------------------------------------------------------===// diff --git a/include/llvm/Module.h b/include/llvm/Module.h index 42214af1ac..e5c157be95 100644 --- a/include/llvm/Module.h +++ b/include/llvm/Module.h @@ -25,6 +25,7 @@ class GlobalVariable; class GlobalValueRefMap; // Used by ConstantVals.cpp class FunctionType; class SymbolTable; +class TypeSymbolTable; template<> struct ilist_traits<Function> : public SymbolTableListTraits<Function, Module, Module> { @@ -91,7 +92,8 @@ private: FunctionListType FunctionList; ///< The Functions in the module LibraryListType LibraryList; ///< The Libraries needed by the module std::string GlobalScopeAsm; ///< Inline Asm at global scope. - SymbolTable *SymTab; ///< Symbol Table for the module + SymbolTable *ValSymTab; ///< Symbol table for values + TypeSymbolTable *TypeSymTab; ///< Symbol table for types std::string ModuleID; ///< Human readable identifier for the module std::string TargetTriple; ///< Platform target triple Module compiled on std::string DataLayout; ///< Target data description @@ -237,9 +239,13 @@ public: /// Get the Module's list of functions. FunctionListType &getFunctionList() { return FunctionList; } /// Get the symbol table of global variable and function identifiers - const SymbolTable &getSymbolTable() const { return *SymTab; } + const SymbolTable &getValueSymbolTable() const { return *ValSymTab; } /// Get the Module's symbol table of global variable and function identifiers. - SymbolTable &getSymbolTable() { return *SymTab; } + SymbolTable &getValueSymbolTable() { return *ValSymTab; } + /// Get the symbol table of types + const TypeSymbolTable &getTypeSymbolTable() const { return *TypeSymTab; } + /// Get the Module's symbol table of types + TypeSymbolTable &getTypeSymbolTable() { return *TypeSymTab; } /// @} /// @name Global Variable Iteration diff --git a/include/llvm/SymbolTable.h b/include/llvm/SymbolTable.h index 52a2c29ea7..6451f9c8e2 100644 --- a/include/llvm/SymbolTable.h +++ b/include/llvm/SymbolTable.h @@ -47,16 +47,6 @@ class SymbolTable : public AbstractTypeUser { /// @name Types /// @{ public: - - /// @brief A mapping of names to types. - typedef std::map<const std::string, const Type*> TypeMap; - - /// @brief An iterator over the TypeMap. - typedef TypeMap::iterator type_iterator; - - /// @brief A const_iterator over the TypeMap. - typedef TypeMap::const_iterator type_const_iterator; - /// @brief A mapping of names to values. typedef std::map<const std::string, Value *> ValueMap; @@ -96,20 +86,10 @@ public: /// @brief Lookup a named, typed value. Value *lookup(const Type *Ty, const std::string &name) const; - /// This method finds the type with the given \p name in the - /// type map and returns it. - /// @returns null if the name is not found, otherwise the Type - /// associated with the \p name. - /// @brief Lookup a type by name. - Type* lookupType(const std::string& name) const; - /// @returns true iff the type map and the type plane are both not /// empty. /// @brief Determine if the symbol table is empty - inline bool isEmpty() const { return pmap.empty() && tmap.empty(); } - - /// @brief The number of name/type pairs is returned. - inline unsigned num_types() const { return unsigned(tmap.size()); } + inline bool isEmpty() const { return pmap.empty(); } /// Given a base name, return a string that is either equal to it or /// derived from it that does not already occur in the symbol table @@ -178,20 +158,6 @@ public: return pmap.find(Typ)->second.end(); } - /// Get an iterator to the start of the name/Type map. - inline type_iterator type_begin() { return tmap.begin(); } - - /// @brief Get a const_iterator to the start of the name/Type map. - inline type_const_iterator type_begin() const { return tmap.begin(); } - - /// Get an iterator to the end of the name/Type map. This serves as the - /// marker for end of iteration of the types. - inline type_iterator type_end() { return tmap.end(); } - - /// Get a const-iterator to the end of the name/Type map. This serves - /// as the marker for end of iteration of the types. - inline type_const_iterator type_end() const { return tmap.end(); } - /// This method returns a plane_const_iterator for iteration over /// the type planes starting at a specific plane, given by \p Ty. /// @brief Find a type plane. @@ -219,16 +185,6 @@ public: /// @brief Strip the symbol table. bool strip(); - /// Inserts a type into the symbol table with the specified name. There can be - /// a many-to-one mapping between names and types. This method allows a type - /// with an existing entry in the symbol table to get a new name. - /// @brief Insert a type under a new name. - void insert(const std::string &Name, const Type *Typ); - - /// Remove a type at the specified position in the symbol table. - /// @returns the removed Type. - Type* remove(type_iterator TI); - /// @} /// @name Mutators used by Value::setName and other LLVM internals. /// @{ @@ -286,15 +242,9 @@ private: /// @brief The mapping of types to names to values. PlaneMap pmap; - /// This is the type plane. It is separated from the pmap - /// because the elements of the map are name/Type pairs not - /// name/Value pairs and Type is not a Value. - TypeMap tmap; - /// This value is used to retain the last unique value used /// by getUniqueName to generate unique names. mutable uint32_t LastUnique; - /// @} }; diff --git a/include/llvm/TypeSymbolTable.h b/include/llvm/TypeSymbolTable.h index c9f8d3107b..b95415377e 100644 --- a/include/llvm/TypeSymbolTable.h +++ b/include/llvm/TypeSymbolTable.h @@ -111,12 +111,12 @@ public: /// Remove a type at the specified position in the symbol table. /// @returns the removed Type. /// @returns the Type that was erased from the symbol table. - Type* erase(iterator TI); + Type* remove(iterator TI); /// Remove a specific Type from the symbol table. This isn't fast, linear /// search, O(n), algorithm. /// @returns true if the erase was successful (TI was found) - bool erase(Type* TI); + bool remove(Type* TI); /// Rename a type. This ain't fast, we have to linearly search for it first. /// @returns true if the rename was successful (type was found) |