Anastasia added inline comments.

================
Comment at: clang/test/SemaOpenCLCXX/reinterpret-cast.clcpp:15
+  int4 i4;
+  auto i4_to_i3 = reinterpret_cast<int3>(i4); // 
expected-error{{reinterpret_cast from vector 'int4' (vector of 4 'int' values) 
to vector 'int3' (vector of 3 'int' values) of different size}}
+
----------------
I think in OpenCL vector 3 should be setup as vector 4 in memory with the 4th 
component being `undef` value. So this conversion should be permitted.

For example you can reinterpret cast between 3 and 4 components vectors using 
as_typen functions.

https://godbolt.org/z/sKqnYhnGe

I don't think we have a comprehensive description but these are the quotes from 
OpenCL C:

>For 3-component vector data types, the size of the data type is 4 * 
>sizeof(component). This means that a 3-component vector data type will be 
>aligned to a 4 * sizeof(component) boundary. The vload3 and vstore3 built-in 
>functions can be used to read and write, respectively, 3-component vector data 
>types from an array of packed scalar data type.

> When the operand and result type contain a different number of elements, the 
> result shall be implementation-defined except if the operand is a 4-component 
> vector and the result is a 3-component vector. In this case, the bits in the 
> operand shall be returned directly without modification as the new type. 

> The suffixes .lo (or .even) and .hi (or .odd) for a 3-component vector type 
> operate as if the 3-component vector type is a 4-component vector type with 
> the value in the w component undefined.




Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101519/new/

https://reviews.llvm.org/D101519

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to