aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/PostDominators.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-08-08 05:51:24 +0000
committerChris Lattner <sabre@nondot.org>2007-08-08 05:51:24 +0000
commitc63d4c2e4e43add22b5cc6a41a93cfa83368f15f (patch)
treeb337122901da76c41f465d4f4924b36557a20051 /llvm/lib/Analysis/PostDominators.cpp
parent0aecf0ebef02af000791d3bbe880bb7b462506db (diff)
downloadllvm-c63d4c2e4e43add22b5cc6a41a93cfa83368f15f.zip
llvm-c63d4c2e4e43add22b5cc6a41a93cfa83368f15f.tar.gz
llvm-c63d4c2e4e43add22b5cc6a41a93cfa83368f15f.tar.bz2
reimplement dfs number computation to be significantly faster. This speeds up
natural loop canonicalization (which does many cfg xforms) by 4.3x, for example. This also fixes a bug in postdom dfnumber computation. llvm-svn: 40920
Diffstat (limited to 'llvm/lib/Analysis/PostDominators.cpp')
-rw-r--r--llvm/lib/Analysis/PostDominators.cpp12
1 files changed, 3 insertions, 9 deletions
diff --git a/llvm/lib/Analysis/PostDominators.cpp b/llvm/lib/Analysis/PostDominators.cpp
index 4622441..69e9cbe 100644
--- a/llvm/lib/Analysis/PostDominators.cpp
+++ b/llvm/lib/Analysis/PostDominators.cpp
@@ -193,15 +193,9 @@ void PostDominatorTree::calculate(Function &F) {
Info.clear();
std::vector<BasicBlock*>().swap(Vertex);
- int dfsnum = 0;
- // Iterate over all nodes in depth first order...
- for (unsigned i = 0, e = Roots.size(); i != e; ++i)
- for (idf_iterator<BasicBlock*> I = idf_begin(Roots[i]),
- E = idf_end(Roots[i]); I != E; ++I) {
- if (!getNodeForBlock(*I)->getIDom())
- getNodeForBlock(*I)->assignDFSNumber(dfsnum);
- }
- DFSInfoValid = true;
+ // Start out with the DFS numbers being invalid. Let them be computed if
+ // demanded.
+ DFSInfoValid = false;
}