Skip to content

Commit be78d6d

Browse files
committed
[clang][nvlink-wrapper] Add support for opt-remarks command line options
This patch adds support for optimization record command line options to clang-nvlink-wrapper, fixing an issue where using -fsave-optimization-record with CUDA offloading would fail with "Unknown command line argument 'opt-remarks-format=yaml'".
1 parent 40eee8e commit be78d6d

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,23 @@ Expected<std::unique_ptr<lto::LTO>> createLTO(const ArgList &Args) {
341341
Conf.CPU = Args.getLastArgValue(OPT_arch);
342342
Conf.Options = codegen::InitTargetOptionsFromCodeGenFlags(Triple);
343343

344-
Conf.RemarksFilename = RemarksFilename;
345-
Conf.RemarksPasses = RemarksPasses;
346-
Conf.RemarksWithHotness = RemarksWithHotness;
344+
if (auto *Arg = Args.getLastArg(OPT_opt_remarks_filename))
345+
Conf.RemarksFilename = Arg->getValue();
346+
else
347+
Conf.RemarksFilename = RemarksFilename;
348+
349+
if (auto *Arg = Args.getLastArg(OPT_opt_remarks_filter))
350+
Conf.RemarksPasses = Arg->getValue();
351+
else
352+
Conf.RemarksPasses = RemarksPasses;
353+
354+
if (auto *Arg = Args.getLastArg(OPT_opt_remarks_format))
355+
Conf.RemarksFormat = Arg->getValue();
356+
else
357+
Conf.RemarksFormat = RemarksFormat;
358+
359+
Conf.RemarksWithHotness = Args.hasArg(OPT_opt_remarks_with_hotness) || RemarksWithHotness;
347360
Conf.RemarksHotnessThreshold = RemarksHotnessThreshold;
348-
Conf.RemarksFormat = RemarksFormat;
349361

350362
Conf.MAttrs = llvm::codegen::getMAttrs();
351363
std::optional<CodeGenOptLevel> CGOptLevelOrNone =

clang/tools/clang-nvlink-wrapper/NVLinkOpts.td

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,25 @@ def : Joined<["--", "-"], "plugin-opt=emit-llvm">,
7272
Flags<[WrapperOnlyOption]>, Alias<lto_emit_llvm>;
7373
def : Joined<["--", "-"], "plugin-opt=emit-asm">,
7474
Flags<[WrapperOnlyOption]>, Alias<lto_emit_asm>;
75+
76+
def opt_remarks_filename : Separate<["--"], "opt-remarks-filename">,
77+
Flags<[WrapperOnlyOption]>, HelpText<"YAML output file for optimization remarks">;
78+
def opt_remarks_format : Separate<["--"], "opt-remarks-format">,
79+
Flags<[WrapperOnlyOption]>, HelpText<"The format used for serializing remarks (default: YAML)">;
80+
def opt_remarks_filter : Separate<["--"], "opt-remarks-filter">,
81+
Flags<[WrapperOnlyOption]>, HelpText<"Regex for the passes that need to be serialized to the output file">;
82+
def opt_remarks_with_hotness : Flag<["--"], "opt-remarks-with-hotness">,
83+
Flags<[WrapperOnlyOption]>, HelpText<"Include hotness information in the optimization remarks file">;
84+
85+
def : Joined<["--", "-"], "plugin-opt=opt-remarks-filename=">,
86+
Flags<[WrapperOnlyOption]>, Alias<opt_remarks_filename>;
87+
def : Joined<["--", "-"], "plugin-opt=opt-remarks-format=">,
88+
Flags<[WrapperOnlyOption]>, Alias<opt_remarks_format>;
89+
def : Joined<["--", "-"], "plugin-opt=opt-remarks-filter=">,
90+
Flags<[WrapperOnlyOption]>, Alias<opt_remarks_filter>;
91+
def : Flag<["--", "-"], "plugin-opt=opt-remarks-with-hotness">,
92+
Flags<[WrapperOnlyOption]>, Alias<opt_remarks_with_hotness>;
93+
7594
def plugin_opt : Joined<["--", "-"], "plugin-opt=">, Flags<[WrapperOnlyOption]>,
7695
HelpText<"Options passed to LLVM, not including the Clang invocation. Use "
7796
"'--plugin-opt=--help' for a list of options.">;

0 commit comments

Comments
 (0)