https://github.com/miguelcsx updated https://github.com/llvm/llvm-project/pull/145200
From 883345d337df982a87c55b11b3374cf661b7b49e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20C=C3=A1rdenas?= <miguele...@gmail.com> Date: Sun, 22 Jun 2025 03:32:24 +0200 Subject: [PATCH 1/3] [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'". --- .../ClangNVLinkWrapper.cpp | 20 +++++++++++++++---- .../tools/clang-nvlink-wrapper/NVLinkOpts.td | 19 ++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp index faf73a7c2f193..4e36a04e0286b 100644 --- a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp +++ b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp @@ -341,11 +341,23 @@ Expected<std::unique_ptr<lto::LTO>> createLTO(const ArgList &Args) { Conf.CPU = Args.getLastArgValue(OPT_arch); Conf.Options = codegen::InitTargetOptionsFromCodeGenFlags(Triple); - Conf.RemarksFilename = RemarksFilename; - Conf.RemarksPasses = RemarksPasses; - Conf.RemarksWithHotness = RemarksWithHotness; + if (auto *Arg = Args.getLastArg(OPT_opt_remarks_filename)) + Conf.RemarksFilename = Arg->getValue(); + else + Conf.RemarksFilename = RemarksFilename; + + if (auto *Arg = Args.getLastArg(OPT_opt_remarks_filter)) + Conf.RemarksPasses = Arg->getValue(); + else + Conf.RemarksPasses = RemarksPasses; + + if (auto *Arg = Args.getLastArg(OPT_opt_remarks_format)) + Conf.RemarksFormat = Arg->getValue(); + else + Conf.RemarksFormat = RemarksFormat; + + Conf.RemarksWithHotness = Args.hasArg(OPT_opt_remarks_with_hotness) || RemarksWithHotness; Conf.RemarksHotnessThreshold = RemarksHotnessThreshold; - Conf.RemarksFormat = RemarksFormat; Conf.MAttrs = llvm::codegen::getMAttrs(); std::optional<CodeGenOptLevel> CGOptLevelOrNone = diff --git a/clang/tools/clang-nvlink-wrapper/NVLinkOpts.td b/clang/tools/clang-nvlink-wrapper/NVLinkOpts.td index 6de1a25c14f8b..a0f7dce5bf6b3 100644 --- a/clang/tools/clang-nvlink-wrapper/NVLinkOpts.td +++ b/clang/tools/clang-nvlink-wrapper/NVLinkOpts.td @@ -72,6 +72,25 @@ def : Joined<["--", "-"], "plugin-opt=emit-llvm">, Flags<[WrapperOnlyOption]>, Alias<lto_emit_llvm>; def : Joined<["--", "-"], "plugin-opt=emit-asm">, Flags<[WrapperOnlyOption]>, Alias<lto_emit_asm>; + +def opt_remarks_filename : Separate<["--"], "opt-remarks-filename">, + Flags<[WrapperOnlyOption]>, HelpText<"YAML output file for optimization remarks">; +def opt_remarks_format : Separate<["--"], "opt-remarks-format">, + Flags<[WrapperOnlyOption]>, HelpText<"The format used for serializing remarks (default: YAML)">; +def opt_remarks_filter : Separate<["--"], "opt-remarks-filter">, + Flags<[WrapperOnlyOption]>, HelpText<"Regex for the passes that need to be serialized to the output file">; +def opt_remarks_with_hotness : Flag<["--"], "opt-remarks-with-hotness">, + Flags<[WrapperOnlyOption]>, HelpText<"Include hotness information in the optimization remarks file">; + +def : Joined<["--", "-"], "plugin-opt=opt-remarks-filename=">, + Flags<[WrapperOnlyOption]>, Alias<opt_remarks_filename>; +def : Joined<["--", "-"], "plugin-opt=opt-remarks-format=">, + Flags<[WrapperOnlyOption]>, Alias<opt_remarks_format>; +def : Joined<["--", "-"], "plugin-opt=opt-remarks-filter=">, + Flags<[WrapperOnlyOption]>, Alias<opt_remarks_filter>; +def : Flag<["--", "-"], "plugin-opt=opt-remarks-with-hotness">, + Flags<[WrapperOnlyOption]>, Alias<opt_remarks_with_hotness>; + def plugin_opt : Joined<["--", "-"], "plugin-opt=">, Flags<[WrapperOnlyOption]>, HelpText<"Options passed to LLVM, not including the Clang invocation. Use " "'--plugin-opt=--help' for a list of options.">; From f7805cf18c0408c7d182aaa8400e9c5cd3ed72d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20C=C3=A1rdenas?= <miguele...@gmail.com> Date: Sun, 22 Jun 2025 17:25:08 +0200 Subject: [PATCH 2/3] [clang][nvlink-wrapper] Modified tablegen option definitions Convert alias definitions to proper option definitions for opt-remarks-* options based on suggestions. --- .../clang-nvlink-wrapper/ClangNVLinkWrapper.cpp | 17 +++-------------- clang/tools/clang-nvlink-wrapper/NVLinkOpts.td | 17 ++++------------- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp index 4e36a04e0286b..cb17c89765c0a 100644 --- a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp +++ b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp @@ -341,20 +341,9 @@ Expected<std::unique_ptr<lto::LTO>> createLTO(const ArgList &Args) { Conf.CPU = Args.getLastArgValue(OPT_arch); Conf.Options = codegen::InitTargetOptionsFromCodeGenFlags(Triple); - if (auto *Arg = Args.getLastArg(OPT_opt_remarks_filename)) - Conf.RemarksFilename = Arg->getValue(); - else - Conf.RemarksFilename = RemarksFilename; - - if (auto *Arg = Args.getLastArg(OPT_opt_remarks_filter)) - Conf.RemarksPasses = Arg->getValue(); - else - Conf.RemarksPasses = RemarksPasses; - - if (auto *Arg = Args.getLastArg(OPT_opt_remarks_format)) - Conf.RemarksFormat = Arg->getValue(); - else - Conf.RemarksFormat = RemarksFormat; + Conf.RemarksFilename = Args.getLastArgValue(OPT_opt_remarks_filename, RemarksFilename); + Conf.RemarksPasses = Args.getLastArgValue(OPT_opt_remarks_filter, RemarksPasses); + Conf.RemarksFormat = Args.getLastArgValue(OPT_opt_remarks_format, RemarksFormat); Conf.RemarksWithHotness = Args.hasArg(OPT_opt_remarks_with_hotness) || RemarksWithHotness; Conf.RemarksHotnessThreshold = RemarksHotnessThreshold; diff --git a/clang/tools/clang-nvlink-wrapper/NVLinkOpts.td b/clang/tools/clang-nvlink-wrapper/NVLinkOpts.td index a0f7dce5bf6b3..7af35bf5989ec 100644 --- a/clang/tools/clang-nvlink-wrapper/NVLinkOpts.td +++ b/clang/tools/clang-nvlink-wrapper/NVLinkOpts.td @@ -73,24 +73,15 @@ def : Joined<["--", "-"], "plugin-opt=emit-llvm">, def : Joined<["--", "-"], "plugin-opt=emit-asm">, Flags<[WrapperOnlyOption]>, Alias<lto_emit_asm>; -def opt_remarks_filename : Separate<["--"], "opt-remarks-filename">, +def opt_remarks_filename : Joined<["--", "-"], "plugin-opt=opt-remarks-filename=">, Flags<[WrapperOnlyOption]>, HelpText<"YAML output file for optimization remarks">; -def opt_remarks_format : Separate<["--"], "opt-remarks-format">, +def opt_remarks_format : Joined<["--", "-"], "plugin-opt=opt-remarks-format=">, Flags<[WrapperOnlyOption]>, HelpText<"The format used for serializing remarks (default: YAML)">; -def opt_remarks_filter : Separate<["--"], "opt-remarks-filter">, +def opt_remarks_filter : Joined<["--", "-"], "plugin-opt=opt-remarks-filter=">, Flags<[WrapperOnlyOption]>, HelpText<"Regex for the passes that need to be serialized to the output file">; -def opt_remarks_with_hotness : Flag<["--"], "opt-remarks-with-hotness">, +def opt_remarks_with_hotness : Flag<["--", "-"], "plugin-opt=opt-remarks-with-hotness">, Flags<[WrapperOnlyOption]>, HelpText<"Include hotness information in the optimization remarks file">; -def : Joined<["--", "-"], "plugin-opt=opt-remarks-filename=">, - Flags<[WrapperOnlyOption]>, Alias<opt_remarks_filename>; -def : Joined<["--", "-"], "plugin-opt=opt-remarks-format=">, - Flags<[WrapperOnlyOption]>, Alias<opt_remarks_format>; -def : Joined<["--", "-"], "plugin-opt=opt-remarks-filter=">, - Flags<[WrapperOnlyOption]>, Alias<opt_remarks_filter>; -def : Flag<["--", "-"], "plugin-opt=opt-remarks-with-hotness">, - Flags<[WrapperOnlyOption]>, Alias<opt_remarks_with_hotness>; - def plugin_opt : Joined<["--", "-"], "plugin-opt=">, Flags<[WrapperOnlyOption]>, HelpText<"Options passed to LLVM, not including the Clang invocation. Use " "'--plugin-opt=--help' for a list of options.">; From cf98141ce424600c91849797621d1e617bcfe520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20C=C3=A1rdenas?= <miguele...@gmail.com> Date: Sun, 22 Jun 2025 17:25:08 +0200 Subject: [PATCH 3/3] [clang][nvlink-wrapper] Modified tablegen option definitions Convert alias definitions to proper option definitions for opt-remarks-* options based on suggestions. --- .../tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp index cb17c89765c0a..fe5846ba31c80 100644 --- a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp +++ b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp @@ -341,10 +341,13 @@ Expected<std::unique_ptr<lto::LTO>> createLTO(const ArgList &Args) { Conf.CPU = Args.getLastArgValue(OPT_arch); Conf.Options = codegen::InitTargetOptionsFromCodeGenFlags(Triple); - Conf.RemarksFilename = Args.getLastArgValue(OPT_opt_remarks_filename, RemarksFilename); - Conf.RemarksPasses = Args.getLastArgValue(OPT_opt_remarks_filter, RemarksPasses); - Conf.RemarksFormat = Args.getLastArgValue(OPT_opt_remarks_format, RemarksFormat); - + Conf.RemarksFilename = + Args.getLastArgValue(OPT_opt_remarks_filename, RemarksFilename); + Conf.RemarksPasses = + Args.getLastArgValue(OPT_opt_remarks_filter, RemarksPasses); + Conf.RemarksFormat = + Args.getLastArgValue(OPT_opt_remarks_format, RemarksFormat); + Conf.RemarksWithHotness = Args.hasArg(OPT_opt_remarks_with_hotness) || RemarksWithHotness; Conf.RemarksHotnessThreshold = RemarksHotnessThreshold; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits