Remove all dbg symobls, including those with circular references.
authorDevang Patel <dpatel@apple.com>
Mon, 2 Mar 2009 22:50:58 +0000 (22:50 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 2 Mar 2009 22:50:58 +0000 (22:50 +0000)
This is ugly, but I can't figure out a quick way out of this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65889 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/StripSymbols.cpp

index 47a18e25283b706028204bff54fa4a38cfafe6d9..3906b5111ec3213a18d1f1429f49665472d8b6e4 100644 (file)
@@ -185,6 +185,21 @@ bool StripSymbolNames(Module &M, bool PreserveDbgInfo) {
 // llvm.dbg.region.end calls, and any globals they point to if now dead.
 bool StripDebugInfo(Module &M) {
 
+  SmallPtrSet<const GlobalValue*, 8> llvmUsedValues;
+  findUsedValues(M, llvmUsedValues);
+
+  // Delete all dbg variables.
+  for (Module::global_iterator I = M.global_begin(), E = M.global_end(); 
+       I != E; ++I) {
+    GlobalVariable *GV = dyn_cast<GlobalVariable>(I);
+    if (!GV) continue;
+    if (!GV->use_empty() && llvmUsedValues.count(I) == 0) {
+      if (strncmp(GV->getNameStart(), "llvm.dbg", 8) == 0) {
+        GV->replaceAllUsesWith(UndefValue::get(GV->getType()));
+      }
+    }
+  }
+
   Function *FuncStart = M.getFunction("llvm.dbg.func.start");
   Function *StopPoint = M.getFunction("llvm.dbg.stoppoint");
   Function *RegionStart = M.getFunction("llvm.dbg.region.start");
@@ -263,9 +278,6 @@ bool StripDebugInfo(Module &M) {
     Declare->eraseFromParent();
   }
 
-  SmallPtrSet<const GlobalValue*, 8> llvmUsedValues;
-  findUsedValues(M, llvmUsedValues);
-
   // llvm.dbg.compile_units and llvm.dbg.subprograms are marked as linkonce
   // but since we are removing all debug information, make them internal now.
   // FIXME: Use private linkage maybe?