diff options
author | Chris Lattner <sabre@nondot.org> | 2004-10-31 23:01:34 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-10-31 23:01:34 +0000 |
commit | 4bbf3dfbe614b8d62a0e695ab28ba70824c3a36e (patch) | |
tree | 6034c40235860e3048f5e00510c514e3bd8d0942 /lib/Analysis/DataStructure/EquivClassGraphs.cpp | |
parent | 448a4afd2e3534af1c3099fb465a64b6f68911cc (diff) |
Simplify graph traversal, improve grammar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17383 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/DataStructure/EquivClassGraphs.cpp')
-rw-r--r-- | lib/Analysis/DataStructure/EquivClassGraphs.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
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<Function*> Stack; - hash_map<Function*, unsigned> ValMap; + std::map<Function*, unsigned> 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<Function*> &Stack, unsigned &NextID, - hash_map<Function*,unsigned> &ValMap){ + std::map<Function*,unsigned> &ValMap){ DEBUG(std::cerr << " ProcessSCC for function " << F.getName() << "\n"); - assert(!ValMap.count(&F) && "Shouldn't revisit functions!"); + std::map<Function*, unsigned>::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<Function*, unsigned>::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<Function*, unsigned>::iterator It = ValMap.find(I->second); + unsigned M = processSCC(CalleeG, *I->second, Stack, NextID, ValMap); if (M < Min) Min = M; } } |