From 88513db28d0e8545a0649228543322132dcd0be0 Mon Sep 17 00:00:00 2001 From: "Sabianin, Maksim" Date: Tue, 11 Nov 2025 06:55:14 -0800 Subject: [PATCH] [SYCL][NewOffloadModel] Remove passing backend options and link options to clang-linker-wrapper. --- clang/lib/Driver/ToolChains/Clang.cpp | 48 ------------------- clang/test/Driver/sycl-offload-new-driver.c | 9 ++-- clang/test/Driver/sycl-offload.c | 6 +-- clang/test/Driver/sycl-offload.cpp | 14 +++--- .../ClangLinkerWrapper.cpp | 6 +-- .../clang-linker-wrapper/LinkerWrapperOpts.td | 10 ---- 6 files changed, 13 insertions(+), 80 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 539f045275539..40e13f3fdb73c 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -11420,56 +11420,8 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back( Args.MakeArgString("-sycl-allow-device-image-dependencies")); - // Formulate and add any offload-wrapper and AOT specific options. These - // are additional options passed in via -Xsycl-target-linker and - // -Xsycl-target-backend. - const toolchains::SYCLToolChain &SYCLTC = - static_cast(getToolChain()); - // Only store compile/link opts in the image descriptor for the SPIR-V - // target. For AOT, pass along the addition options via GPU or CPU - // specific clang-linker-wrapper options. const ArgList &Args = C.getArgsForToolChain(nullptr, StringRef(), Action::OFK_SYCL); - for (auto &ToolChainMember : - llvm::make_range(ToolChainRange.first, ToolChainRange.second)) { - const ToolChain *TC = ToolChainMember.second; - bool IsJIT = false; - StringRef WrapperOption; - StringRef WrapperLinkOption; - if (TC->getTriple().isSPIROrSPIRV()) { - if (TC->getTriple().getSubArch() == llvm::Triple::NoSubArch) { - IsJIT = true; - WrapperOption = "--sycl-backend-compile-options="; - } - if (TC->getTriple().getSubArch() == llvm::Triple::SPIRSubArch_gen) - WrapperOption = "--gpu-tool-arg="; - if (TC->getTriple().getSubArch() == llvm::Triple::SPIRSubArch_x86_64) - WrapperOption = "--cpu-tool-arg="; - } else - continue; - ArgStringList BuildArgs; - SmallString<128> BackendOptString; - SmallString<128> LinkOptString; - SYCLTC.TranslateBackendTargetArgs(TC->getTriple(), Args, BuildArgs); - for (const auto &A : BuildArgs) - appendOption(BackendOptString, A); - - BuildArgs.clear(); - SYCLTC.TranslateLinkerTargetArgs(TC->getTriple(), Args, BuildArgs); - for (const auto &A : BuildArgs) { - if (IsJIT) - appendOption(LinkOptString, A); - else - // For AOT, combine the Backend and Linker strings into one. - appendOption(BackendOptString, A); - } - if (!BackendOptString.empty()) - CmdArgs.push_back( - Args.MakeArgString(Twine(WrapperOption) + BackendOptString)); - if (!LinkOptString.empty()) - CmdArgs.push_back( - Args.MakeArgString("--sycl-target-link-options=" + LinkOptString)); - } // Add option to enable creating of the .syclbin file. if (Arg *A = Args.getLastArg(options::OPT_fsyclbin_EQ)) CmdArgs.push_back( diff --git a/clang/test/Driver/sycl-offload-new-driver.c b/clang/test/Driver/sycl-offload-new-driver.c index 8a6ab47cd0a6f..0bce0640a0a01 100644 --- a/clang/test/Driver/sycl-offload-new-driver.c +++ b/clang/test/Driver/sycl-offload-new-driver.c @@ -145,12 +145,12 @@ // RUN: %clangxx --target=x86_64-unknown-linux-gnu -fsycl --offload-new-driver \ // RUN: -Xsycl-target-backend -backend-opt -### %s 2>&1 \ // RUN: | FileCheck -check-prefix WRAPPER_OPTIONS_BACKEND %s -// WRAPPER_OPTIONS_BACKEND: clang-linker-wrapper{{.*}} "--sycl-backend-compile-options={{.*}}-backend-opt{{.*}}" +// WRAPPER_OPTIONS_BACKEND: clang-offload-packager{{.*}} {{.*}}compile-opts=-ftarget-register-alloc-mode=pvc:-ze-intel-enable-auto-large-GRF-mode -backend-opt" // RUN: %clangxx --target=x86_64-unknown-linux-gnu -fsycl --offload-new-driver \ // RUN: -Xsycl-target-linker -link-opt -### %s 2>&1 \ // RUN: | FileCheck -check-prefix WRAPPER_OPTIONS_LINK %s -// WRAPPER_OPTIONS_LINK: clang-linker-wrapper{{.*}} "--sycl-target-link-options={{.*}}-link-opt{{.*}}" +// WRAPPER_OPTIONS_LINK: clang-offload-packager{{.*}} {{.*}}link-opts=-link-opt /// Test option passing behavior for clang-offload-wrapper options for AOT. // RUN: %clangxx --target=x86_64-unknown-linux-gnu -fsycl --offload-new-driver \ @@ -159,9 +159,8 @@ // RUN: -Xsycl-target-backend=spir64_x86_64 -backend-cpu-opt \ // RUN: -### %s 2>&1 \ // RUN: | FileCheck -check-prefix WRAPPER_OPTIONS_BACKEND_AOT %s -// WRAPPER_OPTIONS_BACKEND_AOT: clang-linker-wrapper{{.*}} "--host-triple=x86_64-unknown-linux-gnu" -// WRAPPER_OPTIONS_BACKEND_AOT-SAME: "--gpu-tool-arg=-backend-gen-opt" -// WRAPPER_OPTIONS_BACKEND_AOT-SAME: "--cpu-tool-arg=-backend-cpu-opt" +// WRAPPER_OPTIONS_BACKEND_AOT: clang-offload-packager{{.*}} {{.*}}triple=spir64_gen-unknown-unknown,arch=generic,kind=sycl,compile-opts=-backend-gen-opt +// WRAPPER_OPTIONS_BACKEND_AOT-SAME: {{.*}}triple=spir64_x86_64-unknown-unknown,arch=generic,kind=sycl,compile-opts=-backend-cpu-opt /// Verify arch settings for nvptx and amdgcn targets // RUN: %clangxx -fsycl -### -fsycl-targets=amdgcn-amd-amdhsa -fno-sycl-libspirv \ diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index a58f785c20c42..c72cdea665e2f 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -326,10 +326,6 @@ /// ########################################################################### -// RUN: %clang -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -fsycl-targets=spir64-unknown-unknown -Xsycl-target-backend "-DFOO1 -DFOO2" %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHK-TOOLS-OPTS %s -// CHK-TOOLS-OPTS: clang-linker-wrapper{{.*}} "--sycl-backend-compile-options=-DFOO1 -DFOO2" - /// Check for implied options (-g -O0) // RUN: %clang -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -fsycl-targets=spir64-unknown-unknown -g -O0 -Xsycl-target-backend "-DFOO1 -DFOO2" %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-TOOLS-IMPLIED-OPTS %s @@ -348,7 +344,7 @@ // RUN: %clang -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -fsycl-targets=spir64-unknown-unknown -Xsycl-target-linker "-DFOO1 -DFOO2" %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-TOOLS-OPTS2 %s -// CHK-TOOLS-OPTS2: clang-linker-wrapper{{.*}} "--sycl-target-link-options=-DFOO1 -DFOO2" +// CHK-TOOLS-OPTS2: clang-offload-packager{{.*}} "{{.*}}link-opts=-DFOO1 -DFOO2" /// -fsycl-range-rounding settings /// diff --git a/clang/test/Driver/sycl-offload.cpp b/clang/test/Driver/sycl-offload.cpp index 2354fab2d404e..988cba573a934 100644 --- a/clang/test/Driver/sycl-offload.cpp +++ b/clang/test/Driver/sycl-offload.cpp @@ -54,19 +54,19 @@ /// Passing in the default triple should allow for -Xsycl-target options, both the /// "=" and the default spelling -// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -fsycl-targets=spir64 -Xsycl-target-backend=spir64 -DFOO -Xsycl-target-linker=spir64 -DFOO2 %S/Inputs/SYCL/objlin64.o 2>&1 \ +// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -fsycl-targets=spir64 -Xsycl-target-backend=spir64 -DFOO -Xsycl-target-linker=spir64 -DFOO2 %s 2>&1 \ // RUN: | FileCheck -check-prefixes=SYCL_TARGET_OPT %s -// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -Xsycl-target-backend=spir64 -DFOO -Xsycl-target-linker=spir64 -DFOO2 %S/Inputs/SYCL/objlin64.o 2>&1 \ +// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -Xsycl-target-backend=spir64 -DFOO -Xsycl-target-linker=spir64 -DFOO2 %s 2>&1 \ // RUN: | FileCheck -check-prefixes=SYCL_TARGET_OPT %s -// SYCL_TARGET_OPT: clang-linker-wrapper{{.*}} "--sycl-backend-compile-options=-DFOO" "--sycl-target-link-options=-DFOO2" +// SYCL_TARGET_OPT: clang-offload-packager{{.*}} "{{.*}}compile-opts=-ftarget-register-alloc-mode=pvc:-ze-intel-enable-auto-large-GRF-mode -DFOO,link-opts=-DFOO2" -// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -fsycl-targets=spir64_x86_64 -Xsycl-target-backend -DFOO %S/Inputs/SYCL/objlin64.o 2>&1 \ +// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -fsycl-targets=spir64_x86_64 -Xsycl-target-backend -DFOO %s 2>&1 \ // RUN: | FileCheck -check-prefixes=SYCL_TARGET_OPT_AOT,SYCL_TARGET_OPT_CPU %s -// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -fsycl-targets=spir64_gen -Xsycl-target-backend -DFOO %S/Inputs/SYCL/objlin64.o 2>&1 \ +// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --offload-new-driver -fsycl-targets=spir64_gen -Xsycl-target-backend -DFOO %s 2>&1 \ // RUN: | FileCheck -check-prefixes=SYCL_TARGET_OPT_AOT,SYCL_TARGET_OPT_GPU %s // SYCL_TARGET_OPT_AOT-NOT: error: cannot deduce implicit triple value for '-Xsycl-target-backend' -// SYCL_TARGET_OPT_CPU: clang-linker-wrapper{{.*}} "--cpu-tool-arg=-DFOO" -// SYCL_TARGET_OPT_GPU: clang-linker-wrapper{{.*}} "--gpu-tool-arg=-DFOO" +// SYCL_TARGET_OPT_CPU: clang-offload-packager{{.*}} "{{.*}}triple=spir64_x86_64-unknown-unknown,arch=generic,kind=sycl,compile-opts=-DFOO" +// SYCL_TARGET_OPT_GPU: clang-offload-packager{{.*}} "{{.*}}triple=spir64_gen-unknown-unknown,arch=generic,kind=sycl,compile-opts=-DFOO" /// Check -fsycl-targets=spir64 enables addition of -ffine-grained-bitfield-accesses option // RUN: %clangxx -### -fsycl-device-only --offload-new-driver %s 2>&1 | FileCheck -check-prefixes=CHECK_BITFIELD_OPTION %s diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index 48501e717428a..168801feef10e 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -937,6 +937,7 @@ static Expected runLLVMToSPIRVTranslation(StringRef File, /// Intel CPU. /// \p BackendOptions is a string containing backend compilation options. For /// example, "-options -cl-opt-disable". +/// TODO: rework this function. static void addSYCLBackendOptions(const ArgList &Args, SmallVector &CmdArgs, bool IsCPU, StringRef BackendOptions) { @@ -963,11 +964,6 @@ static void addSYCLBackendOptions(const ArgList &Args, CmdArgs.push_back(Args.MakeArgString(Replace)); } } - - StringRef OptTool = (IsCPU) ? Args.getLastArgValue(OPT_cpu_tool_arg_EQ) - : Args.getLastArgValue(OPT_gpu_tool_arg_EQ); - OptTool.split(CmdArgs, " ", /*MaxSplit=*/-1, /*KeepEmpty=*/false); - return; } /// Run AOT compilation for Intel CPU. diff --git a/clang/tools/clang-linker-wrapper/LinkerWrapperOpts.td b/clang/tools/clang-linker-wrapper/LinkerWrapperOpts.td index a41568da13af1..4e6c57341d892 100644 --- a/clang/tools/clang-linker-wrapper/LinkerWrapperOpts.td +++ b/clang/tools/clang-linker-wrapper/LinkerWrapperOpts.td @@ -198,16 +198,6 @@ def sycl_add_default_spec_consts_image : Flag<["--", "-"], "sycl-add-default-spe def no_sycl_add_default_spec_consts_image : Flag<["--", "-"], "no-sycl-add-default-spec-consts-image">, Flags<[WrapperOnlyOption, HelpHidden]>; -// Special options to pass backend options required for AOT compilation -def gpu_tool_arg_EQ : - Joined<["--", "-"], "gpu-tool-arg=">, - Flags<[WrapperOnlyOption]>, - HelpText<"Options that are passed to the backend of target device compiler for Intel GPU during AOT compilation">; -def cpu_tool_arg_EQ : - Joined<["--", "-"], "cpu-tool-arg=">, - Flags<[WrapperOnlyOption]>, - HelpText<"Options that are passed to the backend of target device compiler for Intel CPU during AOT compilation">; - def sycl_thin_lto : Flag<["--", "-"], "sycl-thin-lto">, Flags<[WrapperOnlyOption]>, HelpText<"Link SYCL device code using thinLTO">;