[cfe-commits] r94063 - /cfe/trunk/lib/Sema/SemaDecl.cpp

Mike Stump mrs at apple.com
Wed Jan 20 18:55:37 PST 2010


Author: mrs
Date: Wed Jan 20 20:55:37 2010
New Revision: 94063

URL: http://llvm.org/viewvc/llvm-project?rev=94063&view=rev
Log:
When checking for unreachable blocks, we can trivially avoid extra
work, if we know we already marked all blocks as live.

Modified:
    cfe/trunk/lib/Sema/SemaDecl.cpp

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=94063&r1=94062&r2=94063&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Jan 20 20:55:37 2010
@@ -1310,25 +1310,31 @@
   New->setAccess(Old->getAccess());
 }
 
-static void MarkLive(CFGBlock *e, llvm::BitVector &live) {
+// MarkLive - Mark all the blocks reachable from e as live.  Returns the total
+// number of blocks marked live.
+static unsigned MarkLive(CFGBlock *e, llvm::BitVector &live) {
+  unsigned count = 0;
   std::queue<CFGBlock*> workq;
   // Prep work queue
+  live.set(e->getBlockID());
+  ++count;
   workq.push(e);
   // Solve
   while (!workq.empty()) {
     CFGBlock *item = workq.front();
     workq.pop();
-    live.set(item->getBlockID());
     for (CFGBlock::succ_iterator I=item->succ_begin(),
            E=item->succ_end();
          I != E;
          ++I) {
       if ((*I) && !live[(*I)->getBlockID()]) {
         live.set((*I)->getBlockID());
+        ++count;
         workq.push(*I);
       }
     }
   }
+  return count;
 }
 
 static SourceLocation GetUnreachableLoc(CFGBlock &b) {
@@ -1432,7 +1438,9 @@
   
   llvm::BitVector live(cfg->getNumBlockIDs());
   // Mark all live things first.
-  MarkLive(&cfg->getEntry(), live);
+  if (MarkLive(&cfg->getEntry(), live) == cfg->getNumBlockIDs())
+    // If there are no dead blocks, we're done.
+    return;
 
   llvm::SmallVector<SourceLocation, 24> lines;
   // First, give warnings for blocks with no predecessors, as they





More information about the cfe-commits mailing list