@@ -465,6 +465,125 @@ define void @exttrunc(<8 x i32> %a, <8 x i32> %b, ptr %p) {
465
465
ret void
466
466
}
467
467
468
+ define void @zext (<8 x i16 > %a , <8 x i16 > %b , ptr %p ) {
469
+ ; CHECK-LABEL: @zext(
470
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
471
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
472
+ ; CHECK-NEXT: [[BB:%.*]] = shufflevector <8 x i16> [[B:%.*]], <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
473
+ ; CHECK-NEXT: [[BT:%.*]] = shufflevector <8 x i16> [[B]], <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
474
+ ; CHECK-NEXT: [[AB1:%.*]] = zext <4 x i16> [[AB]] to <4 x i32>
475
+ ; CHECK-NEXT: [[AT1:%.*]] = zext <4 x i16> [[AT]] to <4 x i32>
476
+ ; CHECK-NEXT: [[BB1:%.*]] = zext <4 x i16> [[BB]] to <4 x i32>
477
+ ; CHECK-NEXT: [[BT1:%.*]] = zext <4 x i16> [[BT]] to <4 x i32>
478
+ ; CHECK-NEXT: [[ABB:%.*]] = add <4 x i32> [[AB1]], [[BB1]]
479
+ ; CHECK-NEXT: [[ABT:%.*]] = add <4 x i32> [[AT1]], [[BT1]]
480
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i32> [[ABB]], <4 x i32> [[ABT]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
481
+ ; CHECK-NEXT: store <8 x i32> [[R]], ptr [[P:%.*]], align 32
482
+ ; CHECK-NEXT: ret void
483
+ ;
484
+ %ab = shufflevector <8 x i16 > %a , <8 x i16 > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
485
+ %at = shufflevector <8 x i16 > %a , <8 x i16 > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
486
+ %bb = shufflevector <8 x i16 > %b , <8 x i16 > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
487
+ %bt = shufflevector <8 x i16 > %b , <8 x i16 > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
488
+ %ab1 = zext <4 x i16 > %ab to <4 x i32 >
489
+ %at1 = zext <4 x i16 > %at to <4 x i32 >
490
+ %bb1 = zext <4 x i16 > %bb to <4 x i32 >
491
+ %bt1 = zext <4 x i16 > %bt to <4 x i32 >
492
+ %abb = add <4 x i32 > %ab1 , %bb1
493
+ %abt = add <4 x i32 > %at1 , %bt1
494
+ %r = shufflevector <4 x i32 > %abb , <4 x i32 > %abt , <8 x i32 > <i32 0 , i32 4 , i32 1 , i32 5 , i32 2 , i32 6 , i32 3 , i32 7 >
495
+ store <8 x i32 > %r , ptr %p
496
+ ret void
497
+ }
498
+
499
+ define void @sext (<8 x i16 > %a , <8 x i16 > %b , ptr %p ) {
500
+ ; CHECK-LABEL: @sext(
501
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
502
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
503
+ ; CHECK-NEXT: [[BB:%.*]] = shufflevector <8 x i16> [[B:%.*]], <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
504
+ ; CHECK-NEXT: [[BT:%.*]] = shufflevector <8 x i16> [[B]], <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
505
+ ; CHECK-NEXT: [[AB1:%.*]] = sext <4 x i16> [[AB]] to <4 x i32>
506
+ ; CHECK-NEXT: [[AT1:%.*]] = sext <4 x i16> [[AT]] to <4 x i32>
507
+ ; CHECK-NEXT: [[BB1:%.*]] = sext <4 x i16> [[BB]] to <4 x i32>
508
+ ; CHECK-NEXT: [[BT1:%.*]] = sext <4 x i16> [[BT]] to <4 x i32>
509
+ ; CHECK-NEXT: [[ABB:%.*]] = add <4 x i32> [[AB1]], [[BB1]]
510
+ ; CHECK-NEXT: [[ABT:%.*]] = add <4 x i32> [[AT1]], [[BT1]]
511
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i32> [[ABB]], <4 x i32> [[ABT]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
512
+ ; CHECK-NEXT: store <8 x i32> [[R]], ptr [[P:%.*]], align 32
513
+ ; CHECK-NEXT: ret void
514
+ ;
515
+ %ab = shufflevector <8 x i16 > %a , <8 x i16 > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
516
+ %at = shufflevector <8 x i16 > %a , <8 x i16 > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
517
+ %bb = shufflevector <8 x i16 > %b , <8 x i16 > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
518
+ %bt = shufflevector <8 x i16 > %b , <8 x i16 > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
519
+ %ab1 = sext <4 x i16 > %ab to <4 x i32 >
520
+ %at1 = sext <4 x i16 > %at to <4 x i32 >
521
+ %bb1 = sext <4 x i16 > %bb to <4 x i32 >
522
+ %bt1 = sext <4 x i16 > %bt to <4 x i32 >
523
+ %abb = add <4 x i32 > %ab1 , %bb1
524
+ %abt = add <4 x i32 > %at1 , %bt1
525
+ %r = shufflevector <4 x i32 > %abb , <4 x i32 > %abt , <8 x i32 > <i32 0 , i32 4 , i32 1 , i32 5 , i32 2 , i32 6 , i32 3 , i32 7 >
526
+ store <8 x i32 > %r , ptr %p
527
+ ret void
528
+ }
529
+
530
+ define void @szext (<8 x i32 > %a , <8 x i32 > %b , ptr %p ) {
531
+ ; CHECK-LABEL: @szext(
532
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
533
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
534
+ ; CHECK-NEXT: [[AB1:%.*]] = sext <4 x i32> [[AB]] to <4 x i64>
535
+ ; CHECK-NEXT: [[AT1:%.*]] = zext <4 x i32> [[AT]] to <4 x i64>
536
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i64> [[AB1]], <4 x i64> [[AT1]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
537
+ ; CHECK-NEXT: store <8 x i64> [[R]], ptr [[P:%.*]], align 64
538
+ ; CHECK-NEXT: ret void
539
+ ;
540
+ %ab = shufflevector <8 x i32 > %a , <8 x i32 > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
541
+ %at = shufflevector <8 x i32 > %a , <8 x i32 > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
542
+ %ab1 = sext <4 x i32 > %ab to <4 x i64 >
543
+ %at1 = zext <4 x i32 > %at to <4 x i64 >
544
+ %r = shufflevector <4 x i64 > %ab1 , <4 x i64 > %at1 , <8 x i32 > <i32 0 , i32 4 , i32 1 , i32 5 , i32 2 , i32 6 , i32 3 , i32 7 >
545
+ store <8 x i64 > %r , ptr %p
546
+ ret void
547
+ }
548
+
549
+ define void @zext_types (<8 x i16 > %a , <8 x i32 > %b , ptr %p ) {
550
+ ; CHECK-LABEL: @zext_types(
551
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
552
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x i32> [[B:%.*]], <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
553
+ ; CHECK-NEXT: [[AB1:%.*]] = zext <4 x i16> [[AB]] to <4 x i64>
554
+ ; CHECK-NEXT: [[AT1:%.*]] = zext <4 x i32> [[AT]] to <4 x i64>
555
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i64> [[AB1]], <4 x i64> [[AT1]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
556
+ ; CHECK-NEXT: store <8 x i64> [[R]], ptr [[P:%.*]], align 64
557
+ ; CHECK-NEXT: ret void
558
+ ;
559
+ %ab = shufflevector <8 x i16 > %a , <8 x i16 > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
560
+ %at = shufflevector <8 x i32 > %b , <8 x i32 > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
561
+ %ab1 = zext <4 x i16 > %ab to <4 x i64 >
562
+ %at1 = zext <4 x i32 > %at to <4 x i64 >
563
+ %r = shufflevector <4 x i64 > %ab1 , <4 x i64 > %at1 , <8 x i32 > <i32 0 , i32 4 , i32 1 , i32 5 , i32 2 , i32 6 , i32 3 , i32 7 >
564
+ store <8 x i64 > %r , ptr %p
565
+ ret void
566
+ }
567
+
568
+ define void @trunc (<8 x i64 > %a , <8 x i64 > %b , ptr %p ) {
569
+ ; CHECK-LABEL: @trunc(
570
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x i64> [[A:%.*]], <8 x i64> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
571
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x i64> [[A]], <8 x i64> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
572
+ ; CHECK-NEXT: [[ABB1:%.*]] = trunc <4 x i64> [[AB]] to <4 x i32>
573
+ ; CHECK-NEXT: [[ABT1:%.*]] = trunc <4 x i64> [[AT]] to <4 x i32>
574
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i32> [[ABB1]], <4 x i32> [[ABT1]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
575
+ ; CHECK-NEXT: store <8 x i32> [[R]], ptr [[P:%.*]], align 32
576
+ ; CHECK-NEXT: ret void
577
+ ;
578
+ %ab = shufflevector <8 x i64 > %a , <8 x i64 > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
579
+ %at = shufflevector <8 x i64 > %a , <8 x i64 > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
580
+ %abb1 = trunc <4 x i64 > %ab to <4 x i32 >
581
+ %abt1 = trunc <4 x i64 > %at to <4 x i32 >
582
+ %r = shufflevector <4 x i32 > %abb1 , <4 x i32 > %abt1 , <8 x i32 > <i32 0 , i32 4 , i32 1 , i32 5 , i32 2 , i32 6 , i32 3 , i32 7 >
583
+ store <8 x i32 > %r , ptr %p
584
+ ret void
585
+ }
586
+
468
587
define <8 x i8 > @intrinsics_minmax (<8 x i8 > %a , <8 x i8 > %b ) {
469
588
; CHECK-LABEL: @intrinsics_minmax(
470
589
; CHECK-NEXT: [[TMP1:%.*]] = call <8 x i8> @llvm.smin.v8i8(<8 x i8> [[A:%.*]], <8 x i8> [[B:%.*]])
@@ -624,4 +743,26 @@ entry:
624
743
ret void
625
744
}
626
745
746
+ define <4 x i8 > @singleop (<4 x i8 > %a , <4 x i8 > %b ) {
747
+ ; CHECK-LABEL: @singleop(
748
+ ; CHECK-NEXT: [[A1:%.*]] = shufflevector <4 x i8> [[A:%.*]], <4 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
749
+ ; CHECK-NEXT: [[B1:%.*]] = shufflevector <4 x i8> [[B:%.*]], <4 x i8> poison, <4 x i32> zeroinitializer
750
+ ; CHECK-NEXT: [[A2:%.*]] = zext <4 x i8> [[A1]] to <4 x i16>
751
+ ; CHECK-NEXT: [[B2:%.*]] = zext <4 x i8> [[B1]] to <4 x i16>
752
+ ; CHECK-NEXT: [[AB:%.*]] = add <4 x i16> [[A2]], [[B2]]
753
+ ; CHECK-NEXT: [[T:%.*]] = trunc <4 x i16> [[AB]] to <4 x i8>
754
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i8> [[T]], <4 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
755
+ ; CHECK-NEXT: ret <4 x i8> [[R]]
756
+ ;
757
+ %a1 = shufflevector <4 x i8 > %a , <4 x i8 > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
758
+ %b1 = shufflevector <4 x i8 > %b , <4 x i8 > poison, <4 x i32 > <i32 0 , i32 0 , i32 0 , i32 0 >
759
+ %a2 = zext <4 x i8 > %a1 to <4 x i16 >
760
+ %b2 = zext <4 x i8 > %b1 to <4 x i16 >
761
+ %ab = add <4 x i16 > %a2 , %b2
762
+ %t = trunc <4 x i16 > %ab to <4 x i8 >
763
+ %r = shufflevector <4 x i8 > %t , <4 x i8 > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
764
+ ret <4 x i8 > %r
765
+ }
766
+
767
+
627
768
declare void @use (<4 x i8 >)
0 commit comments