From: Chris Lattner Date: Wed, 7 Feb 2007 05:35:58 +0000 (+0000) Subject: Eliminate the O(n) version of TypeSymbolTable::remove, it is dead. When X-Git-Tag: android-x86-6.0-r1~1003^2~37496 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=58f84d4b2ddee76d594a1cdfeffaea6417ed0a20;p=android-x86%2Fexternal-llvm.git 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 --- diff --git a/include/llvm/TypeSymbolTable.h b/include/llvm/TypeSymbolTable.h index ffea6d73405..dd260014222 100644 --- a/include/llvm/TypeSymbolTable.h +++ b/include/llvm/TypeSymbolTable.h @@ -113,11 +113,6 @@ public: /// @returns the Type that was erased from the symbol table. 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 remove(Type* TI); - /// @} /// @name AbstractTypeUser Methods /// @{ diff --git a/lib/VMCore/TypeSymbolTable.cpp b/lib/VMCore/TypeSymbolTable.cpp index 6cc1055ebce..b145adc2388 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()) {