mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-10 05:41:40 +00:00
CallGraph: Remove almost-unused field 'Root'.
llvm-svn: 302852
This commit is contained in:
parent
228587901e
commit
5510aada63
@ -41,12 +41,6 @@
|
||||
/// of all of the caller-callee relationships, which is useful for
|
||||
/// transformations.
|
||||
///
|
||||
/// The CallGraph class also attempts to figure out what the root of the
|
||||
/// CallGraph is, which it currently does by looking for a function named
|
||||
/// 'main'. If no function named 'main' is found, the external node is used as
|
||||
/// the entry node, reflecting the fact that any function without internal
|
||||
/// linkage could be called into (which is common for libraries).
|
||||
///
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_ANALYSIS_CALLGRAPH_H
|
||||
@ -82,10 +76,6 @@ class CallGraph {
|
||||
/// \brief A map from \c Function* to \c CallGraphNode*.
|
||||
FunctionMapTy FunctionMap;
|
||||
|
||||
/// \brief Root is root of the call graph, or the external node if a 'main'
|
||||
/// function couldn't be found.
|
||||
CallGraphNode *Root;
|
||||
|
||||
/// \brief This node has edges to all external functions and those internal
|
||||
/// functions that have their address taken.
|
||||
CallGraphNode *ExternalCallingNode;
|
||||
|
@ -21,23 +21,18 @@ using namespace llvm;
|
||||
//
|
||||
|
||||
CallGraph::CallGraph(Module &M)
|
||||
: M(M), Root(nullptr), ExternalCallingNode(getOrInsertFunction(nullptr)),
|
||||
: M(M), ExternalCallingNode(getOrInsertFunction(nullptr)),
|
||||
CallsExternalNode(llvm::make_unique<CallGraphNode>(nullptr)) {
|
||||
// Add every function to the call graph.
|
||||
for (Function &F : M)
|
||||
addToCallGraph(&F);
|
||||
|
||||
// If we didn't find a main function, use the external call graph node
|
||||
if (!Root)
|
||||
Root = ExternalCallingNode;
|
||||
}
|
||||
|
||||
CallGraph::CallGraph(CallGraph &&Arg)
|
||||
: M(Arg.M), FunctionMap(std::move(Arg.FunctionMap)), Root(Arg.Root),
|
||||
: M(Arg.M), FunctionMap(std::move(Arg.FunctionMap)),
|
||||
ExternalCallingNode(Arg.ExternalCallingNode),
|
||||
CallsExternalNode(std::move(Arg.CallsExternalNode)) {
|
||||
Arg.FunctionMap.clear();
|
||||
Arg.Root = nullptr;
|
||||
Arg.ExternalCallingNode = nullptr;
|
||||
}
|
||||
|
||||
@ -57,21 +52,9 @@ CallGraph::~CallGraph() {
|
||||
void CallGraph::addToCallGraph(Function *F) {
|
||||
CallGraphNode *Node = getOrInsertFunction(F);
|
||||
|
||||
// If this function has external linkage, anything could call it.
|
||||
if (!F->hasLocalLinkage()) {
|
||||
ExternalCallingNode->addCalledFunction(CallSite(), Node);
|
||||
|
||||
// Found the entry point?
|
||||
if (F->getName() == "main") {
|
||||
if (Root) // Found multiple external mains? Don't pick one.
|
||||
Root = ExternalCallingNode;
|
||||
else
|
||||
Root = Node; // Found a main, keep track of it!
|
||||
}
|
||||
}
|
||||
|
||||
// If this function has its address taken, anything could call it.
|
||||
if (F->hasAddressTaken())
|
||||
// If this function has external linkage or has its address taken, anything
|
||||
// could call it.
|
||||
if (!F->hasLocalLinkage() || F->hasAddressTaken())
|
||||
ExternalCallingNode->addCalledFunction(CallSite(), Node);
|
||||
|
||||
// If this function is not defined in this translation unit, it could call
|
||||
@ -96,13 +79,6 @@ void CallGraph::addToCallGraph(Function *F) {
|
||||
}
|
||||
|
||||
void CallGraph::print(raw_ostream &OS) const {
|
||||
OS << "CallGraph Root is: ";
|
||||
if (Function *F = Root->getFunction())
|
||||
OS << F->getName() << "\n";
|
||||
else {
|
||||
OS << "<<null function: 0x" << Root << ">>\n";
|
||||
}
|
||||
|
||||
// Print in a deterministic order by sorting CallGraphNodes by name. We do
|
||||
// this here to avoid slowing down the non-printing fast path.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user