[PATCH] D24290: [ThinLTO] Add an option to llvm-lto to print some basic statistics for the index
Mehdi AMINI via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 7 01:35:51 PDT 2016
mehdi_amini created this revision.
mehdi_amini added a reviewer: tejohnson.
mehdi_amini added a subscriber: llvm-commits.
Herald added a subscriber: mehdi_amini.
https://reviews.llvm.org/D24290
Files:
test/ThinLTO/X86/funcimport.ll
tools/llvm-lto/llvm-lto.cpp
Index: tools/llvm-lto/llvm-lto.cpp
===================================================================
--- tools/llvm-lto/llvm-lto.cpp
+++ tools/llvm-lto/llvm-lto.cpp
@@ -42,6 +42,11 @@
"(default = '-O2')"),
cl::Prefix, cl::ZeroOrMore, cl::init('2'));
+static cl::opt<bool>
+ IndexStats("thinlto-index-stats",
+ cl::desc("Print statistic for the index in every input files"),
+ cl::init(false));
+
static cl::opt<bool> DisableVerify(
"disable-verify", cl::init(false),
cl::desc("Do not run the verifier during the optimization pipeline"));
@@ -725,6 +730,38 @@
return 0;
}
+ if (IndexStats) {
+ for (auto &Filename : InputFilenames) {
+ CurrentActivity = "loading file '" + Filename + "'";
+ ErrorOr<std::unique_ptr<ModuleSummaryIndex>> IndexOrErr =
+ llvm::getModuleSummaryIndexForFile(Filename, diagnosticHandler);
+ error(IndexOrErr, "error " + CurrentActivity);
+ std::unique_ptr<ModuleSummaryIndex> Index = std::move(IndexOrErr.get());
+ CurrentActivity = "";
+ // Skip files without a module summary.
+ if (!Index)
+ report_fatal_error(Filename + " does not contain an index");
+
+ unsigned Calls = 0, Refs = 0, Functions = 0, Alias = 0, Globals = 0;
+ for (auto &Summaries : *Index) {
+ for (auto &Summary : Summaries.second) {
+ Refs += Summary->refs().size();
+ if (auto *FuncSummary = dyn_cast<FunctionSummary>(Summary.get())) {
+ Functions++;
+ Calls += FuncSummary->calls().size();
+ } else if (isa<AliasSummary>(Summary.get()))
+ Alias++;
+ else
+ Globals++;
+ }
+ }
+ outs() << "Index " << Filename << " contains "
+ << (Alias + Globals + Functions) << " nodes (" << Functions << " functions, " << Alias << " alias, " << Globals << " globals) and " << (Calls + Refs)
+ << " edges (" << Refs << " refs and " << Calls << " calls)\n";
+ }
+ return 0;
+ }
+
if (CheckHasObjC) {
for (auto &Filename : InputFilenames) {
ErrorOr<std::unique_ptr<MemoryBuffer>> BufferOrErr =
Index: test/ThinLTO/X86/funcimport.ll
===================================================================
--- test/ThinLTO/X86/funcimport.ll
+++ test/ThinLTO/X86/funcimport.ll
@@ -3,6 +3,9 @@
; RUN: opt -module-summary %p/Inputs/funcimport.ll -o %t2.bc
; RUN: llvm-lto -thinlto-action=thinlink -o %t3.bc %t.bc %t2.bc
+; RUN: llvm-lto -thinlto-index-stats %t3.bc | FileCheck %s -check-prefix=STATS
+; STATS: Index {{.*}} contains 24 nodes (13 functions, 3 alias, 8 globals) and 19 edges (8 refs and 11 calls)
+
; Ensure statics are promoted/renamed correctly from this file (all but
; constant variable need promotion).
; RUN: llvm-lto -thinlto-action=promote %t.bc -thinlto-index=%t3.bc -o - | llvm-dis -o - | FileCheck %s --check-prefix=EXPORTSTATIC
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D24290.70509.patch
Type: text/x-patch
Size: 2937 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160907/782eb145/attachment.bin>
More information about the llvm-commits
mailing list