1+ / RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 2 >&1 < %s| FileCheck %s
2+
3+ // ------------------------------------------------------------------------- //
4+ // Invalid predicate
5+
6+ rbit z0.b, p8/z, z0.b
7+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
8+ // CHECK-NEXT: rbit z0.b, p8/z, z0.b
9+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
10+
11+ rbit z0.h, p8/z, z0.h
12+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
13+ // CHECK-NEXT: rbit z0.h, p8/z, z0.h
14+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
15+
16+ rbit z0.s, p8/z, z0.s
17+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
18+ // CHECK-NEXT: rbit z0.s, p8/z, z0.s
19+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
20+
21+ rbit z0.d, p8/z, z0.d
22+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
23+ // CHECK-NEXT: rbit z0.d, p8/z, z0.d
24+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
25+
26+ // --------------------------------------------------------------------------//
27+ // Invalid element widths
28+
29+ rbit z0.b, p7/z, z0.d
30+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: invalid element width
31+ // CHECK-NEXT: rbit z0.b, p7/z, z0.d
32+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
33+
34+ rbit z0.h, p7/z, z0.b
35+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: invalid element width
36+ // CHECK-NEXT: rbit z0.h, p7/z, z0.b
37+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
38+
39+ rbit z0.s, p7/z, z0.h
40+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: invalid element width
41+ // CHECK-NEXT: rbit z0.s, p7/z, z0.h
42+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
43+
44+ rbit z0.d, p7/z, z0.s
45+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: invalid element width
46+ // CHECK-NEXT: rbit z0.d, p7/z, z0.s
47+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
48+
49+ // --------------------------------------------------------------------------//
50+ // Negative tests for instructions that are incompatible with movprfx
51+
52+ movprfx z0.b, p0/z, z7.b
53+ rbit z0.b, p0/z, z0.b
54+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
55+ // CHECK-NEXT: rbit z0.b, p0/z, z0.b
56+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
57+
58+ movprfx z0, z7
59+ rbit z0.h, p0/z, z0.h
60+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
61+ // CHECK-NEXT: rbit z0.h, p0/z, z0.h
62+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
63+
64+ movprfx z0.s, p0/z, z7.s
65+ rbit z0.s, p0/z, z0.s
66+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
67+ // CHECK-NEXT: rbit z0.s, p0/z, z0.s
68+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
69+
70+ movprfx z0, z7
71+ rbit z0.d, p0/z, z0.d
72+ // CHECK: [[@LINE-1 ]]:{{[0-9 ]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
73+ // CHECK-NEXT: rbit z0.d, p0/z, z0.d
74+ // CHECK-NOT : [[@LINE-1 ]]:{{[0-9 ]+}}:
0 commit comments