diff options
author | Chris Lattner <sabre@nondot.org> | 2007-02-07 06:22:45 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-02-07 06:22:45 +0000 |
commit | 7f1444bc0aefdd924e9b231e20d4c0529311e141 (patch) | |
tree | 0e1008865a141be2a99c669820f50e4074f98144 /lib/Transforms | |
parent | a3832fd46af09872a9c6322b9d23df8b4934c897 (diff) |
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
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/IPO/StripSymbols.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/Transforms/IPO/StripSymbols.cpp b/lib/Transforms/IPO/StripSymbols.cpp index 4c0b35a1a4..58b7b71467 100644 --- a/lib/Transforms/IPO/StripSymbols.cpp +++ b/lib/Transforms/IPO/StripSymbols.cpp @@ -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 |