[clang] [clang][nvlink-wrapper] Add support for opt-remarks command line options (PR #145200)
Miguel Cárdenas via cfe-commits
cfe-commits at lists.llvm.org
Sun Jun 22 08:27:16 PDT 2025
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?= <miguelecsx at gmail.com>
Date: Sun, 22 Jun 2025 03:32:24 +0200
Subject: [PATCH 1/2] [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?= <miguelecsx at gmail.com>
Date: Sun, 22 Jun 2025 17:25:08 +0200
Subject: [PATCH 2/2] [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.">;
More information about the cfe-commits
mailing list