From 7760f2c399c66babe4c36d237739bda68777c015 Mon Sep 17 00:00:00 2001 From: y Date: Wed, 5 Nov 2025 15:40:23 -0800 Subject: [PATCH 1/3] update the SYCLLibdevice.cmake such that the name.o device library is built with --no-new-offload-model flag --- libdevice/cmake/modules/SYCLLibdevice.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libdevice/cmake/modules/SYCLLibdevice.cmake b/libdevice/cmake/modules/SYCLLibdevice.cmake index ac23ef5dc14cb..0224c05e6dc66 100644 --- a/libdevice/cmake/modules/SYCLLibdevice.cmake +++ b/libdevice/cmake/modules/SYCLLibdevice.cmake @@ -111,7 +111,7 @@ set(spv_device_compile_opts -fsycl-device-only -fsycl-device-obj=spirv) set(bc_device_compile_opts -fsycl-device-only -fsycl-device-obj=llvmir) set(obj-new-offload_device_compile_opts -fsycl -c --offload-new-driver -foffload-lto=thin ${sycl_targets_opt}) -set(obj_device_compile_opts -fsycl -c ${sycl_targets_opt}) +set(obj_device_compile_opts -fsycl -c ${sycl_targets_opt} --no-offload-new-driver) # Compiles and installs a single device library. # @@ -364,17 +364,17 @@ if (NOT MSVC AND UR_SANITIZER_INCLUDE_DIR) -I${UR_SANITIZER_INCLUDE_DIR} -I${CMAKE_CURRENT_SOURCE_DIR}) - set(sanitizer_pvc_compile_opts_obj -fsycl -c + set(sanitizer_pvc_compile_opts_obj -fsycl -c --no-offload-new-driver ${sanitizer_generic_compile_opts} ${sycl_pvc_target_opt} -D__LIBDEVICE_PVC__) - set(sanitizer_cpu_compile_opts_obj -fsycl -c + set(sanitizer_cpu_compile_opts_obj -fsycl -c --no-offload-new-driver ${sanitizer_generic_compile_opts} ${sycl_cpu_target_opt} -D__LIBDEVICE_CPU__) - set(sanitizer_dg2_compile_opts_obj -fsycl -c + set(sanitizer_dg2_compile_opts_obj -fsycl -c --no-offload-new-driver ${sanitizer_generic_compile_opts} ${sycl_dg2_target_opt} -D__LIBDEVICE_DG2__) @@ -706,7 +706,7 @@ endif() set(obj-new-offload_host_compile_opts ${imf_host_cxx_flags} --offload-new-driver -foffload-lto=thin) -set(obj_host_compile_opts ${imf_host_cxx_flags}) +set(obj_host_compile_opts ${imf_host_cxx_flags} --no-offload-new-driver) foreach(datatype IN ITEMS fp32 fp64 bf16) string(TOUPPER ${datatype} upper_datatype) From d401d7932ca338cc9fd54ab0eb7a03e65dc7ad9b Mon Sep 17 00:00:00 2001 From: y Date: Wed, 5 Nov 2025 15:48:32 -0800 Subject: [PATCH 2/3] add the changes for enabling new offloading model by default; these changes will be reverted after running CI --- 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 4c50595c29cb6..a62ec01f6ebd6 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1556,6 +1556,32 @@ 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. @@ -2186,12 +2212,12 @@ 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 // MachO targets this uses the driver-driver and universal actions. @@ -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 3e31098b20bb5..cbd9df717ff08 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5243,7 +5243,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 4edcedb1dc48f56c76d4f85f6513be31baff814e Mon Sep 17 00:00:00 2001 From: y Date: Wed, 5 Nov 2025 17:04:39 -0800 Subject: [PATCH 3/3] revert the changes for enabling new offloading model by default --- clang/include/clang/Driver/Driver.h | 7 ----- clang/lib/Driver/Driver.cpp | 37 ++++----------------------- clang/lib/Driver/ToolChains/Clang.cpp | 4 +-- 3 files changed, 6 insertions(+), 42 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 a62ec01f6ebd6..4c50595c29cb6 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,12 +2186,12 @@ 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 // MachO targets this uses the driver-driver and universal actions. @@ -7106,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 cbd9df717ff08..3e31098b20bb5 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5243,9 +5243,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);