Skip to content

Commit d7055ab

Browse files
authored
Enable precompiled headers (#297)
Also cherry-pick #249, #265 and #346 to address cross build issues. Signed-off-by: Haonan Yang <[email protected]>
1 parent 704b5a2 commit d7055ab

10 files changed

+374
-19
lines changed

CMakeLists.txt

+30-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,27 @@
1-
project( common_clang )
21
cmake_minimum_required(VERSION 3.4.3)
32

3+
if(NOT DEFINED BASE_LLVM_VERSION)
4+
set(BASE_LLVM_VERSION 16.0.0)
5+
endif(NOT DEFINED BASE_LLVM_VERSION)
6+
set(OPENCL_CLANG_VERSION ${BASE_LLVM_VERSION}.0)
7+
8+
if(NOT DEFINED OPENCL_CLANG_BUILD_EXTERNAL)
9+
# check if we build inside llvm or not
10+
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
11+
set(OPENCL_CLANG_BUILD_EXTERNAL YES)
12+
endif(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
13+
endif(NOT DEFINED OPENCL_CLANG_BUILD_EXTERNAL)
14+
15+
if(OPENCL_CLANG_BUILD_EXTERNAL)
16+
project(OPENCL_CLANG
17+
VERSION
18+
${OPENCL_CLANG_VERSION}
19+
LANGUAGES
20+
CXX
21+
C
22+
)
23+
endif()
24+
425
# Do not omit TARGET_OBJECTS expression from the SOURCES target
526
# property
627
# `cmake --help-policy CMP0051` for details.
@@ -14,13 +35,18 @@ set(CMAKE_MODULE_PATH
1435

1536
include(CMakeFunctions)
1637

38+
if(LLVM_USE_HOST_TOOLS AND OPENCL_CLANG_BUILD_EXTERNAL)
39+
include(CrossCompile)
40+
llvm_create_cross_target(${PROJECT_NAME} NATIVE "" Release)
41+
endif()
42+
1743
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
1844
set(USE_PREBUILT_LLVM ON)
1945

2046
add_definitions(-DUSE_PREBUILT_LLVM)
2147

2248
if(NOT PREFERRED_LLVM_VERSION)
23-
set(PREFERRED_LLVM_VERSION "12.0.0")
49+
set(PREFERRED_LLVM_VERSION "16.0.0")
2450
endif(NOT PREFERRED_LLVM_VERSION)
2551
message(STATUS "[OPENCL-CLANG] Looking for LLVM version ${PREFERRED_LLVM_VERSION}")
2652
find_package(LLVM ${PREFERRED_LLVM_VERSION} REQUIRED)
@@ -55,7 +81,7 @@ include(AddLLVM)
5581
include(TableGen)
5682

5783
if (NOT WIN32)
58-
add_subdirectory( linux_linker )
84+
add_subdirectory( linux_linker bin)
5985
endif()
6086

6187
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
@@ -137,7 +163,7 @@ endif(NOT USE_PREBUILT_LLVM)
137163
set (COMPILE_OPTIONS_TD opencl_clang_options.td)
138164
set (COMPILE_OPTIONS_INC opencl_clang_options.inc)
139165

140-
set(LLVM_TABLEGEN_EXE "llvm-tblgen")
166+
find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR})
141167
set(LLVM_TARGET_DEFINITIONS ${COMPILE_OPTIONS_TD})
142168
if(USE_PREBUILT_LLVM)
143169
set(TABLEGEN_ADDITIONAL -I ${LLVM_INCLUDE_DIRS})

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ To build opencl-clang as a standalone project, you need to obtain pre-built LLVM
5252
and SPIR-V Translator libraries. **Note:** currently this kind of build is
5353
supported on Linux only.
5454

55+
If opencl-clang is used as part of another CMake project, you will need to define `OPENCL_CLANG_BUILD_EXTERNAL`.
56+
5557
Integration with pre-built LLVM is done using standard `find_package` way as
5658
documented in [Embedding LLVM in your project](https://llvm.org/docs/CMake.html#embedding-llvm-in-your-project).
5759

@@ -68,7 +70,7 @@ make all -j`nproc`
6870

6971
##### Preferred LLVM version
7072

71-
By default, openclc-clang's cmake script is searching for LLVM 12.0.0. You can
73+
By default, openclc-clang's cmake script is searching for LLVM 16.0.0. You can
7274
override target version of LLVM by using the `PREFERRED_LLVM_VERSION` cmake
7375
option:
7476

cl_headers/CMakeLists.txt

+108-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
set(CL_HEADERS_LIB cl_headers)
2-
set(CLANG_COMMAND clang)
2+
set(CLANG_COMMAND $<TARGET_FILE:clang> )
3+
if(LLVM_USE_HOST_TOOLS AND NOT OPENCL_CLANG_BUILD_EXTERNAL)
4+
build_native_tool(clang CLANG_COMMAND)
5+
endif()
36
set(LINUX_RESOURCE_LINKER_COMMAND linux_resource_linker)
47

58
function(copy_file SRC DST)
@@ -19,19 +22,86 @@ else(USE_PREBUILT_LLVM)
1922
endif(USE_PREBUILT_LLVM)
2023
copy_file(${OPENCL_HEADERS_DIR}/opencl-c.h opencl-c.h)
2124
copy_file(${OPENCL_HEADERS_DIR}/opencl-c-base.h opencl-c-base.h)
25+
copy_file(${CMAKE_CURRENT_SOURCE_DIR}/module.modulemap module.modulemap)
2226

2327
add_custom_target (
2428
opencl.headers.target
2529
DEPENDS
30+
module.modulemap
2631
opencl-c.h
2732
opencl-c-base.h
2833
)
2934

35+
function(create_pcm DST MODULE HEADER OPTS DEPS)
36+
add_custom_command (
37+
OUTPUT ${DST}
38+
MAIN_DEPENDENCY ${MODMAP}
39+
DEPENDS ${HEADER} ${DEPS} ${CLANG_COMMAND}
40+
COMMAND
41+
${CLANG_COMMAND} -cc1 -x cl
42+
-I. -O0 ${OPTS}
43+
-fmodules -fmodule-name=${MODULE} -fmodule-map-file-home-is-cwd
44+
-emit-module "module.modulemap"
45+
-fno-validate-pch
46+
-o ${DST}
47+
VERBATIM
48+
COMMENT "Generating ${DST}"
49+
)
50+
endfunction(create_pcm)
51+
52+
set(CL12 "-cl-std=CL1.2")
53+
set(CL20 "-cl-std=CL2.0")
54+
set(CL30 "-cl-std=CL3.0")
55+
# Add OpenCL C 3.0 Optional features
56+
set(OPTS30 "-cl-ext=+__opencl_c_3d_image_writes,+__opencl_c_atomic_order_acq_rel,+__opencl_c_atomic_order_seq_cst,+__opencl_c_atomic_scope_device,+__opencl_c_atomic_scope_all_devices,+__opencl_c_device_enqueue,+__opencl_c_generic_address_space,+__opencl_c_images,+__opencl_c_int64,+__opencl_c_pipes,+__opencl_c_program_scope_global_variables,+__opencl_c_read_write_images,+__opencl_c_subgroups,+__opencl_c_work_group_collective_functions")
57+
set(OPTS30_FP64 "-D__opencl_c_fp64=1")
58+
59+
set(SPIR_TRIPLE "-triple;spir-unknown-unknown")
60+
set(SPIR64_TRIPLE "-triple;spir64-unknown-unknown")
61+
62+
if (BUILD_X64)
63+
set(HOST_TRIPLE "${SPIR64_TRIPLE}")
64+
else()
65+
set(HOST_TRIPLE "${SPIR_TRIPLE}")
66+
endif()
67+
68+
set(OPTS -cl-ext=+all,-cl_khr_fp64,-__opencl_c_fp64)
69+
create_pcm(opencl-c-12-spir.pcm cl12spir opencl-c-base.h "${SPIR_TRIPLE};${CL12};${OPTS}" "${DEPS}")
70+
create_pcm(opencl-c-20-spir.pcm cl20spir opencl-c-base.h "${SPIR_TRIPLE};${CL20};${OPTS}" "${DEPS}")
71+
create_pcm(opencl-c-30-spir.pcm cl30spir opencl-c-base.h "${SPIR_TRIPLE};${CL30};${OPTS};${OPTS30}" "${DEPS}")
72+
create_pcm(opencl-c-12-spir64.pcm cl12spir64 opencl-c-base.h "${SPIR64_TRIPLE};${CL12};${OPTS}" "${DEPS}")
73+
create_pcm(opencl-c-20-spir64.pcm cl20spir64 opencl-c-base.h "${SPIR64_TRIPLE};${CL20};${OPTS}" "${DEPS}")
74+
create_pcm(opencl-c-30-spir64.pcm cl30spir64 opencl-c-base.h "${SPIR64_TRIPLE};${CL30};${OPTS};${OPTS30}" "${DEPS}")
75+
set(OPTS -cl-ext=+all)
76+
create_pcm(opencl-c-12-spir-fp64.pcm cl12spirfp64 opencl-c-base.h "${SPIR_TRIPLE};${CL12};${OPTS}" "${DEPS}")
77+
create_pcm(opencl-c-20-spir-fp64.pcm cl20spirfp64 opencl-c-base.h "${SPIR_TRIPLE};${CL20};${OPTS}" "${DEPS}")
78+
create_pcm(opencl-c-30-spir-fp64.pcm cl30spirfp64 opencl-c-base.h "${SPIR_TRIPLE};${CL30};${OPTS};${OPTS30};${OPTS30_FP64}" "${DEPS}")
79+
create_pcm(opencl-c-12-spir64-fp64.pcm cl12spir64fp64 opencl-c-base.h "${SPIR64_TRIPLE};${CL12};${OPTS}" "${DEPS}")
80+
create_pcm(opencl-c-20-spir64-fp64.pcm cl20spir64fp64 opencl-c-base.h "${SPIR64_TRIPLE};${CL20};${OPTS}" "${DEPS}")
81+
create_pcm(opencl-c-30-spir64-fp64.pcm cl30spir64fp64 opencl-c-base.h "${SPIR64_TRIPLE};${CL30};${OPTS};${OPTS30};${OPTS30_FP64}" "${DEPS}")
82+
83+
add_custom_target (
84+
opencl.pcm.target
85+
DEPENDS
86+
opencl.headers.target
87+
opencl-c-12-spir.pcm
88+
opencl-c-20-spir.pcm
89+
opencl-c-30-spir.pcm
90+
opencl-c-12-spir64.pcm
91+
opencl-c-20-spir64.pcm
92+
opencl-c-30-spir64.pcm
93+
opencl-c-12-spir-fp64.pcm
94+
opencl-c-20-spir-fp64.pcm
95+
opencl-c-30-spir-fp64.pcm
96+
opencl-c-12-spir64-fp64.pcm
97+
opencl-c-20-spir64-fp64.pcm
98+
opencl-c-30-spir64-fp64.pcm
99+
)
30100

31101
function(pack_to_obj SRC DST TAG)
32102
add_custom_command (
33103
OUTPUT ${DST}
34-
DEPENDS ${SRC} ${LINUX_RESOURCE_LINKER_COMMAND}
104+
DEPENDS ${SRC} linux_resource_linker
35105
COMMAND ${LINUX_RESOURCE_LINKER_COMMAND} "${SRC}" "${DST}" "${TAG}"
36106
COMMENT "Packing ${SRC}"
37107
)
@@ -45,11 +115,46 @@ else()
45115
list(APPEND CL_HEADERS_SRC
46116
opencl-c.h.cpp
47117
opencl-c-base.h.cpp
118+
opencl-c-12-spir.mod.cpp
119+
opencl-c-20-spir.mod.cpp
120+
opencl-c-30-spir.mod.cpp
121+
opencl-c-12-spir64.mod.cpp
122+
opencl-c-20-spir64.mod.cpp
123+
opencl-c-30-spir64.mod.cpp
124+
opencl-c-12-spir-fp64.mod.cpp
125+
opencl-c-20-spir-fp64.mod.cpp
126+
opencl-c-30-spir-fp64.mod.cpp
127+
opencl-c-12-spir64-fp64.mod.cpp
128+
opencl-c-20-spir64-fp64.mod.cpp
129+
opencl-c-30-spir64-fp64.mod.cpp
130+
module.modulemap.cpp
48131
)
132+
# note the .pcm -> .mod extension change
133+
# this is a workaround for CMake bug that caused
134+
# dependency cycle in generated build rules
135+
pack_to_obj(opencl-c-12-spir.pcm opencl-c-12-spir.mod.cpp "PCM_OPENCL_C_12_SPIR_PCM")
136+
pack_to_obj(opencl-c-20-spir.pcm opencl-c-20-spir.mod.cpp "PCM_OPENCL_C_20_SPIR_PCM")
137+
pack_to_obj(opencl-c-30-spir.pcm opencl-c-30-spir.mod.cpp "PCM_OPENCL_C_30_SPIR_PCM")
138+
pack_to_obj(opencl-c-12-spir64.pcm opencl-c-12-spir64.mod.cpp "PCM_OPENCL_C_12_SPIR64_PCM")
139+
pack_to_obj(opencl-c-20-spir64.pcm opencl-c-20-spir64.mod.cpp "PCM_OPENCL_C_20_SPIR64_PCM")
140+
pack_to_obj(opencl-c-30-spir64.pcm opencl-c-30-spir64.mod.cpp "PCM_OPENCL_C_30_SPIR64_PCM")
141+
pack_to_obj(opencl-c-12-spir-fp64.pcm opencl-c-12-spir-fp64.mod.cpp "PCM_OPENCL_C_12_SPIR_FP64_PCM")
142+
pack_to_obj(opencl-c-20-spir-fp64.pcm opencl-c-20-spir-fp64.mod.cpp "PCM_OPENCL_C_20_SPIR_FP64_PCM")
143+
pack_to_obj(opencl-c-30-spir-fp64.pcm opencl-c-30-spir-fp64.mod.cpp "PCM_OPENCL_C_30_SPIR_FP64_PCM")
144+
pack_to_obj(opencl-c-12-spir64-fp64.pcm opencl-c-12-spir64-fp64.mod.cpp "PCM_OPENCL_C_12_SPIR64_FP64_PCM")
145+
pack_to_obj(opencl-c-20-spir64-fp64.pcm opencl-c-20-spir64-fp64.mod.cpp "PCM_OPENCL_C_20_SPIR64_FP64_PCM")
146+
pack_to_obj(opencl-c-30-spir64-fp64.pcm opencl-c-30-spir64-fp64.mod.cpp "PCM_OPENCL_C_30_SPIR64_FP64_PCM")
147+
pack_to_obj(module.modulemap module.modulemap.cpp "PCM_OPENCL_C_MODULE_MAP")
49148
endif()
50149

51150
add_library(${CL_HEADERS_LIB} OBJECT
52151
${CL_HEADERS_SRC}
53152
)
54153

55-
add_dependencies(${CL_HEADERS_LIB} opencl.headers.target)
154+
add_dependencies(${CL_HEADERS_LIB} opencl.pcm.target)
155+
install(FILES
156+
${CMAKE_CURRENT_BINARY_DIR}/opencl-c.h
157+
${CMAKE_CURRENT_BINARY_DIR}/opencl-c-base.h
158+
${CMAKE_CURRENT_BINARY_DIR}/module.modulemap
159+
DESTINATION include/cclang
160+
)

cl_headers/OpenCL.rc

+15-2
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,18 @@ END
1111
// Module with OpenCL C declarations with corresponding headers
1212
//
1313

14-
OPENCL_C_H PCM "opencl-c.h"
15-
OPENCL_C_BASE_H PCM "opencl-c-base.h"
14+
OPENCL_C_H PCM "opencl-c.h"
15+
OPENCL_C_BASE_H PCM "opencl-c-base.h"
16+
OPENCL_C_12_SPIR_PCM PCM "opencl-c-12-spir.pcm"
17+
OPENCL_C_20_SPIR_PCM PCM "opencl-c-20-spir.pcm"
18+
OPENCL_C_30_SPIR_PCM PCM "opencl-c-30-spir.pcm"
19+
OPENCL_C_12_SPIR64_PCM PCM "opencl-c-12-spir64.pcm"
20+
OPENCL_C_20_SPIR64_PCM PCM "opencl-c-20-spir64.pcm"
21+
OPENCL_C_30_SPIR64_PCM PCM "opencl-c-30-spir64.pcm"
22+
OPENCL_C_12_SPIR_FP64_PCM PCM "opencl-c-12-spir-fp64.pcm"
23+
OPENCL_C_20_SPIR_FP64_PCM PCM "opencl-c-20-spir-fp64.pcm"
24+
OPENCL_C_30_SPIR_FP64_PCM PCM "opencl-c-30-spir-fp64.pcm"
25+
OPENCL_C_12_SPIR64_FP64_PCM PCM "opencl-c-12-spir64-fp64.pcm"
26+
OPENCL_C_20_SPIR64_FP64_PCM PCM "opencl-c-20-spir64-fp64.pcm"
27+
OPENCL_C_30_SPIR64_FP64_PCM PCM "opencl-c-30-spir64-fp64.pcm"
28+
OPENCL_C_MODULE_MAP PCM "module.modulemap"

cl_headers/module.modulemap

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
module cl12spir {
2+
header "opencl-c.h"
3+
header "opencl-c-base.h"
4+
export *
5+
}
6+
module cl20spir {
7+
header "opencl-c.h"
8+
header "opencl-c-base.h"
9+
export *
10+
}
11+
module cl30spir {
12+
header "opencl-c.h"
13+
header "opencl-c-base.h"
14+
export *
15+
}
16+
module cl12spir64 {
17+
header "opencl-c.h"
18+
header "opencl-c-base.h"
19+
export *
20+
}
21+
module cl20spir64 {
22+
header "opencl-c.h"
23+
header "opencl-c-base.h"
24+
export *
25+
}
26+
module cl30spir64 {
27+
header "opencl-c.h"
28+
header "opencl-c-base.h"
29+
export *
30+
}
31+
module cl12spirfp64 {
32+
header "opencl-c.h"
33+
header "opencl-c-base.h"
34+
export *
35+
}
36+
module cl20spirfp64 {
37+
header "opencl-c.h"
38+
header "opencl-c-base.h"
39+
export *
40+
}
41+
module cl30spirfp64 {
42+
header "opencl-c.h"
43+
header "opencl-c-base.h"
44+
export *
45+
}
46+
module cl12spir64fp64 {
47+
header "opencl-c.h"
48+
header "opencl-c-base.h"
49+
export *
50+
}
51+
module cl20spir64fp64 {
52+
header "opencl-c.h"
53+
header "opencl-c-base.h"
54+
export *
55+
}
56+
module cl30spir64fp64 {
57+
header "opencl-c.h"
58+
header "opencl-c-base.h"
59+
export *
60+
}

cl_headers/resource.h

+15-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,20 @@ Copyright (c) Intel Corporation (2009-2017).
1919
#ifndef __RESOURCE__
2020
#define __RESOURCE__
2121

22-
#define OPENCL_C_H "OPENCL_C_H"
23-
#define OPENCL_C_BASE_H "OPENCL_C_BASE_H"
22+
#define OPENCL_C_H "OPENCL_C_H"
23+
#define OPENCL_C_BASE_H "OPENCL_C_BASE_H"
24+
#define OPENCL_C_12_SPIR_PCM "OPENCL_C_12_SPIR_PCM"
25+
#define OPENCL_C_20_SPIR_PCM "OPENCL_C_20_SPIR_PCM"
26+
#define OPENCL_C_30_SPIR_PCM "OPENCL_C_30_SPIR_PCM"
27+
#define OPENCL_C_12_SPIR64_PCM "OPENCL_C_12_SPIR64_PCM"
28+
#define OPENCL_C_20_SPIR64_PCM "OPENCL_C_20_SPIR64_PCM"
29+
#define OPENCL_C_30_SPIR64_PCM "OPENCL_C_30_SPIR64_PCM"
30+
#define OPENCL_C_12_SPIR_FP64_PCM "OPENCL_C_12_SPIR_FP64_PCM"
31+
#define OPENCL_C_20_SPIR_FP64_PCM "OPENCL_C_20_SPIR_FP64_PCM"
32+
#define OPENCL_C_30_SPIR_FP64_PCM "OPENCL_C_30_SPIR_FP64_PCM"
33+
#define OPENCL_C_12_SPIR64_FP64_PCM "OPENCL_C_12_SPIR64_FP64_PCM"
34+
#define OPENCL_C_20_SPIR64_FP64_PCM "OPENCL_C_20_SPIR64_FP64_PCM"
35+
#define OPENCL_C_30_SPIR64_FP64_PCM "OPENCL_C_30_SPIR64_FP64_PCM"
36+
#define OPENCL_C_MODULE_MAP "OPENCL_C_MODULE_MAP"
2437

2538
#endif /* __RESOURCE__ */

common_clang.cpp

+19-6
Original file line numberDiff line numberDiff line change
@@ -113,17 +113,30 @@ void CommonClangInitialize() {
113113
}
114114

115115
static bool GetHeaders(std::vector<Resource> &Result) {
116-
struct {const char *ID; const char *Name;} Headers[] = {
117-
{OPENCL_C_H, "opencl-c.h"},
118-
{OPENCL_C_BASE_H, "opencl-c-base.h"},
119-
};
116+
struct {
117+
const char *ID;
118+
const char *Name;
119+
} Headers[] = {{OPENCL_C_H, "opencl-c.h"},
120+
{OPENCL_C_BASE_H, "opencl-c-base.h"},
121+
{OPENCL_C_12_SPIR_PCM, "opencl-c-12-spir.pcm"},
122+
{OPENCL_C_20_SPIR_PCM, "opencl-c-20-spir.pcm"},
123+
{OPENCL_C_30_SPIR_PCM, "opencl-c-30-spir.pcm"},
124+
{OPENCL_C_12_SPIR64_PCM, "opencl-c-12-spir64.pcm"},
125+
{OPENCL_C_20_SPIR64_PCM, "opencl-c-20-spir64.pcm"},
126+
{OPENCL_C_30_SPIR64_PCM, "opencl-c-30-spir64.pcm"},
127+
{OPENCL_C_12_SPIR_FP64_PCM, "opencl-c-12-spir-fp64.pcm"},
128+
{OPENCL_C_20_SPIR_FP64_PCM, "opencl-c-20-spir-fp64.pcm"},
129+
{OPENCL_C_30_SPIR_FP64_PCM, "opencl-c-30-spir-fp64.pcm"},
130+
{OPENCL_C_12_SPIR64_FP64_PCM, "opencl-c-12-spir64-fp64.pcm"},
131+
{OPENCL_C_20_SPIR64_FP64_PCM, "opencl-c-20-spir64-fp64.pcm"},
132+
{OPENCL_C_30_SPIR64_FP64_PCM, "opencl-c-30-spir64-fp64.pcm"},
133+
{OPENCL_C_MODULE_MAP, "module.modulemap"}};
120134

121135
Result.clear();
122136
Result.reserve(sizeof(Headers) / sizeof(*Headers));
123137

124138
ResourceManager &RM = ResourceManager::instance();
125-
126-
for (auto Header:Headers) {
139+
for (auto Header : Headers) {
127140
Resource R = RM.get_resource(Header.Name, Header.ID, "PCM", true);
128141
if (!R) {
129142
assert(0 && "Resource not found");

common_clang.map

+13
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,19 @@ global:
88
GetKernelArgInfo;
99
PCM_OPENCL_C_H*;
1010
PCM_OPENCL_C_BASE_H*;
11+
PCM_OPENCL_C_12_SPIR_PCM*;
12+
PCM_OPENCL_C_20_SPIR_PCM*;
13+
PCM_OPENCL_C_30_SPIR_PCM*;
14+
PCM_OPENCL_C_12_SPIR64_PCM*;
15+
PCM_OPENCL_C_20_SPIR64_PCM*;
16+
PCM_OPENCL_C_30_SPIR64_PCM*;
17+
PCM_OPENCL_C_12_SPIR_FP64_PCM*;
18+
PCM_OPENCL_C_20_SPIR_FP64_PCM*;
19+
PCM_OPENCL_C_30_SPIR_FP64_PCM*;
20+
PCM_OPENCL_C_12_SPIR64_FP64_PCM*;
21+
PCM_OPENCL_C_20_SPIR64_FP64_PCM*;
22+
PCM_OPENCL_C_30_SPIR64_FP64_PCM*;
23+
PCM_OPENCL_C_MODULE_MAP*;
1124
};
1225
local: *;
1326
};

0 commit comments

Comments
 (0)