@@ -69,14 +69,9 @@ define <4 x double> @shuffle_vf_v4f64(<4 x double> %x) {
69
69
define <4 x double > @vrgather_permute_shuffle_vu_v4f64 (<4 x double > %x ) {
70
70
; CHECK-LABEL: vrgather_permute_shuffle_vu_v4f64:
71
71
; CHECK: # %bb.0:
72
- ; CHECK-NEXT: lui a0, 4096
73
- ; CHECK-NEXT: addi a0, a0, 513
74
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
75
- ; CHECK-NEXT: vmv.s.x v10, a0
76
- ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
77
- ; CHECK-NEXT: vsext.vf2 v12, v10
78
- ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
79
- ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12
72
+ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
73
+ ; CHECK-NEXT: vslidedown.vi v10, v8, 1
74
+ ; CHECK-NEXT: vslideup.vi v10, v8, 2
80
75
; CHECK-NEXT: vmv.v.v v8, v10
81
76
; CHECK-NEXT: ret
82
77
%s = shufflevector <4 x double > %x , <4 x double > poison, <4 x i32 > <i32 1 , i32 2 , i32 0 , i32 1 >
@@ -86,14 +81,9 @@ define <4 x double> @vrgather_permute_shuffle_vu_v4f64(<4 x double> %x) {
86
81
define <4 x double > @vrgather_permute_shuffle_uv_v4f64 (<4 x double > %x ) {
87
82
; CHECK-LABEL: vrgather_permute_shuffle_uv_v4f64:
88
83
; CHECK: # %bb.0:
89
- ; CHECK-NEXT: lui a0, 4096
90
- ; CHECK-NEXT: addi a0, a0, 513
91
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
92
- ; CHECK-NEXT: vmv.s.x v10, a0
93
- ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
94
- ; CHECK-NEXT: vsext.vf2 v12, v10
95
- ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
96
- ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12
84
+ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
85
+ ; CHECK-NEXT: vslidedown.vi v10, v8, 1
86
+ ; CHECK-NEXT: vslideup.vi v10, v8, 2
97
87
; CHECK-NEXT: vmv.v.v v8, v10
98
88
; CHECK-NEXT: ret
99
89
%s = shufflevector <4 x double > poison, <4 x double > %x , <4 x i32 > <i32 5 , i32 6 , i32 4 , i32 5 >
@@ -103,13 +93,12 @@ define <4 x double> @vrgather_permute_shuffle_uv_v4f64(<4 x double> %x) {
103
93
define <4 x double > @vrgather_shuffle_vv_v4f64 (<4 x double > %x , <4 x double > %y ) {
104
94
; CHECK-LABEL: vrgather_shuffle_vv_v4f64:
105
95
; CHECK: # %bb.0:
106
- ; CHECK-NEXT: lui a0, %hi(.LCPI7_0)
107
- ; CHECK-NEXT: addi a0, a0, %lo(.LCPI7_0)
108
- ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
109
- ; CHECK-NEXT: vle16.v v14, (a0)
96
+ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
97
+ ; CHECK-NEXT: vslidedown.vi v12, v8, 1
98
+ ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
110
99
; CHECK-NEXT: vmv.v.i v0, 8
111
- ; CHECK-NEXT: vsetvli zero, zero , e64, m2, ta, mu
112
- ; CHECK-NEXT: vrgatherei16.vv v12, v8, v14
100
+ ; CHECK-NEXT: vsetivli zero, 4 , e64, m2, ta, mu
101
+ ; CHECK-NEXT: vslideup.vi v12, v8, 2
113
102
; CHECK-NEXT: vrgather.vi v12, v10, 1, v0.t
114
103
; CHECK-NEXT: vmv.v.v v8, v12
115
104
; CHECK-NEXT: ret
@@ -120,16 +109,18 @@ define <4 x double> @vrgather_shuffle_vv_v4f64(<4 x double> %x, <4 x double> %y)
120
109
define <4 x double > @vrgather_shuffle_xv_v4f64 (<4 x double > %x ) {
121
110
; CHECK-LABEL: vrgather_shuffle_xv_v4f64:
122
111
; CHECK: # %bb.0:
112
+ ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
113
+ ; CHECK-NEXT: vmv.v.i v0, 8
123
114
; CHECK-NEXT: lui a0, %hi(.LCPI8_0)
124
115
; CHECK-NEXT: fld fa5, %lo(.LCPI8_0)(a0)
125
- ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
126
- ; CHECK-NEXT: vid.v v10
127
- ; CHECK-NEXT: vrsub.vi v12, v10, 4
116
+ ; CHECK-NEXT: vmv2r.v v10, v8
117
+ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
118
+ ; CHECK-NEXT: vslideup.vi v10, v8, 2, v0.t
119
+ ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
128
120
; CHECK-NEXT: vmv.v.i v0, 12
129
- ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, mu
130
- ; CHECK-NEXT: vfmv.v.f v10, fa5
131
- ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12, v0.t
132
- ; CHECK-NEXT: vmv.v.v v8, v10
121
+ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
122
+ ; CHECK-NEXT: vfmv.v.f v8, fa5
123
+ ; CHECK-NEXT: vmerge.vvm v8, v8, v10, v0
133
124
; CHECK-NEXT: ret
134
125
%s = shufflevector <4 x double > <double 2 .0 , double 2 .0 , double 2 .0 , double 2 .0 >, <4 x double > %x , <4 x i32 > <i32 0 , i32 3 , i32 6 , i32 5 >
135
126
ret <4 x double > %s
@@ -138,17 +129,17 @@ define <4 x double> @vrgather_shuffle_xv_v4f64(<4 x double> %x) {
138
129
define <4 x double > @vrgather_shuffle_vx_v4f64 (<4 x double > %x ) {
139
130
; CHECK-LABEL: vrgather_shuffle_vx_v4f64:
140
131
; CHECK: # %bb.0:
132
+ ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
133
+ ; CHECK-NEXT: vmv.v.i v0, 2
141
134
; CHECK-NEXT: lui a0, %hi(.LCPI9_0)
142
135
; CHECK-NEXT: fld fa5, %lo(.LCPI9_0)(a0)
143
- ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
144
- ; CHECK-NEXT: vmv.v.i v10, 9
145
- ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
146
- ; CHECK-NEXT: vcompress.vm v12, v8, v10
136
+ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
137
+ ; CHECK-NEXT: vslidedown.vi v8, v8, 2, v0.t
147
138
; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
148
139
; CHECK-NEXT: vmv.v.i v0, 3
149
140
; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
150
- ; CHECK-NEXT: vfmv.v.f v8 , fa5
151
- ; CHECK-NEXT: vmerge.vvm v8, v8, v12 , v0
141
+ ; CHECK-NEXT: vfmv.v.f v10 , fa5
142
+ ; CHECK-NEXT: vmerge.vvm v8, v10, v8 , v0
152
143
; CHECK-NEXT: ret
153
144
%s = shufflevector <4 x double > %x , <4 x double > <double 2 .0 , double 2 .0 , double 2 .0 , double 2 .0 >, <4 x i32 > <i32 0 , i32 3 , i32 6 , i32 5 >
154
145
ret <4 x double > %s
@@ -311,13 +302,9 @@ define <8 x double> @splice_binary2(<8 x double> %x, <8 x double> %y) {
311
302
define <4 x bfloat> @vrgather_permute_shuffle_vu_v4bf16 (<4 x bfloat> %x ) {
312
303
; CHECK-LABEL: vrgather_permute_shuffle_vu_v4bf16:
313
304
; CHECK: # %bb.0:
314
- ; CHECK-NEXT: lui a0, 4096
315
- ; CHECK-NEXT: addi a0, a0, 513
316
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
317
- ; CHECK-NEXT: vmv.s.x v9, a0
318
- ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
319
- ; CHECK-NEXT: vsext.vf2 v10, v9
320
- ; CHECK-NEXT: vrgather.vv v9, v8, v10
305
+ ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
306
+ ; CHECK-NEXT: vslidedown.vi v9, v8, 1
307
+ ; CHECK-NEXT: vslideup.vi v9, v8, 2
321
308
; CHECK-NEXT: vmv1r.v v8, v9
322
309
; CHECK-NEXT: ret
323
310
%s = shufflevector <4 x bfloat> %x , <4 x bfloat> poison, <4 x i32 > <i32 1 , i32 2 , i32 0 , i32 1 >
@@ -327,12 +314,10 @@ define <4 x bfloat> @vrgather_permute_shuffle_vu_v4bf16(<4 x bfloat> %x) {
327
314
define <4 x bfloat> @vrgather_shuffle_vv_v4bf16 (<4 x bfloat> %x , <4 x bfloat> %y ) {
328
315
; CHECK-LABEL: vrgather_shuffle_vv_v4bf16:
329
316
; CHECK: # %bb.0:
330
- ; CHECK-NEXT: lui a0, %hi(.LCPI25_0)
331
- ; CHECK-NEXT: addi a0, a0, %lo(.LCPI25_0)
332
317
; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
333
- ; CHECK-NEXT: vle16.v v11, (a0)
318
+ ; CHECK-NEXT: vslidedown.vi v10, v8, 1
334
319
; CHECK-NEXT: vmv.v.i v0, 8
335
- ; CHECK-NEXT: vrgather.vv v10, v8, v11
320
+ ; CHECK-NEXT: vslideup.vi v10, v8, 2
336
321
; CHECK-NEXT: vrgather.vi v10, v9, 1, v0.t
337
322
; CHECK-NEXT: vmv1r.v v8, v10
338
323
; CHECK-NEXT: ret
@@ -355,13 +340,9 @@ define <4 x bfloat> @vrgather_shuffle_vx_v4bf16_load(ptr %p) {
355
340
define <4 x half > @vrgather_permute_shuffle_vu_v4f16 (<4 x half > %x ) {
356
341
; CHECK-LABEL: vrgather_permute_shuffle_vu_v4f16:
357
342
; CHECK: # %bb.0:
358
- ; CHECK-NEXT: lui a0, 4096
359
- ; CHECK-NEXT: addi a0, a0, 513
360
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
361
- ; CHECK-NEXT: vmv.s.x v9, a0
362
- ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
363
- ; CHECK-NEXT: vsext.vf2 v10, v9
364
- ; CHECK-NEXT: vrgather.vv v9, v8, v10
343
+ ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
344
+ ; CHECK-NEXT: vslidedown.vi v9, v8, 1
345
+ ; CHECK-NEXT: vslideup.vi v9, v8, 2
365
346
; CHECK-NEXT: vmv1r.v v8, v9
366
347
; CHECK-NEXT: ret
367
348
%s = shufflevector <4 x half > %x , <4 x half > poison, <4 x i32 > <i32 1 , i32 2 , i32 0 , i32 1 >
@@ -371,12 +352,10 @@ define <4 x half> @vrgather_permute_shuffle_vu_v4f16(<4 x half> %x) {
371
352
define <4 x half > @vrgather_shuffle_vv_v4f16 (<4 x half > %x , <4 x half > %y ) {
372
353
; CHECK-LABEL: vrgather_shuffle_vv_v4f16:
373
354
; CHECK: # %bb.0:
374
- ; CHECK-NEXT: lui a0, %hi(.LCPI28_0)
375
- ; CHECK-NEXT: addi a0, a0, %lo(.LCPI28_0)
376
355
; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
377
- ; CHECK-NEXT: vle16.v v11, (a0)
356
+ ; CHECK-NEXT: vslidedown.vi v10, v8, 1
378
357
; CHECK-NEXT: vmv.v.i v0, 8
379
- ; CHECK-NEXT: vrgather.vv v10, v8, v11
358
+ ; CHECK-NEXT: vslideup.vi v10, v8, 2
380
359
; CHECK-NEXT: vrgather.vi v10, v9, 1, v0.t
381
360
; CHECK-NEXT: vmv1r.v v8, v10
382
361
; CHECK-NEXT: ret
0 commit comments