diff options
author | Chris Lattner <sabre@nondot.org> | 2007-02-07 05:35:58 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-02-07 05:35:58 +0000 |
commit | 58f84d4b2ddee76d594a1cdfeffaea6417ed0a20 (patch) | |
tree | 343023065e4d83b9d620c6eb441471c5f3a243e3 /lib | |
parent | 67408dab1b50e17decf788c119ca0194fc7024a6 (diff) | |
download | external_llvm-58f84d4b2ddee76d594a1cdfeffaea6417ed0a20.zip external_llvm-58f84d4b2ddee76d594a1cdfeffaea6417ed0a20.tar.gz external_llvm-58f84d4b2ddee76d594a1cdfeffaea6417ed0a20.tar.bz2 |
Eliminate the O(n) version of TypeSymbolTable::remove, it is dead. When
inserting a type into the type symbol table, only compute unique name if not
in symtab already.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33983 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VMCore/TypeSymbolTable.cpp | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/lib/VMCore/TypeSymbolTable.cpp b/lib/VMCore/TypeSymbolTable.cpp index 6cc1055..b145adc 100644 --- a/lib/VMCore/TypeSymbolTable.cpp +++ b/lib/VMCore/TypeSymbolTable.cpp @@ -47,17 +47,6 @@ Type* TypeSymbolTable::lookup(const std::string& Name) const { return 0; } -// Erase a specific type from the symbol table -bool TypeSymbolTable::remove(Type *N) { - for (iterator TI = tmap.begin(), TE = tmap.end(); TI != TE; ++TI) { - if (TI->second == N) { - this->remove(TI); - return true; - } - } - return false; -} - // remove - Remove a type from the symbol table... Type* TypeSymbolTable::remove(iterator Entry) { assert(Entry != tmap.end() && "Invalid entry to remove!"); @@ -88,19 +77,30 @@ Type* TypeSymbolTable::remove(iterator Entry) { void TypeSymbolTable::insert(const std::string& Name, const Type* T) { assert(T && "Can't insert null type into symbol table!"); - // Check to see if there is a naming conflict. If so, rename this type! - std::string UniqueName = Name; - if (lookup(Name)) - UniqueName = getUniqueName(Name); - + if (tmap.insert(make_pair(Name, T)).second) { + // Type inserted fine with no conflict. + #if DEBUG_SYMBOL_TABLE - dump(); - cerr << " Inserting type: " << UniqueName << ": " - << T->getDescription() << "\n"; + dump(); + cerr << " Inserted type: " << Name << ": " << T->getDescription() << "\n"; +#endif + } else { + // If there is a name conflict... + + // Check to see if there is a naming conflict. If so, rename this type! + std::string UniqueName = Name; + if (lookup(Name)) + UniqueName = getUniqueName(Name); + +#if DEBUG_SYMBOL_TABLE + dump(); + cerr << " Inserting type: " << UniqueName << ": " + << T->getDescription() << "\n"; #endif - // Insert the tmap entry - tmap.insert(make_pair(UniqueName, T)); + // Insert the tmap entry + tmap.insert(make_pair(UniqueName, T)); + } // If we are adding an abstract type, add the symbol table to it's use list. if (T->isAbstract()) { |