• 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// Invalid operand (.b, .h, .s)
5
6ldff1d z4.b, p7/z, [x0]
7// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
8// CHECK-NEXT: ldff1d z4.b, p7/z, [x0]
9// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
10
11ldff1d z4.h, p7/z, [x0]
12// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
13// CHECK-NEXT: ldff1d z4.h, p7/z, [x0]
14// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
15
16ldff1d z4.s, p7/z, [x0]
17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
18// CHECK-NEXT: ldff1d z4.s, p7/z, [x0]
19// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
20
21// --------------------------------------------------------------------------//
22// restricted predicate has range [0, 7].
23
24ldff1d z4.d, p8/z, [x0]
25// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7].
26// CHECK-NEXT: ldff1d z4.d, p8/z, [x0]
27// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
28
29// --------------------------------------------------------------------------//
30// Invalid scalar + scalar addressing modes
31
32ldff1d z0.d, p0/z, [x0, sp]
33// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 or xzr, with required shift 'lsl #3'
34// CHECK-NEXT: ldff1d z0.d, p0/z, [x0, sp]
35// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
36
37ldff1d z0.d, p0/z, [x0, x0, lsl #1]
38// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 or xzr, with required shift 'lsl #3'
39// CHECK-NEXT: ldff1d z0.d, p0/z, [x0, x0, lsl #1]
40// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
41
42ldff1d z0.d, p0/z, [x0, w0]
43// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 or xzr, with required shift 'lsl #3'
44// CHECK-NEXT: ldff1d z0.d, p0/z, [x0, w0]
45// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
46
47ldff1d z0.d, p0/z, [x0, w0, uxtw]
48// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 or xzr, with required shift 'lsl #3'
49// CHECK-NEXT: ldff1d z0.d, p0/z, [x0, w0, uxtw]
50// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
51
52
53// --------------------------------------------------------------------------//
54// Invalid scalar + vector addressing modes
55
56ldff1d z0.d, p0/z, [x0, z0.s]
57// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
58// CHECK-NEXT: ldff1d z0.d, p0/z, [x0, z0.s]
59// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
60
61ldff1d z0.d, p0/z, [x0, z0.d, uxtw #2]
62// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #3'
63// CHECK-NEXT: ldff1d z0.d, p0/z, [x0, z0.d, uxtw #2]
64// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
65
66ldff1d z0.d, p0/z, [x0, z0.d, lsl #2]
67// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #3'
68// CHECK-NEXT: ldff1d z0.d, p0/z, [x0, z0.d, lsl #2]
69// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
70
71ldff1d z0.d, p0/z, [x0, z0.d, lsl]
72// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected #imm after shift specifier
73// CHECK-NEXT: ldff1d z0.d, p0/z, [x0, z0.d, lsl]
74// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
75
76
77// --------------------------------------------------------------------------//
78// Invalid vector + immediate addressing modes
79
80ldff1d z0.s, p0/z, [z0.s]
81// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
82// CHECK-NEXT: ldff1d z0.s, p0/z, [z0.s]
83// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
84
85ldff1d z0.s, p0/z, [z0.s, #8]
86// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
87// CHECK-NEXT: ldff1d z0.s, p0/z, [z0.s, #8]
88// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
89
90ldff1d z0.d, p0/z, [z0.d, #-8]
91// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 8 in range [0, 248].
92// CHECK-NEXT: ldff1d z0.d, p0/z, [z0.d, #-8]
93// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
94
95ldff1d z0.d, p0/z, [z0.d, #-1]
96// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 8 in range [0, 248].
97// CHECK-NEXT: ldff1d z0.d, p0/z, [z0.d, #-1]
98// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
99
100ldff1d z0.d, p0/z, [z0.d, #249]
101// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 8 in range [0, 248].
102// CHECK-NEXT: ldff1d z0.d, p0/z, [z0.d, #249]
103// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
104
105ldff1d z0.d, p0/z, [z0.d, #256]
106// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 8 in range [0, 248].
107// CHECK-NEXT: ldff1d z0.d, p0/z, [z0.d, #256]
108// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
109
110ldff1d z0.d, p0/z, [z0.d, #3]
111// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 8 in range [0, 248].
112// CHECK-NEXT: ldff1d z0.d, p0/z, [z0.d, #3]
113// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
114
115
116// --------------------------------------------------------------------------//
117// Negative tests for instructions that are incompatible with movprfx
118
119movprfx z0.d, p0/z, z7.d
120ldff1d  { z0.d }, p0/z, [z0.d]
121// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
122// CHECK-NEXT: ldff1d  { z0.d }, p0/z, [z0.d]
123// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
124
125movprfx z0, z7
126ldff1d  { z0.d }, p0/z, [z0.d]
127// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
128// CHECK-NEXT: ldff1d  { z0.d }, p0/z, [z0.d]
129// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
130