Minor changes, remove some debugging code that got checked in somehow.
authorChris Lattner <sabre@nondot.org>
Thu, 4 Mar 2004 17:05:28 +0000 (17:05 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 4 Mar 2004 17:05:28 +0000 (17:05 +0000)
Make sure to scope the NodeMap passed into cloneInto so that it doesn't point
to nodes that are deleted.  Add some FIXME's for future performance enhancements.

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

lib/Analysis/DataStructure/BottomUpClosure.cpp

index 08a5a1583490dba51e52d025464d8bd67e2d6331..02b27a2102ec551a77ad444092eae97cc1c13260 100644 (file)
@@ -100,6 +100,9 @@ unsigned BUDataStructures::calculateGraphs(Function *F,
   ValMap[F] = Min;
   Stack.push_back(F);
 
+  // FIXME!  This test should be generalized to be any function that we have
+  // already processed, in the case when there isn't a main or there are
+  // unreachable functions!
   if (F->isExternal()) {   // sprintf, fprintf, sscanf, etc...
     // No callees!
     Stack.pop_back();
@@ -167,6 +170,8 @@ unsigned BUDataStructures::calculateGraphs(Function *F,
       // graph sizes.
       DSGraph &NFGraph = getDSGraph(*NF);
       SCCGraphs.insert(&NFGraph);
+      // FIXME: If we used a better way of cloning graphs (ie, just splice all
+      // of the nodes into the new graph), this would be completely unneeded!
       if (!SCCGraph || SCCGraph->getGraphSize() < NFGraph.getGraphSize())
         SCCGraph = &NFGraph;
     } while (NF != F);
@@ -186,9 +191,11 @@ unsigned BUDataStructures::calculateGraphs(Function *F,
            E = SCCGraphs.end(); I != E; ++I) {
       DSGraph &G = **I;
       if (&G != SCCGraph) {
-        DSGraph::NodeMapTy NodeMap;
-        SCCGraph->cloneInto(G, SCCGraph->getScalarMap(),
-                            SCCGraph->getReturnNodes(), NodeMap);
+        {
+          DSGraph::NodeMapTy NodeMap;
+          SCCGraph->cloneInto(G, SCCGraph->getScalarMap(),
+                              SCCGraph->getReturnNodes(), NodeMap);
+        }
         // Update the DSInfo map and delete the old graph...
         for (DSGraph::ReturnNodesTy::iterator I = G.getReturnNodes().begin(),
                E = G.getReturnNodes().end(); I != E; ++I)
@@ -278,16 +285,12 @@ void BUDataStructures::calculateGraph(DSGraph &Graph) {
       // Get the data structure graph for the called function.
       //
       DSGraph &GI = getDSGraph(*Callee);  // Graph to inline
-      
-      if (Callee->getName() == "bc_raise")
-        std::cerr << "HERE!\n";
 
       DEBUG(std::cerr << "    Inlining graph for " << Callee->getName()
             << "[" << GI.getGraphSize() << "+"
             << GI.getAuxFunctionCalls().size() << "] into '"
             << Graph.getFunctionNames() << "' [" << Graph.getGraphSize() << "+"
             << Graph.getAuxFunctionCalls().size() << "]\n");
-      
       Graph.mergeInGraph(CS, *Callee, GI,
                          DSGraph::KeepModRefBits | 
                          DSGraph::StripAllocaBit | DSGraph::DontCloneCallNodes);