@@ -386,9 +386,12 @@ joint_none_of(Group g, Ptr first, Ptr last, Predicate pred) {
386
386
}
387
387
388
388
// ---- shift_group_left
389
+ // TODO: remove check for detail::is_vec<T> once sycl::vec is trivially
390
+ // copyable.
389
391
template <typename Group, typename T>
390
392
detail::enable_if_t <(std::is_same<std::decay_t <Group>, sub_group>::value &&
391
- detail::is_arithmetic<T>::value),
393
+ (std::is_trivially_copyable<T>::value ||
394
+ detail::is_vec<T>::value)),
392
395
T>
393
396
shift_group_left (Group, T x, typename Group::linear_id_type delta = 1 ) {
394
397
#ifdef __SYCL_DEVICE_ONLY__
@@ -402,9 +405,12 @@ shift_group_left(Group, T x, typename Group::linear_id_type delta = 1) {
402
405
}
403
406
404
407
// ---- shift_group_right
408
+ // TODO: remove check for detail::is_vec<T> once sycl::vec is trivially
409
+ // copyable.
405
410
template <typename Group, typename T>
406
411
detail::enable_if_t <(std::is_same<std::decay_t <Group>, sub_group>::value &&
407
- detail::is_arithmetic<T>::value),
412
+ (std::is_trivially_copyable<T>::value ||
413
+ detail::is_vec<T>::value)),
408
414
T>
409
415
shift_group_right (Group, T x, typename Group::linear_id_type delta = 1 ) {
410
416
#ifdef __SYCL_DEVICE_ONLY__
@@ -418,9 +424,12 @@ shift_group_right(Group, T x, typename Group::linear_id_type delta = 1) {
418
424
}
419
425
420
426
// ---- permute_group_by_xor
427
+ // TODO: remove check for detail::is_vec<T> once sycl::vec is trivially
428
+ // copyable.
421
429
template <typename Group, typename T>
422
430
detail::enable_if_t <(std::is_same<std::decay_t <Group>, sub_group>::value &&
423
- detail::is_arithmetic<T>::value),
431
+ (std::is_trivially_copyable<T>::value ||
432
+ detail::is_vec<T>::value)),
424
433
T>
425
434
permute_group_by_xor (Group, T x, typename Group::linear_id_type mask) {
426
435
#ifdef __SYCL_DEVICE_ONLY__
@@ -434,9 +443,12 @@ permute_group_by_xor(Group, T x, typename Group::linear_id_type mask) {
434
443
}
435
444
436
445
// ---- select_from_group
446
+ // TODO: remove check for detail::is_vec<T> once sycl::vec is trivially
447
+ // copyable.
437
448
template <typename Group, typename T>
438
449
detail::enable_if_t <(std::is_same<std::decay_t <Group>, sub_group>::value &&
439
- detail::is_arithmetic<T>::value),
450
+ (std::is_trivially_copyable<T>::value ||
451
+ detail::is_vec<T>::value)),
440
452
T>
441
453
select_from_group (Group, T x, typename Group::id_type local_id) {
442
454
#ifdef __SYCL_DEVICE_ONLY__
@@ -450,9 +462,12 @@ select_from_group(Group, T x, typename Group::id_type local_id) {
450
462
}
451
463
452
464
// ---- group_broadcast
465
+ // TODO: remove check for detail::is_vec<T> once sycl::vec is trivially
466
+ // copyable.
453
467
template <typename Group, typename T>
454
468
detail::enable_if_t <(is_group_v<std::decay_t <Group>> &&
455
- detail::is_scalar_arithmetic<T>::value),
469
+ (std::is_trivially_copyable<T>::value ||
470
+ detail::is_vec<T>::value)),
456
471
T>
457
472
group_broadcast (Group, T x, typename Group::id_type local_id) {
458
473
#ifdef __SYCL_DEVICE_ONLY__
@@ -467,7 +482,8 @@ group_broadcast(Group, T x, typename Group::id_type local_id) {
467
482
468
483
template <typename Group, typename T>
469
484
detail::enable_if_t <(is_group_v<std::decay_t <Group>> &&
470
- detail::is_scalar_arithmetic<T>::value),
485
+ (std::is_trivially_copyable<T>::value ||
486
+ detail::is_vec<T>::value)),
471
487
T>
472
488
group_broadcast (Group g, T x, typename Group::linear_id_type linear_local_id) {
473
489
#ifdef __SYCL_DEVICE_ONLY__
@@ -485,7 +501,8 @@ group_broadcast(Group g, T x, typename Group::linear_id_type linear_local_id) {
485
501
486
502
template <typename Group, typename T>
487
503
detail::enable_if_t <(is_group_v<std::decay_t <Group>> &&
488
- detail::is_scalar_arithmetic<T>::value),
504
+ (std::is_trivially_copyable<T>::value ||
505
+ detail::is_vec<T>::value)),
489
506
T>
490
507
group_broadcast (Group g, T x) {
491
508
#ifdef __SYCL_DEVICE_ONLY__
0 commit comments