* Add data structures to BU pass to keep track of call sites for functions
authorChris Lattner <sabre@nondot.org>
Thu, 17 Oct 2002 04:23:05 +0000 (04:23 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 17 Oct 2002 04:23:05 +0000 (04:23 +0000)
  * Reenable the TD analysis

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

include/llvm/Analysis/DataStructure.h
include/llvm/Analysis/DataStructure/DataStructure.h

index 404ddc8f47b2a9d51b95fcae5b4c06249303b076..f154a6e629cf38ef889e02f142d2a8c2cb4a1df6 100644 (file)
 
 class Type;
 class DSGraph;
+class DSNodeHandle;
 class LocalDataStructures;     // A collection of local graphs for a program
 class BUDataStructures;        // A collection of bu graphs for a program
 class TDDataStructures;        // A collection of td graphs for a program
 
-
 // FIXME: move this stuff to a private header
 namespace DataStructureAnalysis {
   // isPointerType - Return true if this first class type is big enough to hold
@@ -63,8 +63,19 @@ public:
 // only performs a "Bottom Up" propogation (hence the name).
 //
 class BUDataStructures : public Pass {
+public:
+  struct CallSite {
+    Function *Caller;
+    std::vector<DSNodeHandle> Context;
+
+    CallSite(Function &C, const std::vector<DSNodeHandle> &Con)
+      : Caller(&C), Context(Con) {}
+  };
+
+private:
   // DSInfo, one graph for each function
   std::map<const Function*, DSGraph*> DSInfo;
+  std::map<const Function*, std::vector<CallSite> > CallSites;
 public:
   ~BUDataStructures() { releaseMemory(); }
 
@@ -77,6 +88,12 @@ public:
     return *I->second;
   }
 
+  const std::vector<CallSite> *getCallSites(const Function &F) const {
+    std::map<const Function*, std::vector<CallSite> >::const_iterator I
+      = CallSites.find(&F);
+    return I != CallSites.end() ? &I->second : 0;
+  }
+
   // print - Print out the analysis results...
   void print(std::ostream &O, const Module *M) const;
 
@@ -92,8 +109,6 @@ private:
   DSGraph &calculateGraph(Function &F);
 };
 
-
-#if 0
 // TDDataStructures - Analysis that computes new data structure graphs
 // for each function using the closed graphs for the callers computed
 // by the bottom-up pass.
@@ -126,11 +141,10 @@ public:
   }
 private:
   DSGraph &calculateGraph(Function &F);
-  void pushGraphIntoCallee(DSGraph &callerGraph, DSGraph &calleeGraph,
-                           std::map<Value*, DSNodeHandle> &OldValMap,
-                           std::map<const DSNode*, DSNode*> &OldNodeMap);
+
+  void ResolveCallSite(DSGraph &Graph,
+                       const BUDataStructures::CallSite &CallSite);
 };
-#endif
 
 #if 0
 // GlobalDSGraph - A common graph for all the globals and their outgoing links
index 404ddc8f47b2a9d51b95fcae5b4c06249303b076..f154a6e629cf38ef889e02f142d2a8c2cb4a1df6 100644 (file)
 
 class Type;
 class DSGraph;
+class DSNodeHandle;
 class LocalDataStructures;     // A collection of local graphs for a program
 class BUDataStructures;        // A collection of bu graphs for a program
 class TDDataStructures;        // A collection of td graphs for a program
 
-
 // FIXME: move this stuff to a private header
 namespace DataStructureAnalysis {
   // isPointerType - Return true if this first class type is big enough to hold
@@ -63,8 +63,19 @@ public:
 // only performs a "Bottom Up" propogation (hence the name).
 //
 class BUDataStructures : public Pass {
+public:
+  struct CallSite {
+    Function *Caller;
+    std::vector<DSNodeHandle> Context;
+
+    CallSite(Function &C, const std::vector<DSNodeHandle> &Con)
+      : Caller(&C), Context(Con) {}
+  };
+
+private:
   // DSInfo, one graph for each function
   std::map<const Function*, DSGraph*> DSInfo;
+  std::map<const Function*, std::vector<CallSite> > CallSites;
 public:
   ~BUDataStructures() { releaseMemory(); }
 
@@ -77,6 +88,12 @@ public:
     return *I->second;
   }
 
+  const std::vector<CallSite> *getCallSites(const Function &F) const {
+    std::map<const Function*, std::vector<CallSite> >::const_iterator I
+      = CallSites.find(&F);
+    return I != CallSites.end() ? &I->second : 0;
+  }
+
   // print - Print out the analysis results...
   void print(std::ostream &O, const Module *M) const;
 
@@ -92,8 +109,6 @@ private:
   DSGraph &calculateGraph(Function &F);
 };
 
-
-#if 0
 // TDDataStructures - Analysis that computes new data structure graphs
 // for each function using the closed graphs for the callers computed
 // by the bottom-up pass.
@@ -126,11 +141,10 @@ public:
   }
 private:
   DSGraph &calculateGraph(Function &F);
-  void pushGraphIntoCallee(DSGraph &callerGraph, DSGraph &calleeGraph,
-                           std::map<Value*, DSNodeHandle> &OldValMap,
-                           std::map<const DSNode*, DSNode*> &OldNodeMap);
+
+  void ResolveCallSite(DSGraph &Graph,
+                       const BUDataStructures::CallSite &CallSite);
 };
-#endif
 
 #if 0
 // GlobalDSGraph - A common graph for all the globals and their outgoing links