Instead of cloning the globals for main into the globals graph at the end of
authorChris Lattner <sabre@nondot.org>
Sat, 21 Feb 2004 00:30:28 +0000 (00:30 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 21 Feb 2004 00:30:28 +0000 (00:30 +0000)
BU propagation, clone the globals into the GG of EACH FUNCTION that finishes
processing!  The GlobalsGraph *must* include all globals and effects from
all functions in the program.  Fixing this makes pool allocation work better
on 175.vpr, but it still ultimately crashes.

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

lib/Analysis/DataStructure/BottomUpClosure.cpp

index fceb1ded59a13ee0372fb964b836f4adbc23c80b..2125064030eeeb91e2f687e1445d6c39d5606b50 100644 (file)
@@ -57,23 +57,6 @@ 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
@@ -329,5 +312,16 @@ void BUDataStructures::calculateGraph(DSGraph &Graph) {
   // reach live nodes as live.
   Graph.removeDeadNodes(DSGraph::KeepUnreachableGlobals);
 
+  // When this graph is finalized, clone the globals in the graph into the
+  // globals graph to make sure it has everything, from all graphs.
+  DSScalarMap &MainSM = Graph.getScalarMap();
+  ReachabilityCloner RC(*GlobalsGraph, Graph, 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]);
+
   //Graph.writeGraphToFile(std::cerr, "bu_" + F.getName());
 }