[llvm-commits] CVS: llvm/lib/Analysis/DataStructure/DataStructure.cpp
Sumant Kowshik
kowshik at cs.uiuc.edu
Tue Aug 5 12:05:02 PDT 2003
Changes in directory llvm/lib/Analysis/DataStructure:
DataStructure.cpp updated: 1.117 -> 1.118
---
Log message:
Added function mergeInGlobalsGraph which merges in the entire globals graph with the graph of a function
---
Diffs of the changes:
Index: llvm/lib/Analysis/DataStructure/DataStructure.cpp
diff -u llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.117 llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.118
--- llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.117 Fri Aug 1 17:14:28 2003
+++ llvm/lib/Analysis/DataStructure/DataStructure.cpp Tue Aug 5 12:04:41 2003
@@ -1582,3 +1582,32 @@
AssertAuxCallNodesInGraph();
}
+// A function useful for clients to incorporate the globals graph
+// into the DS, BU or TD graph for a function. This code retains
+// all globals, i.e., does not delete unreachable globals after they
+// are inlined.
+//
+void DSGraph::mergeInGlobalsGraph()
+{
+ NodeMapTy GlobalNodeMap;
+ ScalarMapTy OldValMap;
+ ReturnNodesTy OldRetNodes;
+ this->cloneInto(*GlobalsGraph, OldValMap, OldRetNodes, GlobalNodeMap,
+ DSGraph::KeepAllocaBit | DSGraph::DontCloneCallNodes |
+ DSGraph::DontCloneAuxCallNodes);
+
+ // Now merge existing global nodes in the GlobalsGraph with their copies
+ for (ScalarMapTy::iterator I = ScalarMap.begin(), E = ScalarMap.end();
+ I != E; ++I)
+ if (isa<GlobalValue>(I->first)) { // Found a global node
+ DSNodeHandle &GH = I->second;
+ DSNodeHandle &GGNodeH = GlobalsGraph->getScalarMap()[I->first];
+ GH.mergeWith(GlobalNodeMap[GGNodeH.getNode()]);
+ }
+
+ // Merging leaves behind unused nodes: get rid of them now.
+ GlobalNodeMap.clear();
+ OldValMap.clear();
+ OldRetNodes.clear();
+ removeTriviallyDeadNodes();
+}
More information about the llvm-commits
mailing list