Changes in directory llvm/lib/Transforms/IPO:
StripSymbols.cpp updated: 1.7 -> 1.8 --- Log message: Strip changes to llvm.dbg intrinsics. --- Diffs of the changes: (+34 -7) StripSymbols.cpp | 41 ++++++++++++++++++++++++++++++++++------- 1 files changed, 34 insertions(+), 7 deletions(-) Index: llvm/lib/Transforms/IPO/StripSymbols.cpp diff -u llvm/lib/Transforms/IPO/StripSymbols.cpp:1.7 llvm/lib/Transforms/IPO/StripSymbols.cpp:1.8 --- llvm/lib/Transforms/IPO/StripSymbols.cpp:1.7 Wed Mar 15 13:22:41 2006 +++ llvm/lib/Transforms/IPO/StripSymbols.cpp Thu Mar 23 12:11:33 2006 @@ -96,8 +96,10 @@ // 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<GlobalVariable*> DeadGlobals; @@ -105,11 +107,10 @@ // 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<CallInst>(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<GlobalVariable>(Arg)) @@ -118,11 +119,10 @@ FuncStart->eraseFromParent(); } if (StopPoint) { - Value *RV = UndefValue::get(StopPoint->getFunctionType()->getReturnType()); while (!StopPoint->use_empty()) { CallInst *CI = cast<CallInst>(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<GlobalVariable>(Arg)) @@ -130,15 +130,42 @@ } StopPoint->eraseFromParent(); } + if (RegionStart) { + while (!RegionStart->use_empty()) { + CallInst *CI = cast<CallInst>(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<GlobalVariable>(Arg)) + DeadGlobals.push_back(GV); + } + RegionStart->eraseFromParent(); + } if (RegionEnd) { - Value *RV = UndefValue::get(RegionEnd->getFunctionType()->getReturnType()); while (!RegionEnd->use_empty()) { CallInst *CI = cast<CallInst>(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<GlobalVariable>(Arg)) + DeadGlobals.push_back(GV); } RegionEnd->eraseFromParent(); } + if (Declare) { + while (!Declare->use_empty()) { + CallInst *CI = cast<CallInst>(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<GlobalVariable>(Arg)) + DeadGlobals.push_back(GV); + } + Declare->eraseFromParent(); + } // Finally, delete any internal globals that were only used by the debugger // intrinsics. _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits