diff --git a/clang/docs/UsersManual.rst b/clang/docs/UsersManual.rst index 69256527f40c9..6c2053e01da8b 100644 --- a/clang/docs/UsersManual.rst +++ b/clang/docs/UsersManual.rst @@ -5146,6 +5146,7 @@ Execute ``clang-cl /?`` to see a list of supported options: -v Show commands to run and use verbose output -W Enable the specified warning -Xclang Pass to the clang compiler + -Xclangas Pass to the clang assembler The /clang: Option ^^^^^^^^^^^^^^^^^^ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 830d3459a1320..919c1c643d080 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -958,10 +958,18 @@ def Xclang : Separate<["-"], "Xclang">, HelpText<"Pass to clang -cc1">, MetaVarName<"">, Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, Group; +def Xclangas : Separate<["-"], "Xclangas">, + HelpText<"Pass to clang -cc1as">, MetaVarName<"">, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, + Group; def : Joined<["-"], "Xclang=">, Group, Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, Alias, HelpText<"Alias for -Xclang">, MetaVarName<"">; +def : Joined<["-"], "Xclangas=">, Group, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, + Alias, + HelpText<"Alias for -Xclangas">, MetaVarName<"">; def Xcuda_fatbinary : Separate<["-"], "Xcuda-fatbinary">, HelpText<"Pass to fatbinary invocation">, MetaVarName<"">; def Xcuda_ptxas : Separate<["-"], "Xcuda-ptxas">, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 67a800a643cbe..f2f5231933c88 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -8895,6 +8895,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..0d3911170eee1 --- /dev/null +++ b/clang/test/Driver/Xclangas.s @@ -0,0 +1,4 @@ +/// Check that -Xclangas/-Xclangas= are passed to -cc1as. +// RUN: %clang -### -Werror -Xclangas -target-feature -Xclangas=+v5t %s 2>&1 | FileCheck %s +// CHECK: -cc1as +// CHECK-SAME: "-target-feature" "+v5t"