mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-20 19:04:10 -04:00
[ThinLTO] Add GraphTraits for FunctionSummaries
Add GraphTraits definitions to the FunctionSummary and ModuleSummaryIndex classes. These GraphTraits will be used to construct find SCC's in ThinLTO analysis passes. Second attempt, since last patch caused stage2 build to fail (now using function_ref rather than std::function). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@325448 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -13,10 +13,14 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/IR/ModuleSummaryIndex.h"
|
||||
#include "llvm/ADT/SCCIterator.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
using namespace llvm;
|
||||
|
||||
FunctionSummary FunctionSummary::ExternalNode =
|
||||
FunctionSummary::makeDummyFunctionSummary({});
|
||||
bool ValueInfo::isDSOLocal() const {
|
||||
// Need to check all summaries are local in case of hash collisions.
|
||||
return getSummaryList().size() &&
|
||||
@@ -80,6 +84,26 @@ bool ModuleSummaryIndex::isGUIDLive(GlobalValue::GUID GUID) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO: write a graphviz dumper for SCCs (see ModuleSummaryIndex::exportToDot)
|
||||
// then delete this function and update its tests
|
||||
LLVM_DUMP_METHOD
|
||||
void ModuleSummaryIndex::dumpSCCs(raw_ostream &O) {
|
||||
for (scc_iterator<ModuleSummaryIndex *> I =
|
||||
scc_begin<ModuleSummaryIndex *>(this);
|
||||
!I.isAtEnd(); ++I) {
|
||||
O << "SCC (" << utostr(I->size()) << " node" << (I->size() == 1 ? "" : "s")
|
||||
<< ") {\n";
|
||||
for (const ValueInfo V : *I) {
|
||||
FunctionSummary *F = nullptr;
|
||||
if (V.getSummaryList().size())
|
||||
F = cast<FunctionSummary>(V.getSummaryList().front().get());
|
||||
O << " " << (F == nullptr ? "External" : "") << " " << utostr(V.getGUID())
|
||||
<< (I.hasLoop() ? " (has loop)" : "") << "\n";
|
||||
}
|
||||
O << "}\n";
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
struct Attributes {
|
||||
void add(const Twine &Name, const Twine &Value,
|
||||
|
||||
Reference in New Issue
Block a user