@@ -355,3 +355,148 @@ define void @vadd_vint64m8(ptr %pc, ptr %pa, ptr %pb) nounwind {
355
355
store <vscale x 8 x i64 > %vc , ptr %pc
356
356
ret void
357
357
}
358
+
359
+
360
+ define void @exact_vlen_vadd_vint8m1 (ptr %pc , ptr %pa , ptr %pb ) nounwind vscale_range(2 ,2 ) {
361
+ ; CHECK-LABEL: exact_vlen_vadd_vint8m1:
362
+ ; CHECK: # %bb.0:
363
+ ; CHECK-NEXT: vl1r.v v8, (a1)
364
+ ; CHECK-NEXT: vl1r.v v9, (a2)
365
+ ; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma
366
+ ; CHECK-NEXT: vadd.vv v8, v8, v9
367
+ ; CHECK-NEXT: vs1r.v v8, (a0)
368
+ ; CHECK-NEXT: ret
369
+ %va = load <vscale x 8 x i8 >, ptr %pa
370
+ %vb = load <vscale x 8 x i8 >, ptr %pb
371
+ %vc = add <vscale x 8 x i8 > %va , %vb
372
+ store <vscale x 8 x i8 > %vc , ptr %pc
373
+ ret void
374
+ }
375
+
376
+ define void @exact_vlen_vadd_vint8m2 (ptr %pc , ptr %pa , ptr %pb ) nounwind vscale_range(2 ,2 ) {
377
+ ; CHECK-LABEL: exact_vlen_vadd_vint8m2:
378
+ ; CHECK: # %bb.0:
379
+ ; CHECK-NEXT: vl2r.v v8, (a1)
380
+ ; CHECK-NEXT: vl2r.v v10, (a2)
381
+ ; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma
382
+ ; CHECK-NEXT: vadd.vv v8, v8, v10
383
+ ; CHECK-NEXT: vs2r.v v8, (a0)
384
+ ; CHECK-NEXT: ret
385
+ %va = load <vscale x 16 x i8 >, ptr %pa
386
+ %vb = load <vscale x 16 x i8 >, ptr %pb
387
+ %vc = add <vscale x 16 x i8 > %va , %vb
388
+ store <vscale x 16 x i8 > %vc , ptr %pc
389
+ ret void
390
+ }
391
+
392
+ define void @exact_vlen_vadd_vint8mf2 (ptr %pc , ptr %pa , ptr %pb ) nounwind vscale_range(2 ,2 ) {
393
+ ; CHECK-LABEL: exact_vlen_vadd_vint8mf2:
394
+ ; CHECK: # %bb.0:
395
+ ; CHECK-NEXT: vsetvli a3, zero, e8, mf2, ta, ma
396
+ ; CHECK-NEXT: vle8.v v8, (a1)
397
+ ; CHECK-NEXT: vle8.v v9, (a2)
398
+ ; CHECK-NEXT: vadd.vv v8, v8, v9
399
+ ; CHECK-NEXT: vse8.v v8, (a0)
400
+ ; CHECK-NEXT: ret
401
+ %va = load <vscale x 4 x i8 >, ptr %pa
402
+ %vb = load <vscale x 4 x i8 >, ptr %pb
403
+ %vc = add <vscale x 4 x i8 > %va , %vb
404
+ store <vscale x 4 x i8 > %vc , ptr %pc
405
+ ret void
406
+ }
407
+
408
+ define void @exact_vlen_vadd_vint8mf4 (ptr %pc , ptr %pa , ptr %pb ) nounwind vscale_range(2 ,2 ) {
409
+ ; CHECK-LABEL: exact_vlen_vadd_vint8mf4:
410
+ ; CHECK: # %bb.0:
411
+ ; CHECK-NEXT: vsetvli a3, zero, e8, mf4, ta, ma
412
+ ; CHECK-NEXT: vle8.v v8, (a1)
413
+ ; CHECK-NEXT: vle8.v v9, (a2)
414
+ ; CHECK-NEXT: vadd.vv v8, v8, v9
415
+ ; CHECK-NEXT: vse8.v v8, (a0)
416
+ ; CHECK-NEXT: ret
417
+ %va = load <vscale x 2 x i8 >, ptr %pa
418
+ %vb = load <vscale x 2 x i8 >, ptr %pb
419
+ %vc = add <vscale x 2 x i8 > %va , %vb
420
+ store <vscale x 2 x i8 > %vc , ptr %pc
421
+ ret void
422
+ }
423
+
424
+ define void @exact_vlen_vadd_vint8mf8 (ptr %pc , ptr %pa , ptr %pb ) nounwind vscale_range(2 ,2 ) {
425
+ ; CHECK-LABEL: exact_vlen_vadd_vint8mf8:
426
+ ; CHECK: # %bb.0:
427
+ ; CHECK-NEXT: vsetvli a3, zero, e8, mf8, ta, ma
428
+ ; CHECK-NEXT: vle8.v v8, (a1)
429
+ ; CHECK-NEXT: vle8.v v9, (a2)
430
+ ; CHECK-NEXT: vadd.vv v8, v8, v9
431
+ ; CHECK-NEXT: vse8.v v8, (a0)
432
+ ; CHECK-NEXT: ret
433
+ %va = load <vscale x 1 x i8 >, ptr %pa
434
+ %vb = load <vscale x 1 x i8 >, ptr %pb
435
+ %vc = add <vscale x 1 x i8 > %va , %vb
436
+ store <vscale x 1 x i8 > %vc , ptr %pc
437
+ ret void
438
+ }
439
+
440
+ define void @exact_vlen_vadd_vint32m1 (ptr %pc , ptr %pa , ptr %pb ) nounwind vscale_range(2 ,2 ) {
441
+ ; CHECK-LABEL: exact_vlen_vadd_vint32m1:
442
+ ; CHECK: # %bb.0:
443
+ ; CHECK-NEXT: vl1re32.v v8, (a1)
444
+ ; CHECK-NEXT: vl1re32.v v9, (a2)
445
+ ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
446
+ ; CHECK-NEXT: vadd.vv v8, v8, v9
447
+ ; CHECK-NEXT: vs1r.v v8, (a0)
448
+ ; CHECK-NEXT: ret
449
+ %va = load <vscale x 2 x i32 >, ptr %pa
450
+ %vb = load <vscale x 2 x i32 >, ptr %pb
451
+ %vc = add <vscale x 2 x i32 > %va , %vb
452
+ store <vscale x 2 x i32 > %vc , ptr %pc
453
+ ret void
454
+ }
455
+
456
+ define void @exact_vlen_vadd_vint32m2 (ptr %pc , ptr %pa , ptr %pb ) nounwind vscale_range(2 ,2 ) {
457
+ ; CHECK-LABEL: exact_vlen_vadd_vint32m2:
458
+ ; CHECK: # %bb.0:
459
+ ; CHECK-NEXT: vl2re32.v v8, (a1)
460
+ ; CHECK-NEXT: vl2re32.v v10, (a2)
461
+ ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma
462
+ ; CHECK-NEXT: vadd.vv v8, v8, v10
463
+ ; CHECK-NEXT: vs2r.v v8, (a0)
464
+ ; CHECK-NEXT: ret
465
+ %va = load <vscale x 4 x i32 >, ptr %pa
466
+ %vb = load <vscale x 4 x i32 >, ptr %pb
467
+ %vc = add <vscale x 4 x i32 > %va , %vb
468
+ store <vscale x 4 x i32 > %vc , ptr %pc
469
+ ret void
470
+ }
471
+
472
+ define void @exact_vlen_vadd_vint32m4 (ptr %pc , ptr %pa , ptr %pb ) nounwind vscale_range(2 ,2 ) {
473
+ ; CHECK-LABEL: exact_vlen_vadd_vint32m4:
474
+ ; CHECK: # %bb.0:
475
+ ; CHECK-NEXT: vl4re32.v v8, (a1)
476
+ ; CHECK-NEXT: vl4re32.v v12, (a2)
477
+ ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma
478
+ ; CHECK-NEXT: vadd.vv v8, v8, v12
479
+ ; CHECK-NEXT: vs4r.v v8, (a0)
480
+ ; CHECK-NEXT: ret
481
+ %va = load <vscale x 8 x i32 >, ptr %pa
482
+ %vb = load <vscale x 8 x i32 >, ptr %pb
483
+ %vc = add <vscale x 8 x i32 > %va , %vb
484
+ store <vscale x 8 x i32 > %vc , ptr %pc
485
+ ret void
486
+ }
487
+
488
+ define void @exact_vlen_vadd_vint32m8 (ptr %pc , ptr %pa , ptr %pb ) nounwind vscale_range(2 ,2 ) {
489
+ ; CHECK-LABEL: exact_vlen_vadd_vint32m8:
490
+ ; CHECK: # %bb.0:
491
+ ; CHECK-NEXT: vl8re32.v v8, (a1)
492
+ ; CHECK-NEXT: vl8re32.v v16, (a2)
493
+ ; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma
494
+ ; CHECK-NEXT: vadd.vv v8, v8, v16
495
+ ; CHECK-NEXT: vs8r.v v8, (a0)
496
+ ; CHECK-NEXT: ret
497
+ %va = load <vscale x 16 x i32 >, ptr %pa
498
+ %vb = load <vscale x 16 x i32 >, ptr %pb
499
+ %vc = add <vscale x 16 x i32 > %va , %vb
500
+ store <vscale x 16 x i32 > %vc , ptr %pc
501
+ ret void
502
+ }
0 commit comments