[libclc] [libclc] Fix commands in compile_to_bc are executed sequentially (PR #130755)
Wenju He via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 11 04:25:59 PDT 2025
https://github.com/wenju-he created https://github.com/llvm/llvm-project/pull/130755
In libclc, we observe that compiling OpenCL source files to bitcode is executed sequentially on Windows, which increases debug build time by about an hour.
add_custom_command may introduce additional implicit dependencies, see https://gitlab.kitware.com/cmake/cmake/-/issues/17097
This PR adds a target for each command and enables parallel builds of OpenCL source files.
>From 1f8b5bfbfea6b562e9cae088256e8e5dddf0a335 Mon Sep 17 00:00:00 2001
From: Wenju He <wenju.he at intel.com>
Date: Tue, 11 Mar 2025 04:24:36 -0700
Subject: [PATCH] [libclc] Fix commands in compile_to_bc are executed
sequentially
In libclc, we observe that compiling OpenCL source files to bitcode is
executed sequentially on Windows, which increases debug build time by
about an hour.
add_custom_command may introduce additional implicit dependencies, see
https://gitlab.kitware.com/cmake/cmake/-/issues/17097
This PR adds a target for each command and enables parallel builds of
OpenCL source files.
---
libclc/cmake/modules/AddLibclc.cmake | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/libclc/cmake/modules/AddLibclc.cmake b/libclc/cmake/modules/AddLibclc.cmake
index 911559ff4bfa9..9dc328fcd489c 100644
--- a/libclc/cmake/modules/AddLibclc.cmake
+++ b/libclc/cmake/modules/AddLibclc.cmake
@@ -1,6 +1,8 @@
# Compiles an OpenCL C - or assembles an LL file - to bytecode
#
# Arguments:
+# * TARGET <string>
+# Custom target to create
# * TRIPLE <string>
# Target triple for which to compile the bytecode file.
# * INPUT <string>
@@ -17,7 +19,7 @@
function(compile_to_bc)
cmake_parse_arguments(ARG
""
- "TRIPLE;INPUT;OUTPUT"
+ "TARGET;TRIPLE;INPUT;OUTPUT"
"EXTRA_OPTS;DEPENDENCIES"
${ARGN}
)
@@ -60,9 +62,11 @@ function(compile_to_bc)
DEPENDS
${clang_target}
${ARG_INPUT}
- ${ARG_DEPENDENCIES}
DEPFILE ${ARG_OUTPUT}.d
)
+ add_custom_target( ${ARG_TARGET}
+ DEPENDS ${ARG_OUTPUT}${TMP_SUFFIX} ${ARG_DEPENDENCIES}
+ )
if( ${FILE_EXT} STREQUAL ".ll" )
add_custom_command(
@@ -70,6 +74,7 @@ function(compile_to_bc)
COMMAND ${llvm-as_exe} -o ${ARG_OUTPUT} ${ARG_OUTPUT}${TMP_SUFFIX}
DEPENDS ${llvm-as_target} ${ARG_OUTPUT}${TMP_SUFFIX}
)
+ add_custom_target( ${ARG_TARGET}-as DEPENDS ${ARG_OUTPUT} )
endif()
endfunction()
@@ -227,6 +232,7 @@ function(add_libclc_builtin_set)
set( bytecode_files )
set( bytecode_ir_files )
+ set( compile_tgts )
foreach( file IN LISTS ARG_GEN_FILES ARG_LIB_FILES )
# We need to take each file and produce an absolute input file, as well
# as a unique architecture-specific output file. We deal with a mix of
@@ -256,7 +262,11 @@ function(add_libclc_builtin_set)
get_filename_component( file_dir ${file} DIRECTORY )
+ string( REPLACE "/" "-" replaced ${file} )
+ set( tgt compile_tgt-${ARG_ARCH_SUFFIX}${replaced})
+
compile_to_bc(
+ TARGET ${tgt}
TRIPLE ${ARG_TRIPLE}
INPUT ${input_file}
OUTPUT ${output_file}
@@ -264,11 +274,13 @@ function(add_libclc_builtin_set)
"${ARG_COMPILE_FLAGS}" -I${CMAKE_CURRENT_SOURCE_DIR}/${file_dir}
DEPENDENCIES ${input_file_dep}
)
+ list( APPEND compile_tgts ${tgt} )
# Collect all files originating in LLVM IR separately
get_filename_component( file_ext ${file} EXT )
if( ${file_ext} STREQUAL ".ll" )
list( APPEND bytecode_ir_files ${output_file} )
+ list( APPEND compile_tgts ${tgt}-as )
else()
list( APPEND bytecode_files ${output_file} )
endif()
@@ -283,7 +295,7 @@ function(add_libclc_builtin_set)
set( builtins_comp_lib_tgt builtins.comp.${ARG_ARCH_SUFFIX} )
add_custom_target( ${builtins_comp_lib_tgt}
- DEPENDS ${bytecode_files}
+ DEPENDS ${compile_tgts}
)
set_target_properties( ${builtins_comp_lib_tgt} PROPERTIES FOLDER "libclc/Device IR/Comp" )
More information about the cfe-commits
mailing list