Skip to content

Commit 7537c3c

Browse files
committed
[RISCV] Precommit test coverage for VLMAX encodable via vsetivli
1 parent f0c03da commit 7537c3c

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/load-add-store.ll

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,3 +355,148 @@ define void @vadd_vint64m8(ptr %pc, ptr %pa, ptr %pb) nounwind {
355355
store <vscale x 8 x i64> %vc, ptr %pc
356356
ret void
357357
}
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

Comments
 (0)