Skip to content

Commit b01eb88

Browse files
committed
Remove redundant code; add more test cases for simd_view.
Signed-off-by: kbobrovs <[email protected]>
1 parent eb578e5 commit b01eb88

File tree

2 files changed

+98
-25
lines changed

2 files changed

+98
-25
lines changed

sycl/include/sycl/ext/intel/experimental/esimd/detail/simd_view_impl.hpp

+3-9
Original file line numberDiff line numberDiff line change
@@ -311,15 +311,6 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
311311
return write(convert<element_type>(reinterpret_cast<const SimdT &>(Other)));
312312
}
313313

314-
template <class BaseTy1, class RegionTy1,
315-
class = std::enable_if_t<
316-
(is_simd_type_v<BaseTy1> == is_simd_type_v<BaseTy>)&&(
317-
__SEIEE::shape_type<RegionTy1>::length ==
318-
__SEIEE::shape_type<RegionTy>::length)>>
319-
Derived &operator=(const simd_view<BaseTy1, RegionTy1> &Other) {
320-
return write(convert<element_type>(Other.read()));
321-
}
322-
323314
template <class T1, class = std::enable_if_t<detail::is_vectorizable_v<T1>>>
324315
Derived &operator=(T1 RHS) {
325316
return write(value_type((element_type)RHS));
@@ -332,15 +323,18 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
332323
*this += 1;
333324
return cast_this_to_derived();
334325
}
326+
335327
value_type operator++(int) {
336328
value_type Ret(read());
337329
operator++();
338330
return Ret;
339331
}
332+
340333
Derived &operator--() {
341334
*this -= 1;
342335
return cast_this_to_derived();
343336
}
337+
344338
value_type operator--(int) {
345339
value_type Ret(read());
346340
operator--();

sycl/test/esimd/simd_view.cpp

+95-16
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,39 @@ SYCL_ESIMD_FUNCTION auto test_simd_view_bin_ops() {
2626
return ref0 + ref1;
2727
}
2828

29-
// auto test_simd_view_bitwise_ops() __attribute__((sycl_device)) {
30-
// simd<int, 16> v0 = 1;
31-
// simd<int, 16> v1 = 2;
32-
// auto ref0 = v0.select<8, 2>(0);
33-
// auto ref1 = v1.select<8, 2>(0);
34-
// simd<int, 8> v2 = (ref0 | ref1) & (ref0 | 3);
35-
// ref0 |= 3;
36-
// ref0 |= ref1;
37-
// simd<int, 8> v3 = (ref0 ^ ref1) & (ref0 ^ 3);
38-
// ref0 ^= 3;
39-
// ref0 ^= ref1;
40-
// simd<int, 8> v4 = (ref0 & ref1) | (ref0 & 3);
41-
// ref0 &= 3;
42-
// ref0 &= ref1;
43-
// return ref0;
44-
// }
29+
SYCL_ESIMD_FUNCTION auto test_simd_view_bitwise_ops() {
30+
simd<int, 16> v0 = 1;
31+
simd<int, 16> v1 = 2;
32+
auto ref0 = v0.select<8, 2>(0);
33+
auto ref1 = v1.select<8, 2>(0);
34+
simd<int, 8> v2 = (ref0 | ref1) & (ref0 | 3);
35+
ref0 |= 3;
36+
ref0 |= ref1;
37+
simd<int, 8> v3 = (ref0 ^ ref1) & (ref0 ^ 3);
38+
ref0 ^= 3;
39+
ref0 ^= ref1;
40+
simd<int, 8> v4 = (ref0 & ref1) | (ref0 & 3);
41+
ref0 &= 3;
42+
ref0 &= ref1;
43+
return ref0;
44+
}
45+
46+
SYCL_ESIMD_FUNCTION auto test_simd_mask_view_bitwise_ops() {
47+
simd_mask<16> v0 = 1;
48+
simd_mask<16> v1 = 2;
49+
auto ref0 = v0.select<8, 2>(0);
50+
auto ref1 = v1.select<8, 2>(0);
51+
simd_mask<8> v2 = (ref0 | ref1) & (ref0 | 3);
52+
ref0 |= 3;
53+
ref0 |= ref1;
54+
simd_mask<8> v3 = (ref0 ^ ref1) & (ref0 ^ 3);
55+
ref0 ^= 3;
56+
ref0 ^= ref1;
57+
simd_mask<8> v4 = (ref0 & ref1) | (ref0 & 3);
58+
ref0 &= 3;
59+
ref0 &= ref1;
60+
return ref0;
61+
}
4562

4663
SYCL_ESIMD_FUNCTION bool test_simd_view_unary_ops() {
4764
simd<int, 16> v0 = 1;
@@ -224,3 +241,65 @@ void test_simd_view_len1_binop() SYCL_ESIMD_FUNCTION {
224241
auto v2 = s.select<2, 1>(0);
225242
auto x = v1 * v2;
226243
}
244+
245+
void test_simd_view_assign_op() SYCL_ESIMD_FUNCTION {
246+
// multiple elements
247+
{
248+
#define N 4
249+
// simd - assign views of different element type
250+
simd<float, 32> v1 = 0;
251+
simd<short, 16> v2 = 0;
252+
// - region is a region type (top-level region)
253+
v1.select<N, 2>(0) = v2.select<N, 2>(0);
254+
v2.select<N, 2>(0) = v1.select<N, 2>(0);
255+
// - region is a std::pair (nested region)
256+
v1.select<8, 2>(0).select<N, 1>(1) = v2.select<8, 2>(0).select<N, 1>(1);
257+
v2.select<8, 2>(0).select<N, 1>(1) = v1.select<8, 2>(0).select<N, 1>(1);
258+
// - first region is top-level, second - nested
259+
v1.select<4, 2>(0) = v2.select<8, 2>(0).select<4, 1>(1);
260+
// - first region is nested, second - top-level
261+
v2.select<8, 2>(0).select<4, 1>(1) = v1.select<4, 2>(0);
262+
263+
// simd_mask
264+
simd_mask<32> m1 = 0;
265+
simd_mask<16> m2 = 0;
266+
// - region is a region type (top-level region)
267+
m1.select<4, 2>(0) = m2.select<4, 2>(0);
268+
m2.select<4, 2>(0) = m1.select<4, 2>(0);
269+
// - region is a std::pair (nested region)
270+
m1.select<8, 2>(0).select<N, 1>(1) = m2.select<8, 2>(0).select<N, 1>(1);
271+
m2.select<8, 2>(0).select<N, 1>(1) = m1.select<8, 2>(0).select<N, 1>(1);
272+
// - first region is top-level, second - nested
273+
m1.select<4, 2>(0) = m2.select<8, 2>(0).select<4, 1>(1);
274+
// - first region is nested, second - top-level
275+
m2.select<8, 2>(0).select<4, 1>(1) = m1.select<4, 2>(0);
276+
#undef N
277+
}
278+
// single element
279+
{
280+
#define N 1
281+
// simd - assign views of different element type
282+
simd<float, 16> v1 = 0;
283+
simd<short, 8> v2 = 0;
284+
// - region is a region type (top-level region)
285+
v1.select<N, 1>(0) = v2.select<N, 1>(0);
286+
v2[0] = v1[0];
287+
v2[1] = v1.select<N, 1>(1);
288+
// - region is a std::pair (nested region)
289+
v1.select<4, 2>(0).select<N, 1>(1) = v2.select<4, 2>(0).select<N, 1>(1);
290+
v2.select<4, 2>(0).select<N, 1>(1) = v1.select<4, 2>(0).select<N, 1>(1);
291+
292+
// simd_mask
293+
simd_mask<16> m1 = 0;
294+
simd_mask<8> m2 = 0;
295+
// - region is a region type (top-level region)
296+
m1.select<N, 1>(0) = m2.select<N, 1>(0);
297+
m2[0] = m1[0];
298+
m2[1] = m1.select<N, 1>(1);
299+
// - region is a std::pair (nested region)
300+
m1.select<4, 2>(0).select<N, 1>(1) = m2.select<4, 2>(0).select<N, 1>(1);
301+
m2.select<4, 2>(0)[1] = m1.select<4, 2>(0)[1];
302+
m2.select<4, 2>(0)[2] = m1.select<4, 2>(0).select<N, 1>(2);
303+
#undef N
304+
}
305+
}

0 commit comments

Comments
 (0)