• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
2
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: restricted predicate has range [0, 7].
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: restricted predicate has range [0, 7].
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 expected
46// 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 operand
51// 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 operand
56// 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 modes
62
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 modes
91
92ld1w z0.d, p0/z, [x0, z0.h]
93// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
94// 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 operand
99// 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 modes
130
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 movprfx
184
185movprfx z0.d, p0/z, z7.d
186ld1w    { z0.d }, p0/z, [z0.d]
187// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
188// CHECK-NEXT: ld1w    { z0.d }, p0/z, [z0.d]
189// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
190
191movprfx z0, z7
192ld1w    { z0.d }, p0/z, [z0.d]
193// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
194// CHECK-NEXT: ld1w    { z0.d }, p0/z, [z0.d]
195// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
196