On Jan 20, 2010, at 6:55 PM, Mike Stump wrote: > 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. >
Nice, thanks Mike! -Chris > 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 > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
