mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-24 04:09:47 +00:00
[Remarks] Extend -fsave-optimization-record to specify the format
Use -fsave-optimization-record=<format> to specify a different format than the default, which is YAML. For now, only YAML is supported. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363573 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3ea8c2ac6a
commit
1cb383ef62
@ -85,10 +85,20 @@ struct RemarkSetupPatternError : RemarkSetupErrorInfo<RemarkSetupPatternError> {
|
|||||||
using RemarkSetupErrorInfo<RemarkSetupPatternError>::RemarkSetupErrorInfo;
|
using RemarkSetupErrorInfo<RemarkSetupPatternError>::RemarkSetupErrorInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct RemarkSetupFormatError : RemarkSetupErrorInfo<RemarkSetupFormatError> {
|
||||||
|
static char ID;
|
||||||
|
using RemarkSetupErrorInfo<RemarkSetupFormatError>::RemarkSetupErrorInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class RemarksSerializerFormat { Unknown, YAML };
|
||||||
|
|
||||||
|
Expected<RemarksSerializerFormat> parseSerializerFormat(StringRef Format);
|
||||||
|
|
||||||
/// Setup optimization remarks.
|
/// Setup optimization remarks.
|
||||||
Expected<std::unique_ptr<ToolOutputFile>>
|
Expected<std::unique_ptr<ToolOutputFile>>
|
||||||
setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
|
setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
|
||||||
StringRef RemarksPasses, bool RemarksWithHotness,
|
StringRef RemarksPasses, StringRef RemarksFormat,
|
||||||
|
bool RemarksWithHotness,
|
||||||
unsigned RemarksHotnessThreshold = 0);
|
unsigned RemarksHotnessThreshold = 0);
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
@ -108,6 +108,9 @@ struct Config {
|
|||||||
/// Whether to emit optimization remarks with hotness informations.
|
/// Whether to emit optimization remarks with hotness informations.
|
||||||
bool RemarksWithHotness = false;
|
bool RemarksWithHotness = false;
|
||||||
|
|
||||||
|
/// The format used for serializing remarks (default: YAML).
|
||||||
|
std::string RemarksFormat = "";
|
||||||
|
|
||||||
/// Whether to emit the pass manager debuggging informations.
|
/// Whether to emit the pass manager debuggging informations.
|
||||||
bool DebugPassManager = false;
|
bool DebugPassManager = false;
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "llvm/ADT/StringSet.h"
|
#include "llvm/ADT/StringSet.h"
|
||||||
#include "llvm/IR/DiagnosticInfo.h"
|
#include "llvm/IR/DiagnosticInfo.h"
|
||||||
#include "llvm/IR/ModuleSummaryIndex.h"
|
#include "llvm/IR/ModuleSummaryIndex.h"
|
||||||
|
#include "llvm/IR/RemarkStreamer.h"
|
||||||
#include "llvm/LTO/Config.h"
|
#include "llvm/LTO/Config.h"
|
||||||
#include "llvm/Linker/IRMover.h"
|
#include "llvm/Linker/IRMover.h"
|
||||||
#include "llvm/Object/IRSymtab.h"
|
#include "llvm/Object/IRSymtab.h"
|
||||||
@ -85,8 +86,8 @@ std::string getThinLTOOutputFile(const std::string &Path,
|
|||||||
/// Setup optimization remarks.
|
/// Setup optimization remarks.
|
||||||
Expected<std::unique_ptr<ToolOutputFile>>
|
Expected<std::unique_ptr<ToolOutputFile>>
|
||||||
setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
|
setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
|
||||||
StringRef RemarksPasses, bool RemarksWithHotness,
|
StringRef RemarksPasses, StringRef RemarksFormat,
|
||||||
int Count = -1);
|
bool RemarksWithHotness, int Count = -1);
|
||||||
|
|
||||||
/// Setups the output file for saving statistics.
|
/// Setups the output file for saving statistics.
|
||||||
Expected<std::unique_ptr<ToolOutputFile>>
|
Expected<std::unique_ptr<ToolOutputFile>>
|
||||||
|
@ -109,10 +109,37 @@ void RemarkStreamer::emit(const DiagnosticInfoOptimizationBase &Diag) {
|
|||||||
|
|
||||||
char RemarkSetupFileError::ID = 0;
|
char RemarkSetupFileError::ID = 0;
|
||||||
char RemarkSetupPatternError::ID = 0;
|
char RemarkSetupPatternError::ID = 0;
|
||||||
|
char RemarkSetupFormatError::ID = 0;
|
||||||
|
|
||||||
|
static std::unique_ptr<remarks::Serializer>
|
||||||
|
formatToSerializer(RemarksSerializerFormat RemarksFormat, raw_ostream &OS) {
|
||||||
|
switch (RemarksFormat) {
|
||||||
|
default:
|
||||||
|
llvm_unreachable("Unknown remark serializer format.");
|
||||||
|
return nullptr;
|
||||||
|
case RemarksSerializerFormat::YAML:
|
||||||
|
return llvm::make_unique<remarks::YAMLSerializer>(OS);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Expected<RemarksSerializerFormat>
|
||||||
|
llvm::parseSerializerFormat(StringRef StrFormat) {
|
||||||
|
auto Format = StringSwitch<RemarksSerializerFormat>(StrFormat)
|
||||||
|
.Cases("", "yaml", RemarksSerializerFormat::YAML)
|
||||||
|
.Default(RemarksSerializerFormat::Unknown);
|
||||||
|
|
||||||
|
if (Format == RemarksSerializerFormat::Unknown)
|
||||||
|
return createStringError(std::make_error_code(std::errc::invalid_argument),
|
||||||
|
"Unknown remark serializer format: '%s'",
|
||||||
|
StrFormat.data());
|
||||||
|
|
||||||
|
return Format;
|
||||||
|
}
|
||||||
|
|
||||||
Expected<std::unique_ptr<ToolOutputFile>>
|
Expected<std::unique_ptr<ToolOutputFile>>
|
||||||
llvm::setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
|
llvm::setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
|
||||||
StringRef RemarksPasses, bool RemarksWithHotness,
|
StringRef RemarksPasses, StringRef RemarksFormat,
|
||||||
|
bool RemarksWithHotness,
|
||||||
unsigned RemarksHotnessThreshold) {
|
unsigned RemarksHotnessThreshold) {
|
||||||
if (RemarksWithHotness)
|
if (RemarksWithHotness)
|
||||||
Context.setDiagnosticsHotnessRequested(true);
|
Context.setDiagnosticsHotnessRequested(true);
|
||||||
@ -131,9 +158,13 @@ llvm::setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
|
|||||||
if (EC)
|
if (EC)
|
||||||
return make_error<RemarkSetupFileError>(errorCodeToError(EC));
|
return make_error<RemarkSetupFileError>(errorCodeToError(EC));
|
||||||
|
|
||||||
|
Expected<RemarksSerializerFormat> Format =
|
||||||
|
parseSerializerFormat(RemarksFormat);
|
||||||
|
if (Error E = Format.takeError())
|
||||||
|
return make_error<RemarkSetupFormatError>(std::move(E));
|
||||||
|
|
||||||
Context.setRemarkStreamer(llvm::make_unique<RemarkStreamer>(
|
Context.setRemarkStreamer(llvm::make_unique<RemarkStreamer>(
|
||||||
RemarksFilename,
|
RemarksFilename, formatToSerializer(*Format, RemarksFile->os())));
|
||||||
llvm::make_unique<remarks::YAMLSerializer>(RemarksFile->os())));
|
|
||||||
|
|
||||||
if (!RemarksPasses.empty())
|
if (!RemarksPasses.empty())
|
||||||
if (Error E = Context.getRemarkStreamer()->setFilter(RemarksPasses))
|
if (Error E = Context.getRemarkStreamer()->setFilter(RemarksPasses))
|
||||||
|
@ -1339,14 +1339,14 @@ Error LTO::runThinLTO(AddStreamFn AddStream, NativeObjectCache Cache,
|
|||||||
|
|
||||||
Expected<std::unique_ptr<ToolOutputFile>>
|
Expected<std::unique_ptr<ToolOutputFile>>
|
||||||
lto::setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
|
lto::setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
|
||||||
StringRef RemarksPasses, bool RemarksWithHotness,
|
StringRef RemarksPasses, StringRef RemarksFormat,
|
||||||
int Count) {
|
bool RemarksWithHotness, int Count) {
|
||||||
std::string Filename = RemarksFilename;
|
std::string Filename = RemarksFilename;
|
||||||
if (!Filename.empty() && Count != -1)
|
if (!Filename.empty() && Count != -1)
|
||||||
Filename += ".thin." + llvm::utostr(Count) + ".yaml";
|
Filename += ".thin." + llvm::utostr(Count) + ".yaml";
|
||||||
|
|
||||||
auto ResultOrErr = llvm::setupOptimizationRemarks(
|
auto ResultOrErr = llvm::setupOptimizationRemarks(
|
||||||
Context, Filename, RemarksPasses, RemarksWithHotness);
|
Context, Filename, RemarksPasses, RemarksFormat, RemarksWithHotness);
|
||||||
if (Error E = ResultOrErr.takeError())
|
if (Error E = ResultOrErr.takeError())
|
||||||
return std::move(E);
|
return std::move(E);
|
||||||
|
|
||||||
|
@ -431,9 +431,9 @@ Error lto::backend(Config &C, AddStreamFn AddStream,
|
|||||||
std::unique_ptr<TargetMachine> TM = createTargetMachine(C, *TOrErr, *Mod);
|
std::unique_ptr<TargetMachine> TM = createTargetMachine(C, *TOrErr, *Mod);
|
||||||
|
|
||||||
// Setup optimization remarks.
|
// Setup optimization remarks.
|
||||||
auto DiagFileOrErr =
|
auto DiagFileOrErr = lto::setupOptimizationRemarks(
|
||||||
lto::setupOptimizationRemarks(Mod->getContext(), C.RemarksFilename,
|
Mod->getContext(), C.RemarksFilename, C.RemarksPasses, C.RemarksFormat,
|
||||||
C.RemarksPasses, C.RemarksWithHotness);
|
C.RemarksWithHotness);
|
||||||
if (!DiagFileOrErr)
|
if (!DiagFileOrErr)
|
||||||
return DiagFileOrErr.takeError();
|
return DiagFileOrErr.takeError();
|
||||||
auto DiagnosticOutputFile = std::move(*DiagFileOrErr);
|
auto DiagnosticOutputFile = std::move(*DiagFileOrErr);
|
||||||
@ -488,7 +488,7 @@ Error lto::thinBackend(Config &Conf, unsigned Task, AddStreamFn AddStream,
|
|||||||
// Setup optimization remarks.
|
// Setup optimization remarks.
|
||||||
auto DiagFileOrErr = lto::setupOptimizationRemarks(
|
auto DiagFileOrErr = lto::setupOptimizationRemarks(
|
||||||
Mod.getContext(), Conf.RemarksFilename, Conf.RemarksPasses,
|
Mod.getContext(), Conf.RemarksFilename, Conf.RemarksPasses,
|
||||||
Conf.RemarksWithHotness, Task);
|
Conf.RemarksFormat, Conf.RemarksWithHotness, Task);
|
||||||
if (!DiagFileOrErr)
|
if (!DiagFileOrErr)
|
||||||
return DiagFileOrErr.takeError();
|
return DiagFileOrErr.takeError();
|
||||||
auto DiagnosticOutputFile = std::move(*DiagFileOrErr);
|
auto DiagnosticOutputFile = std::move(*DiagFileOrErr);
|
||||||
|
@ -97,6 +97,11 @@ cl::opt<std::string>
|
|||||||
"names match the given regular expression"),
|
"names match the given regular expression"),
|
||||||
cl::value_desc("regex"));
|
cl::value_desc("regex"));
|
||||||
|
|
||||||
|
cl::opt<std::string> RemarksFormat(
|
||||||
|
"lto-pass-remarks-format",
|
||||||
|
cl::desc("The format used for serializing remarks (default: YAML)"),
|
||||||
|
cl::value_desc("format"), cl::init("yaml"));
|
||||||
|
|
||||||
cl::opt<std::string> LTOStatsFile(
|
cl::opt<std::string> LTOStatsFile(
|
||||||
"lto-stats-file",
|
"lto-stats-file",
|
||||||
cl::desc("Save statistics to the specified file"),
|
cl::desc("Save statistics to the specified file"),
|
||||||
@ -517,8 +522,9 @@ bool LTOCodeGenerator::optimize(bool DisableVerify, bool DisableInline,
|
|||||||
if (!this->determineTarget())
|
if (!this->determineTarget())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
auto DiagFileOrErr = lto::setupOptimizationRemarks(
|
auto DiagFileOrErr =
|
||||||
Context, RemarksFilename, RemarksPasses, RemarksWithHotness);
|
lto::setupOptimizationRemarks(Context, RemarksFilename, RemarksPasses,
|
||||||
|
RemarksFormat, RemarksWithHotness);
|
||||||
if (!DiagFileOrErr) {
|
if (!DiagFileOrErr) {
|
||||||
errs() << "Error: " << toString(DiagFileOrErr.takeError()) << "\n";
|
errs() << "Error: " << toString(DiagFileOrErr.takeError()) << "\n";
|
||||||
report_fatal_error("Can't get an output file for the remarks");
|
report_fatal_error("Can't get an output file for the remarks");
|
||||||
|
@ -73,6 +73,7 @@ extern cl::opt<bool> LTODiscardValueNames;
|
|||||||
extern cl::opt<std::string> RemarksFilename;
|
extern cl::opt<std::string> RemarksFilename;
|
||||||
extern cl::opt<std::string> RemarksPasses;
|
extern cl::opt<std::string> RemarksPasses;
|
||||||
extern cl::opt<bool> RemarksWithHotness;
|
extern cl::opt<bool> RemarksWithHotness;
|
||||||
|
extern cl::opt<std::string> RemarksFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -1020,7 +1021,7 @@ void ThinLTOCodeGenerator::run() {
|
|||||||
Context.setDiscardValueNames(LTODiscardValueNames);
|
Context.setDiscardValueNames(LTODiscardValueNames);
|
||||||
Context.enableDebugTypeODRUniquing();
|
Context.enableDebugTypeODRUniquing();
|
||||||
auto DiagFileOrErr = lto::setupOptimizationRemarks(
|
auto DiagFileOrErr = lto::setupOptimizationRemarks(
|
||||||
Context, RemarksFilename, RemarksPasses,
|
Context, RemarksFilename, RemarksPasses, RemarksFormat,
|
||||||
RemarksWithHotness, count);
|
RemarksWithHotness, count);
|
||||||
if (!DiagFileOrErr) {
|
if (!DiagFileOrErr) {
|
||||||
errs() << "Error: " << toString(DiagFileOrErr.takeError()) << "\n";
|
errs() << "Error: " << toString(DiagFileOrErr.takeError()) << "\n";
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
; RUN: llvm-lto -thinlto-action=run \
|
; RUN: llvm-lto -thinlto-action=run \
|
||||||
; RUN: -lto-pass-remarks-output=%t.yaml \
|
; RUN: -lto-pass-remarks-output=%t.yaml \
|
||||||
; RUN: -lto-pass-remarks-filter=inline \
|
; RUN: -lto-pass-remarks-filter=inline \
|
||||||
|
; RUN: -lto-pass-remarks-format=yaml \
|
||||||
; RUN: -exported-symbol _func2 \
|
; RUN: -exported-symbol _func2 \
|
||||||
; RUN: -exported-symbol _main %t1.bc %t2.bc 2>&1 | \
|
; RUN: -exported-symbol _main %t1.bc %t2.bc 2>&1 | \
|
||||||
; RUN: FileCheck %s -allow-empty
|
; RUN: FileCheck %s -allow-empty
|
||||||
|
@ -3,10 +3,12 @@
|
|||||||
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext -shared \
|
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext -shared \
|
||||||
; RUN: -plugin-opt=save-temps \
|
; RUN: -plugin-opt=save-temps \
|
||||||
; RUN: -plugin-opt=opt-remarks-passes=inline \
|
; RUN: -plugin-opt=opt-remarks-passes=inline \
|
||||||
|
; RUN: -plugin-opt=opt-remarks-format=yaml \
|
||||||
; RUN: -plugin-opt=opt-remarks-filename=%t.yaml %t.o -o %t2.o 2>&1
|
; RUN: -plugin-opt=opt-remarks-filename=%t.yaml %t.o -o %t2.o 2>&1
|
||||||
; RUN: llvm-dis %t2.o.0.4.opt.bc -o - | FileCheck %s
|
; RUN: llvm-dis %t2.o.0.4.opt.bc -o - | FileCheck %s
|
||||||
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext -shared \
|
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext -shared \
|
||||||
; RUN: -plugin-opt=opt-remarks-passes=inline \
|
; RUN: -plugin-opt=opt-remarks-passes=inline \
|
||||||
|
; RUN: -plugin-opt=opt-remarks-format=yaml \
|
||||||
; RUN: -plugin-opt=opt-remarks-with-hotness \
|
; RUN: -plugin-opt=opt-remarks-with-hotness \
|
||||||
; RUN: -plugin-opt=opt-remarks-filename=%t.hot.yaml %t.o -o %t2.o 2>&1
|
; RUN: -plugin-opt=opt-remarks-filename=%t.hot.yaml %t.o -o %t2.o 2>&1
|
||||||
; RUN: cat %t.yaml | FileCheck %s -check-prefix=YAML
|
; RUN: cat %t.yaml | FileCheck %s -check-prefix=YAML
|
||||||
|
@ -209,6 +209,7 @@ namespace options {
|
|||||||
static std::string RemarksFilename;
|
static std::string RemarksFilename;
|
||||||
static std::string RemarksPasses;
|
static std::string RemarksPasses;
|
||||||
static bool RemarksWithHotness = false;
|
static bool RemarksWithHotness = false;
|
||||||
|
static std::string RemarksFormat;
|
||||||
|
|
||||||
// Context sensitive PGO options.
|
// Context sensitive PGO options.
|
||||||
static std::string cs_profile_path;
|
static std::string cs_profile_path;
|
||||||
@ -290,6 +291,8 @@ namespace options {
|
|||||||
RemarksPasses = opt.substr(strlen("opt-remarks-passes="));
|
RemarksPasses = opt.substr(strlen("opt-remarks-passes="));
|
||||||
} else if (opt == "opt-remarks-with-hotness") {
|
} else if (opt == "opt-remarks-with-hotness") {
|
||||||
RemarksWithHotness = true;
|
RemarksWithHotness = true;
|
||||||
|
} else if (opt.startswith("opt-remarks-format=")) {
|
||||||
|
RemarksFormat = opt.substr(strlen("opt-remarks-format="));
|
||||||
} else if (opt.startswith("stats-file=")) {
|
} else if (opt.startswith("stats-file=")) {
|
||||||
stats_file = opt.substr(strlen("stats-file="));
|
stats_file = opt.substr(strlen("stats-file="));
|
||||||
} else {
|
} else {
|
||||||
@ -913,6 +916,7 @@ static std::unique_ptr<LTO> createLTO(IndexWriteCallback OnIndexWrite,
|
|||||||
Conf.RemarksFilename = options::RemarksFilename;
|
Conf.RemarksFilename = options::RemarksFilename;
|
||||||
Conf.RemarksPasses = options::RemarksPasses;
|
Conf.RemarksPasses = options::RemarksPasses;
|
||||||
Conf.RemarksWithHotness = options::RemarksWithHotness;
|
Conf.RemarksWithHotness = options::RemarksWithHotness;
|
||||||
|
Conf.RemarksFormat = options::RemarksFormat;
|
||||||
|
|
||||||
// Use new pass manager if set in driver
|
// Use new pass manager if set in driver
|
||||||
Conf.UseNewPM = options::new_pass_manager;
|
Conf.UseNewPM = options::new_pass_manager;
|
||||||
|
@ -155,6 +155,11 @@ static cl::opt<std::string>
|
|||||||
"names match the given regular expression"),
|
"names match the given regular expression"),
|
||||||
cl::value_desc("regex"));
|
cl::value_desc("regex"));
|
||||||
|
|
||||||
|
static cl::opt<std::string> RemarksFormat(
|
||||||
|
"pass-remarks-format",
|
||||||
|
cl::desc("The format used for serializing remarks (default: YAML)"),
|
||||||
|
cl::value_desc("format"), cl::init("yaml"));
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
static ManagedStatic<std::vector<std::string>> RunPassNames;
|
static ManagedStatic<std::vector<std::string>> RunPassNames;
|
||||||
|
|
||||||
@ -329,7 +334,8 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
Expected<std::unique_ptr<ToolOutputFile>> RemarksFileOrErr =
|
Expected<std::unique_ptr<ToolOutputFile>> RemarksFileOrErr =
|
||||||
setupOptimizationRemarks(Context, RemarksFilename, RemarksPasses,
|
setupOptimizationRemarks(Context, RemarksFilename, RemarksPasses,
|
||||||
RemarksWithHotness, RemarksHotnessThreshold);
|
RemarksFormat, RemarksWithHotness,
|
||||||
|
RemarksHotnessThreshold);
|
||||||
if (Error E = RemarksFileOrErr.takeError()) {
|
if (Error E = RemarksFileOrErr.takeError()) {
|
||||||
WithColor::error(errs(), argv[0]) << toString(std::move(E)) << '\n';
|
WithColor::error(errs(), argv[0]) << toString(std::move(E)) << '\n';
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -107,6 +107,11 @@ static cl::opt<std::string>
|
|||||||
"names match the given regular expression"),
|
"names match the given regular expression"),
|
||||||
cl::value_desc("regex"));
|
cl::value_desc("regex"));
|
||||||
|
|
||||||
|
static cl::opt<std::string> RemarksFormat(
|
||||||
|
"pass-remarks-format",
|
||||||
|
cl::desc("The format used for serializing remarks (default: YAML)"),
|
||||||
|
cl::value_desc("format"), cl::init("yaml"));
|
||||||
|
|
||||||
static cl::opt<std::string>
|
static cl::opt<std::string>
|
||||||
SamplePGOFile("lto-sample-profile-file",
|
SamplePGOFile("lto-sample-profile-file",
|
||||||
cl::desc("Specify a SamplePGO profile file"));
|
cl::desc("Specify a SamplePGO profile file"));
|
||||||
@ -229,6 +234,7 @@ static int run(int argc, char **argv) {
|
|||||||
Conf.RemarksFilename = RemarksFilename;
|
Conf.RemarksFilename = RemarksFilename;
|
||||||
Conf.RemarksPasses = RemarksPasses;
|
Conf.RemarksPasses = RemarksPasses;
|
||||||
Conf.RemarksWithHotness = RemarksWithHotness;
|
Conf.RemarksWithHotness = RemarksWithHotness;
|
||||||
|
Conf.RemarksFormat = RemarksFormat;
|
||||||
|
|
||||||
Conf.SampleProfile = SamplePGOFile;
|
Conf.SampleProfile = SamplePGOFile;
|
||||||
Conf.CSIRProfile = CSPGOFile;
|
Conf.CSIRProfile = CSPGOFile;
|
||||||
|
@ -273,6 +273,11 @@ static cl::opt<std::string>
|
|||||||
"names match the given regular expression"),
|
"names match the given regular expression"),
|
||||||
cl::value_desc("regex"));
|
cl::value_desc("regex"));
|
||||||
|
|
||||||
|
static cl::opt<std::string> RemarksFormat(
|
||||||
|
"pass-remarks-format",
|
||||||
|
cl::desc("The format used for serializing remarks (default: YAML)"),
|
||||||
|
cl::value_desc("format"), cl::init("yaml"));
|
||||||
|
|
||||||
cl::opt<PGOKind>
|
cl::opt<PGOKind>
|
||||||
PGOKindFlag("pgo-kind", cl::init(NoPGO), cl::Hidden,
|
PGOKindFlag("pgo-kind", cl::init(NoPGO), cl::Hidden,
|
||||||
cl::desc("The kind of profile guided optimization"),
|
cl::desc("The kind of profile guided optimization"),
|
||||||
@ -552,7 +557,8 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
Expected<std::unique_ptr<ToolOutputFile>> RemarksFileOrErr =
|
Expected<std::unique_ptr<ToolOutputFile>> RemarksFileOrErr =
|
||||||
setupOptimizationRemarks(Context, RemarksFilename, RemarksPasses,
|
setupOptimizationRemarks(Context, RemarksFilename, RemarksPasses,
|
||||||
RemarksWithHotness, RemarksHotnessThreshold);
|
RemarksFormat, RemarksWithHotness,
|
||||||
|
RemarksHotnessThreshold);
|
||||||
if (Error E = RemarksFileOrErr.takeError()) {
|
if (Error E = RemarksFileOrErr.takeError()) {
|
||||||
errs() << toString(std::move(E)) << '\n';
|
errs() << toString(std::move(E)) << '\n';
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user