Skip to content

Commit 7ff1a29

Browse files
authored
[SYCL] Allow specifying -foffload-lto with the new offload driver and build libdevice with thinLTO (intel#14036)
This is the first change in my work on thinLTO for SYCL. --------- Signed-off-by: Sarnie, Nick <[email protected]>
1 parent 643d21f commit 7ff1a29

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5843,10 +5843,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
58435843
CmdArgs.push_back("-emit-llvm-uselists");
58445844

58455845
if (IsUsingLTO) {
5846+
bool IsUsingOffloadNewDriver =
5847+
Args.hasFlag(options::OPT_offload_new_driver,
5848+
options::OPT_no_offload_new_driver, false);
5849+
bool IsSYCLLTOSupported = JA.isDeviceOffloading(Action::OFK_SYCL) &&
5850+
Triple.isSPIROrSPIRV() &&
5851+
IsUsingOffloadNewDriver;
58465852
if (IsDeviceOffloadAction && !JA.isDeviceOffloading(Action::OFK_OpenMP) &&
5847-
!Args.hasFlag(options::OPT_offload_new_driver,
5848-
options::OPT_no_offload_new_driver, false) &&
5849-
!Triple.isAMDGPU()) {
5853+
!IsUsingOffloadNewDriver && !Triple.isAMDGPU() &&
5854+
!IsSYCLLTOSupported) {
58505855
D.Diag(diag::err_drv_unsupported_opt_for_target)
58515856
<< Args.getLastArg(options::OPT_foffload_lto,
58525857
options::OPT_foffload_lto_EQ)

clang/test/Driver/sycl-lto.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Verify the usage of -foffload-lto with SYCL.
2+
3+
// Verify we error when using the old offload driver.
4+
// RUN: not %clangxx -fsycl -foffload-lto=thin %s -### 2>&1 | FileCheck -check-prefix=CHECK_ERROR %s
5+
// CHECK_ERROR: unsupported option '-foffload-lto=thin' for target 'spir64-unknown-unknown'
6+
7+
// Verify there's no error and we see the expected cc1 flags with the new offload driver.
8+
// RUN: %clangxx -fsycl --offload-new-driver -foffload-lto=thin %s -### 2>&1 | FileCheck -check-prefix=CHECK_SUPPORTED %s
9+
// CHECK_SUPPORTED: clang{{.*}} "-cc1" "-triple" "spir64-unknown-unknown" {{.*}} "-flto=thin" "-flto-unit"

libdevice/cmake/modules/SYCLLibdevice.cmake

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ function(add_devicelib_obj obj_filename)
9191

9292
set(devicelib-obj-file-new-offload ${obj_new_offload_binary_dir}/${obj_filename}.${new-offload-lib-suffix})
9393
add_custom_command(OUTPUT ${devicelib-obj-file-new-offload}
94-
COMMAND ${clang} -fsycl -c --offload-new-driver
94+
COMMAND ${clang} -fsycl -c --offload-new-driver -foffload-lto=thin
9595
${compile_opts} ${sycl_targets_opt} ${OBJ_EXTRA_ARGS}
9696
${CMAKE_CURRENT_SOURCE_DIR}/${OBJ_SRC}
9797
-o ${devicelib-obj-file-new-offload}
@@ -270,7 +270,7 @@ add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-imf.${lib-suffix}
270270
VERBATIM)
271271

272272
add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-imf.${new-offload-lib-suffix}
273-
COMMAND ${clang} -fsycl -c --offload-new-driver
273+
COMMAND ${clang} -fsycl -c --offload-new-driver -foffload-lto=thin
274274
${compile_opts} ${sycl_targets_opt}
275275
${imf_fp32_fallback_src} -I ${CMAKE_CURRENT_SOURCE_DIR}/imf
276276
-o ${obj_binary_dir}/libsycl-fallback-imf.${new-offload-lib-suffix}
@@ -286,7 +286,7 @@ add_custom_command(OUTPUT ${obj_binary_dir}/fallback-imf-fp32-host.${lib-suffix}
286286
VERBATIM)
287287

288288
add_custom_command(OUTPUT ${obj_binary_dir}/fallback-imf-fp32-host.${new-offload-lib-suffix}
289-
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver
289+
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver -foffload-lto=thin
290290
-I ${CMAKE_CURRENT_SOURCE_DIR}/imf
291291
${imf_fp32_fallback_src}
292292
-o ${obj_binary_dir}/fallback-imf-fp32-host.${new-offload-lib-suffix}
@@ -321,7 +321,7 @@ add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-imf-fp64.${lib-suff
321321

322322
add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-imf-fp64.${new-offload-lib-suffix}
323323
COMMAND ${clang} -fsycl -c -I ${CMAKE_CURRENT_SOURCE_DIR}/imf
324-
--offload-new-driver
324+
--offload-new-driver -foffload-lto=thin
325325
${compile_opts} ${sycl_targets_opt}
326326
${imf_fp64_fallback_src}
327327
-o ${obj_binary_dir}/libsycl-fallback-imf-fp64.${new-offload-lib-suffix}
@@ -337,7 +337,7 @@ add_custom_command(OUTPUT ${obj_binary_dir}/fallback-imf-fp64-host.${lib-suffix}
337337
VERBATIM)
338338

339339
add_custom_command(OUTPUT ${obj_binary_dir}/fallback-imf-fp64-host.${new-offload-lib-suffix}
340-
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver
340+
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver -foffload-lto=thin
341341
-I ${CMAKE_CURRENT_SOURCE_DIR}/imf
342342
${imf_fp64_fallback_src}
343343
-o ${obj_binary_dir}/fallback-imf-fp64-host.${new-offload-lib-suffix}
@@ -372,7 +372,7 @@ add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-imf-bf16.${lib-suff
372372

373373
add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-imf-bf16.${new-offload-lib-suffix}
374374
COMMAND ${clang} -fsycl -c -I ${CMAKE_CURRENT_SOURCE_DIR}/imf
375-
--offload-new-driver
375+
--offload-new-driver -foffload-lto=thin
376376
${compile_opts} ${sycl_targets_opt}
377377
${imf_bf16_fallback_src}
378378
-o ${obj_binary_dir}/libsycl-fallback-imf-bf16.${new-offload-lib-suffix}
@@ -388,7 +388,7 @@ add_custom_command(OUTPUT ${obj_binary_dir}/fallback-imf-bf16-host.${lib-suffix}
388388
VERBATIM)
389389

390390
add_custom_command(OUTPUT ${obj_binary_dir}/fallback-imf-bf16-host.${new-offload-lib-suffix}
391-
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver
391+
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver -foffload-lto=thin
392392
-I ${CMAKE_CURRENT_SOURCE_DIR}/imf
393393
${imf_bf16_fallback_src}
394394
-o ${obj_binary_dir}/fallback-imf-bf16-host.${new-offload-lib-suffix}
@@ -437,7 +437,7 @@ add_custom_command(OUTPUT ${obj_binary_dir}/imf-fp32-host.${lib-suffix}
437437
VERBATIM)
438438

439439
add_custom_command(OUTPUT ${obj_binary_dir}/imf-fp32-host.${new-offload-lib-suffix}
440-
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver
440+
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver -foffload-lto=thin
441441
${CMAKE_CURRENT_SOURCE_DIR}/imf_wrapper.cpp
442442
-o ${obj_binary_dir}/imf-fp32-host.${new-offload-lib-suffix}
443443
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/imf_wrapper.cpp
@@ -453,7 +453,7 @@ add_custom_command(OUTPUT ${obj_binary_dir}/imf-fp64-host.${lib-suffix}
453453
VERBATIM)
454454

455455
add_custom_command(OUTPUT ${obj_binary_dir}/imf-fp64-host.${new-offload-lib-suffix}
456-
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver
456+
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver -foffload-lto=thin
457457
${CMAKE_CURRENT_SOURCE_DIR}/imf_wrapper_fp64.cpp
458458
-o ${obj_binary_dir}/imf-fp64-host.${new-offload-lib-suffix}
459459
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/imf_wrapper_fp64.cpp
@@ -469,7 +469,7 @@ add_custom_command(OUTPUT ${obj_binary_dir}/imf-bf16-host.${lib-suffix}
469469
VERBATIM)
470470

471471
add_custom_command(OUTPUT ${obj_binary_dir}/imf-bf16-host.${new-offload-lib-suffix}
472-
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver
472+
COMMAND ${clang} ${imf_host_cxx_flags} --offload-new-driver -foffload-lto=thin
473473
${CMAKE_CURRENT_SOURCE_DIR}/imf_wrapper_bf16.cpp
474474
-o ${obj_binary_dir}/imf-bf16-host.${new-offload-lib-suffix}
475475
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/imf_wrapper_bf16.cpp

0 commit comments

Comments
 (0)