diff --git a/include/llvm/ValueSymbolTable.h b/include/llvm/ValueSymbolTable.h index 752dd2f24fe..c9dc82bac9a 100644 --- a/include/llvm/ValueSymbolTable.h +++ b/include/llvm/ValueSymbolTable.h @@ -24,6 +24,7 @@ namespace llvm { class BasicBlock; class Function; class Module; + class StringRef; /// This class provides a symbol table of name/value pairs. It is essentially /// a std::map but has a controlled interface provided by @@ -62,12 +63,11 @@ public: /// @{ public: - /// This method finds the value with the given \p name in the + /// This method finds the value with the given \p Name in the /// the symbol table. - /// @returns the value associated with the \p name + /// @returns the value associated with the \p Name /// @brief Lookup a named Value. - Value *lookup(const std::string &name) const; - Value *lookup(const char *NameBegin, const char *NameEnd) const; + Value *lookup(const StringRef &Name) const { return vmap.lookup(Name); } /// @returns true iff the symbol table is empty /// @brief Determine if the symbol table is empty @@ -110,7 +110,7 @@ private: /// createValueName - This method attempts to create a value name and insert /// it into the symbol table with the specified name. If it conflicts, it /// auto-renames the name and returns that instead. - ValueName *createValueName(const char *NameStart, unsigned NameLen, Value *V); + ValueName *createValueName(const StringRef &Name, Value *V); /// This method removes a value from the symbol table. It leaves the /// ValueName attached to the value, but it is no longer inserted in the diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index c97cd9c6c90..95f0ecefa5f 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -548,8 +548,7 @@ static bool LinkGlobals(Module *Dest, const Module *Src, // Check to see if may have to link the global with the global, alias or // function. if (SGV->hasName() && !SGV->hasLocalLinkage()) - DGV = cast_or_null(DestSymTab.lookup(SGV->getNameStart(), - SGV->getNameEnd())); + DGV = cast_or_null(DestSymTab.lookup(SGV->getNameRef())); // If we found a global with the same name in the dest module, but it has // internal linkage, we are really not doing any linkage here. @@ -942,8 +941,7 @@ static bool LinkFunctionProtos(Module *Dest, const Module *Src, // Check to see if may have to link the function with the global, alias or // function. if (SF->hasName() && !SF->hasLocalLinkage()) - DGV = cast_or_null(DestSymTab.lookup(SF->getNameStart(), - SF->getNameEnd())); + DGV = cast_or_null(DestSymTab.lookup(SF->getNameRef())); // If we found a global with the same name in the dest module, but it has // internal linkage, we are really not doing any linkage here. diff --git a/lib/VMCore/Module.cpp b/lib/VMCore/Module.cpp index 4daa92db945..9e6e31a9b9e 100644 --- a/lib/VMCore/Module.cpp +++ b/lib/VMCore/Module.cpp @@ -118,7 +118,7 @@ GlobalValue *Module::getNamedValue(const std::string &Name) const { } GlobalValue *Module::getNamedValue(const char *Name) const { - llvm::Value *V = getValueSymbolTable().lookup(Name, Name+strlen(Name)); + llvm::Value *V = getValueSymbolTable().lookup(Name); return cast_or_null(V); } diff --git a/lib/VMCore/ValueSymbolTable.cpp b/lib/VMCore/ValueSymbolTable.cpp index 8d3514b4751..f87bb631c8d 100644 --- a/lib/VMCore/ValueSymbolTable.cpp +++ b/lib/VMCore/ValueSymbolTable.cpp @@ -30,24 +30,6 @@ ValueSymbolTable::~ValueSymbolTable() { #endif } -// lookup a value - Returns null on failure... -// -Value *ValueSymbolTable::lookup(const std::string &Name) const { - const_iterator VI = vmap.find(Name); - if (VI != vmap.end()) // We found the symbol - return VI->getValue(); - return 0; -} - -Value *ValueSymbolTable::lookup(const char *NameBegin, - const char *NameEnd) const { - // FIXME: ValueSymbolTable should move to a StringRef based API. - const_iterator VI = vmap.find(StringRef(NameBegin, NameEnd - NameBegin)); - if (VI != vmap.end()) // We found the symbol - return VI->getValue(); - return 0; -} - // Insert a value into the symbol table with the specified name... // void ValueSymbolTable::reinsertValue(Value* V) { @@ -93,10 +75,9 @@ void ValueSymbolTable::removeValueName(ValueName *V) { /// createValueName - This method attempts to create a value name and insert /// it into the symbol table with the specified name. If it conflicts, it /// auto-renames the name and returns that instead. -ValueName *ValueSymbolTable::createValueName(const char *NameStart, - unsigned NameLen, Value *V) { +ValueName *ValueSymbolTable::createValueName(const StringRef &Name, Value *V) { // In the common case, the name is not already in the symbol table. - ValueName &Entry = vmap.GetOrCreateValue(StringRef(NameStart, NameLen)); + ValueName &Entry = vmap.GetOrCreateValue(Name); if (Entry.getValue() == 0) { Entry.setValue(V); //DEBUG(DOUT << " Inserted value: " << Entry.getKeyData() << ": " @@ -105,11 +86,11 @@ ValueName *ValueSymbolTable::createValueName(const char *NameStart, } // Otherwise, there is a naming conflict. Rename this value. - SmallString<128> UniqueName(NameStart, NameStart+NameLen); + SmallString<128> UniqueName(Name.begin(), Name.end()); while (1) { // Trim any suffix off. - UniqueName.resize(NameLen); + UniqueName.resize(Name.size()); UniqueName.append_uint_32(++LastUnique); // Try insert the vmap entry with this suffix.