@@ -237,15 +237,10 @@ define <8 x i32> @v8i32_v4i32(<4 x i32>) {
237237; CHECK: # %bb.0:
238238; CHECK-NEXT: lui a0, %hi(.LCPI5_0)
239239; CHECK-NEXT: addi a0, a0, %lo(.LCPI5_0)
240- ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
241- ; CHECK-NEXT: vle16.v v9, (a0)
242- ; CHECK-NEXT: csrr a0, vlenb
243- ; CHECK-NEXT: srli a0, a0, 2
244- ; CHECK-NEXT: vslidedown.vx v10, v9, a0
245- ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
246- ; CHECK-NEXT: vrgatherei16.vv v11, v12, v10
247- ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
248- ; CHECK-NEXT: vmv2r.v v8, v10
240+ ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
241+ ; CHECK-NEXT: vle16.v v12, (a0)
242+ ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12
243+ ; CHECK-NEXT: vmv.v.v v8, v10
249244; CHECK-NEXT: ret
250245 %2 = shufflevector <4 x i32 > %0 , <4 x i32 > poison, <8 x i32 > <i32 2 , i32 3 , i32 0 , i32 1 , i32 1 , i32 2 , i32 0 , i32 3 >
251246 ret <8 x i32 > %2
@@ -254,38 +249,30 @@ define <8 x i32> @v8i32_v4i32(<4 x i32>) {
254249define <16 x i32 > @v16i32_v4i32 (<4 x i32 >) {
255250; CHECK-LABEL: v16i32_v4i32:
256251; CHECK: # %bb.0:
257- ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
258- ; CHECK-NEXT: vmv1r.v v10, v8
259252; CHECK-NEXT: lui a0, 2
260- ; CHECK-NEXT: vmv.v.i v11, 3
253+ ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
254+ ; CHECK-NEXT: vmv.v.i v9, 3
261255; CHECK-NEXT: addi a1, a0, 265
262256; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
263257; CHECK-NEXT: vmv.s.x v0, a1
264258; CHECK-NEXT: lui a1, 4
265259; CHECK-NEXT: addi a1, a1, 548
266- ; CHECK-NEXT: vmv.s.x v8, a1
267- ; CHECK-NEXT: csrr a1, vlenb
260+ ; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
261+ ; CHECK-NEXT: vmerge.vim v9, v9, 2, v0
262+ ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
263+ ; CHECK-NEXT: vmv.s.x v0, a1
268264; CHECK-NEXT: addi a0, a0, -1856
269- ; CHECK-NEXT: srli a1, a1, 2
270- ; CHECK-NEXT: vmv.s.x v9, a0
271265; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
272- ; CHECK-NEXT: vmerge.vim v11, v11, 2, v0
273- ; CHECK-NEXT: vmv1r.v v0, v8
274- ; CHECK-NEXT: vmerge.vim v8, v11, 0, v0
275- ; CHECK-NEXT: vmv1r.v v0, v9
276- ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
266+ ; CHECK-NEXT: vmerge.vim v9, v9, 0, v0
277267; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
278- ; CHECK-NEXT: vsext.vf2 v14, v8
279- ; CHECK-NEXT: vslidedown.vx v16, v14, a1
280- ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
281- ; CHECK-NEXT: vrgatherei16.vv v9, v12, v16
282- ; CHECK-NEXT: vrgatherei16.vv v8, v10, v14
283- ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
284- ; CHECK-NEXT: vslidedown.vx v12, v16, a1
285- ; CHECK-NEXT: vslidedown.vx v14, v12, a1
286- ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
287- ; CHECK-NEXT: vrgatherei16.vv v10, v11, v12
288- ; CHECK-NEXT: vrgatherei16.vv v11, v12, v14
268+ ; CHECK-NEXT: vmv.s.x v0, a0
269+ ; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
270+ ; CHECK-NEXT: vmerge.vim v9, v9, 1, v0
271+ ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
272+ ; CHECK-NEXT: vsext.vf2 v16, v9
273+ ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
274+ ; CHECK-NEXT: vrgatherei16.vv v12, v8, v16
275+ ; CHECK-NEXT: vmv.v.v v8, v12
289276; CHECK-NEXT: ret
290277 %2 = shufflevector <4 x i32 > %0 , <4 x i32 > poison, <16 x i32 > <i32 2 , i32 3 , i32 0 , i32 2 , i32 3 , i32 0 , i32 1 , i32 1 , i32 2 , i32 0 , i32 3 , i32 1 , i32 1 , i32 2 , i32 0 , i32 3 >
291278 ret <16 x i32 > %2
@@ -294,55 +281,31 @@ define <16 x i32> @v16i32_v4i32(<4 x i32>) {
294281define <32 x i32 > @v32i32_v4i32 (<4 x i32 >) {
295282; CHECK-LABEL: v32i32_v4i32:
296283; CHECK: # %bb.0:
297- ; CHECK-NEXT: vsetivli zero, 1, e32, m4, ta, ma
298- ; CHECK-NEXT: vmv1r.v v10, v8
299284; CHECK-NEXT: li a0, 32
300285; CHECK-NEXT: lui a1, 135432
301286; CHECK-NEXT: addi a1, a1, 1161
287+ ; CHECK-NEXT: vsetivli zero, 1, e32, m1, ta, ma
302288; CHECK-NEXT: vmv.s.x v0, a1
303289; CHECK-NEXT: lui a1, 270865
304290; CHECK-NEXT: addi a1, a1, 548
305- ; CHECK-NEXT: vmv.s.x v8, a1
306- ; CHECK-NEXT: lui a1, 100550
307- ; CHECK-NEXT: addi a1, a1, 64
308291; CHECK-NEXT: vmv.s.x v9, a1
309- ; CHECK-NEXT: csrr a1, vlenb
292+ ; CHECK-NEXT: lui a1, 100550
310293; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
311- ; CHECK-NEXT: vmv.v.i v12 , 3
312- ; CHECK-NEXT: srli a1 , a1, 2
313- ; CHECK-NEXT: vmerge.vim v12, v12 , 2, v0
314- ; CHECK-NEXT: vmv1r.v v0, v8
315- ; CHECK-NEXT: vmerge.vim v12, v12, 0, v0
294+ ; CHECK-NEXT: vmv.v.i v10 , 3
295+ ; CHECK-NEXT: addi a0 , a1, 64
296+ ; CHECK-NEXT: vmerge.vim v18, v10 , 2, v0
297+ ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma
298+ ; CHECK-NEXT: vmv.s.x v16, a0
316299; CHECK-NEXT: vmv1r.v v0, v9
317- ; CHECK-NEXT: vmerge.vim v8, v12, 1, v0
300+ ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
301+ ; CHECK-NEXT: vmerge.vim v18, v18, 0, v0
302+ ; CHECK-NEXT: vmv1r.v v0, v16
303+ ; CHECK-NEXT: vmerge.vim v16, v18, 1, v0
318304; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma
319- ; CHECK-NEXT: vsext.vf2 v16, v8
320- ; CHECK-NEXT: vslidedown.vx v12, v16, a1
321- ; CHECK-NEXT: vsetvli a2, zero, e32, m1, ta, ma
322- ; CHECK-NEXT: vrgatherei16.vv v9, v11, v12
323- ; CHECK-NEXT: vrgatherei16.vv v8, v10, v16
324- ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
325- ; CHECK-NEXT: vslidedown.vx v12, v12, a1
326- ; CHECK-NEXT: vsetvli a2, zero, e32, m1, ta, ma
327- ; CHECK-NEXT: vrgatherei16.vv v10, v11, v12
328- ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
329- ; CHECK-NEXT: vslidedown.vx v12, v12, a1
330- ; CHECK-NEXT: vsetvli a2, zero, e32, m1, ta, ma
331- ; CHECK-NEXT: vrgatherei16.vv v11, v16, v12
332- ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
333- ; CHECK-NEXT: vslidedown.vx v20, v12, a1
334- ; CHECK-NEXT: vsetvli a2, zero, e32, m1, ta, ma
335- ; CHECK-NEXT: vrgatherei16.vv v12, v17, v20
336- ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
337- ; CHECK-NEXT: vslidedown.vx v20, v20, a1
338- ; CHECK-NEXT: vsetvli a2, zero, e32, m1, ta, ma
339- ; CHECK-NEXT: vrgatherei16.vv v13, v18, v20
340- ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
341- ; CHECK-NEXT: vslidedown.vx v20, v20, a1
342- ; CHECK-NEXT: vslidedown.vx v24, v20, a1
343- ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
344- ; CHECK-NEXT: vrgatherei16.vv v14, v19, v20
345- ; CHECK-NEXT: vrgatherei16.vv v15, v16, v24
305+ ; CHECK-NEXT: vsext.vf2 v24, v16
306+ ; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma
307+ ; CHECK-NEXT: vrgatherei16.vv v16, v8, v24
308+ ; CHECK-NEXT: vmv.v.v v8, v16
346309; CHECK-NEXT: ret
347310 %2 = shufflevector <4 x i32 > %0 , <4 x i32 > poison, <32 x i32 > <i32 2 , i32 3 , i32 0 , i32 2 , i32 3 , i32 0 , i32 1 , i32 2 , i32 3 , i32 0 , i32 2 , i32 3 , i32 0 , i32 1 , i32 1 , i32 2 , i32 0 , i32 3 , i32 1 , i32 1 , i32 2 , i32 0 , i32 3 , i32 1 , i32 2 , i32 0 , i32 3 , i32 1 , i32 1 , i32 2 , i32 0 , i32 3 >
348311 ret <32 x i32 > %2
0 commit comments