From: Dan Gohman Date: Tue, 20 Oct 2009 20:41:13 +0000 (+0000) Subject: Fix another place that calls Loop::contains a lot to construct a sorted X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=eed9e5b833431bccf3761b8268a9fb368abb0cf1;p=oota-llvm.git Fix another place that calls Loop::contains a lot to construct a sorted container of the blocks and do efficient lookups. This makes isLoopSimplifyForm much faster on large loops, fixing a significant compile-time issue in builds with assertions enabled. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84673 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp index ce2d29f331b..e9256b74140 100644 --- a/lib/Analysis/LoopInfo.cpp +++ b/lib/Analysis/LoopInfo.cpp @@ -292,6 +292,9 @@ bool Loop::isLoopSimplifyForm() const { // Normal-form loops have a single backedge. if (!getLoopLatch()) return false; + // Sort the blocks vector so that we can use binary search to do quick + // lookups. + SmallPtrSet LoopBBs(block_begin(), block_end()); // Each predecessor of each exit block of a normal loop is contained // within the loop. SmallVector ExitBlocks; @@ -299,7 +302,7 @@ bool Loop::isLoopSimplifyForm() const { for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i) for (pred_iterator PI = pred_begin(ExitBlocks[i]), PE = pred_end(ExitBlocks[i]); PI != PE; ++PI) - if (!contains(*PI)) + if (!LoopBBs.count(*PI)) return false; // All the requirements are met. return true;