185e42db1SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 285e42db1SCraig Topper; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v \ 385e42db1SCraig Topper; RUN: -verify-machineinstrs | FileCheck %s 485e42db1SCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v \ 585e42db1SCraig Topper; RUN: -verify-machineinstrs | FileCheck %s 685e42db1SCraig Topperdeclare <vscale x 1 x i1> @llvm.riscv.vmsof.nxv1i1( 785e42db1SCraig Topper <vscale x 1 x i1>, 885e42db1SCraig Topper iXLen); 985e42db1SCraig Topper 1085e42db1SCraig Topperdefine <vscale x 1 x i1> @intrinsic_vmsof_m_nxv1i1(<vscale x 1 x i1> %0, iXLen %1) nounwind { 1185e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_m_nxv1i1: 1285e42db1SCraig Topper; CHECK: # %bb.0: # %entry 1385e42db1SCraig Topper; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu 1485e42db1SCraig Topper; CHECK-NEXT: vmsof.m v8, v0 1585e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v8 1685e42db1SCraig Topper; CHECK-NEXT: ret 1785e42db1SCraig Topperentry: 1885e42db1SCraig Topper %a = call <vscale x 1 x i1> @llvm.riscv.vmsof.nxv1i1( 1985e42db1SCraig Topper <vscale x 1 x i1> %0, 2085e42db1SCraig Topper iXLen %1) 2185e42db1SCraig Topper ret <vscale x 1 x i1> %a 2285e42db1SCraig Topper} 2385e42db1SCraig Topper 2485e42db1SCraig Topperdeclare <vscale x 1 x i1> @llvm.riscv.vmsof.mask.nxv1i1( 2585e42db1SCraig Topper <vscale x 1 x i1>, 2685e42db1SCraig Topper <vscale x 1 x i1>, 2785e42db1SCraig Topper <vscale x 1 x i1>, 28*10b2760dSZakk Chen iXLen); 2985e42db1SCraig Topper 3085e42db1SCraig Topperdefine <vscale x 1 x i1> @intrinsic_vmsof_mask_m_nxv1i1_nxv1i1(<vscale x 1 x i1> %0, <vscale x 1 x i1> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind { 3185e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_mask_m_nxv1i1_nxv1i1: 3285e42db1SCraig Topper; CHECK: # %bb.0: # %entry 3385e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v10, v0 34*10b2760dSZakk Chen; CHECK-NEXT: vsetvli zero, a0, e8, mf8, tu, mu 3585e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v9 3685e42db1SCraig Topper; CHECK-NEXT: vmsof.m v10, v8, v0.t 3785e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v10 3885e42db1SCraig Topper; CHECK-NEXT: ret 3985e42db1SCraig Topperentry: 4085e42db1SCraig Topper %a = call <vscale x 1 x i1> @llvm.riscv.vmsof.mask.nxv1i1( 4185e42db1SCraig Topper <vscale x 1 x i1> %0, 4285e42db1SCraig Topper <vscale x 1 x i1> %1, 4385e42db1SCraig Topper <vscale x 1 x i1> %2, 44*10b2760dSZakk Chen iXLen %3) 4585e42db1SCraig Topper ret <vscale x 1 x i1> %a 4685e42db1SCraig Topper} 4785e42db1SCraig Topper 4885e42db1SCraig Topperdeclare <vscale x 2 x i1> @llvm.riscv.vmsof.nxv2i1( 4985e42db1SCraig Topper <vscale x 2 x i1>, 5085e42db1SCraig Topper iXLen); 5185e42db1SCraig Topper 5285e42db1SCraig Topperdefine <vscale x 2 x i1> @intrinsic_vmsof_m_nxv2i1(<vscale x 2 x i1> %0, iXLen %1) nounwind { 5385e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_m_nxv2i1: 5485e42db1SCraig Topper; CHECK: # %bb.0: # %entry 5585e42db1SCraig Topper; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu 5685e42db1SCraig Topper; CHECK-NEXT: vmsof.m v8, v0 5785e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v8 5885e42db1SCraig Topper; CHECK-NEXT: ret 5985e42db1SCraig Topperentry: 6085e42db1SCraig Topper %a = call <vscale x 2 x i1> @llvm.riscv.vmsof.nxv2i1( 6185e42db1SCraig Topper <vscale x 2 x i1> %0, 6285e42db1SCraig Topper iXLen %1) 6385e42db1SCraig Topper ret <vscale x 2 x i1> %a 6485e42db1SCraig Topper} 6585e42db1SCraig Topper 6685e42db1SCraig Topperdeclare <vscale x 2 x i1> @llvm.riscv.vmsof.mask.nxv2i1( 6785e42db1SCraig Topper <vscale x 2 x i1>, 6885e42db1SCraig Topper <vscale x 2 x i1>, 6985e42db1SCraig Topper <vscale x 2 x i1>, 70*10b2760dSZakk Chen iXLen); 7185e42db1SCraig Topper 7285e42db1SCraig Topperdefine <vscale x 2 x i1> @intrinsic_vmsof_mask_m_nxv2i1_nxv2i1(<vscale x 2 x i1> %0, <vscale x 2 x i1> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind { 7385e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_mask_m_nxv2i1_nxv2i1: 7485e42db1SCraig Topper; CHECK: # %bb.0: # %entry 7585e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v10, v0 76*10b2760dSZakk Chen; CHECK-NEXT: vsetvli zero, a0, e8, mf4, tu, mu 7785e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v9 7885e42db1SCraig Topper; CHECK-NEXT: vmsof.m v10, v8, v0.t 7985e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v10 8085e42db1SCraig Topper; CHECK-NEXT: ret 8185e42db1SCraig Topperentry: 8285e42db1SCraig Topper %a = call <vscale x 2 x i1> @llvm.riscv.vmsof.mask.nxv2i1( 8385e42db1SCraig Topper <vscale x 2 x i1> %0, 8485e42db1SCraig Topper <vscale x 2 x i1> %1, 8585e42db1SCraig Topper <vscale x 2 x i1> %2, 86*10b2760dSZakk Chen iXLen %3) 8785e42db1SCraig Topper ret <vscale x 2 x i1> %a 8885e42db1SCraig Topper} 8985e42db1SCraig Topper 9085e42db1SCraig Topperdeclare <vscale x 4 x i1> @llvm.riscv.vmsof.nxv4i1( 9185e42db1SCraig Topper <vscale x 4 x i1>, 9285e42db1SCraig Topper iXLen); 9385e42db1SCraig Topper 9485e42db1SCraig Topperdefine <vscale x 4 x i1> @intrinsic_vmsof_m_nxv4i1(<vscale x 4 x i1> %0, iXLen %1) nounwind { 9585e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_m_nxv4i1: 9685e42db1SCraig Topper; CHECK: # %bb.0: # %entry 9785e42db1SCraig Topper; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu 9885e42db1SCraig Topper; CHECK-NEXT: vmsof.m v8, v0 9985e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v8 10085e42db1SCraig Topper; CHECK-NEXT: ret 10185e42db1SCraig Topperentry: 10285e42db1SCraig Topper %a = call <vscale x 4 x i1> @llvm.riscv.vmsof.nxv4i1( 10385e42db1SCraig Topper <vscale x 4 x i1> %0, 10485e42db1SCraig Topper iXLen %1) 10585e42db1SCraig Topper ret <vscale x 4 x i1> %a 10685e42db1SCraig Topper} 10785e42db1SCraig Topper 10885e42db1SCraig Topperdeclare <vscale x 4 x i1> @llvm.riscv.vmsof.mask.nxv4i1( 10985e42db1SCraig Topper <vscale x 4 x i1>, 11085e42db1SCraig Topper <vscale x 4 x i1>, 11185e42db1SCraig Topper <vscale x 4 x i1>, 112*10b2760dSZakk Chen iXLen); 11385e42db1SCraig Topper 11485e42db1SCraig Topperdefine <vscale x 4 x i1> @intrinsic_vmsof_mask_m_nxv4i1_nxv4i1(<vscale x 4 x i1> %0, <vscale x 4 x i1> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind { 11585e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_mask_m_nxv4i1_nxv4i1: 11685e42db1SCraig Topper; CHECK: # %bb.0: # %entry 11785e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v10, v0 118*10b2760dSZakk Chen; CHECK-NEXT: vsetvli zero, a0, e8, mf2, tu, mu 11985e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v9 12085e42db1SCraig Topper; CHECK-NEXT: vmsof.m v10, v8, v0.t 12185e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v10 12285e42db1SCraig Topper; CHECK-NEXT: ret 12385e42db1SCraig Topperentry: 12485e42db1SCraig Topper %a = call <vscale x 4 x i1> @llvm.riscv.vmsof.mask.nxv4i1( 12585e42db1SCraig Topper <vscale x 4 x i1> %0, 12685e42db1SCraig Topper <vscale x 4 x i1> %1, 12785e42db1SCraig Topper <vscale x 4 x i1> %2, 128*10b2760dSZakk Chen iXLen %3) 12985e42db1SCraig Topper ret <vscale x 4 x i1> %a 13085e42db1SCraig Topper} 13185e42db1SCraig Topper 13285e42db1SCraig Topperdeclare <vscale x 8 x i1> @llvm.riscv.vmsof.nxv8i1( 13385e42db1SCraig Topper <vscale x 8 x i1>, 13485e42db1SCraig Topper iXLen); 13585e42db1SCraig Topper 13685e42db1SCraig Topperdefine <vscale x 8 x i1> @intrinsic_vmsof_m_nxv8i1(<vscale x 8 x i1> %0, iXLen %1) nounwind { 13785e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_m_nxv8i1: 13885e42db1SCraig Topper; CHECK: # %bb.0: # %entry 13985e42db1SCraig Topper; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu 14085e42db1SCraig Topper; CHECK-NEXT: vmsof.m v8, v0 14185e42db1SCraig Topper; CHECK-NEXT: vmv.v.v v0, v8 14285e42db1SCraig Topper; CHECK-NEXT: ret 14385e42db1SCraig Topperentry: 14485e42db1SCraig Topper %a = call <vscale x 8 x i1> @llvm.riscv.vmsof.nxv8i1( 14585e42db1SCraig Topper <vscale x 8 x i1> %0, 14685e42db1SCraig Topper iXLen %1) 14785e42db1SCraig Topper ret <vscale x 8 x i1> %a 14885e42db1SCraig Topper} 14985e42db1SCraig Topper 15085e42db1SCraig Topperdeclare <vscale x 8 x i1> @llvm.riscv.vmsof.mask.nxv8i1( 15185e42db1SCraig Topper <vscale x 8 x i1>, 15285e42db1SCraig Topper <vscale x 8 x i1>, 15385e42db1SCraig Topper <vscale x 8 x i1>, 154*10b2760dSZakk Chen iXLen); 15585e42db1SCraig Topper 15685e42db1SCraig Topperdefine <vscale x 8 x i1> @intrinsic_vmsof_mask_m_nxv8i1_nxv8i1(<vscale x 8 x i1> %0, <vscale x 8 x i1> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind { 15785e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_mask_m_nxv8i1_nxv8i1: 15885e42db1SCraig Topper; CHECK: # %bb.0: # %entry 15985e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v10, v0 160*10b2760dSZakk Chen; CHECK-NEXT: vsetvli zero, a0, e8, m1, tu, mu 16185e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v9 16285e42db1SCraig Topper; CHECK-NEXT: vmsof.m v10, v8, v0.t 163*10b2760dSZakk Chen; CHECK-NEXT: vmv1r.v v0, v10 16485e42db1SCraig Topper; CHECK-NEXT: ret 16585e42db1SCraig Topperentry: 16685e42db1SCraig Topper %a = call <vscale x 8 x i1> @llvm.riscv.vmsof.mask.nxv8i1( 16785e42db1SCraig Topper <vscale x 8 x i1> %0, 16885e42db1SCraig Topper <vscale x 8 x i1> %1, 16985e42db1SCraig Topper <vscale x 8 x i1> %2, 170*10b2760dSZakk Chen iXLen %3) 17185e42db1SCraig Topper ret <vscale x 8 x i1> %a 17285e42db1SCraig Topper} 17385e42db1SCraig Topper 17485e42db1SCraig Topperdeclare <vscale x 16 x i1> @llvm.riscv.vmsof.nxv16i1( 17585e42db1SCraig Topper <vscale x 16 x i1>, 17685e42db1SCraig Topper iXLen); 17785e42db1SCraig Topper 17885e42db1SCraig Topperdefine <vscale x 16 x i1> @intrinsic_vmsof_m_nxv16i1(<vscale x 16 x i1> %0, iXLen %1) nounwind { 17985e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_m_nxv16i1: 18085e42db1SCraig Topper; CHECK: # %bb.0: # %entry 18185e42db1SCraig Topper; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu 18285e42db1SCraig Topper; CHECK-NEXT: vmsof.m v8, v0 18385e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v8 18485e42db1SCraig Topper; CHECK-NEXT: ret 18585e42db1SCraig Topperentry: 18685e42db1SCraig Topper %a = call <vscale x 16 x i1> @llvm.riscv.vmsof.nxv16i1( 18785e42db1SCraig Topper <vscale x 16 x i1> %0, 18885e42db1SCraig Topper iXLen %1) 18985e42db1SCraig Topper ret <vscale x 16 x i1> %a 19085e42db1SCraig Topper} 19185e42db1SCraig Topper 19285e42db1SCraig Topperdeclare <vscale x 16 x i1> @llvm.riscv.vmsof.mask.nxv16i1( 19385e42db1SCraig Topper <vscale x 16 x i1>, 19485e42db1SCraig Topper <vscale x 16 x i1>, 19585e42db1SCraig Topper <vscale x 16 x i1>, 196*10b2760dSZakk Chen iXLen); 19785e42db1SCraig Topper 19885e42db1SCraig Topperdefine <vscale x 16 x i1> @intrinsic_vmsof_mask_m_nxv16i1_nxv16i1(<vscale x 16 x i1> %0, <vscale x 16 x i1> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind { 19985e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_mask_m_nxv16i1_nxv16i1: 20085e42db1SCraig Topper; CHECK: # %bb.0: # %entry 20185e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v10, v0 202*10b2760dSZakk Chen; CHECK-NEXT: vsetvli zero, a0, e8, m2, tu, mu 20385e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v9 20485e42db1SCraig Topper; CHECK-NEXT: vmsof.m v10, v8, v0.t 20585e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v10 20685e42db1SCraig Topper; CHECK-NEXT: ret 20785e42db1SCraig Topperentry: 20885e42db1SCraig Topper %a = call <vscale x 16 x i1> @llvm.riscv.vmsof.mask.nxv16i1( 20985e42db1SCraig Topper <vscale x 16 x i1> %0, 21085e42db1SCraig Topper <vscale x 16 x i1> %1, 21185e42db1SCraig Topper <vscale x 16 x i1> %2, 212*10b2760dSZakk Chen iXLen %3) 21385e42db1SCraig Topper ret <vscale x 16 x i1> %a 21485e42db1SCraig Topper} 21585e42db1SCraig Topper 21685e42db1SCraig Topperdeclare <vscale x 32 x i1> @llvm.riscv.vmsof.nxv32i1( 21785e42db1SCraig Topper <vscale x 32 x i1>, 21885e42db1SCraig Topper iXLen); 21985e42db1SCraig Topper 22085e42db1SCraig Topperdefine <vscale x 32 x i1> @intrinsic_vmsof_m_nxv32i1(<vscale x 32 x i1> %0, iXLen %1) nounwind { 22185e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_m_nxv32i1: 22285e42db1SCraig Topper; CHECK: # %bb.0: # %entry 22385e42db1SCraig Topper; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu 22485e42db1SCraig Topper; CHECK-NEXT: vmsof.m v8, v0 22585e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v8 22685e42db1SCraig Topper; CHECK-NEXT: ret 22785e42db1SCraig Topperentry: 22885e42db1SCraig Topper %a = call <vscale x 32 x i1> @llvm.riscv.vmsof.nxv32i1( 22985e42db1SCraig Topper <vscale x 32 x i1> %0, 23085e42db1SCraig Topper iXLen %1) 23185e42db1SCraig Topper ret <vscale x 32 x i1> %a 23285e42db1SCraig Topper} 23385e42db1SCraig Topper 23485e42db1SCraig Topperdeclare <vscale x 32 x i1> @llvm.riscv.vmsof.mask.nxv32i1( 23585e42db1SCraig Topper <vscale x 32 x i1>, 23685e42db1SCraig Topper <vscale x 32 x i1>, 23785e42db1SCraig Topper <vscale x 32 x i1>, 238*10b2760dSZakk Chen iXLen); 23985e42db1SCraig Topper 24085e42db1SCraig Topperdefine <vscale x 32 x i1> @intrinsic_vmsof_mask_m_nxv32i1_nxv32i1(<vscale x 32 x i1> %0, <vscale x 32 x i1> %1, <vscale x 32 x i1> %2, iXLen %3) nounwind { 24185e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_mask_m_nxv32i1_nxv32i1: 24285e42db1SCraig Topper; CHECK: # %bb.0: # %entry 24385e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v10, v0 244*10b2760dSZakk Chen; CHECK-NEXT: vsetvli zero, a0, e8, m4, tu, mu 24585e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v9 24685e42db1SCraig Topper; CHECK-NEXT: vmsof.m v10, v8, v0.t 24785e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v10 24885e42db1SCraig Topper; CHECK-NEXT: ret 24985e42db1SCraig Topperentry: 25085e42db1SCraig Topper %a = call <vscale x 32 x i1> @llvm.riscv.vmsof.mask.nxv32i1( 25185e42db1SCraig Topper <vscale x 32 x i1> %0, 25285e42db1SCraig Topper <vscale x 32 x i1> %1, 25385e42db1SCraig Topper <vscale x 32 x i1> %2, 254*10b2760dSZakk Chen iXLen %3) 25585e42db1SCraig Topper ret <vscale x 32 x i1> %a 25685e42db1SCraig Topper} 25785e42db1SCraig Topper 25885e42db1SCraig Topperdeclare <vscale x 64 x i1> @llvm.riscv.vmsof.nxv64i1( 25985e42db1SCraig Topper <vscale x 64 x i1>, 26085e42db1SCraig Topper iXLen); 26185e42db1SCraig Topper 26285e42db1SCraig Topperdefine <vscale x 64 x i1> @intrinsic_vmsof_m_nxv64i1(<vscale x 64 x i1> %0, iXLen %1) nounwind { 26385e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_m_nxv64i1: 26485e42db1SCraig Topper; CHECK: # %bb.0: # %entry 26585e42db1SCraig Topper; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, mu 26685e42db1SCraig Topper; CHECK-NEXT: vmsof.m v8, v0 26785e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v8 26885e42db1SCraig Topper; CHECK-NEXT: ret 26985e42db1SCraig Topperentry: 27085e42db1SCraig Topper %a = call <vscale x 64 x i1> @llvm.riscv.vmsof.nxv64i1( 27185e42db1SCraig Topper <vscale x 64 x i1> %0, 27285e42db1SCraig Topper iXLen %1) 27385e42db1SCraig Topper ret <vscale x 64 x i1> %a 27485e42db1SCraig Topper} 27585e42db1SCraig Topper 27685e42db1SCraig Topperdeclare <vscale x 64 x i1> @llvm.riscv.vmsof.mask.nxv64i1( 27785e42db1SCraig Topper <vscale x 64 x i1>, 27885e42db1SCraig Topper <vscale x 64 x i1>, 27985e42db1SCraig Topper <vscale x 64 x i1>, 280*10b2760dSZakk Chen iXLen); 28185e42db1SCraig Topper 28285e42db1SCraig Topperdefine <vscale x 64 x i1> @intrinsic_vmsof_mask_m_nxv64i1_nxv64i1(<vscale x 64 x i1> %0, <vscale x 64 x i1> %1, <vscale x 64 x i1> %2, iXLen %3) nounwind { 28385e42db1SCraig Topper; CHECK-LABEL: intrinsic_vmsof_mask_m_nxv64i1_nxv64i1: 28485e42db1SCraig Topper; CHECK: # %bb.0: # %entry 28585e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v10, v0 286*10b2760dSZakk Chen; CHECK-NEXT: vsetvli zero, a0, e8, m8, tu, mu 28785e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v9 28885e42db1SCraig Topper; CHECK-NEXT: vmsof.m v10, v8, v0.t 28985e42db1SCraig Topper; CHECK-NEXT: vmv1r.v v0, v10 29085e42db1SCraig Topper; CHECK-NEXT: ret 29185e42db1SCraig Topperentry: 29285e42db1SCraig Topper %a = call <vscale x 64 x i1> @llvm.riscv.vmsof.mask.nxv64i1( 29385e42db1SCraig Topper <vscale x 64 x i1> %0, 29485e42db1SCraig Topper <vscale x 64 x i1> %1, 29585e42db1SCraig Topper <vscale x 64 x i1> %2, 296*10b2760dSZakk Chen iXLen %3) 29785e42db1SCraig Topper ret <vscale x 64 x i1> %a 29885e42db1SCraig Topper} 299