xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-expandload-fp.ll (revision 18f0f709345cc7e611c4f944832edb71284caacb)
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