1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+v < %s | FileCheck %s 3; RUN: llc -mtriple=riscv64 -mattr=+v < %s | FileCheck %s 4 5declare <vscale x 2 x i16> @llvm.vp.zext.nxv2i16.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, i32) 6 7define <vscale x 2 x i16> @vzext_nxv2i1_nxv2i16(<vscale x 2 x i1> %a, <vscale x 2 x i1> %m, i32 zeroext %vl) { 8; CHECK-LABEL: vzext_nxv2i1_nxv2i16: 9; CHECK: # %bb.0: 10; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 11; CHECK-NEXT: vmv.v.i v8, 0 12; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 13; CHECK-NEXT: ret 14 %v = call <vscale x 2 x i16> @llvm.vp.zext.nxv2i16.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> %m, i32 %vl) 15 ret <vscale x 2 x i16> %v 16} 17 18define <vscale x 2 x i16> @vzext_nxv2i1_nxv2i16_unmasked(<vscale x 2 x i1> %a, i32 zeroext %vl) { 19; CHECK-LABEL: vzext_nxv2i1_nxv2i16_unmasked: 20; CHECK: # %bb.0: 21; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 22; CHECK-NEXT: vmv.v.i v8, 0 23; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 24; CHECK-NEXT: ret 25 %v = call <vscale x 2 x i16> @llvm.vp.zext.nxv2i16.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> splat (i1 true), i32 %vl) 26 ret <vscale x 2 x i16> %v 27} 28 29declare <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, i32) 30 31define <vscale x 2 x i32> @vzext_nxv2i1_nxv2i32(<vscale x 2 x i1> %a, <vscale x 2 x i1> %m, i32 zeroext %vl) { 32; CHECK-LABEL: vzext_nxv2i1_nxv2i32: 33; CHECK: # %bb.0: 34; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 35; CHECK-NEXT: vmv.v.i v8, 0 36; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 37; CHECK-NEXT: ret 38 %v = call <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> %m, i32 %vl) 39 ret <vscale x 2 x i32> %v 40} 41 42define <vscale x 2 x i32> @vzext_nxv2i1_nxv2i32_unmasked(<vscale x 2 x i1> %a, i32 zeroext %vl) { 43; CHECK-LABEL: vzext_nxv2i1_nxv2i32_unmasked: 44; CHECK: # %bb.0: 45; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 46; CHECK-NEXT: vmv.v.i v8, 0 47; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 48; CHECK-NEXT: ret 49 %v = call <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> splat (i1 true), i32 %vl) 50 ret <vscale x 2 x i32> %v 51} 52 53declare <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, i32) 54 55define <vscale x 2 x i64> @vzext_nxv2i1_nxv2i64(<vscale x 2 x i1> %a, <vscale x 2 x i1> %m, i32 zeroext %vl) { 56; CHECK-LABEL: vzext_nxv2i1_nxv2i64: 57; CHECK: # %bb.0: 58; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 59; CHECK-NEXT: vmv.v.i v8, 0 60; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 61; CHECK-NEXT: ret 62 %v = call <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> %m, i32 %vl) 63 ret <vscale x 2 x i64> %v 64} 65 66define <vscale x 2 x i64> @vzext_nxv2i1_nxv2i64_unmasked(<vscale x 2 x i1> %a, i32 zeroext %vl) { 67; CHECK-LABEL: vzext_nxv2i1_nxv2i64_unmasked: 68; CHECK: # %bb.0: 69; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 70; CHECK-NEXT: vmv.v.i v8, 0 71; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 72; CHECK-NEXT: ret 73 %v = call <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> splat (i1 true), i32 %vl) 74 ret <vscale x 2 x i64> %v 75} 76