Skip to content

Commit e577f29

Browse files
committed
[Clang] Add support for missing OpenCL extensions
This patch adds handling for the following OpenCL extensions, passed as `-cl-ext` arguments to Clang: - cl_khr_extended_bit_ops - cl_khr_integer_dot_product - cl_khr_subgroup_ballot - cl_khr_subgroup_clustered_reduce - cl_khr_subgroup_extended_types - cl_khr_subgroup_named_barrier - cl_khr_subgroup_non_uniform_arithmetic - cl_khr_subgroup_non_uniform_vote - cl_khr_subgroup_rotate - cl_khr_subgroup_shuffle - cl_khr_subgroup_shuffle_relative - cl_khr_work_group_uniform_arithmetic - cl_intel_subgroups_char - cl_intel_subgroups_long
1 parent d6301b2 commit e577f29

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

clang/include/clang/Basic/OpenCLExtensions.def

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,29 @@ OPENCL_EXTENSION(__cl_clang_variadic_functions, true, 100)
9090
OPENCL_EXTENSION(__cl_clang_non_portable_kernel_param_types, true, 100)
9191
OPENCL_EXTENSION(__cl_clang_bitfields, true, 100)
9292

93+
// Khronos OpenCL extensions
94+
OPENCL_EXTENSION(cl_khr_extended_bit_ops, true, 100)
95+
OPENCL_EXTENSION(cl_khr_integer_dot_product, true, 100)
96+
OPENCL_EXTENSION(cl_khr_subgroup_ballot, true, 100)
97+
OPENCL_EXTENSION(cl_khr_subgroup_clustered_reduce, true, 100)
98+
OPENCL_EXTENSION(cl_khr_subgroup_extended_types, true, 100)
99+
OPENCL_EXTENSION(cl_khr_subgroup_named_barrier, true, 100)
100+
OPENCL_EXTENSION(cl_khr_subgroup_non_uniform_arithmetic, true, 100)
101+
OPENCL_EXTENSION(cl_khr_subgroup_non_uniform_vote, true, 100)
102+
OPENCL_EXTENSION(cl_khr_subgroup_rotate, true, 100)
103+
OPENCL_EXTENSION(cl_khr_subgroup_shuffle, true, 100)
104+
OPENCL_EXTENSION(cl_khr_subgroup_shuffle_relative, true, 100)
105+
OPENCL_EXTENSION(cl_khr_work_group_uniform_arithmetic, true, 200)
106+
93107
// AMD OpenCL extensions
94108
OPENCL_EXTENSION(cl_amd_media_ops, true, 100)
95109
OPENCL_EXTENSION(cl_amd_media_ops2, true, 100)
96110

97111
// Intel OpenCL extensions
98112
OPENCL_EXTENSION(cl_intel_subgroups, true, 120)
113+
OPENCL_EXTENSION(cl_intel_subgroups_char, true, 120)
99114
OPENCL_EXTENSION(cl_intel_subgroups_short, true, 120)
115+
OPENCL_EXTENSION(cl_intel_subgroups_long, true, 120)
100116
OPENCL_EXTENSION(cl_intel_device_side_avc_motion_estimation, true, 120)
101117

102118
// OpenCL C 3.0 features (6.2.1. Features)
@@ -112,6 +128,11 @@ OPENCL_OPTIONALCOREFEATURE(__opencl_c_program_scope_global_variables, false, 300
112128
OPENCL_OPTIONALCOREFEATURE(__opencl_c_fp64, false, 300, OCL_C_30)
113129
OPENCL_OPTIONALCOREFEATURE(__opencl_c_images, false, 300, OCL_C_30)
114130

131+
// Features enabled by the Khronos extensions
132+
OPENCL_GENERIC_EXTENSION(__opencl_c_work_group_collective_functions, false, 300, 0)
133+
OPENCL_GENERIC_EXTENSION(__opencl_c_integer_dot_product_input_4x8bit, false, 300, 0)
134+
OPENCL_GENERIC_EXTENSION(__opencl_c_integer_dot_product_input_4x8bit_packed, false, 300, 0)
135+
115136
#undef OPENCL_OPTIONALCOREFEATURE
116137
#undef OPENCL_COREFEATURE
117138
#undef OPENCL_GENERIC_EXTENSION

clang/lib/Basic/OpenCLOptions.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,14 @@ static const std::pair<StringRef, StringRef> DependentFeaturesList[] = {
1818
{"__opencl_c_3d_image_writes", "__opencl_c_images"},
1919
{"__opencl_c_pipes", "__opencl_c_generic_address_space"},
2020
{"__opencl_c_device_enqueue", "__opencl_c_generic_address_space"},
21-
{"__opencl_c_device_enqueue", "__opencl_c_program_scope_global_variables"}};
21+
{"__opencl_c_device_enqueue", "__opencl_c_program_scope_global_variables"},
22+
{"__opencl_c_work_group_collective_functions",
23+
"cl_khr_work_group_uniform_arithmetic"},
24+
{"__opencl_c_integer_dot_product_input_4x8bit",
25+
"cl_khr_integer_dot_product"},
26+
{"__opencl_c_integer_dot_product_input_4x8bit_packed",
27+
"cl_khr_integer_dot_product"},
28+
};
2229

2330
// Extensions and equivalent feature pairs.
2431
static const std::pair<StringRef, StringRef> FeatureExtensionMap[] = {

0 commit comments

Comments
 (0)