Skip to content

operator% is not available for sycl::vec in some cases #8881

Closed
@kopylovanat

Description

@kopylovanat

There is

operator&(const vec& lhs, const vec& rhs) 
operator&(const vec& lhs, const DataT& rhs) 
operator&(const DataT& lhs, const vec& rhs)

in 4.14.2.1. Vec interface , but they are not available for swizzled vec and the last one not available for regular vec also.

To Reproduce

#include <sycl.hpp>

int main() {

  sycl::vec<int, 2> testVec1(3);
  sycl::vec<int, 2> testVec2(2);
  int v = 5;

  sycl::vec<int, 2> resVec;
  resVec = v % testVec2;

  resVec = testVec1.template swizzle<sycl::elem::s0, sycl::elem::s1>() % testVec2.template swizzle<sycl::elem::s0, sycl::elem::s1>();
  resVec = testVec1.template swizzle<sycl::elem::s0, sycl::elem::s1>() % v;
  resVec = testVec1.template swizzle<sycl::elem::s0, sycl::elem::s1>() % testVec2;
  resVec = v % testVec2.template swizzle<sycl::elem::s0, sycl::elem::s1>();

clang++ -fsycl ./sample_vec_subscript.cpp -o sample

Output:

./sample_vec_subscript.cpp:7:58: error: type 'Swizzle<1>' (aka 'SwizzleOp<sycl::vec<int, 2>, GetOp<int>, GetOp<int>, sycl::detail::GetOp, 1>') does not provide a subscript operator
  auto ref = input_vec.template swizzle<sycl::elem::s1>()[0];
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
1 error generated.

Environment:

  • OS: Red_8.2_x86_64
  • Memory: 504GB
  • CPUCount: 2 CoreCount: 64 HT: yes
  • CPU Model: Intel(R) Xeon(R) Platinum 8260M CPU @ 2.40GHz
  • Compiler version: DPC++ daily 2023-03-21

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions