#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;
// 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(); }
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;
// 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(); }
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);
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(); }
}
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.
#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>
/// 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.
///
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