Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vzext-vp.ll
blob3b5541c1a2440c585f88f76375e801d65ddf0408
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
5 declare <vscale x 2 x i16> @llvm.vp.zext.nxv2i16.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
7 define <vscale x 2 x i16> @vzext_nxv2i8_nxv2i16(<vscale x 2 x i8> %a, <vscale x 2 x i1> %m, i32 zeroext %vl) {
8 ; CHECK-LABEL: vzext_nxv2i8_nxv2i16:
9 ; CHECK:       # %bb.0:
10 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
11 ; CHECK-NEXT:    vzext.vf2 v9, v8, v0.t
12 ; CHECK-NEXT:    vmv1r.v v8, v9
13 ; CHECK-NEXT:    ret
14   %v = call <vscale x 2 x i16> @llvm.vp.zext.nxv2i16.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i1> %m, i32 %vl)
15   ret <vscale x 2 x i16> %v
18 define <vscale x 2 x i16> @vzext_nxv2i8_nxv2i16_unmasked(<vscale x 2 x i8> %a, i32 zeroext %vl) {
19 ; CHECK-LABEL: vzext_nxv2i8_nxv2i16_unmasked:
20 ; CHECK:       # %bb.0:
21 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
22 ; CHECK-NEXT:    vzext.vf2 v9, v8
23 ; CHECK-NEXT:    vmv1r.v v8, v9
24 ; CHECK-NEXT:    ret
25   %v = call <vscale x 2 x i16> @llvm.vp.zext.nxv2i16.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i1> splat (i1 true), i32 %vl)
26   ret <vscale x 2 x i16> %v
29 declare <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
31 define <vscale x 2 x i32> @vzext_nxv2i8_nxv2i32(<vscale x 2 x i8> %a, <vscale x 2 x i1> %m, i32 zeroext %vl) {
32 ; CHECK-LABEL: vzext_nxv2i8_nxv2i32:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
35 ; CHECK-NEXT:    vzext.vf4 v9, v8, v0.t
36 ; CHECK-NEXT:    vmv.v.v v8, v9
37 ; CHECK-NEXT:    ret
38   %v = call <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i1> %m, i32 %vl)
39   ret <vscale x 2 x i32> %v
42 define <vscale x 2 x i32> @vzext_nxv2i8_nxv2i32_unmasked(<vscale x 2 x i8> %a, i32 zeroext %vl) {
43 ; CHECK-LABEL: vzext_nxv2i8_nxv2i32_unmasked:
44 ; CHECK:       # %bb.0:
45 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
46 ; CHECK-NEXT:    vzext.vf4 v9, v8
47 ; CHECK-NEXT:    vmv.v.v v8, v9
48 ; CHECK-NEXT:    ret
49   %v = call <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i1> splat (i1 true), i32 %vl)
50   ret <vscale x 2 x i32> %v
53 declare <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
55 define <vscale x 2 x i64> @vzext_nxv2i8_nxv2i64(<vscale x 2 x i8> %a, <vscale x 2 x i1> %m, i32 zeroext %vl) {
56 ; CHECK-LABEL: vzext_nxv2i8_nxv2i64:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
59 ; CHECK-NEXT:    vzext.vf8 v10, v8, v0.t
60 ; CHECK-NEXT:    vmv.v.v v8, v10
61 ; CHECK-NEXT:    ret
62   %v = call <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i1> %m, i32 %vl)
63   ret <vscale x 2 x i64> %v
66 define <vscale x 2 x i64> @vzext_nxv2i8_nxv2i64_unmasked(<vscale x 2 x i8> %a, i32 zeroext %vl) {
67 ; CHECK-LABEL: vzext_nxv2i8_nxv2i64_unmasked:
68 ; CHECK:       # %bb.0:
69 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
70 ; CHECK-NEXT:    vzext.vf8 v10, v8
71 ; CHECK-NEXT:    vmv.v.v v8, v10
72 ; CHECK-NEXT:    ret
73   %v = call <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i1> splat (i1 true), i32 %vl)
74   ret <vscale x 2 x i64> %v
77 declare <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
79 define <vscale x 2 x i32> @vzext_nxv2i16_nxv2i32(<vscale x 2 x i16> %a, <vscale x 2 x i1> %m, i32 zeroext %vl) {
80 ; CHECK-LABEL: vzext_nxv2i16_nxv2i32:
81 ; CHECK:       # %bb.0:
82 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
83 ; CHECK-NEXT:    vzext.vf2 v9, v8, v0.t
84 ; CHECK-NEXT:    vmv.v.v v8, v9
85 ; CHECK-NEXT:    ret
86   %v = call <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i1> %m, i32 %vl)
87   ret <vscale x 2 x i32> %v
90 define <vscale x 2 x i32> @vzext_nxv2i16_nxv2i32_unmasked(<vscale x 2 x i16> %a, i32 zeroext %vl) {
91 ; CHECK-LABEL: vzext_nxv2i16_nxv2i32_unmasked:
92 ; CHECK:       # %bb.0:
93 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
94 ; CHECK-NEXT:    vzext.vf2 v9, v8
95 ; CHECK-NEXT:    vmv.v.v v8, v9
96 ; CHECK-NEXT:    ret
97   %v = call <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i1> splat (i1 true), i32 %vl)
98   ret <vscale x 2 x i32> %v
101 declare <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
103 define <vscale x 2 x i64> @vzext_nxv2i16_nxv2i64(<vscale x 2 x i16> %a, <vscale x 2 x i1> %m, i32 zeroext %vl) {
104 ; CHECK-LABEL: vzext_nxv2i16_nxv2i64:
105 ; CHECK:       # %bb.0:
106 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
107 ; CHECK-NEXT:    vzext.vf4 v10, v8, v0.t
108 ; CHECK-NEXT:    vmv.v.v v8, v10
109 ; CHECK-NEXT:    ret
110   %v = call <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i1> %m, i32 %vl)
111   ret <vscale x 2 x i64> %v
114 define <vscale x 2 x i64> @vzext_nxv2i16_nxv2i64_unmasked(<vscale x 2 x i16> %a, i32 zeroext %vl) {
115 ; CHECK-LABEL: vzext_nxv2i16_nxv2i64_unmasked:
116 ; CHECK:       # %bb.0:
117 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
118 ; CHECK-NEXT:    vzext.vf4 v10, v8
119 ; CHECK-NEXT:    vmv.v.v v8, v10
120 ; CHECK-NEXT:    ret
121   %v = call <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i1> splat (i1 true), i32 %vl)
122   ret <vscale x 2 x i64> %v
125 declare <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
127 define <vscale x 2 x i64> @vzext_nxv2i32_nxv2i64(<vscale x 2 x i32> %a, <vscale x 2 x i1> %m, i32 zeroext %vl) {
128 ; CHECK-LABEL: vzext_nxv2i32_nxv2i64:
129 ; CHECK:       # %bb.0:
130 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
131 ; CHECK-NEXT:    vzext.vf2 v10, v8, v0.t
132 ; CHECK-NEXT:    vmv.v.v v8, v10
133 ; CHECK-NEXT:    ret
134   %v = call <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i1> %m, i32 %vl)
135   ret <vscale x 2 x i64> %v
138 define <vscale x 2 x i64> @vzext_nxv2i32_nxv2i64_unmasked(<vscale x 2 x i32> %a, i32 zeroext %vl) {
139 ; CHECK-LABEL: vzext_nxv2i32_nxv2i64_unmasked:
140 ; CHECK:       # %bb.0:
141 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
142 ; CHECK-NEXT:    vzext.vf2 v10, v8
143 ; CHECK-NEXT:    vmv.v.v v8, v10
144 ; CHECK-NEXT:    ret
145   %v = call <vscale x 2 x i64> @llvm.vp.zext.nxv2i64.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 true), i32 %vl)
146   ret <vscale x 2 x i64> %v
149 declare <vscale x 32 x i32> @llvm.vp.zext.nxv32i32.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i1>, i32)
151 define <vscale x 32 x i32> @vzext_nxv32i8_nxv32i32(<vscale x 32 x i8> %a, <vscale x 32 x i1> %m, i32 zeroext %vl) {
152 ; CHECK-LABEL: vzext_nxv32i8_nxv32i32:
153 ; CHECK:       # %bb.0:
154 ; CHECK-NEXT:    vmv1r.v v12, v0
155 ; CHECK-NEXT:    csrr a1, vlenb
156 ; CHECK-NEXT:    srli a2, a1, 2
157 ; CHECK-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
158 ; CHECK-NEXT:    vslidedown.vx v0, v0, a2
159 ; CHECK-NEXT:    slli a1, a1, 1
160 ; CHECK-NEXT:    sub a2, a0, a1
161 ; CHECK-NEXT:    sltu a3, a0, a2
162 ; CHECK-NEXT:    addi a3, a3, -1
163 ; CHECK-NEXT:    and a2, a3, a2
164 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
165 ; CHECK-NEXT:    vzext.vf4 v16, v10, v0.t
166 ; CHECK-NEXT:    bltu a0, a1, .LBB12_2
167 ; CHECK-NEXT:  # %bb.1:
168 ; CHECK-NEXT:    mv a0, a1
169 ; CHECK-NEXT:  .LBB12_2:
170 ; CHECK-NEXT:    vmv1r.v v0, v12
171 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
172 ; CHECK-NEXT:    vzext.vf4 v24, v8, v0.t
173 ; CHECK-NEXT:    vmv.v.v v8, v24
174 ; CHECK-NEXT:    ret
175   %v = call <vscale x 32 x i32> @llvm.vp.zext.nxv32i32.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i1> %m, i32 %vl)
176   ret <vscale x 32 x i32> %v
179 define <vscale x 32 x i32> @vzext_nxv32i8_nxv32i32_unmasked(<vscale x 32 x i8> %a, i32 zeroext %vl) {
180 ; CHECK-LABEL: vzext_nxv32i8_nxv32i32_unmasked:
181 ; CHECK:       # %bb.0:
182 ; CHECK-NEXT:    csrr a1, vlenb
183 ; CHECK-NEXT:    slli a1, a1, 1
184 ; CHECK-NEXT:    sub a2, a0, a1
185 ; CHECK-NEXT:    sltu a3, a0, a2
186 ; CHECK-NEXT:    addi a3, a3, -1
187 ; CHECK-NEXT:    and a2, a3, a2
188 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
189 ; CHECK-NEXT:    vzext.vf4 v16, v10
190 ; CHECK-NEXT:    bltu a0, a1, .LBB13_2
191 ; CHECK-NEXT:  # %bb.1:
192 ; CHECK-NEXT:    mv a0, a1
193 ; CHECK-NEXT:  .LBB13_2:
194 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
195 ; CHECK-NEXT:    vzext.vf4 v24, v8
196 ; CHECK-NEXT:    vmv.v.v v8, v24
197 ; CHECK-NEXT:    ret
198   %v = call <vscale x 32 x i32> @llvm.vp.zext.nxv32i32.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i1> splat (i1 true), i32 %vl)
199   ret <vscale x 32 x i32> %v