shrink vmcore by moving symbol table stripping support out of VMCore into

the one IPO pass that uses it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33990 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2007-02-07 06:22:45 +00:00
parent a3832fd46a
commit 7f1444bc0a
5 changed files with 23 additions and 39 deletions

View File

@ -98,10 +98,6 @@ public:
/// @{
public:
/// This method will strip the symbol table of its names
/// @brief Strip the symbol table.
bool strip();
/// Inserts a type into the symbol table with the specified name. There can be
/// a many-to-one mapping between names and types. This method allows a type
/// with an existing entry in the symbol table to get a new name.

View File

@ -120,12 +120,6 @@ public:
/// @}
/// @name Mutators
/// @{
public:
/// This method will strip the symbol table of its names.
/// @brief Strip the symbol table.
bool strip();
private:
/// This method adds the provided value \p N to the symbol table. The Value
/// must have a name which is used to place the value in the symbol table.

View File

@ -73,6 +73,27 @@ static void RemoveDeadConstant(Constant *C) {
}
}
// Strip the symbol table of its names.
//
static void StripSymtab(ValueSymbolTable &ST) {
for (ValueSymbolTable::iterator VI = ST.begin(), VE = ST.end(); VI != VE; ) {
Value *V = VI->second;
++VI;
if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()) {
// Set name to "", removing from symbol table!
V->setName("");
}
}
}
// Strip the symbol table of its names.
static void StripTypeSymtab(TypeSymbolTable &ST) {
for (TypeSymbolTable::iterator TI = ST.begin(), E = ST.end(); TI != E; )
ST.remove(TI++);
}
bool StripSymbols::runOnModule(Module &M) {
// If we're not just stripping debug info, strip all symbols from the
// functions and the names from any internal globals.
@ -85,11 +106,11 @@ bool StripSymbols::runOnModule(Module &M) {
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
if (I->hasInternalLinkage())
I->setName(""); // Internal symbols can't participate in linkage
I->getValueSymbolTable().strip();
StripSymtab(I->getValueSymbolTable());
}
// Remove all names from types.
M.getTypeSymbolTable().strip();
StripTypeSymtab(M.getTypeSymbolTable());
}
// Strip debug info in the module if it exists. To do this, we remove

View File

@ -111,17 +111,6 @@ void TypeSymbolTable::insert(const std::string& Name, const Type* T) {
}
}
// Strip the symbol table of its names.
bool TypeSymbolTable::strip() {
bool RemovedSymbol = false;
for (iterator TI = tmap.begin(); TI != tmap.end(); ) {
remove(TI++);
RemovedSymbol = true;
}
return RemovedSymbol;
}
// This function is called when one of the types in the type plane are refined
void TypeSymbolTable::refineAbstractType(const DerivedType *OldType,
const Type *NewType) {

View File

@ -59,22 +59,6 @@ Value *ValueSymbolTable::lookup(const std::string &Name) const {
return 0;
}
// Strip the symbol table of its names.
//
bool ValueSymbolTable::strip() {
bool RemovedSymbol = false;
for (iterator VI = vmap.begin(), VE = vmap.end(); VI != VE; ) {
Value *V = VI->second;
++VI;
if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()) {
// Set name to "", removing from symbol table!
V->setName("");
RemovedSymbol = true;
}
}
return RemovedSymbol;
}
// Insert a value into the symbol table with the specified name...
//
void ValueSymbolTable::insert(Value* V) {