Skip to content

Commit 494d86d

Browse files
committed
[RISCV] Pre-commit test for D122769. NFC
1 parent 827ff1e commit 494d86d

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.ll

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,3 +582,58 @@ if2.end:
582582
ret <vscale x 2 x i32> %h
583583
}
584584
declare <vscale x 2 x i32> @llvm.riscv.vwadd.w.nxv2i32.nxv2i16(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i16>, i64)
585+
586+
; We should only need 1 vsetvli for this code.
587+
define void @vlmax(i64 %N, double* %c, double* %a, double* %b) {
588+
; CHECK-LABEL: vlmax:
589+
; CHECK: # %bb.0: # %entry
590+
; CHECK-NEXT: vsetvli a6, zero, e64, m1, ta, mu
591+
; CHECK-NEXT: blez a0, .LBB11_3
592+
; CHECK-NEXT: # %bb.1: # %for.body.preheader
593+
; CHECK-NEXT: li a5, 0
594+
; CHECK-NEXT: li t1, 0
595+
; CHECK-NEXT: slli a7, a6, 3
596+
; CHECK-NEXT: .LBB11_2: # %for.body
597+
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
598+
; CHECK-NEXT: add t0, a2, a5
599+
; CHECK-NEXT: vsetvli zero, a6, e64, m1, ta, mu
600+
; CHECK-NEXT: vle64.v v8, (t0)
601+
; CHECK-NEXT: add a4, a3, a5
602+
; CHECK-NEXT: vle64.v v9, (a4)
603+
; CHECK-NEXT: vfadd.vv v8, v8, v9
604+
; CHECK-NEXT: add a4, a1, a5
605+
; CHECK-NEXT: vse64.v v8, (a4)
606+
; CHECK-NEXT: add t1, t1, a6
607+
; CHECK-NEXT: add a5, a5, a7
608+
; CHECK-NEXT: blt t1, a0, .LBB11_2
609+
; CHECK-NEXT: .LBB11_3: # %for.end
610+
; CHECK-NEXT: ret
611+
entry:
612+
%0 = tail call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 0)
613+
%cmp13 = icmp sgt i64 %N, 0
614+
br i1 %cmp13, label %for.body, label %for.end
615+
616+
for.body: ; preds = %entry, %for.body
617+
%i.014 = phi i64 [ %add, %for.body ], [ 0, %entry ]
618+
%arrayidx = getelementptr inbounds double, double* %a, i64 %i.014
619+
%1 = bitcast double* %arrayidx to <vscale x 1 x double>*
620+
%2 = tail call <vscale x 1 x double> @llvm.riscv.vle.nxv1f64.i64(<vscale x 1 x double> undef, <vscale x 1 x double>* %1, i64 %0)
621+
%arrayidx1 = getelementptr inbounds double, double* %b, i64 %i.014
622+
%3 = bitcast double* %arrayidx1 to <vscale x 1 x double>*
623+
%4 = tail call <vscale x 1 x double> @llvm.riscv.vle.nxv1f64.i64(<vscale x 1 x double> undef, <vscale x 1 x double>* %3, i64 %0)
624+
%5 = tail call <vscale x 1 x double> @llvm.riscv.vfadd.nxv1f64.nxv1f64.i64(<vscale x 1 x double> undef, <vscale x 1 x double> %2, <vscale x 1 x double> %4, i64 %0)
625+
%arrayidx2 = getelementptr inbounds double, double* %c, i64 %i.014
626+
%6 = bitcast double* %arrayidx2 to <vscale x 1 x double>*
627+
tail call void @llvm.riscv.vse.nxv1f64.i64(<vscale x 1 x double> %5, <vscale x 1 x double>* %6, i64 %0)
628+
%add = add nuw nsw i64 %i.014, %0
629+
%cmp = icmp slt i64 %add, %N
630+
br i1 %cmp, label %for.body, label %for.end
631+
632+
for.end: ; preds = %for.body, %entry
633+
ret void
634+
}
635+
636+
declare i64 @llvm.riscv.vsetvlimax.i64(i64, i64)
637+
declare <vscale x 1 x double> @llvm.riscv.vle.nxv1f64.i64(<vscale x 1 x double>, <vscale x 1 x double>* nocapture, i64)
638+
declare <vscale x 1 x double> @llvm.riscv.vfadd.nxv1f64.nxv1f64.i64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x double>, i64)
639+
declare void @llvm.riscv.vse.nxv1f64.i64(<vscale x 1 x double>, <vscale x 1 x double>* nocapture, i64)

0 commit comments

Comments
 (0)