1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
2
3
4// ------------------------------------------------------------------------- //
5// Invalid predicate
6
7lasta   w0, p8, z31.b
8// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
9// CHECK-NEXT: lasta   w0, p8, z31.b
10// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
11
12lasta   w0, p7.b, w0, z31.b
13// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
14// CHECK-NEXT: lasta   w0, p7.b, w0, z31.b
15// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
16
17lasta   w0, p7.q, w0, z31.b
18// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
19// CHECK-NEXT: lasta   w0, p7.q, w0, z31.b
20// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
21
22
23// ------------------------------------------------------------------------- //
24// Invalid element width
25
26lasta   x0, p7, z31.b
27// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
28// CHECK-NEXT: lasta   x0, p7, z31.b
29// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
30
31lasta   x0, p7, z31.h
32// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
33// CHECK-NEXT: lasta   x0, p7, z31.h
34// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
35
36lasta   x0, p7, z31.s
37// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
38// CHECK-NEXT: lasta   x0, p7, z31.s
39// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
40
41lasta   w0, p7, z31.d
42// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
43// CHECK-NEXT: lasta   w0, p7, z31.d
44// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
45
46lasta   b0, p7, z31.h
47// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
48// CHECK-NEXT: lasta   b0, p7, z31.h
49// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
50
51lasta   h0, p7, z31.s
52// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
53// CHECK-NEXT: lasta   h0, p7, z31.s
54// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
55
56lasta   s0, p7, z31.d
57// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
58// CHECK-NEXT: lasta   s0, p7, z31.d
59// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
60
61lasta   d0, p7, z31.b
62// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
63// CHECK-NEXT: lasta   d0, p7, z31.b
64// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
65
66
67// --------------------------------------------------------------------------//
68// Negative tests for instructions that are incompatible with movprfx
69
70movprfx z31.d, p7/z, z6.d
71lasta   x0, p7, z31.d
72// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
73// CHECK-NEXT: lasta   x0, p7, z31.d
74// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
75
76movprfx z31, z6
77lasta   x0, p7, z31.d
78// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
79// CHECK-NEXT: lasta   x0, p7, z31.d
80// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
81
82movprfx z31.d, p7/z, z6.d
83lasta   d0, p7, z31.d
84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
85// CHECK-NEXT: lasta   d0, p7, z31.d
86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
87
88movprfx z31, z6
89lasta   d0, p7, z31.d
90// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
91// CHECK-NEXT: lasta   d0, p7, z31.d
92// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
93