blob: 589d04c64e82dcb0c9b1149ae56e82417dd9fe49 [file] [log] [blame]
Sven van Haastregt6c22eda2019-09-26 13:31:36 +00001// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL -fdeclare-opencl-builtins -DNO_HEADER
2// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL -fdeclare-opencl-builtins -finclude-default-header
3// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL1.2 -fdeclare-opencl-builtins -DNO_HEADER
4// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL1.2 -fdeclare-opencl-builtins -finclude-default-header
5// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL2.0 -fdeclare-opencl-builtins -DNO_HEADER
6// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL2.0 -fdeclare-opencl-builtins -finclude-default-header
Sven van Haastregt0aed36d2019-11-01 13:56:43 +00007// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CLC++ -fdeclare-opencl-builtins -DNO_HEADER
8// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CLC++ -fdeclare-opencl-builtins -finclude-default-header
Sven van Haastregted69faa2019-09-19 13:41:51 +00009
Sven van Haastregt0aed36d2019-11-01 13:56:43 +000010#if defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= CL_VERSION_2_0
Sven van Haastregtb21a3652019-08-19 11:56:03 +000011// expected-no-diagnostics
Sven van Haastregted69faa2019-09-19 13:41:51 +000012#endif
Sven van Haastregt79a222f2019-06-03 09:39:11 +000013
14// Test the -fdeclare-opencl-builtins option.
15
Sven van Haastregt988f1e32019-09-05 10:01:24 +000016#pragma OPENCL EXTENSION cl_khr_fp16 : enable
Sven van Haastregted69faa2019-09-19 13:41:51 +000017#if __OPENCL_C_VERSION__ < CL_VERSION_1_2
18#pragma OPENCL EXTENSION cl_khr_fp64 : enable
19#endif
Sven van Haastregt988f1e32019-09-05 10:01:24 +000020
Sven van Haastregtaf1c2302019-06-19 12:48:22 +000021// Provide typedefs when invoking clang without -finclude-default-header.
22#ifdef NO_HEADER
Sven van Haastregted69faa2019-09-19 13:41:51 +000023typedef unsigned char uchar;
Sven van Haastregt79a222f2019-06-03 09:39:11 +000024typedef unsigned int uint;
Sven van Haastregted69faa2019-09-19 13:41:51 +000025typedef unsigned long ulong;
26typedef unsigned short ushort;
Sven van Haastregt79a222f2019-06-03 09:39:11 +000027typedef __SIZE_TYPE__ size_t;
Sven van Haastregt0e70c352019-11-06 11:53:19 +000028typedef char char2 __attribute__((ext_vector_type(2)));
29typedef char char4 __attribute__((ext_vector_type(4)));
30typedef uchar uchar4 __attribute__((ext_vector_type(4)));
31typedef float float4 __attribute__((ext_vector_type(4)));
32typedef half half4 __attribute__((ext_vector_type(4)));
33typedef int int2 __attribute__((ext_vector_type(2)));
34typedef int int4 __attribute__((ext_vector_type(4)));
Sven van Haastregte54c83e2019-11-26 10:44:49 +000035typedef uint uint4 __attribute__((ext_vector_type(4)));
Sven van Haastregt0e70c352019-11-06 11:53:19 +000036typedef long long2 __attribute__((ext_vector_type(2)));
Sven van Haastregtaf1c2302019-06-19 12:48:22 +000037#endif
Sven van Haastregt79a222f2019-06-03 09:39:11 +000038
Sven van Haastregtcc0ba282019-08-20 12:21:03 +000039kernel void test_pointers(volatile global void *global_p, global const int4 *a) {
40 int i;
41 unsigned int ui;
42
43 prefetch(a, 2);
44
45 atom_add((volatile __global int *)global_p, i);
46 atom_cmpxchg((volatile __global unsigned int *)global_p, ui, ui);
47}
48
Sven van Haastregtb21a3652019-08-19 11:56:03 +000049kernel void basic_conversion() {
50 double d;
51 float f;
52 char2 c2;
53 long2 l2;
54 float4 f4;
55 int4 i4;
56
57 f = convert_float(d);
58 d = convert_double_sat_rtp(f);
59 l2 = convert_long2_rtz(c2);
60 i4 = convert_int4_sat(f4);
Sven van Haastregt79a222f2019-06-03 09:39:11 +000061}
62
Sven van Haastregtb21a3652019-08-19 11:56:03 +000063char4 test_int(char c, char4 c4) {
64 char m = max(c, c);
65 char4 m4 = max(c4, c4);
Sven van Haastregt0e70c352019-11-06 11:53:19 +000066 uchar4 abs1 = abs(c4);
67 uchar4 abs2 = abs(abs1);
Sven van Haastregtb21a3652019-08-19 11:56:03 +000068 return max(c4, c);
Sven van Haastregt79a222f2019-06-03 09:39:11 +000069}
70
Sven van Haastregte54c83e2019-11-26 10:44:49 +000071kernel void basic_vector_misc(float4 a) {
72 float4 res;
73 uint4 mask = (uint4)(1, 2, 3, 4);
74
75 res = shuffle(a, mask);
76}
77
Sven van Haastregt988f1e32019-09-05 10:01:24 +000078kernel void basic_image_readonly(read_only image2d_t image_read_only_image2d) {
79 int2 i2;
80 sampler_t sampler;
81 half4 res;
82 float4 resf;
83
84 resf = read_imagef(image_read_only_image2d, i2);
85 res = read_imageh(image_read_only_image2d, i2);
86 res = read_imageh(image_read_only_image2d, sampler, i2);
Sven van Haastregt2a69ed02019-09-25 09:12:59 +000087
88 int imgWidth = get_image_width(image_read_only_image2d);
Sven van Haastregt988f1e32019-09-05 10:01:24 +000089}
90
Sven van Haastregted69faa2019-09-19 13:41:51 +000091#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0
Sven van Haastregt988f1e32019-09-05 10:01:24 +000092kernel void basic_image_readwrite(read_write image3d_t image_read_write_image3d) {
93 half4 h4;
94 int4 i4;
95
96 write_imageh(image_read_write_image3d, i4, h4);
Sven van Haastregt2a69ed02019-09-25 09:12:59 +000097
98 int imgDepth = get_image_depth(image_read_write_image3d);
Sven van Haastregt988f1e32019-09-05 10:01:24 +000099}
Sven van Haastregted69faa2019-09-19 13:41:51 +0000100#endif // __OPENCL_C_VERSION__ >= CL_VERSION_2_0
Sven van Haastregt988f1e32019-09-05 10:01:24 +0000101
102kernel void basic_image_writeonly(write_only image1d_buffer_t image_write_only_image1d_buffer) {
103 half4 h4;
104 float4 f4;
105 int i;
106
107 write_imagef(image_write_only_image1d_buffer, i, f4);
108 write_imageh(image_write_only_image1d_buffer, i, h4);
109}
110
Sven van Haastregt79a222f2019-06-03 09:39:11 +0000111kernel void basic_subgroup(global uint *out) {
112 out[0] = get_sub_group_size();
Sven van Haastregt0aed36d2019-11-01 13:56:43 +0000113#if !defined(__OPENCL_CPP_VERSION__) && __OPENCL_C_VERSION__ < CL_VERSION_2_0
Sven van Haastregted69faa2019-09-19 13:41:51 +0000114// expected-error@-2{{implicit declaration of function 'get_sub_group_size' is invalid in OpenCL}}
Sven van Haastregt6c22eda2019-09-26 13:31:36 +0000115// expected-error@-3{{implicit conversion changes signedness: 'int' to 'uint' (aka 'unsigned int')}}
Sven van Haastregted69faa2019-09-19 13:41:51 +0000116#endif
117}
118
119kernel void basic_vector_data() {
120#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0
121 generic void *generic_p;
122#endif
123 constant void *constant_p;
124 local void *local_p;
125 global void *global_p;
126 private void *private_p;
127 size_t s;
128
129 vload4(s, (const __constant ulong *) constant_p);
130 vload16(s, (const __constant short *) constant_p);
131
132#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0
133 vload3(s, (const __generic ushort *) generic_p);
134 vload16(s, (const __generic uchar *) generic_p);
135#endif
136
137 vload8(s, (const __global long *) global_p);
138 vload2(s, (const __local uint *) local_p);
139 vload16(s, (const __private float *) private_p);
140}
141
142kernel void basic_work_item() {
143 uint ui;
144
145 get_enqueued_local_size(ui);
Sven van Haastregt0aed36d2019-11-01 13:56:43 +0000146#if !defined(__OPENCL_CPP_VERSION__) && __OPENCL_C_VERSION__ < CL_VERSION_2_0
Sven van Haastregted69faa2019-09-19 13:41:51 +0000147// expected-error@-2{{implicit declaration of function 'get_enqueued_local_size' is invalid in OpenCL}}
148#endif
Sven van Haastregt79a222f2019-06-03 09:39:11 +0000149}