Skip to content

Commit 0eec88e

Browse files
authored
Merge pull request #278 from haonanya/PCH3.0
[OpenCL] Enable PCH for OpenCL3.0
2 parents a32fbd4 + 2703311 commit 0eec88e

File tree

7 files changed

+72
-13
lines changed

7 files changed

+72
-13
lines changed

cl_headers/CMakeLists.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ endfunction(create_pcm)
4747

4848
set(CL12 "-cl-std=CL1.2")
4949
set(CL20 "-cl-std=CL2.0")
50+
set(CL30 "-cl-std=CL3.0")
51+
# Add OpenCL C 3.0 Optional features
52+
set(OPTS30 "-cl-ext=+__opencl_c_atomic_order_seq_cst,+__opencl_c_atomic_scope_device,+__opencl_c_generic_address_space,+__opencl_c_pipes,+__opencl_c_subgroups,+__opencl_c_work_group_collective_functions")
5053

5154
set(SPIR_TRIPLE "-triple;spir-unknown-unknown")
5255
set(SPIR64_TRIPLE "-triple;spir64-unknown-unknown")
@@ -59,26 +62,34 @@ endif()
5962
set(OPTS -cl-ext=+all,-cl_khr_fp64)
6063
create_pcm(opencl-c-12-spir.pcm cl12spir opencl-c-base.h "${SPIR_TRIPLE};${CL12};${OPTS}" "${DEPS}")
6164
create_pcm(opencl-c-20-spir.pcm cl20spir opencl-c-base.h "${SPIR_TRIPLE};${CL20};${OPTS}" "${DEPS}")
65+
create_pcm(opencl-c-30-spir.pcm cl30spir opencl-c-base.h "${SPIR_TRIPLE};${CL30};${OPTS};${OPTS30}" "${DEPS}")
6266
create_pcm(opencl-c-12-spir64.pcm cl12spir64 opencl-c-base.h "${SPIR64_TRIPLE};${CL12};${OPTS}" "${DEPS}")
6367
create_pcm(opencl-c-20-spir64.pcm cl20spir64 opencl-c-base.h "${SPIR64_TRIPLE};${CL20};${OPTS}" "${DEPS}")
68+
create_pcm(opencl-c-30-spir64.pcm cl30spir64 opencl-c-base.h "${SPIR64_TRIPLE};${CL30};${OPTS};${OPTS30}" "${DEPS}")
6469
set(OPTS -cl-ext=+all)
6570
create_pcm(opencl-c-12-spir-fp64.pcm cl12spirfp64 opencl-c-base.h "${SPIR_TRIPLE};${CL12};${OPTS}" "${DEPS}")
6671
create_pcm(opencl-c-20-spir-fp64.pcm cl20spirfp64 opencl-c-base.h "${SPIR_TRIPLE};${CL20};${OPTS}" "${DEPS}")
72+
create_pcm(opencl-c-30-spir-fp64.pcm cl30spirfp64 opencl-c-base.h "${SPIR_TRIPLE};${CL30};${OPTS};${OPTS30}" "${DEPS}")
6773
create_pcm(opencl-c-12-spir64-fp64.pcm cl12spir64fp64 opencl-c-base.h "${SPIR64_TRIPLE};${CL12};${OPTS}" "${DEPS}")
6874
create_pcm(opencl-c-20-spir64-fp64.pcm cl20spir64fp64 opencl-c-base.h "${SPIR64_TRIPLE};${CL20};${OPTS}" "${DEPS}")
75+
create_pcm(opencl-c-30-spir64-fp64.pcm cl30spir64fp64 opencl-c-base.h "${SPIR64_TRIPLE};${CL30};${OPTS};${OPTS30}" "${DEPS}")
6976

7077
add_custom_target (
7178
opencl.pcm.target
7279
DEPENDS
7380
opencl.headers.target
7481
opencl-c-12-spir.pcm
7582
opencl-c-20-spir.pcm
83+
opencl-c-30-spir.pcm
7684
opencl-c-12-spir64.pcm
7785
opencl-c-20-spir64.pcm
86+
opencl-c-30-spir64.pcm
7887
opencl-c-12-spir-fp64.pcm
7988
opencl-c-20-spir-fp64.pcm
89+
opencl-c-30-spir-fp64.pcm
8090
opencl-c-12-spir64-fp64.pcm
8191
opencl-c-20-spir64-fp64.pcm
92+
opencl-c-30-spir64-fp64.pcm
8293
)
8394

8495
function(pack_to_obj SRC DST TAG)
@@ -101,25 +112,33 @@ else()
101112
opencl-c-base.h.cpp
102113
opencl-c-12-spir.mod.cpp
103114
opencl-c-20-spir.mod.cpp
115+
opencl-c-30-spir.mod.cpp
104116
opencl-c-12-spir64.mod.cpp
105117
opencl-c-20-spir64.mod.cpp
118+
opencl-c-30-spir64.mod.cpp
106119
opencl-c-12-spir-fp64.mod.cpp
107120
opencl-c-20-spir-fp64.mod.cpp
121+
opencl-c-30-spir-fp64.mod.cpp
108122
opencl-c-12-spir64-fp64.mod.cpp
109123
opencl-c-20-spir64-fp64.mod.cpp
124+
opencl-c-30-spir64-fp64.mod.cpp
110125
module.modulemap.cpp
111126
)
112127
# note the .pcm -> .mod extension change
113128
# this is a workaround for CMake bug that caused
114129
# dependency cycle in generated build rules
115130
pack_to_obj(opencl-c-12-spir.pcm opencl-c-12-spir.mod.cpp "PCM_OPENCL_C_12_SPIR_PCM")
116131
pack_to_obj(opencl-c-20-spir.pcm opencl-c-20-spir.mod.cpp "PCM_OPENCL_C_20_SPIR_PCM")
132+
pack_to_obj(opencl-c-30-spir.pcm opencl-c-30-spir.mod.cpp "PCM_OPENCL_C_30_SPIR_PCM")
117133
pack_to_obj(opencl-c-12-spir64.pcm opencl-c-12-spir64.mod.cpp "PCM_OPENCL_C_12_SPIR64_PCM")
118134
pack_to_obj(opencl-c-20-spir64.pcm opencl-c-20-spir64.mod.cpp "PCM_OPENCL_C_20_SPIR64_PCM")
135+
pack_to_obj(opencl-c-30-spir64.pcm opencl-c-30-spir64.mod.cpp "PCM_OPENCL_C_30_SPIR64_PCM")
119136
pack_to_obj(opencl-c-12-spir-fp64.pcm opencl-c-12-spir-fp64.mod.cpp "PCM_OPENCL_C_12_SPIR_FP64_PCM")
120137
pack_to_obj(opencl-c-20-spir-fp64.pcm opencl-c-20-spir-fp64.mod.cpp "PCM_OPENCL_C_20_SPIR_FP64_PCM")
138+
pack_to_obj(opencl-c-30-spir-fp64.pcm opencl-c-30-spir-fp64.mod.cpp "PCM_OPENCL_C_30_SPIR_FP64_PCM")
121139
pack_to_obj(opencl-c-12-spir64-fp64.pcm opencl-c-12-spir64-fp64.mod.cpp "PCM_OPENCL_C_12_SPIR64_FP64_PCM")
122140
pack_to_obj(opencl-c-20-spir64-fp64.pcm opencl-c-20-spir64-fp64.mod.cpp "PCM_OPENCL_C_20_SPIR64_FP64_PCM")
141+
pack_to_obj(opencl-c-30-spir64-fp64.pcm opencl-c-30-spir64-fp64.mod.cpp "PCM_OPENCL_C_30_SPIR64_FP64_PCM")
123142
pack_to_obj(module.modulemap module.modulemap.cpp "PCM_OPENCL_C_MODULE_MAP")
124143

125144
endif()

cl_headers/OpenCL.rc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@ OPENCL_C_BASE_H PCM "opencl-c-base.h"
1616

1717
OPENCL_C_12_SPIR_PCM PCM "opencl-c-12-spir.pcm"
1818
OPENCL_C_20_SPIR_PCM PCM "opencl-c-20-spir.pcm"
19+
OPENCL_C_30_SPIR_PCM PCM "opencl-c-30-spir.pcm"
1920
OPENCL_C_12_SPIR64_PCM PCM "opencl-c-12-spir64.pcm"
2021
OPENCL_C_20_SPIR64_PCM PCM "opencl-c-20-spir64.pcm"
22+
OPENCL_C_30_SPIR64_PCM PCM "opencl-c-30-spir64.pcm"
2123
OPENCL_C_12_SPIR_FP64_PCM PCM "opencl-c-12-spir-fp64.pcm"
2224
OPENCL_C_20_SPIR_FP64_PCM PCM "opencl-c-20-spir-fp64.pcm"
25+
OPENCL_C_30_SPIR_FP64_PCM PCM "opencl-c-30-spir-fp64.pcm"
2326
OPENCL_C_12_SPIR64_FP64_PCM PCM "opencl-c-12-spir64-fp64.pcm"
2427
OPENCL_C_20_SPIR64_FP64_PCM PCM "opencl-c-20-spir64-fp64.pcm"
28+
OPENCL_C_30_SPIR64_FP64_PCM PCM "opencl-c-30-spir64-fp64.pcm"
2529

2630
OPENCL_C_MODULE_MAP PCM "module.modulemap"

cl_headers/module.modulemap

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ module cl20spir {
88
header "opencl-c-base.h"
99
export *
1010
}
11+
module cl30spir {
12+
header "opencl-c.h"
13+
header "opencl-c-base.h"
14+
export *
15+
}
1116
module cl12spir64 {
1217
header "opencl-c.h"
1318
header "opencl-c-base.h"
@@ -18,6 +23,11 @@ module cl20spir64 {
1823
header "opencl-c-base.h"
1924
export *
2025
}
26+
module cl30spir64 {
27+
header "opencl-c.h"
28+
header "opencl-c-base.h"
29+
export *
30+
}
2131
module cl12spirfp64 {
2232
header "opencl-c.h"
2333
header "opencl-c-base.h"
@@ -28,6 +38,11 @@ module cl20spirfp64 {
2838
header "opencl-c-base.h"
2939
export *
3040
}
41+
module cl30spirfp64 {
42+
header "opencl-c.h"
43+
header "opencl-c-base.h"
44+
export *
45+
}
3146
module cl12spir64fp64 {
3247
header "opencl-c.h"
3348
header "opencl-c-base.h"
@@ -38,3 +53,8 @@ module cl20spir64fp64 {
3853
header "opencl-c-base.h"
3954
export *
4055
}
56+
module cl30spir64fp64 {
57+
header "opencl-c.h"
58+
header "opencl-c-base.h"
59+
export *
60+
}

cl_headers/resource.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,16 @@ Copyright (c) Intel Corporation (2009-2017).
2424

2525
#define OPENCL_C_12_SPIR_PCM "OPENCL_C_12_SPIR_PCM"
2626
#define OPENCL_C_20_SPIR_PCM "OPENCL_C_20_SPIR_PCM"
27+
#define OPENCL_C_30_SPIR_PCM "OPENCL_C_30_SPIR_PCM"
2728
#define OPENCL_C_12_SPIR64_PCM "OPENCL_C_12_SPIR64_PCM"
2829
#define OPENCL_C_20_SPIR64_PCM "OPENCL_C_20_SPIR64_PCM"
30+
#define OPENCL_C_30_SPIR64_PCM "OPENCL_C_30_SPIR64_PCM"
2931
#define OPENCL_C_12_SPIR_FP64_PCM "OPENCL_C_12_SPIR_FP64_PCM"
3032
#define OPENCL_C_20_SPIR_FP64_PCM "OPENCL_C_20_SPIR_FP64_PCM"
33+
#define OPENCL_C_30_SPIR_FP64_PCM "OPENCL_C_30_SPIR_FP64_PCM"
3134
#define OPENCL_C_12_SPIR64_FP64_PCM "OPENCL_C_12_SPIR64_FP64_PCM"
3235
#define OPENCL_C_20_SPIR64_FP64_PCM "OPENCL_C_20_SPIR64_FP64_PCM"
36+
#define OPENCL_C_30_SPIR64_FP64_PCM "OPENCL_C_30_SPIR64_FP64_PCM"
3337
#define OPENCL_C_MODULE_MAP "OPENCL_C_MODULE_MAP"
3438

3539
#endif /* __RESOURCE__ */

common_clang.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,16 @@ static bool GetHeaders(std::vector<Resource> &Result) {
128128
{OPENCL_C_BASE_H, "opencl-c-base.h"},
129129
{OPENCL_C_12_SPIR_PCM, "opencl-c-12-spir.pcm"},
130130
{OPENCL_C_20_SPIR_PCM, "opencl-c-20-spir.pcm"},
131+
{OPENCL_C_30_SPIR_PCM, "opencl-c-30-spir.pcm"},
131132
{OPENCL_C_12_SPIR64_PCM, "opencl-c-12-spir64.pcm"},
132133
{OPENCL_C_20_SPIR64_PCM, "opencl-c-20-spir64.pcm"},
134+
{OPENCL_C_30_SPIR64_PCM, "opencl-c-30-spir64.pcm"},
133135
{OPENCL_C_12_SPIR_FP64_PCM, "opencl-c-12-spir-fp64.pcm"},
134136
{OPENCL_C_20_SPIR_FP64_PCM, "opencl-c-20-spir-fp64.pcm"},
137+
{OPENCL_C_30_SPIR_FP64_PCM, "opencl-c-30-spir-fp64.pcm"},
135138
{OPENCL_C_12_SPIR64_FP64_PCM, "opencl-c-12-spir64-fp64.pcm"},
136139
{OPENCL_C_20_SPIR64_FP64_PCM, "opencl-c-20-spir64-fp64.pcm"},
140+
{OPENCL_C_30_SPIR64_FP64_PCM, "opencl-c-30-spir64-fp64.pcm"},
137141
{OPENCL_C_MODULE_MAP, "module.modulemap"}
138142
};
139143

common_clang.map

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,16 @@ global:
1010
PCM_OPENCL_C_BASE_H*;
1111
PCM_OPENCL_C_12_SPIR_PCM*;
1212
PCM_OPENCL_C_20_SPIR_PCM*;
13+
PCM_OPENCL_C_30_SPIR_PCM*;
1314
PCM_OPENCL_C_12_SPIR64_PCM*;
1415
PCM_OPENCL_C_20_SPIR64_PCM*;
16+
PCM_OPENCL_C_30_SPIR64_PCM*;
1517
PCM_OPENCL_C_12_SPIR_FP64_PCM*;
1618
PCM_OPENCL_C_20_SPIR_FP64_PCM*;
19+
PCM_OPENCL_C_30_SPIR_FP64_PCM*;
1720
PCM_OPENCL_C_12_SPIR64_FP64_PCM*;
1821
PCM_OPENCL_C_20_SPIR64_FP64_PCM*;
22+
PCM_OPENCL_C_30_SPIR64_FP64_PCM*;
1923
PCM_OPENCL_C_MODULE_MAP*;
2024
};
2125
local: *;

options_compile.cpp

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -297,35 +297,39 @@ std::string EffectiveOptionsFilter::processOptions(const OpenCLArgList &args,
297297
bool useModules = !std::any_of(extMap.begin(), extMap.end(),
298298
[](const auto& p) {return p.second == false;});
299299

300-
if (!useFdeclareOpenCLBuiltins && useModules && (iCLStdSet < 300)) {
300+
if (!useFdeclareOpenCLBuiltins && useModules) {
301301
effectiveArgs.push_back("-fmodules");
302302
if (!fp64Enabled) {
303303
if (szTriple.find("spir64") != szTriple.npos) {
304-
if (iCLStdSet <= 120) {
304+
if (iCLStdSet <= 120)
305305
effectiveArgs.push_back("-fmodule-file=opencl-c-12-spir64.pcm");
306-
} else {
306+
else if (iCLStdSet == 200)
307307
effectiveArgs.push_back("-fmodule-file=opencl-c-20-spir64.pcm");
308-
}
308+
else if (iCLStdSet == 300)
309+
effectiveArgs.push_back("-fmodule-file=opencl-c-30-spir64.pcm");
309310
} else if (szTriple.find("spir") != szTriple.npos) {
310-
if (iCLStdSet <= 120) {
311+
if (iCLStdSet <= 120)
311312
effectiveArgs.push_back("-fmodule-file=opencl-c-12-spir.pcm");
312-
} else {
313+
else if (iCLStdSet == 200)
313314
effectiveArgs.push_back("-fmodule-file=opencl-c-20-spir.pcm");
314-
}
315+
else if (iCLStdSet == 300)
316+
effectiveArgs.push_back("-fmodule-file=opencl-c-30-spir.pcm");
315317
}
316318
} else {
317319
if (szTriple.find("spir64") != szTriple.npos) {
318-
if (iCLStdSet <= 120) {
320+
if (iCLStdSet <= 120)
319321
effectiveArgs.push_back("-fmodule-file=opencl-c-12-spir64-fp64.pcm");
320-
} else {
322+
else if (iCLStdSet == 200)
321323
effectiveArgs.push_back("-fmodule-file=opencl-c-20-spir64-fp64.pcm");
322-
}
324+
else if (iCLStdSet == 300)
325+
effectiveArgs.push_back("-fmodule-file=opencl-c-30-spir64-fp64.pcm");
323326
} else if (szTriple.find("spir") != szTriple.npos) {
324-
if (iCLStdSet <= 120) {
327+
if (iCLStdSet <= 120)
325328
effectiveArgs.push_back("-fmodule-file=opencl-c-12-spir-fp64.pcm");
326-
} else {
329+
else if (iCLStdSet == 200)
327330
effectiveArgs.push_back("-fmodule-file=opencl-c-20-spir-fp64.pcm");
328-
}
331+
else if (iCLStdSet == 300)
332+
effectiveArgs.push_back("-fmodule-file=opencl-c-30-spir-fp64.pcm");
329333
}
330334
}
331335
}

0 commit comments

Comments
 (0)