161c283dbSYeting Kuo; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2*18f0f709SPengcheng Wang; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zvfh -verify-machineinstrs < %s \ 3*18f0f709SPengcheng Wang; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32 4*18f0f709SPengcheng Wang; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zvfh -verify-machineinstrs < %s \ 5*18f0f709SPengcheng Wang; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32 661c283dbSYeting Kuo 761c283dbSYeting Kuodeclare <1 x half> @llvm.masked.expandload.v1f16(ptr, <1 x i1>, <1 x half>) 861c283dbSYeting Kuodefine <1 x half> @expandload_v1f16(ptr %base, <1 x half> %src0, <1 x i1> %mask) { 9*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v1f16: 10*18f0f709SPengcheng Wang; CHECK: # %bb.0: 11*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma 12*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 13*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 14*18f0f709SPengcheng Wang; CHECK-NEXT: vle16.v v9, (a0) 15*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 16*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v10, v0 17*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t 18*18f0f709SPengcheng Wang; CHECK-NEXT: ret 1961c283dbSYeting Kuo %res = call <1 x half> @llvm.masked.expandload.v1f16(ptr align 2 %base, <1 x i1> %mask, <1 x half> %src0) 2061c283dbSYeting Kuo ret <1 x half>%res 2161c283dbSYeting Kuo} 2261c283dbSYeting Kuo 2361c283dbSYeting Kuodeclare <2 x half> @llvm.masked.expandload.v2f16(ptr, <2 x i1>, <2 x half>) 2461c283dbSYeting Kuodefine <2 x half> @expandload_v2f16(ptr %base, <2 x half> %src0, <2 x i1> %mask) { 25*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v2f16: 26*18f0f709SPengcheng Wang; CHECK: # %bb.0: 27*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma 28*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 29*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 30*18f0f709SPengcheng Wang; CHECK-NEXT: vle16.v v9, (a0) 31*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 32*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v10, v0 33*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t 34*18f0f709SPengcheng Wang; CHECK-NEXT: ret 3561c283dbSYeting Kuo %res = call <2 x half> @llvm.masked.expandload.v2f16(ptr align 2 %base, <2 x i1> %mask, <2 x half> %src0) 3661c283dbSYeting Kuo ret <2 x half>%res 3761c283dbSYeting Kuo} 3861c283dbSYeting Kuo 3961c283dbSYeting Kuodeclare <4 x half> @llvm.masked.expandload.v4f16(ptr, <4 x i1>, <4 x half>) 4061c283dbSYeting Kuodefine <4 x half> @expandload_v4f16(ptr %base, <4 x half> %src0, <4 x i1> %mask) { 41*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v4f16: 42*18f0f709SPengcheng Wang; CHECK: # %bb.0: 43*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma 44*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 45*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 46*18f0f709SPengcheng Wang; CHECK-NEXT: vle16.v v9, (a0) 47*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 48*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v10, v0 49*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t 50*18f0f709SPengcheng Wang; CHECK-NEXT: ret 5161c283dbSYeting Kuo %res = call <4 x half> @llvm.masked.expandload.v4f16(ptr align 2 %base, <4 x i1> %mask, <4 x half> %src0) 5261c283dbSYeting Kuo ret <4 x half>%res 5361c283dbSYeting Kuo} 5461c283dbSYeting Kuo 5561c283dbSYeting Kuodeclare <8 x half> @llvm.masked.expandload.v8f16(ptr, <8 x i1>, <8 x half>) 5661c283dbSYeting Kuodefine <8 x half> @expandload_v8f16(ptr %base, <8 x half> %src0, <8 x i1> %mask) { 57*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v8f16: 58*18f0f709SPengcheng Wang; CHECK: # %bb.0: 59*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 60*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 61*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 62*18f0f709SPengcheng Wang; CHECK-NEXT: vle16.v v9, (a0) 63*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 64*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v10, v0 65*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t 66*18f0f709SPengcheng Wang; CHECK-NEXT: ret 6761c283dbSYeting Kuo %res = call <8 x half> @llvm.masked.expandload.v8f16(ptr align 2 %base, <8 x i1> %mask, <8 x half> %src0) 6861c283dbSYeting Kuo ret <8 x half>%res 6961c283dbSYeting Kuo} 7061c283dbSYeting Kuo 7161c283dbSYeting Kuodeclare <1 x float> @llvm.masked.expandload.v1f32(ptr, <1 x i1>, <1 x float>) 7261c283dbSYeting Kuodefine <1 x float> @expandload_v1f32(ptr %base, <1 x float> %src0, <1 x i1> %mask) { 73*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v1f32: 74*18f0f709SPengcheng Wang; CHECK: # %bb.0: 75*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma 76*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 77*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 78*18f0f709SPengcheng Wang; CHECK-NEXT: vle32.v v9, (a0) 79*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 80*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v10, v0 81*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t 82*18f0f709SPengcheng Wang; CHECK-NEXT: ret 8361c283dbSYeting Kuo %res = call <1 x float> @llvm.masked.expandload.v1f32(ptr align 4 %base, <1 x i1> %mask, <1 x float> %src0) 8461c283dbSYeting Kuo ret <1 x float>%res 8561c283dbSYeting Kuo} 8661c283dbSYeting Kuo 8761c283dbSYeting Kuodeclare <2 x float> @llvm.masked.expandload.v2f32(ptr, <2 x i1>, <2 x float>) 8861c283dbSYeting Kuodefine <2 x float> @expandload_v2f32(ptr %base, <2 x float> %src0, <2 x i1> %mask) { 89*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v2f32: 90*18f0f709SPengcheng Wang; CHECK: # %bb.0: 91*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma 92*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 93*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 94*18f0f709SPengcheng Wang; CHECK-NEXT: vle32.v v9, (a0) 95*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 96*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v10, v0 97*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t 98*18f0f709SPengcheng Wang; CHECK-NEXT: ret 9961c283dbSYeting Kuo %res = call <2 x float> @llvm.masked.expandload.v2f32(ptr align 4 %base, <2 x i1> %mask, <2 x float> %src0) 10061c283dbSYeting Kuo ret <2 x float>%res 10161c283dbSYeting Kuo} 10261c283dbSYeting Kuo 10361c283dbSYeting Kuodeclare <4 x float> @llvm.masked.expandload.v4f32(ptr, <4 x i1>, <4 x float>) 10461c283dbSYeting Kuodefine <4 x float> @expandload_v4f32(ptr %base, <4 x float> %src0, <4 x i1> %mask) { 105*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v4f32: 106*18f0f709SPengcheng Wang; CHECK: # %bb.0: 107*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma 108*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 109*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 110*18f0f709SPengcheng Wang; CHECK-NEXT: vle32.v v9, (a0) 111*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 112*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v10, v0 113*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t 114*18f0f709SPengcheng Wang; CHECK-NEXT: ret 11561c283dbSYeting Kuo %res = call <4 x float> @llvm.masked.expandload.v4f32(ptr align 4 %base, <4 x i1> %mask, <4 x float> %src0) 11661c283dbSYeting Kuo ret <4 x float>%res 11761c283dbSYeting Kuo} 11861c283dbSYeting Kuo 11961c283dbSYeting Kuodeclare <8 x float> @llvm.masked.expandload.v8f32(ptr, <8 x i1>, <8 x float>) 12061c283dbSYeting Kuodefine <8 x float> @expandload_v8f32(ptr %base, <8 x float> %src0, <8 x i1> %mask) { 121*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v8f32: 122*18f0f709SPengcheng Wang; CHECK: # %bb.0: 123*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 124*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 125*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 126*18f0f709SPengcheng Wang; CHECK-NEXT: vle32.v v10, (a0) 127*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 128*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v12, v0 129*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v10, v12, v0.t 130*18f0f709SPengcheng Wang; CHECK-NEXT: ret 13161c283dbSYeting Kuo %res = call <8 x float> @llvm.masked.expandload.v8f32(ptr align 4 %base, <8 x i1> %mask, <8 x float> %src0) 13261c283dbSYeting Kuo ret <8 x float>%res 13361c283dbSYeting Kuo} 13461c283dbSYeting Kuo 13561c283dbSYeting Kuodeclare <1 x double> @llvm.masked.expandload.v1f64(ptr, <1 x i1>, <1 x double>) 13661c283dbSYeting Kuodefine <1 x double> @expandload_v1f64(ptr %base, <1 x double> %src0, <1 x i1> %mask) { 137*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v1f64: 138*18f0f709SPengcheng Wang; CHECK: # %bb.0: 139*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma 140*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 141*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 142*18f0f709SPengcheng Wang; CHECK-NEXT: vle64.v v9, (a0) 143*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 144*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v10, v0 145*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t 146*18f0f709SPengcheng Wang; CHECK-NEXT: ret 14761c283dbSYeting Kuo %res = call <1 x double> @llvm.masked.expandload.v1f64(ptr align 8 %base, <1 x i1> %mask, <1 x double> %src0) 14861c283dbSYeting Kuo ret <1 x double>%res 14961c283dbSYeting Kuo} 15061c283dbSYeting Kuo 15161c283dbSYeting Kuodeclare <2 x double> @llvm.masked.expandload.v2f64(ptr, <2 x i1>, <2 x double>) 15261c283dbSYeting Kuodefine <2 x double> @expandload_v2f64(ptr %base, <2 x double> %src0, <2 x i1> %mask) { 153*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v2f64: 154*18f0f709SPengcheng Wang; CHECK: # %bb.0: 155*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma 156*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 157*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 158*18f0f709SPengcheng Wang; CHECK-NEXT: vle64.v v9, (a0) 159*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 160*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v10, v0 161*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t 162*18f0f709SPengcheng Wang; CHECK-NEXT: ret 16361c283dbSYeting Kuo %res = call <2 x double> @llvm.masked.expandload.v2f64(ptr align 8 %base, <2 x i1> %mask, <2 x double> %src0) 16461c283dbSYeting Kuo ret <2 x double>%res 16561c283dbSYeting Kuo} 16661c283dbSYeting Kuo 16761c283dbSYeting Kuodeclare <4 x double> @llvm.masked.expandload.v4f64(ptr, <4 x i1>, <4 x double>) 16861c283dbSYeting Kuodefine <4 x double> @expandload_v4f64(ptr %base, <4 x double> %src0, <4 x i1> %mask) { 169*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v4f64: 170*18f0f709SPengcheng Wang; CHECK: # %bb.0: 171*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma 172*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 173*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma 174*18f0f709SPengcheng Wang; CHECK-NEXT: vle64.v v10, (a0) 175*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 176*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v12, v0 177*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v10, v12, v0.t 178*18f0f709SPengcheng Wang; CHECK-NEXT: ret 17961c283dbSYeting Kuo %res = call <4 x double> @llvm.masked.expandload.v4f64(ptr align 8 %base, <4 x i1> %mask, <4 x double> %src0) 18061c283dbSYeting Kuo ret <4 x double>%res 18161c283dbSYeting Kuo} 18261c283dbSYeting Kuo 18361c283dbSYeting Kuodeclare <8 x double> @llvm.masked.expandload.v8f64(ptr, <8 x i1>, <8 x double>) 18461c283dbSYeting Kuodefine <8 x double> @expandload_v8f64(ptr %base, <8 x double> %src0, <8 x i1> %mask) { 185*18f0f709SPengcheng Wang; CHECK-LABEL: expandload_v8f64: 186*18f0f709SPengcheng Wang; CHECK: # %bb.0: 187*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 188*18f0f709SPengcheng Wang; CHECK-NEXT: vcpop.m a1, v0 189*18f0f709SPengcheng Wang; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, ma 190*18f0f709SPengcheng Wang; CHECK-NEXT: vle64.v v12, (a0) 191*18f0f709SPengcheng Wang; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 192*18f0f709SPengcheng Wang; CHECK-NEXT: viota.m v16, v0 193*18f0f709SPengcheng Wang; CHECK-NEXT: vrgather.vv v8, v12, v16, v0.t 194*18f0f709SPengcheng Wang; CHECK-NEXT: ret 19561c283dbSYeting Kuo %res = call <8 x double> @llvm.masked.expandload.v8f64(ptr align 8 %base, <8 x i1> %mask, <8 x double> %src0) 19661c283dbSYeting Kuo ret <8 x double>%res 19761c283dbSYeting Kuo} 198*18f0f709SPengcheng Wang;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 199*18f0f709SPengcheng Wang; CHECK-RV32: {{.*}} 200