mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-24 04:32:09 +00:00
[CallGraph] Given -print-callgraph a stable printing order.
Summary: Since FunctionMap has llvm::Function pointers as keys, the order in which the traversal happens can differ from run to run, causing spurious FileCheck failures. Have CallGraph::print sort the CallGraphNodes by name before printing them. Reviewers: bogner, chandlerc Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D10575 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240191 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9b3369eafc
commit
152f3b5997
@ -98,8 +98,26 @@ void CallGraph::print(raw_ostream &OS) const {
|
||||
OS << "<<null function: 0x" << Root << ">>\n";
|
||||
}
|
||||
|
||||
for (CallGraph::const_iterator I = begin(), E = end(); I != E; ++I)
|
||||
I->second->print(OS);
|
||||
// Print in a deterministic order by sorting CallGraphNodes by name. We do
|
||||
// this here to avoid slowing down the non-printing fast path.
|
||||
|
||||
SmallVector<CallGraphNode *, 16> Nodes;
|
||||
Nodes.reserve(FunctionMap.size());
|
||||
|
||||
for (auto I = begin(), E = end(); I != E; ++I)
|
||||
Nodes.push_back(I->second);
|
||||
|
||||
std::sort(Nodes.begin(), Nodes.end(),
|
||||
[](CallGraphNode *LHS, CallGraphNode *RHS) {
|
||||
if (Function *LF = LHS->getFunction())
|
||||
if (Function *RF = RHS->getFunction())
|
||||
return LF->getName() < RF->getName();
|
||||
|
||||
return RHS->getFunction() != nullptr;
|
||||
});
|
||||
|
||||
for (CallGraphNode *CN : Nodes)
|
||||
CN->print(OS);
|
||||
}
|
||||
|
||||
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
|
||||
|
@ -25,8 +25,8 @@ entry:
|
||||
; CHECK: Call graph node <<null function>>
|
||||
; CHECK: CS<0x0> calls function 'f'
|
||||
|
||||
; CHECK: Call graph node for function: 'calls_statepoint'
|
||||
; CHECK-NEXT: CS<[[addr_0:[^>]+]]> calls external node
|
||||
|
||||
; CHECK: Call graph node for function: 'calls_patchpoint'
|
||||
; CHECK-NEXT: CS<[[addr_1:[^>]+]]> calls external node
|
||||
|
||||
; CHECK: Call graph node for function: 'calls_statepoint'
|
||||
; CHECK-NEXT: CS<[[addr_0:[^>]+]]> calls external node
|
||||
|
Loading…
x
Reference in New Issue
Block a user