https://github.com/alexrp updated https://github.com/llvm/llvm-project/pull/100714
From 63d2e2bb4836ca46b4d48958c253263ec624a638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= <a...@alexrp.com> Date: Fri, 26 Jul 2024 09:40:42 +0200 Subject: [PATCH] [clang][Driver] Support passing arbitrary args to -cc1as with -Xclangas. Closes #97517. --- clang/docs/UsersManual.rst | 1 + clang/include/clang/Driver/Options.td | 8 ++++++++ clang/lib/Driver/ToolChains/Clang.cpp | 6 ++++++ clang/test/Driver/Xclangas.s | 6 ++++++ 4 files changed, 21 insertions(+) create mode 100644 clang/test/Driver/Xclangas.s diff --git a/clang/docs/UsersManual.rst b/clang/docs/UsersManual.rst index e9b95739ea2ab..7f55080321fea 100644 --- a/clang/docs/UsersManual.rst +++ b/clang/docs/UsersManual.rst @@ -4876,6 +4876,7 @@ Execute ``clang-cl /?`` to see a list of supported options: -v Show commands to run and use verbose output -W<warning> Enable the specified warning -Xclang <arg> Pass <arg> to the clang compiler + -Xclangas <arg> Pass <arg> to the clang assembler The /clang: Option ^^^^^^^^^^^^^^^^^^ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 26811bf948ae5..c7839c3941eb9 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1028,10 +1028,18 @@ def Xclang : Separate<["-"], "Xclang">, HelpText<"Pass <arg> to clang -cc1">, MetaVarName<"<arg>">, Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, Group<CompileOnly_Group>; +def Xclangas : Separate<["-"], "Xclangas">, + HelpText<"Pass <arg> to clang -cc1as">, MetaVarName<"<arg>">, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, + Group<CompileOnly_Group>; def : Joined<["-"], "Xclang=">, Group<CompileOnly_Group>, Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, Alias<Xclang>, HelpText<"Alias for -Xclang">, MetaVarName<"<arg>">; +def : Joined<["-"], "Xclangas=">, Group<CompileOnly_Group>, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, + Alias<Xclangas>, + HelpText<"Alias for -Xclangas">, MetaVarName<"<arg>">; def Xcuda_fatbinary : Separate<["-"], "Xcuda-fatbinary">, HelpText<"Pass <arg> to fatbinary invocation">, MetaVarName<"<arg>">; def Xcuda_ptxas : Separate<["-"], "Xcuda-ptxas">, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 4a94df7d5f42e..90b8db11c46c6 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -8711,6 +8711,12 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, CollectArgsForIntegratedAssembler(C, Args, CmdArgs, getToolChain().getDriver()); + // Forward -Xclangas arguments to -cc1as + for (auto Arg : Args.filtered(options::OPT_Xclangas)) { + Arg->claim(); + CmdArgs.push_back(Arg->getValue()); + } + Args.AddAllArgs(CmdArgs, options::OPT_mllvm); if (DebugInfoKind > llvm::codegenoptions::NoDebugInfo && Output.isFilename()) diff --git a/clang/test/Driver/Xclangas.s b/clang/test/Driver/Xclangas.s new file mode 100644 index 0000000000000..c46391f29baa5 --- /dev/null +++ b/clang/test/Driver/Xclangas.s @@ -0,0 +1,6 @@ +// Check that -Xclangas passes args to -cc1as. +// RUN: %clang -### -Xclangas -target-feature -Xclangas +v5t %s 2>&1 | \ +// RUN: FileCheck -check-prefix=ARGS %s +// ARGS: -cc1as +// ARGS: -target-feature +// ARGS: +v5t _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits