344 lines · plain
1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p3 2>&1 < %s| FileCheck %s2 3// --------------------------------------------------------------------------//4// Invalid element width5 6sqrshrn z10.s, { z0.s, z1.s }, #17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width8// CHECK-NEXT: sqrshrn z10.s, { z0.s, z1.s }, #19// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:10 11sqrshrn z10.d, { z0.d, z1.d }, #112// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width13// CHECK-NEXT: sqrshrn z10.d, { z0.d, z1.d }, #114// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:15 16// --------------------------------------------------------------------------//17// Mismatched register size suffix18 19sqrshrn z0.b, { z0.h, z1.s }, #120// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: mismatched register size suffix21// CHECK-NEXT: sqrshrn z0.b, { z0.h, z1.s }, #122// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:23 24// --------------------------------------------------------------------------//25// Invalid operand for instruction26 27sqrshrn z10.h, { z0.b, z1.b }, #128// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction29// CHECK-NEXT: sqrshrn z10.h, { z0.b, z1.b }, #130// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:31 32// --------------------------------------------------------------------------//33// Intermediate out of range34 35sqrshrn z10.b, { z0.h, z1.h }, #036// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].37// CHECK-NEXT: sqrshrn z10.b, { z0.h, z1.h }, #038// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:39 40sqrshrn z10.b, { z0.h, z1.h }, #941// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].42// CHECK-NEXT: sqrshrn z10.b, { z0.h, z1.h }, #943// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:44 45sqrshrn z10.b, { z1.h, z2.h }, #146// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types47// CHECK-NEXT: sqrshrn z10.b, { z1.h, z2.h }, #148// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:49 50// --------------------------------------------------------------------------//51// Negative tests for instructions that are incompatible with movprfx52 53movprfx z0, z754sqrshrn z0.b, { z2.h, z3.h }, #155// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov56// CHECK-NEXT: sqrshrn z0.b, { z2.h, z3.h }, #157// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:58 59// --------------------------------------------------------------------------//60// Invalid element width61 62sqrshrun z10.s, { z0.s, z1.s }, #163// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width64// CHECK-NEXT: sqrshrun z10.s, { z0.s, z1.s }, #165// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:66 67sqrshrun z10.d, { z0.d, z1.d }, #168// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width69// CHECK-NEXT: sqrshrun z10.d, { z0.d, z1.d }, #170// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:71 72// --------------------------------------------------------------------------//73// Invalid operand for instruction74 75sqrshrun z10.h, { z0.b, z1.b }, #176// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction77// CHECK-NEXT: sqrshrun z10.h, { z0.b, z1.b }, #178// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:79 80// --------------------------------------------------------------------------//81// Intermediate out of range82 83sqrshrun z10.b, { z0.h, z1.h }, #084// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].85// CHECK-NEXT: sqrshrun z10.b, { z0.h, z1.h }, #086// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:87 88sqrshrun z10.b, { z0.h, z1.h }, #989// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].90// CHECK-NEXT: sqrshrun z10.b, { z0.h, z1.h }, #991// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:92 93sqrshrun z10.b, { z1.h, z2.h }, #194// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types95// CHECK-NEXT: sqrshrun z10.b, { z1.h, z2.h }, #196// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:97 98// --------------------------------------------------------------------------//99// Mismatched register size suffix100 101sqrshrun z0.b, { z0.h, z1.s }, #1102// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: mismatched register size suffix103// CHECK-NEXT: sqrshrun z0.b, { z0.h, z1.s }, #1104// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:105 106// --------------------------------------------------------------------------//107// Negative tests for instructions that are incompatible with movprfx108 109movprfx z0, z7110sqrshrun z0.b, { z0.h, z1.h }, #1111// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov112// CHECK-NEXT: sqrshrun z0.b, { z0.h, z1.h }, #1113// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:114 115// --------------------------------------------------------------------------//116// Invalid element width117 118sqshrn z10.s, { z0.s, z1.s }, #1119// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width120// CHECK-NEXT: sqshrn z10.s, { z0.s, z1.s }, #1121// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:122 123sqshrn z10.d, { z0.d, z1.d }, #1124// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width125// CHECK-NEXT: sqshrn z10.d, { z0.d, z1.d }, #1126// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:127 128// --------------------------------------------------------------------------//129// Mismatched register size suffix130 131sqshrn z0.b, { z0.h, z1.s }, #1132// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: mismatched register size suffix133// CHECK-NEXT: sqshrn z0.b, { z0.h, z1.s }, #1134// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:135 136// --------------------------------------------------------------------------//137// Intermediate out of range138 139sqshrn z10.b, { z0.h, z1.h }, #0140// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].141// CHECK-NEXT: sqshrn z10.b, { z0.h, z1.h }, #0142// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:143 144sqshrn z10.b, { z0.h, z1.h }, #9145// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].146// CHECK-NEXT: sqshrn z10.b, { z0.h, z1.h }, #9147// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:148 149sqshrn z0.h, { z0.s, z1.s }, #0150// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16].151// CHECK-NEXT: sqshrn z0.h, { z0.s, z1.s }, #0152// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:153 154sqshrn z0.h, { z0.s, z1.s }, #17155// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16].156// CHECK-NEXT: sqshrn z0.h, { z0.s, z1.s }, #17157// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:158 159sqshrn z10.b, { z1.h, z2.h }, #1160// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types161// CHECK-NEXT: sqshrn z10.b, { z1.h, z2.h }, #1162// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:163 164// --------------------------------------------------------------------------//165// Negative tests for instructions that are incompatible with movprfx166 167movprfx z0, z7168sqshrn z0.b, { z0.h, z1.h }, #1169// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov170// CHECK-NEXT: sqshrn z0.b, { z0.h, z1.h }, #1171// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:172 173// --------------------------------------------------------------------------//174// Invalid element width175 176sqshrun z10.s, { z0.s, z1.s }, #1177// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width178// CHECK-NEXT: sqshrun z10.s, { z0.s, z1.s }, #1179// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:180 181sqshrun z10.d, { z0.d, z1.d }, #1182// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width183// CHECK-NEXT: sqshrun z10.d, { z0.d, z1.d }, #1184// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:185 186// --------------------------------------------------------------------------//187// Mismatched register size suffix188 189sqshrun z0.b, { z0.h, z1.s }, #1190// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: mismatched register size suffix191// CHECK-NEXT: sqshrun z0.b, { z0.h, z1.s }, #1192// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:193 194// --------------------------------------------------------------------------//195// Intermediate out of range196 197sqshrun z10.b, { z0.h, z1.h }, #0198// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].199// CHECK-NEXT: sqshrun z10.b, { z0.h, z1.h }, #0200// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:201 202sqshrun z10.b, { z0.h, z1.h }, #9203// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].204// CHECK-NEXT: sqshrun z10.b, { z0.h, z1.h }, #9205// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:206 207sqshrun z10.h, { z0.s, z1.s }, #0208// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16].209// CHECK-NEXT: sqshrun z10.h, { z0.s, z1.s }, #0210// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:211 212sqshrun z10.h, { z0.s, z1.s }, #17213// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16].214// CHECK-NEXT: sqshrun z10.h, { z0.s, z1.s }, #17215// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:216 217sqshrun z10.b, { z1.h, z2.h }, #1218// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types219// CHECK-NEXT: sqshrun z10.b, { z1.h, z2.h }, #1220// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:221 222// --------------------------------------------------------------------------//223// Negative tests for instructions that are incompatible with movprfx224 225movprfx z0, z7226sqshrun z0.b, { z0.h, z1.h }, #1227// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov228// CHECK-NEXT: sqshrun z0.b, { z0.h, z1.h }, #1229// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:230 231// --------------------------------------------------------------------------//232// Invalid element width233 234uqrshrn z10.s, { z0.s, z1.s }, #1235// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width236// CHECK-NEXT: uqrshrn z10.s, { z0.s, z1.s }, #1237// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:238 239uqrshrn z10.d, { z0.d, z1.d }, #1240// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width241// CHECK-NEXT: uqrshrn z10.d, { z0.d, z1.d }, #1242// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:243 244// --------------------------------------------------------------------------//245// Mismatched register size suffix246 247uqrshrn z0.b, { z0.h, z1.s }, #1248// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: mismatched register size suffix249// CHECK-NEXT: uqrshrn z0.b, { z0.h, z1.s }, #1250// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:251 252// --------------------------------------------------------------------------//253// Invalid operand for instruction254 255uqrshrn z10.h, { z0.b, z1.b }, #1256// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction257// CHECK-NEXT: uqrshrn z10.h, { z0.b, z1.b }, #1258// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:259 260// --------------------------------------------------------------------------//261// Intermediate out of range262 263uqrshrn z10.b, { z0.h, z1.h }, #0264// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].265// CHECK-NEXT: uqrshrn z10.b, { z0.h, z1.h }, #0266// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:267 268uqrshrn z10.b, { z0.h, z1.h }, #9269// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].270// CHECK-NEXT: uqrshrn z10.b, { z0.h, z1.h }, #9271// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:272 273uqrshrn z10.b, { z1.h, z2.h }, #1274// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types275// CHECK-NEXT: uqrshrn z10.b, { z1.h, z2.h }, #1276// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:277 278// --------------------------------------------------------------------------//279// Negative tests for instructions that are incompatible with movprfx280 281movprfx z0, z7282uqrshrn z0.b, { z0.h, z1.h }, #1283// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov284// CHECK-NEXT: uqrshrn z0.b, { z0.h, z1.h }, #1285// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:286 287// --------------------------------------------------------------------------//288// Invalid element width289 290uqshrn z10.s, { z0.s, z1.s }, #1291// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width292// CHECK-NEXT: uqshrn z10.s, { z0.s, z1.s }, #1293// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:294 295uqshrn z10.d, { z0.d, z1.d }, #1296// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width297// CHECK-NEXT: uqshrn z10.d, { z0.d, z1.d }, #1298// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:299 300// --------------------------------------------------------------------------//301// Mismatched register size suffix302 303uqshrn z0.b, { z0.h, z1.s }, #1304// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: mismatched register size suffix305// CHECK-NEXT: uqshrn z0.b, { z0.h, z1.s }, #1306// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:307 308// --------------------------------------------------------------------------//309// Intermediate out of range310 311uqshrn z10.b, { z0.h, z1.h }, #0312// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].313// CHECK-NEXT: uqshrn z10.b, { z0.h, z1.h }, #0314// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:315 316uqshrn z10.b, { z0.h, z1.h }, #9317// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8].318// CHECK-NEXT: uqshrn z10.b, { z0.h, z1.h }, #9319// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:320 321uqshrn z0.h, { z0.s, z1.s }, #0322// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16].323// CHECK-NEXT: uqshrn z0.h, { z0.s, z1.s }, #0324// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:325 326uqshrn z0.h, { z0.s, z1.s }, #17327// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16].328// CHECK-NEXT: uqshrn z0.h, { z0.s, z1.s }, #17329// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:330 331uqshrn z10.b, { z1.h, z2.h }, #1332// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types333// CHECK-NEXT: uqshrn z10.b, { z1.h, z2.h }, #1334// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:335 336// --------------------------------------------------------------------------//337// Negative tests for instructions that are incompatible with movprfx338 339movprfx z0, z7340uqshrn z0.b, { z0.h, z1.h }, #1341// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov342// CHECK-NEXT: uqshrn z0.b, { z0.h, z1.h }, #1343// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:344