diff --git a/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert.ll b/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert.ll @@ -3,6 +3,7 @@ ; RUN: -verify-machineinstrs -O2 < %s | FileCheck %s declare i64 @llvm.riscv.vsetvli(i64, i64, i64) +declare i64 @llvm.riscv.vsetvlimax(i64, i64) declare @llvm.riscv.vfadd.nxv1f64.nxv1f64( , , @@ -143,6 +144,67 @@ br i1 %cmp.not, label %for.cond.cleanup, label %for.body } +define @test7( %a, i64 %b, %mask) nounwind { +; CHECK-LABEL: test7: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; CHECK-NEXT: vsetivli zero, 1, e64, m1, tu, mu +; CHECK-NEXT: vmv.s.x v8, a0 +; CHECK-NEXT: ret +entry: + %x = tail call i64 @llvm.riscv.vsetvlimax(i64 3, i64 0) + %y = call @llvm.riscv.vmv.s.x.nxv1i64( + %a, + i64 %b, i64 1) + + ret %y +} + +define @test8( %a, i64 %b, %mask) nounwind { +; CHECK-LABEL: test8: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: vsetivli a1, 6, e64, m1, ta, mu +; CHECK-NEXT: vsetivli zero, 2, e64, m1, tu, mu +; CHECK-NEXT: vmv.s.x v8, a0 +; CHECK-NEXT: ret +entry: + %x = tail call i64 @llvm.riscv.vsetvli(i64 6, i64 3, i64 0) + %y = call @llvm.riscv.vmv.s.x.nxv1i64( %a, i64 %b, i64 2) + ret %y +} + +define @test9( %a, i64 %b, %mask) nounwind { +; CHECK-LABEL: test9: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: vsetivli zero, 9, e64, m1, tu, mu +; CHECK-NEXT: vadd.vv v8, v8, v8, v0.t +; CHECK-NEXT: vsetivli zero, 2, e64, m1, tu, mu +; CHECK-NEXT: vmv.s.x v8, a0 +; CHECK-NEXT: ret +entry: + %x = call @llvm.riscv.vadd.mask.nxv1i64.nxv1i64( + %a, + %a, + %a, + %mask, + i64 9, + i64 0) + %y = call @llvm.riscv.vmv.s.x.nxv1i64( %x, i64 %b, i64 2) + ret %y +} + +declare @llvm.riscv.vadd.mask.nxv1i64.nxv1i64( + , + , + , + , + i64, + i64); + +declare @llvm.riscv.vmv.s.x.nxv1i64( + , + i64, + i64); declare i64 @llvm.riscv.vsetvli.i64(i64, i64 immarg, i64 immarg) declare @llvm.riscv.vle.nxv2i32.i64(* nocapture, i64) declare @llvm.riscv.vmslt.nxv2i32.i32.i64(, i32, i64)