Moved Inliner.h to include/llvm/Transforms/IPO/InlinerPass.h
[oota-llvm.git] / lib / Transforms / IPO / StripSymbols.cpp
index 00cfc513b66370fbc078e48d17afff70a7214ed1..c8f892604ea8e31e6b8ae60a4f9db7591443596e 100644 (file)
 #include "llvm/Pass.h"
 #include "llvm/ValueSymbolTable.h"
 #include "llvm/TypeSymbolTable.h"
+#include "llvm/Support/Compiler.h"
 using namespace llvm;
 
 namespace {
-  class StripSymbols : public ModulePass {
+  class VISIBILITY_HIDDEN StripSymbols : public ModulePass {
     bool OnlyDebugInfo;
   public:
-    StripSymbols(bool ODI = false) : OnlyDebugInfo(ODI) {}
+    static char ID; // Pass identification, replacement for typeid
+    StripSymbols(bool ODI = false) 
+      : ModulePass((intptr_t)&ID), OnlyDebugInfo(ODI) {}
 
     virtual bool runOnModule(Module &M);
 
@@ -44,6 +47,8 @@ namespace {
       AU.setPreservesAll();
     }
   };
+
+  char StripSymbols::ID = 0;
   RegisterPass<StripSymbols> X("strip", "Strip all symbols from a module");
 }
 
@@ -72,6 +77,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->getValue();
+    ++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.
@@ -84,11 +110,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