When we complete the bottom-up pass, make sure to merge the globals in 'main' into
authorChris Lattner <sabre@nondot.org>
Tue, 17 Feb 2004 19:06:47 +0000 (19:06 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 17 Feb 2004 19:06:47 +0000 (19:06 +0000)
the globals graph.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11562 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/BottomUpClosure.cpp

index 5d71b19b574018657bdadf641c42295cdb57d789..ec8e2b6bef6999e4fd4809fe34963395109c6cf7 100644 (file)
@@ -57,6 +57,23 @@ bool BUDataStructures::run(Module &M) {
 
   NumCallEdges += ActualCallees.size();
 
+
+  // At the end of the BU phase, clone the BU graph for main into the globals
+  // graph to make sure it has everything.
+  if (MainFunc) {
+    DSGraph &MainGraph = getOrCreateGraph(MainFunc);
+    DSScalarMap &MainSM = MainGraph.getScalarMap();
+    ReachabilityCloner RC(*GlobalsGraph, MainGraph, DSGraph::StripAllocaBit);
+
+    // Clone everything reachable from globals in the "main" graph into the
+    // globals graph.
+    for (DSScalarMap::global_iterator I = MainSM.global_begin(),
+           E = MainSM.global_end(); I != E; ++I) 
+      RC.getClonedNH(MainSM[*I]);
+
+
+  }
+
   // At the end of the bottom-up pass, the globals graph becomes complete.
   // FIXME: This is not the right way to do this, but it is sorta better than
   // nothing!  In particular, externally visible globals and unresolvable call