brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.2 KiB · ac7586e Raw
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}