[llvm-commits] CVS: llvm/lib/Transforms/Scalar/SymbolStripping.cpp

Chris Lattner lattner at cs.uiuc.edu
Fri Nov 21 19:30:01 PST 2003


Changes in directory llvm/lib/Transforms/Scalar:

SymbolStripping.cpp updated: 1.23 -> 1.24

---
Log message:

Finegrainify namespacification
The module stripping pass should not strip symbols on external globals



---
Diffs of the changes:  (+16 -14)

Index: llvm/lib/Transforms/Scalar/SymbolStripping.cpp
diff -u llvm/lib/Transforms/Scalar/SymbolStripping.cpp:1.23 llvm/lib/Transforms/Scalar/SymbolStripping.cpp:1.24
--- llvm/lib/Transforms/Scalar/SymbolStripping.cpp:1.23	Tue Nov 11 16:41:34 2003
+++ llvm/lib/Transforms/Scalar/SymbolStripping.cpp	Fri Nov 21 19:29:35 2003
@@ -25,8 +25,7 @@
 #include "llvm/Module.h"
 #include "llvm/SymbolTable.h"
 #include "llvm/Pass.h"
-
-namespace llvm {
+using namespace llvm;
 
 static bool StripSymbolTable(SymbolTable &SymTab) {
   bool RemovedSymbol = false;
@@ -34,15 +33,20 @@
   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!
+    SymbolTable::type_iterator B = Plane.begin();
+    while (B != Plane.end()) {   // Found nonempty type plane!
       Value *V = B->second;
-      if (isa<Constant>(V) || isa<Type>(V))
-	SymTab.type_remove(B);
-      else 
-	V->setName("", &SymTab);  // Set name to "", removing from symbol table!
-      RemovedSymbol = true;
-      assert(Plane.begin() != B && "Symbol not removed from table!");
+      if (isa<Constant>(V) || isa<Type>(V)) {
+	SymTab.type_remove(B++);
+        RemovedSymbol = true;
+      } else {
+        ++B;
+        if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()){
+          // Set name to "", removing from symbol table!
+          V->setName("", &SymTab);
+          RemovedSymbol = true;
+        }
+      }
     }
   }
  
@@ -69,12 +73,10 @@
                                      "Strip symbols from module and functions");
 }
 
-Pass *createSymbolStrippingPass() {
+Pass *llvm::createSymbolStrippingPass() {
   return new SymbolStripping();
 }
 
-Pass *createFullSymbolStrippingPass() {
+Pass *llvm::createFullSymbolStrippingPass() {
   return new FullSymbolStripping();
 }
-
-} // End llvm namespace





More information about the llvm-commits mailing list