In the TD pass, iterate over globals directly instead of through the whole scalar
authorChris Lattner <sabre@nondot.org>
Wed, 28 Jan 2004 03:12:48 +0000 (03:12 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 28 Jan 2004 03:12:48 +0000 (03:12 +0000)
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

lib/Analysis/DataStructure/TopDownClosure.cpp

index 67ea400dced7e6324ccc839838cc92cc21b41ad1..45c1788e7a2db9a547051a4d692c432e9f4b1e78 100644 (file)
@@ -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<DSNode*> 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<GlobalValue>(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) {