1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
| // RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL -fdeclare-opencl-builtins -DNO_HEADER
// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL -fdeclare-opencl-builtins -finclude-default-header
// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL1.2 -fdeclare-opencl-builtins -DNO_HEADER
// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL1.2 -fdeclare-opencl-builtins -finclude-default-header
// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL2.0 -fdeclare-opencl-builtins -DNO_HEADER
// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL2.0 -fdeclare-opencl-builtins -finclude-default-header
#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0
// expected-no-diagnostics
#endif
// Test the -fdeclare-opencl-builtins option.
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
#if __OPENCL_C_VERSION__ < CL_VERSION_1_2
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#endif
// Provide typedefs when invoking clang without -finclude-default-header.
#ifdef NO_HEADER
typedef char char2 __attribute__((ext_vector_type(2)));
typedef char char4 __attribute__((ext_vector_type(4)));
typedef float float4 __attribute__((ext_vector_type(4)));
typedef half half4 __attribute__((ext_vector_type(4)));
typedef int int2 __attribute__((ext_vector_type(2)));
typedef int int4 __attribute__((ext_vector_type(4)));
typedef long long2 __attribute__((ext_vector_type(2)));
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef unsigned short ushort;
typedef __SIZE_TYPE__ size_t;
#endif
kernel void test_pointers(volatile global void *global_p, global const int4 *a) {
int i;
unsigned int ui;
prefetch(a, 2);
atom_add((volatile __global int *)global_p, i);
atom_cmpxchg((volatile __global unsigned int *)global_p, ui, ui);
}
kernel void basic_conversion() {
double d;
float f;
char2 c2;
long2 l2;
float4 f4;
int4 i4;
f = convert_float(d);
d = convert_double_sat_rtp(f);
l2 = convert_long2_rtz(c2);
i4 = convert_int4_sat(f4);
}
char4 test_int(char c, char4 c4) {
char m = max(c, c);
char4 m4 = max(c4, c4);
return max(c4, c);
}
kernel void basic_image_readonly(read_only image2d_t image_read_only_image2d) {
int2 i2;
sampler_t sampler;
half4 res;
float4 resf;
resf = read_imagef(image_read_only_image2d, i2);
res = read_imageh(image_read_only_image2d, i2);
res = read_imageh(image_read_only_image2d, sampler, i2);
int imgWidth = get_image_width(image_read_only_image2d);
}
#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0
kernel void basic_image_readwrite(read_write image3d_t image_read_write_image3d) {
half4 h4;
int4 i4;
write_imageh(image_read_write_image3d, i4, h4);
int imgDepth = get_image_depth(image_read_write_image3d);
}
#endif // __OPENCL_C_VERSION__ >= CL_VERSION_2_0
kernel void basic_image_writeonly(write_only image1d_buffer_t image_write_only_image1d_buffer) {
half4 h4;
float4 f4;
int i;
write_imagef(image_write_only_image1d_buffer, i, f4);
write_imageh(image_write_only_image1d_buffer, i, h4);
}
kernel void basic_subgroup(global uint *out) {
out[0] = get_sub_group_size();
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
// expected-error@-2{{implicit declaration of function 'get_sub_group_size' is invalid in OpenCL}}
// expected-error@-3{{implicit conversion changes signedness: 'int' to 'uint' (aka 'unsigned int')}}
#endif
}
kernel void basic_vector_data() {
#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0
generic void *generic_p;
#endif
constant void *constant_p;
local void *local_p;
global void *global_p;
private void *private_p;
size_t s;
vload4(s, (const __constant ulong *) constant_p);
vload16(s, (const __constant short *) constant_p);
#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0
vload3(s, (const __generic ushort *) generic_p);
vload16(s, (const __generic uchar *) generic_p);
#endif
vload8(s, (const __global long *) global_p);
vload2(s, (const __local uint *) local_p);
vload16(s, (const __private float *) private_p);
}
kernel void basic_work_item() {
uint ui;
get_enqueued_local_size(ui);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
// expected-error@-2{{implicit declaration of function 'get_enqueued_local_size' is invalid in OpenCL}}
#endif
}
|