joechrisellis added inline comments.
================
Comment at: clang/test/Sema/attr-arm-sve-vector-bits.c:278-283
-// Test implicit conversion between SVE and GNU vector is invalid when
-// __ARM_FEATURE_SVE_BITS != N
-#if defined(__ARM_FEATURE_SVE_BITS) && __ARM_FEATURE_SVE_BITS == 512
-typedef int32_t int4 __attribute__((vector_size(16)));
-svint32_t badcast(int4 x) { return x; } // expected-error {{returning 'int4'
(vector of 4 'int32_t' values) from a function with incompatible result type
'svint32_t' (aka '__SVInt32_t')}}
-#endif
----------------
c-rhodes wrote:
> I don't think this can be removed. The ACLE states "Whenever
> __ARM_FEATURE_SVE_BITS==N, GNUT implicitly converts to VLAT and VLAT
> implicitly converts to GNUT.".
>
> AFAIK lax vector conversions only apply to vectors of the same width, with
> GNU vectors for example the following is invalid regardless of lax vector
> conversions:
>
> ```typedef int8_t int8x16_t __attribute__((vector_size(16)));
> typedef int8_t int8x64_t __attribute__((vector_size(64)));
>
> int8x16_t foo(int8x64_t x) { return x; }```
Great spot, didn't see that in the spec. I've re-added the test and added an
extra condition to check if `__ARM_FEATURE_SVE_BITS == N` before allowing the
lax conversion for GNU vectors. Not sure if this is the best way to do it,
though. :)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D91696/new/
https://reviews.llvm.org/D91696
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits