xref: /llvm-project/llvm/test/MC/AArch64/SVE/mov-diagnostics.s (revision 3b4f706ae16bb12b7d925fbf428def7cb2a6f7db)
1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
2
3// input should be a 64bit scalar register
4mov z0.d, w0
5// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
6// CHECK-NEXT: mov z0.d, w0
7// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
8
9// wzr is not a valid operand to mov
10mov z0.s, wzr
11// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
12// CHECK-NEXT: mov z0.s, wzr
13// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
14
15// xzr is not a valid operand to mov
16mov z0.d, xzr
17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
18// CHECK-NEXT: mov z0.d, xzr
19// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
20
21
22// --------------------------------------------------------------------------//
23// Unpredicated mov of Z register only allowed for .d
24
25mov z0.b, z1.b
26// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
27// CHECK-NEXT: mov z0.b, z1.b
28// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
29
30mov z0.h, z1.h
31// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
32// CHECK-NEXT: mov z0.h, z1.h
33// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
34
35mov z0.s, z1.s
36// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
37// CHECK-NEXT: mov z0.s, z1.s
38// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
39
40// --------------------------------------------------------------------------//
41// Invalid scalar operand for result element width.
42
43mov z0.d, w0
44// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
45// CHECK-NEXT: mov z0.d, w0
46// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
47
48mov z0.b, p0/m, x0
49// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
50// CHECK-NEXT: mov z0.b, p0/m, x0
51// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
52
53mov z0.h, p0/m, x0
54// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
55// CHECK-NEXT: mov z0.h, p0/m, x0
56// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
57
58mov z0.s, p0/m, x0
59// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
60// CHECK-NEXT: mov z0.s, p0/m, x0
61// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
62
63mov z0.d, p0/m, w0
64// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
65// CHECK-NEXT: mov z0.d, p0/m, w0
66// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
67
68mov z0.b, p0/m, h0
69// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
70// CHECK-NEXT: mov z0.b, p0/m, h0
71// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
72
73mov z0.b, p0/m, s0
74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
75// CHECK-NEXT: mov z0.b, p0/m, s0
76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
77
78mov z0.b, p0/m, d0
79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
80// CHECK-NEXT: mov z0.b, p0/m, d0
81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
82
83mov z0.h, p0/m, b0
84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
85// CHECK-NEXT: mov z0.h, p0/m, b0
86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
87
88mov z0.h, p0/m, s0
89// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
90// CHECK-NEXT: mov z0.h, p0/m, s0
91// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
92
93mov z0.h, p0/m, d0
94// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
95// CHECK-NEXT: mov z0.h, p0/m, d0
96// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
97
98mov z0.s, p0/m, b0
99// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
100// CHECK-NEXT: mov z0.s, p0/m, b0
101// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
102
103mov z0.s, p0/m, h0
104// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
105// CHECK-NEXT: mov z0.s, p0/m, h0
106// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
107
108mov z0.s, p0/m, d0
109// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
110// CHECK-NEXT: mov z0.s, p0/m, d0
111// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
112
113mov z0.d, p0/m, b0
114// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
115// CHECK-NEXT: mov z0.d, p0/m, b0
116// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
117
118mov z0.d, p0/m, h0
119// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
120// CHECK-NEXT: mov z0.d, p0/m, h0
121// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
122
123mov z0.d, p0/m, s0
124// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
125// CHECK-NEXT: mov z0.d, p0/m, s0
126// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
127
128// --------------------------------------------------------------------------//
129// Invalid immediates
130
131mov z0.b, #0, lsl #8      // #0, lsl #8 is not valid for .b
132// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
133// CHECK-NEXT: mov z0.b, #0, lsl #8
134// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
135
136mov z0.b, #-1, lsl #8
137// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
138// CHECK-NEXT: mov z0.b, #-1, lsl #8
139// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
140
141mov z0.b, #256
142// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
143// CHECK-NEXT: mov z0.b, #256
144// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
145
146mov z0.b, #1, lsl #8
147// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
148// CHECK-NEXT: mov z0.b, #1, lsl #8
149// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
150
151// Note: 65281 is a valid logical immediate.
152mov z0.h, #65282
153// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
154// CHECK-NEXT: mov z0.h, #65282
155// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
156
157mov z0.h, #256, lsl #8
158// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
159// CHECK-NEXT: mov z0.h, #256, lsl #8
160// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
161
162mov z0.s, #-33024
163// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
164// CHECK-NEXT: mov z0.s, #-33024
165// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
166
167mov z0.s, #-129, lsl #8
168// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
169// CHECK-NEXT: mov z0.s, #-129, lsl #8
170// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
171
172mov z0.s, #32513
173// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
174// CHECK-NEXT: mov z0.s, #32513
175// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
176
177mov z0.s, #128, lsl #8
178// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
179// CHECK-NEXT: mov z0.s, #128, lsl #8
180// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
181
182mov z0.d, #-33024
183// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
184// CHECK-NEXT: mov z0.d, #-33024
185// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
186
187mov z0.d, #-129, lsl #8
188// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
189// CHECK-NEXT: mov z0.d, #-129, lsl #8
190// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
191
192mov z0.d, #32513
193// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
194// CHECK-NEXT: mov z0.d, #32513
195// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
196
197mov z0.d, #128, lsl #8
198// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
199// CHECK-NEXT: mov z0.d, #128, lsl #8
200// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
201
202mov z5.b, #0xfff9
203// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255] with a shift amount of 0
204// CHECK-NEXT: mov z5.b, #0xfff9
205// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
206
207mov z5.h, #0xfffffff9
208// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
209// CHECK-NEXT: mov z5.h, #0xfffffff9
210// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
211
212mov z5.s, #0xffffffffffffff9
213// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
214// CHECK-NEXT: mov z5.s, #0xffffffffffffff9
215// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
216
217mov z0.b, p0/z, #0, lsl #8      // #0, lsl #8 is not valid for .b
218// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
219// CHECK-NEXT: mov z0.b, p0/z, #0, lsl #8
220// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
221
222mov z0.b, p0/z, #-1, lsl #8
223// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
224// CHECK-NEXT: mov z0.b, p0/z, #-1, lsl #8
225// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
226
227mov z0.b, p0/z, #256
228// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
229// CHECK-NEXT: mov z0.b, p0/z, #256
230// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
231
232mov z0.b, p0/z, #1, lsl #8
233// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
234// CHECK-NEXT: mov z0.b, p0/z, #1, lsl #8
235// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
236
237mov z0.h, p0/z, #-32769
238// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
239// CHECK-NEXT: mov z0.h, p0/z, #-32769
240// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
241
242mov z0.h, p0/z, #32513
243// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
244// CHECK-NEXT: mov z0.h, p0/z, #32513
245// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
246
247mov z0.h, p0/z, #65281
248// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
249// CHECK-NEXT: mov z0.h, p0/z, #65281
250// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
251
252mov z0.h, p0/z, #256, lsl #8
253// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
254// CHECK-NEXT: mov z0.h, p0/z, #256, lsl #8
255// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
256
257mov z0.s, p0/z, #-33024
258// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
259// CHECK-NEXT: mov z0.s, p0/z, #-33024
260// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
261
262mov z0.s, p0/z, #-32769
263// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
264// CHECK-NEXT: mov z0.s, p0/z, #-32769
265// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
266
267mov z0.s, p0/z, #-129, lsl #8
268// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
269// CHECK-NEXT: mov z0.s, p0/z, #-129, lsl #8
270// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
271
272mov z0.s, p0/z, #32513
273// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
274// CHECK-NEXT: mov z0.s, p0/z, #32513
275// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
276
277mov z0.s, p0/z, #32768
278// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
279// CHECK-NEXT: mov z0.s, p0/z, #32768
280// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
281
282mov z0.s, p0/z, #128, lsl #8
283// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
284// CHECK-NEXT: mov z0.s, p0/z, #128, lsl #8
285// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
286
287mov z0.d, p0/z, #-33024
288// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
289// CHECK-NEXT: mov z0.d, p0/z, #-33024
290// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
291
292mov z0.d, p0/z, #-32769
293// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
294// CHECK-NEXT: mov z0.d, p0/z, #-32769
295// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
296
297mov z0.d, p0/z, #-129, lsl #8
298// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
299// CHECK-NEXT: mov z0.d, p0/z, #-129, lsl #8
300// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
301
302mov z0.d, p0/z, #32513
303// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
304// CHECK-NEXT: mov z0.d, p0/z, #32513
305// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
306
307mov z0.d, p0/z, #32768
308// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
309// CHECK-NEXT: mov z0.d, p0/z, #32768
310// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
311
312mov z0.d, p0/z, #128, lsl #8
313// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
314// CHECK-NEXT: mov z0.d, p0/z, #128, lsl #8
315// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
316
317
318// --------------------------------------------------------------------------//
319// Immediate not compatible with encode/decode function.
320
321mov z24.b, z17.b[-1]
322// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
323// CHECK-NEXT: mov z24.b, z17.b[-1]
324// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
325
326mov z17.b, z5.b[64]
327// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
328// CHECK-NEXT: mov z17.b, z5.b[64]
329// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
330
331mov z16.h, z30.h[-1]
332// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
333// CHECK-NEXT: mov z16.h, z30.h[-1]
334// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
335
336mov z19.h, z23.h[32]
337// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
338// CHECK-NEXT: mov z19.h, z23.h[32]
339// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
340
341mov z1.s, z6.s[-1]
342// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
343// CHECK-NEXT: mov z1.s, z6.s[-1]
344// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
345
346mov z24.s, z3.s[16]
347// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
348// CHECK-NEXT: mov z24.s, z3.s[16]
349// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
350
351mov z5.d, z25.d[-1]
352// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
353// CHECK-NEXT: mov z5.d, z25.d[-1]
354// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
355
356mov z12.d, z28.d[8]
357// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
358// CHECK-NEXT: mov z12.d, z28.d[8]
359// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
360
361mov z22.q, z7.q[-1]
362// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
363// CHECK-NEXT: mov z22.q, z7.q[-1]
364// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
365
366mov z24.q, z21.q[4]
367// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
368// CHECK-NEXT: mov z24.q, z21.q[4]
369// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
370
371
372// --------------------------------------------------------------------------//
373// Negative tests for instructions that are incompatible with movprfx
374
375movprfx z31.b, p0/z, z6.b
376mov     z31.b, wsp
377// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
378// CHECK-NEXT: mov     z31.b, wsp
379// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
380
381movprfx z31, z6
382mov     z31.b, wsp
383// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
384// CHECK-NEXT: mov     z31.b, wsp
385// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
386
387movprfx z0.d, p0/z, z7.d
388mov     z0.d, #0xe0000000000003ff
389// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
390// CHECK-NEXT: mov     z0.d, #0xe0000000000003ff
391// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
392
393movprfx z0, z7
394mov     z0.d, #0xe0000000000003ff
395// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
396// CHECK-NEXT: mov     z0.d, #0xe0000000000003ff
397// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
398
399movprfx z4.d, p7/z, z6.d
400mov     z4.d, p7/m, z31.d
401// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
402// CHECK-NEXT: mov     z4.d, p7/m, z31.d
403// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
404
405movprfx z31, z6
406mov     z31.d, p15/m, z31.d
407// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
408// CHECK-NEXT: mov     z31.d, p15/m, z31.d
409// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
410
411movprfx z0.d, p0/z, z7.d
412mov     z0.d, d0
413// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
414// CHECK-NEXT: mov     z0.d, d0
415// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
416
417movprfx z0, z7
418mov     z0.d, d0
419// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
420// CHECK-NEXT: mov     z0.d, d0
421// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
422
423movprfx z31.d, p0/z, z6.d
424mov     z31.d, z0.d
425// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
426// CHECK-NEXT: mov     z31.d, z0.d
427// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
428
429movprfx z31, z6
430mov     z31.d, z0.d
431// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
432// CHECK-NEXT: mov     z31.d, z0.d
433// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
434
435movprfx z31.d, p0/z, z6.d
436mov     z31.d, z31.d[7]
437// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
438// CHECK-NEXT: mov     z31.d, z31.d[7]
439// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
440
441movprfx z31, z6
442mov     z31.d, z31.d[7]
443// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
444// CHECK-NEXT: mov     z31.d, z31.d[7]
445// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
446