1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve \
3 // RUN: -target-feature +bf16 -target-feature +sve -target-feature +sme -target-feature +sme2 -target-feature +sve2 -target-feature +neon -Waarch64-sme-attributes -fsyntax-only -verify %s
5 // REQUIRES: aarch64-registered-target
11 int16x8_t
incompat_neon_sm(int16x8_t splat
) __arm_streaming
{
12 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
13 return (int16x8_t
)__builtin_neon_vqaddq_v((int8x16_t
)splat
, (int8x16_t
)splat
, 33);
16 __arm_locally_streaming int16x8_t
incompat_neon_ls(int16x8_t splat
) {
17 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
18 return (int16x8_t
)__builtin_neon_vqaddq_v((int8x16_t
)splat
, (int8x16_t
)splat
, 33);
21 int16x8_t
incompat_neon_smc(int16x8_t splat
) __arm_streaming_compatible
{
22 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
23 return (int16x8_t
)__builtin_neon_vqaddq_v((int8x16_t
)splat
, (int8x16_t
)splat
, 33);
26 void incompat_sme_smc(svbool_t pg
, void const *ptr
) __arm_streaming_compatible
__arm_inout("za") {
27 // expected-error@+1 {{builtin can only be called from a streaming function}}
28 return __builtin_sme_svld1_hor_za128(0, 0, pg
, ptr
);
31 float incomp_sve_sm_fadda_sm(void) __arm_streaming
{
32 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
33 return svadda(svptrue_b32(), 0, svdup_f32(1));
36 float incomp_sve_sm_fadda_smc(void) __arm_streaming_compatible
{
37 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
38 return svadda(svptrue_b32(), 0, svdup_f32(1));
41 svuint32_t
incompat_sve_sm(svbool_t pg
, svuint32_t a
, int16_t b
) __arm_streaming
{
42 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
43 return __builtin_sve_svld1_gather_u32base_index_u32(pg
, a
, b
);
46 // expected-warning@+2 {{returning a VL-dependent argument from a locally streaming function is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
47 // expected-warning@+1 {{passing a VL-dependent argument to a locally streaming function is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
48 __arm_locally_streaming svuint32_t
incompat_sve_ls(svbool_t pg
, svuint32_t a
, int64_t b
) {
49 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
50 return __builtin_sve_svld1_gather_u32base_index_u32(pg
, a
, b
);
53 svuint32_t
incompat_sve_smc(svbool_t pg
, svuint32_t a
, int64_t b
) __arm_streaming_compatible
{
54 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
55 return __builtin_sve_svld1_gather_u32base_index_u32(pg
, a
, b
);
58 svuint32_t
incompat_sve2_sm(svbool_t pg
, svuint32_t a
, int64_t b
) __arm_streaming
{
59 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
60 return __builtin_sve_svldnt1_gather_u32base_index_u32(pg
, a
, b
);
63 // expected-warning@+2 {{returning a VL-dependent argument from a locally streaming function is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
64 // expected-warning@+1 {{passing a VL-dependent argument to a locally streaming function is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
65 __arm_locally_streaming svuint32_t
incompat_sve2_ls(svbool_t pg
, svuint32_t a
, int64_t b
) {
66 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
67 return __builtin_sve_svldnt1_gather_u32base_index_u32(pg
, a
, b
);
70 svuint32_t
incompat_sve2_smc(svbool_t pg
, svuint32_t a
, int64_t b
) __arm_streaming_compatible
{
71 // expected-error@+1 {{builtin can only be called from a non-streaming function}}
72 return __builtin_sve_svldnt1_gather_u32base_index_u32(pg
, a
, b
);
75 void incompat_sme_sm(svbool_t pn
, svbool_t pm
, svfloat32_t zn
, svfloat32_t zm
) __arm_inout("za") {
76 // expected-error@+1 {{builtin can only be called from a streaming function}}
77 svmops_za32_f32_m(0, pn
, pm
, zn
, zm
);
80 svfloat64_t
streaming_caller_sve(svbool_t pg
, svfloat64_t a
, float64_t b
) __arm_streaming
{
81 return svadd_n_f64_m(pg
, a
, b
);
84 // expected-warning@+2 {{returning a VL-dependent argument from a locally streaming function is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
85 // expected-warning@+1 {{passing a VL-dependent argument to a locally streaming function is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
86 __arm_locally_streaming svfloat64_t
locally_streaming_caller_sve(svbool_t pg
, svfloat64_t a
, float64_t b
) {
87 return svadd_n_f64_m(pg
, a
, b
);
90 svfloat64_t
streaming_compatible_caller_sve(svbool_t pg
, svfloat64_t a
, float64_t b
) __arm_streaming_compatible
{
91 return svadd_n_f64_m(pg
, a
, b
);
94 svint16_t
streaming_caller_sve2(svint16_t op1
, svint16_t op2
) __arm_streaming
{
95 return svmul_lane_s16(op1
, op2
, 0);
98 // expected-warning@+2 {{returning a VL-dependent argument from a locally streaming function is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
99 // expected-warning@+1 {{passing a VL-dependent argument to a locally streaming function is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
100 __arm_locally_streaming svint16_t
locally_streaming_caller_sve2(svint16_t op1
, svint16_t op2
) {
101 return svmul_lane_s16(op1
, op2
, 0);
104 svint16_t
streaming_compatible_caller_sve2(svint16_t op1
, svint16_t op2
) __arm_streaming_compatible
{
105 return svmul_lane_s16(op1
, op2
, 0);
108 svbool_t
streaming_caller_ptrue(void) __arm_streaming
{
109 return svand_z(svptrue_b16(), svptrue_pat_b16(SV_ALL
), svptrue_pat_b16(SV_VL4
));
112 svint8_t
missing_za(svint8_t zd
, svbool_t pg
, uint32_t slice_base
) __arm_streaming
{
113 // expected-warning@+1 {{builtin call is not valid when calling from a function without active ZA state}}
114 return svread_hor_za8_s8_m(zd
, pg
, 0, slice_base
);
118 svint8_t
new_za(svint8_t zd
, svbool_t pg
, uint32_t slice_base
) __arm_streaming
{
119 return svread_hor_za8_s8_m(zd
, pg
, 0, slice_base
);
122 void missing_zt0(void) __arm_streaming
{
123 // expected-warning@+1 {{builtin call is not valid when calling from a function without active ZT0 state}}
128 void new_zt0(void) __arm_streaming
{ svzero_zt(0); }