From 4ca9757a39a1bf3bd1264a77e52db62e02cc85fb Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Thu, 23 Mar 2006 18:11:33 +0000 Subject: Strip changes to llvm.dbg intrinsics. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26993 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/StripSymbols.cpp | 41 ++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/Transforms/IPO/StripSymbols.cpp b/lib/Transforms/IPO/StripSymbols.cpp index 1e51b9e84c..da5e8a4844 100644 --- a/lib/Transforms/IPO/StripSymbols.cpp +++ b/lib/Transforms/IPO/StripSymbols.cpp @@ -96,8 +96,10 @@ bool StripSymbols::runOnModule(Module &M) { // any globals they point to if now dead. Function *FuncStart = M.getNamedFunction("llvm.dbg.func.start"); Function *StopPoint = M.getNamedFunction("llvm.dbg.stoppoint"); + Function *RegionStart = M.getNamedFunction("llvm.dbg.region.start"); Function *RegionEnd = M.getNamedFunction("llvm.dbg.region.end"); - if (!FuncStart && !StopPoint && !RegionEnd) + Function *Declare = M.getNamedFunction("llvm.dbg.declare"); + if (!FuncStart && !StopPoint && !RegionStart && !RegionEnd && !Declare) return true; std::vector DeadGlobals; @@ -105,11 +107,10 @@ bool StripSymbols::runOnModule(Module &M) { // Remove all of the calls to the debugger intrinsics, and remove them from // the module. if (FuncStart) { - Value *RV = UndefValue::get(FuncStart->getFunctionType()->getReturnType()); while (!FuncStart->use_empty()) { CallInst *CI = cast(FuncStart->use_back()); Value *Arg = CI->getOperand(1); - CI->replaceAllUsesWith(RV); + assert(CI->use_empty() && "llvm.dbg intrinsic should have void result"); CI->eraseFromParent(); if (Arg->use_empty()) if (GlobalVariable *GV = dyn_cast(Arg)) @@ -118,11 +119,10 @@ bool StripSymbols::runOnModule(Module &M) { FuncStart->eraseFromParent(); } if (StopPoint) { - Value *RV = UndefValue::get(StopPoint->getFunctionType()->getReturnType()); while (!StopPoint->use_empty()) { CallInst *CI = cast(StopPoint->use_back()); Value *Arg = CI->getOperand(3); - CI->replaceAllUsesWith(RV); + assert(CI->use_empty() && "llvm.dbg intrinsic should have void result"); CI->eraseFromParent(); if (Arg->use_empty()) if (GlobalVariable *GV = dyn_cast(Arg)) @@ -130,15 +130,42 @@ bool StripSymbols::runOnModule(Module &M) { } StopPoint->eraseFromParent(); } + if (RegionStart) { + while (!RegionStart->use_empty()) { + CallInst *CI = cast(RegionStart->use_back()); + Value *Arg = CI->getOperand(1); + assert(CI->use_empty() && "llvm.dbg intrinsic should have void result"); + CI->eraseFromParent(); + if (Arg->use_empty()) + if (GlobalVariable *GV = dyn_cast(Arg)) + DeadGlobals.push_back(GV); + } + RegionStart->eraseFromParent(); + } if (RegionEnd) { - Value *RV = UndefValue::get(RegionEnd->getFunctionType()->getReturnType()); while (!RegionEnd->use_empty()) { CallInst *CI = cast(RegionEnd->use_back()); - CI->replaceAllUsesWith(RV); + Value *Arg = CI->getOperand(1); + assert(CI->use_empty() && "llvm.dbg intrinsic should have void result"); CI->eraseFromParent(); + if (Arg->use_empty()) + if (GlobalVariable *GV = dyn_cast(Arg)) + DeadGlobals.push_back(GV); } RegionEnd->eraseFromParent(); } + if (Declare) { + while (!Declare->use_empty()) { + CallInst *CI = cast(Declare->use_back()); + Value *Arg = CI->getOperand(2); + assert(CI->use_empty() && "llvm.dbg intrinsic should have void result"); + CI->eraseFromParent(); + if (Arg->use_empty()) + if (GlobalVariable *GV = dyn_cast(Arg)) + DeadGlobals.push_back(GV); + } + Declare->eraseFromParent(); + } // Finally, delete any internal globals that were only used by the debugger // intrinsics. -- cgit v1.2.3