Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / MC / AArch64 / SVE / matrix-multiply-fp64.s
blob14637da848558fb0d8cf304b1bce9c2d4b912f1d
1 // RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve,+f64mm < %s \
2 // RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3 // RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
4 // RUN: | FileCheck %s --check-prefix=CHECK-ERROR
5 // RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve,+f64mm < %s \
6 // RUN: | llvm-objdump --no-print-imm-hex -d --mattr=+sve,+f64mm - | FileCheck %s --check-prefix=CHECK-INST
7 // RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve,+f64mm < %s \
8 // RUN: | llvm-objdump --no-print-imm-hex -d --mattr=-sve - | FileCheck %s --check-prefix=CHECK-UNKNOWN
10 // --------------------------------------------------------------------------//
11 // FMMLA (SVE)
13 fmmla z0.d, z1.d, z2.d
14 // CHECK-INST: fmmla z0.d, z1.d, z2.d
15 // CHECK-ENCODING: [0x20,0xe4,0xe2,0x64]
16 // CHECK-ERROR: instruction requires: f64mm sve
17 // CHECK-UNKNOWN: 64e2e420 <unknown>
19 // --------------------------------------------------------------------------//
20 // LD1RO (SVE, scalar plus immediate)
22 // With maximum immediate (224)
24 ld1rob { z0.b }, p1/z, [x2, #224]
25 // CHECK-INST: ld1rob { z0.b }, p1/z, [x2, #224]
26 // CHECK-ENCODING: [0x40,0x24,0x27,0xa4]
27 // CHECK-ERROR: instruction requires: f64mm sve
28 // CHECK-UNKNOWN: a4272440 <unknown>
30 ld1roh { z0.h }, p1/z, [x2, #224]
31 // CHECK-INST: ld1roh { z0.h }, p1/z, [x2, #224]
32 // CHECK-ENCODING: [0x40,0x24,0xa7,0xa4]
33 // CHECK-ERROR: instruction requires: f64mm sve
34 // CHECK-UNKNOWN: a4a72440 <unknown>
36 ld1row { z0.s }, p1/z, [x2, #224]
37 // CHECK-INST: ld1row { z0.s }, p1/z, [x2, #224]
38 // CHECK-ENCODING: [0x40,0x24,0x27,0xa5]
39 // CHECK-ERROR: instruction requires: f64mm sve
40 // CHECK-UNKNOWN: a5272440 <unknown>
42 ld1rod { z0.d }, p1/z, [x2, #224]
43 // CHECK-INST: ld1rod { z0.d }, p1/z, [x2, #224]
44 // CHECK-ENCODING: [0x40,0x24,0xa7,0xa5]
45 // CHECK-ERROR: instruction requires: f64mm sve
46 // CHECK-UNKNOWN: a5a72440 <unknown>
48 // With minimum immediate (-256)
50 ld1rob { z0.b }, p1/z, [x2, #-256]
51 // CHECK-INST: ld1rob { z0.b }, p1/z, [x2, #-256]
52 // CHECK-ENCODING: [0x40,0x24,0x28,0xa4]
53 // CHECK-ERROR: instruction requires: f64mm sve
54 // CHECK-UNKNOWN: a4282440 <unknown>
56 ld1roh { z0.h }, p1/z, [x2, #-256]
57 // CHECK-INST: ld1roh { z0.h }, p1/z, [x2, #-256]
58 // CHECK-ENCODING: [0x40,0x24,0xa8,0xa4]
59 // CHECK-ERROR: instruction requires: f64mm sve
60 // CHECK-UNKNOWN: a4a82440 <unknown>
62 ld1row { z0.s }, p1/z, [x2, #-256]
63 // CHECK-INST: ld1row { z0.s }, p1/z, [x2, #-256]
64 // CHECK-ENCODING: [0x40,0x24,0x28,0xa5]
65 // CHECK-ERROR: instruction requires: f64mm sve
66 // CHECK-UNKNOWN: a5282440 <unknown>
68 ld1rod { z0.d }, p1/z, [x2, #-256]
69 // CHECK-INST: ld1rod { z0.d }, p1/z, [x2, #-256]
70 // CHECK-ENCODING: [0x40,0x24,0xa8,0xa5]
71 // CHECK-ERROR: instruction requires: f64mm sve
72 // CHECK-UNKNOWN: a5a82440 <unknown>
74 // Aliases with a vector first operand, and omitted offset.
76 ld1rob { z0.b }, p1/z, [x2]
77 // CHECK-INST: ld1rob { z0.b }, p1/z, [x2]
78 // CHECK-ENCODING: [0x40,0x24,0x20,0xa4]
79 // CHECK-ERROR: instruction requires: f64mm sve
80 // CHECK-UNKNOWN: a4202440 <unknown>
82 ld1roh { z0.h }, p1/z, [x2]
83 // CHECK-INST: ld1roh { z0.h }, p1/z, [x2]
84 // CHECK-ENCODING: [0x40,0x24,0xa0,0xa4]
85 // CHECK-ERROR: instruction requires: f64mm sve
86 // CHECK-UNKNOWN: a4a02440 <unknown>
88 ld1row { z0.s }, p1/z, [x2]
89 // CHECK-INST: ld1row { z0.s }, p1/z, [x2]
90 // CHECK-ENCODING: [0x40,0x24,0x20,0xa5]
91 // CHECK-ERROR: instruction requires: f64mm sve
92 // CHECK-UNKNOWN: a5202440 <unknown>
94 ld1rod { z0.d }, p1/z, [x2]
95 // CHECK-INST: ld1rod { z0.d }, p1/z, [x2]
96 // CHECK-ENCODING: [0x40,0x24,0xa0,0xa5]
97 // CHECK-ERROR: instruction requires: f64mm sve
98 // CHECK-UNKNOWN: a5a02440 <unknown>
100 // Aliases with a plain (non-list) first operand, and omitted offset.
102 ld1rob z0.b, p1/z, [x2]
103 // CHECK-INST: ld1rob { z0.b }, p1/z, [x2]
104 // CHECK-ENCODING: [0x40,0x24,0x20,0xa4]
105 // CHECK-ERROR: instruction requires: f64mm sve
106 // CHECK-UNKNOWN: a4202440 <unknown>
108 ld1roh z0.h, p1/z, [x2]
109 // CHECK-INST: ld1roh { z0.h }, p1/z, [x2]
110 // CHECK-ENCODING: [0x40,0x24,0xa0,0xa4]
111 // CHECK-ERROR: instruction requires: f64mm sve
112 // CHECK-UNKNOWN: a4a02440 <unknown>
114 ld1row z0.s, p1/z, [x2]
115 // CHECK-INST: ld1row { z0.s }, p1/z, [x2]
116 // CHECK-ENCODING: [0x40,0x24,0x20,0xa5]
117 // CHECK-ERROR: instruction requires: f64mm sve
118 // CHECK-UNKNOWN: a5202440 <unknown>
120 ld1rod z0.d, p1/z, [x2]
121 // CHECK-INST: ld1rod { z0.d }, p1/z, [x2]
122 // CHECK-ENCODING: [0x40,0x24,0xa0,0xa5]
123 // CHECK-ERROR: instruction requires: f64mm sve
124 // CHECK-UNKNOWN: a5a02440 <unknown>
126 // Aliases with a plain (non-list) first operand, plus offset.
128 // With maximum immediate (224)
130 ld1rob z0.b, p1/z, [x2, #224]
131 // CHECK-INST: ld1rob { z0.b }, p1/z, [x2, #224]
132 // CHECK-ENCODING: [0x40,0x24,0x27,0xa4]
133 // CHECK-ERROR: instruction requires: f64mm sve
134 // CHECK-UNKNOWN: a4272440 <unknown>
136 ld1roh z0.h, p1/z, [x2, #224]
137 // CHECK-INST: ld1roh { z0.h }, p1/z, [x2, #224]
138 // CHECK-ENCODING: [0x40,0x24,0xa7,0xa4]
139 // CHECK-ERROR: instruction requires: f64mm sve
140 // CHECK-UNKNOWN: a4a72440 <unknown>
142 ld1row z0.s, p1/z, [x2, #224]
143 // CHECK-INST: ld1row { z0.s }, p1/z, [x2, #224]
144 // CHECK-ENCODING: [0x40,0x24,0x27,0xa5]
145 // CHECK-ERROR: instruction requires: f64mm sve
146 // CHECK-UNKNOWN: a5272440 <unknown>
148 ld1rod z0.d, p1/z, [x2, #224]
149 // CHECK-INST: ld1rod { z0.d }, p1/z, [x2, #224]
150 // CHECK-ENCODING: [0x40,0x24,0xa7,0xa5]
151 // CHECK-ERROR: instruction requires: f64mm sve
152 // CHECK-UNKNOWN: a5a72440 <unknown>
154 // With minimum immediate (-256)
156 ld1rob z0.b, p1/z, [x2, #-256]
157 // CHECK-INST: ld1rob { z0.b }, p1/z, [x2, #-256]
158 // CHECK-ENCODING: [0x40,0x24,0x28,0xa4]
159 // CHECK-ERROR: instruction requires: f64mm sve
160 // CHECK-UNKNOWN: a4282440 <unknown>
162 ld1roh z0.h, p1/z, [x2, #-256]
163 // CHECK-INST: ld1roh { z0.h }, p1/z, [x2, #-256]
164 // CHECK-ENCODING: [0x40,0x24,0xa8,0xa4]
165 // CHECK-ERROR: instruction requires: f64mm sve
166 // CHECK-UNKNOWN: a4a82440 <unknown>
168 ld1row z0.s, p1/z, [x2, #-256]
169 // CHECK-INST: ld1row { z0.s }, p1/z, [x2, #-256]
170 // CHECK-ENCODING: [0x40,0x24,0x28,0xa5]
171 // CHECK-ERROR: instruction requires: f64mm sve
172 // CHECK-UNKNOWN: a5282440 <unknown>
174 ld1rod z0.d, p1/z, [x2, #-256]
175 // CHECK-INST: ld1rod { z0.d }, p1/z, [x2, #-256]
176 // CHECK-ENCODING: [0x40,0x24,0xa8,0xa5]
177 // CHECK-ERROR: instruction requires: f64mm sve
178 // CHECK-UNKNOWN: a5a82440 <unknown>
181 // --------------------------------------------------------------------------//
182 // LD1RO (SVE, scalar plus scalar)
184 ld1rob { z0.b }, p1/z, [x2, x3, lsl #0]
185 // CHECK-INST: ld1rob { z0.b }, p1/z, [x2, x3]
186 // CHECK-ENCODING: [0x40,0x04,0x23,0xa4]
187 // CHECK-ERROR: instruction requires: f64mm sve
188 // CHECK-UNKNOWN: a4230440 <unknown>
190 ld1roh { z0.h }, p1/z, [x2, x3, lsl #1]
191 // CHECK-INST: ld1roh { z0.h }, p1/z, [x2, x3, lsl #1]
192 // CHECK-ENCODING: [0x40,0x04,0xa3,0xa4]
193 // CHECK-ERROR: instruction requires: f64mm sve
194 // CHECK-UNKNOWN: a4a30440 <unknown>
196 ld1row { z0.s }, p1/z, [x2, x3, lsl #2]
197 // CHECK-INST: ld1row { z0.s }, p1/z, [x2, x3, lsl #2]
198 // CHECK-ENCODING: [0x40,0x04,0x23,0xa5]
199 // CHECK-ERROR: instruction requires: f64mm sve
200 // CHECK-UNKNOWN: a5230440 <unknown>
202 ld1rod { z0.d }, p1/z, [x2, x3, lsl #3]
203 // CHECK-INST: ld1rod { z0.d }, p1/z, [x2, x3, lsl #3]
204 // CHECK-ENCODING: [0x40,0x04,0xa3,0xa5]
205 // CHECK-ERROR: instruction requires: f64mm sve
206 // CHECK-UNKNOWN: a5a30440 <unknown>
208 // Aliases with a plain (non-list) first operand, and omitted shift for the
209 // byte variant.
211 ld1rob z0.b, p1/z, [x2, x3]
212 // CHECK-INST: ld1rob { z0.b }, p1/z, [x2, x3]
213 // CHECK-ENCODING: [0x40,0x04,0x23,0xa4]
214 // CHECK-ERROR: instruction requires: f64mm sve
215 // CHECK-UNKNOWN: a4230440 <unknown>
217 ld1roh z0.h, p1/z, [x2, x3, lsl #1]
218 // CHECK-INST: ld1roh { z0.h }, p1/z, [x2, x3, lsl #1]
219 // CHECK-ENCODING: [0x40,0x04,0xa3,0xa4]
220 // CHECK-ERROR: instruction requires: f64mm sve
221 // CHECK-UNKNOWN: a4a30440 <unknown>
223 ld1row z0.s, p1/z, [x2, x3, lsl #2]
224 // CHECK-INST: ld1row { z0.s }, p1/z, [x2, x3, lsl #2]
225 // CHECK-ENCODING: [0x40,0x04,0x23,0xa5]
226 // CHECK-ERROR: instruction requires: f64mm sve
227 // CHECK-UNKNOWN: a5230440 <unknown>
229 ld1rod z0.d, p1/z, [x2, x3, lsl #3]
230 // CHECK-INST: ld1rod { z0.d }, p1/z, [x2, x3, lsl #3]
231 // CHECK-ENCODING: [0x40,0x04,0xa3,0xa5]
232 // CHECK-ERROR: instruction requires: f64mm sve
233 // CHECK-UNKNOWN: a5a30440 <unknown>
236 // --------------------------------------------------------------------------//
237 // ZIP1, ZIP2 (SVE, 128-bit element)
239 zip1 z0.q, z1.q, z2.q
240 // CHECK-INST: zip1 z0.q, z1.q, z2.q
241 // CHECK-ENCODING: [0x20,0x00,0xa2,0x05]
242 // CHECK-ERROR: instruction requires: f64mm sve or sme
243 // CHECK-UNKNOWN: 05a20020 <unknown>
245 zip2 z0.q, z1.q, z2.q
246 // CHECK-INST: zip2 z0.q, z1.q, z2.q
247 // CHECK-ENCODING: [0x20,0x04,0xa2,0x05]
248 // CHECK-ERROR: instruction requires: f64mm sve or sme
249 // CHECK-UNKNOWN: 05a20420 <unknown>
252 // --------------------------------------------------------------------------//
253 // UZP1, UZP2 (SVE, 128-bit element)
255 uzp1 z0.q, z1.q, z2.q
256 // CHECK-INST: uzp1 z0.q, z1.q, z2.q
257 // CHECK-ENCODING: [0x20,0x08,0xa2,0x05]
258 // CHECK-ERROR: instruction requires: f64mm sve or sme
259 // CHECK-UNKNOWN: 05a20820 <unknown>
261 uzp2 z0.q, z1.q, z2.q
262 // CHECK-INST: uzp2 z0.q, z1.q, z2.q
263 // CHECK-ENCODING: [0x20,0x0c,0xa2,0x05]
264 // CHECK-ERROR: instruction requires: f64mm sve or sme
265 // CHECK-UNKNOWN: 05a20c20 <unknown>
268 // --------------------------------------------------------------------------//
269 // TRN1, TRN2 (SVE, 128-bit element)
271 trn1 z0.q, z1.q, z2.q
272 // CHECK-INST: trn1 z0.q, z1.q, z2.q
273 // CHECK-ENCODING: [0x20,0x18,0xa2,0x05]
274 // CHECK-ERROR: instruction requires: f64mm sve or sme
275 // CHECK-UNKNOWN: 05a21820 <unknown>
277 trn2 z0.q, z1.q, z2.q
278 // CHECK-INST: trn2 z0.q, z1.q, z2.q
279 // CHECK-ENCODING: [0x20,0x1c,0xa2,0x05]
280 // CHECK-ERROR: instruction requires: f64mm sve or sme
281 // CHECK-UNKNOWN: 05a21c20 <unknown>