Skip to content

Commit 1299e21

Browse files
[SYCL] Align sycl::vec aliases with SYCL 2020 (#7889)
Added aliases for `sycl::vec` class as described in section 4.14.2.2. Aliases of SYCL 2020 specification, revision 6. Those are a bit different from what we had for SYCL 1.2.1 Aliases which use OpenCL type, such as `cl_int2` are still preserved, because they are used internally, see #7888.
1 parent 92f6d68 commit 1299e21

File tree

4 files changed

+65
-2
lines changed

4 files changed

+65
-2
lines changed

sycl/include/sycl/aliases.hpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include <sycl/detail/cl.h>
1212
#include <sycl/detail/common.hpp>
13+
#include <sycl/detail/defines_elementary.hpp>
1314

1415
#include <cstddef>
1516
#include <cstdint>
@@ -62,6 +63,22 @@ class half;
6263
__SYCL_MAKE_VECTOR_ALIASES_FOR_OPENCL_TYPES(N) \
6364
__SYCL_MAKE_VECTOR_ALIASES_FOR_SIGNED_AND_UNSIGNED_TYPES(N)
6465

66+
// FIXME: OpenCL vector aliases are not defined by SYCL 2020 spec and should be
67+
// removed from here. See intel/llvm#7888
68+
#define __SYCL_2020_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(N) \
69+
__SYCL_MAKE_VECTOR_ALIASES_FOR_OPENCL_TYPES(N) \
70+
__SYCL_MAKE_VECTOR_ALIAS(char, std::int8_t, N) \
71+
__SYCL_MAKE_VECTOR_ALIAS(uchar, std::uint8_t, N) \
72+
__SYCL_MAKE_VECTOR_ALIAS(short, std::int16_t, N) \
73+
__SYCL_MAKE_VECTOR_ALIAS(ushort, std::uint16_t, N) \
74+
__SYCL_MAKE_VECTOR_ALIAS(int, std::int32_t, N) \
75+
__SYCL_MAKE_VECTOR_ALIAS(uint, std::uint32_t, N) \
76+
__SYCL_MAKE_VECTOR_ALIAS(long, std::int64_t, N) \
77+
__SYCL_MAKE_VECTOR_ALIAS(ulong, std::uint64_t, N) \
78+
__SYCL_MAKE_VECTOR_ALIAS(float, float, N) \
79+
__SYCL_MAKE_VECTOR_ALIAS(double, double, N) \
80+
__SYCL_MAKE_VECTOR_ALIAS(half, half, N)
81+
6582
namespace sycl {
6683
__SYCL_INLINE_VER_NAMESPACE(_V1) {
6784
using byte __SYCL2020_DEPRECATED("use std::byte instead") = std::uint8_t;
@@ -73,6 +90,9 @@ using ulong = unsigned long;
7390
using longlong = long long;
7491
using ulonglong = unsigned long long;
7592
using half = sycl::detail::half_impl::half;
93+
94+
// FIXME: SYCL 2020 spec says that cl_* aliases should reside in sycl::opencl
95+
// namespace.
7696
using cl_bool = bool;
7797
using cl_char = std::int8_t;
7898
using cl_uchar = std::uint8_t;
@@ -86,11 +106,20 @@ using cl_half = half;
86106
using cl_float = float;
87107
using cl_double = double;
88108

109+
// Vector aliases are different between SYCL 1.2.1 and SYCL 2020
110+
#if SYCL_LANGUAGE_VERSION >= 202001
111+
__SYCL_2020_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(2)
112+
__SYCL_2020_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(3)
113+
__SYCL_2020_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(4)
114+
__SYCL_2020_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(8)
115+
__SYCL_2020_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(16)
116+
#else
89117
__SYCL_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(2)
90118
__SYCL_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(3)
91119
__SYCL_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(4)
92120
__SYCL_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(8)
93121
__SYCL_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(16)
122+
#endif
94123
} // __SYCL_INLINE_VER_NAMESPACE(_V1)
95124
} // namespace sycl
96125

@@ -99,3 +128,4 @@ __SYCL_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH(16)
99128
#undef __SYCL_MAKE_VECTOR_ALIASES_FOR_OPENCL_TYPES
100129
#undef __SYCL_MAKE_VECTOR_ALIASES_FOR_SIGNED_AND_UNSIGNED_TYPES
101130
#undef __SYCL_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH
131+
#undef __SYCL_2020_MAKE_VECTOR_ALIASES_FOR_VECTOR_LENGTH

sycl/test/basic_tests/aliases.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
1+
// RUN: %clangxx -fsycl -sycl-std=1.2.1 -fsycl-targets=%sycl_triple -fsyntax-only %s
22
//==------------ aliases.cpp - SYCL type aliases test ----------------------==//
33
//
44
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// RUN: %clangxx -fsycl -fsyntax-only -fsycl-device-only %s
2+
3+
#include <sycl/sycl.hpp>
4+
5+
#include <cstdint>
6+
#include <type_traits>
7+
8+
#define CHECK_ALIAS(type, storage_type, elems) \
9+
static_assert( \
10+
std::is_same_v<sycl::type##elems, sycl::vec<storage_type, elems>>);
11+
12+
#define CHECK_ALIASES_FOR_VEC_LENGTH(N) \
13+
CHECK_ALIAS(char, std::int8_t, N) \
14+
CHECK_ALIAS(uchar, std::uint8_t, N) \
15+
CHECK_ALIAS(short, std::int16_t, N) \
16+
CHECK_ALIAS(ushort, std::uint16_t, N) \
17+
CHECK_ALIAS(int, std::int32_t, N) \
18+
CHECK_ALIAS(uint, std::uint32_t, N) \
19+
CHECK_ALIAS(long, std::int64_t, N) \
20+
CHECK_ALIAS(ulong, std::uint64_t, N) \
21+
CHECK_ALIAS(half, sycl::half, N) \
22+
CHECK_ALIAS(float, float, N) \
23+
CHECK_ALIAS(double, double, N)
24+
25+
int main() {
26+
27+
CHECK_ALIASES_FOR_VEC_LENGTH(2)
28+
CHECK_ALIASES_FOR_VEC_LENGTH(3)
29+
CHECK_ALIASES_FOR_VEC_LENGTH(4)
30+
CHECK_ALIASES_FOR_VEC_LENGTH(8)
31+
CHECK_ALIASES_FOR_VEC_LENGTH(16)
32+
33+
return 0;
34+
}

sycl/test/type_traits/type_traits.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ int main() {
187187
test_nan_types<s::ushort2, s::ushort2>();
188188
test_nan_types<s::uint2, s::uint2>();
189189
test_nan_types<s::ulong2, s::ulong2>();
190-
test_nan_types<s::ulonglong2, s::ulonglong2>();
191190

192191
test_make_signed_t<int, int>();
193192
test_make_signed_t<const int, const int>();

0 commit comments

Comments
 (0)