1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2  2>&1 < %s| FileCheck %s
2
3
4// ------------------------------------------------------------------------- //
5// z register out of range for index
6
7sqdmlslt z0.s, z1.h, z8.h[0]
8// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
9// CHECK-NEXT: sqdmlslt z0.s, z1.h, z8.h[0]
10// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
11
12sqdmlslt z0.d, z1.s, z16.s[0]
13// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
14// CHECK-NEXT: sqdmlslt z0.d, z1.s, z16.s[0]
15// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
16
17// ------------------------------------------------------------------------- //
18// Index out of bounds
19
20sqdmlslt z0.s, z1.h, z7.h[-1]
21// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
22// CHECK-NEXT: sqdmlslt z0.s, z1.h, z7.h[-1]
23// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
24
25sqdmlslt z0.s, z1.h, z7.h[8]
26// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
27// CHECK-NEXT: sqdmlslt z0.s, z1.h, z7.h[8]
28// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
29
30sqdmlslt z0.d, z1.s, z15.s[-1]
31// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
32// CHECK-NEXT: sqdmlslt z0.d, z1.s, z15.s[-1]
33// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
34
35sqdmlslt z0.d, z1.s, z15.s[4]
36// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
37// CHECK-NEXT: sqdmlslt z0.d, z1.s, z15.s[4]
38// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
39
40// ------------------------------------------------------------------------- //
41// Invalid element width
42
43sqdmlslt z0.b, z1.b, z2.b
44// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
45// CHECK-NEXT: sqdmlslt z0.b, z1.b, z2.b
46// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
47
48sqdmlslt z0.h, z1.h, z2.h
49// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
50// CHECK-NEXT: sqdmlslt z0.h, z1.h, z2.h
51// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
52
53sqdmlslt z0.s, z1.s, z2.s
54// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
55// CHECK-NEXT: sqdmlslt z0.s, z1.s, z2.s
56// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
57
58sqdmlslt z0.d, z1.d, z2.d
59// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
60// CHECK-NEXT: sqdmlslt z0.d, z1.d, z2.d
61// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
62
63sqdmlslt z0.b, z1.b, z2.b[0]
64// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
65// CHECK-NEXT: sqdmlslt z0.b, z1.b, z2.b[0]
66// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
67
68sqdmlslt z0.h, z1.h, z2.h[0]
69// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
70// CHECK-NEXT: sqdmlslt z0.h, z1.h, z2.h[0]
71// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
72
73sqdmlslt z0.s, z1.b, z2.b[0]
74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
75// CHECK-NEXT: sqdmlslt z0.s, z1.b, z2.b[0]
76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
77
78sqdmlslt z0.s, z1.s, z2.s[0]
79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
80// CHECK-NEXT: sqdmlslt z0.s, z1.s, z2.s[0]
81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
82
83sqdmlslt z0.s, z1.d, z2.d[0]
84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
85// CHECK-NEXT: sqdmlslt z0.s, z1.d, z2.d[0]
86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
87
88sqdmlslt z0.d, z1.b, z2.b[0]
89// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
90// CHECK-NEXT: sqdmlslt z0.d, z1.b, z2.b[0]
91// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
92
93sqdmlslt z0.d, z1.h, z2.h[0]
94// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
95// CHECK-NEXT: sqdmlslt z0.d, z1.h, z2.h[0]
96// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
97
98sqdmlslt z0.d, z1.d, z2.d[0]
99// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
100// CHECK-NEXT: sqdmlslt z0.d, z1.d, z2.d[0]
101// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
102
103// --------------------------------------------------------------------------//
104// Negative tests for instructions that are incompatible with movprfx
105
106movprfx z0.d, p0/z, z7.d
107sqdmlslt  z0.d, z1.s, z15.s
108// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx
109// CHECK-NEXT: sqdmlslt  z0.d, z1.s, z15.s
110// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
111
112movprfx z0.d, p0/z, z7.d
113sqdmlslt  z0.d, z1.s, z15.s[0]
114// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx
115// CHECK-NEXT: sqdmlslt  z0.d, z1.s, z15.s[0]
116// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
117