This patch adds a StatsFile option supported by gold to lld, related patch https://reviews.llvm.org/D45531.
Reviewed By: tejohnson, MaskRay
Differential Revision: https://reviews.llvm.org/D121809
llvm::Optional<uint64_t> optRemarksHotnessThreshold = 0;
llvm::StringRef optRemarksPasses;
llvm::StringRef optRemarksFormat;
+ llvm::StringRef optStatsFilename;
llvm::StringRef progName;
llvm::StringRef printArchiveStats;
llvm::StringRef printSymbolOrder;
config->oFormatBinary = isOutputFormatBinary(args);
config->omagic = args.hasFlag(OPT_omagic, OPT_no_omagic, false);
config->optRemarksFilename = args.getLastArgValue(OPT_opt_remarks_filename);
+ config->optStatsFilename = args.getLastArgValue(OPT_opt_stats_filename);
// Parse remarks hotness threshold. Valid value is either integer or 'auto'.
if (auto *arg = args.getLastArg(OPT_opt_remarks_hotness_threshold)) {
c.RemarksHotnessThreshold = config->optRemarksHotnessThreshold;
c.RemarksFormat = std::string(config->optRemarksFormat);
+ // Set up output file to emit statistics.
+ c.StatsFile = std::string(config->optStatsFilename);
+
c.SampleProfile = std::string(config->ltoSampleProfile);
c.UseNewPM = config->ltoNewPassManager;
c.DebugPassManager = config->ltoDebugPassManager;
HelpText<"Include hotness information in the optimization remarks file">;
def opt_remarks_format: Separate<["--"], "opt-remarks-format">,
HelpText<"The format used for serializing remarks (default: YAML)">;
+def opt_stats_filename: JJ<"stats-file=">,
+ HelpText<"Filename to write statistics to">;
def save_temps: F<"save-temps">, HelpText<"Save intermediate LTO compilation results">;
def lto_basic_block_sections: JJ<"lto-basic-block-sections=">,
HelpText<"Enable basic block sections for LTO">;
--- /dev/null
+; RUN: llvm-as -o %t.bc %s
+
+;; Try to save statistics to file.
+; RUN: ld.lld --stats-file=%t2.stats -m elf_x86_64 -r -o %t.o %t.bc
+; RUN: FileCheck --input-file=%t2.stats %s
+
+; CHECK: {
+; CHECK: "asm-printer.EmittedInsts":
+; CHECK: "inline.NumInlined":
+; CHECK: "prologepilog.NumFuncSeen":
+; CHECK: }
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+declare i32 @patatino()
+
+define i32 @tinkywinky() {
+ %a = call i32 @patatino()
+ ret i32 %a
+}
+
+define i32 @main() !prof !0 {
+ %i = call i32 @tinkywinky()
+ ret i32 %i
+}
+
+!0 = !{!"function_entry_count", i64 300}