@@ -236,3 +236,101 @@ llvm.func @arm_sme_toggle_za() {
236
236
" arm_sme.intr.za.disable" () : () -> ()
237
237
llvm.return
238
238
}
239
+
240
+ // -----
241
+
242
+ // CHECK-LABEL: @arm_sme_vector_to_tile_horiz
243
+ llvm.func @arm_sme_vector_to_tile_horiz (%tileslice : i32 ,
244
+ %nxv16i1 : vector <[16 ]xi1 >,
245
+ %nxv8i1 : vector <[8 ]xi1 >,
246
+ %nxv4i1 : vector <[4 ]xi1 >,
247
+ %nxv2i1 : vector <[2 ]xi1 >,
248
+ %nxv1i1 : vector <[1 ]xi1 >,
249
+ %nxv16i8 : vector <[16 ]xi8 >,
250
+ %nxv8i16 : vector <[8 ]xi16 >,
251
+ %nxv4i32 : vector <[4 ]xi32 >,
252
+ %nxv2i64 : vector <[2 ]xi64 >,
253
+ %nxv1i128 : vector <[1 ]xi128 >,
254
+ %nxv8f16 : vector <[8 ]xf16 >,
255
+ %nxv8bf16 : vector <[8 ]xbf16 >,
256
+ %nxv4f32 : vector <[4 ]xf32 >,
257
+ %nxv2f64 : vector <[2 ]xf64 >) {
258
+ %tile = llvm.mlir.constant (0 : index ) : i32
259
+ // CHECK: call void @llvm.aarch64.sme.write.horiz.nxv16i8
260
+ " arm_sme.intr.write.horiz" (%tile , %tileslice , %nxv16i1 , %nxv16i8 ) :
261
+ (i32 , i32 , vector <[16 ]xi1 >, vector <[16 ]xi8 >) -> ()
262
+ // CHECK: call void @llvm.aarch64.sme.write.horiz.nxv8i16
263
+ " arm_sme.intr.write.horiz" (%tile , %tileslice , %nxv8i1 , %nxv8i16 ) :
264
+ (i32 , i32 , vector <[8 ]xi1 >, vector <[8 ]xi16 >) -> ()
265
+ // CHECK: call void @llvm.aarch64.sme.write.horiz.nxv4i32
266
+ " arm_sme.intr.write.horiz" (%tile , %tileslice , %nxv4i1 , %nxv4i32 ) :
267
+ (i32 , i32 , vector <[4 ]xi1 >, vector <[4 ]xi32 >) -> ()
268
+ // CHECK: call void @llvm.aarch64.sme.write.horiz.nxv2i64
269
+ " arm_sme.intr.write.horiz" (%tile , %tileslice , %nxv2i1 , %nxv2i64 ) :
270
+ (i32 , i32 , vector <[2 ]xi1 >, vector <[2 ]xi64 >) -> ()
271
+ // CHECK: call void @llvm.aarch64.sme.write.horiz.nxv1i128
272
+ " arm_sme.intr.write.horiz" (%tile , %tileslice , %nxv1i1 , %nxv1i128 ) :
273
+ (i32 , i32 , vector <[1 ]xi1 >, vector <[1 ]xi128 >) -> ()
274
+ // CHECK: call void @llvm.aarch64.sme.write.horiz.nxv8f16
275
+ " arm_sme.intr.write.horiz" (%tile , %tileslice , %nxv8i1 , %nxv8f16 ) :
276
+ (i32 , i32 , vector <[8 ]xi1 >, vector <[8 ]xf16 >) -> ()
277
+ // CHECK: call void @llvm.aarch64.sme.write.horiz.nxv8bf16
278
+ " arm_sme.intr.write.horiz" (%tile , %tileslice , %nxv8i1 , %nxv8bf16 ) :
279
+ (i32 , i32 , vector <[8 ]xi1 >, vector <[8 ]xbf16 >) -> ()
280
+ // CHECK: call void @llvm.aarch64.sme.write.horiz.nxv4f32
281
+ " arm_sme.intr.write.horiz" (%tile , %tileslice , %nxv4i1 , %nxv4f32 ) :
282
+ (i32 , i32 , vector <[4 ]xi1 >, vector <[4 ]xf32 >) -> ()
283
+ // CHECK: call void @llvm.aarch64.sme.write.horiz.nxv2f64
284
+ " arm_sme.intr.write.horiz" (%tile , %tileslice , %nxv2i1 , %nxv2f64 ) :
285
+ (i32 , i32 , vector <[2 ]xi1 >, vector <[2 ]xf64 >) -> ()
286
+ llvm.return
287
+ }
288
+
289
+ // -----
290
+
291
+ // CHECK-LABEL: @arm_sme_vector_to_tile_vert
292
+ llvm.func @arm_sme_vector_to_tile_vert (%tileslice : i32 ,
293
+ %nxv16i1 : vector <[16 ]xi1 >,
294
+ %nxv8i1 : vector <[8 ]xi1 >,
295
+ %nxv4i1 : vector <[4 ]xi1 >,
296
+ %nxv2i1 : vector <[2 ]xi1 >,
297
+ %nxv1i1 : vector <[1 ]xi1 >,
298
+ %nxv16i8 : vector <[16 ]xi8 >,
299
+ %nxv8i16 : vector <[8 ]xi16 >,
300
+ %nxv4i32 : vector <[4 ]xi32 >,
301
+ %nxv2i64 : vector <[2 ]xi64 >,
302
+ %nxv1i128 : vector <[1 ]xi128 >,
303
+ %nxv8f16 : vector <[8 ]xf16 >,
304
+ %nxv8bf16 : vector <[8 ]xbf16 >,
305
+ %nxv4f32 : vector <[4 ]xf32 >,
306
+ %nxv2f64 : vector <[2 ]xf64 >) {
307
+ %tile = llvm.mlir.constant (0 : index ) : i32
308
+ // CHECK: call void @llvm.aarch64.sme.write.vert.nxv16i8
309
+ " arm_sme.intr.write.vert" (%tile , %tileslice , %nxv16i1 , %nxv16i8 ) :
310
+ (i32 , i32 , vector <[16 ]xi1 >, vector <[16 ]xi8 >) -> ()
311
+ // CHECK: call void @llvm.aarch64.sme.write.vert.nxv8i16
312
+ " arm_sme.intr.write.vert" (%tile , %tileslice , %nxv8i1 , %nxv8i16 ) :
313
+ (i32 , i32 , vector <[8 ]xi1 >, vector <[8 ]xi16 >) -> ()
314
+ // CHECK: call void @llvm.aarch64.sme.write.vert.nxv4i32
315
+ " arm_sme.intr.write.vert" (%tile , %tileslice , %nxv4i1 , %nxv4i32 ) :
316
+ (i32 , i32 , vector <[4 ]xi1 >, vector <[4 ]xi32 >) -> ()
317
+ // CHECK: call void @llvm.aarch64.sme.write.vert.nxv2i64
318
+ " arm_sme.intr.write.vert" (%tile , %tileslice , %nxv2i1 , %nxv2i64 ) :
319
+ (i32 , i32 , vector <[2 ]xi1 >, vector <[2 ]xi64 >) -> ()
320
+ // CHECK: call void @llvm.aarch64.sme.write.vert.nxv1i128
321
+ " arm_sme.intr.write.vert" (%tile , %tileslice , %nxv1i1 , %nxv1i128 ) :
322
+ (i32 , i32 , vector <[1 ]xi1 >, vector <[1 ]xi128 >) -> ()
323
+ // CHECK: call void @llvm.aarch64.sme.write.vert.nxv8f16
324
+ " arm_sme.intr.write.vert" (%tile , %tileslice , %nxv8i1 , %nxv8f16 ) :
325
+ (i32 , i32 , vector <[8 ]xi1 >, vector <[8 ]xf16 >) -> ()
326
+ // CHECK: call void @llvm.aarch64.sme.write.vert.nxv8bf16
327
+ " arm_sme.intr.write.vert" (%tile , %tileslice , %nxv8i1 , %nxv8bf16 ) :
328
+ (i32 , i32 , vector <[8 ]xi1 >, vector <[8 ]xbf16 >) -> ()
329
+ // CHECK: call void @llvm.aarch64.sme.write.vert.nxv4f32
330
+ " arm_sme.intr.write.vert" (%tile , %tileslice , %nxv4i1 , %nxv4f32 ) :
331
+ (i32 , i32 , vector <[4 ]xi1 >, vector <[4 ]xf32 >) -> ()
332
+ // CHECK: call void @llvm.aarch64.sme.write.vert.nxv2f64
333
+ " arm_sme.intr.write.vert" (%tile , %tileslice , %nxv2i1 , %nxv2f64 ) :
334
+ (i32 , i32 , vector <[2 ]xi1 >, vector <[2 ]xf64 >) -> ()
335
+ llvm.return
336
+ }
0 commit comments