@@ -63,93 +63,145 @@ define void @extract_v2i8_v8i8_6(ptr %x, ptr %y) {
63
63
}
64
64
65
65
define void @extract_v1i32_v8i32_4 (ptr %x , ptr %y ) {
66
- ; CHECK-LABEL: extract_v1i32_v8i32_4:
67
- ; CHECK: # %bb.0:
68
- ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
69
- ; CHECK-NEXT: vle32.v v8, (a0)
70
- ; CHECK-NEXT: vsetivli zero, 1, e32, m2, ta, ma
71
- ; CHECK-NEXT: vslidedown.vi v8, v8, 4
72
- ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
73
- ; CHECK-NEXT: vse32.v v8, (a1)
74
- ; CHECK-NEXT: ret
66
+ ; CHECK-V-LABEL: extract_v1i32_v8i32_4:
67
+ ; CHECK-V: # %bb.0:
68
+ ; CHECK-V-NEXT: vsetivli zero, 8, e32, m2, ta, ma
69
+ ; CHECK-V-NEXT: vle32.v v8, (a0)
70
+ ; CHECK-V-NEXT: vsetivli zero, 1, e32, m2, ta, ma
71
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 4
72
+ ; CHECK-V-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
73
+ ; CHECK-V-NEXT: vse32.v v8, (a1)
74
+ ; CHECK-V-NEXT: ret
75
+ ;
76
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v1i32_v8i32_4:
77
+ ; CHECK-KNOWNVLEN128: # %bb.0:
78
+ ; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
79
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, m2, ta, ma
80
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 4
81
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
82
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
83
+ ; CHECK-KNOWNVLEN128-NEXT: ret
75
84
%a = load <8 x i32 >, ptr %x
76
85
%c = call <1 x i32 > @llvm.vector.extract.v1i32.v8i32 (<8 x i32 > %a , i64 4 )
77
86
store <1 x i32 > %c , ptr %y
78
87
ret void
79
88
}
80
89
81
90
define void @extract_v1i32_v8i32_5 (ptr %x , ptr %y ) {
82
- ; CHECK-LABEL: extract_v1i32_v8i32_5:
83
- ; CHECK: # %bb.0:
84
- ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
85
- ; CHECK-NEXT: vle32.v v8, (a0)
86
- ; CHECK-NEXT: vsetivli zero, 1, e32, m2, ta, ma
87
- ; CHECK-NEXT: vslidedown.vi v8, v8, 5
88
- ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
89
- ; CHECK-NEXT: vse32.v v8, (a1)
90
- ; CHECK-NEXT: ret
91
+ ; CHECK-V-LABEL: extract_v1i32_v8i32_5:
92
+ ; CHECK-V: # %bb.0:
93
+ ; CHECK-V-NEXT: vsetivli zero, 8, e32, m2, ta, ma
94
+ ; CHECK-V-NEXT: vle32.v v8, (a0)
95
+ ; CHECK-V-NEXT: vsetivli zero, 1, e32, m2, ta, ma
96
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 5
97
+ ; CHECK-V-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
98
+ ; CHECK-V-NEXT: vse32.v v8, (a1)
99
+ ; CHECK-V-NEXT: ret
100
+ ;
101
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v1i32_v8i32_5:
102
+ ; CHECK-KNOWNVLEN128: # %bb.0:
103
+ ; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
104
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, m2, ta, ma
105
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 5
106
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
107
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
108
+ ; CHECK-KNOWNVLEN128-NEXT: ret
91
109
%a = load <8 x i32 >, ptr %x
92
110
%c = call <1 x i32 > @llvm.vector.extract.v1i32.v8i32 (<8 x i32 > %a , i64 5 )
93
111
store <1 x i32 > %c , ptr %y
94
112
ret void
95
113
}
96
114
97
115
define void @extract_v2i32_v8i32_0 (ptr %x , ptr %y ) {
98
- ; CHECK-LABEL: extract_v2i32_v8i32_0:
99
- ; CHECK: # %bb.0:
100
- ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
101
- ; CHECK-NEXT: vle32.v v8, (a0)
102
- ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
103
- ; CHECK-NEXT: vse32.v v8, (a1)
104
- ; CHECK-NEXT: ret
116
+ ; CHECK-V-LABEL: extract_v2i32_v8i32_0:
117
+ ; CHECK-V: # %bb.0:
118
+ ; CHECK-V-NEXT: vsetivli zero, 8, e32, m2, ta, ma
119
+ ; CHECK-V-NEXT: vle32.v v8, (a0)
120
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
121
+ ; CHECK-V-NEXT: vse32.v v8, (a1)
122
+ ; CHECK-V-NEXT: ret
123
+ ;
124
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_v8i32_0:
125
+ ; CHECK-KNOWNVLEN128: # %bb.0:
126
+ ; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
127
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
128
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
129
+ ; CHECK-KNOWNVLEN128-NEXT: ret
105
130
%a = load <8 x i32 >, ptr %x
106
131
%c = call <2 x i32 > @llvm.vector.extract.v2i32.v8i32 (<8 x i32 > %a , i64 0 )
107
132
store <2 x i32 > %c , ptr %y
108
133
ret void
109
134
}
110
135
111
136
define void @extract_v2i32_v8i32_2 (ptr %x , ptr %y ) {
112
- ; CHECK-LABEL: extract_v2i32_v8i32_2:
113
- ; CHECK: # %bb.0:
114
- ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
115
- ; CHECK-NEXT: vle32.v v8, (a0)
116
- ; CHECK-NEXT: vsetivli zero, 2, e32, m1, ta, ma
117
- ; CHECK-NEXT: vslidedown.vi v8, v8, 2
118
- ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
119
- ; CHECK-NEXT: vse32.v v8, (a1)
120
- ; CHECK-NEXT: ret
137
+ ; CHECK-V-LABEL: extract_v2i32_v8i32_2:
138
+ ; CHECK-V: # %bb.0:
139
+ ; CHECK-V-NEXT: vsetivli zero, 8, e32, m2, ta, ma
140
+ ; CHECK-V-NEXT: vle32.v v8, (a0)
141
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, m1, ta, ma
142
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 2
143
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
144
+ ; CHECK-V-NEXT: vse32.v v8, (a1)
145
+ ; CHECK-V-NEXT: ret
146
+ ;
147
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_v8i32_2:
148
+ ; CHECK-KNOWNVLEN128: # %bb.0:
149
+ ; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
150
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, m1, ta, ma
151
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 2
152
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
153
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
154
+ ; CHECK-KNOWNVLEN128-NEXT: ret
121
155
%a = load <8 x i32 >, ptr %x
122
156
%c = call <2 x i32 > @llvm.vector.extract.v2i32.v8i32 (<8 x i32 > %a , i64 2 )
123
157
store <2 x i32 > %c , ptr %y
124
158
ret void
125
159
}
126
160
127
161
define void @extract_v2i32_v8i32_4 (ptr %x , ptr %y ) {
128
- ; CHECK-LABEL: extract_v2i32_v8i32_4:
129
- ; CHECK: # %bb.0:
130
- ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
131
- ; CHECK-NEXT: vle32.v v8, (a0)
132
- ; CHECK-NEXT: vsetivli zero, 2, e32, m2, ta, ma
133
- ; CHECK-NEXT: vslidedown.vi v8, v8, 4
134
- ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
135
- ; CHECK-NEXT: vse32.v v8, (a1)
136
- ; CHECK-NEXT: ret
162
+ ; CHECK-V-LABEL: extract_v2i32_v8i32_4:
163
+ ; CHECK-V: # %bb.0:
164
+ ; CHECK-V-NEXT: vsetivli zero, 8, e32, m2, ta, ma
165
+ ; CHECK-V-NEXT: vle32.v v8, (a0)
166
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, m2, ta, ma
167
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 4
168
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
169
+ ; CHECK-V-NEXT: vse32.v v8, (a1)
170
+ ; CHECK-V-NEXT: ret
171
+ ;
172
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_v8i32_4:
173
+ ; CHECK-KNOWNVLEN128: # %bb.0:
174
+ ; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
175
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, m2, ta, ma
176
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 4
177
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
178
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
179
+ ; CHECK-KNOWNVLEN128-NEXT: ret
137
180
%a = load <8 x i32 >, ptr %x
138
181
%c = call <2 x i32 > @llvm.vector.extract.v2i32.v8i32 (<8 x i32 > %a , i64 4 )
139
182
store <2 x i32 > %c , ptr %y
140
183
ret void
141
184
}
142
185
143
186
define void @extract_v2i32_v8i32_6 (ptr %x , ptr %y ) {
144
- ; CHECK-LABEL: extract_v2i32_v8i32_6:
145
- ; CHECK: # %bb.0:
146
- ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
147
- ; CHECK-NEXT: vle32.v v8, (a0)
148
- ; CHECK-NEXT: vsetivli zero, 2, e32, m2, ta, ma
149
- ; CHECK-NEXT: vslidedown.vi v8, v8, 6
150
- ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
151
- ; CHECK-NEXT: vse32.v v8, (a1)
152
- ; CHECK-NEXT: ret
187
+ ; CHECK-V-LABEL: extract_v2i32_v8i32_6:
188
+ ; CHECK-V: # %bb.0:
189
+ ; CHECK-V-NEXT: vsetivli zero, 8, e32, m2, ta, ma
190
+ ; CHECK-V-NEXT: vle32.v v8, (a0)
191
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, m2, ta, ma
192
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 6
193
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
194
+ ; CHECK-V-NEXT: vse32.v v8, (a1)
195
+ ; CHECK-V-NEXT: ret
196
+ ;
197
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_v8i32_6:
198
+ ; CHECK-KNOWNVLEN128: # %bb.0:
199
+ ; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
200
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, m2, ta, ma
201
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 6
202
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
203
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
204
+ ; CHECK-KNOWNVLEN128-NEXT: ret
153
205
%a = load <8 x i32 >, ptr %x
154
206
%c = call <2 x i32 > @llvm.vector.extract.v2i32.v8i32 (<8 x i32 > %a , i64 6 )
155
207
store <2 x i32 > %c , ptr %y
@@ -271,13 +323,20 @@ define void @extract_v2i8_nxv2i8_6(<vscale x 2 x i8> %x, ptr %y) {
271
323
}
272
324
273
325
define void @extract_v8i32_nxv16i32_8 (<vscale x 16 x i32 > %x , ptr %y ) {
274
- ; CHECK-LABEL: extract_v8i32_nxv16i32_8:
275
- ; CHECK: # %bb.0:
276
- ; CHECK-NEXT: vsetivli zero, 8, e32, m4, ta, ma
277
- ; CHECK-NEXT: vslidedown.vi v8, v8, 8
278
- ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
279
- ; CHECK-NEXT: vse32.v v8, (a0)
280
- ; CHECK-NEXT: ret
326
+ ; CHECK-V-LABEL: extract_v8i32_nxv16i32_8:
327
+ ; CHECK-V: # %bb.0:
328
+ ; CHECK-V-NEXT: vsetivli zero, 8, e32, m4, ta, ma
329
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 8
330
+ ; CHECK-V-NEXT: vsetivli zero, 8, e32, m2, ta, ma
331
+ ; CHECK-V-NEXT: vse32.v v8, (a0)
332
+ ; CHECK-V-NEXT: ret
333
+ ;
334
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v8i32_nxv16i32_8:
335
+ ; CHECK-KNOWNVLEN128: # %bb.0:
336
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 8, e32, m4, ta, ma
337
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 8
338
+ ; CHECK-KNOWNVLEN128-NEXT: vs2r.v v8, (a0)
339
+ ; CHECK-KNOWNVLEN128-NEXT: ret
281
340
%c = call <8 x i32 > @llvm.vector.extract.v8i32.nxv16i32 (<vscale x 16 x i32 > %x , i64 8 )
282
341
store <8 x i32 > %c , ptr %y
283
342
ret void
0 commit comments