[llvm-commits] [llvm] r60514 - /llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp

Chris Lattner sabre at nondot.org
Wed Dec 3 16:08:00 PST 2008


Author: lattner
Date: Wed Dec  3 18:07:59 2008
New Revision: 60514

URL: http://llvm.org/viewvc/llvm-project?rev=60514&view=rev
Log:
add a debugging option to help track down j-t problems.

Modified:
    llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=60514&r1=60513&r2=60514&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Wed Dec  3 18:07:59 2008
@@ -36,6 +36,11 @@
           cl::desc("Max block size to duplicate for jump threading"),
           cl::init(6), cl::Hidden);
 
+static cl::opt<int>
+DebugIterations("jump-threading-debug",
+                cl::desc("Stop jump threading after N iterations"),
+                cl::init(-1), cl::Hidden);
+
 namespace {
   /// This pass performs 'jump threading', which looks at blocks that have
   /// multiple predecessors and multiple successors.  If one or more of the
@@ -104,11 +109,15 @@
       // If the block is trivially dead, zap it.  This eliminates the successor
       // edges which simplifies the CFG.
       if (pred_begin(BB) == pred_end(BB) &&
-          BB != &BB->getParent()->getEntryBlock()) {
+          BB != &BB->getParent()->getEntryBlock() &&
+          DebugIterations != 0) {
         DOUT << "  JT: Deleting dead block '" << BB->getNameStart()
              << "' with terminator: " << *BB->getTerminator();
         DeleteDeadBlock(BB);
         Changed = true;
+        
+        if (DebugIterations != -1)
+          DebugIterations = DebugIterations-1;
       }
     }
     AnotherIteration = Changed;
@@ -183,6 +192,10 @@
 /// ProcessBlock - If there are any predecessors whose control can be threaded
 /// through to a successor, transform them now.
 bool JumpThreading::ProcessBlock(BasicBlock *BB) {
+  if (DebugIterations == 0) return false;
+  if (DebugIterations != -1)
+    DebugIterations = DebugIterations-1;
+  
   // If this block has a single predecessor, and if that pred has a single
   // successor, merge the blocks.  This encourages recursive jump threading
   // because now the condition in this block can be threaded through





More information about the llvm-commits mailing list