From 4bbf3dfbe614b8d62a0e695ab28ba70824c3a36e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 31 Oct 2004 23:01:34 +0000 Subject: Simplify graph traversal, improve grammar git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17383 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/DataStructure/EquivClassGraphs.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'lib/Analysis/DataStructure/EquivClassGraphs.cpp') diff --git a/lib/Analysis/DataStructure/EquivClassGraphs.cpp b/lib/Analysis/DataStructure/EquivClassGraphs.cpp index 4c00b7aad9..caaf43fac6 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; } } -- cgit v1.2.3-70-g09d2