From: Chris Lattner Date: Wed, 28 Jan 2004 03:12:48 +0000 (+0000) Subject: In the TD pass, iterate over globals directly instead of through the whole scalar X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=6d8f3dcd75c784caba92042f1a5184ed0a8ad175;p=oota-llvm.git In the TD pass, iterate over globals directly instead of through the whole scalar map. This saves 5s in the TD pass, from 22->17s on perlbmk git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10998 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/DataStructure/TopDownClosure.cpp b/lib/Analysis/DataStructure/TopDownClosure.cpp index 67ea400dced..45c1788e7a2 100644 --- a/lib/Analysis/DataStructure/TopDownClosure.cpp +++ b/lib/Analysis/DataStructure/TopDownClosure.cpp @@ -60,7 +60,7 @@ bool TDDataStructures::run(Module &M) { // they are accessible outside this compilation unit. Currently, these // arguments are functions which are reachable by global variables in the // globals graph. - const DSGraph::ScalarMapTy &GGSM = GlobalsGraph->getScalarMap(); + const DSScalarMap &GGSM = GlobalsGraph->getScalarMap(); hash_set Visited; for (DSScalarMap::global_iterator I = GGSM.global_begin(), E = GGSM.global_end(); I != E; ++I) @@ -260,14 +260,13 @@ void TDDataStructures::inlineGraphIntoCallees(DSGraph &Graph) { ReachabilityCloner RC(CalleeGraph, Graph, DSGraph::StripModRefBits); // Clone over any global nodes that appear in both graphs. - for (DSGraph::ScalarMapTy::const_iterator - SI = CalleeGraph.getScalarMap().begin(), - SE = CalleeGraph.getScalarMap().end(); SI != SE; ++SI) - if (GlobalValue *GV = dyn_cast(SI->first)) { - DSGraph::ScalarMapTy::const_iterator GI = Graph.getScalarMap().find(GV); - if (GI != Graph.getScalarMap().end()) - RC.merge(SI->second, GI->second); - } + for (DSScalarMap::global_iterator + SI = CalleeGraph.getScalarMap().global_begin(), + SE = CalleeGraph.getScalarMap().global_end(); SI != SE; ++SI) { + DSScalarMap::const_iterator GI = Graph.getScalarMap().find(*SI); + if (GI != Graph.getScalarMap().end()) + RC.merge(CalleeGraph.getNodeForValue(*SI), GI->second); + } // Loop over all of the distinct call sites in the caller of the callee. for (; CSI != CallSites.end() && CSI->first == &CalleeGraph; ++CSI) {