forked from OSchip/llvm-project
parent
2545aeb710
commit
9f4b4a5901
|
@ -104,16 +104,16 @@ public:
|
||||||
return I->second;
|
return I->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the CallGraphNode which is used to represent undetermined calls
|
/// Returns the CallGraphNode which is used to represent undetermined calls
|
||||||
/// into the callgraph. Override this if you want behavioral inheritance.
|
/// into the callgraph. Override this if you want behavioral inheritance.
|
||||||
virtual CallGraphNode* getExternalCallingNode() const { return 0; }
|
virtual CallGraphNode* getExternalCallingNode() const { return 0; }
|
||||||
|
|
||||||
/// Return the root/main method in the module, or some other root node, such
|
/// Return the root/main method in the module, or some other root node, such
|
||||||
/// as the externalcallingnode. Overload these if you behavioral
|
/// as the externalcallingnode. Overload these if you behavioral
|
||||||
/// inheritance.
|
/// inheritance.
|
||||||
virtual CallGraphNode* getRoot() { return 0; }
|
virtual CallGraphNode* getRoot() { return 0; }
|
||||||
virtual const CallGraphNode* getRoot() const { return 0; }
|
virtual const CallGraphNode* getRoot() const { return 0; }
|
||||||
|
|
||||||
//===---------------------------------------------------------------------
|
//===---------------------------------------------------------------------
|
||||||
// Functions to keep a call graph up to date with a function that has been
|
// Functions to keep a call graph up to date with a function that has been
|
||||||
// modified.
|
// modified.
|
||||||
|
@ -140,17 +140,17 @@ public:
|
||||||
/// it will insert a new CallGraphNode for the specified function if one does
|
/// it will insert a new CallGraphNode for the specified function if one does
|
||||||
/// not already exist.
|
/// not already exist.
|
||||||
CallGraphNode *getOrInsertFunction(const Function *F);
|
CallGraphNode *getOrInsertFunction(const Function *F);
|
||||||
|
|
||||||
//===---------------------------------------------------------------------
|
//===---------------------------------------------------------------------
|
||||||
// Pass infrastructure interface glue code...
|
// Pass infrastructure interface glue code...
|
||||||
//
|
//
|
||||||
protected:
|
protected:
|
||||||
CallGraph() {}
|
CallGraph() {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~CallGraph() { destroy(); }
|
virtual ~CallGraph() { destroy(); }
|
||||||
|
|
||||||
/// initialize - Call this method before calling other methods,
|
/// initialize - Call this method before calling other methods,
|
||||||
/// re/initializes the state of the CallGraph.
|
/// re/initializes the state of the CallGraph.
|
||||||
///
|
///
|
||||||
void initialize(Module &M);
|
void initialize(Module &M);
|
||||||
|
@ -158,7 +158,7 @@ public:
|
||||||
virtual void print(std::ostream &o, const Module *M) const;
|
virtual void print(std::ostream &o, const Module *M) const;
|
||||||
void print(std::ostream *o, const Module *M) const { if (o) print(*o, M); }
|
void print(std::ostream *o, const Module *M) const { if (o) print(*o, M); }
|
||||||
void dump() const;
|
void dump() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// destroy - Release memory for the call graph
|
// destroy - Release memory for the call graph
|
||||||
virtual void destroy();
|
virtual void destroy();
|
||||||
|
@ -229,7 +229,7 @@ public:
|
||||||
/// specified call site. Note that this method takes linear time, so it
|
/// specified call site. Note that this method takes linear time, so it
|
||||||
/// should be used sparingly.
|
/// should be used sparingly.
|
||||||
void removeCallEdgeFor(CallSite CS);
|
void removeCallEdgeFor(CallSite CS);
|
||||||
|
|
||||||
/// removeAnyCallEdgeTo - This method removes any call edges from this node to
|
/// removeAnyCallEdgeTo - This method removes any call edges from this node to
|
||||||
/// the specified callee function. This takes more time to execute than
|
/// the specified callee function. This takes more time to execute than
|
||||||
/// removeCallEdgeTo, so it should not be used unless necessary.
|
/// removeCallEdgeTo, so it should not be used unless necessary.
|
||||||
|
@ -253,22 +253,22 @@ template <> struct GraphTraits<CallGraphNode*> {
|
||||||
|
|
||||||
typedef std::pair<CallSite, CallGraphNode*> CGNPairTy;
|
typedef std::pair<CallSite, CallGraphNode*> CGNPairTy;
|
||||||
typedef std::pointer_to_unary_function<CGNPairTy, CallGraphNode*> CGNDerefFun;
|
typedef std::pointer_to_unary_function<CGNPairTy, CallGraphNode*> CGNDerefFun;
|
||||||
|
|
||||||
static NodeType *getEntryNode(CallGraphNode *CGN) { return CGN; }
|
static NodeType *getEntryNode(CallGraphNode *CGN) { return CGN; }
|
||||||
|
|
||||||
typedef mapped_iterator<NodeType::iterator, CGNDerefFun> ChildIteratorType;
|
typedef mapped_iterator<NodeType::iterator, CGNDerefFun> ChildIteratorType;
|
||||||
|
|
||||||
static inline ChildIteratorType child_begin(NodeType *N) {
|
static inline ChildIteratorType child_begin(NodeType *N) {
|
||||||
return map_iterator(N->begin(), CGNDerefFun(CGNDeref));
|
return map_iterator(N->begin(), CGNDerefFun(CGNDeref));
|
||||||
}
|
}
|
||||||
static inline ChildIteratorType child_end (NodeType *N) {
|
static inline ChildIteratorType child_end (NodeType *N) {
|
||||||
return map_iterator(N->end(), CGNDerefFun(CGNDeref));
|
return map_iterator(N->end(), CGNDerefFun(CGNDeref));
|
||||||
}
|
}
|
||||||
|
|
||||||
static CallGraphNode *CGNDeref(CGNPairTy P) {
|
static CallGraphNode *CGNDeref(CGNPairTy P) {
|
||||||
return P.second;
|
return P.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> struct GraphTraits<const CallGraphNode*> {
|
template <> struct GraphTraits<const CallGraphNode*> {
|
||||||
|
|
Loading…
Reference in New Issue