From edae61410a6154da831d31f72308bdd5bad89db6 Mon Sep 17 00:00:00 2001 From: y Date: Tue, 21 Oct 2025 06:46:24 -0700 Subject: [PATCH 1/8] add nicks' commit --- clang/include/clang/Driver/Driver.h | 7 +++++ clang/lib/Driver/Driver.cpp | 37 +++++++++++++++++++++++---- clang/lib/Driver/ToolChains/Clang.cpp | 4 ++- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h index 2326f01133b2c..bd70cdfe135e5 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -626,6 +626,13 @@ class Driver { /// @name Helper Methods /// @{ + /// Utility function to parse all devices passed via -fsycl-targets. + /// Return 'true' for JIT, AOT Intel CPU/GPUs and NVidia/AMD targets. + /// Otherwise return 'false'. + bool + GetUseNewOffloadDriverForSYCLOffload(Compilation &C, + const llvm::opt::ArgList &Args) const; + /// getSYCLDeviceTriple - Returns the SYCL device triple for the /// specified subarch // TODO: Additional Arg input parameter is for diagnostic output information diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 73e3cc556c0fd..560ac2585ab6a 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1556,6 +1556,33 @@ static void appendOneArg(InputArgList &Args, const Arg *Opt) { } } + /// Utility function to parse all devices passed via -fsycl-targets. + /// Return 'true' for JIT, AOT Intel CPU/GPUs and NVidia/AMD targets. + /// Otherwise return 'false'. +bool Driver::GetUseNewOffloadDriverForSYCLOffload(Compilation &C, + const ArgList &Args) const { + // Check only if enabled with -fsycl + if (!Args.hasFlag(options::OPT_fsycl, options::OPT_fno_sycl, false)) + return false; + + if (Args.hasFlag(options::OPT_no_offload_new_driver, + options::OPT_offload_new_driver, false)) + return false; + + if (Args.hasArg(options::OPT_fintelfpga)) + return false; + + if (const Arg *A = Args.getLastArg(options::OPT_fsycl_targets_EQ)) { + for (const char *Val : A->getValues()) { + llvm::Triple TT(C.getDriver().MakeSYCLDeviceTriple(Val)); + if ((!TT.isSPIROrSPIRV()) || TT.isSPIRAOT()) + return false; + } + } + return true; +} + + bool Driver::readConfigFile(StringRef FileName, llvm::cl::ExpansionContext &ExpCtx) { // Try opening the given file. @@ -2186,11 +2213,10 @@ Compilation *Driver::BuildCompilation(ArrayRef ArgList) { // Use new offloading path for OpenMP. This is disabled as the SYCL // offloading path is not properly setup to use the updated device linking // scheme. - if ((C->isOffloadingHostKind(Action::OFK_OpenMP) && - TranslatedArgs->hasFlag(options::OPT_fopenmp_new_driver, - options::OPT_no_offload_new_driver, true)) || + if (C->isOffloadingHostKind(Action::OFK_OpenMP) || TranslatedArgs->hasFlag(options::OPT_offload_new_driver, - options::OPT_no_offload_new_driver, false)) + options::OPT_no_offload_new_driver, false) || + GetUseNewOffloadDriverForSYCLOffload(*C, *TranslatedArgs)) setUseNewOffloadingDriver(); // Construct the list of abstract actions to perform for this compilation. On @@ -7080,7 +7106,8 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args, options::OPT_fno_offload_via_llvm, false) || Args.hasFlag(options::OPT_offload_new_driver, options::OPT_no_offload_new_driver, - C.isOffloadingHostKind(Action::OFK_Cuda)); + C.isOffloadingHostKind(Action::OFK_Cuda)) || + GetUseNewOffloadDriverForSYCLOffload(C, Args); bool HIPNoRDC = C.isOffloadingHostKind(Action::OFK_HIP) && diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 90cad2bdbe6a5..fb99cd69184f8 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5289,7 +5289,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, (JA.isHostOffloading(C.getActiveOffloadKinds()) && Args.hasFlag(options::OPT_offload_new_driver, options::OPT_no_offload_new_driver, - C.isOffloadingHostKind(Action::OFK_Cuda))); + C.isOffloadingHostKind(Action::OFK_Cuda))) || + (JA.isHostOffloading(Action::OFK_SYCL) && + C.getDriver().GetUseNewOffloadDriverForSYCLOffload(C, Args)); bool IsRDCMode = Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc, IsSYCL); From 6340ea09c7144924bd7d3e020152cef73ef15939 Mon Sep 17 00:00:00 2001 From: y Date: Fri, 24 Oct 2025 20:21:39 -0700 Subject: [PATCH 2/8] fix the ocloc issue for running the fp64-conv-emu-1.cpp test with the new offloading model --- clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp | 9 +++++++-- sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp | 3 +++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index 0b49c83f35d15..17b0df54427a5 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -955,8 +955,13 @@ static void addBackendOptions(const ArgList &Args, // in any of them. auto [BeforeOptions, AfterOptions] = OptC.split("-options "); // Only add if not empty, an empty arg can lead to ocloc errors. - if (!BeforeOptions.empty()) - CmdArgs.push_back(BeforeOptions); + if (!BeforeOptions.empty()){ + SmallVector BeforeArgs; + BeforeOptions.split(BeforeArgs, " ", /*MaxSplit=*/-1, /*KeepEmpty=*/false); + for (auto string : BeforeArgs) { + CmdArgs.push_back(string); + } + } if (!AfterOptions.empty()) { // Separator not included by the split function, so explicitly added here. CmdArgs.push_back("-options"); diff --git a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp index 9cd673f7161b0..1d4dd9f81f5b0 100644 --- a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp +++ b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp @@ -20,6 +20,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu %O0 %s -o %t.out // RUN: %{run} %t.out +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu --offload-new-driver %O0 %s -o %t.out +// RUN: %{run} %t.out + // Tests that aspect::fp64 is not emitted correctly when -fsycl-fp64-conv-emu // flag is used. From c7bb8d54fc7cfbd7d6f9fd7a098f480bf3572aac Mon Sep 17 00:00:00 2001 From: y Date: Fri, 24 Oct 2025 23:21:41 -0700 Subject: [PATCH 3/8] got the fp64-conv-emu-1.cpp test to pass --- clang/lib/Driver/Driver.cpp | 2 +- clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 560ac2585ab6a..0aa369421e929 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1574,7 +1574,7 @@ bool Driver::GetUseNewOffloadDriverForSYCLOffload(Compilation &C, if (const Arg *A = Args.getLastArg(options::OPT_fsycl_targets_EQ)) { for (const char *Val : A->getValues()) { - llvm::Triple TT(C.getDriver().MakeSYCLDeviceTriple(Val)); + llvm::Triple TT(C.getDriver().getSYCLDeviceTriple(Val)); if ((!TT.isSPIROrSPIRV()) || TT.isSPIRAOT()) return false; } diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index 17b0df54427a5..564529d82f269 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -965,9 +965,10 @@ static void addBackendOptions(const ArgList &Args, if (!AfterOptions.empty()) { // Separator not included by the split function, so explicitly added here. CmdArgs.push_back("-options"); - std::string Replace = AfterOptions.str(); - std::replace(Replace.begin(), Replace.end(), ' ', ','); - CmdArgs.push_back(Args.MakeArgString(Replace)); + SmallVector AfterArgs; + AfterOptions.split(AfterArgs, " ", /*MaxSplit=*/-1, /*KeepEmpty=*/false); + std::string JoinedOptions = llvm::join(AfterArgs, " "); + CmdArgs.push_back(Args.MakeArgString(JoinedOptions)); } } StringRef OptL = From 1708433f077acf92f23f1806b35def5cd3120c5e Mon Sep 17 00:00:00 2001 From: y Date: Mon, 27 Oct 2025 11:46:37 -0700 Subject: [PATCH 4/8] fix the issue in fp64-conv-emu-2.cpp test --- .../OptionalKernelFeatures/fp64-conv-emu-1.cpp | 2 +- .../OptionalKernelFeatures/fp64-conv-emu-2.cpp | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp index 1d4dd9f81f5b0..7955e03f3cb49 100644 --- a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp +++ b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp @@ -17,7 +17,7 @@ // UNSUPPORTED: cuda, hip // UNSUPPORTED-INTENDED: FP64 emulation is an Intel specific feature. -// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu %O0 %s -o %t.out +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu --no-offload-new-driver %O0 %s -o %t.out // RUN: %{run} %t.out // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu --offload-new-driver %O0 %s -o %t.out diff --git a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp index 2df3aadb403cd..2118afa0f8a81 100644 --- a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp +++ b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp @@ -20,7 +20,10 @@ // UNSUPPORTED: cuda, hip // UNSUPPORTED-INTENDED: FP64 emulation is an Intel specific feature. -// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu %O0 %s -o %t.out +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu --no-offload-new-driver %O0 %s -o %t.out +// RUN: %{run} %t.out + +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu --offload-new-driver %O0 %s -o %t.out // RUN: %{run} %t.out #include @@ -61,8 +64,11 @@ int main() { nfail += test>(q); nfail += test>(q); - if (q.get_device().has(aspect::fp64)) - nfail += test>(q); + // This test is currently disabled because it requires the -ze-fp64-gen-emu IGC option to run FP64 arithmetic operations. + // TODO: Implement support for a new flag, -fsycl-fp64-gen-emu, which will enable the use of the -ze-fp64-gen-emu IGC option. + // if (q.get_device().has(aspect::fp64)) { + // nfail += test>(q); + // } nfail += test>(q); From 263ce30ed66f179d05dfb47c217b7d76c07d07e1 Mon Sep 17 00:00:00 2001 From: y Date: Mon, 27 Oct 2025 12:33:03 -0700 Subject: [PATCH 5/8] code clean up --- .../tools/clang-linker-wrapper/ClangLinkerWrapper.cpp | 4 ++-- .../OptionalKernelFeatures/fp64-conv-emu-1.cpp | 3 +++ .../OptionalKernelFeatures/fp64-conv-emu-2.cpp | 11 +++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index 564529d82f269..f54b72c4b0345 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -958,13 +958,13 @@ static void addBackendOptions(const ArgList &Args, if (!BeforeOptions.empty()){ SmallVector BeforeArgs; BeforeOptions.split(BeforeArgs, " ", /*MaxSplit=*/-1, /*KeepEmpty=*/false); - for (auto string : BeforeArgs) { + for (const auto & : BeforeArgs) { CmdArgs.push_back(string); } } if (!AfterOptions.empty()) { - // Separator not included by the split function, so explicitly added here. CmdArgs.push_back("-options"); + // Split the options string by spaces and rejoin to normalize whitespace SmallVector AfterArgs; AfterOptions.split(AfterArgs, " ", /*MaxSplit=*/-1, /*KeepEmpty=*/false); std::string JoinedOptions = llvm::join(AfterArgs, " "); diff --git a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp index 7955e03f3cb49..270f08ee91639 100644 --- a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp +++ b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-1.cpp @@ -23,6 +23,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu --offload-new-driver %O0 %s -o %t.out // RUN: %{run} %t.out +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu --offload-new-driver -g %O0 %s -o %t.out +// RUN: %{run} %t.out + // Tests that aspect::fp64 is not emitted correctly when -fsycl-fp64-conv-emu // flag is used. diff --git a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp index 2118afa0f8a81..696955891a066 100644 --- a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp +++ b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp @@ -26,6 +26,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu --offload-new-driver %O0 %s -o %t.out // RUN: %{run} %t.out +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,intel_gpu_dg2_g11,intel_gpu_dg2_g12,intel_gpu_pvc,intel_gpu_mtl_h,intel_gpu_mtl_u -fsycl-fp64-conv-emu --offload-new-driver -g %O0 %s -o %t.out +// RUN: %{run} %t.out + #include using namespace sycl; @@ -64,8 +67,12 @@ int main() { nfail += test>(q); nfail += test>(q); - // This test is currently disabled because it requires the -ze-fp64-gen-emu IGC option to run FP64 arithmetic operations. - // TODO: Implement support for a new flag, -fsycl-fp64-gen-emu, which will enable the use of the -ze-fp64-gen-emu IGC option. + // This test is currently disabled because it requires the -ze-fp64-gen-emu IGC option + // to run FP64 arithmetic operations. The -fsycl-fp64-conv-emu flag only enables the + // -ze-fp64-gen-conv-emu IGC option, which provides partial FP64 emulation limited to + // kernels with FP64 conversions but no FP64 computations. + // TODO: Implement support for a new flag, -fsycl-fp64-gen-emu, which will enable + // the use of the -ze-fp64-gen-emu IGC option. // if (q.get_device().has(aspect::fp64)) { // nfail += test>(q); // } From f8a1c0ca026bc9d923d03dc2d9c42317f5f4edae Mon Sep 17 00:00:00 2001 From: y Date: Mon, 27 Oct 2025 13:05:30 -0700 Subject: [PATCH 6/8] resolve CI failure --- clang/lib/Driver/Driver.cpp | 7 +++---- .../clang-linker-wrapper/ClangLinkerWrapper.cpp | 7 ++++--- .../OptionalKernelFeatures/fp64-conv-emu-2.cpp | 15 ++++++++------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 0aa369421e929..e7ef12cb2a472 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1556,9 +1556,9 @@ static void appendOneArg(InputArgList &Args, const Arg *Opt) { } } - /// Utility function to parse all devices passed via -fsycl-targets. - /// Return 'true' for JIT, AOT Intel CPU/GPUs and NVidia/AMD targets. - /// Otherwise return 'false'. +// Utility function to parse all devices passed via -fsycl-targets. +// Return 'true' for JIT, AOT Intel CPU/GPUs and NVidia/AMD targets. +// Otherwise return 'false'. bool Driver::GetUseNewOffloadDriverForSYCLOffload(Compilation &C, const ArgList &Args) const { // Check only if enabled with -fsycl @@ -1582,7 +1582,6 @@ bool Driver::GetUseNewOffloadDriverForSYCLOffload(Compilation &C, return true; } - bool Driver::readConfigFile(StringRef FileName, llvm::cl::ExpansionContext &ExpCtx) { // Try opening the given file. diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index f54b72c4b0345..b255ac14665c4 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -955,10 +955,11 @@ static void addBackendOptions(const ArgList &Args, // in any of them. auto [BeforeOptions, AfterOptions] = OptC.split("-options "); // Only add if not empty, an empty arg can lead to ocloc errors. - if (!BeforeOptions.empty()){ + if (!BeforeOptions.empty()) { SmallVector BeforeArgs; - BeforeOptions.split(BeforeArgs, " ", /*MaxSplit=*/-1, /*KeepEmpty=*/false); - for (const auto & : BeforeArgs) { + BeforeOptions.split(BeforeArgs, " ", /*MaxSplit=*/-1, + /*KeepEmpty=*/false); + for (const auto &string : BeforeArgs) { CmdArgs.push_back(string); } } diff --git a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp index 696955891a066..bf731792099b3 100644 --- a/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp +++ b/sycl/test-e2e/OptionalKernelFeatures/fp64-conv-emu-2.cpp @@ -67,13 +67,14 @@ int main() { nfail += test>(q); nfail += test>(q); - // This test is currently disabled because it requires the -ze-fp64-gen-emu IGC option - // to run FP64 arithmetic operations. The -fsycl-fp64-conv-emu flag only enables the - // -ze-fp64-gen-conv-emu IGC option, which provides partial FP64 emulation limited to - // kernels with FP64 conversions but no FP64 computations. - // TODO: Implement support for a new flag, -fsycl-fp64-gen-emu, which will enable - // the use of the -ze-fp64-gen-emu IGC option. - // if (q.get_device().has(aspect::fp64)) { + // This test is currently disabled because it requires the -ze-fp64-gen-emu + // IGC option to run FP64 arithmetic operations. The -fsycl-fp64-conv-emu flag + // only enables the -ze-fp64-gen-conv-emu IGC option, which provides partial + // FP64 emulation limited to kernels with FP64 conversions but no FP64 + // computations. + // TODO: Implement support for a new flag, -fsycl-fp64-gen-emu, which will + // enable the use of the -ze-fp64-gen-emu IGC option. if + // (q.get_device().has(aspect::fp64)) { // nfail += test>(q); // } From 7d853a7c7b435f254fdcdce140727ff596f6012c Mon Sep 17 00:00:00 2001 From: y Date: Tue, 28 Oct 2025 14:44:15 -0700 Subject: [PATCH 7/8] revert Nick's PR --- clang/include/clang/Driver/Driver.h | 7 ---- clang/lib/Driver/Driver.cpp | 36 +++---------------- clang/lib/Driver/ToolChains/Clang.cpp | 4 +-- .../ClangLinkerWrapper.cpp | 6 ++-- 4 files changed, 8 insertions(+), 45 deletions(-) diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h index bd70cdfe135e5..2326f01133b2c 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -626,13 +626,6 @@ class Driver { /// @name Helper Methods /// @{ - /// Utility function to parse all devices passed via -fsycl-targets. - /// Return 'true' for JIT, AOT Intel CPU/GPUs and NVidia/AMD targets. - /// Otherwise return 'false'. - bool - GetUseNewOffloadDriverForSYCLOffload(Compilation &C, - const llvm::opt::ArgList &Args) const; - /// getSYCLDeviceTriple - Returns the SYCL device triple for the /// specified subarch // TODO: Additional Arg input parameter is for diagnostic output information diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index e7ef12cb2a472..73e3cc556c0fd 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1556,32 +1556,6 @@ static void appendOneArg(InputArgList &Args, const Arg *Opt) { } } -// Utility function to parse all devices passed via -fsycl-targets. -// Return 'true' for JIT, AOT Intel CPU/GPUs and NVidia/AMD targets. -// Otherwise return 'false'. -bool Driver::GetUseNewOffloadDriverForSYCLOffload(Compilation &C, - const ArgList &Args) const { - // Check only if enabled with -fsycl - if (!Args.hasFlag(options::OPT_fsycl, options::OPT_fno_sycl, false)) - return false; - - if (Args.hasFlag(options::OPT_no_offload_new_driver, - options::OPT_offload_new_driver, false)) - return false; - - if (Args.hasArg(options::OPT_fintelfpga)) - return false; - - if (const Arg *A = Args.getLastArg(options::OPT_fsycl_targets_EQ)) { - for (const char *Val : A->getValues()) { - llvm::Triple TT(C.getDriver().getSYCLDeviceTriple(Val)); - if ((!TT.isSPIROrSPIRV()) || TT.isSPIRAOT()) - return false; - } - } - return true; -} - bool Driver::readConfigFile(StringRef FileName, llvm::cl::ExpansionContext &ExpCtx) { // Try opening the given file. @@ -2212,10 +2186,11 @@ Compilation *Driver::BuildCompilation(ArrayRef ArgList) { // Use new offloading path for OpenMP. This is disabled as the SYCL // offloading path is not properly setup to use the updated device linking // scheme. - if (C->isOffloadingHostKind(Action::OFK_OpenMP) || + if ((C->isOffloadingHostKind(Action::OFK_OpenMP) && + TranslatedArgs->hasFlag(options::OPT_fopenmp_new_driver, + options::OPT_no_offload_new_driver, true)) || TranslatedArgs->hasFlag(options::OPT_offload_new_driver, - options::OPT_no_offload_new_driver, false) || - GetUseNewOffloadDriverForSYCLOffload(*C, *TranslatedArgs)) + options::OPT_no_offload_new_driver, false)) setUseNewOffloadingDriver(); // Construct the list of abstract actions to perform for this compilation. On @@ -7105,8 +7080,7 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args, options::OPT_fno_offload_via_llvm, false) || Args.hasFlag(options::OPT_offload_new_driver, options::OPT_no_offload_new_driver, - C.isOffloadingHostKind(Action::OFK_Cuda)) || - GetUseNewOffloadDriverForSYCLOffload(C, Args); + C.isOffloadingHostKind(Action::OFK_Cuda)); bool HIPNoRDC = C.isOffloadingHostKind(Action::OFK_HIP) && diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index fb99cd69184f8..90cad2bdbe6a5 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5289,9 +5289,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, (JA.isHostOffloading(C.getActiveOffloadKinds()) && Args.hasFlag(options::OPT_offload_new_driver, options::OPT_no_offload_new_driver, - C.isOffloadingHostKind(Action::OFK_Cuda))) || - (JA.isHostOffloading(Action::OFK_SYCL) && - C.getDriver().GetUseNewOffloadDriverForSYCLOffload(C, Args)); + C.isOffloadingHostKind(Action::OFK_Cuda))); bool IsRDCMode = Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc, IsSYCL); diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index b255ac14665c4..ac467c5dd805d 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -945,10 +945,8 @@ static void addBackendOptions(const ArgList &Args, if (IsCPU) { OptC.split(CmdArgs, " ", /*MaxSplit=*/-1, /*KeepEmpty=*/false); } else { - // ocloc -options args need to be comma separated, e.g. `-options - // "-g,-cl-opt-disable"`. Otherwise, only the first arg is processed by - // ocloc as an arg for -options, and the rest are processed as standalone - // flags, possibly leading to errors. + // ocloc -options takes arguments in the form of '-options "-g -cl-opt-disable"' + // where each argument is separated with spaces // split function here returns a pair with everything before the separator // ("-options") in the first member of the pair, and everything after the // separator in the second part of the pair. The separator is not included From aba3bc001e092febe26ba5d120d21f1b0106e7b7 Mon Sep 17 00:00:00 2001 From: y Date: Tue, 28 Oct 2025 14:50:59 -0700 Subject: [PATCH 8/8] resolve clang format failure --- clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index ac467c5dd805d..8246fbd0fb1f7 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -945,9 +945,9 @@ static void addBackendOptions(const ArgList &Args, if (IsCPU) { OptC.split(CmdArgs, " ", /*MaxSplit=*/-1, /*KeepEmpty=*/false); } else { - // ocloc -options takes arguments in the form of '-options "-g -cl-opt-disable"' - // where each argument is separated with spaces - // split function here returns a pair with everything before the separator + // ocloc -options takes arguments in the form of '-options "-g + // -cl-opt-disable"' where each argument is separated with spaces split + // function here returns a pair with everything before the separator // ("-options") in the first member of the pair, and everything after the // separator in the second part of the pair. The separator is not included // in any of them.