[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