aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/ProgrammersManual.html39
-rw-r--r--include/llvm/Function.h6
-rw-r--r--include/llvm/Module.h19
-rw-r--r--lib/AsmParser/llvmAsmParser.y26
-rw-r--r--lib/Bytecode/Reader/Reader.cpp4
-rw-r--r--lib/Bytecode/Writer/SlotCalculator.cpp11
-rw-r--r--lib/Bytecode/Writer/Writer.cpp6
-rw-r--r--lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp19
-rw-r--r--lib/ExecutionEngine/Interpreter/Support.cpp7
-rw-r--r--lib/Linker/LinkModules.cpp11
-rw-r--r--lib/Target/CBackend/CBackend.cpp13
-rw-r--r--lib/Target/CBackend/Writer.cpp13
-rw-r--r--lib/Transforms/IPO/DeadTypeElimination.cpp49
-rw-r--r--lib/Transforms/IPO/FunctionResolution.cpp5
-rw-r--r--lib/Transforms/LevelRaise.cpp2
-rw-r--r--lib/Transforms/Scalar/SymbolStripping.cpp9
-rw-r--r--lib/Transforms/Utils/BasicBlockUtils.cpp2
-rw-r--r--lib/Transforms/Utils/Linker.cpp11
-rw-r--r--lib/VMCore/AsmWriter.cpp34
-rw-r--r--lib/VMCore/BasicBlock.cpp6
-rw-r--r--lib/VMCore/Function.cpp18
-rw-r--r--lib/VMCore/Instruction.cpp6
-rw-r--r--lib/VMCore/Linker.cpp11
-rw-r--r--lib/VMCore/Module.cpp47
-rw-r--r--lib/VMCore/SlotCalculator.cpp11
-rw-r--r--lib/VMCore/SymbolTableListTraitsImpl.h16
-rw-r--r--lib/VMCore/Verifier.cpp8
27 files changed, 159 insertions, 250 deletions
diff --git a/docs/ProgrammersManual.html b/docs/ProgrammersManual.html
index 26d4550087..2e14c6beba 100644
--- a/docs/ProgrammersManual.html
+++ b/docs/ProgrammersManual.html
@@ -1441,26 +1441,10 @@ This traverses the <a href="#Type"><tt>Type</tt></a> of the <tt>Function</tt>
and returns the return type of the function, or the <a
href="#FunctionType"><tt>FunctionType</tt></a> of the actual function.<p>
-
-<li><tt>bool hasSymbolTable() const</tt><p>
-
-Return true if the <tt>Function</tt> has a symbol table allocated to it and if
-there is at least one entry in it.<p>
-
<li><tt><a href="#SymbolTable">SymbolTable</a> *getSymbolTable()</tt><p>
Return a pointer to the <a href="#SymbolTable"><tt>SymbolTable</tt></a> for this
-<tt>Function</tt> or a null pointer if one has not been allocated (because there
-are no named values in the function).<p>
-
-<li><tt><a href="#SymbolTable">SymbolTable</a> *getSymbolTableSure()</tt><p>
-
-Return a pointer to the <a href="#SymbolTable"><tt>SymbolTable</tt></a> for this
-<tt>Function</tt> or allocate a new <a
-href="#SymbolTable"><tt>SymbolTable</tt></a> if one is not already around. This
-should only be used when adding elements to the <a
-href="#SymbolTable"><tt>SymbolTable</tt></a>, so that empty symbol tables are
-not left laying around.<p>
+<tt>Function</tt>.<p>
@@ -1580,25 +1564,10 @@ action that doesn't have a forwarding method.<p>
<!-- Symbol table stuff -->
<hr size=0>
-<li><tt>bool hasSymbolTable() const</tt><p>
-
-Return true if the <tt>Module</tt> has a symbol table allocated to it and if
-there is at least one entry in it.<p>
-
<li><tt><a href="#SymbolTable">SymbolTable</a> *getSymbolTable()</tt><p>
-Return a pointer to the <a href="#SymbolTable"><tt>SymbolTable</tt></a> for this
-<tt>Module</tt> or a null pointer if one has not been allocated (because there
-are no named values in the function).<p>
-
-<li><tt><a href="#SymbolTable">SymbolTable</a> *getSymbolTableSure()</tt><p>
-
-Return a pointer to the <a href="#SymbolTable"><tt>SymbolTable</tt></a> for this
-<tt>Module</tt> or allocate a new <a
-href="#SymbolTable"><tt>SymbolTable</tt></a> if one is not already around. This
-should only be used when adding elements to the <a
-href="#SymbolTable"><tt>SymbolTable</tt></a>, so that empty symbol tables are
-not left laying around.<p>
+Return a reference to the <a href="#SymbolTable"><tt>SymbolTable</tt></a> for
+this <tt>Module</tt>.<p>
<!-- Convenience methods -->
@@ -1776,6 +1745,6 @@ pointer to the parent Function.
<a href="mailto:sabre@nondot.org">Chris Lattner</a></address>
<!-- Created: Tue Aug 6 15:00:33 CDT 2002 -->
<!-- hhmts start -->
-Last modified: Fri Nov 8 00:48:37 CST 2002
+Last modified: Wed Nov 20 12:21:34 CST 2002
<!-- hhmts end -->
</font></body></html>
diff --git a/include/llvm/Function.h b/include/llvm/Function.h
index 34b6c0f252..885824d4f7 100644
--- a/include/llvm/Function.h
+++ b/include/llvm/Function.h
@@ -113,10 +113,8 @@ public:
/// getSymbolTable() - Return the symbol table...
///
- inline SymbolTable *getSymbolTable() { return SymTab; }
- inline const SymbolTable *getSymbolTable() const { return SymTab; }
- SymbolTable *getSymbolTableSure() { return SymTab; }
- bool hasSymbolTable() const { return true; }
+ inline SymbolTable &getSymbolTable() { return *SymTab; }
+ inline const SymbolTable &getSymbolTable() const { return *SymTab; }
//===--------------------------------------------------------------------===//
diff --git a/include/llvm/Module.h b/include/llvm/Module.h
index 4d2edceb73..0bb23f9d40 100644
--- a/include/llvm/Module.h
+++ b/include/llvm/Module.h
@@ -113,22 +113,11 @@ public:
//===--------------------------------------------------------------------===//
// Symbol table support functions...
- /// hasSymbolTable() - Returns true if there is a symbol table allocated to
- /// this object AND if there is at least one name in it!
+ /// getSymbolTable() - Get access to the symbol table for the module, where
+ /// global variables and functions are identified.
///
- bool hasSymbolTable() const;
-
- /// getSymbolTable() - CAUTION: The current symbol table may be null if there
- /// are no names (ie, the symbol table is empty)
- ///
- inline SymbolTable *getSymbolTable() { return SymTab; }
- inline const SymbolTable *getSymbolTable() const { return SymTab; }
-
- /// getSymbolTableSure is guaranteed to not return a null pointer, because if
- /// the method does not already have a symtab, one is created. Use this if
- /// you intend to put something into the symbol table for the method.
- ///
- SymbolTable *getSymbolTableSure();
+ inline SymbolTable &getSymbolTable() { return *SymTab; }
+ inline const SymbolTable &getSymbolTable() const { return *SymTab; }
//===--------------------------------------------------------------------===//
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index f71fa585da..1c990e72aa 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -211,16 +211,18 @@ static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
case ValID::NameVal: { // Is it a named definition?
string Name(D.Name);
SymbolTable *SymTab = 0;
- if (inFunctionScope()) SymTab = CurMeth.CurrentFunction->getSymbolTable();
- Value *N = SymTab ? SymTab->lookup(Type::TypeTy, Name) : 0;
+ Value *N = 0;
+ if (inFunctionScope()) {
+ SymTab = &CurMeth.CurrentFunction->getSymbolTable();
+ N = SymTab->lookup(Type::TypeTy, Name);
+ }
if (N == 0) {
// Symbol table doesn't automatically chain yet... because the function
// hasn't been added to the module...
//
- SymTab = CurModule.CurrentModule->getSymbolTable();
- if (SymTab)
- N = SymTab->lookup(Type::TypeTy, Name);
+ SymTab = &CurModule.CurrentModule->getSymbolTable();
+ N = SymTab->lookup(Type::TypeTy, Name);
if (N == 0) break;
}
@@ -251,10 +253,10 @@ static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
}
static Value *lookupInSymbolTable(const Type *Ty, const string &Name) {
- SymbolTable *SymTab =
+ SymbolTable &SymTab =
inFunctionScope() ? CurMeth.CurrentFunction->getSymbolTable() :
CurModule.CurrentModule->getSymbolTable();
- return SymTab ? SymTab->lookup(Ty, Name) : 0;
+ return SymTab.lookup(Ty, Name);
}
// getValNonImprovising - Look up the value specified by the provided type and
@@ -481,11 +483,11 @@ static bool setValueName(Value *V, char *NameStr) {
ThrowException("Can't assign name '" + Name +
"' to a null valued instruction!");
- SymbolTable *ST = inFunctionScope() ?
- CurMeth.CurrentFunction->getSymbolTableSure() :
- CurModule.CurrentModule->getSymbolTableSure();
+ SymbolTable &ST = inFunctionScope() ?
+ CurMeth.CurrentFunction->getSymbolTable() :
+ CurModule.CurrentModule->getSymbolTable();
- Value *Existing = ST->lookup(V->getType(), Name);
+ Value *Existing = ST.lookup(V->getType(), Name);
if (Existing) { // Inserting a name that is already defined???
// There is only one case where this is allowed: when we are refining an
// opaque type. In this case, Existing will be an opaque type.
@@ -528,7 +530,7 @@ static bool setValueName(Value *V, char *NameStr) {
V->getType()->getDescription() + "' type plane!");
}
- V->setName(Name, ST);
+ V->setName(Name, &ST);
return false;
}
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index 0f9889c4c8..1444501308 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -338,7 +338,7 @@ bool BytecodeParser::ParseMethod(const uchar *&Buf, const uchar *EndBuf,
case BytecodeFormat::SymbolTable:
BCR_TRACE(2, "BLOCK BytecodeFormat::SymbolTable: {\n");
- if (ParseSymbolTable(Buf, Buf+Size, M->getSymbolTableSure())) {
+ if (ParseSymbolTable(Buf, Buf+Size, &M->getSymbolTable())) {
delete M; return true;
}
break;
@@ -543,7 +543,7 @@ bool BytecodeParser::ParseModule(const uchar *Buf, const uchar *EndBuf,
case BytecodeFormat::SymbolTable:
BCR_TRACE(1, "BLOCK BytecodeFormat::SymbolTable: {\n");
- if (ParseSymbolTable(Buf, Buf+Size, Mod->getSymbolTableSure())) {
+ if (ParseSymbolTable(Buf, Buf+Size, &Mod->getSymbolTable())) {
delete Mod; return true;
}
break;
diff --git a/lib/Bytecode/Writer/SlotCalculator.cpp b/lib/Bytecode/Writer/SlotCalculator.cpp
index ca74711b48..5f6f2e7835 100644
--- a/lib/Bytecode/Writer/SlotCalculator.cpp
+++ b/lib/Bytecode/Writer/SlotCalculator.cpp
@@ -90,9 +90,9 @@ void SlotCalculator::processModule() {
// Insert constants that are named at module level into the slot pool so that
// the module symbol table can refer to them...
//
- if (TheModule->hasSymbolTable() && !IgnoreNamedNodes) {
+ if (!IgnoreNamedNodes) {
SC_DEBUG("Inserting SymbolTable values:\n");
- processSymbolTable(TheModule->getSymbolTable());
+ processSymbolTable(&TheModule->getSymbolTable());
}
SC_DEBUG("end processModule!\n");
@@ -156,8 +156,7 @@ void SlotCalculator::incorporateFunction(const Function *M) {
// symboltable references to constants not in the output. Scan for these
// constants now.
//
- if (M->hasSymbolTable())
- processSymbolTableConstants(M->getSymbolTable());
+ processSymbolTableConstants(&M->getSymbolTable());
}
SC_DEBUG("Inserting Labels:\n");
@@ -174,9 +173,9 @@ void SlotCalculator::incorporateFunction(const Function *M) {
for_each(inst_begin(M), inst_end(M),
bind_obj(this, &SlotCalculator::insertValue));
- if (M->hasSymbolTable() && !IgnoreNamedNodes) {
+ if (!IgnoreNamedNodes) {
SC_DEBUG("Inserting SymbolTable values:\n");
- processSymbolTable(M->getSymbolTable());
+ processSymbolTable(&M->getSymbolTable());
}
SC_DEBUG("end processFunction!\n");
diff --git a/lib/Bytecode/Writer/Writer.cpp b/lib/Bytecode/Writer/Writer.cpp
index e85498ce5f..92b6a62cc6 100644
--- a/lib/Bytecode/Writer/Writer.cpp
+++ b/lib/Bytecode/Writer/Writer.cpp
@@ -58,8 +58,7 @@ BytecodeWriter::BytecodeWriter(std::deque<unsigned char> &o, const Module *M)
processMethod(I);
// If needed, output the symbol table for the module...
- if (M->hasSymbolTable())
- outputSymbolTable(*M->getSymbolTable());
+ outputSymbolTable(M->getSymbolTable());
}
// Helper function for outputConstants().
@@ -187,8 +186,7 @@ void BytecodeWriter::processMethod(const Function *F) {
processBasicBlock(*I);
// If needed, output the symbol table for the function...
- if (F->hasSymbolTable())
- outputSymbolTable(*F->getSymbolTable());
+ outputSymbolTable(F->getSymbolTable());
Table.purgeFunction();
}
diff --git a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
index bc873e290e..89f64b1b9b 100644
--- a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
+++ b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
@@ -437,16 +437,15 @@ static FILE *getFILE(PointerTy Ptr) {
// Check to see if the currently loaded module contains an __iob symbol...
GlobalVariable *IOB = 0;
- if (SymbolTable *ST = M->getSymbolTable()) {
- for (SymbolTable::iterator I = ST->begin(), E = ST->end(); I != E; ++I) {
- SymbolTable::VarMap &M = I->second;
- for (SymbolTable::VarMap::iterator J = M.begin(), E = M.end();
- J != E; ++J)
- if (J->first == "__iob")
- if ((IOB = dyn_cast<GlobalVariable>(J->second)))
- break;
- if (IOB) break;
- }
+ SymbolTable &ST = M->getSymbolTable();
+ for (SymbolTable::iterator I = ST.begin(), E = ST.end(); I != E; ++I) {
+ SymbolTable::VarMap &M = I->second;
+ for (SymbolTable::VarMap::iterator J = M.begin(), E = M.end();
+ J != E; ++J)
+ if (J->first == "__iob")
+ if ((IOB = dyn_cast<GlobalVariable>(J->second)))
+ break;
+ if (IOB) break;
}
// If we found an __iob symbol now, find out what the actual address it's
diff --git a/lib/ExecutionEngine/Interpreter/Support.cpp b/lib/ExecutionEngine/Interpreter/Support.cpp
index aa97621214..4c31d2692a 100644
--- a/lib/ExecutionEngine/Interpreter/Support.cpp
+++ b/lib/ExecutionEngine/Interpreter/Support.cpp
@@ -15,13 +15,10 @@ using std::cout;
// LookupMatchingNames helper - Search a symbol table for values matching Name.
//
static inline void LookupMatchingNames(const std::string &Name,
- SymbolTable *SymTab,
+ SymbolTable &SymTab,
std::vector<Value*> &Results) {
- if (SymTab == 0) return; // No symbolic values :(
-
// Loop over all of the type planes in the symbol table...
- for (SymbolTable::iterator I = SymTab->begin(), E = SymTab->end();
- I != E; ++I) {
+ for (SymbolTable::iterator I = SymTab.begin(), E = SymTab.end(); I != E; ++I){
SymbolTable::VarMap &Plane = I->second;
// Search the symbol table plane for this name...
diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp
index 8fe9113d82..0d3cc9bfa9 100644
--- a/lib/Linker/LinkModules.cpp
+++ b/lib/Linker/LinkModules.cpp
@@ -32,11 +32,8 @@ static inline bool Error(string *E, string Message) {
// Make sure there are no type name conflicts.
//
static bool LinkTypes(Module *Dest, const Module *Src, string *Err = 0) {
- // No symbol table? Can't have named types.
- if (!Src->hasSymbolTable()) return false;
-
- SymbolTable *DestST = Dest->getSymbolTableSure();
- const SymbolTable *SrcST = Src->getSymbolTable();
+ SymbolTable *DestST = &Dest->getSymbolTable();
+ const SymbolTable *SrcST = &Src->getSymbolTable();
// Look for a type plane for Type's...
SymbolTable::const_iterator PI = SrcST->find(Type::TypeTy);
@@ -176,7 +173,7 @@ static bool LinkGlobals(Module *Dest, const Module *Src,
map<const Value*, Value*> &ValueMap, string *Err = 0) {
// We will need a module level symbol table if the src module has a module
// level symbol table...
- SymbolTable *ST = Src->getSymbolTable() ? Dest->getSymbolTableSure() : 0;
+ SymbolTable *ST = (SymbolTable*)&Src->getSymbolTable();
// Loop over all of the globals in the src module, mapping them over as we go
//
@@ -266,7 +263,7 @@ static bool LinkFunctionProtos(Module *Dest, const Module *Src,
string *Err = 0) {
// We will need a module level symbol table if the src module has a module
// level symbol table...
- SymbolTable *ST = Src->getSymbolTable() ? Dest->getSymbolTableSure() : 0;
+ SymbolTable *ST = (SymbolTable*)&Src->getSymbolTable();
// Loop over all of the functions in the src module, mapping them over as we
// go
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index fcfda5d15a..8d9b314695 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -485,10 +485,10 @@ bool CWriter::nameAllUsedStructureTypes(Module &M) {
// Loop over the module symbol table, removing types from UT that are already
// named.
//
- SymbolTable *MST = M.getSymbolTableSure();
- if (MST->find(Type::TypeTy) != MST->end())
- for (SymbolTable::type_iterator I = MST->type_begin(Type::TypeTy),
- E = MST->type_end(Type::TypeTy); I != E; ++I)
+ SymbolTable &MST = M.getSymbolTable();
+ if (MST.find(Type::TypeTy) != MST.end())
+ for (SymbolTable::type_iterator I = MST.type_begin(Type::TypeTy),
+ E = MST.type_end(Type::TypeTy); I != E; ++I)
UT.erase(cast<Type>(I->second));
// UT now contains types that are not named. Loop over it, naming structure
@@ -498,7 +498,7 @@ bool CWriter::nameAllUsedStructureTypes(Module &M) {
for (std::set<const Type *>::const_iterator I = UT.begin(), E = UT.end();
I != E; ++I)
if (const StructType *ST = dyn_cast<StructType>(*I)) {
- ((Value*)ST)->setName("unnamed", MST);
+ ((Value*)ST)->setName("unnamed", &MST);
Changed = true;
}
return Changed;
@@ -547,8 +547,7 @@ void CWriter::printModule(Module *M) {
//
// Loop over the symbol table, emitting all named constants...
- if (M->hasSymbolTable())
- printSymbolTable(*M->getSymbolTable());
+ printSymbolTable(M->getSymbolTable());
// Global variable declarations...
if (!M->gempty()) {
diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp
index fcfda5d15a..8d9b314695 100644
--- a/lib/Target/CBackend/Writer.cpp
+++ b/lib/Target/CBackend/Writer.cpp
@@ -485,10 +485,10 @@ bool CWriter::nameAllUsedStructureTypes(Module &M) {
// Loop over the module symbol table, removing types from UT that are already
// named.
//
- SymbolTable *MST = M.getSymbolTableSure();
- if (MST->find(Type::TypeTy) != MST->end())
- for (SymbolTable::type_iterator I = MST->type_begin(Type::TypeTy),
- E = MST->type_end(Type::TypeTy); I != E; ++I)
+ SymbolTable &MST = M.getSymbolTable();
+ if (MST.find(Type::TypeTy) != MST.end())
+ for (SymbolTable::type_iterator I = MST.type_begin(Type::TypeTy),
+ E = MST.type_end(Type::TypeTy); I != E; ++I)
UT.erase(cast<Type>(I->second));
// UT now contains types that are not named. Loop over it, naming structure
@@ -498,7 +498,7 @@ bool CWriter::nameAllUsedStructureTypes(Module &M) {
for (std::set<const Type *>::const_iterator I = UT.begin(), E = UT.end();
I != E; ++I)
if (const StructType *ST = dyn_cast<StructType>(*I)) {
- ((Value*)ST)->setName("unnamed", MST);
+ ((Value*)ST)->setName("unnamed", &MST);
Changed = true;
}
return Changed;
@@ -547,8 +547,7 @@ void CWriter::printModule(Module *M) {
//
// Loop over the symbol table, emitting all named constants...
- if (M->hasSymbolTable())
- printSymbolTable(*M->getSymbolTable());
+ printSymbolTable(M->getSymbolTable());
// Global variable declarations...
if (!M->gempty()) {
diff --git a/lib/Transforms/IPO/DeadTypeElimination.cpp b/lib/Transforms/IPO/DeadTypeElimination.cpp
index a1860a92e9..2ea9ac2a56 100644
--- a/lib/Transforms/IPO/DeadTypeElimination.cpp
+++ b/lib/Transforms/IPO/DeadTypeElimination.cpp
@@ -63,35 +63,34 @@ static inline bool ShouldNukeSymtabEntry(const std::pair<std::string,Value*>&E){
bool DTE::run(Module &M) {
bool Changed = false;
- if (SymbolTable *ST = M.getSymbolTable()) {
- const std::set<const Type *> &UsedTypes =
- getAnalysis<FindUsedTypes>().getTypes();
+ SymbolTable &ST = M.getSymbolTable();
+ const std::set<const Type *> &UsedTypes =
+ getAnalysis<FindUsedTypes>().getTypes();
- // Check the symbol table for superfluous type entries...
- //
- // Grab the 'type' plane of the module symbol...
- SymbolTable::iterator STI = ST->find(Type::TypeTy);
- if (STI != ST->end()) {
- // Loop over all entries in the type plane...
- SymbolTable::VarMap &Plane = STI->second;
- for (SymbolTable::VarMap::iterator PI = Plane.begin(); PI != Plane.end();)
- // If this entry should be unconditionally removed, or if we detect that
- // the type is not used, remove it.
- //
- if (ShouldNukeSymtabEntry(*PI) ||
- !UsedTypes.count(cast<Type>(PI->second))) {
+ // Check the symbol table for superfluous type entries...
+ //
+ // Grab the 'type' plane of the module symbol...
+ SymbolTable::iterator STI = ST.find(Type::TypeTy);
+ if (STI != ST.end()) {
+ // Loop over all entries in the type plane...
+ SymbolTable::VarMap &Plane = STI->second;
+ for (SymbolTable::VarMap::iterator PI = Plane.begin(); PI != Plane.end();)
+ // If this entry should be unconditionally removed, or if we detect that
+ // the type is not used, remove it.
+ //
+ if (ShouldNukeSymtabEntry(*PI) ||
+ !UsedTypes.count(cast<Type>(PI->second))) {
#if MAP_IS_NOT_BRAINDEAD
- PI = Plane.erase(PI); // STD C++ Map should support this!
+ PI = Plane.erase(PI); // STD C++ Map should support this!
#else
- Plane.erase(PI); // Alas, GCC 2.95.3 doesn't *SIGH*
- PI = Plane.begin();
+ Plane.erase(PI); // Alas, GCC 2.95.3 doesn't *SIGH*
+ PI = Plane.begin();
#endif
- ++NumKilled;
- Changed = true;
- } else {
- ++PI;
- }
- }
+ ++NumKilled;
+ Changed = true;
+ } else {
+ ++PI;
+ }
}
return Changed;
diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp
index cbcfa2aba8..bb3a9af659 100644
--- a/lib/Transforms/IPO/FunctionResolution.cpp
+++ b/lib/Transforms/IPO/FunctionResolution.cpp
@@ -304,8 +304,7 @@ static bool ProcessGlobalsWithSameName(Module &M,
}
bool FunctionResolvingPass::run(Module &M) {
- SymbolTable *ST = M.getSymbolTable();
- if (!ST) return false;
+ SymbolTable &ST = M.getSymbolTable();
std::map<string, vector<GlobalValue*> > Globals;
@@ -313,7 +312,7 @@ bool FunctionResolvingPass::run(Module &M) {
// then add it to the Functions map. We do a two pass algorithm here to avoid
// problems with iterators getting invalidated if we did a one pass scheme.
//
- for (SymbolTable::iterator I = ST->begin(), E = ST->end(); I != E; ++I)
+ for (SymbolTable::iterator I = ST.begin(), E = ST.end(); I != E; ++I)
if (const PointerType *PT = dyn_cast<PointerType>(I->first)) {
SymbolTable::VarMap &Plane = I->second;
for (SymbolTable::type_iterator PI = Plane.begin(), PE = Plane.end();
diff --git a/lib/Transforms/LevelRaise.cpp b/lib/Transforms/LevelRaise.cpp
index 84f57852cd..9520823206 100644
--- a/lib/Transforms/LevelRaise.cpp
+++ b/lib/Transforms/LevelRaise.cpp
@@ -209,7 +209,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
if (!Src->hasName() && CI->hasName()) {
std::string Name = CI->getName();
CI->setName("");
- Src->setName(Name, BB->getParent()->getSymbolTable());
+ Src->setName(Name, &BB->getParent()->getSymbolTable());
}
// DCE the instruction now, to avoid having the iterative version of DCE
diff --git a/lib/Transforms/Scalar/SymbolStripping.cpp b/lib/Transforms/Scalar/SymbolStripping.cpp
index 5f52969075..99e596e8f2 100644
--- a/lib/Transforms/Scalar/SymbolStripping.cpp
+++ b/lib/Transforms/Scalar/SymbolStripping.cpp
@@ -19,20 +19,19 @@
#include "llvm/SymbolTable.h"
#include "llvm/Pass.h"
-static bool StripSymbolTable(SymbolTable *SymTab) {
- if (SymTab == 0) return false; // No symbol table? No problem.
+static bool StripSymbolTable(SymbolTable &SymTab) {
bool RemovedSymbol = false;
- for (SymbolTable::iterator I = SymTab->begin(); I != SymTab->end(); ++I) {
+ for (SymbolTable::iterator I = SymTab.begin(); I != SymTab.end(); ++I) {
std::map<const std::string, Value *> &Plane = I->second;
SymbolTable::type_iterator B;
while ((B = Plane.begin()) != Plane.end()) { // Found nonempty type plane!
Value *V = B->second;
if (isa<Constant>(V) || isa<Type>(V))
- SymTab->type_remove(B);
+ SymTab.type_remove(B);
else
- V->setName("", SymTab); // Set name to "", removing from symbol table!
+ V->setName("", &SymTab); // Set name to "", removing from symbol table!
RemovedSymbol = true;
assert(Plane.begin() != B && "Symbol not removed from table!");
}
diff --git a/lib/Transforms/Utils/BasicBlockUtils.cpp b/lib/Transforms/Utils/BasicBlockUtils.cpp
index 22377ba3ed..33834277b7 100644
--- a/lib/Transforms/Utils/BasicBlockUtils.cpp
+++ b/lib/Transforms/Utils/BasicBlockUtils.cpp
@@ -28,7 +28,7 @@ void ReplaceInstWithValue(BasicBlock::InstListType &BIL,
// Make sure to propagate a name if there is one already...
if (OldName.size() && !V->hasName())
- V->setName(OldName, BIL.getParent()->getSymbolTable());
+ V->setName(OldName, &BIL.getParent()->getSymbolTable());
}
diff --git a/lib/Transforms/Utils/Linker.cpp b/lib/Transforms/Utils/Linker.cpp
index 8fe9113d82..0d3cc9bfa9 100644
--- a/lib/Transforms/Utils/Linker.cpp
+++ b/lib/Transforms/Utils/Linker.cpp
@@ -32,11 +32,8 @@ static inline bool Error(string *E, string Message) {
// Make sure there are no type name conflicts.
//
static bool LinkTypes(Module *Dest, const Module *Src, string *Err = 0) {
- // No symbol table? Can't have named types.
- if (!Src->hasSymbolTable()) return false;
-
- SymbolTable *DestST = Dest->getSymbolTableSure();
- const SymbolTable *SrcST = Src->getSymbolTable();
+ SymbolTable *DestST = &Dest->getSymbolTable();
+ const SymbolTable *SrcST = &Src->getSymbolTable();
// Look for a type plane for Type's...
SymbolTable::const_iterator PI = SrcST->find(Type::TypeTy);
@@ -176,7 +173,7 @@ static bool LinkGlobals(Module *Dest, const Module *Src,
map<const Value*, Value*> &ValueMap, string *Err = 0) {
// We will need a module level symbol table if the src module has a module
// level symbol table...
- SymbolTable *ST = Src->getSymbolTable() ? Dest->getSymbolTableSure() : 0;
+ SymbolTable *ST = (SymbolTable*)&Src->getSymbolTable();
// Loop over all of the globals in the src module, mapping them over as we go
//
@@ -266,7 +263,7 @@ static bool LinkFunctionProtos(Module *Dest, const Module *Src,
string *Err = 0) {
// We will need a module level symbol table if the src module has a module
// level symbol table...
- SymbolTable *ST = Src->getSymbolTable() ? Dest->getSymbolTableSure() : 0;
+ SymbolTable *ST = (SymbolTable*)&Src->getSymbolTable();
// Loop over all of the functions in the src module, mapping them over as we
// go
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp
index e27bd26ba2..2c9a77c834 100644
--- a/lib/VMCore/AsmWriter.cpp
+++ b/lib/VMCore/AsmWriter.cpp
@@ -74,20 +74,19 @@ static SlotCalculator *createSlotCalculator(const Value *V) {
//
static void fillTypeNameTable(const Module *M,
map<const Type *, string> &TypeNames) {
- if (M && M->hasSymbolTable()) {
- const SymbolTable *ST = M->getSymbolTable();
- SymbolTable::const_iterator PI = ST->find(Type::TypeTy);
- if (PI != ST->end()) {
- SymbolTable::type_const_iterator I = PI->second.begin();
- for (; I != PI->second.end(); ++I) {
- // As a heuristic, don't insert pointer to primitive types, because
- // they are used too often to have a single useful name.
- //
- const Type *Ty = cast<const Type>(I->second);
- if (!isa<PointerType>(Ty) ||
- !cast<PointerType>(Ty)->getElementType()->isPrimitiveType())
- TypeNames.insert(std::make_pair(Ty, "%"+I->first));
- }
+ if (!M) return;
+ const SymbolTable &ST = M->getSymbolTable();
+ SymbolTable::const_iterator PI = ST.find(Type::TypeTy);
+ if (PI != ST.end()) {
+ SymbolTable::type_const_iterator I = PI->second.begin();
+ for (; I != PI->second.end(); ++I) {
+ // As a heuristic, don't insert pointer to primitive types, because
+ // they are used too often to have a single useful name.
+ //
+ const Type *Ty = cast<const Type>(I->second);
+ if (!isa<PointerType>(Ty) ||
+ !cast<PointerType>(Ty)->getElementType()->isPrimitiveType())
+ TypeNames.insert(std::make_pair(Ty, "%"+I->first));
}
}
}
@@ -200,7 +199,7 @@ ostream &WriteTypeSymbolic(ostream &Out, const Type *Ty, const Module *M) {
// If they want us to print out a type, attempt to make it symbolic if there
// is a symbol table in the module...
- if (M && M->hasSymbolTable()) {
+ if (M) {
map<const Type *, string> TypeNames;
fillTypeNameTable(M, TypeNames);
@@ -406,7 +405,7 @@ ostream &WriteAsOperand(ostream &Out, const Value *V, bool PrintType,
map<const Type *, string> TypeNames;
if (Context == 0) Context = getModuleFromVal(V);