From 5518b81a98c475accdf7ad7248ff00a9fb138419 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 16 Apr 2010 22:59:24 +0000 Subject: move ReplaceNode out of line, rename scc_iterator::fini -> isAtEnd(). No functionality change. llvm-svn: 101562 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp') diff --git a/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp b/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp index 774f0d4ddf4..f5d24f005f5 100644 --- a/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp +++ b/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp @@ -307,18 +307,17 @@ bool CGPassManager::runOnModule(Module &M) { CallGraph &CG = getAnalysis(); bool Changed = doInitialization(CG); - CallGraphSCC CurSCC(this); - // Walk the callgraph in bottom-up SCC order. - for (scc_iterator CGI = scc_begin(&CG), E = scc_end(&CG); - CGI != E;) { + scc_iterator CGI = scc_begin(&CG); + + CallGraphSCC CurSCC(&CGI); + while (!CGI.isAtEnd()) { // Copy the current SCC and increment past it so that the pass can hack // on the SCC if it wants to without invalidating our iterator. std::vector &NodeVec = *CGI; CurSCC.initialize(&NodeVec[0], &NodeVec[0]+NodeVec.size()); ++CGI; - // CallGraphUpToDate - Keep track of whether the callgraph is known to be // up-to-date or not. The CGSSC pass manager runs two types of passes: // CallGraphSCC Passes and other random function passes. Because other @@ -408,6 +407,17 @@ bool CGPassManager::doFinalization(CallGraph &CG) { // CallGraphSCC Implementation //===----------------------------------------------------------------------===// +/// ReplaceNode - This informs the SCC and the pass manager that the specified +/// Old node has been deleted, and New is to be used in its place. +void CallGraphSCC::ReplaceNode(CallGraphNode *Old, CallGraphNode *New) { + assert(Old != New && "Should not replace node with self"); + for (unsigned i = 0; ; ++i) { + assert(i != Nodes.size() && "Node not in SCC"); + if (Nodes[i] != Old) continue; + Nodes[i] = New; + break; + } +} //===----------------------------------------------------------------------===// -- cgit v1.2.3