Each DS collection now contains an equivalence class of globals values.
authorChris Lattner <sabre@nondot.org>
Sat, 19 Mar 2005 22:12:33 +0000 (22:12 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 19 Mar 2005 22:12:33 +0000 (22:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20694 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 1c2f4e654ad7a98a33ee3b3351a446886f3b6127..215c4a5409d61a6c63e862e85193077aa327d790 100644 (file)
 #include "llvm/Target/TargetData.h"
 #include "llvm/ADT/hash_map"
 #include "llvm/ADT/hash_set"
+#include "llvm/ADT/EquivalenceClasses.h"
 
 namespace llvm {
 
 class Type;
 class Instruction;
+class GlobalValue;
 class DSGraph;
 class DSNode;
 class DSNodeHandle;
@@ -46,6 +48,10 @@ class LocalDataStructures : public ModulePass {
   // DSInfo, one graph for each function
   hash_map<Function*, DSGraph*> DSInfo;
   DSGraph *GlobalsGraph;
+
+  /// GlobalECs - The equivalence classes for each global value that is merged
+  /// with other global values in the DSGraphs.
+  EquivalenceClasses<GlobalValue*> GlobalECs;
 public:
   ~LocalDataStructures() { releaseMemory(); }
 
@@ -66,6 +72,8 @@ public:
 
   DSGraph &getGlobalsGraph() const { return *GlobalsGraph; }
 
+  EquivalenceClasses<GlobalValue*> &getGlobalECs() { return GlobalECs; }
+
   /// print - Print out the analysis results...
   ///
   void print(std::ostream &O, const Module *M) const;
@@ -98,6 +106,10 @@ protected:
   // This map is only maintained during construction of BU Graphs
   std::map<std::vector<Function*>,
            std::pair<DSGraph*, std::vector<DSNodeHandle> > > *IndCallGraphMap;
+
+  /// GlobalECs - The equivalence classes for each global value that is merged
+  /// with other global values in the DSGraphs.
+  EquivalenceClasses<GlobalValue*> GlobalECs;
 public:
   ~BUDataStructures() { releaseMemory(); }
 
@@ -118,6 +130,9 @@ public:
 
   DSGraph &getGlobalsGraph() const { return *GlobalsGraph; }
 
+  EquivalenceClasses<GlobalValue*> &getGlobalECs() { return GlobalECs; }
+
+
   /// deleteValue/copyValue - Interfaces to update the DSGraphs in the program.
   /// These correspond to the interfaces defined in the AliasAnalysis class.
   void deleteValue(Value *V);
@@ -162,6 +177,10 @@ class TDDataStructures : public ModulePass {
   hash_map<Function*, DSGraph*> DSInfo;
   hash_set<Function*> ArgsRemainIncomplete;
   DSGraph *GlobalsGraph;
+
+  /// GlobalECs - The equivalence classes for each global value that is merged
+  /// with other global values in the DSGraphs.
+  EquivalenceClasses<GlobalValue*> GlobalECs;
 public:
   ~TDDataStructures() { releaseMyMemory(); }
 
@@ -181,6 +200,8 @@ public:
   }
 
   DSGraph &getGlobalsGraph() const { return *GlobalsGraph; }
+  EquivalenceClasses<GlobalValue*> &getGlobalECs() { return GlobalECs; }
+
 
   /// deleteValue/copyValue - Interfaces to update the DSGraphs in the program.
   /// These correspond to the interfaces defined in the AliasAnalysis class.
index d0e4265db0556f3d4c4428c5259dec617310fa5d..5b0a2206d6f4d01363ab37e93acba5b0c2c7220a 100644 (file)
@@ -16,9 +16,7 @@
 
 #include "llvm/Analysis/DataStructure/DataStructure.h"
 #include "llvm/Analysis/DataStructure/DSGraph.h"
-#include "llvm/ADT/EquivalenceClasses.h"
 #include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/hash_map"
 #include <vector>
 #include <map>
 
@@ -52,6 +50,10 @@ namespace llvm {
     /// a call site.
     std::map<DSNode*, Function *> OneCalledFunction;
 
+    /// GlobalECs - The equivalence classes for each global value that is merged
+    /// with other global values in the DSGraphs.
+    EquivalenceClasses<GlobalValue*> GlobalECs;
+
   public:
     /// EquivClassGraphs - Computes the equivalence classes and then the
     /// folded DS graphs for each class.
@@ -62,6 +64,8 @@ namespace llvm {
     ///
     void print(std::ostream &O, const Module *M) const;
 
+    EquivalenceClasses<GlobalValue*> &getGlobalECs() { return GlobalECs; }
+
     /// getDSGraph - Return the data structure graph for the specified function.
     /// This returns the folded graph.  The folded graph is the same as the CBU
     /// graph iff the function is in a singleton equivalence class AND all its