257 lines · cpp
1// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +sve2 -target-feature +sve2p1 -fsyntax-only -verify %s2 3// REQUIRES: aarch64-registered-target4 5#include <arm_sve.h>6void test_svpext_lane_imm_0_3(svcount_t c) {7 svpext_lane_c8(c, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}8 svpext_lane_c16(c, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}9 svpext_lane_c32(c, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}10 svpext_lane_c64(c, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}11 12 svpext_lane_c8(c, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}13 svpext_lane_c16(c, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}14 svpext_lane_c32(c, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}15 svpext_lane_c64(c, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}16}17 18void test_svpext_lane_x2_imm_0_1(svcount_t c) {19 svpext_lane_c8_x2(c, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}20 svpext_lane_c16_x2(c, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}21 svpext_lane_c32_x2(c, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}22 svpext_lane_c64_x2(c, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}23 24 svpext_lane_c8_x2(c, 2); // expected-error {{argument value 2 is outside the valid range [0, 1]}}25 svpext_lane_c16_x2(c, 2); // expected-error {{argument value 2 is outside the valid range [0, 1]}}26 svpext_lane_c32_x2(c, 2); // expected-error {{argument value 2 is outside the valid range [0, 1]}}27 svpext_lane_c64_x2(c, 2); // expected-error {{argument value 2 is outside the valid range [0, 1]}}28}29 30svcount_t test_svwhile_pn_signed(int64_t op1, int64_t op2) {31 svwhilege_c8(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}32 svwhilege_c16(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}33 svwhilege_c32(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}34 svwhilege_c64(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}35 svwhilegt_c8(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}36 svwhilegt_c16(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}37 svwhilegt_c32(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}38 svwhilegt_c64(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}39 svwhilele_c8(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}40 svwhilele_c16(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}41 svwhilele_c32(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}42 svwhilele_c64(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}43 svwhilelt_c8(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}44 svwhilelt_c16(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}45 svwhilelt_c32(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}46 svwhilelt_c64(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}47 48 svwhilege_c8(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}49 svwhilege_c16(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}50 svwhilege_c32(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}51 svwhilege_c64(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}52 svwhilegt_c8(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}53 svwhilegt_c16(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}54 svwhilegt_c32(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}55 svwhilegt_c64(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}56 svwhilele_c8(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}57 svwhilele_c16(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}58 svwhilele_c32(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}59 svwhilele_c64(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}60 svwhilelt_c8(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}61 svwhilelt_c16(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}62 svwhilelt_c32(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}63 svwhilelt_c64(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}64}65 66svcount_t test_svwhile_pn_unsigned(uint64_t op1, uint64_t op2) {67 svwhilege_c8(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}68 svwhilege_c16(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}69 svwhilege_c32(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}70 svwhilege_c64(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}71 svwhilegt_c8(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}72 svwhilegt_c16(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}73 svwhilegt_c32(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}74 svwhilegt_c64(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}75 svwhilele_c8(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}76 svwhilele_c16(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}77 svwhilele_c32(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}78 svwhilele_c64(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}79 svwhilelt_c8(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}80 svwhilelt_c16(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}81 svwhilelt_c32(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}82 svwhilelt_c64(op1, op2, 6); // expected-error {{argument value 6 is outside the valid range [2, 4]}}83 84 svwhilege_c8(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}85 svwhilege_c16(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}86 svwhilege_c32(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}87 svwhilege_c64(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}88 svwhilegt_c8(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}89 svwhilegt_c16(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}90 svwhilegt_c32(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}91 svwhilegt_c64(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}92 svwhilele_c8(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}93 svwhilele_c16(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}94 svwhilele_c32(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}95 svwhilele_c64(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}96 svwhilelt_c8(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}97 svwhilelt_c16(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}98 svwhilelt_c32(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}99 svwhilelt_c64(op1, op2, 3); // expected-error {{argument should be a multiple of 2}}100}101 102void test_cntp(svcount_t c) {103 svcntp_c8(c, 1); // expected-error {{argument value 1 is outside the valid range [2, 4]}}104 svcntp_c16(c, 1); // expected-error {{argument value 1 is outside the valid range [2, 4]}}105 svcntp_c32(c, 1); // expected-error {{argument value 1 is outside the valid range [2, 4]}}106 svcntp_c64(c, 1); // expected-error {{argument value 1 is outside the valid range [2, 4]}}107 108 svcntp_c8(c, 3); // expected-error {{argument should be a multiple of 2}}109 svcntp_c16(c, 3); // expected-error {{argument should be a multiple of 2}}110 svcntp_c32(c, 3); // expected-error {{argument should be a multiple of 2}}111 svcntp_c64(c, 3); // expected-error {{argument should be a multiple of 2}}112}113 114 115void test_svdot_lane_2way(svint32_t s32, svuint32_t u32, svint16_t s16, svuint16_t u16,116 svfloat32_t f32, svfloat16_t f16) {117 svdot_lane_s32_s16(s32, s16, s16, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}118 svdot_lane_u32_u16(u32, u16, u16, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}119 svdot_lane_f32_f16(f32, f16, f16, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}120}121 122 123__attribute__((target("+sve2p1+b16b16")))124void test_svbfml_lane(svbfloat16_t zda, svbfloat16_t zn, svbfloat16_t zm, uint64_t idx){125 svmla_lane_bf16(zda, zn, zm, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 7]}}126 svmla_lane_bf16(zda, zn, zm, 8); // expected-error {{argument value 8 is outside the valid range [0, 7]}}127 svmls_lane_bf16(zda, zn, zm, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 7]}}128 svmls_lane_bf16(zda, zn, zm, 8); // expected-error {{argument value 8 is outside the valid range [0, 7]}}129 svmla_lane_bf16(zda, zn, zm, idx); // expected-error {{argument to 'svmla_lane_bf16' must be a constant integer}}130 svmls_lane_bf16(zda, zn, zm, idx); // expected-error {{argument to 'svmls_lane_bf16' must be a constant integer}}131}132 133__attribute__((target("+sve2p1+b16b16")))134void test_svbfmul_lane(svbfloat16_t zn, svbfloat16_t zm, uint64_t idx){135 svmul_lane_bf16(zn, zm, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 7]}}136 svmul_lane_bf16(zn, zm, 8); // expected-error {{argument value 8 is outside the valid range [0, 7]}}137 svmul_lane_bf16(zn, zm, idx); // expected-error {{argument to 'svmul_lane_bf16' must be a constant integer}}138}139 140__attribute__((target("+sve2p1")))141void test_svextq_8b_offset(svint8_t s8, svuint8_t u8){142 svextq_s8(s8, s8, -1); // expected-error {{argument value -1 is outside the valid range [0, 15]}}143 svextq_u8(u8, u8, -1); // expected-error {{argument value -1 is outside the valid range [0, 15]}}144 145 svextq_s8(s8, s8, 16); // expected-error {{argument value 16 is outside the valid range [0, 15]}}146 svextq_u8(u8, u8, 16); // expected-error {{argument value 16 is outside the valid range [0, 15]}}147}148 149__attribute__((target("+sve2p1")))150void test_svextq_16b_offset(svint16_t s16, svuint16_t u16, svfloat16_t f16, svbfloat16_t bf16){151 svextq_s16(s16, s16, -1); // expected-error {{argument value -1 is outside the valid range [0, 7]}}152 svextq_u16(u16, u16, -1); // expected-error {{argument value -1 is outside the valid range [0, 7]}}153 svextq_f16(f16, f16, -1); // expected-error {{argument value -1 is outside the valid range [0, 7]}}154 svextq_bf16(bf16, bf16, -1); // expected-error {{argument value -1 is outside the valid range [0, 7]}}155 156 svextq_s16(s16, s16, 8); // expected-error {{argument value 8 is outside the valid range [0, 7]}}157 svextq_u16(u16, u16, 8); // expected-error {{argument value 8 is outside the valid range [0, 7]}}158 svextq_f16(f16, f16, 8); // expected-error {{argument value 8 is outside the valid range [0, 7]}}159 svextq_bf16(bf16, bf16, 8); // expected-error {{argument value 8 is outside the valid range [0, 7]}}160}161 162__attribute__((target("+sve2p1")))163void test_svextq_32b_offset(svint32_t s32, svuint32_t u32, svfloat32_t f32){164 svextq_s32(s32, s32, -1); // expected-error {{argument value -1 is outside the valid range [0, 3]}}165 svextq_u32(u32, u32, -1); // expected-error {{argument value -1 is outside the valid range [0, 3]}}166 svextq_f32(f32, f32, -1); // expected-error {{argument value -1 is outside the valid range [0, 3]}}167 168 svextq_s32(s32, s32, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}169 svextq_u32(u32, u32, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}170 svextq_f32(f32, f32, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}171}172 173__attribute__((target("+sve2p1")))174void test_svextq_64b_offset(svint64_t s64, svuint64_t u64, svfloat64_t f64){175 svextq_s64(s64, s64, -1); // expected-error {{argument value -1 is outside the valid range [0, 1]}}176 svextq_u64(u64, u64, -1); // expected-error {{argument value -1 is outside the valid range [0, 1]}}177 svextq_f64(f64, f64, -1); // expected-error {{argument value -1 is outside the valid range [0, 1]}}178 179 svextq_s64(s64, s64, 2); // expected-error {{argument value 2 is outside the valid range [0, 1]}}180 svextq_u64(u64, u64, 2); // expected-error {{argument value 2 is outside the valid range [0, 1]}}181 svextq_f64(f64, f64, 2); // expected-error {{argument value 2 is outside the valid range [0, 1]}}182}183 184__attribute__((target("+sve2p1")))185void test_svpmov_lane(){186 svuint8_t zn_u8;187 svuint16_t zn_u16;188 svuint32_t zn_u32;189 svuint64_t zn_u64;190 svbool_t pn;191 192 svpmov_lane_u8(zn_u8, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 0]}}193 svpmov_lane_u16(zn_u16, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}194 svpmov_lane_u32(zn_u32, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}195 svpmov_lane_u64(zn_u64, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 7]}}196 197 svpmov_lane_u8(zn_u8, 1); // expected-error {{argument value 1 is outside the valid range [0, 0]}}198 svpmov_lane_u16(zn_u16, 3); // expected-error {{argument value 3 is outside the valid range [0, 1]}}199 svpmov_lane_u32(zn_u32, 5); // expected-error {{argument value 5 is outside the valid range [0, 3]}}200 svpmov_lane_u64(zn_u64, 8); // expected-error {{argument value 8 is outside the valid range [0, 7]}}201 202 203 zn_u16 = svpmov_lane_u16_m(zn_u16, pn, 0); // expected-error {{argument value 0 is outside the valid range [1, 1]}}204 zn_u32 = svpmov_lane_u32_m(zn_u32, pn, 0); // expected-error {{argument value 0 is outside the valid range [1, 3]}}205 zn_u64 = svpmov_lane_u64_m(zn_u64, pn, 0); // expected-error {{argument value 0 is outside the valid range [1, 7]}}206 207 zn_u16 = svpmov_lane_u16_m(zn_u16, pn, 3); // expected-error {{argument value 3 is outside the valid range [1, 1]}}208 zn_u32 = svpmov_lane_u32_m(zn_u32, pn, 5); // expected-error {{argument value 5 is outside the valid range [1, 3]}}209 zn_u64 = svpmov_lane_u64_m(zn_u64, pn, 8); // expected-error {{argument value 8 is outside the valid range [1, 7]}}210}211 212__attribute__((target("+sve2p1")))213void test_svget_svset_b(uint64_t idx, svboolx2_t tuple2, svboolx4_t tuple4, svbool_t res){214 svset2_b(tuple2, -1, res); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}215 svset2_b(tuple2, 2, res); // expected-error {{argument value 2 is outside the valid range [0, 1]}}216 svset4_b(tuple4, -1, res); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}217 svset4_b(tuple4, 4, res); // expected-error {{argument value 4 is outside the valid range [0, 3]}}218 219 svget2_b(tuple2, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}220 svget2_b(tuple2, 2); // expected-error {{argument value 2 is outside the valid range [0, 1]}}221 svget4_b(tuple4, -1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}222 svget4_b(tuple4, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}223 224 svset2_b(tuple2, idx, res); // expected-error {{argument to 'svset2_b' must be a constant integer}}225 svset4_b(tuple4, idx, res); // expected-error {{argument to 'svset4_b' must be a constant integer}}226 svget2_b(tuple2, idx); // expected-error {{argument to 'svget2_b' must be a constant integer}}227 svget4_b(tuple4, idx); // expected-error {{argument to 'svget4_b' must be a constant integer}}228}229 230__attribute__((target("+sve2p1")))231void test_svdup_laneq(){ 232 svuint8_t zn_u8;233 svuint16_t zn_u16;234 svuint32_t zn_u32;235 svuint64_t zn_u64;236 svint8_t zn_s8;237 svint16_t zn_s16;238 svint32_t zn_s32;239 svint64_t zn_s64;240 svfloat16_t zn_f16;241 svfloat32_t zn_f32;242 svfloat64_t zn_f64;243 svbfloat16_t zn_bf16;244 245 svdup_laneq_u8(zn_u8,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 15]}}246 svdup_laneq_u16(zn_u16,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 7]}}247 svdup_laneq_u32(zn_u32,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}248 svdup_laneq_u64(zn_u64,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}249 svdup_laneq_s8(zn_s8,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 15]}}250 svdup_laneq_s16(zn_s16,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 7]}}251 svdup_laneq_s32(zn_s32,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}252 svdup_laneq_s64(zn_s64,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}253 svdup_laneq_f16(zn_f16,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 7]}}254 svdup_laneq_f32(zn_f32,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 3]}}255 svdup_laneq_f64(zn_f64,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 1]}}256 svdup_laneq_bf16(zn_bf16,-1); // expected-error {{argument value 18446744073709551615 is outside the valid range [0, 7]}}257}