aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Analysis
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-04-02 19:15:15 +0000
committerChris Lattner <sabre@nondot.org>2005-04-02 19:15:15 +0000
commitdf968b8b37d93c105ced41bea5d3231ee171a24e (patch)
tree69cceff6ccbc7e825e347586feba93179024166c /include/llvm/Analysis
parent7332f3e05d37b5bb772bb94e607fa04ef302af0f (diff)
downloadexternal_llvm-df968b8b37d93c105ced41bea5d3231ee171a24e.zip
external_llvm-df968b8b37d93c105ced41bea5d3231ee171a24e.tar.gz
external_llvm-df968b8b37d93c105ced41bea5d3231ee171a24e.tar.bz2
Change the ActualCallees callgraph from hash_multimap<Instruction,Function>
to std::set<std::pair<Inst,Func>> to avoid duplicate entries. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21030 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Analysis')
-rw-r--r--include/llvm/Analysis/DataStructure/DataStructure.h17
-rw-r--r--include/llvm/Analysis/DataStructure/EquivClassGraphs.h13
2 files changed, 24 insertions, 6 deletions
diff --git a/include/llvm/Analysis/DataStructure/DataStructure.h b/include/llvm/Analysis/DataStructure/DataStructure.h
index d2331e1..8e83f30 100644
--- a/include/llvm/Analysis/DataStructure/DataStructure.h
+++ b/include/llvm/Analysis/DataStructure/DataStructure.h
@@ -102,7 +102,7 @@ protected:
// DSInfo, one graph for each function
hash_map<Function*, DSGraph*> DSInfo;
DSGraph *GlobalsGraph;
- hash_multimap<Instruction*, Function*> ActualCallees;
+ std::set<std::pair<Instruction*, Function*> > ActualCallees;
// This map is only maintained during construction of BU Graphs
std::map<std::vector<Function*>,
@@ -152,11 +152,20 @@ public:
AU.addRequired<LocalDataStructures>();
}
- typedef hash_multimap<Instruction*, Function*> ActualCalleesTy;
+ typedef std::set<std::pair<Instruction*, Function*> > ActualCalleesTy;
const ActualCalleesTy &getActualCallees() const {
return ActualCallees;
}
+ ActualCalleesTy::iterator callee_begin(Instruction *I) const {
+ return ActualCallees.lower_bound(std::pair<Instruction*,Function*>(I, 0));
+ }
+
+ ActualCalleesTy::iterator callee_end(Instruction *I) const {
+ I = (Instruction*)((char*)I + 1);
+ return ActualCallees.lower_bound(std::pair<Instruction*,Function*>(I, 0));
+ }
+
private:
void calculateGraph(DSGraph &G);
@@ -177,6 +186,7 @@ class TDDataStructures : public ModulePass {
hash_map<Function*, DSGraph*> DSInfo;
hash_set<Function*> ArgsRemainIncomplete;
DSGraph *GlobalsGraph;
+ BUDataStructures *BUInfo;
/// GlobalECs - The equivalence classes for each global value that is merged
/// with other global values in the DSGraphs.
@@ -257,8 +267,7 @@ private:
void InlineCallersIntoGraph(DSGraph &G);
DSGraph &getOrCreateDSGraph(Function &F);
void ComputePostOrder(Function &F, hash_set<DSGraph*> &Visited,
- std::vector<DSGraph*> &PostOrder,
- const BUDataStructures::ActualCalleesTy &ActualCallees);
+ std::vector<DSGraph*> &PostOrder);
};
diff --git a/include/llvm/Analysis/DataStructure/EquivClassGraphs.h b/include/llvm/Analysis/DataStructure/EquivClassGraphs.h
index 5b0a220..d97739a 100644
--- a/include/llvm/Analysis/DataStructure/EquivClassGraphs.h
+++ b/include/llvm/Analysis/DataStructure/EquivClassGraphs.h
@@ -39,7 +39,7 @@ namespace llvm {
/// ActualCallees - The actual functions callable from indirect call sites.
///
- hash_multimap<Instruction*, Function*> ActualCallees;
+ std::set<std::pair<Instruction*, Function*> > ActualCallees;
// Equivalence class where functions that can potentially be called via the
// same function pointer are in the same class.
@@ -96,10 +96,19 @@ namespace llvm {
return *GlobalsGraph;
}
- typedef hash_multimap<Instruction*, Function*> ActualCalleesTy;
+ typedef std::set<std::pair<Instruction*, Function*> > ActualCalleesTy;
const ActualCalleesTy &getActualCallees() const {
return ActualCallees;
}
+
+ ActualCalleesTy::iterator callee_begin(Instruction *I) const {
+ return ActualCallees.lower_bound(std::pair<Instruction*,Function*>(I, 0));
+ }
+
+ ActualCalleesTy::iterator callee_end(Instruction *I) const {
+ I = (Instruction*)((char*)I + 1);
+ return ActualCallees.lower_bound(std::pair<Instruction*,Function*>(I, 0));
+ }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();