From: Chris Lattner Date: Sun, 31 Oct 2004 23:01:34 +0000 (+0000) Subject: Simplify graph traversal, improve grammar X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=4bbf3dfbe614b8d62a0e695ab28ba70824c3a36e;p=oota-llvm.git Simplify graph traversal, improve grammar git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17383 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Analysis/DataStructure/EquivClassGraphs.h b/include/llvm/Analysis/DataStructure/EquivClassGraphs.h index ea41ac33df2..a46da411863 100644 --- a/include/llvm/Analysis/DataStructure/EquivClassGraphs.h +++ b/include/llvm/Analysis/DataStructure/EquivClassGraphs.h @@ -141,7 +141,7 @@ namespace PA { unsigned processSCC(DSGraph &FG, Function &F, std::vector &Stack, unsigned &NextID, - hash_map &ValMap); + std::map &ValMap); void processGraph(DSGraph &FG, Function &F); diff --git a/lib/Analysis/DataStructure/EquivClassGraphs.cpp b/lib/Analysis/DataStructure/EquivClassGraphs.cpp index 4c00b7aad9d..caaf43fac65 100644 --- a/lib/Analysis/DataStructure/EquivClassGraphs.cpp +++ b/lib/Analysis/DataStructure/EquivClassGraphs.cpp @@ -37,7 +37,6 @@ namespace { "Number of graphs inlined"); } - // getDSGraphForCallSite - Return the common data structure graph for // callees at the specified call site. // @@ -67,7 +66,7 @@ bool PA::EquivClassGraphs::runOnModule(Module &M) { // Stack of functions used for Tarjan's SCC-finding algorithm. std::vector Stack; - hash_map ValMap; + std::map ValMap; unsigned NextID = 1; if (Function *Main = M.getMainFunction()) { @@ -259,13 +258,16 @@ DSGraph *PA::EquivClassGraphs::cloneGraph(Function &F) { } -unsigned PA::EquivClassGraphs::processSCC(DSGraph &FG, Function& F, +unsigned PA::EquivClassGraphs::processSCC(DSGraph &FG, Function &F, std::vector &Stack, unsigned &NextID, - hash_map &ValMap){ + std::map &ValMap){ DEBUG(std::cerr << " ProcessSCC for function " << F.getName() << "\n"); - assert(!ValMap.count(&F) && "Shouldn't revisit functions!"); + std::map::iterator It = ValMap.lower_bound(&F); + if (It != ValMap.end() && It->first == &F) + return It->second; + unsigned Min = NextID++, MyID = Min; ValMap[&F] = Min; Stack.push_back(&F); @@ -281,11 +283,8 @@ unsigned PA::EquivClassGraphs::processSCC(DSGraph &FG, Function& F, DSGraph &CalleeG = getOrCreateGraph(*I->second); // Have we visited the destination function yet? - hash_map::iterator It = ValMap.find(I->second); - unsigned M = (It == ValMap.end()) // No, visit it now. - ? processSCC(CalleeG, *I->second, Stack, NextID, ValMap) - : It->second; // Yes, get it's number. - + std::map::iterator It = ValMap.find(I->second); + unsigned M = processSCC(CalleeG, *I->second, Stack, NextID, ValMap); if (M < Min) Min = M; } }