Add globals graphs to all three passes
llvm-svn: 4663
diff --git a/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp b/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp
index b4b43f7..1da43e5 100644
--- a/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp
+++ b/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp
@@ -16,6 +16,26 @@
static RegisterAnalysis<TDDataStructures>
Y("tddatastructure", "Top-down Data Structure Analysis Closure");
+// run - Calculate the top down data structure graphs for each function in the
+// program.
+//
+bool TDDataStructures::run(Module &M) {
+ BUDataStructures &BU = getAnalysis<BUDataStructures>();
+ GlobalsGraph = new DSGraph();
+
+ // Calculate top-down from main...
+ if (Function *F = M.getMainFunction())
+ calculateGraph(*F);
+
+ // Next calculate the graphs for each function unreachable function...
+ for (Module::reverse_iterator I = M.rbegin(), E = M.rend(); I != E; ++I)
+ if (!I->isExternal())
+ calculateGraph(*I);
+
+ GraphDone.clear(); // Free temporary memory...
+ return false;
+}
+
// releaseMemory - If the pass pipeline is done with this pass, we can release
// our memory... here...
//
@@ -27,23 +47,8 @@
// Empty map so next time memory is released, data structures are not
// re-deleted.
DSInfo.clear();
-}
-
-// run - Calculate the top down data structure graphs for each function in the
-// program.
-//
-bool TDDataStructures::run(Module &M) {
- BUDataStructures &BU = getAnalysis<BUDataStructures>();
-
- // Calculate top-down from main...
- if (Function *F = M.getMainFunction())
- calculateGraph(*F);
-
- // Next calculate the graphs for each function unreachable function...
- for (Module::reverse_iterator I = M.rbegin(), E = M.rend(); I != E; ++I)
- if (!I->isExternal())
- calculateGraph(*I);
- return false;
+ delete GlobalsGraph;
+ GlobalsGraph = 0;
}
/// ResolveCallSite - This method is used to link the actual arguments together
@@ -77,6 +82,7 @@
if (G == 0) { // Not created yet? Clone BU graph...
G = new DSGraph(getAnalysis<BUDataStructures>().getDSGraph(F));
G->getAuxFunctionCalls().clear();
+ G->setGlobalsGraph(GlobalsGraph);
}
return *G;
}