@@ -156,3 +156,334 @@ define <2 x i16> @trunc_v2i64_arg_to_v2i16(<2 x i64> %arg0) #0 {
156
156
%trunc = trunc <2 x i64 > %arg0 to <2 x i16 >
157
157
ret <2 x i16 > %trunc
158
158
}
159
+
160
+ ; Test for regression where an unnecessary v_alignbit_b32 was inserted
161
+ ; on the final result, due to losing the fact that the upper half of
162
+ ; the lhs vector was undef.
163
+ define <2 x i16 > @vector_trunc_high_bits_undef_lshr_lhs_alignbit_regression (i32 %arg0 ) {
164
+ ; SI-LABEL: vector_trunc_high_bits_undef_lshr_lhs_alignbit_regression:
165
+ ; SI: ; %bb.0:
166
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
167
+ ; SI-NEXT: v_lshrrev_b32_e32 v0, 16, v0
168
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
169
+ ; SI-NEXT: s_setpc_b64 s[30:31]
170
+ ;
171
+ ; VI-LABEL: vector_trunc_high_bits_undef_lshr_lhs_alignbit_regression:
172
+ ; VI: ; %bb.0:
173
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
174
+ ; VI-NEXT: v_lshrrev_b32_e32 v0, 16, v0
175
+ ; VI-NEXT: s_setpc_b64 s[30:31]
176
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
177
+ %lshr = lshr <2 x i32 > %undef.hi.elt , splat (i32 16 )
178
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
179
+ ret <2 x i16 > %trunc
180
+ }
181
+
182
+ define <2 x i16 > @vector_trunc_high_bits_undef_lshr_rhs_alignbit_regression (i32 %arg0 ) {
183
+ ; SI-LABEL: vector_trunc_high_bits_undef_lshr_rhs_alignbit_regression:
184
+ ; SI: ; %bb.0:
185
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
186
+ ; SI-NEXT: v_lshr_b32_e32 v0, 16, v0
187
+ ; SI-NEXT: s_setpc_b64 s[30:31]
188
+ ;
189
+ ; VI-LABEL: vector_trunc_high_bits_undef_lshr_rhs_alignbit_regression:
190
+ ; VI: ; %bb.0:
191
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
192
+ ; VI-NEXT: v_lshrrev_b32_e64 v0, v0, 16
193
+ ; VI-NEXT: s_setpc_b64 s[30:31]
194
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
195
+ %lshr = lshr <2 x i32 > splat (i32 16 ), %undef.hi.elt
196
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
197
+ ret <2 x i16 > %trunc
198
+ }
199
+
200
+ define <2 x i16 > @vector_trunc_high_bits_undef_ashr_lhs_alignbit_regression (i32 %arg0 ) {
201
+ ; SI-LABEL: vector_trunc_high_bits_undef_ashr_lhs_alignbit_regression:
202
+ ; SI: ; %bb.0:
203
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
204
+ ; SI-NEXT: v_lshrrev_b32_e32 v0, 16, v0
205
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
206
+ ; SI-NEXT: s_setpc_b64 s[30:31]
207
+ ;
208
+ ; VI-LABEL: vector_trunc_high_bits_undef_ashr_lhs_alignbit_regression:
209
+ ; VI: ; %bb.0:
210
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
211
+ ; VI-NEXT: v_lshrrev_b32_e32 v0, 16, v0
212
+ ; VI-NEXT: s_setpc_b64 s[30:31]
213
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
214
+ %ashr = ashr <2 x i32 > %undef.hi.elt , splat (i32 16 )
215
+ %trunc = trunc <2 x i32 > %ashr to <2 x i16 >
216
+ ret <2 x i16 > %trunc
217
+ }
218
+
219
+ define <2 x i16 > @vector_trunc_high_bits_undef_ashr_rhs_alignbit_regression (i32 %arg0 ) {
220
+ ; SI-LABEL: vector_trunc_high_bits_undef_ashr_rhs_alignbit_regression:
221
+ ; SI: ; %bb.0:
222
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
223
+ ; SI-NEXT: v_ashr_i32_e32 v0, -4, v0
224
+ ; SI-NEXT: v_and_b32_e32 v0, 0xffff, v0
225
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
226
+ ; SI-NEXT: s_setpc_b64 s[30:31]
227
+ ;
228
+ ; VI-LABEL: vector_trunc_high_bits_undef_ashr_rhs_alignbit_regression:
229
+ ; VI: ; %bb.0:
230
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
231
+ ; VI-NEXT: v_ashrrev_i32_e64 v0, v0, -4
232
+ ; VI-NEXT: s_setpc_b64 s[30:31]
233
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
234
+ %lshr = ashr <2 x i32 > splat (i32 -4 ), %undef.hi.elt
235
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
236
+ ret <2 x i16 > %trunc
237
+ }
238
+
239
+ define <2 x i16 > @vector_trunc_high_bits_undef_add_lhs_alignbit_regression (i32 %arg0 ) {
240
+ ; SI-LABEL: vector_trunc_high_bits_undef_add_lhs_alignbit_regression:
241
+ ; SI: ; %bb.0:
242
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
243
+ ; SI-NEXT: v_add_i32_e32 v0, vcc, 16, v0
244
+ ; SI-NEXT: v_and_b32_e32 v0, 0xffff, v0
245
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
246
+ ; SI-NEXT: s_setpc_b64 s[30:31]
247
+ ;
248
+ ; VI-LABEL: vector_trunc_high_bits_undef_add_lhs_alignbit_regression:
249
+ ; VI: ; %bb.0:
250
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
251
+ ; VI-NEXT: v_add_u32_e32 v0, vcc, 16, v0
252
+ ; VI-NEXT: s_setpc_b64 s[30:31]
253
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
254
+ %lshr = add <2 x i32 > %undef.hi.elt , splat (i32 16 )
255
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
256
+ ret <2 x i16 > %trunc
257
+ }
258
+
259
+ define <2 x i16 > @vector_trunc_high_bits_undef_shl_rhs_alignbit_regression (i32 %arg0 ) {
260
+ ; SI-LABEL: vector_trunc_high_bits_undef_shl_rhs_alignbit_regression:
261
+ ; SI: ; %bb.0:
262
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
263
+ ; SI-NEXT: v_lshl_b32_e32 v0, 2, v0
264
+ ; SI-NEXT: v_and_b32_e32 v0, 0xfffe, v0
265
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
266
+ ; SI-NEXT: s_setpc_b64 s[30:31]
267
+ ;
268
+ ; VI-LABEL: vector_trunc_high_bits_undef_shl_rhs_alignbit_regression:
269
+ ; VI: ; %bb.0:
270
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
271
+ ; VI-NEXT: v_lshlrev_b32_e64 v0, v0, 2
272
+ ; VI-NEXT: s_setpc_b64 s[30:31]
273
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
274
+ %lshr = shl <2 x i32 > splat (i32 2 ), %undef.hi.elt
275
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
276
+ ret <2 x i16 > %trunc
277
+ }
278
+
279
+ define <2 x i16 > @vector_trunc_high_bits_undef_sub_lhs_alignbit_regression (i32 %arg0 ) {
280
+ ; SI-LABEL: vector_trunc_high_bits_undef_sub_lhs_alignbit_regression:
281
+ ; SI: ; %bb.0:
282
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
283
+ ; SI-NEXT: v_add_i32_e32 v0, vcc, -16, v0
284
+ ; SI-NEXT: v_and_b32_e32 v0, 0xffff, v0
285
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
286
+ ; SI-NEXT: s_setpc_b64 s[30:31]
287
+ ;
288
+ ; VI-LABEL: vector_trunc_high_bits_undef_sub_lhs_alignbit_regression:
289
+ ; VI: ; %bb.0:
290
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
291
+ ; VI-NEXT: v_add_u32_e32 v0, vcc, -16, v0
292
+ ; VI-NEXT: s_setpc_b64 s[30:31]
293
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
294
+ %lshr = sub <2 x i32 > %undef.hi.elt , splat (i32 16 )
295
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
296
+ ret <2 x i16 > %trunc
297
+ }
298
+
299
+ define <2 x i16 > @vector_trunc_high_bits_undef_or_lhs_alignbit_regression (i32 %arg0 ) {
300
+ ; SI-LABEL: vector_trunc_high_bits_undef_or_lhs_alignbit_regression:
301
+ ; SI: ; %bb.0:
302
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
303
+ ; SI-NEXT: v_or_b32_e32 v0, 0xffff0011, v0
304
+ ; SI-NEXT: v_mov_b32_e32 v1, 0xffff
305
+ ; SI-NEXT: s_setpc_b64 s[30:31]
306
+ ;
307
+ ; VI-LABEL: vector_trunc_high_bits_undef_or_lhs_alignbit_regression:
308
+ ; VI: ; %bb.0:
309
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
310
+ ; VI-NEXT: v_or_b32_e32 v0, 0xffff0011, v0
311
+ ; VI-NEXT: s_setpc_b64 s[30:31]
312
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
313
+ %lshr = or <2 x i32 > %undef.hi.elt , splat (i32 17 )
314
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
315
+ ret <2 x i16 > %trunc
316
+ }
317
+
318
+ define <2 x i16 > @vector_trunc_high_bits_undef_xor_lhs_alignbit_regression (i32 %arg0 ) {
319
+ ; SI-LABEL: vector_trunc_high_bits_undef_xor_lhs_alignbit_regression:
320
+ ; SI: ; %bb.0:
321
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
322
+ ; SI-NEXT: v_xor_b32_e32 v0, 17, v0
323
+ ; SI-NEXT: v_and_b32_e32 v0, 0xffff, v0
324
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
325
+ ; SI-NEXT: s_setpc_b64 s[30:31]
326
+ ;
327
+ ; VI-LABEL: vector_trunc_high_bits_undef_xor_lhs_alignbit_regression:
328
+ ; VI: ; %bb.0:
329
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
330
+ ; VI-NEXT: v_xor_b32_e32 v0, 17, v0
331
+ ; VI-NEXT: s_setpc_b64 s[30:31]
332
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
333
+ %lshr = xor <2 x i32 > %undef.hi.elt , splat (i32 17 )
334
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
335
+ ret <2 x i16 > %trunc
336
+ }
337
+
338
+ define <2 x i16 > @vector_trunc_high_bits_undef_shl_lhs_alignbit_regression (i32 %arg0 ) {
339
+ ; SI-LABEL: vector_trunc_high_bits_undef_shl_lhs_alignbit_regression:
340
+ ; SI: ; %bb.0:
341
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
342
+ ; SI-NEXT: v_lshlrev_b32_e32 v0, 2, v0
343
+ ; SI-NEXT: v_and_b32_e32 v0, 0xfffc, v0
344
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
345
+ ; SI-NEXT: s_setpc_b64 s[30:31]
346
+ ;
347
+ ; VI-LABEL: vector_trunc_high_bits_undef_shl_lhs_alignbit_regression:
348
+ ; VI: ; %bb.0:
349
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
350
+ ; VI-NEXT: v_lshlrev_b16_e32 v0, 2, v0
351
+ ; VI-NEXT: s_setpc_b64 s[30:31]
352
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
353
+ %shl = shl <2 x i32 > %undef.hi.elt , splat (i32 2 )
354
+ %trunc = trunc <2 x i32 > %shl to <2 x i16 >
355
+ ret <2 x i16 > %trunc
356
+ }
357
+
358
+ define <2 x i16 > @vector_trunc_high_bits_undef_mul_lhs_alignbit_regression (i32 %arg0 ) {
359
+ ; SI-LABEL: vector_trunc_high_bits_undef_mul_lhs_alignbit_regression:
360
+ ; SI: ; %bb.0:
361
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
362
+ ; SI-NEXT: v_mul_lo_u32 v0, v0, 18
363
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
364
+ ; SI-NEXT: v_and_b32_e32 v0, 0xfffe, v0
365
+ ; SI-NEXT: s_setpc_b64 s[30:31]
366
+ ;
367
+ ; VI-LABEL: vector_trunc_high_bits_undef_mul_lhs_alignbit_regression:
368
+ ; VI: ; %bb.0:
369
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
370
+ ; VI-NEXT: v_mul_lo_u32 v0, v0, 18
371
+ ; VI-NEXT: v_and_b32_e32 v0, 0xfffe, v0
372
+ ; VI-NEXT: s_setpc_b64 s[30:31]
373
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
374
+ %lshr = mul <2 x i32 > %undef.hi.elt , splat (i32 18 )
375
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
376
+ ret <2 x i16 > %trunc
377
+ }
378
+
379
+ define <2 x i16 > @vector_trunc_high_bits_undef_sdiv_lhs_alignbit_regression (i32 %arg0 ) {
380
+ ; SI-LABEL: vector_trunc_high_bits_undef_sdiv_lhs_alignbit_regression:
381
+ ; SI: ; %bb.0:
382
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
383
+ ; SI-NEXT: s_mov_b32 s4, 0x38e38e39
384
+ ; SI-NEXT: v_mul_hi_i32 v0, v0, s4
385
+ ; SI-NEXT: v_lshrrev_b32_e32 v1, 31, v0
386
+ ; SI-NEXT: v_lshrrev_b32_e32 v0, 2, v0
387
+ ; SI-NEXT: v_add_i32_e32 v0, vcc, v0, v1
388
+ ; SI-NEXT: v_and_b32_e32 v0, 0xffff, v0
389
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
390
+ ; SI-NEXT: s_setpc_b64 s[30:31]
391
+ ;
392
+ ; VI-LABEL: vector_trunc_high_bits_undef_sdiv_lhs_alignbit_regression:
393
+ ; VI: ; %bb.0:
394
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
395
+ ; VI-NEXT: s_mov_b32 s4, 0x38e38e39
396
+ ; VI-NEXT: v_mul_hi_i32 v0, v0, s4
397
+ ; VI-NEXT: v_lshrrev_b32_e32 v1, 31, v0
398
+ ; VI-NEXT: v_ashrrev_i32_e32 v0, 2, v0
399
+ ; VI-NEXT: v_add_u32_e32 v0, vcc, v0, v1
400
+ ; VI-NEXT: s_setpc_b64 s[30:31]
401
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
402
+ %lshr = sdiv <2 x i32 > %undef.hi.elt , splat (i32 18 )
403
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
404
+ ret <2 x i16 > %trunc
405
+ }
406
+
407
+ define <2 x i16 > @vector_trunc_high_bits_undef_srem_lhs_alignbit_regression (i32 %arg0 ) {
408
+ ; SI-LABEL: vector_trunc_high_bits_undef_srem_lhs_alignbit_regression:
409
+ ; SI: ; %bb.0:
410
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
411
+ ; SI-NEXT: s_mov_b32 s4, 0x38e38e39
412
+ ; SI-NEXT: v_mul_hi_i32 v1, v0, s4
413
+ ; SI-NEXT: v_lshrrev_b32_e32 v2, 31, v1
414
+ ; SI-NEXT: v_lshrrev_b32_e32 v1, 2, v1
415
+ ; SI-NEXT: v_add_i32_e32 v1, vcc, v1, v2
416
+ ; SI-NEXT: v_mul_lo_u32 v1, v1, 18
417
+ ; SI-NEXT: v_sub_i32_e32 v0, vcc, v0, v1
418
+ ; SI-NEXT: v_and_b32_e32 v0, 0xffff, v0
419
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
420
+ ; SI-NEXT: s_setpc_b64 s[30:31]
421
+ ;
422
+ ; VI-LABEL: vector_trunc_high_bits_undef_srem_lhs_alignbit_regression:
423
+ ; VI: ; %bb.0:
424
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
425
+ ; VI-NEXT: s_mov_b32 s4, 0x38e38e39
426
+ ; VI-NEXT: v_mul_hi_i32 v1, v0, s4
427
+ ; VI-NEXT: v_lshrrev_b32_e32 v2, 31, v1
428
+ ; VI-NEXT: v_ashrrev_i32_e32 v1, 2, v1
429
+ ; VI-NEXT: v_add_u32_e32 v1, vcc, v1, v2
430
+ ; VI-NEXT: v_mul_lo_u32 v1, v1, 18
431
+ ; VI-NEXT: v_sub_u32_e32 v0, vcc, v0, v1
432
+ ; VI-NEXT: s_setpc_b64 s[30:31]
433
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
434
+ %lshr = srem <2 x i32 > %undef.hi.elt , splat (i32 18 )
435
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
436
+ ret <2 x i16 > %trunc
437
+ }
438
+
439
+
440
+ define <2 x i16 > @vector_trunc_high_bits_undef_udiv_lhs_alignbit_regression (i32 %arg0 ) {
441
+ ; SI-LABEL: vector_trunc_high_bits_undef_udiv_lhs_alignbit_regression:
442
+ ; SI: ; %bb.0:
443
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
444
+ ; SI-NEXT: s_mov_b32 s4, 0x38e38e39
445
+ ; SI-NEXT: v_mul_hi_u32 v0, v0, s4
446
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
447
+ ; SI-NEXT: v_bfe_u32 v0, v0, 2, 16
448
+ ; SI-NEXT: s_setpc_b64 s[30:31]
449
+ ;
450
+ ; VI-LABEL: vector_trunc_high_bits_undef_udiv_lhs_alignbit_regression:
451
+ ; VI: ; %bb.0:
452
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
453
+ ; VI-NEXT: s_mov_b32 s4, 0x38e38e39
454
+ ; VI-NEXT: v_mul_hi_u32 v0, v0, s4
455
+ ; VI-NEXT: v_lshrrev_b32_e32 v0, 2, v0
456
+ ; VI-NEXT: s_setpc_b64 s[30:31]
457
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
458
+ %lshr = udiv <2 x i32 > %undef.hi.elt , splat (i32 18 )
459
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
460
+ ret <2 x i16 > %trunc
461
+ }
462
+
463
+ define <2 x i16 > @vector_trunc_high_bits_undef_urem_lhs_alignbit_regression (i32 %arg0 ) {
464
+ ; SI-LABEL: vector_trunc_high_bits_undef_urem_lhs_alignbit_regression:
465
+ ; SI: ; %bb.0:
466
+ ; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
467
+ ; SI-NEXT: s_mov_b32 s4, 0x38e38e39
468
+ ; SI-NEXT: v_mul_hi_u32 v1, v0, s4
469
+ ; SI-NEXT: v_lshrrev_b32_e32 v1, 2, v1
470
+ ; SI-NEXT: v_mul_lo_u32 v1, v1, 18
471
+ ; SI-NEXT: v_sub_i32_e32 v0, vcc, v0, v1
472
+ ; SI-NEXT: v_and_b32_e32 v0, 0xffff, v0
473
+ ; SI-NEXT: v_mov_b32_e32 v1, 0
474
+ ; SI-NEXT: s_setpc_b64 s[30:31]
475
+ ;
476
+ ; VI-LABEL: vector_trunc_high_bits_undef_urem_lhs_alignbit_regression:
477
+ ; VI: ; %bb.0:
478
+ ; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
479
+ ; VI-NEXT: s_mov_b32 s4, 0x38e38e39
480
+ ; VI-NEXT: v_mul_hi_u32 v1, v0, s4
481
+ ; VI-NEXT: v_lshrrev_b32_e32 v1, 2, v1
482
+ ; VI-NEXT: v_mul_lo_u32 v1, v1, 18
483
+ ; VI-NEXT: v_sub_u32_e32 v0, vcc, v0, v1
484
+ ; VI-NEXT: s_setpc_b64 s[30:31]
485
+ %undef.hi.elt = insertelement <2 x i32 > poison, i32 %arg0 , i32 0
486
+ %lshr = urem <2 x i32 > %undef.hi.elt , splat (i32 18 )
487
+ %trunc = trunc <2 x i32 > %lshr to <2 x i16 >
488
+ ret <2 x i16 > %trunc
489
+ }
0 commit comments