summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-12-02 12:35:56 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-12-02 12:35:56 +0000
commitc15aff93c49dabb5ed174fd3731c7219e96af1f4 (patch)
treeb7a4f7e029586cd7d235cc9e25fb9d807df4a527 /include
parente126dcbff9406a6beeadee02a5efc652b42fece6 (diff)
downloadllvm-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.h57
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.
///