@@ -16,14 +16,10 @@ define <4 x i64> @m2_splat_0(<4 x i64> %v1) vscale_range(2,2) {
16
16
define <4 x i64 > @m2_splat_in_chunks (<4 x i64 > %v1 ) vscale_range(2 ,2 ) {
17
17
; CHECK-LABEL: m2_splat_in_chunks:
18
18
; CHECK: # %bb.0:
19
- ; CHECK-NEXT: lui a0, 8224
20
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
21
- ; CHECK-NEXT: vmv.s.x v10, a0
22
- ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
23
- ; CHECK-NEXT: vsext.vf2 v12, v10
24
- ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
25
- ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12
26
- ; CHECK-NEXT: vmv.v.v v8, v10
19
+ ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
20
+ ; CHECK-NEXT: vrgather.vi v10, v8, 0
21
+ ; CHECK-NEXT: vrgather.vi v11, v9, 0
22
+ ; CHECK-NEXT: vmv2r.v v8, v10
27
23
; CHECK-NEXT: ret
28
24
%res = shufflevector <4 x i64 > %v1 , <4 x i64 > poison, <4 x i32 > <i32 0 , i32 0 , i32 2 , i32 2 >
29
25
ret <4 x i64 > %res
@@ -32,12 +28,12 @@ define <4 x i64> @m2_splat_in_chunks(<4 x i64> %v1) vscale_range(2,2) {
32
28
define <8 x i64 > @m4_splat_in_chunks (<8 x i64 > %v1 ) vscale_range(2 ,2 ) {
33
29
; CHECK-LABEL: m4_splat_in_chunks:
34
30
; CHECK: # %bb.0:
35
- ; CHECK-NEXT: lui a0, %hi(.LCPI2_0)
36
- ; CHECK-NEXT: addi a0, a0, %lo(.LCPI2_0)
37
- ; CHECK-NEXT: vl1re16.v v16, (a0)
38
- ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
39
- ; CHECK-NEXT: vrgatherei16.vv v12, v8, v16
40
- ; CHECK-NEXT: vmv.v .v v8, v12
31
+ ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
32
+ ; CHECK-NEXT: vrgather.vi v12, v8, 0
33
+ ; CHECK-NEXT: vrgather.vi v13, v9, 0
34
+ ; CHECK-NEXT: vrgather.vi v14, v10, 0
35
+ ; CHECK-NEXT: vrgather.vi v15, v11, 1
36
+ ; CHECK-NEXT: vmv4r .v v8, v12
41
37
; CHECK-NEXT: ret
42
38
%res = shufflevector <8 x i64 > %v1 , <8 x i64 > poison, <8 x i32 > <i32 0 , i32 0 , i32 2 , i32 2 , i32 4 , i32 4 , i32 7 , i32 7 >
43
39
ret <8 x i64 > %res
@@ -47,14 +43,10 @@ define <8 x i64> @m4_splat_in_chunks(<8 x i64> %v1) vscale_range(2,2) {
47
43
define <4 x i64 > @m2_splat_with_tail (<4 x i64 > %v1 ) vscale_range(2 ,2 ) {
48
44
; CHECK-LABEL: m2_splat_with_tail:
49
45
; CHECK: # %bb.0:
50
- ; CHECK-NEXT: lui a0, 12320
51
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
52
- ; CHECK-NEXT: vmv.s.x v10, a0
53
- ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
54
- ; CHECK-NEXT: vsext.vf2 v12, v10
55
- ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
56
- ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12
57
- ; CHECK-NEXT: vmv.v.v v8, v10
46
+ ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
47
+ ; CHECK-NEXT: vrgather.vi v10, v8, 0
48
+ ; CHECK-NEXT: vmv1r.v v11, v9
49
+ ; CHECK-NEXT: vmv2r.v v8, v10
58
50
; CHECK-NEXT: ret
59
51
%res = shufflevector <4 x i64 > %v1 , <4 x i64 > poison, <4 x i32 > <i32 0 , i32 0 , i32 2 , i32 3 >
60
52
ret <4 x i64 > %res
@@ -63,15 +55,12 @@ define <4 x i64> @m2_splat_with_tail(<4 x i64> %v1) vscale_range(2,2) {
63
55
define <4 x i64 > @m2_pair_swap_vl4 (<4 x i64 > %v1 ) vscale_range(2 ,2 ) {
64
56
; CHECK-LABEL: m2_pair_swap_vl4:
65
57
; CHECK: # %bb.0:
66
- ; CHECK-NEXT: lui a0, 8240
67
- ; CHECK-NEXT: addi a0, a0, 1
68
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
69
- ; CHECK-NEXT: vmv.s.x v10, a0
70
- ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
71
- ; CHECK-NEXT: vsext.vf2 v12, v10
72
- ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
73
- ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12
74
- ; CHECK-NEXT: vmv.v.v v8, v10
58
+ ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
59
+ ; CHECK-NEXT: vslidedown.vi v11, v9, 1
60
+ ; CHECK-NEXT: vslideup.vi v11, v9, 1
61
+ ; CHECK-NEXT: vslidedown.vi v10, v8, 1
62
+ ; CHECK-NEXT: vslideup.vi v10, v8, 1
63
+ ; CHECK-NEXT: vmv2r.v v8, v10
75
64
; CHECK-NEXT: ret
76
65
%res = shufflevector <4 x i64 > %v1 , <4 x i64 > poison, <4 x i32 > <i32 1 , i32 0 , i32 3 , i32 2 >
77
66
ret <4 x i64 > %res
@@ -107,14 +96,10 @@ define <8 x i32> @m2_pair_swap_vl8(<8 x i32> %v1) vscale_range(2,2) {
107
96
define <4 x i64 > @m2_splat_into_identity (<4 x i64 > %v1 ) vscale_range(2 ,2 ) {
108
97
; CHECK-LABEL: m2_splat_into_identity:
109
98
; CHECK: # %bb.0:
110
- ; CHECK-NEXT: lui a0, 12320
111
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
112
- ; CHECK-NEXT: vmv.s.x v10, a0
113
- ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
114
- ; CHECK-NEXT: vsext.vf2 v12, v10
115
- ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
116
- ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12
117
- ; CHECK-NEXT: vmv.v.v v8, v10
99
+ ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
100
+ ; CHECK-NEXT: vrgather.vi v10, v8, 0
101
+ ; CHECK-NEXT: vmv1r.v v11, v9
102
+ ; CHECK-NEXT: vmv2r.v v8, v10
118
103
; CHECK-NEXT: ret
119
104
%res = shufflevector <4 x i64 > %v1 , <4 x i64 > poison, <4 x i32 > <i32 0 , i32 0 , i32 2 , i32 3 >
120
105
ret <4 x i64 > %res
@@ -123,12 +108,7 @@ define <4 x i64> @m2_splat_into_identity(<4 x i64> %v1) vscale_range(2,2) {
123
108
define <4 x i64 > @m2_broadcast_i128 (<4 x i64 > %v1 ) vscale_range(2 ,2 ) {
124
109
; CHECK-LABEL: m2_broadcast_i128:
125
110
; CHECK: # %bb.0:
126
- ; CHECK-NEXT: lui a0, 16
127
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
128
- ; CHECK-NEXT: vmv.v.x v12, a0
129
- ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
130
- ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12
131
- ; CHECK-NEXT: vmv.v.v v8, v10
111
+ ; CHECK-NEXT: vmv1r.v v9, v8
132
112
; CHECK-NEXT: ret
133
113
%res = shufflevector <4 x i64 > %v1 , <4 x i64 > poison, <4 x i32 > <i32 0 , i32 1 , i32 0 , i32 1 >
134
114
ret <4 x i64 > %res
@@ -137,12 +117,9 @@ define <4 x i64> @m2_broadcast_i128(<4 x i64> %v1) vscale_range(2,2) {
137
117
define <8 x i64 > @m4_broadcast_i128 (<8 x i64 > %v1 ) vscale_range(2 ,2 ) {
138
118
; CHECK-LABEL: m4_broadcast_i128:
139
119
; CHECK: # %bb.0:
140
- ; CHECK-NEXT: lui a0, 16
141
- ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
142
- ; CHECK-NEXT: vmv.v.x v16, a0
143
- ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
144
- ; CHECK-NEXT: vrgatherei16.vv v12, v8, v16
145
- ; CHECK-NEXT: vmv.v.v v8, v12
120
+ ; CHECK-NEXT: vmv1r.v v9, v8
121
+ ; CHECK-NEXT: vmv1r.v v10, v8
122
+ ; CHECK-NEXT: vmv1r.v v11, v8
146
123
; CHECK-NEXT: ret
147
124
%res = shufflevector <8 x i64 > %v1 , <8 x i64 > poison, <8 x i32 > <i32 0 , i32 1 , i32 0 , i32 1 , i32 0 , i32 1 , i32 0 , i32 1 >
148
125
ret <8 x i64 > %res
@@ -152,13 +129,10 @@ define <8 x i64> @m4_broadcast_i128(<8 x i64> %v1) vscale_range(2,2) {
152
129
define <4 x i64 > @m2_splat_two_source (<4 x i64 > %v1 , <4 x i64 > %v2 ) vscale_range(2 ,2 ) {
153
130
; CHECK-LABEL: m2_splat_two_source:
154
131
; CHECK: # %bb.0:
155
- ; CHECK-NEXT: vsetivli zero, 4 , e64, m2 , ta, ma
132
+ ; CHECK-NEXT: vsetivli zero, 2 , e64, m1 , ta, ma
156
133
; CHECK-NEXT: vrgather.vi v12, v8, 0
157
- ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
158
- ; CHECK-NEXT: vmv.v.i v0, 12
159
- ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
160
- ; CHECK-NEXT: vrgather.vi v12, v10, 3, v0.t
161
- ; CHECK-NEXT: vmv.v.v v8, v12
134
+ ; CHECK-NEXT: vrgather.vi v13, v11, 1
135
+ ; CHECK-NEXT: vmv2r.v v8, v12
162
136
; CHECK-NEXT: ret
163
137
%res = shufflevector <4 x i64 > %v1 , <4 x i64 > %v2 , <4 x i32 > <i32 0 , i32 0 , i32 7 , i32 7 >
164
138
ret <4 x i64 > %res
@@ -167,15 +141,9 @@ define <4 x i64> @m2_splat_two_source(<4 x i64> %v1, <4 x i64> %v2) vscale_range
167
141
define <4 x i64 > @m2_splat_into_identity_two_source (<4 x i64 > %v1 , <4 x i64 > %v2 ) vscale_range(2 ,2 ) {
168
142
; CHECK-LABEL: m2_splat_into_identity_two_source:
169
143
; CHECK: # %bb.0:
170
- ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
171
- ; CHECK-NEXT: vrgather.vi v12, v8, 0
172
- ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
173
- ; CHECK-NEXT: vmv.v.i v0, 12
174
- ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
175
- ; CHECK-NEXT: vid.v v8
176
- ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, mu
177
- ; CHECK-NEXT: vrgatherei16.vv v12, v10, v8, v0.t
178
- ; CHECK-NEXT: vmv.v.v v8, v12
144
+ ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
145
+ ; CHECK-NEXT: vrgather.vi v10, v8, 0
146
+ ; CHECK-NEXT: vmv2r.v v8, v10
179
147
; CHECK-NEXT: ret
180
148
%res = shufflevector <4 x i64 > %v1 , <4 x i64 > %v2 , <4 x i32 > <i32 0 , i32 0 , i32 6 , i32 7 >
181
149
ret <4 x i64 > %res
0 commit comments