@@ -465,130 +465,90 @@ vector.ph:
465
465
ret <32 x i8 > %res
466
466
}
467
467
468
- ; FIXME: match this to UMIN+TRUNC+PSUBUS
469
468
define <8 x i16 > @test13 (<8 x i16 > %x , <8 x i32 > %y ) nounwind {
470
469
; SSE2-LABEL: test13:
471
470
; SSE2: # %bb.0: # %vector.ph
472
- ; SSE2-NEXT: pxor %xmm3, %xmm3
473
- ; SSE2-NEXT: movdqa %xmm0, %xmm4
474
- ; SSE2-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3]
475
- ; SSE2-NEXT: movdqa %xmm0, %xmm5
476
- ; SSE2-NEXT: punpckhwd {{.*#+}} xmm5 = xmm5[4],xmm3[4],xmm5[5],xmm3[5],xmm5[6],xmm3[6],xmm5[7],xmm3[7]
477
- ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
478
- ; SSE2-NEXT: movdqa %xmm2, %xmm7
479
- ; SSE2-NEXT: pxor %xmm6, %xmm7
480
- ; SSE2-NEXT: por %xmm6, %xmm5
481
- ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
482
- ; SSE2-NEXT: movdqa %xmm1, %xmm3
483
- ; SSE2-NEXT: pxor %xmm6, %xmm3
484
- ; SSE2-NEXT: por %xmm6, %xmm4
485
- ; SSE2-NEXT: pcmpgtd %xmm4, %xmm3
486
- ; SSE2-NEXT: packssdw %xmm7, %xmm3
487
- ; SSE2-NEXT: pslld $16, %xmm2
488
- ; SSE2-NEXT: psrad $16, %xmm2
489
- ; SSE2-NEXT: pslld $16, %xmm1
490
- ; SSE2-NEXT: psrad $16, %xmm1
491
- ; SSE2-NEXT: packssdw %xmm2, %xmm1
492
- ; SSE2-NEXT: psubw %xmm1, %xmm0
493
- ; SSE2-NEXT: pandn %xmm0, %xmm3
494
- ; SSE2-NEXT: movdqa %xmm3, %xmm0
471
+ ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
472
+ ; SSE2-NEXT: movdqa %xmm2, %xmm4
473
+ ; SSE2-NEXT: pxor %xmm3, %xmm4
474
+ ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147549183,2147549183,2147549183,2147549183]
475
+ ; SSE2-NEXT: movdqa %xmm5, %xmm6
476
+ ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
477
+ ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
478
+ ; SSE2-NEXT: pand %xmm6, %xmm2
479
+ ; SSE2-NEXT: pxor %xmm4, %xmm6
480
+ ; SSE2-NEXT: por %xmm2, %xmm6
481
+ ; SSE2-NEXT: pslld $16, %xmm6
482
+ ; SSE2-NEXT: psrad $16, %xmm6
483
+ ; SSE2-NEXT: pxor %xmm1, %xmm3
484
+ ; SSE2-NEXT: pcmpgtd %xmm3, %xmm5
485
+ ; SSE2-NEXT: pxor %xmm5, %xmm4
486
+ ; SSE2-NEXT: pand %xmm1, %xmm5
487
+ ; SSE2-NEXT: por %xmm4, %xmm5
488
+ ; SSE2-NEXT: pslld $16, %xmm5
489
+ ; SSE2-NEXT: psrad $16, %xmm5
490
+ ; SSE2-NEXT: packssdw %xmm6, %xmm5
491
+ ; SSE2-NEXT: psubusw %xmm5, %xmm0
495
492
; SSE2-NEXT: retq
496
493
;
497
494
; SSSE3-LABEL: test13:
498
495
; SSSE3: # %bb.0: # %vector.ph
499
- ; SSSE3-NEXT: pxor %xmm3, %xmm3
500
- ; SSSE3-NEXT: movdqa %xmm0, %xmm4
501
- ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3]
502
- ; SSSE3-NEXT: movdqa %xmm0, %xmm5
503
- ; SSSE3-NEXT: punpckhwd {{.*#+}} xmm5 = xmm5[4],xmm3[4],xmm5[5],xmm3[5],xmm5[6],xmm3[6],xmm5[7],xmm3[7]
504
- ; SSSE3-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
505
- ; SSSE3-NEXT: movdqa %xmm2, %xmm7
506
- ; SSSE3-NEXT: pxor %xmm6, %xmm7
507
- ; SSSE3-NEXT: por %xmm6, %xmm5
508
- ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7
509
- ; SSSE3-NEXT: movdqa %xmm1, %xmm3
510
- ; SSSE3-NEXT: pxor %xmm6, %xmm3
511
- ; SSSE3-NEXT: por %xmm6, %xmm4
512
- ; SSSE3-NEXT: pcmpgtd %xmm4, %xmm3
513
- ; SSSE3-NEXT: packssdw %xmm7, %xmm3
514
- ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
515
- ; SSSE3-NEXT: pshufb %xmm4, %xmm2
516
- ; SSSE3-NEXT: pshufb %xmm4, %xmm1
517
- ; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
518
- ; SSSE3-NEXT: psubw %xmm1, %xmm0
519
- ; SSSE3-NEXT: pandn %xmm0, %xmm3
520
- ; SSSE3-NEXT: movdqa %xmm3, %xmm0
496
+ ; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
497
+ ; SSSE3-NEXT: movdqa %xmm2, %xmm4
498
+ ; SSSE3-NEXT: pxor %xmm3, %xmm4
499
+ ; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [2147549183,2147549183,2147549183,2147549183]
500
+ ; SSSE3-NEXT: movdqa %xmm5, %xmm6
501
+ ; SSSE3-NEXT: pcmpgtd %xmm4, %xmm6
502
+ ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [65535,65535,65535,65535]
503
+ ; SSSE3-NEXT: pand %xmm6, %xmm2
504
+ ; SSSE3-NEXT: pandn %xmm4, %xmm6
505
+ ; SSSE3-NEXT: por %xmm2, %xmm6
506
+ ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
507
+ ; SSSE3-NEXT: pshufb %xmm2, %xmm6
508
+ ; SSSE3-NEXT: pxor %xmm1, %xmm3
509
+ ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm5
510
+ ; SSSE3-NEXT: pand %xmm5, %xmm1
511
+ ; SSSE3-NEXT: pandn %xmm4, %xmm5
512
+ ; SSSE3-NEXT: por %xmm1, %xmm5
513
+ ; SSSE3-NEXT: pshufb %xmm2, %xmm5
514
+ ; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
515
+ ; SSSE3-NEXT: psubusw %xmm5, %xmm0
521
516
; SSSE3-NEXT: retq
522
517
;
523
518
; SSE41-LABEL: test13:
524
519
; SSE41: # %bb.0: # %vector.ph
525
- ; SSE41-NEXT: pxor %xmm4, %xmm4
526
- ; SSE41-NEXT: movdqa %xmm0, %xmm3
527
- ; SSE41-NEXT: punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]
528
- ; SSE41-NEXT: pmovzxwd {{.*#+}} xmm5 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
529
- ; SSE41-NEXT: movdqa %xmm3, %xmm6
530
- ; SSE41-NEXT: pmaxud %xmm2, %xmm6
531
- ; SSE41-NEXT: pcmpeqd %xmm3, %xmm6
532
- ; SSE41-NEXT: pcmpeqd %xmm7, %xmm7
533
- ; SSE41-NEXT: pxor %xmm7, %xmm6
534
- ; SSE41-NEXT: movdqa %xmm5, %xmm3
535
- ; SSE41-NEXT: pmaxud %xmm1, %xmm3
536
- ; SSE41-NEXT: pcmpeqd %xmm5, %xmm3
537
- ; SSE41-NEXT: pxor %xmm7, %xmm3
538
- ; SSE41-NEXT: packssdw %xmm6, %xmm3
539
- ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1],xmm2[2],xmm4[3],xmm2[4],xmm4[5],xmm2[6],xmm4[7]
540
- ; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1],xmm1[2],xmm4[3],xmm1[4],xmm4[5],xmm1[6],xmm4[7]
520
+ ; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [65535,65535,65535,65535]
521
+ ; SSE41-NEXT: pminud %xmm3, %xmm2
522
+ ; SSE41-NEXT: pminud %xmm3, %xmm1
541
523
; SSE41-NEXT: packusdw %xmm2, %xmm1
542
- ; SSE41-NEXT: psubw %xmm1, %xmm0
543
- ; SSE41-NEXT: pandn %xmm0, %xmm3
544
- ; SSE41-NEXT: movdqa %xmm3, %xmm0
524
+ ; SSE41-NEXT: psubusw %xmm1, %xmm0
545
525
; SSE41-NEXT: retq
546
526
;
547
527
; AVX1-LABEL: test13:
548
528
; AVX1: # %bb.0: # %vector.ph
549
- ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
550
- ; AVX1-NEXT: vpunpckhwd {{.*#+}} xmm2 = xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
551
- ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
552
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
553
- ; AVX1-NEXT: vpmaxud %xmm4, %xmm2, %xmm5
554
- ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm2, %xmm2
555
- ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
556
- ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
557
- ; AVX1-NEXT: vpmaxud %xmm1, %xmm3, %xmm6
558
- ; AVX1-NEXT: vpcmpeqd %xmm6, %xmm3, %xmm3
559
- ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm3
560
- ; AVX1-NEXT: vpackssdw %xmm2, %xmm3, %xmm2
561
- ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = <0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u>
562
- ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm4
563
- ; AVX1-NEXT: vpshufb %xmm3, %xmm1, %xmm1
564
- ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
565
- ; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm0
566
- ; AVX1-NEXT: vpandn %xmm0, %xmm2, %xmm0
529
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
530
+ ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [65535,65535,65535,65535]
531
+ ; AVX1-NEXT: vpminud %xmm3, %xmm2, %xmm2
532
+ ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
533
+ ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
534
+ ; AVX1-NEXT: vpsubusw %xmm1, %xmm0, %xmm0
567
535
; AVX1-NEXT: vzeroupper
568
536
; AVX1-NEXT: retq
569
537
;
570
538
; AVX2-LABEL: test13:
571
539
; AVX2: # %bb.0: # %vector.ph
572
- ; AVX2-NEXT: vpmovzxwd {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
573
- ; AVX2-NEXT: vpmaxud %ymm1, %ymm2, %ymm3
574
- ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm2, %ymm2
575
- ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
576
- ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
577
- ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm3
578
- ; AVX2-NEXT: vpackssdw %xmm3, %xmm2, %xmm2
579
- ; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28,29,u,u,u,u,u,u,u,u]
580
- ; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
581
- ; AVX2-NEXT: vpsubw %xmm1, %xmm0, %xmm0
582
- ; AVX2-NEXT: vpandn %xmm0, %xmm2, %xmm0
540
+ ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [65535,65535,65535,65535,65535,65535,65535,65535]
541
+ ; AVX2-NEXT: vpminud %ymm2, %ymm1, %ymm1
542
+ ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
543
+ ; AVX2-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
544
+ ; AVX2-NEXT: vpsubusw %xmm1, %xmm0, %xmm0
583
545
; AVX2-NEXT: vzeroupper
584
546
; AVX2-NEXT: retq
585
547
;
586
548
; AVX512-LABEL: test13:
587
549
; AVX512: # %bb.0: # %vector.ph
588
- ; AVX512-NEXT: vpmovzxwd {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
589
- ; AVX512-NEXT: vpcmpnltud %ymm1, %ymm2, %k1
590
- ; AVX512-NEXT: vpmovdw %ymm1, %xmm1
591
- ; AVX512-NEXT: vpsubw %xmm1, %xmm0, %xmm0 {%k1} {z}
550
+ ; AVX512-NEXT: vpmovusdw %ymm1, %xmm1
551
+ ; AVX512-NEXT: vpsubusw %xmm1, %xmm0, %xmm0
592
552
; AVX512-NEXT: vzeroupper
593
553
; AVX512-NEXT: retq
594
554
vector.ph:
@@ -773,127 +733,90 @@ vector.ph:
773
733
ret <16 x i8 > %res
774
734
}
775
735
776
- ; FIXME: match this to UMIN+TRUNC+PSUBUS
777
736
define <8 x i16 > @test15 (<8 x i16 > %x , <8 x i32 > %y ) nounwind {
778
737
; SSE2-LABEL: test15:
779
738
; SSE2: # %bb.0: # %vector.ph
780
- ; SSE2-NEXT: pxor %xmm3, %xmm3
781
- ; SSE2-NEXT: movdqa %xmm0, %xmm4
782
- ; SSE2-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3]
783
- ; SSE2-NEXT: movdqa %xmm0, %xmm5
784
- ; SSE2-NEXT: punpckhwd {{.*#+}} xmm5 = xmm5[4],xmm3[4],xmm5[5],xmm3[5],xmm5[6],xmm3[6],xmm5[7],xmm3[7]
785
739
; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
786
- ; SSE2-NEXT: movdqa %xmm2, %xmm6
787
- ; SSE2-NEXT: pxor %xmm3, %xmm6
788
- ; SSE2-NEXT: por %xmm3, %xmm5
789
- ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
790
- ; SSE2-NEXT: movdqa %xmm1, %xmm6
791
- ; SSE2-NEXT: pxor %xmm3, %xmm6
792
- ; SSE2-NEXT: por %xmm3, %xmm4
793
- ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
794
- ; SSE2-NEXT: packssdw %xmm5, %xmm4
795
- ; SSE2-NEXT: pslld $16, %xmm2
796
- ; SSE2-NEXT: psrad $16, %xmm2
797
- ; SSE2-NEXT: pslld $16, %xmm1
798
- ; SSE2-NEXT: psrad $16, %xmm1
799
- ; SSE2-NEXT: packssdw %xmm2, %xmm1
800
- ; SSE2-NEXT: psubw %xmm1, %xmm0
801
- ; SSE2-NEXT: pand %xmm4, %xmm0
740
+ ; SSE2-NEXT: movdqa %xmm2, %xmm4
741
+ ; SSE2-NEXT: pxor %xmm3, %xmm4
742
+ ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147549183,2147549183,2147549183,2147549183]
743
+ ; SSE2-NEXT: movdqa %xmm5, %xmm6
744
+ ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
745
+ ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
746
+ ; SSE2-NEXT: pand %xmm6, %xmm2
747
+ ; SSE2-NEXT: pxor %xmm4, %xmm6
748
+ ; SSE2-NEXT: por %xmm2, %xmm6
749
+ ; SSE2-NEXT: pslld $16, %xmm6
750
+ ; SSE2-NEXT: psrad $16, %xmm6
751
+ ; SSE2-NEXT: pxor %xmm1, %xmm3
752
+ ; SSE2-NEXT: pcmpgtd %xmm3, %xmm5
753
+ ; SSE2-NEXT: pxor %xmm5, %xmm4
754
+ ; SSE2-NEXT: pand %xmm1, %xmm5
755
+ ; SSE2-NEXT: por %xmm4, %xmm5
756
+ ; SSE2-NEXT: pslld $16, %xmm5
757
+ ; SSE2-NEXT: psrad $16, %xmm5
758
+ ; SSE2-NEXT: packssdw %xmm6, %xmm5
759
+ ; SSE2-NEXT: psubusw %xmm5, %xmm0
802
760
; SSE2-NEXT: retq
803
761
;
804
762
; SSSE3-LABEL: test15:
805
763
; SSSE3: # %bb.0: # %vector.ph
806
- ; SSSE3-NEXT: pxor %xmm3, %xmm3
807
- ; SSSE3-NEXT: movdqa %xmm0, %xmm4
808
- ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3]
809
- ; SSSE3-NEXT: movdqa %xmm0, %xmm5
810
- ; SSSE3-NEXT: punpckhwd {{.*#+}} xmm5 = xmm5[4],xmm3[4],xmm5[5],xmm3[5],xmm5[6],xmm3[6],xmm5[7],xmm3[7]
811
764
; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
812
- ; SSSE3-NEXT: movdqa %xmm2, %xmm6
813
- ; SSSE3-NEXT: pxor %xmm3, %xmm6
814
- ; SSSE3-NEXT: por %xmm3, %xmm5
815
- ; SSSE3-NEXT: pcmpgtd %xmm6, %xmm5
816
- ; SSSE3-NEXT: movdqa %xmm1, %xmm6
817
- ; SSSE3-NEXT: pxor %xmm3, %xmm6
818
- ; SSSE3-NEXT: por %xmm3, %xmm4
819
- ; SSSE3-NEXT: pcmpgtd %xmm6, %xmm4
820
- ; SSSE3-NEXT: packssdw %xmm5, %xmm4
821
- ; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
822
- ; SSSE3-NEXT: pshufb %xmm3, %xmm2
823
- ; SSSE3-NEXT: pshufb %xmm3, %xmm1
824
- ; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
825
- ; SSSE3-NEXT: psubw %xmm1, %xmm0
826
- ; SSSE3-NEXT: pand %xmm4, %xmm0
765
+ ; SSSE3-NEXT: movdqa %xmm2, %xmm4
766
+ ; SSSE3-NEXT: pxor %xmm3, %xmm4
767
+ ; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [2147549183,2147549183,2147549183,2147549183]
768
+ ; SSSE3-NEXT: movdqa %xmm5, %xmm6
769
+ ; SSSE3-NEXT: pcmpgtd %xmm4, %xmm6
770
+ ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [65535,65535,65535,65535]
771
+ ; SSSE3-NEXT: pand %xmm6, %xmm2
772
+ ; SSSE3-NEXT: pandn %xmm4, %xmm6
773
+ ; SSSE3-NEXT: por %xmm2, %xmm6
774
+ ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
775
+ ; SSSE3-NEXT: pshufb %xmm2, %xmm6
776
+ ; SSSE3-NEXT: pxor %xmm1, %xmm3
777
+ ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm5
778
+ ; SSSE3-NEXT: pand %xmm5, %xmm1
779
+ ; SSSE3-NEXT: pandn %xmm4, %xmm5
780
+ ; SSSE3-NEXT: por %xmm1, %xmm5
781
+ ; SSSE3-NEXT: pshufb %xmm2, %xmm5
782
+ ; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
783
+ ; SSSE3-NEXT: psubusw %xmm5, %xmm0
827
784
; SSSE3-NEXT: retq
828
785
;
829
786
; SSE41-LABEL: test15:
830
787
; SSE41: # %bb.0: # %vector.ph
831
- ; SSE41-NEXT: pxor %xmm3, %xmm3
832
- ; SSE41-NEXT: movdqa %xmm0, %xmm4
833
- ; SSE41-NEXT: punpckhwd {{.*#+}} xmm4 = xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]
834
- ; SSE41-NEXT: pmovzxwd {{.*#+}} xmm5 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
835
- ; SSE41-NEXT: movdqa %xmm4, %xmm6
836
- ; SSE41-NEXT: pminud %xmm2, %xmm6
837
- ; SSE41-NEXT: pcmpeqd %xmm4, %xmm6
838
- ; SSE41-NEXT: pcmpeqd %xmm4, %xmm4
839
- ; SSE41-NEXT: pxor %xmm4, %xmm6
840
- ; SSE41-NEXT: movdqa %xmm5, %xmm7
841
- ; SSE41-NEXT: pminud %xmm1, %xmm7
842
- ; SSE41-NEXT: pcmpeqd %xmm5, %xmm7
843
- ; SSE41-NEXT: pxor %xmm4, %xmm7
844
- ; SSE41-NEXT: packssdw %xmm6, %xmm7
845
- ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1],xmm2[2],xmm3[3],xmm2[4],xmm3[5],xmm2[6],xmm3[7]
846
- ; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1],xmm1[2],xmm3[3],xmm1[4],xmm3[5],xmm1[6],xmm3[7]
788
+ ; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [65535,65535,65535,65535]
789
+ ; SSE41-NEXT: pminud %xmm3, %xmm2
790
+ ; SSE41-NEXT: pminud %xmm3, %xmm1
847
791
; SSE41-NEXT: packusdw %xmm2, %xmm1
848
- ; SSE41-NEXT: psubw %xmm1, %xmm0
849
- ; SSE41-NEXT: pand %xmm7, %xmm0
792
+ ; SSE41-NEXT: psubusw %xmm1, %xmm0
850
793
; SSE41-NEXT: retq
851
794
;
852
795
; AVX1-LABEL: test15:
853
796
; AVX1: # %bb.0: # %vector.ph
854
- ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
855
- ; AVX1-NEXT: vpunpckhwd {{.*#+}} xmm2 = xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
856
- ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
857
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
858
- ; AVX1-NEXT: vpminud %xmm4, %xmm2, %xmm5
859
- ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm2, %xmm2
860
- ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
861
- ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
862
- ; AVX1-NEXT: vpminud %xmm1, %xmm3, %xmm6
863
- ; AVX1-NEXT: vpcmpeqd %xmm6, %xmm3, %xmm3
864
- ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm3
865
- ; AVX1-NEXT: vpackssdw %xmm2, %xmm3, %xmm2
866
- ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = <0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u>
867
- ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm4
868
- ; AVX1-NEXT: vpshufb %xmm3, %xmm1, %xmm1
869
- ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
870
- ; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm0
871
- ; AVX1-NEXT: vpand %xmm0, %xmm2, %xmm0
797
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
798
+ ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [65535,65535,65535,65535]
799
+ ; AVX1-NEXT: vpminud %xmm3, %xmm2, %xmm2
800
+ ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
801
+ ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
802
+ ; AVX1-NEXT: vpsubusw %xmm1, %xmm0, %xmm0
872
803
; AVX1-NEXT: vzeroupper
873
804
; AVX1-NEXT: retq
874
805
;
875
806
; AVX2-LABEL: test15:
876
807
; AVX2: # %bb.0: # %vector.ph
877
- ; AVX2-NEXT: vpmovzxwd {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
878
- ; AVX2-NEXT: vpminud %ymm1, %ymm2, %ymm3
879
- ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm2, %ymm2
880
- ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
881
- ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
882
- ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm3
883
- ; AVX2-NEXT: vpackssdw %xmm3, %xmm2, %xmm2
884
- ; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28,29,u,u,u,u,u,u,u,u]
885
- ; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
886
- ; AVX2-NEXT: vpsubw %xmm1, %xmm0, %xmm0
887
- ; AVX2-NEXT: vpand %xmm0, %xmm2, %xmm0
808
+ ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [65535,65535,65535,65535,65535,65535,65535,65535]
809
+ ; AVX2-NEXT: vpminud %ymm2, %ymm1, %ymm1
810
+ ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
811
+ ; AVX2-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
812
+ ; AVX2-NEXT: vpsubusw %xmm1, %xmm0, %xmm0
888
813
; AVX2-NEXT: vzeroupper
889
814
; AVX2-NEXT: retq
890
815
;
891
816
; AVX512-LABEL: test15:
892
817
; AVX512: # %bb.0: # %vector.ph
893
- ; AVX512-NEXT: vpmovzxwd {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
894
- ; AVX512-NEXT: vpcmpnleud %ymm1, %ymm2, %k1
895
- ; AVX512-NEXT: vpmovdw %ymm1, %xmm1
896
- ; AVX512-NEXT: vpsubw %xmm1, %xmm0, %xmm0 {%k1} {z}
818
+ ; AVX512-NEXT: vpmovusdw %ymm1, %xmm1
819
+ ; AVX512-NEXT: vpsubusw %xmm1, %xmm0, %xmm0
897
820
; AVX512-NEXT: vzeroupper
898
821
; AVX512-NEXT: retq
899
822
vector.ph:
0 commit comments