mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-20 14:29:27 +00:00
Don't search the entire type table just to delete a type by name.
- This also fixes the ENABLE_EXPENSIVE_CHECKS failure on vmcore.ml. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78287 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
902cf02b0a
commit
8113c6739e
@ -66,6 +66,16 @@ public:
|
||||
/// @brief Lookup a type by name.
|
||||
Type *lookup(const StringRef &name) const;
|
||||
|
||||
/// Lookup the type associated with name.
|
||||
/// @returns end() if the name is not found, or an iterator at the entry for
|
||||
/// Type.
|
||||
iterator find(const StringRef &name);
|
||||
|
||||
/// Lookup the type associated with name.
|
||||
/// @returns end() if the name is not found, or an iterator at the entry for
|
||||
/// Type.
|
||||
const_iterator find(const StringRef &name) const;
|
||||
|
||||
/// @returns true iff the symbol table is empty.
|
||||
/// @brief Determine if the symbol table is empty
|
||||
inline bool empty() const { return tmap.empty(); }
|
||||
|
@ -94,17 +94,15 @@ int LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty) {
|
||||
}
|
||||
|
||||
void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name) {
|
||||
std::string N(Name);
|
||||
|
||||
TypeSymbolTable &TST = unwrap(M)->getTypeSymbolTable();
|
||||
for (TypeSymbolTable::iterator I = TST.begin(), E = TST.end(); I != E; ++I)
|
||||
if (I->first == N)
|
||||
TST.remove(I);
|
||||
|
||||
TypeSymbolTable::iterator I = TST.find(Name);
|
||||
if (I != TST.end())
|
||||
TST.remove(I);
|
||||
}
|
||||
|
||||
LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name) {
|
||||
std::string N(Name);
|
||||
return wrap(unwrap(M)->getTypeByName(N));
|
||||
return wrap(unwrap(M)->getTypeByName(Name));
|
||||
}
|
||||
|
||||
void LLVMDumpModule(LLVMModuleRef M) {
|
||||
|
@ -59,6 +59,17 @@ Type* TypeSymbolTable::lookup(const StringRef &Name) const {
|
||||
return result;
|
||||
}
|
||||
|
||||
TypeSymbolTable::iterator TypeSymbolTable::find(const StringRef &Name) {
|
||||
sys::SmartScopedReader<true> Reader(*TypeSymbolTableLock);
|
||||
return tmap.find(Name);
|
||||
}
|
||||
|
||||
TypeSymbolTable::const_iterator
|
||||
TypeSymbolTable::find(const StringRef &Name) const {
|
||||
sys::SmartScopedReader<true> Reader(*TypeSymbolTableLock);
|
||||
return tmap.find(Name);
|
||||
}
|
||||
|
||||
// remove - Remove a type from the symbol table...
|
||||
Type* TypeSymbolTable::remove(iterator Entry) {
|
||||
TypeSymbolTableLock->writer_acquire();
|
||||
|
Loading…
x
Reference in New Issue
Block a user