mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Remarks] Add a specialized RemarkStreamer for SIL remarks
This allows the usage of the whole remark infrastructure developed in LLVM, which includes a new binary format, metadata in object files, etc. This gets rid of the YAMLTraits-based remark serialization and does the plumbing for hooking to LLVM's main remark streamer. For more about the idea behind LLVM's main remark streamer, see the docs/Remarks.rst changes in https://reviews.llvm.org/D73676. The flags are now: * -save-optimization-record: enable remarks, defaults to YAML * -save-optimization-record=<format>: enable remarks, use <format> for serialization * -save-optimization-record-passes <regex>: only serialize passes that match <regex>. The YAMLTraits in swift had a different `flow` setting for the debug location, resulting in some test changes.
This commit is contained in:
@@ -999,6 +999,20 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,
|
||||
Opts.EnableDynamicReplacementCanCallPreviousImplementation = !Args.hasArg(
|
||||
OPT_disable_previous_implementation_calls_in_dynamic_replacements);
|
||||
|
||||
if (const Arg *A = Args.getLastArg(OPT_save_optimization_record_EQ)) {
|
||||
llvm::Expected<llvm::remarks::Format> formatOrErr =
|
||||
llvm::remarks::parseFormat(A->getValue());
|
||||
if (llvm::Error err = formatOrErr.takeError()) {
|
||||
Diags.diagnose(SourceLoc(), diag::error_creating_remark_serializer,
|
||||
toString(std::move(err)));
|
||||
return true;
|
||||
}
|
||||
Opts.OptRecordFormat = *formatOrErr;
|
||||
}
|
||||
|
||||
if (const Arg *A = Args.getLastArg(OPT_save_optimization_record_passes))
|
||||
Opts.OptRecordPasses = A->getValue();
|
||||
|
||||
if (const Arg *A = Args.getLastArg(OPT_save_optimization_record_path))
|
||||
Opts.OptRecordFile = A->getValue();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user