196 lines · plain
1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s2 3// --------------------------------------------------------------------------//4// Immediate out of lower bound [-8, 7].5 6ld1w z30.s, p6/z, [x25, #-9, MUL VL]7// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].8// CHECK-NEXT: ld1w z30.s, p6/z, [x25, #-9, MUL VL]9// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:10 11ld1w z29.s, p5/z, [x15, #8, MUL VL]12// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].13// CHECK-NEXT: ld1w z29.s, p5/z, [x15, #8, MUL VL]14// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:15 16ld1w z28.d, p2/z, [x28, #-9, MUL VL]17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].18// CHECK-NEXT: ld1w z28.d, p2/z, [x28, #-9, MUL VL]19// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:20 21ld1w z27.d, p1/z, [x26, #8, MUL VL]22// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].23// CHECK-NEXT: ld1w z27.d, p1/z, [x26, #8, MUL VL]24// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:25 26 27// --------------------------------------------------------------------------//28// restricted predicate has range [0, 7].29 30ld1w z12.s, p8/z, [x13, #1, MUL VL]31// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)32// CHECK-NEXT: ld1w z12.s, p8/z, [x13, #1, MUL VL]33// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:34 35ld1w z4.d, p8/z, [x11, #1, MUL VL]36// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)37// CHECK-NEXT: ld1w z4.d, p8/z, [x11, #1, MUL VL]38// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:39 40 41// --------------------------------------------------------------------------//42// Invalid vector list.43 44ld1w { }, p0/z, [x1, #1, MUL VL]45// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector register expected46// CHECK-NEXT: ld1w { }, p0/z, [x1, #1, MUL VL]47// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:48 49ld1w { z1.s, z2.s }, p0/z, [x1, #1, MUL VL]50// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand51// CHECK-NEXT: ld1w { z1.s, z2.s }, p0/z, [x1, #1, MUL VL]52// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:53 54ld1w { v0.2d }, p0/z, [x1, #1, MUL VL]55// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand56// CHECK-NEXT: ld1w { v0.2d }, p0/z, [x1, #1, MUL VL]57// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:58 59 60// --------------------------------------------------------------------------//61// Invalid scalar + scalar addressing modes62 63ld1w z0.s, p0/z, [x0, x0]64// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'65// CHECK-NEXT: ld1w z0.s, p0/z, [x0, x0]66// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:67 68ld1w z0.s, p0/z, [x0, xzr]69// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'70// CHECK-NEXT: ld1w z0.s, p0/z, [x0, xzr]71// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:72 73ld1w z0.s, p0/z, [x0, x0, lsl #3]74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'75// CHECK-NEXT: ld1w z0.s, p0/z, [x0, x0, lsl #3]76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:77 78ld1w z0.s, p0/z, [x0, w0]79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'80// CHECK-NEXT: ld1w z0.s, p0/z, [x0, w0]81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:82 83ld1w z0.s, p0/z, [x0, w0, uxtw]84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'85// CHECK-NEXT: ld1w z0.s, p0/z, [x0, w0, uxtw]86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:87 88 89// --------------------------------------------------------------------------//90// Invalid scalar + vector addressing modes91 92ld1w z0.d, p0/z, [x0, z0.h]93// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand94// CHECK-NEXT: ld1w z0.d, p0/z, [x0, z0.h]95// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:96 97ld1w z0.d, p0/z, [x0, z0.s]98// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand99// CHECK-NEXT: ld1w z0.d, p0/z, [x0, z0.s]100// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:101 102ld1w z0.s, p0/z, [x0, z0.s]103// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw)'104// CHECK-NEXT: ld1w z0.s, p0/z, [x0, z0.s]105// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:106 107ld1w z0.s, p0/z, [x0, z0.s, uxtw #3]108// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'109// CHECK-NEXT: ld1w z0.s, p0/z, [x0, z0.s, uxtw #3]110// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:111 112ld1w z0.s, p0/z, [x0, z0.s, lsl #2]113// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'114// CHECK-NEXT: ld1w z0.s, p0/z, [x0, z0.s, lsl #2]115// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:116 117ld1w z0.d, p0/z, [x0, z0.d, lsl #3]118// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #2'119// CHECK-NEXT: ld1w z0.d, p0/z, [x0, z0.d, lsl #3]120// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:121 122ld1w z0.d, p0/z, [x0, z0.d, sxtw #3]123// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #2'124// CHECK-NEXT: ld1w z0.d, p0/z, [x0, z0.d, sxtw #3]125// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:126 127 128// --------------------------------------------------------------------------//129// Invalid vector + immediate addressing modes130 131ld1w z0.s, p0/z, [z0.s, #-4]132// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].133// CHECK-NEXT: ld1w z0.s, p0/z, [z0.s, #-4]134// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:135 136ld1w z0.s, p0/z, [z0.s, #-1]137// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].138// CHECK-NEXT: ld1w z0.s, p0/z, [z0.s, #-1]139// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:140 141ld1w z0.s, p0/z, [z0.s, #125]142// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].143// CHECK-NEXT: ld1w z0.s, p0/z, [z0.s, #125]144// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:145 146ld1w z0.s, p0/z, [z0.s, #128]147// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].148// CHECK-NEXT: ld1w z0.s, p0/z, [z0.s, #128]149// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:150 151ld1w z0.s, p0/z, [z0.s, #3]152// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].153// CHECK-NEXT: ld1w z0.s, p0/z, [z0.s, #3]154// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:155 156ld1w z0.d, p0/z, [z0.d, #-4]157// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].158// CHECK-NEXT: ld1w z0.d, p0/z, [z0.d, #-4]159// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:160 161ld1w z0.d, p0/z, [z0.d, #-1]162// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].163// CHECK-NEXT: ld1w z0.d, p0/z, [z0.d, #-1]164// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:165 166ld1w z0.d, p0/z, [z0.d, #125]167// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].168// CHECK-NEXT: ld1w z0.d, p0/z, [z0.d, #125]169// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:170 171ld1w z0.d, p0/z, [z0.d, #128]172// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].173// CHECK-NEXT: ld1w z0.d, p0/z, [z0.d, #128]174// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:175 176ld1w z0.d, p0/z, [z0.d, #3]177// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].178// CHECK-NEXT: ld1w z0.d, p0/z, [z0.d, #3]179// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:180 181 182// --------------------------------------------------------------------------//183// Negative tests for instructions that are incompatible with movprfx184 185movprfx z0.d, p0/z, z7.d186ld1w { z0.d }, p0/z, [z0.d]187// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov188// CHECK-NEXT: ld1w { z0.d }, p0/z, [z0.d]189// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:190 191movprfx z0, z7192ld1w { z0.d }, p0/z, [z0.d]193// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov194// CHECK-NEXT: ld1w { z0.d }, p0/z, [z0.d]195// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:196