|
6 | 6 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
7 | 7 | // |
8 | 8 | //===----------------------------------------------------------------------===// |
9 | | -#include <CL/sycl.hpp> |
10 | | -#include <CL/sycl/detail/common.hpp> |
11 | | -#include <cassert> |
12 | | -#include <iostream> |
13 | | -#include <type_traits> |
14 | | - |
15 | | -using namespace std; |
16 | | - |
17 | | -using cl_schar = cl_char; |
18 | | -using cl_schar4 = cl_char4; |
19 | | - |
20 | | -namespace s = cl::sycl; |
21 | | - |
22 | | -#define CHECK_TYPE(type) \ |
23 | | - static_assert(sizeof(cl_##type) == sizeof(cl::sycl::cl_##type), "Wrong " \ |
24 | | - "size") |
25 | 9 |
|
26 | | -#define CHECK_SIZE(T, S) static_assert(sizeof(T) == S, "Wrong size of type"); |
27 | | - |
28 | | -#define CHECK_SIZE_VEC_N(T, n) \ |
29 | | - static_assert(n * sizeof(T) == sizeof(cl::sycl::vec<T, n>), \ |
30 | | - "Wrong size of vec<type>"); |
31 | | - |
32 | | -#define CHECK_SIZE_VEC_N3(T) \ |
33 | | - static_assert(sizeof(cl::sycl::vec<T, 3>) == sizeof(cl::sycl::vec<T, 4>), \ |
34 | | - "Wrong size of vec<cl_type3>"); |
35 | | - |
36 | | -#define CHECK_SIZE_VEC(T) \ |
37 | | - CHECK_SIZE_VEC_N(T, 2); \ |
38 | | - CHECK_SIZE_VEC_N3(T); \ |
39 | | - CHECK_SIZE_VEC_N(T, 4); \ |
40 | | - CHECK_SIZE_VEC_N(T, 8); \ |
41 | | - CHECK_SIZE_VEC_N(T, 16); |
| 10 | +#include <CL/sycl.hpp> |
42 | 11 |
|
43 | | -#define CHECK_SIZE_TYPE_I(T, S) \ |
44 | | - CHECK_SIZE(T, S) \ |
45 | | - static_assert(std::is_signed<T>::value, "Expected signed type"); |
| 12 | +template <typename T, int N> inline void checkVectorSizeAndAlignment() { |
| 13 | + using VectorT = cl::sycl::vec<T, N>; |
| 14 | + constexpr auto RealLength = (N != 3 ? N : 4); |
| 15 | + static_assert(sizeof(VectorT) == (sizeof(T) * RealLength), |
| 16 | + "Wrong size of vec<T, N>"); |
| 17 | + static_assert(alignof(VectorT) == (alignof(T) * RealLength), |
| 18 | + "Wrong alignment of vec<T, N>"); |
| 19 | +} |
46 | 20 |
|
47 | | -#define CHECK_SIZE_TYPE_UI(T, S) \ |
48 | | - CHECK_SIZE(T, S) \ |
49 | | - static_assert(std::is_unsigned<T>::value, "Expected unsigned type"); |
| 21 | +template <typename T> inline void checkVectorsWithN() { |
| 22 | + checkVectorSizeAndAlignment<T, 1>(); |
| 23 | + checkVectorSizeAndAlignment<T, 2>(); |
| 24 | + checkVectorSizeAndAlignment<T, 3>(); |
| 25 | + checkVectorSizeAndAlignment<T, 4>(); |
| 26 | + checkVectorSizeAndAlignment<T, 8>(); |
| 27 | + checkVectorSizeAndAlignment<T, 16>(); |
| 28 | +} |
50 | 29 |
|
51 | | -#define CHECK_SIZE_TYPE_F(T, S) \ |
52 | | - CHECK_SIZE(T, S) \ |
53 | | - static_assert(std::numeric_limits<T>::is_iec559, \ |
54 | | - "Expected type conformed to the IEEE 754"); |
| 30 | +inline void checkVectors() { |
| 31 | + checkVectorsWithN<half>(); |
| 32 | + checkVectorsWithN<float>(); |
| 33 | + checkVectorsWithN<double>(); |
| 34 | + checkVectorsWithN<char>(); |
| 35 | + checkVectorsWithN<signed char>(); |
| 36 | + checkVectorsWithN<unsigned char>(); |
| 37 | + checkVectorsWithN<signed short>(); |
| 38 | + checkVectorsWithN<unsigned short>(); |
| 39 | + checkVectorsWithN<signed int>(); |
| 40 | + checkVectorsWithN<unsigned int>(); |
| 41 | + checkVectorsWithN<signed long>(); |
| 42 | + checkVectorsWithN<unsigned long>(); |
| 43 | + checkVectorsWithN<signed long long>(); |
| 44 | + checkVectorsWithN<unsigned long long>(); |
| 45 | + checkVectorsWithN<::cl_char>(); |
| 46 | + checkVectorsWithN<::cl_uchar>(); |
| 47 | + checkVectorsWithN<::cl_short>(); |
| 48 | + checkVectorsWithN<::cl_ushort>(); |
| 49 | + checkVectorsWithN<::cl_int>(); |
| 50 | + checkVectorsWithN<::cl_uint>(); |
| 51 | + checkVectorsWithN<::cl_long>(); |
| 52 | + checkVectorsWithN<::cl_ulong>(); |
| 53 | + checkVectorsWithN<::cl_half>(); |
| 54 | + checkVectorsWithN<::cl_float>(); |
| 55 | + checkVectorsWithN<::cl_double>(); |
| 56 | +} |
55 | 57 |
|
56 | 58 | int main() { |
57 | | - CHECK_TYPE(bool); |
58 | | - CHECK_TYPE(char); |
59 | | - CHECK_TYPE(schar); |
60 | | - CHECK_TYPE(uchar); |
61 | | - CHECK_TYPE(short); |
62 | | - CHECK_TYPE(ushort); |
63 | | - CHECK_TYPE(half); |
64 | | - CHECK_TYPE(int); |
65 | | - CHECK_TYPE(uint); |
66 | | - CHECK_TYPE(long); |
67 | | - CHECK_TYPE(ulong); |
68 | | - CHECK_TYPE(float); |
69 | | - CHECK_TYPE(double); |
70 | | - CHECK_TYPE(char2); |
71 | | - CHECK_TYPE(uchar3); |
72 | | - CHECK_TYPE(short4); |
73 | | - CHECK_TYPE(ushort8); |
74 | | - CHECK_TYPE(half16); |
75 | | - CHECK_TYPE(int2); |
76 | | - CHECK_TYPE(uint3); |
77 | | - CHECK_TYPE(long4); |
78 | | - CHECK_TYPE(schar4); |
79 | | - CHECK_TYPE(ulong8); |
80 | | - CHECK_TYPE(float16); |
81 | | - CHECK_TYPE(double2); |
82 | | - |
83 | | - // Table 4.93: Scalar data type aliases supported by SYCL |
84 | | - CHECK_SIZE_TYPE_UI(cl::sycl::byte, 1); |
85 | | - |
86 | | - CHECK_SIZE_TYPE_I(cl::sycl::cl_char, 1); |
87 | | - CHECK_SIZE_TYPE_I(cl::sycl::cl_short, 2); |
88 | | - CHECK_SIZE_TYPE_I(cl::sycl::cl_int, 4); |
89 | | - CHECK_SIZE_TYPE_I(cl::sycl::cl_long, 8); |
90 | | - |
91 | | - CHECK_SIZE_TYPE_UI(cl::sycl::cl_uchar, 1); |
92 | | - CHECK_SIZE_TYPE_UI(cl::sycl::cl_ushort, 2); |
93 | | - CHECK_SIZE_TYPE_UI(cl::sycl::cl_uint, 4); |
94 | | - CHECK_SIZE_TYPE_UI(cl::sycl::cl_ulong, 8); |
95 | | - |
96 | | - CHECK_SIZE_TYPE_F(cl::sycl::cl_float, 4); |
97 | | - CHECK_SIZE_TYPE_F(cl::sycl::cl_double, 8); |
98 | | - // CHECK_SIZE_TYPE_F(cl::sycl::cl_half, 2); |
99 | | - |
100 | | - CHECK_SIZE_VEC(char); |
101 | | - CHECK_SIZE_VEC(short); |
102 | | - CHECK_SIZE_VEC(unsigned short); |
103 | | - CHECK_SIZE_VEC(int); |
104 | | - CHECK_SIZE_VEC(unsigned int); |
105 | | - CHECK_SIZE_VEC(long); |
106 | | - CHECK_SIZE_VEC(unsigned long); |
107 | | - CHECK_SIZE_VEC(long long); |
108 | | - CHECK_SIZE_VEC(unsigned long long); |
109 | | - CHECK_SIZE_VEC(float); |
110 | | - CHECK_SIZE_VEC(double); |
111 | | - |
112 | | - CHECK_SIZE_VEC(s::cl_char); |
113 | | - CHECK_SIZE_VEC(s::cl_schar); |
114 | | - CHECK_SIZE_VEC(s::cl_uchar); |
115 | | - CHECK_SIZE_VEC(s::cl_short); |
116 | | - CHECK_SIZE_VEC(s::cl_ushort); |
117 | | - CHECK_SIZE_VEC(s::cl_half); |
118 | | - CHECK_SIZE_VEC(s::cl_int); |
119 | | - CHECK_SIZE_VEC(s::cl_uint); |
120 | | - CHECK_SIZE_VEC(s::cl_long); |
121 | | - CHECK_SIZE_VEC(s::cl_ulong); |
122 | | - CHECK_SIZE_VEC(s::cl_float); |
123 | | - CHECK_SIZE_VEC(s::cl_double); |
| 59 | + checkVectors(); |
| 60 | + return 0; |
124 | 61 | } |
0 commit comments