mirror of
https://github.com/intel/llvm.git
synced 2026-01-14 20:10:50 +08:00
[OpenCL] Add missing OpenCL 3.0 features to OpenCLExtensions.def; revert header-only macros (#168016)
Adds the remaining optional feature macros from the OpenCL C 3.0 spec (section 6.2.1 table). Targets can now enable these via OpenCLFeaturesMap returned by getSupportedOpenCLOpts(). Reverta84599f177(header‑only feature macros). Header‑only macros are difficult to disable on SPIR-V targets, and the prior undef approach (a60b8f4681) does not scale. After this PR, they can be disabled via `-cl-ext=-<feature>`. https://github.com/KhronosGroup/OpenCL-Docs/issues/1328 also notes that unconditional definition of the header‑only macros in opencl-c-base.h should be removed.
This commit is contained in:
@@ -217,9 +217,9 @@ This section explains how to extend clang with the new functionality.
|
||||
|
||||
**Parsing functionality**
|
||||
|
||||
If an extension modifies the standard parsing it needs to be added to
|
||||
the clang frontend source code. This also means that the associated macro
|
||||
indicating the presence of the extension should be added to clang.
|
||||
If a new extension is added it needs to be added to the clang frontend source
|
||||
code. This also means that the associated macro indicating the presence of the
|
||||
extension should be added to clang.
|
||||
|
||||
The default flow for adding a new extension into the frontend is to
|
||||
modify `OpenCLExtensions.def
|
||||
@@ -242,7 +242,7 @@ with :option:`-cl-ext` command-line flags.
|
||||
**Library functionality**
|
||||
|
||||
If an extension adds functionality that does not modify standard language
|
||||
parsing it should not require modifying anything other than header files and
|
||||
parsing it may not require modifying anything other than header files and
|
||||
``OpenCLBuiltins.td`` detailed in :ref:`OpenCL builtins <opencl_builtins>`.
|
||||
Most commonly such extensions add functionality via libraries (by adding
|
||||
non-native types or functions) parsed regularly. Similar to other languages this
|
||||
@@ -250,13 +250,7 @@ is the most common way to add new functionality.
|
||||
|
||||
Clang has standard headers where new types and functions are being added,
|
||||
for more details refer to
|
||||
:ref:`the section on the OpenCL Header <opencl_header>`. The macros indicating
|
||||
the presence of such extensions can be added in the standard header files
|
||||
conditioned on target specific predefined macros or/and language version
|
||||
predefined macros (see `feature/extension preprocessor macros defined in
|
||||
opencl-c-base.h
|
||||
<https://github.com/llvm/llvm-project/blob/main/clang/lib/Headers/opencl-c-base.h>`__).
|
||||
|
||||
:ref:`the section on the OpenCL Header <opencl_header>`.
|
||||
**Pragmas**
|
||||
|
||||
Some extensions alter standard parsing dynamically via pragmas.
|
||||
|
||||
@@ -236,6 +236,11 @@ C23 Feature Support
|
||||
|
||||
Non-comprehensive list of changes in this release
|
||||
-------------------------------------------------
|
||||
- Removed OpenCL header-only feature macros (previously unconditionally enabled
|
||||
on SPIR-V and only selectively disabled via ``-D__undef_<feature>``). All
|
||||
OpenCL extensions and features are now centralized in OpenCLExtensions.def,
|
||||
allowing consistent control via ``getSupportedOpenCLOpts`` and ``-cl-ext``.
|
||||
|
||||
- Added ``__builtin_elementwise_ldexp``.
|
||||
|
||||
- Added ``__builtin_elementwise_fshl`` and ``__builtin_elementwise_fshr``.
|
||||
|
||||
@@ -78,10 +78,55 @@ OPENCL_EXTENSION(cl_khr_depth_images, true, 120)
|
||||
OPENCL_EXTENSION(cl_khr_gl_msaa_sharing,true, 120)
|
||||
|
||||
// OpenCL 2.0.
|
||||
OPENCL_EXTENSION(cl_ext_float_atomics, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_extended_bit_ops, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_integer_dot_product, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_kernel_clock, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_mipmap_image, true, 200)
|
||||
OPENCL_EXTENSION(cl_khr_mipmap_image_writes, true, 200)
|
||||
OPENCL_EXTENSION(cl_khr_srgb_image_writes, true, 200)
|
||||
OPENCL_EXTENSION(cl_khr_subgroup_ballot, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_subgroup_clustered_reduce, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_subgroup_extended_types, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_subgroup_non_uniform_arithmetic, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_subgroup_non_uniform_vote, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_subgroup_rotate, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_subgroup_shuffle_relative, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_subgroup_shuffle, false, 200)
|
||||
OPENCL_EXTENSION(cl_khr_subgroups, true, 200)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_atomic_order_acq_rel, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_atomic_order_seq_cst, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_atomic_scope_all_devices, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_atomic_scope_device, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_device_enqueue, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp16_global_atomic_add, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp16_global_atomic_load_store, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp16_global_atomic_min_max, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp16_local_atomic_add, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp16_local_atomic_load_store, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp16_local_atomic_min_max, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp32_global_atomic_add, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp32_global_atomic_min_max, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp32_local_atomic_add, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp32_local_atomic_min_max, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp64_global_atomic_add, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp64_global_atomic_min_max, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp64_local_atomic_add, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_fp64_local_atomic_min_max, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_image_raw10_raw12, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_image_unorm_int_2_101010, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_ext_image_unsigned_10x6_12x4_14x2, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_generic_address_space, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_images, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_integer_dot_product_input_4x8bit, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_integer_dot_product_input_4x8bit_packed, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_kernel_clock_scope_device, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_kernel_clock_scope_sub_group, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_kernel_clock_scope_work_group, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_pipes, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_program_scope_global_variables, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_read_write_images, false, 200, OCL_C_20)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_work_group_collective_functions, false, 200, OCL_C_20)
|
||||
|
||||
// Clang Extensions.
|
||||
OPENCL_EXTENSION(cl_clang_storage_class_specifiers, true, 100)
|
||||
@@ -100,17 +145,9 @@ OPENCL_EXTENSION(cl_intel_subgroups_short, true, 120)
|
||||
OPENCL_EXTENSION(cl_intel_device_side_avc_motion_estimation, true, 120)
|
||||
|
||||
// OpenCL C 3.0 features (6.2.1. Features)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_pipes, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_generic_address_space, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_atomic_order_acq_rel, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_atomic_order_seq_cst, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_subgroups, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_3d_image_writes, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_device_enqueue, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_read_write_images, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_program_scope_global_variables, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_fp64, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_images, false, 300, OCL_C_30)
|
||||
OPENCL_OPTIONALCOREFEATURE(__opencl_c_subgroups, false, 300, OCL_C_30)
|
||||
|
||||
#undef OPENCL_OPTIONALCOREFEATURE
|
||||
#undef OPENCL_COREFEATURE
|
||||
|
||||
@@ -320,6 +320,8 @@ public:
|
||||
Opts["__opencl_c_3d_image_writes"] = true;
|
||||
Opts["cl_khr_3d_image_writes"] = true;
|
||||
Opts["__opencl_c_program_scope_global_variables"] = true;
|
||||
Opts["__opencl_c_atomic_order_seq_cst"] = true;
|
||||
Opts["__opencl_c_atomic_scope_all_devices"] = true;
|
||||
|
||||
if (GPUKind >= llvm::AMDGPU::GK_GFX700) {
|
||||
Opts["__opencl_c_generic_address_space"] = true;
|
||||
|
||||
@@ -9,105 +9,6 @@
|
||||
#ifndef _OPENCL_BASE_H_
|
||||
#define _OPENCL_BASE_H_
|
||||
|
||||
// Define extension macros
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
// For SPIR and SPIR-V all extensions are supported.
|
||||
#if defined(__SPIR__) || defined(__SPIRV__)
|
||||
#define cl_khr_subgroup_extended_types 1
|
||||
#define cl_khr_subgroup_non_uniform_vote 1
|
||||
#define cl_khr_subgroup_ballot 1
|
||||
#define cl_khr_subgroup_non_uniform_arithmetic 1
|
||||
#define cl_khr_subgroup_shuffle 1
|
||||
#define cl_khr_subgroup_shuffle_relative 1
|
||||
#define cl_khr_subgroup_clustered_reduce 1
|
||||
#define cl_khr_subgroup_rotate 1
|
||||
#define cl_khr_extended_bit_ops 1
|
||||
#define cl_khr_integer_dot_product 1
|
||||
#define __opencl_c_integer_dot_product_input_4x8bit 1
|
||||
#define __opencl_c_integer_dot_product_input_4x8bit_packed 1
|
||||
#define cl_ext_float_atomics 1
|
||||
#ifdef cl_khr_fp16
|
||||
#define __opencl_c_ext_fp16_global_atomic_load_store 1
|
||||
#define __opencl_c_ext_fp16_local_atomic_load_store 1
|
||||
#define __opencl_c_ext_fp16_global_atomic_add 1
|
||||
#define __opencl_c_ext_fp16_local_atomic_add 1
|
||||
#define __opencl_c_ext_fp16_global_atomic_min_max 1
|
||||
#define __opencl_c_ext_fp16_local_atomic_min_max 1
|
||||
#endif
|
||||
#ifdef cl_khr_fp64
|
||||
#define __opencl_c_ext_fp64_global_atomic_add 1
|
||||
#define __opencl_c_ext_fp64_local_atomic_add 1
|
||||
#define __opencl_c_ext_fp64_global_atomic_min_max 1
|
||||
#define __opencl_c_ext_fp64_local_atomic_min_max 1
|
||||
#endif
|
||||
#define __opencl_c_ext_fp32_global_atomic_add 1
|
||||
#define __opencl_c_ext_fp32_local_atomic_add 1
|
||||
#define __opencl_c_ext_fp32_global_atomic_min_max 1
|
||||
#define __opencl_c_ext_fp32_local_atomic_min_max 1
|
||||
#define __opencl_c_ext_image_raw10_raw12 1
|
||||
#define __opencl_c_ext_image_unorm_int_2_101010 1
|
||||
#define __opencl_c_ext_image_unsigned_10x6_12x4_14x2 1
|
||||
#define cl_khr_kernel_clock 1
|
||||
#define __opencl_c_kernel_clock_scope_device 1
|
||||
#define __opencl_c_kernel_clock_scope_work_group 1
|
||||
#define __opencl_c_kernel_clock_scope_sub_group 1
|
||||
|
||||
#endif // defined(__SPIR__) || defined(__SPIRV__)
|
||||
#endif // (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
|
||||
// Define feature macros for OpenCL C 2.0
|
||||
#if (__OPENCL_CPP_VERSION__ == 100 || __OPENCL_C_VERSION__ == 200)
|
||||
#define __opencl_c_pipes 1
|
||||
#define __opencl_c_generic_address_space 1
|
||||
#define __opencl_c_work_group_collective_functions 1
|
||||
#define __opencl_c_atomic_order_acq_rel 1
|
||||
#define __opencl_c_atomic_order_seq_cst 1
|
||||
#define __opencl_c_atomic_scope_device 1
|
||||
#define __opencl_c_atomic_scope_all_devices 1
|
||||
#define __opencl_c_device_enqueue 1
|
||||
#define __opencl_c_read_write_images 1
|
||||
#define __opencl_c_program_scope_global_variables 1
|
||||
#define __opencl_c_images 1
|
||||
#endif
|
||||
|
||||
// Define header-only feature macros for OpenCL C 3.0.
|
||||
#if (__OPENCL_CPP_VERSION__ == 202100 || __OPENCL_C_VERSION__ == 300)
|
||||
// For the SPIR and SPIR-V target all features are supported.
|
||||
#if defined(__SPIR__) || defined(__SPIRV__)
|
||||
#define __opencl_c_work_group_collective_functions 1
|
||||
#define __opencl_c_atomic_order_seq_cst 1
|
||||
#define __opencl_c_atomic_scope_device 1
|
||||
#define __opencl_c_atomic_scope_all_devices 1
|
||||
#define __opencl_c_read_write_images 1
|
||||
#endif // defined(__SPIR__)
|
||||
|
||||
#endif // (__OPENCL_CPP_VERSION__ == 202100 || __OPENCL_C_VERSION__ == 300)
|
||||
|
||||
// Undefine any feature macros that have been explicitly disabled using
|
||||
// an __undef_<feature> macro.
|
||||
#ifdef __undef___opencl_c_work_group_collective_functions
|
||||
#undef __opencl_c_work_group_collective_functions
|
||||
#endif
|
||||
#ifdef __undef___opencl_c_atomic_order_seq_cst
|
||||
#undef __opencl_c_atomic_order_seq_cst
|
||||
#endif
|
||||
#ifdef __undef___opencl_c_atomic_scope_device
|
||||
#undef __opencl_c_atomic_scope_device
|
||||
#endif
|
||||
#ifdef __undef___opencl_c_atomic_scope_all_devices
|
||||
#undef __opencl_c_atomic_scope_all_devices
|
||||
#endif
|
||||
#ifdef __undef___opencl_c_read_write_images
|
||||
#undef __opencl_c_read_write_images
|
||||
#endif
|
||||
#ifdef __undef___opencl_c_integer_dot_product_input_4x8bit
|
||||
#undef __opencl_c_integer_dot_product_input_4x8bit
|
||||
#endif
|
||||
#ifdef __undef___opencl_c_integer_dot_product_input_4x8bit_packed
|
||||
#undef __opencl_c_integer_dot_product_input_4x8bit_packed
|
||||
#endif
|
||||
|
||||
#if !defined(__opencl_c_generic_address_space)
|
||||
// Internal feature macro to provide named (global, local, private) address
|
||||
// space overloads for builtin functions that take a pointer argument.
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
// ===
|
||||
// Compile for OpenCL 2.0 for the first time. The module should change.
|
||||
// RUN: %clang_cc1 -triple spir-unknown-unknown -O0 -emit-llvm -o - -cl-std=CL2.0 -finclude-default-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -fdisable-module-hash -ftime-report %s 2>&1 | FileCheck --check-prefix=CHECK20 --check-prefix=CHECK-MOD %s
|
||||
// RUN: not diff %t/1_0.pcm %t/opencl_c.pcm
|
||||
// RUN: not diff %t/1_0.pcm %t/opencl_c.pcm > /dev/null
|
||||
// RUN: chmod u-w %t/opencl_c.pcm
|
||||
|
||||
// ===
|
||||
@@ -44,10 +44,10 @@
|
||||
// RUN: rm -rf %t
|
||||
// RUN: mkdir -p %t
|
||||
// RUN: %clang_cc1 -triple spir64-unknown-unknown -emit-llvm -o - -cl-std=CL1.2 -finclude-default-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -ftime-report %s 2>&1 | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MOD %s
|
||||
// RUN: %clang_cc1 -triple amdgcn--amdhsa -O0 -emit-llvm -o - -cl-std=CL2.0 -finclude-default-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -ftime-report %s 2>&1 | FileCheck --check-prefix=CHECK20 --check-prefix=CHECK-MOD %s
|
||||
// RUN: %clang_cc1 -triple amdgcn--amdhsa -target-cpu gfx700 -O0 -emit-llvm -o - -cl-std=CL2.0 -finclude-default-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -ftime-report %s 2>&1 | FileCheck --check-prefix=CHECK20 --check-prefix=CHECK-MOD %s
|
||||
// RUN: chmod u-w %t
|
||||
// RUN: %clang_cc1 -triple spir64-unknown-unknown -emit-llvm -o - -cl-std=CL1.2 -finclude-default-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -ftime-report %s 2>&1 | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MOD %s
|
||||
// RUN: %clang_cc1 -triple amdgcn--amdhsa -O0 -emit-llvm -o - -cl-std=CL2.0 -finclude-default-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -ftime-report %s 2>&1 | FileCheck --check-prefix=CHECK20 --check-prefix=CHECK-MOD %s
|
||||
// RUN: %clang_cc1 -triple amdgcn--amdhsa -target-cpu gfx700 -O0 -emit-llvm -o - -cl-std=CL2.0 -finclude-default-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -ftime-report %s 2>&1 | FileCheck --check-prefix=CHECK20 --check-prefix=CHECK-MOD %s
|
||||
// RUN: chmod u+w %t
|
||||
|
||||
// Verify that called builtins occur in the generated IR.
|
||||
|
||||
@@ -165,6 +165,150 @@
|
||||
#endif
|
||||
#pragma OPENCL EXTENSION cl_khr_subgroups : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_ext_float_atomics
|
||||
#error "Missing cl_ext_float_atomics define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_ext_float_atomics
|
||||
#error "Incorrect cl_ext_float_atomics define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_ext_float_atomics' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_ext_float_atomics : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_extended_bit_ops
|
||||
#error "Missing cl_khr_extended_bit_ops define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_extended_bit_ops
|
||||
#error "Incorrect cl_khr_extended_bit_ops define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_extended_bit_ops' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_extended_bit_ops : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_integer_dot_product
|
||||
#error "Missing cl_khr_integer_dot_product define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_integer_dot_product
|
||||
#error "Incorrect cl_khr_integer_dot_product define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_integer_dot_product' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_integer_dot_product : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_kernel_clock
|
||||
#error "Missing cl_khr_kernel_clock define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_kernel_clock
|
||||
#error "Incorrect cl_khr_kernel_clock define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_kernel_clock' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_kernel_clock : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_subgroup_ballot
|
||||
#error "Missing cl_khr_subgroup_ballot define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_subgroup_ballot
|
||||
#error "Incorrect cl_khr_subgroup_ballot define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_subgroup_ballot' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_subgroup_ballot : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_subgroup_clustered_reduce
|
||||
#error "Missing cl_khr_subgroup_clustered_reduce define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_subgroup_clustered_reduce
|
||||
#error "Incorrect cl_khr_subgroup_clustered_reduce define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_subgroup_clustered_reduce' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_subgroup_clustered_reduce : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_subgroup_extended_types
|
||||
#error "Missing cl_khr_subgroup_extended_types define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_subgroup_extended_types
|
||||
#error "Incorrect cl_khr_subgroup_extended_types define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_subgroup_extended_types' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_subgroup_extended_types : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_subgroup_non_uniform_arithmetic
|
||||
#error "Missing cl_khr_subgroup_non_uniform_arithmetic define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_subgroup_non_uniform_arithmetic
|
||||
#error "Incorrect cl_khr_subgroup_non_uniform_arithmetic define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_subgroup_non_uniform_arithmetic' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_subgroup_non_uniform_arithmetic : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_subgroup_non_uniform_vote
|
||||
#error "Missing cl_khr_subgroup_non_uniform_vote define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_subgroup_non_uniform_vote
|
||||
#error "Incorrect cl_khr_subgroup_non_uniform_vote define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_subgroup_non_uniform_vote' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_subgroup_non_uniform_vote : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_subgroup_rotate
|
||||
#error "Missing cl_khr_subgroup_rotate define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_subgroup_rotate
|
||||
#error "Incorrect cl_khr_subgroup_rotate define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_subgroup_rotate' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_subgroup_rotate : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_subgroup_shuffle_relative
|
||||
#error "Missing cl_khr_subgroup_shuffle_relative define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_subgroup_shuffle_relative
|
||||
#error "Incorrect cl_khr_subgroup_shuffle_relative define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_subgroup_shuffle_relative' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_subgroup_shuffle_relative : enable
|
||||
|
||||
#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
|
||||
#ifndef cl_khr_subgroup_shuffle
|
||||
#error "Missing cl_khr_subgroup_shuffle define"
|
||||
#endif
|
||||
#else
|
||||
#ifdef cl_khr_subgroup_shuffle
|
||||
#error "Incorrect cl_khr_subgroup_shuffle define"
|
||||
#endif
|
||||
#endif
|
||||
// expected-warning@+1{{OpenCL extension 'cl_khr_subgroup_shuffle' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION cl_khr_subgroup_shuffle : enable
|
||||
|
||||
#ifndef cl_amd_media_ops
|
||||
#error "Missing cl_amd_media_ops define"
|
||||
#endif
|
||||
@@ -224,14 +368,62 @@
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_atomic_order_acq_rel' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_atomic_order_seq_cst : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_atomic_order_seq_cst' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_atomic_scope_all_devices : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_atomic_scope_all_devices' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_atomic_scope_device : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_atomic_scope_device' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_device_enqueue : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_device_enqueue' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_global_atomic_add : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_global_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_global_atomic_load_store : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_global_atomic_load_store' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_global_atomic_min_max : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_global_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_local_atomic_add : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_local_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_local_atomic_load_store : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_local_atomic_load_store' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_local_atomic_min_max : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_local_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp32_global_atomic_add : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp32_global_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp32_global_atomic_min_max : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp32_global_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp32_local_atomic_add : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp32_local_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp32_local_atomic_min_max : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp32_local_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp64_global_atomic_add : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp64_global_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp64_global_atomic_min_max : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp64_global_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp64_local_atomic_add : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp64_local_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp64_local_atomic_min_max : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp64_local_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_image_raw10_raw12 : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_image_raw10_raw12' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_image_unorm_int_2_101010 : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_image_unorm_int_2_101010' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_image_unsigned_10x6_12x4_14x2 : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_image_unsigned_10x6_12x4_14x2' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_fp64 : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_fp64' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_generic_address_space : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_generic_address_space' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_images : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_images' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_integer_dot_product_input_4x8bit : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_integer_dot_product_input_4x8bit' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_integer_dot_product_input_4x8bit_packed : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_integer_dot_product_input_4x8bit_packed' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_kernel_clock_scope_device : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_kernel_clock_scope_device' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_kernel_clock_scope_sub_group : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_kernel_clock_scope_sub_group' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_kernel_clock_scope_work_group : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_kernel_clock_scope_work_group' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_pipes : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_pipes' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_program_scope_global_variables : disable
|
||||
@@ -240,6 +432,8 @@
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_read_write_images' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_subgroups : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_subgroups' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_work_group_collective_functions : disable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_work_group_collective_functions' unknown or does not require pragma - ignoring}}
|
||||
|
||||
#pragma OPENCL EXTENSION __opencl_c_int64 : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_int64' unknown or does not require pragma - ignoring}}
|
||||
@@ -249,14 +443,62 @@
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_atomic_order_acq_rel' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_atomic_order_seq_cst : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_atomic_order_seq_cst' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_atomic_scope_all_devices : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_atomic_scope_all_devices' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_atomic_scope_device : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_atomic_scope_device' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_device_enqueue : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_device_enqueue' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_global_atomic_add : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_global_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_global_atomic_load_store : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_global_atomic_load_store' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_global_atomic_min_max : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_global_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_local_atomic_add : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_local_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_local_atomic_load_store : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_local_atomic_load_store' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp16_local_atomic_min_max : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp16_local_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp32_global_atomic_add : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp32_global_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp32_global_atomic_min_max : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp32_global_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp32_local_atomic_add : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp32_local_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp32_local_atomic_min_max : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp32_local_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp64_global_atomic_add : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp64_global_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp64_global_atomic_min_max : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp64_global_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp64_local_atomic_add : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp64_local_atomic_add' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_fp64_local_atomic_min_max : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_fp64_local_atomic_min_max' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_image_raw10_raw12 : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_image_raw10_raw12' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_image_unorm_int_2_101010 : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_image_unorm_int_2_101010' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_ext_image_unsigned_10x6_12x4_14x2 : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_ext_image_unsigned_10x6_12x4_14x2' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_fp64 : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_fp64' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_generic_address_space : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_generic_address_space' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_images : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_images' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_integer_dot_product_input_4x8bit : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_integer_dot_product_input_4x8bit' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_integer_dot_product_input_4x8bit_packed : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_integer_dot_product_input_4x8bit_packed' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_kernel_clock_scope_device : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_kernel_clock_scope_device' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_kernel_clock_scope_sub_group : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_kernel_clock_scope_sub_group' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_kernel_clock_scope_work_group : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_kernel_clock_scope_work_group' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_pipes : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_pipes' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_program_scope_global_variables : enable
|
||||
@@ -265,3 +507,5 @@
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_read_write_images' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_subgroups : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_subgroups' unknown or does not require pragma - ignoring}}
|
||||
#pragma OPENCL EXTENSION __opencl_c_work_group_collective_functions : enable
|
||||
//expected-warning@-1{{OpenCL extension '__opencl_c_work_group_collective_functions' unknown or does not require pragma - ignoring}}
|
||||
|
||||
@@ -15,31 +15,29 @@
|
||||
// RUN: %clang_cc1 -triple r600-unknown-unknown %s -E -dM -o - -x cl -cl-std=clc++2021 -cl-ext=+all \
|
||||
// RUN: | FileCheck -match-full-lines %s --check-prefix=FEATURES
|
||||
|
||||
// For OpenCL C 2.0 feature macros are defined only in header, so test that earlier OpenCL
|
||||
// versions don't define feature macros accidentally and CL2.0 don't define them without header
|
||||
// For OpenCL C 2.0 feature macros, test that CL2.0 define them but earlier OpenCL
|
||||
// versions don't define feature macros accidentally.
|
||||
// RUN: %clang_cc1 -triple spir-unknown-unknown %s -E -dM -o - -x cl -cl-std=CL1.1 \
|
||||
// RUN: | FileCheck -match-full-lines %s --check-prefix=NO-FEATURES
|
||||
// RUN: %clang_cc1 -triple spir-unknown-unknown %s -E -dM -o - -x cl -cl-std=CL1.2 \
|
||||
// RUN: | FileCheck -match-full-lines %s --check-prefix=NO-FEATURES
|
||||
// RUN: %clang_cc1 -triple spir-unknown-unknown %s -E -dM -o - -x cl -cl-std=CL2.0 \
|
||||
// RUN: | FileCheck -match-full-lines %s --check-prefix=NO-FEATURES
|
||||
// RUN: | FileCheck -match-full-lines %s --check-prefix=FEATURES-CL20
|
||||
// RUN: %clang_cc1 -triple spir-unknown-unknown %s -E -dM -o - -x cl -cl-std=clc++1.0 \
|
||||
// RUN: | FileCheck -match-full-lines %s --check-prefix=NO-FEATURES
|
||||
// RUN: | FileCheck -match-full-lines %s --check-prefix=FEATURES-CL20
|
||||
|
||||
// For OpenCL C 2.0, header-only features can be disabled using macros.
|
||||
// Features can be disabled using -cl-ext=-<feature>.
|
||||
// RUN: %clang_cc1 -triple spir-unknown-unknown %s -E -dM -o - -x cl -cl-std=CL2.0 -fdeclare-opencl-builtins -finclude-default-header \
|
||||
// RUN: -D__undef___opencl_c_integer_dot_product_input_4x8bit \
|
||||
// RUN: -D__undef___opencl_c_integer_dot_product_input_4x8bit_packed \
|
||||
// RUN: | FileCheck %s --check-prefix=NO-HEADERONLY-FEATURES-CL20
|
||||
|
||||
// For OpenCL C 3.0, header-only features can be disabled using macros.
|
||||
// RUN: -cl-ext=-__opencl_c_integer_dot_product_input_4x8bit \
|
||||
// RUN: -cl-ext=-__opencl_c_integer_dot_product_input_4x8bit_packed \
|
||||
// RUN: | FileCheck %s --check-prefix=NO-FEATURES-CL20
|
||||
// RUN: %clang_cc1 -triple spir-unknown-unknown %s -E -dM -o - -x cl -cl-std=CL3.0 -fdeclare-opencl-builtins -finclude-default-header \
|
||||
// RUN: -D__undef___opencl_c_work_group_collective_functions=1 \
|
||||
// RUN: -D__undef___opencl_c_atomic_order_seq_cst=1 \
|
||||
// RUN: -D__undef___opencl_c_atomic_scope_device=1 \
|
||||
// RUN: -D__undef___opencl_c_atomic_scope_all_devices=1 \
|
||||
// RUN: -D__undef___opencl_c_read_write_images=1 \
|
||||
// RUN: | FileCheck %s --check-prefix=NO-HEADERONLY-FEATURES
|
||||
// RUN: -cl-ext=-__opencl_c_work_group_collective_functions, \
|
||||
// RUN: -cl-ext=-__opencl_c_atomic_order_seq_cst \
|
||||
// RUN: -cl-ext=-__opencl_c_atomic_scope_device \
|
||||
// RUN: -cl-ext=-__opencl_c_atomic_scope_all_devices \
|
||||
// RUN: -cl-ext=-__opencl_c_read_write_images \
|
||||
// RUN: | FileCheck %s --check-prefix=DISABLE-FEATURES
|
||||
|
||||
// Note that __opencl_c_int64 is always defined assuming
|
||||
// always compiling for FULL OpenCL profile
|
||||
@@ -47,34 +45,68 @@
|
||||
// FEATURES: #define __opencl_c_3d_image_writes 1
|
||||
// FEATURES: #define __opencl_c_atomic_order_acq_rel 1
|
||||
// FEATURES: #define __opencl_c_atomic_order_seq_cst 1
|
||||
// FEATURES: #define __opencl_c_atomic_scope_all_devices 1
|
||||
// FEATURES: #define __opencl_c_atomic_scope_device 1
|
||||
// FEATURES: #define __opencl_c_device_enqueue 1
|
||||
// FEATURES: #define __opencl_c_ext_image_unorm_int_2_101010 1
|
||||
// FEATURES: #define __opencl_c_ext_image_unsigned_10x6_12x4_14x2 1
|
||||
// FEATURES: #define __opencl_c_fp64 1
|
||||
// FEATURES: #define __opencl_c_generic_address_space 1
|
||||
// FEATURES: #define __opencl_c_images 1
|
||||
// FEATURES: #define __opencl_c_int64 1
|
||||
// FEATURES: #define __opencl_c_integer_dot_product_input_4x8bit 1
|
||||
// FEATURES: #define __opencl_c_integer_dot_product_input_4x8bit_packed 1
|
||||
// FEATURES: #define __opencl_c_kernel_clock_scope_device 1
|
||||
// FEATURES: #define __opencl_c_kernel_clock_scope_sub_group 1
|
||||
// FEATURES: #define __opencl_c_kernel_clock_scope_work_group 1
|
||||
// FEATURES: #define __opencl_c_pipes 1
|
||||
// FEATURES: #define __opencl_c_program_scope_global_variables 1
|
||||
// FEATURES: #define __opencl_c_read_write_images 1
|
||||
// FEATURES: #define __opencl_c_subgroups 1
|
||||
// FEATURES: #define __opencl_c_work_group_collective_functions 1
|
||||
|
||||
// FEATURES-CL20: #define __opencl_c_atomic_order_acq_rel 1
|
||||
// FEATURES-CL20: #define __opencl_c_atomic_order_seq_cst 1
|
||||
// FEATURES-CL20: #define __opencl_c_atomic_scope_all_devices 1
|
||||
// FEATURES-CL20: #define __opencl_c_atomic_scope_device 1
|
||||
// FEATURES-CL20: #define __opencl_c_device_enqueue 1
|
||||
// FEATURES-CL20: #define __opencl_c_generic_address_space 1
|
||||
// FEATURES-CL20: #define __opencl_c_images 1
|
||||
// FEATURES-CL20: #define __opencl_c_int64 1
|
||||
// FEATURES-CL20: #define __opencl_c_pipes 1
|
||||
// FEATURES-CL20: #define __opencl_c_program_scope_global_variables 1
|
||||
// FEATURES-CL20: #define __opencl_c_read_write_images 1
|
||||
// FEATURES-CL20: #define __opencl_c_work_group_collective_functions 1
|
||||
|
||||
// NO-FEATURES: #define __opencl_c_int64 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_3d_image_writes
|
||||
// NO-FEATURES-NOT: #define __opencl_c_atomic_order_acq_rel
|
||||
// NO-FEATURES-NOT: #define __opencl_c_atomic_order_seq_cst
|
||||
// NO-FEATURES-NOT: #define __opencl_c_device_enqueue
|
||||
// NO-FEATURES-NOT: #define __opencl_c_fp64
|
||||
// NO-FEATURES-NOT: #define __opencl_c_generic_address_space
|
||||
// NO-FEATURES-NOT: #define __opencl_c_images
|
||||
// NO-FEATURES-NOT: #define __opencl_c_pipes
|
||||
// NO-FEATURES-NOT: #define __opencl_c_program_scope_global_variables
|
||||
// NO-FEATURES-NOT: #define __opencl_c_read_write_images
|
||||
// NO-FEATURES-NOT: #define __opencl_c_subgroups
|
||||
// NO-FEATURES-NOT: #define __opencl_c_3d_image_writes 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_atomic_order_acq_rel 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_atomic_order_seq_cst 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_atomic_scope_all_devices 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_atomic_scope_device 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_device_enqueue 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_ext_image_unorm_int_2_101010 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_ext_image_unsigned_10x6_12x4_14x2 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_fp64 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_generic_address_space 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_images 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_int64 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_integer_dot_product_input_4x8bit 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_integer_dot_product_input_4x8bit_packed 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_kernel_clock_scope_device 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_kernel_clock_scope_sub_group 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_kernel_clock_scope_work_group 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_pipes 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_program_scope_global_variables 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_read_write_images 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_subgroups 1
|
||||
// NO-FEATURES-NOT: #define __opencl_c_work_group_collective_functions 1
|
||||
|
||||
// NO-HEADERONLY-FEATURES-CL20-NOT: #define __opencl_c_integer_dot_product_input_4x8bit
|
||||
// NO-HEADERONLY-FEATURES-CL20-NOT: #define __opencl_c_integer_dot_product_input_4x8bit_packed
|
||||
// NO-FEATURES-CL20-NOT: #define __opencl_c_integer_dot_product_input_4x8bit
|
||||
// NO-FEATURES-CL20-NOT: #define __opencl_c_integer_dot_product_input_4x8bit_packed
|
||||
|
||||
// NO-HEADERONLY-FEATURES-NOT: #define __opencl_c_work_group_collective_functions
|
||||
// NO-HEADERONLY-FEATURES-NOT: #define __opencl_c_atomic_order_seq_cst
|
||||
// NO-HEADERONLY-FEATURES-NOT: #define __opencl_c_atomic_scope_device
|
||||
// NO-HEADERONLY-FEATURES-NOT: #define __opencl_c_atomic_scope_all_devices
|
||||
// NO-HEADERONLY-FEATURES-NOT: #define __opencl_c_read_write_images
|
||||
// DISABLE-FEATURES-NOT: #define __opencl_c_work_group_collective_functions
|
||||
// DISABLE-FEATURES-NOT: #define __opencl_c_atomic_order_seq_cst
|
||||
// DISABLE-FEATURES-NOT: #define __opencl_c_atomic_scope_all_devices
|
||||
// DISABLE-FEATURES-NOT: #define __opencl_c_atomic_scope_device
|
||||
// DISABLE-FEATURES-NOT: #define __opencl_c_read_write_images
|
||||
|
||||
Reference in New Issue
Block a user