[llvm-commits] CVS: llvm/include/llvm/Analysis/DSGraph.h

Vikram Adve vadve at cs.uiuc.edu
Wed Jul 16 16:46:02 PDT 2003


Changes in directory llvm/include/llvm/Analysis:

DSGraph.h updated: 1.55 -> 1.56

---
Log message:

(1) Added DSGraph::cloneReachableSubgraph and DSGraph::cloneReachableNodes
    to clone the subgraph reachable from a set of root nodes, into the
    current graph, merging the global nodes into those in the current graph.
(2) Added DSGraph::updateFromGlobalGraph() to rematerialize nodes from the
    globals graph into the current graph in both BU and TD passes.
(3) Added hash_set<const GlobalValue*> InlinedGlobals: a set of globals to 
    track which globals have been inlined into the current graph from
    callers or callees.  In the TD pass, such globals are up-to-date and
    do not need to be rematerialized from the GlobalsGraph.
(4) Added StripIncompleteBit/KeepIncompleteBit to remove incomplete bit
    when cloning nodes into the globals graph.


---
Diffs of the changes:

Index: llvm/include/llvm/Analysis/DSGraph.h
diff -u llvm/include/llvm/Analysis/DSGraph.h:1.55 llvm/include/llvm/Analysis/DSGraph.h:1.56
--- llvm/include/llvm/Analysis/DSGraph.h:1.55	Tue Jul  1 23:37:00 2003
+++ llvm/include/llvm/Analysis/DSGraph.h	Wed Jul 16 16:45:15 2003
@@ -8,6 +8,7 @@
 #define LLVM_ANALYSIS_DSGRAPH_H
 
 #include "llvm/Analysis/DSNode.h"
+class GlobalValue;
 
 //===----------------------------------------------------------------------===//
 /// DSGraph - The graph that represents a function.
@@ -16,6 +17,7 @@
   // Public data-type declarations...
   typedef hash_map<Value*, DSNodeHandle> ScalarMapTy;
   typedef hash_map<Function*, DSNodeHandle> ReturnNodesTy;
+  typedef hash_set<const GlobalValue*> GlobalSetTy;
 
   /// NodeMapTy - This data type is used when cloning one graph into another to
   /// keep track of the correspondence between the nodes in the old and new
@@ -48,7 +50,13 @@
   //
   std::vector<DSCallSite> AuxFunctionCalls;
 
+  // InlinedGlobals - This set records which globals have been inlined from
+  // other graphs (callers or callees, depending on the pass) into this one.
+  // 
+  GlobalSetTy InlinedGlobals;
+
   void operator=(const DSGraph &); // DO NOT IMPLEMENT
+
 public:
   // Create a new, empty, DSGraph.
   DSGraph() : GlobalsGraph(0), PrintAuxCalls(false) {}
@@ -111,6 +119,13 @@
     return AuxFunctionCalls;
   }
 
+  /// getInlinedGlobals - Get the set of globals that are have been inlined
+  /// (from callees in BU or from callers in TD) into the current graph.
+  ///
+  GlobalSetTy& getInlinedGlobals() {
+    return InlinedGlobals;
+  }
+
   /// getNodeForValue - Given a value that is used or defined in the body of the
   /// current function, return the DSNode that it points to.
   ///
@@ -199,11 +214,27 @@
   /// CloneFlags enum - Bits that may be passed into the cloneInto method to
   /// specify how to clone the function graph.
   enum CloneFlags {
-    StripAllocaBit        = 1 << 0, KeepAllocaBit     = 0 << 0,
-    DontCloneCallNodes    = 1 << 1, CloneCallNodes    = 0 << 0,
-    DontCloneAuxCallNodes = 1 << 2, CloneAuxCallNodes = 0 << 0,
-    StripModRefBits       = 1 << 3, KeepModRefBits    = 0 << 0,
+    StripAllocaBit        = 1 << 0, KeepAllocaBit     = 0,
+    DontCloneCallNodes    = 1 << 1, CloneCallNodes    = 0,
+    DontCloneAuxCallNodes = 1 << 2, CloneAuxCallNodes = 0,
+    StripModRefBits       = 1 << 3, KeepModRefBits    = 0,
+    StripIncompleteBit    = 1 << 4, KeepIncompleteBit = 0,
   };
+
+private:
+  void cloneReachableNodes(const DSNode*  Node,
+                           unsigned BitsToClear,
+                           NodeMapTy& OldNodeMap,
+                           NodeMapTy& CompletedNodeMap);
+
+public:
+  void updateFromGlobalGraph();
+
+  void cloneReachableSubgraph(const DSGraph& G,
+                              const hash_set<const DSNode*>& RootNodes,
+                              NodeMapTy& OldNodeMap,
+                              NodeMapTy& CompletedNodeMap,
+                              unsigned CloneFlags = 0);
 
   /// cloneInto - Clone the specified DSGraph into the current graph.  The
   /// translated ScalarMap for the old function is filled into the OldValMap





More information about the llvm-commits mailing list