@@ -317,6 +317,23 @@ define <8 x i8> @constantdiff2(<8 x i8> %a) {
317
317
ret <8 x i8 > %r
318
318
}
319
319
320
+ define <8 x half > @constantsplatf (<8 x half > %a ) {
321
+ ; CHECK-LABEL: @constantsplatf(
322
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x half> [[A:%.*]], <8 x half> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
323
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x half> [[A]], <8 x half> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
324
+ ; CHECK-NEXT: [[ABT:%.*]] = fadd <4 x half> [[AT]], <half 0xH4900, half 0xH4900, half 0xH4900, half 0xH4900>
325
+ ; CHECK-NEXT: [[ABB:%.*]] = fadd <4 x half> [[AB]], <half 0xH4900, half 0xH4900, half 0xH4900, half 0xH4900>
326
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x half> [[ABT]], <4 x half> [[ABB]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
327
+ ; CHECK-NEXT: ret <8 x half> [[R]]
328
+ ;
329
+ %ab = shufflevector <8 x half > %a , <8 x half > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
330
+ %at = shufflevector <8 x half > %a , <8 x half > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
331
+ %abt = fadd <4 x half > %at , <half 10 .0 , half 10 .0 , half 10 .0 , half 10 .0 >
332
+ %abb = fadd <4 x half > %ab , <half 10 .0 , half 10 .0 , half 10 .0 , half 10 .0 >
333
+ %r = shufflevector <4 x half > %abt , <4 x half > %abb , <8 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
334
+ ret <8 x half > %r
335
+ }
336
+
320
337
define <8 x i8 > @inner_shuffle (<8 x i8 > %a , <8 x i8 > %b , <8 x i8 > %c ) {
321
338
; CHECK-LABEL: @inner_shuffle(
322
339
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x i8> [[C:%.*]], <8 x i8> poison, <8 x i32> zeroinitializer
@@ -413,6 +430,72 @@ define <8 x i8> @icmpsel(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i8> %d) {
413
430
ret <8 x i8 > %r
414
431
}
415
432
433
+ define <8 x i8 > @icmpsel_diffentcond (<8 x i8 > %a , <8 x i8 > %b , <8 x i8 > %c , <8 x i8 > %d ) {
434
+ ; CHECK-LABEL: @icmpsel_diffentcond(
435
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x i8> [[A:%.*]], <8 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
436
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
437
+ ; CHECK-NEXT: [[BB:%.*]] = shufflevector <8 x i8> [[B:%.*]], <8 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
438
+ ; CHECK-NEXT: [[BT:%.*]] = shufflevector <8 x i8> [[B]], <8 x i8> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
439
+ ; CHECK-NEXT: [[CB:%.*]] = shufflevector <8 x i8> [[C:%.*]], <8 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
440
+ ; CHECK-NEXT: [[CT:%.*]] = shufflevector <8 x i8> [[C]], <8 x i8> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
441
+ ; CHECK-NEXT: [[DB:%.*]] = shufflevector <8 x i8> [[D:%.*]], <8 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
442
+ ; CHECK-NEXT: [[DT:%.*]] = shufflevector <8 x i8> [[D]], <8 x i8> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
443
+ ; CHECK-NEXT: [[ABT1:%.*]] = icmp slt <4 x i8> [[AT]], [[BT]]
444
+ ; CHECK-NEXT: [[ABB1:%.*]] = icmp ult <4 x i8> [[AB]], [[BB]]
445
+ ; CHECK-NEXT: [[ABT:%.*]] = select <4 x i1> [[ABT1]], <4 x i8> [[CT]], <4 x i8> [[DT]]
446
+ ; CHECK-NEXT: [[ABB:%.*]] = select <4 x i1> [[ABB1]], <4 x i8> [[CB]], <4 x i8> [[DB]]
447
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i8> [[ABT]], <4 x i8> [[ABB]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
448
+ ; CHECK-NEXT: ret <8 x i8> [[R]]
449
+ ;
450
+ %ab = shufflevector <8 x i8 > %a , <8 x i8 > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
451
+ %at = shufflevector <8 x i8 > %a , <8 x i8 > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
452
+ %bb = shufflevector <8 x i8 > %b , <8 x i8 > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
453
+ %bt = shufflevector <8 x i8 > %b , <8 x i8 > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
454
+ %cb = shufflevector <8 x i8 > %c , <8 x i8 > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
455
+ %ct = shufflevector <8 x i8 > %c , <8 x i8 > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
456
+ %db = shufflevector <8 x i8 > %d , <8 x i8 > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
457
+ %dt = shufflevector <8 x i8 > %d , <8 x i8 > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
458
+ %abt1 = icmp slt <4 x i8 > %at , %bt
459
+ %abb1 = icmp ult <4 x i8 > %ab , %bb
460
+ %abt = select <4 x i1 > %abt1 , <4 x i8 > %ct , <4 x i8 > %dt
461
+ %abb = select <4 x i1 > %abb1 , <4 x i8 > %cb , <4 x i8 > %db
462
+ %r = shufflevector <4 x i8 > %abt , <4 x i8 > %abb , <8 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
463
+ ret <8 x i8 > %r
464
+ }
465
+
466
+ define <8 x i8 > @fcmpsel (<8 x half > %a , <8 x half > %b , <8 x i8 > %c , <8 x i8 > %d ) {
467
+ ; CHECK-LABEL: @fcmpsel(
468
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x half> [[A:%.*]], <8 x half> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
469
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x half> [[A]], <8 x half> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
470
+ ; CHECK-NEXT: [[BB:%.*]] = shufflevector <8 x half> [[B:%.*]], <8 x half> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
471
+ ; CHECK-NEXT: [[BT:%.*]] = shufflevector <8 x half> [[B]], <8 x half> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
472
+ ; CHECK-NEXT: [[CB:%.*]] = shufflevector <8 x i8> [[C:%.*]], <8 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
473
+ ; CHECK-NEXT: [[CT:%.*]] = shufflevector <8 x i8> [[C]], <8 x i8> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
474
+ ; CHECK-NEXT: [[DB:%.*]] = shufflevector <8 x i8> [[D:%.*]], <8 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
475
+ ; CHECK-NEXT: [[DT:%.*]] = shufflevector <8 x i8> [[D]], <8 x i8> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
476
+ ; CHECK-NEXT: [[ABT1:%.*]] = fcmp olt <4 x half> [[AT]], [[BT]]
477
+ ; CHECK-NEXT: [[ABB1:%.*]] = fcmp olt <4 x half> [[AB]], [[BB]]
478
+ ; CHECK-NEXT: [[ABT:%.*]] = select <4 x i1> [[ABT1]], <4 x i8> [[CT]], <4 x i8> [[DT]]
479
+ ; CHECK-NEXT: [[ABB:%.*]] = select <4 x i1> [[ABB1]], <4 x i8> [[CB]], <4 x i8> [[DB]]
480
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i8> [[ABT]], <4 x i8> [[ABB]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
481
+ ; CHECK-NEXT: ret <8 x i8> [[R]]
482
+ ;
483
+ %ab = shufflevector <8 x half > %a , <8 x half > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
484
+ %at = shufflevector <8 x half > %a , <8 x half > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
485
+ %bb = shufflevector <8 x half > %b , <8 x half > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
486
+ %bt = shufflevector <8 x half > %b , <8 x half > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
487
+ %cb = shufflevector <8 x i8 > %c , <8 x i8 > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
488
+ %ct = shufflevector <8 x i8 > %c , <8 x i8 > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
489
+ %db = shufflevector <8 x i8 > %d , <8 x i8 > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
490
+ %dt = shufflevector <8 x i8 > %d , <8 x i8 > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
491
+ %abt1 = fcmp olt <4 x half > %at , %bt
492
+ %abb1 = fcmp olt <4 x half > %ab , %bb
493
+ %abt = select <4 x i1 > %abt1 , <4 x i8 > %ct , <4 x i8 > %dt
494
+ %abb = select <4 x i1 > %abb1 , <4 x i8 > %cb , <4 x i8 > %db
495
+ %r = shufflevector <4 x i8 > %abt , <4 x i8 > %abb , <8 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
496
+ ret <8 x i8 > %r
497
+ }
498
+
416
499
define <8 x half > @fma (<8 x half > %a , <8 x half > %b , <8 x half > %c ) {
417
500
; CHECK-LABEL: @fma(
418
501
; CHECK-NEXT: [[R:%.*]] = call <8 x half> @llvm.fma.v8f16(<8 x half> [[A:%.*]], <8 x half> [[B:%.*]], <8 x half> [[C:%.*]])
0 commit comments