aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/Analysis/DataStructure/EquivClassGraphs.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Analysis/DataStructure/EquivClassGraphs.h')
-rw-r--r--include/llvm/Analysis/DataStructure/EquivClassGraphs.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/include/llvm/Analysis/DataStructure/EquivClassGraphs.h b/include/llvm/Analysis/DataStructure/EquivClassGraphs.h
index 5b0a2206d6..d97739acbf 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();