Skip to content

Cherry-pick https://github.com/intel/llvm/pull/15914 #15918

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 72 additions & 37 deletions libclc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ if( "spirv-mesa3d-" IN_LIST LIBCLC_TARGETS_TO_BUILD OR "spirv64-mesa3d-" IN_LIST
endif()

add_custom_target(libspirv-builtins COMMENT "Build libspirv builtins")
add_custom_target(libclc-builtins COMMENT "Build libclc builtins")
add_custom_target(libopencl-builtins COMMENT "Build libclc builtins")

if( LIBCLC_TARGETS_TO_BUILD STREQUAL "all" )
set( LIBCLC_TARGETS_TO_BUILD ${LIBCLC_TARGETS_ALL} )
Expand Down Expand Up @@ -341,19 +341,40 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} )
" configuration, some SYCL programs may fail to build.")
endif()

set( lib_files )
set( lib_gen_files )
libclc_configure_lib_source(lib_files lib_gen_files
LIB_DIR lib
set( opencl_lib_files )
set( opencl_gen_files )

if( NOT ARCH STREQUAL spirv AND NOT ARCH STREQUAL spirv64 )
if( ARCH STREQUAL clspv OR ARCH STREQUAL clspv64 )
list( APPEND opencl_gen_files clspv-convert.cl )
elseif ( NOT ENABLE_RUNTIME_SUBNORMAL )
list( APPEND opencl_gen_files convert-clc.cl )
list( APPEND opencl_lib_files generic/libspirv/subnormal_use_default.ll )
endif()
endif()

libclc_configure_lib_source(
opencl_lib_files
DIRS ${dirs} ${DARCH} ${DARCH}-${OS} ${DARCH}-${VENDOR}-${OS}
DEPS convert-clc.cl )
)

set( libspirv_files )
set( libspirv_lib_files )
set( libspirv_gen_files )
libclc_configure_lib_source(libspirv_files libspirv_gen_files

if( NOT ARCH STREQUAL spirv AND NOT ARCH STREQUAL spirv64 )
if( ARCH STREQUAL clspv OR ARCH STREQUAL clspv64 )
list( APPEND libspirv_gen_files clspv-convert.cl )
elseif ( NOT ENABLE_RUNTIME_SUBNORMAL )
list( APPEND libspirv_gen_files convert-spirv.cl convert-core.cl )
list( APPEND libspirv_lib_files generic/libspirv/subnormal_use_default.ll )
endif()
endif()

libclc_configure_lib_source(
libspirv_lib_files
LIB_DIR libspirv
DIRS ${dirs} ${DARCH} ${DARCH}-${OS} ${DARCH}-${VENDOR}-${OS}
DEPS convert-spirv.cl convert-core.cl)
)

foreach( d ${${t}_devices} )
get_libclc_device_info(
Expand All @@ -365,29 +386,25 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} )
)

# Some targets don't have a specific GPU to target
set( flags )
set( build_flags )
if( d STREQUAL none OR ARCH STREQUAL spirv OR ARCH STREQUAL spirv64 )
# FIXME: Ideally we would not be tied to a specific PTX ISA version
if( ARCH STREQUAL nvptx OR ARCH STREQUAL nvptx64 )
# Disables NVVM reflection to defer to after linking
list( APPEND flags -Xclang -target-feature -Xclang +ptx72
list( APPEND build_flags -Xclang -target-feature -Xclang +ptx72
-march=sm_86 -mllvm --nvvm-reflect-enable=false)
elseif( ARCH STREQUAL amdgcn )
# AMDGCN needs libclc to be compiled to high bc version since all atomic
# clang builtins need to be accessible
list( APPEND flags -mcpu=gfx940 -mllvm --amdgpu-oclc-reflect-enable=false )
list( APPEND build_flags -mcpu=gfx940 -mllvm --amdgpu-oclc-reflect-enable=false )
elseif( IS_NATIVE_CPU_ARCH )
list( APPEND flags -Xclang -fsycl-is-native-cpu )
list( APPEND build_flags -Xclang -fsycl-is-native-cpu )
if( ARCH STREQUAL x86_64 )
list( APPEND flags ${LIBCLC_NATIVECPU_FLAGS_X86_64})
list( APPEND build_flags ${LIBCLC_NATIVECPU_FLAGS_X86_64})
endif()
endif()
endif()

if( NOT "${cpu}" STREQUAL "" )
list( APPEND flags -mcpu=${cpu} )
endif()

message( STATUS " device: ${d} ( ${${d}_aliases} )" )

# Note: when declaring builtins, we must consider that even if a target
Expand Down Expand Up @@ -422,7 +439,7 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} )

# Enable SPIR-V builtin function declarations, so they don't
# have to be explicity declared in the soruce.
list( APPEND flags -Xclang -fdeclare-spirv-builtins)
list( APPEND build_flags -Xclang -fdeclare-spirv-builtins)
set( LIBCLC_ARCH_OBJFILE_DIR "${LIBCLC_OBJFILE_DIR}/${arch_suffix}" )
file( MAKE_DIRECTORY ${LIBCLC_ARCH_OBJFILE_DIR} )

Expand All @@ -440,7 +457,7 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} )
if( supports_generic_addrspace )
string( APPEND CL_3_0_EXTENSIONS ",+__opencl_c_generic_address_space" )
if( has_distinct_generic_addrspace )
list( APPEND flags -D__CLC_DISTINCT_GENERIC_ADDRSPACE__ )
list( APPEND build_flags -D__CLC_DISTINCT_GENERIC_ADDRSPACE__ )
endif()
else()
# Explictly disable opencl_c_generic_address_space (it may be enabled
Expand All @@ -450,42 +467,60 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} )
string( APPEND CL_3_0_EXTENSIONS ",-__opencl_c_pipes" )
string( APPEND CL_3_0_EXTENSIONS ",-__opencl_c_device_enqueue" )
endif()
list( APPEND flags -cl-std=CL3.0 "-Xclang" ${CL_3_0_EXTENSIONS} )
list( APPEND build_flags -cl-std=CL3.0 "-Xclang" ${CL_3_0_EXTENSIONS} )

# Add platform specific flags
if(WIN32)
list(APPEND flags -D_WIN32)
list(APPEND build_flags -D_WIN32)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
list(APPEND flags -D__APPLE__)
list(APPEND build_flags -D__APPLE__)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
list(APPEND flags -D__unix__ -D__linux__)
list(APPEND build_flags -D__unix__ -D__linux__)
else()
# Assume some UNIX system otherwise
list(APPEND flags -D__unix__)
list(APPEND build_flags -D__unix__)
endif()

add_libclc_builtin_set(libspirv-${arch_suffix}
string( TOUPPER "CLC_${ARCH}" CLC_TARGET_DEFINE )

list( APPEND build_flags
-D__CLC_INTERNAL
-D${CLC_TARGET_DEFINE}
-I${CMAKE_CURRENT_SOURCE_DIR}/generic/include
# FIXME: Fix libclc to not require disabling this noisy warning
-Wno-bitwise-conditional-parentheses
)

if( NOT "${cpu}" STREQUAL "" )
list( APPEND build_flags -mcpu=${cpu} )
endif()

add_libclc_builtin_set(
ARCH ${ARCH}
ARCH_SUFFIX libspirv-${arch_suffix}
TRIPLE ${clang_triple}
TARGET_ENV libspirv
COMPILE_OPT ${flags}
TARGET_ENV libspirv-
COMPILE_FLAGS ${build_flags}
OPT_FLAGS ${opt_flags}
FILES ${libspirv_files}
LIB_FILES ${libspirv_lib_files}
GEN_FILES ${libspirv_gen_files}
ALIASES ${${d}_aliases}
GENERATE_TARGET "generate_convert_spirv.cl" "generate_convert_core.cl"
PARENT_TARGET libspirv-builtins)
PARENT_TARGET libspirv-builtins
)

add_libclc_builtin_set(clc-${arch_suffix}
add_libclc_builtin_set(
ARCH ${ARCH}
ARCH_SUFFIX ${arch_suffix}
TRIPLE ${clang_triple}
TARGET_ENV clc
COMPILE_OPT ${flags}
COMPILE_FLAGS ${build_flags}
OPT_FLAGS ${opt_flags}
FILES ${lib_files}
GEN_FILES ${lib_gen_files}
LIB_DEP libspirv-${arch_suffix}
LIB_FILES ${opencl_lib_files}
GEN_FILES ${opencl_gen_files}
ALIASES ${${d}_aliases}
GENERATE_TARGET "generate_convert_clc.cl"
PARENT_TARGET libclc-builtins)
PARENT_TARGET libopencl-builtins
)
endforeach( d )
endforeach( t )

Expand Down
Loading