@@ -119,3 +119,227 @@ define <16 x half> @selectcc_v16f16(half %a, half %b, <16 x half> %c, <16 x half
119
119
%v = select i1 %cmp , <16 x half > %c , <16 x half > %d
120
120
ret <16 x half > %v
121
121
}
122
+
123
+ define <2 x float > @select_v2f32 (i1 zeroext %c , <2 x float > %a , <2 x float > %b ) {
124
+ ; CHECK-LABEL: select_v2f32:
125
+ ; CHECK: # %bb.0:
126
+ ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
127
+ ; CHECK-NEXT: vmv.v.x v10, a0
128
+ ; CHECK-NEXT: vmsne.vi v0, v10, 0
129
+ ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
130
+ ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
131
+ ; CHECK-NEXT: ret
132
+ %v = select i1 %c , <2 x float > %a , <2 x float > %b
133
+ ret <2 x float > %v
134
+ }
135
+
136
+ define <2 x float > @selectcc_v2f32 (float %a , float %b , <2 x float > %c , <2 x float > %d ) {
137
+ ; CHECK-LABEL: selectcc_v2f32:
138
+ ; CHECK: # %bb.0:
139
+ ; CHECK-NEXT: feq.s a0, fa0, fa1
140
+ ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
141
+ ; CHECK-NEXT: vmv.v.x v10, a0
142
+ ; CHECK-NEXT: vmsne.vi v0, v10, 0
143
+ ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
144
+ ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
145
+ ; CHECK-NEXT: ret
146
+ %cmp = fcmp oeq float %a , %b
147
+ %v = select i1 %cmp , <2 x float > %c , <2 x float > %d
148
+ ret <2 x float > %v
149
+ }
150
+
151
+ define <4 x float > @select_v4f32 (i1 zeroext %c , <4 x float > %a , <4 x float > %b ) {
152
+ ; CHECK-LABEL: select_v4f32:
153
+ ; CHECK: # %bb.0:
154
+ ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
155
+ ; CHECK-NEXT: vmv.v.x v10, a0
156
+ ; CHECK-NEXT: vmsne.vi v0, v10, 0
157
+ ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
158
+ ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
159
+ ; CHECK-NEXT: ret
160
+ %v = select i1 %c , <4 x float > %a , <4 x float > %b
161
+ ret <4 x float > %v
162
+ }
163
+
164
+ define <4 x float > @selectcc_v4f32 (float %a , float %b , <4 x float > %c , <4 x float > %d ) {
165
+ ; CHECK-LABEL: selectcc_v4f32:
166
+ ; CHECK: # %bb.0:
167
+ ; CHECK-NEXT: feq.s a0, fa0, fa1
168
+ ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
169
+ ; CHECK-NEXT: vmv.v.x v10, a0
170
+ ; CHECK-NEXT: vmsne.vi v0, v10, 0
171
+ ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
172
+ ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
173
+ ; CHECK-NEXT: ret
174
+ %cmp = fcmp oeq float %a , %b
175
+ %v = select i1 %cmp , <4 x float > %c , <4 x float > %d
176
+ ret <4 x float > %v
177
+ }
178
+
179
+ define <8 x float > @select_v8f32 (i1 zeroext %c , <8 x float > %a , <8 x float > %b ) {
180
+ ; CHECK-LABEL: select_v8f32:
181
+ ; CHECK: # %bb.0:
182
+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
183
+ ; CHECK-NEXT: vmv.v.x v12, a0
184
+ ; CHECK-NEXT: vmsne.vi v0, v12, 0
185
+ ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
186
+ ; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0
187
+ ; CHECK-NEXT: ret
188
+ %v = select i1 %c , <8 x float > %a , <8 x float > %b
189
+ ret <8 x float > %v
190
+ }
191
+
192
+ define <8 x float > @selectcc_v8f32 (float %a , float %b , <8 x float > %c , <8 x float > %d ) {
193
+ ; CHECK-LABEL: selectcc_v8f32:
194
+ ; CHECK: # %bb.0:
195
+ ; CHECK-NEXT: feq.s a0, fa0, fa1
196
+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
197
+ ; CHECK-NEXT: vmv.v.x v12, a0
198
+ ; CHECK-NEXT: vmsne.vi v0, v12, 0
199
+ ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
200
+ ; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0
201
+ ; CHECK-NEXT: ret
202
+ %cmp = fcmp oeq float %a , %b
203
+ %v = select i1 %cmp , <8 x float > %c , <8 x float > %d
204
+ ret <8 x float > %v
205
+ }
206
+
207
+ define <16 x float > @select_v16f32 (i1 zeroext %c , <16 x float > %a , <16 x float > %b ) {
208
+ ; CHECK-LABEL: select_v16f32:
209
+ ; CHECK: # %bb.0:
210
+ ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
211
+ ; CHECK-NEXT: vmv.v.x v16, a0
212
+ ; CHECK-NEXT: vmsne.vi v0, v16, 0
213
+ ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
214
+ ; CHECK-NEXT: vmerge.vvm v8, v12, v8, v0
215
+ ; CHECK-NEXT: ret
216
+ %v = select i1 %c , <16 x float > %a , <16 x float > %b
217
+ ret <16 x float > %v
218
+ }
219
+
220
+ define <16 x float > @selectcc_v16f32 (float %a , float %b , <16 x float > %c , <16 x float > %d ) {
221
+ ; CHECK-LABEL: selectcc_v16f32:
222
+ ; CHECK: # %bb.0:
223
+ ; CHECK-NEXT: feq.s a0, fa0, fa1
224
+ ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
225
+ ; CHECK-NEXT: vmv.v.x v16, a0
226
+ ; CHECK-NEXT: vmsne.vi v0, v16, 0
227
+ ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
228
+ ; CHECK-NEXT: vmerge.vvm v8, v12, v8, v0
229
+ ; CHECK-NEXT: ret
230
+ %cmp = fcmp oeq float %a , %b
231
+ %v = select i1 %cmp , <16 x float > %c , <16 x float > %d
232
+ ret <16 x float > %v
233
+ }
234
+
235
+ define <2 x double > @select_v2f64 (i1 zeroext %c , <2 x double > %a , <2 x double > %b ) {
236
+ ; CHECK-LABEL: select_v2f64:
237
+ ; CHECK: # %bb.0:
238
+ ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
239
+ ; CHECK-NEXT: vmv.v.x v10, a0
240
+ ; CHECK-NEXT: vmsne.vi v0, v10, 0
241
+ ; CHECK-NEXT: vsetvli zero, zero, e64, m1, ta, ma
242
+ ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
243
+ ; CHECK-NEXT: ret
244
+ %v = select i1 %c , <2 x double > %a , <2 x double > %b
245
+ ret <2 x double > %v
246
+ }
247
+
248
+ define <2 x double > @selectcc_v2f64 (double %a , double %b , <2 x double > %c , <2 x double > %d ) {
249
+ ; CHECK-LABEL: selectcc_v2f64:
250
+ ; CHECK: # %bb.0:
251
+ ; CHECK-NEXT: feq.d a0, fa0, fa1
252
+ ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
253
+ ; CHECK-NEXT: vmv.v.x v10, a0
254
+ ; CHECK-NEXT: vmsne.vi v0, v10, 0
255
+ ; CHECK-NEXT: vsetvli zero, zero, e64, m1, ta, ma
256
+ ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
257
+ ; CHECK-NEXT: ret
258
+ %cmp = fcmp oeq double %a , %b
259
+ %v = select i1 %cmp , <2 x double > %c , <2 x double > %d
260
+ ret <2 x double > %v
261
+ }
262
+
263
+ define <4 x double > @select_v4f64 (i1 zeroext %c , <4 x double > %a , <4 x double > %b ) {
264
+ ; CHECK-LABEL: select_v4f64:
265
+ ; CHECK: # %bb.0:
266
+ ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
267
+ ; CHECK-NEXT: vmv.v.x v12, a0
268
+ ; CHECK-NEXT: vmsne.vi v0, v12, 0
269
+ ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
270
+ ; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0
271
+ ; CHECK-NEXT: ret
272
+ %v = select i1 %c , <4 x double > %a , <4 x double > %b
273
+ ret <4 x double > %v
274
+ }
275
+
276
+ define <4 x double > @selectcc_v4f64 (double %a , double %b , <4 x double > %c , <4 x double > %d ) {
277
+ ; CHECK-LABEL: selectcc_v4f64:
278
+ ; CHECK: # %bb.0:
279
+ ; CHECK-NEXT: feq.d a0, fa0, fa1
280
+ ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
281
+ ; CHECK-NEXT: vmv.v.x v12, a0
282
+ ; CHECK-NEXT: vmsne.vi v0, v12, 0
283
+ ; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
284
+ ; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0
285
+ ; CHECK-NEXT: ret
286
+ %cmp = fcmp oeq double %a , %b
287
+ %v = select i1 %cmp , <4 x double > %c , <4 x double > %d
288
+ ret <4 x double > %v
289
+ }
290
+
291
+ define <8 x double > @select_v8f64 (i1 zeroext %c , <8 x double > %a , <8 x double > %b ) {
292
+ ; CHECK-LABEL: select_v8f64:
293
+ ; CHECK: # %bb.0:
294
+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
295
+ ; CHECK-NEXT: vmv.v.x v16, a0
296
+ ; CHECK-NEXT: vmsne.vi v0, v16, 0
297
+ ; CHECK-NEXT: vsetvli zero, zero, e64, m4, ta, ma
298
+ ; CHECK-NEXT: vmerge.vvm v8, v12, v8, v0
299
+ ; CHECK-NEXT: ret
300
+ %v = select i1 %c , <8 x double > %a , <8 x double > %b
301
+ ret <8 x double > %v
302
+ }
303
+
304
+ define <8 x double > @selectcc_v8f64 (double %a , double %b , <8 x double > %c , <8 x double > %d ) {
305
+ ; CHECK-LABEL: selectcc_v8f64:
306
+ ; CHECK: # %bb.0:
307
+ ; CHECK-NEXT: feq.d a0, fa0, fa1
308
+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
309
+ ; CHECK-NEXT: vmv.v.x v16, a0
310
+ ; CHECK-NEXT: vmsne.vi v0, v16, 0
311
+ ; CHECK-NEXT: vsetvli zero, zero, e64, m4, ta, ma
312
+ ; CHECK-NEXT: vmerge.vvm v8, v12, v8, v0
313
+ ; CHECK-NEXT: ret
314
+ %cmp = fcmp oeq double %a , %b
315
+ %v = select i1 %cmp , <8 x double > %c , <8 x double > %d
316
+ ret <8 x double > %v
317
+ }
318
+
319
+ define <16 x double > @select_v16f64 (i1 zeroext %c , <16 x double > %a , <16 x double > %b ) {
320
+ ; CHECK-LABEL: select_v16f64:
321
+ ; CHECK: # %bb.0:
322
+ ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
323
+ ; CHECK-NEXT: vmv.v.x v24, a0
324
+ ; CHECK-NEXT: vmsne.vi v0, v24, 0
325
+ ; CHECK-NEXT: vsetvli zero, zero, e64, m8, ta, ma
326
+ ; CHECK-NEXT: vmerge.vvm v8, v16, v8, v0
327
+ ; CHECK-NEXT: ret
328
+ %v = select i1 %c , <16 x double > %a , <16 x double > %b
329
+ ret <16 x double > %v
330
+ }
331
+
332
+ define <16 x double > @selectcc_v16f64 (double %a , double %b , <16 x double > %c , <16 x double > %d ) {
333
+ ; CHECK-LABEL: selectcc_v16f64:
334
+ ; CHECK: # %bb.0:
335
+ ; CHECK-NEXT: feq.d a0, fa0, fa1
336
+ ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
337
+ ; CHECK-NEXT: vmv.v.x v24, a0
338
+ ; CHECK-NEXT: vmsne.vi v0, v24, 0
339
+ ; CHECK-NEXT: vsetvli zero, zero, e64, m8, ta, ma
340
+ ; CHECK-NEXT: vmerge.vvm v8, v16, v8, v0
341
+ ; CHECK-NEXT: ret
342
+ %cmp = fcmp oeq double %a , %b
343
+ %v = select i1 %cmp , <16 x double > %c , <16 x double > %d
344
+ ret <16 x double > %v
345
+ }
0 commit comments