Add a new version of Module::getFunction that takes a const char* instead

of a std::string.  This avoids copying the string to the heap in common
cases.  Patch by Pratik Solanki!

llvm-svn: 52834
This commit is contained in:
Chris Lattner 2008-06-27 21:09:10 +00:00
parent d9f8413402
commit e43649fa62
4 changed files with 15 additions and 0 deletions

View File

@ -209,6 +209,7 @@ public:
/// getFunction - Look up the specified function in the module symbol table. /// getFunction - Look up the specified function in the module symbol table.
/// If it does not exist, return null. /// If it does not exist, return null.
Function *getFunction(const std::string &Name) const; Function *getFunction(const std::string &Name) const;
Function *getFunction(const char *Name) const;
/// @} /// @}
/// @name Global Variable Accessors /// @name Global Variable Accessors

View File

@ -67,6 +67,7 @@ public:
/// @returns the value associated with the \p name /// @returns the value associated with the \p name
/// @brief Lookup a named Value. /// @brief Lookup a named Value.
Value *lookup(const std::string &name) const; Value *lookup(const std::string &name) const;
Value *lookup(const char *NameBegin, const char *NameEnd) const;
/// @returns true iff the symbol table is empty /// @returns true iff the symbol table is empty
/// @brief Determine if the symbol table is empty /// @brief Determine if the symbol table is empty

View File

@ -201,6 +201,11 @@ Function *Module::getFunction(const std::string &Name) const {
return dyn_cast_or_null<Function>(SymTab.lookup(Name)); return dyn_cast_or_null<Function>(SymTab.lookup(Name));
} }
Function *Module::getFunction(const char *Name) const {
const ValueSymbolTable &SymTab = getValueSymbolTable();
return dyn_cast_or_null<Function>(SymTab.lookup(Name, Name+strlen(Name)));
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Methods for easy access to the global variables in the module. // Methods for easy access to the global variables in the module.
// //

View File

@ -54,6 +54,14 @@ Value *ValueSymbolTable::lookup(const std::string &Name) const {
return 0; return 0;
} }
Value *ValueSymbolTable::lookup(const char *NameBegin,
const char *NameEnd) const {
const_iterator VI = vmap.find(NameBegin, NameEnd);
if (VI != vmap.end()) // We found the symbol
return VI->getValue();
return 0;
}
// Insert a value into the symbol table with the specified name... // Insert a value into the symbol table with the specified name...
// //
void ValueSymbolTable::reinsertValue(Value* V) { void ValueSymbolTable::reinsertValue(Value* V) {