1
- // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.run
1
+ // RUN: %clangxx -fsycl -std=c++17 - fsycl-targets=%sycl_triple %s -o %t.run
2
2
// RUN: %GPU_RUN_PLACEHOLDER %t.run
3
3
// RUN: %CPU_RUN_PLACEHOLDER %t.run
4
4
// RUN: %ACC_RUN_PLACEHOLDER %t.run
13
13
14
14
using namespace cl ::sycl;
15
15
16
- template <typename T> class KernelName ;
16
+ template <typename T>
17
+ class TypeHelper ;
18
+
19
+ template <typename T>
20
+ using KernelName = class TypeHelper <typename std::conditional<std::is_same<T, std::byte>::value, unsigned char , T>::type>;
17
21
18
22
// Define the number of work items to enqueue.
19
23
const size_t NElems = 32 ;
@@ -24,14 +28,14 @@ template <typename T> void initInputBuffer(buffer<T, 1> &Buf, size_t Stride) {
24
28
auto Acc = Buf.template get_access <access::mode::write>();
25
29
for (size_t I = 0 ; I < Buf.get_count (); I += WorkGroupSize) {
26
30
for (size_t J = 0 ; J < WorkGroupSize; J++)
27
- Acc[I + J] = I + J + ((J % Stride == 0 ) ? 100 : 0 );
31
+ Acc[I + J] = (T)( I + J + ((J % Stride == 0 ) ? 100 : 0 ) );
28
32
}
29
33
}
30
34
31
35
template <typename T> void initOutputBuffer (buffer<T, 1 > &Buf) {
32
36
auto Acc = Buf.template get_access <access::mode::write>();
33
37
for (size_t I = 0 ; I < Buf.get_count (); I++)
34
- Acc[I] = 0 ;
38
+ Acc[I] = (T) 0 ;
35
39
}
36
40
37
41
template <typename T> struct is_vec : std::false_type {};
@@ -50,7 +54,7 @@ template <typename T> bool checkEqual(vec<T, 4> A, size_t B) {
50
54
template <typename T>
51
55
typename std::enable_if<!is_vec<T>::value, bool >::type checkEqual (T A,
52
56
size_t B) {
53
- T TB = B;
57
+ T TB = (T) B;
54
58
return A == TB;
55
59
}
56
60
@@ -67,7 +71,12 @@ template <typename T> std::string toString(vec<T, 4> A) {
67
71
}
68
72
69
73
template <typename T = void >
70
- typename std::enable_if<!is_vec<T>::value, std::string>::type toString (T A) {
74
+ typename std::enable_if<!is_vec<T>::value && std::is_same<T, std::byte>::value, std::string>::type toString (T A) {
75
+ return std::to_string ((unsigned char )A);
76
+ }
77
+
78
+ template <typename T = void >
79
+ typename std::enable_if<!is_vec<T>::value && !std::is_same<T, std::byte>::value, std::string>::type toString (T A) {
71
80
return std::to_string (A);
72
81
}
73
82
@@ -156,6 +165,8 @@ int main() {
156
165
return 1 ;
157
166
if (test<cl::sycl::cl_bool>(Stride))
158
167
return 1 ;
168
+ if (test<std::byte>(Stride))
169
+ return 1 ;
159
170
}
160
171
161
172
std::cout << " Test passed.\n " ;
0 commit comments