|
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