[llvm-commits] CVS: llvm/lib/Transforms/IPO/StripSymbols.cpp
Jim Laskey
jlaskey at apple.com
Thu Mar 23 10:11:45 PST 2006
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.
More information about the llvm-commits
mailing list