diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2013-12-02 12:35:56 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2013-12-02 12:35:56 +0000 |
commit | c15aff93c49dabb5ed174fd3731c7219e96af1f4 (patch) | |
tree | b7a4f7e029586cd7d235cc9e25fb9d807df4a527 /include | |
parent | e126dcbff9406a6beeadee02a5efc652b42fece6 (diff) | |
download | llvm-c15aff93c49dabb5ed174fd3731c7219e96af1f4.tar.gz llvm-c15aff93c49dabb5ed174fd3731c7219e96af1f4.tar.bz2 llvm-c15aff93c49dabb5ed174fd3731c7219e96af1f4.tar.xz |
[PM] [cleanup] Rearrange the public and private sections of this class
to be a bit more sensible. The public interface now is first followed by
the implementation details.
This also resolves a FIXME to make something private -- it was already
possible as the one special caller was already a friend.
No functionality changed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196095 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Analysis/CallGraph.h | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/include/llvm/Analysis/CallGraph.h b/include/llvm/Analysis/CallGraph.h index e80501555b..6b44546e76 100644 --- a/include/llvm/Analysis/CallGraph.h +++ b/include/llvm/Analysis/CallGraph.h @@ -165,28 +165,11 @@ public: /// Typically represents a function in the call graph. There are also special /// "null" nodes used to represent theoretical entries in the call graph. class CallGraphNode { - friend class CallGraph; - - AssertingVH<Function> F; - public: /// \brief A pair of the calling instruction (a call or invoke) /// and the call graph node being called. typedef std::pair<WeakVH, CallGraphNode *> CallRecord; -private: - std::vector<CallRecord> CalledFunctions; - - /// \brief The number of times that this CallGraphNode occurs in the - /// CalledFunctions array of this or other CallGraphNodes. - unsigned NumReferences; - - CallGraphNode(const CallGraphNode &) LLVM_DELETED_FUNCTION; - void operator=(const CallGraphNode &) LLVM_DELETED_FUNCTION; - - void DropRef() { --NumReferences; } - void AddRef() { ++NumReferences; } - public: typedef std::vector<CallRecord> CalledFunctionsVector; @@ -281,12 +264,48 @@ public: /// Note that this method takes linear time, so it should be used sparingly. void replaceCallEdge(CallSite CS, CallSite NewCS, CallGraphNode *NewNode); +private: + friend class CallGraph; + + AssertingVH<Function> F; + + std::vector<CallRecord> CalledFunctions; + + /// \brief The number of times that this CallGraphNode occurs in the + /// CalledFunctions array of this or other CallGraphNodes. + unsigned NumReferences; + + CallGraphNode(const CallGraphNode &) LLVM_DELETED_FUNCTION; + void operator=(const CallGraphNode &) LLVM_DELETED_FUNCTION; + + void DropRef() { --NumReferences; } + void AddRef() { ++NumReferences; } + /// \brief A special function that should only be used by the CallGraph class. - // - // FIXME: Make this private? void allReferencesDropped() { NumReferences = 0; } }; +/// \brief An analysis pass to compute the \c CallGraph for a \c Module. +/// +/// This class implements the concept of an analysis pass used by the \c +/// ModuleAnalysisManager to run an analysis over a module and cache the +/// resulting data. +class CallGraphAnalysis { +public: + /// \brief A formulaic typedef to inform clients of the result type. + typedef CallGraph Result; + + static void *ID() { return (void *)&PassID; } + + /// \brief Compute the \c CallGraph for the module \c M. + /// + /// The real work here is done in the \c CallGraph constructor. + CallGraph run(Module *M) { return CallGraph(*M); } + +private: + static char PassID; +}; + /// \brief The \c ModulePass which wraps up a \c CallGraph and the logic to /// build it. /// |