[llvm-commits] CVS: llvm-poolalloc/include/dsa/DSGraph.h DSGraphTraits.h DSNode.h DataStructure.h

John Criswell criswell at cs.uiuc.edu
Wed Dec 13 21:51:55 PST 2006



Changes in directory llvm-poolalloc/include/dsa:

DSGraph.h updated: 1.112 -> 1.113
DSGraphTraits.h updated: 1.25 -> 1.26
DSNode.h updated: 1.60 -> 1.61
DataStructure.h updated: 1.98 -> 1.99
---
Log message:

Merged from release_19 branch.
This adds correct compilation of DSA, pool inference, and configure script
fixes to mainline.



---
Diffs of the changes:  (+113 -11)

 DSGraph.h       |  103 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 DSGraphTraits.h |    2 -
 DSNode.h        |   11 ++++-
 DataStructure.h |    8 +++-
 4 files changed, 113 insertions(+), 11 deletions(-)


Index: llvm-poolalloc/include/dsa/DSGraph.h
diff -u llvm-poolalloc/include/dsa/DSGraph.h:1.112 llvm-poolalloc/include/dsa/DSGraph.h:1.113
--- llvm-poolalloc/include/dsa/DSGraph.h:1.112	Wed Dec  6 19:30:30 2006
+++ llvm-poolalloc/include/dsa/DSGraph.h	Wed Dec 13 23:51:06 2006
@@ -15,13 +15,18 @@
 #ifndef LLVM_ANALYSIS_DSGRAPH_H
 #define LLVM_ANALYSIS_DSGRAPH_H
 
-#include "llvm/Analysis/DataStructure/DSNode.h"
+#include "dsa/DSNode.h"
 #include "llvm/ADT/hash_map"
 #include "llvm/ADT/EquivalenceClasses.h"
-#include <list>
+#include "poolalloc/Config/config.h"
 
+#include <list>
+#include <map>
+#include <iostream>
 namespace llvm {
 
+  //typedef map<const DSNode *, Value*> PoolDescriptorMapType;
+
 class GlobalValue;
 
 //===----------------------------------------------------------------------===//
@@ -170,6 +175,62 @@
 };
 
 
+#ifdef LLVA_KERNEL
+class MetaPool;
+class MetaPoolHandle {
+  MetaPool *Rep;
+  Instruction * Creator;
+public:
+  MetaPoolHandle(MetaPool *mp, Instruction * Maker = 0);
+  
+  MetaPool *getMetaPool() {
+    return Rep;
+  }
+  void setMetaPool(MetaPool *v) {
+    Rep = v;
+  }
+  ~MetaPoolHandle() {
+    //do nothing for now
+  }
+  const std::string &getName();
+  Value *getMetaPoolValue();
+  void merge(MetaPoolHandle *other);
+};
+
+  class MetaPool {
+    Value *MPD;
+    hash_set<MetaPoolHandle *> HandleSet;
+    
+  public:
+    MetaPool(Value *mpd) : MPD(mpd) {
+    }
+    void addMetaPoolHandles(hash_set<MetaPoolHandle *> & mpHS) {
+      HandleSet.insert(mpHS.begin(), mpHS.end());
+    }
+    hash_set<MetaPoolHandle *>& getHandleSet() {
+      return HandleSet;
+    }
+    Value * getMetaPoolValue() {
+      return MPD;
+    }
+    void setMetaPoolValue(Value *V) {
+      MPD = V;
+    }
+    void insert(MetaPoolHandle *mph) {
+      HandleSet.insert(mph);
+    }
+    const std::string& getName() {
+      return MPD->getName();
+    }
+    ~MetaPool() {
+      HandleSet.clear();
+    }
+  };
+
+#endif
+  
+
+  
 //===----------------------------------------------------------------------===//
 /// DSGraph - The graph that represents a function.
 ///
@@ -219,13 +280,18 @@
   /// constructed for.
   const TargetData &TD;
 
+#ifdef LLVA_KERNEL
+  hash_map<const DSNode*, MetaPoolHandle*> PoolDescriptors;
+#endif  
+
+  
+
   void operator=(const DSGraph &); // DO NOT IMPLEMENT
   DSGraph(const DSGraph&);         // DO NOT IMPLEMENT
 public:
   // Create a new, empty, DSGraph.
   DSGraph(EquivalenceClasses<GlobalValue*> &ECs, const TargetData &td)
-    : GlobalsGraph(0), PrintAuxCalls(false), ScalarMap(ECs), TD(td) {}
-
+    : GlobalsGraph(0), PrintAuxCalls(false), ScalarMap(ECs), TD(td) { }
   // Compute the local DSGraph
   DSGraph(EquivalenceClasses<GlobalValue*> &ECs, const TargetData &TD,
           Function &F, DSGraph *GlobalsGraph);
@@ -238,13 +304,38 @@
   // source.  You need to set a new GlobalsGraph with the setGlobalsGraph
   // method.
   //
-  DSGraph(const DSGraph &DSG, EquivalenceClasses<GlobalValue*> &ECs,
+  DSGraph( DSGraph &DSG, EquivalenceClasses<GlobalValue*> &ECs,
           unsigned CloneFlags = 0);
   ~DSGraph();
 
   DSGraph *getGlobalsGraph() const { return GlobalsGraph; }
   void setGlobalsGraph(DSGraph *G) { GlobalsGraph = G; }
 
+#ifdef LLVA_KERNEL
+#if 1
+  hash_map<const DSNode *, MetaPoolHandle*>& getPoolDescriptorsMap() {
+    return PoolDescriptors;
+  }
+  MetaPoolHandle *getPoolForNode(const DSNode *N) {
+    if (PoolDescriptors.count(N) > 0) {
+      return PoolDescriptors[N];
+    }
+    return 0;
+  }
+#else
+  hash_map<const DSNodeHandle *, MetaPoolHandle*>& getPoolDescriptorsMap() {
+    return PoolDescriptors;
+  }
+  MetaPoolHandle *getPoolForNode(const DSNodeHandle *N) {
+    if (PoolDescriptors.count(N) > 0) {
+      return PoolDescriptors[N];
+    }
+    return 0;
+  }
+#endif
+
+#endif  
+
   /// getGlobalECs - Return the set of equivalence classes that the global
   /// variables in the program form.
   EquivalenceClasses<GlobalValue*> &getGlobalECs() const {
@@ -472,7 +563,7 @@
   ///
   /// The CloneFlags member controls various aspects of the cloning process.
   ///
-  void cloneInto(const DSGraph &G, unsigned CloneFlags = 0);
+  void cloneInto(DSGraph &G, unsigned CloneFlags = 0);
 
   /// getFunctionArgumentsForCall - Given a function that is currently in this
   /// graph, return the DSNodeHandles that correspond to the pointer-compatible


Index: llvm-poolalloc/include/dsa/DSGraphTraits.h
diff -u llvm-poolalloc/include/dsa/DSGraphTraits.h:1.25 llvm-poolalloc/include/dsa/DSGraphTraits.h:1.26
--- llvm-poolalloc/include/dsa/DSGraphTraits.h:1.25	Thu Nov  2 19:43:47 2006
+++ llvm-poolalloc/include/dsa/DSGraphTraits.h	Wed Dec 13 23:51:06 2006
@@ -16,7 +16,7 @@
 #ifndef LLVM_ANALYSIS_DSGRAPHTRAITS_H
 #define LLVM_ANALYSIS_DSGRAPHTRAITS_H
 
-#include "llvm/Analysis/DataStructure/DSGraph.h"
+#include "dsa/DSGraph.h"
 #include "llvm/ADT/GraphTraits.h"
 #include "llvm/ADT/iterator"
 #include "llvm/ADT/STLExtras.h"


Index: llvm-poolalloc/include/dsa/DSNode.h
diff -u llvm-poolalloc/include/dsa/DSNode.h:1.60 llvm-poolalloc/include/dsa/DSNode.h:1.61
--- llvm-poolalloc/include/dsa/DSNode.h:1.60	Wed Dec  6 19:30:30 2006
+++ llvm-poolalloc/include/dsa/DSNode.h	Wed Dec 13 23:51:06 2006
@@ -14,7 +14,7 @@
 #ifndef LLVM_ANALYSIS_DSNODE_H
 #define LLVM_ANALYSIS_DSNODE_H
 
-#include "llvm/Analysis/DataStructure/DSSupport.h"
+#include "dsa/DSSupport.h"
 #include "llvm/ADT/hash_map"
 
 namespace llvm {
@@ -91,8 +91,9 @@
     Read        = 1 << 6,   // This node is read in this context
 
     Array       = 1 << 7,   // This node is treated like an array
+    External    = 1 << 8,   // This node comes from an external source
     //#ifndef NDEBUG
-    DEAD        = 1 << 8,   // This node is dead and should not be pointed to
+    DEAD        = 1 << 9,   // This node is dead and should not be pointed to
     //#endif
 
     Composition = AllocaNode | HeapNode | GlobalNode | UnknownNode
@@ -118,10 +119,14 @@
   ///
   DSNode(const DSNode &, DSGraph *G, bool NullLinks = false);
 
+#if 0
   ~DSNode() {
     dropAllReferences();
     assert(hasNoReferrers() && "Referrers to dead node exist!");
   }
+#else
+  ~DSNode();
+#endif
 
   // Iterator for graph interface... Defined in DSGraphTraits.h
   typedef DSNodeIterator<DSNode> iterator;
@@ -340,12 +345,14 @@
   bool isIncomplete() const { return NodeType & Incomplete; }
   bool isComplete() const   { return !isIncomplete(); }
   bool isDeadNode() const   { return NodeType & DEAD; }
+  bool isExternalNode() const { return NodeType & External; }
 
   DSNode *setAllocaNodeMarker()  { NodeType |= AllocaNode;  return this; }
   DSNode *setHeapNodeMarker()    { NodeType |= HeapNode;    return this; }
   DSNode *setGlobalNodeMarker()  { NodeType |= GlobalNode;  return this; }
   DSNode *setUnknownNodeMarker() { NodeType |= UnknownNode; return this; }
 
+  DSNode *setExternalMarker() { NodeType |= External; return this; }
   DSNode *setIncompleteMarker() { NodeType |= Incomplete; return this; }
   DSNode *setModifiedMarker()   { NodeType |= Modified;   return this; }
   DSNode *setReadMarker()       { NodeType |= Read;       return this; }


Index: llvm-poolalloc/include/dsa/DataStructure.h
diff -u llvm-poolalloc/include/dsa/DataStructure.h:1.98 llvm-poolalloc/include/dsa/DataStructure.h:1.99
--- llvm-poolalloc/include/dsa/DataStructure.h:1.98	Mon Oct 23 14:52:54 2006
+++ llvm-poolalloc/include/dsa/DataStructure.h	Wed Dec 13 23:51:06 2006
@@ -20,6 +20,7 @@
 #include "llvm/ADT/hash_map"
 #include "llvm/ADT/hash_set"
 #include "llvm/ADT/EquivalenceClasses.h"
+#include "poolalloc/Config/config.h"
 
 namespace llvm {
 
@@ -30,11 +31,11 @@
 class DSCallSite;
 class DSNode;
 class DSNodeHandle;
+typedef std::map<const DSNode *, Value*> PoolDescriptorMapType;
 
 FunctionPass *createDataStructureStatsPass();
 FunctionPass *createDataStructureGraphCheckerPass();
 
-
 // FIXME: move this stuff to a private header
 namespace DataStructureAnalysis {
   /// isPointerType - Return true if this first class type is big enough to hold
@@ -43,7 +44,6 @@
   bool isPointerType(const Type *Ty);
 }
 
-
 // LocalDataStructures - The analysis that computes the local data structure
 // graphs for all of the functions in the program.
 //
@@ -55,6 +55,10 @@
   hash_map<Function*, DSGraph*> DSInfo;
   DSGraph *GlobalsGraph;
 
+#ifdef LLVA_KERNEL
+  Function *AddPoolDescToMetaPool;
+#endif  
+
   /// GlobalECs - The equivalence classes for each global value that is merged
   /// with other global values in the DSGraphs.
   EquivalenceClasses<GlobalValue*> GlobalECs;






More information about the llvm-commits mailing list