diff options
author | Chris Lattner <sabre@nondot.org> | 2005-03-19 22:12:33 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-03-19 22:12:33 +0000 |
commit | ed53fe9945e527570206d419e74e4561da3761cc (patch) | |
tree | fd861b238b851e9ce1c14ffd0133a34261bd40c6 | |
parent | ce325fdb87b029cdc6fc21088e40648cfb68ce54 (diff) | |
download | external_llvm-ed53fe9945e527570206d419e74e4561da3761cc.zip external_llvm-ed53fe9945e527570206d419e74e4561da3761cc.tar.gz external_llvm-ed53fe9945e527570206d419e74e4561da3761cc.tar.bz2 |
Each DS collection now contains an equivalence class of globals values.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20694 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Analysis/DataStructure/DataStructure.h | 21 | ||||
-rw-r--r-- | include/llvm/Analysis/DataStructure/EquivClassGraphs.h | 8 |
2 files changed, 27 insertions, 2 deletions
diff --git a/include/llvm/Analysis/DataStructure/DataStructure.h b/include/llvm/Analysis/DataStructure/DataStructure.h index 1c2f4e6..215c4a5 100644 --- a/include/llvm/Analysis/DataStructure/DataStructure.h +++ b/include/llvm/Analysis/DataStructure/DataStructure.h @@ -18,11 +18,13 @@ #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. diff --git a/include/llvm/Analysis/DataStructure/EquivClassGraphs.h b/include/llvm/Analysis/DataStructure/EquivClassGraphs.h index d0e4265..5b0a220 100644 --- a/include/llvm/Analysis/DataStructure/EquivClassGraphs.h +++ b/include/llvm/Analysis/DataStructure/EquivClassGraphs.h @@ -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 |