[Frontend] Remove unused includes (NFC) (#116927)
[llvm-project.git] / llvm / test / MC / AArch64 / SVE / dup-diagnostics.s
blob5c48444161dc4e6cefafd1d3419a6e855aedcbb9
1 // RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s
3 // input should be a 64bit scalar register
4 dup z0.d, w0
5 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
6 // CHECK-NEXT: dup z0.d, w0
7 // CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
9 // wzr is not a valid operand to dup
10 dup z0.s, wzr
11 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
12 // CHECK-NEXT: dup z0.s, wzr
13 // CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
15 // xzr is not a valid operand to dup
16 dup z0.d, xzr
17 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
18 // CHECK-NEXT: dup z0.d, xzr
19 // CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
22 // --------------------------------------------------------------------------//
23 // Invalid immediates
25 dup z0.b, #0, lsl #8 // #0, lsl #8 is not valid for .b
26 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
27 // CHECK-NEXT: dup z0.b, #0, lsl #8
28 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
30 dup z0.b, #-1, lsl #8
31 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
32 // CHECK-NEXT: dup z0.b, #-1, lsl #8
33 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
35 dup z0.b, #256
36 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
37 // CHECK-NEXT: dup z0.b, #256
38 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
40 dup z0.b, #1, lsl #8
41 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
42 // CHECK-NEXT: dup z0.b, #1, lsl #8
43 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
45 dup z0.h, #-32769
46 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
47 // CHECK-NEXT: dup z0.h, #-32769
48 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
50 dup z0.h, #65281
51 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
52 // CHECK-NEXT: dup z0.h, #65281
53 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
55 dup z0.h, #65536
56 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
57 // CHECK-NEXT: dup z0.h, #65536
58 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
60 dup z0.h, #256, lsl #8
61 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
62 // CHECK-NEXT: dup z0.h, #256, lsl #8
63 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
65 dup z0.s, #-33024
66 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
67 // CHECK-NEXT: dup z0.s, #-33024
68 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
70 dup z0.s, #-32769
71 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
72 // CHECK-NEXT: dup z0.s, #-32769
73 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
75 dup z0.s, #-129, lsl #8
76 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
77 // CHECK-NEXT: dup z0.s, #-129, lsl #8
78 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
80 dup z0.s, #32513
81 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
82 // CHECK-NEXT: dup z0.s, #32513
83 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
85 dup z0.s, #32768
86 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
87 // CHECK-NEXT: dup z0.s, #32768
88 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
90 dup z0.s, #128, lsl #8
91 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
92 // CHECK-NEXT: dup z0.s, #128, lsl #8
93 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
95 dup z0.d, #-33024
96 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
97 // CHECK-NEXT: dup z0.d, #-33024
98 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
100 dup z0.d, #-32769
101 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
102 // CHECK-NEXT: dup z0.d, #-32769
103 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
105 dup z0.d, #-129, lsl #8
106 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
107 // CHECK-NEXT: dup z0.d, #-129, lsl #8
108 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
110 dup z0.d, #32513
111 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
112 // CHECK-NEXT: dup z0.d, #32513
113 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
115 dup z0.d, #32768
116 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
117 // CHECK-NEXT: dup z0.d, #32768
118 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
120 dup z0.d, #128, lsl #8
121 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
122 // CHECK-NEXT: dup z0.d, #128, lsl #8
123 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
126 // --------------------------------------------------------------------------//
127 // Immediate not compatible with encode/decode function.
129 dup z0.b, b0
130 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
131 // CHECK-NEXT: dup z0.b, b0
132 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
134 dup z0.h, h0
135 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
136 // CHECK-NEXT: dup z0.h, h0
137 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
139 dup z0.s, s0
140 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
141 // CHECK-NEXT: dup z0.s, s0
142 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
144 dup z0.d, d0
145 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
146 // CHECK-NEXT: dup z0.d, d0
147 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
149 dup z0.q, q0
150 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
151 // CHECK-NEXT: dup z0.q, q0
152 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
154 dup z24.b, z17.b[-1]
155 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
156 // CHECK-NEXT: dup z24.b, z17.b[-1]
157 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
159 dup z17.b, z5.b[64]
160 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
161 // CHECK-NEXT: dup z17.b, z5.b[64]
162 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
164 dup z16.h, z30.h[-1]
165 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
166 // CHECK-NEXT: dup z16.h, z30.h[-1]
167 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
169 dup z19.h, z23.h[32]
170 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
171 // CHECK-NEXT: dup z19.h, z23.h[32]
172 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
174 dup z1.s, z6.s[-1]
175 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
176 // CHECK-NEXT: dup z1.s, z6.s[-1]
177 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
179 dup z24.s, z3.s[16]
180 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
181 // CHECK-NEXT: dup z24.s, z3.s[16]
182 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
184 dup z5.d, z25.d[-1]
185 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
186 // CHECK-NEXT: dup z5.d, z25.d[-1]
187 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
189 dup z12.d, z28.d[8]
190 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
191 // CHECK-NEXT: dup z12.d, z28.d[8]
192 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
194 dup z22.q, z7.q[-1]
195 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
196 // CHECK-NEXT: dup z22.q, z7.q[-1]
197 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
199 dup z24.q, z21.q[4]
200 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
201 // CHECK-NEXT: dup z24.q, z21.q[4]
202 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
205 // --------------------------------------------------------------------------//
206 // Negative tests for instructions that are incompatible with movprfx
208 movprfx z31.b, p0/z, z6.b
209 dup z31.b, wsp
210 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
211 // CHECK-NEXT: dup z31.b, wsp
212 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
214 movprfx z31, z6
215 dup z31.b, wsp
216 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
217 // CHECK-NEXT: dup z31.b, wsp
218 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
220 movprfx z21.d, p0/z, z28.d
221 dup z21.d, #32512
222 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
223 // CHECK-NEXT: dup z21.d, #32512
224 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
226 movprfx z21, z28
227 dup z21.d, #32512
228 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
229 // CHECK-NEXT: dup z21.d, #32512
230 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
232 movprfx z31.d, p0/z, z6.d
233 dup z31.d, z31.d[7]
234 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
235 // CHECK-NEXT: dup z31.d, z31.d[7]
236 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
238 movprfx z31, z6
239 dup z31.d, z31.d[7]
240 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
241 // CHECK-NEXT: dup z31.d, z31.d[7]
242 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: