[llvm-commits] [llvm] r59011 - in /llvm/trunk: include/llvm/Transforms/Utils/DbgInfoUtils.h lib/Transforms/Utils/DbgInfoUtils.cpp

Devang Patel dpatel at apple.com
Mon Nov 10 16:53:02 PST 2008


Author: dpatel
Date: Mon Nov 10 18:53:02 2008
New Revision: 59011

URL: http://llvm.org/viewvc/llvm-project?rev=59011&view=rev
Log:
Add utility routines to remove dead debug info.

Added:
    llvm/trunk/include/llvm/Transforms/Utils/DbgInfoUtils.h
    llvm/trunk/lib/Transforms/Utils/DbgInfoUtils.cpp

Added: llvm/trunk/include/llvm/Transforms/Utils/DbgInfoUtils.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/DbgInfoUtils.h?rev=59011&view=auto

==============================================================================
--- llvm/trunk/include/llvm/Transforms/Utils/DbgInfoUtils.h (added)
+++ llvm/trunk/include/llvm/Transforms/Utils/DbgInfoUtils.h Mon Nov 10 18:53:02 2008
@@ -0,0 +1,28 @@
+//===-- Transform/Utils/DbgInfoUtils.h - DbgInfo Utils ----------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Utility functions to manipulate debugging information.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_UTILS_DBGINFO_H
+#define LLVM_TRANSFORMS_UTILS_DBGINFO_H
+namespace llvm {
+class BasicBlock;
+class Function;
+
+/// RemoveDeadDbgIntrinsics - Remove dead dbg intrinsics from this 
+/// basic block.
+void RemoveDeadDbgIntrinsics(BasicBlock &BB);
+
+/// RemoveDeadDbgIntrinsics - Remove dead dbg intrinsics from this function.
+void RemoveDeadDbgIntrinsics(Function &F);
+
+} // End llvm namespace
+#endif

Added: llvm/trunk/lib/Transforms/Utils/DbgInfoUtils.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/DbgInfoUtils.cpp?rev=59011&view=auto

==============================================================================
--- llvm/trunk/lib/Transforms/Utils/DbgInfoUtils.cpp (added)
+++ llvm/trunk/lib/Transforms/Utils/DbgInfoUtils.cpp Mon Nov 10 18:53:02 2008
@@ -0,0 +1,60 @@
+//===-- DbgInfoUtils.cpp - DbgInfo Utilities -------------------------------==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Utility functions to manipulate debugging information.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Transforms/Utils/DbgInfoUtils.h"
+#include "llvm/IntrinsicInst.h"
+
+using namespace llvm;
+
+/// RemoveDeadDbgIntrinsics - Remove dead dbg intrinsics from this 
+/// basic block.
+void llvm::RemoveDeadDbgIntrinsics(BasicBlock &BB) {
+  BasicBlock::iterator BI = BB.begin(), BE = BB.end();
+  if (BI == BE) return;
+
+  Instruction *Prev = BI; ++BI;
+  while (BI != BE) {
+    Instruction *Next = BI; ++BI;
+    DbgInfoIntrinsic *DBI_Prev = dyn_cast<DbgInfoIntrinsic>(Prev);
+    if (!DBI_Prev) {
+      Prev = Next;
+      continue;
+    }
+    
+    // If there are two consecutive llvm.dbg.stoppoint calls then
+    // it is likely that the optimizer deleted code in between these
+    // two intrinsics. 
+    DbgInfoIntrinsic *DBI_Next = dyn_cast<DbgInfoIntrinsic>(Next);
+    if (DBI_Next 
+        && DBI_Prev->getIntrinsicID() == llvm::Intrinsic::dbg_stoppoint
+        && DBI_Next->getIntrinsicID() == llvm::Intrinsic::dbg_stoppoint)
+      Prev->eraseFromParent();
+    
+    // If a llvm.dbg.stoppoint is placed just before an unconditional
+    // branch then remove the llvm.dbg.stoppoint intrinsic.
+    else if (BranchInst *UC = dyn_cast<BranchInst>(Next)) {
+      if (UC->isUnconditional() 
+          && DBI_Prev->getIntrinsicID() == llvm::Intrinsic::dbg_stoppoint)
+        Prev->eraseFromParent();
+    }
+
+    Prev = Next;
+  }
+}
+
+/// RemoveDeadDbgIntrinsics - Remove dead dbg intrinsics from this function.
+void llvm::RemoveDeadDbgIntrinsics(Function &F) {
+  for (Function::iterator FI = F.begin(), FE = F.end();
+       FI != FE; ++FI) 
+    RemoveDeadDbgIntrinsics(*FI);
+}





More information about the llvm-commits mailing list