diff options
author | Devang Patel <dpatel@apple.com> | 2009-03-02 22:50:58 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-03-02 22:50:58 +0000 |
commit | 73df3c972157409e5b88a08682cdfbe9173f5927 (patch) | |
tree | e414f86f7f3d00e31820a9a9acc8e414951418c4 /lib/Transforms/IPO | |
parent | 893a0f9f0e8f816c7fb0eb4cfcc972e7e3c68731 (diff) |
Remove all dbg symobls, including those with circular references.
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
Diffstat (limited to 'lib/Transforms/IPO')
-rw-r--r-- | lib/Transforms/IPO/StripSymbols.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/Transforms/IPO/StripSymbols.cpp b/lib/Transforms/IPO/StripSymbols.cpp index 47a18e2528..3906b5111e 100644 --- a/lib/Transforms/IPO/StripSymbols.cpp +++ b/lib/Transforms/IPO/StripSymbols.cpp @@ -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? |