mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +00:00
[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
This commit is contained in:
parent
e126dcbff9
commit
c15aff93c4
@ -165,28 +165,11 @@ public:
|
|||||||
/// Typically represents a function in the call graph. There are also special
|
/// Typically represents a function in the call graph. There are also special
|
||||||
/// "null" nodes used to represent theoretical entries in the call graph.
|
/// "null" nodes used to represent theoretical entries in the call graph.
|
||||||
class CallGraphNode {
|
class CallGraphNode {
|
||||||
friend class CallGraph;
|
|
||||||
|
|
||||||
AssertingVH<Function> F;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// \brief A pair of the calling instruction (a call or invoke)
|
/// \brief A pair of the calling instruction (a call or invoke)
|
||||||
/// and the call graph node being called.
|
/// and the call graph node being called.
|
||||||
typedef std::pair<WeakVH, CallGraphNode *> CallRecord;
|
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:
|
public:
|
||||||
typedef std::vector<CallRecord> CalledFunctionsVector;
|
typedef std::vector<CallRecord> CalledFunctionsVector;
|
||||||
|
|
||||||
@ -281,12 +264,48 @@ public:
|
|||||||
/// Note that this method takes linear time, so it should be used sparingly.
|
/// Note that this method takes linear time, so it should be used sparingly.
|
||||||
void replaceCallEdge(CallSite CS, CallSite NewCS, CallGraphNode *NewNode);
|
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.
|
/// \brief A special function that should only be used by the CallGraph class.
|
||||||
//
|
|
||||||
// FIXME: Make this private?
|
|
||||||
void allReferencesDropped() { NumReferences = 0; }
|
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
|
/// \brief The \c ModulePass which wraps up a \c CallGraph and the logic to
|
||||||
/// build it.
|
/// build it.
|
||||||
///
|
///
|
||||||
|
Loading…
x
Reference in New Issue
Block a user