@@ -316,18 +316,14 @@ define i1 @allzeros_v64i8_sign(<64 x i8> %arg) {
316
316
define i1 @allones_v8i16_sign (<8 x i16 > %arg ) {
317
317
; SSE2-LABEL: allones_v8i16_sign:
318
318
; SSE2: # %bb.0:
319
- ; SSE2-NEXT: pxor %xmm1, %xmm1
320
- ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
321
- ; SSE2-NEXT: packsswb %xmm0, %xmm1
322
- ; SSE2-NEXT: pmovmskb %xmm1, %eax
319
+ ; SSE2-NEXT: packsswb %xmm0, %xmm0
320
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
323
321
; SSE2-NEXT: cmpb $-1, %al
324
322
; SSE2-NEXT: sete %al
325
323
; SSE2-NEXT: retq
326
324
;
327
325
; AVX-LABEL: allones_v8i16_sign:
328
326
; AVX: # %bb.0:
329
- ; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1
330
- ; AVX-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0
331
327
; AVX-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
332
328
; AVX-NEXT: vpmovmskb %xmm0, %eax
333
329
; AVX-NEXT: cmpb $-1, %al
@@ -361,18 +357,14 @@ define i1 @allones_v8i16_sign(<8 x i16> %arg) {
361
357
define i1 @allzeros_v8i16_sign (<8 x i16 > %arg ) {
362
358
; SSE2-LABEL: allzeros_v8i16_sign:
363
359
; SSE2: # %bb.0:
364
- ; SSE2-NEXT: pxor %xmm1, %xmm1
365
- ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
366
- ; SSE2-NEXT: packsswb %xmm0, %xmm1
367
- ; SSE2-NEXT: pmovmskb %xmm1, %eax
360
+ ; SSE2-NEXT: packsswb %xmm0, %xmm0
361
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
368
362
; SSE2-NEXT: testb %al, %al
369
363
; SSE2-NEXT: sete %al
370
364
; SSE2-NEXT: retq
371
365
;
372
366
; AVX-LABEL: allzeros_v8i16_sign:
373
367
; AVX: # %bb.0:
374
- ; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1
375
- ; AVX-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0
376
368
; AVX-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
377
369
; AVX-NEXT: vpmovmskb %xmm0, %eax
378
370
; AVX-NEXT: testb %al, %al
@@ -406,22 +398,15 @@ define i1 @allzeros_v8i16_sign(<8 x i16> %arg) {
406
398
define i1 @allones_v16i16_sign (<16 x i16 > %arg ) {
407
399
; SSE2-LABEL: allones_v16i16_sign:
408
400
; SSE2: # %bb.0:
409
- ; SSE2-NEXT: pxor %xmm2, %xmm2
410
- ; SSE2-NEXT: pxor %xmm3, %xmm3
411
- ; SSE2-NEXT: pcmpgtw %xmm1, %xmm3
412
- ; SSE2-NEXT: pcmpgtw %xmm0, %xmm2
413
- ; SSE2-NEXT: packsswb %xmm3, %xmm2
414
- ; SSE2-NEXT: pmovmskb %xmm2, %eax
401
+ ; SSE2-NEXT: packsswb %xmm1, %xmm0
402
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
415
403
; SSE2-NEXT: cmpw $-1, %ax
416
404
; SSE2-NEXT: sete %al
417
405
; SSE2-NEXT: retq
418
406
;
419
407
; AVX1-LABEL: allones_v16i16_sign:
420
408
; AVX1: # %bb.0:
421
409
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
422
- ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
423
- ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1
424
- ; AVX1-NEXT: vpcmpgtw %xmm0, %xmm2, %xmm0
425
410
; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
426
411
; AVX1-NEXT: vpmovmskb %xmm0, %eax
427
412
; AVX1-NEXT: cmpw $-1, %ax
@@ -468,22 +453,15 @@ define i1 @allones_v16i16_sign(<16 x i16> %arg) {
468
453
define i1 @allzeros_v16i16_sign (<16 x i16 > %arg ) {
469
454
; SSE2-LABEL: allzeros_v16i16_sign:
470
455
; SSE2: # %bb.0:
471
- ; SSE2-NEXT: pxor %xmm2, %xmm2
472
- ; SSE2-NEXT: pxor %xmm3, %xmm3
473
- ; SSE2-NEXT: pcmpgtw %xmm1, %xmm3
474
- ; SSE2-NEXT: pcmpgtw %xmm0, %xmm2
475
- ; SSE2-NEXT: packsswb %xmm3, %xmm2
476
- ; SSE2-NEXT: pmovmskb %xmm2, %eax
456
+ ; SSE2-NEXT: packsswb %xmm1, %xmm0
457
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
477
458
; SSE2-NEXT: testw %ax, %ax
478
459
; SSE2-NEXT: sete %al
479
460
; SSE2-NEXT: retq
480
461
;
481
462
; AVX1-LABEL: allzeros_v16i16_sign:
482
463
; AVX1: # %bb.0:
483
464
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
484
- ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
485
- ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1
486
- ; AVX1-NEXT: vpcmpgtw %xmm0, %xmm2, %xmm0
487
465
; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
488
466
; AVX1-NEXT: vpmovmskb %xmm0, %eax
489
467
; AVX1-NEXT: testw %ax, %ax
@@ -530,18 +508,10 @@ define i1 @allzeros_v16i16_sign(<16 x i16> %arg) {
530
508
define i1 @allones_v32i16_sign (<32 x i16 > %arg ) {
531
509
; SSE2-LABEL: allones_v32i16_sign:
532
510
; SSE2: # %bb.0:
533
- ; SSE2-NEXT: pxor %xmm4, %xmm4
534
- ; SSE2-NEXT: pxor %xmm5, %xmm5
535
- ; SSE2-NEXT: pcmpgtw %xmm1, %xmm5
536
- ; SSE2-NEXT: pxor %xmm1, %xmm1
537
- ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
538
- ; SSE2-NEXT: packsswb %xmm5, %xmm1
539
- ; SSE2-NEXT: pmovmskb %xmm1, %eax
540
- ; SSE2-NEXT: pxor %xmm0, %xmm0
541
- ; SSE2-NEXT: pcmpgtw %xmm3, %xmm0
542
- ; SSE2-NEXT: pcmpgtw %xmm2, %xmm4
543
- ; SSE2-NEXT: packsswb %xmm0, %xmm4
544
- ; SSE2-NEXT: pmovmskb %xmm4, %ecx
511
+ ; SSE2-NEXT: packsswb %xmm1, %xmm0
512
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
513
+ ; SSE2-NEXT: packsswb %xmm3, %xmm2
514
+ ; SSE2-NEXT: pmovmskb %xmm2, %ecx
545
515
; SSE2-NEXT: shll $16, %ecx
546
516
; SSE2-NEXT: orl %eax, %ecx
547
517
; SSE2-NEXT: cmpl $-1, %ecx
@@ -551,14 +521,9 @@ define i1 @allones_v32i16_sign(<32 x i16> %arg) {
551
521
; AVX1-LABEL: allones_v32i16_sign:
552
522
; AVX1: # %bb.0:
553
523
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
554
- ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
555
- ; AVX1-NEXT: vpcmpgtw %xmm2, %xmm3, %xmm2
556
- ; AVX1-NEXT: vpcmpgtw %xmm0, %xmm3, %xmm0
557
524
; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0
558
525
; AVX1-NEXT: vpmovmskb %xmm0, %eax
559
526
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
560
- ; AVX1-NEXT: vpcmpgtw %xmm0, %xmm3, %xmm0
561
- ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm3, %xmm1
562
527
; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm0
563
528
; AVX1-NEXT: vpmovmskb %xmm0, %ecx
564
529
; AVX1-NEXT: shll $16, %ecx
@@ -570,9 +535,6 @@ define i1 @allones_v32i16_sign(<32 x i16> %arg) {
570
535
;
571
536
; AVX2-LABEL: allones_v32i16_sign:
572
537
; AVX2: # %bb.0:
573
- ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
574
- ; AVX2-NEXT: vpcmpgtw %ymm1, %ymm2, %ymm1
575
- ; AVX2-NEXT: vpcmpgtw %ymm0, %ymm2, %ymm0
576
538
; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0
577
539
; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
578
540
; AVX2-NEXT: vpmovmskb %ymm0, %eax
@@ -615,18 +577,10 @@ define i1 @allones_v32i16_sign(<32 x i16> %arg) {
615
577
define i1 @allzeros_v32i16_sign (<32 x i16 > %arg ) {
616
578
; SSE2-LABEL: allzeros_v32i16_sign:
617
579
; SSE2: # %bb.0:
618
- ; SSE2-NEXT: pxor %xmm4, %xmm4
619
- ; SSE2-NEXT: pxor %xmm5, %xmm5
620
- ; SSE2-NEXT: pcmpgtw %xmm1, %xmm5
621
- ; SSE2-NEXT: pxor %xmm1, %xmm1
622
- ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
623
- ; SSE2-NEXT: packsswb %xmm5, %xmm1
624
- ; SSE2-NEXT: pmovmskb %xmm1, %eax
625
- ; SSE2-NEXT: pxor %xmm0, %xmm0
626
- ; SSE2-NEXT: pcmpgtw %xmm3, %xmm0
627
- ; SSE2-NEXT: pcmpgtw %xmm2, %xmm4
628
- ; SSE2-NEXT: packsswb %xmm0, %xmm4
629
- ; SSE2-NEXT: pmovmskb %xmm4, %ecx
580
+ ; SSE2-NEXT: packsswb %xmm1, %xmm0
581
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
582
+ ; SSE2-NEXT: packsswb %xmm3, %xmm2
583
+ ; SSE2-NEXT: pmovmskb %xmm2, %ecx
630
584
; SSE2-NEXT: shll $16, %ecx
631
585
; SSE2-NEXT: orl %eax, %ecx
632
586
; SSE2-NEXT: sete %al
@@ -635,14 +589,9 @@ define i1 @allzeros_v32i16_sign(<32 x i16> %arg) {
635
589
; AVX1-LABEL: allzeros_v32i16_sign:
636
590
; AVX1: # %bb.0:
637
591
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
638
- ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
639
- ; AVX1-NEXT: vpcmpgtw %xmm2, %xmm3, %xmm2
640
- ; AVX1-NEXT: vpcmpgtw %xmm0, %xmm3, %xmm0
641
592
; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0
642
593
; AVX1-NEXT: vpmovmskb %xmm0, %eax
643
594
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
644
- ; AVX1-NEXT: vpcmpgtw %xmm0, %xmm3, %xmm0
645
- ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm3, %xmm1
646
595
; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm0
647
596
; AVX1-NEXT: vpmovmskb %xmm0, %ecx
648
597
; AVX1-NEXT: shll $16, %ecx
@@ -653,9 +602,6 @@ define i1 @allzeros_v32i16_sign(<32 x i16> %arg) {
653
602
;
654
603
; AVX2-LABEL: allzeros_v32i16_sign:
655
604
; AVX2: # %bb.0:
656
- ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
657
- ; AVX2-NEXT: vpcmpgtw %ymm1, %ymm2, %ymm1
658
- ; AVX2-NEXT: vpcmpgtw %ymm0, %ymm2, %ymm0
659
605
; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0
660
606
; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
661
607
; AVX2-NEXT: vpmovmskb %ymm0, %eax
@@ -777,13 +723,9 @@ define i1 @allzeros_v4i32_sign(<4 x i32> %arg) {
777
723
define i1 @allones_v8i32_sign (<8 x i32 > %arg ) {
778
724
; SSE2-LABEL: allones_v8i32_sign:
779
725
; SSE2: # %bb.0:
780
- ; SSE2-NEXT: pxor %xmm2, %xmm2
781
- ; SSE2-NEXT: pxor %xmm3, %xmm3
782
- ; SSE2-NEXT: pcmpgtd %xmm1, %xmm3
783
- ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
784
- ; SSE2-NEXT: packssdw %xmm3, %xmm2
785
- ; SSE2-NEXT: packsswb %xmm0, %xmm2
786
- ; SSE2-NEXT: pmovmskb %xmm2, %eax
726
+ ; SSE2-NEXT: packssdw %xmm1, %xmm0
727
+ ; SSE2-NEXT: packsswb %xmm0, %xmm0
728
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
787
729
; SSE2-NEXT: cmpb $-1, %al
788
730
; SSE2-NEXT: sete %al
789
731
; SSE2-NEXT: retq
@@ -823,13 +765,9 @@ define i1 @allones_v8i32_sign(<8 x i32> %arg) {
823
765
define i1 @allzeros_v8i32_sign (<8 x i32 > %arg ) {
824
766
; SSE2-LABEL: allzeros_v8i32_sign:
825
767
; SSE2: # %bb.0:
826
- ; SSE2-NEXT: pxor %xmm2, %xmm2
827
- ; SSE2-NEXT: pxor %xmm3, %xmm3
828
- ; SSE2-NEXT: pcmpgtd %xmm1, %xmm3
829
- ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
830
- ; SSE2-NEXT: packssdw %xmm3, %xmm2
831
- ; SSE2-NEXT: packsswb %xmm0, %xmm2
832
- ; SSE2-NEXT: pmovmskb %xmm2, %eax
768
+ ; SSE2-NEXT: packssdw %xmm1, %xmm0
769
+ ; SSE2-NEXT: packsswb %xmm0, %xmm0
770
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
833
771
; SSE2-NEXT: testb %al, %al
834
772
; SSE2-NEXT: sete %al
835
773
; SSE2-NEXT: retq
@@ -869,32 +807,19 @@ define i1 @allzeros_v8i32_sign(<8 x i32> %arg) {
869
807
define i1 @allones_v16i32_sign (<16 x i32 > %arg ) {
870
808
; SSE2-LABEL: allones_v16i32_sign:
871
809
; SSE2: # %bb.0:
872
- ; SSE2-NEXT: pxor %xmm4, %xmm4
873
- ; SSE2-NEXT: pxor %xmm5, %xmm5
874
- ; SSE2-NEXT: pcmpgtd %xmm3, %xmm5
875
- ; SSE2-NEXT: pxor %xmm3, %xmm3
876
- ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
877
- ; SSE2-NEXT: packssdw %xmm5, %xmm3
878
- ; SSE2-NEXT: pxor %xmm2, %xmm2
879
- ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
880
- ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
881
- ; SSE2-NEXT: packssdw %xmm2, %xmm4
882
- ; SSE2-NEXT: packsswb %xmm3, %xmm4
883
- ; SSE2-NEXT: pmovmskb %xmm4, %eax
810
+ ; SSE2-NEXT: packssdw %xmm3, %xmm2
811
+ ; SSE2-NEXT: packssdw %xmm1, %xmm0
812
+ ; SSE2-NEXT: packsswb %xmm2, %xmm0
813
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
884
814
; SSE2-NEXT: cmpw $-1, %ax
885
815
; SSE2-NEXT: sete %al
886
816
; SSE2-NEXT: retq
887
817
;
888
818
; AVX1-LABEL: allones_v16i32_sign:
889
819
; AVX1: # %bb.0:
890
820
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
891
- ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
892
- ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
893
- ; AVX1-NEXT: vpcmpgtd %xmm1, %xmm3, %xmm1
894
821
; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1
895
822
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
896
- ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
897
- ; AVX1-NEXT: vpcmpgtd %xmm0, %xmm3, %xmm0
898
823
; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
899
824
; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
900
825
; AVX1-NEXT: vpmovmskb %xmm0, %eax
@@ -943,32 +868,19 @@ define i1 @allones_v16i32_sign(<16 x i32> %arg) {
943
868
define i1 @allzeros_v16i32_sign (<16 x i32 > %arg ) {
944
869
; SSE2-LABEL: allzeros_v16i32_sign:
945
870
; SSE2: # %bb.0:
946
- ; SSE2-NEXT: pxor %xmm4, %xmm4
947
- ; SSE2-NEXT: pxor %xmm5, %xmm5
948
- ; SSE2-NEXT: pcmpgtd %xmm3, %xmm5
949
- ; SSE2-NEXT: pxor %xmm3, %xmm3
950
- ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
951
- ; SSE2-NEXT: packssdw %xmm5, %xmm3
952
- ; SSE2-NEXT: pxor %xmm2, %xmm2
953
- ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
954
- ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
955
- ; SSE2-NEXT: packssdw %xmm2, %xmm4
956
- ; SSE2-NEXT: packsswb %xmm3, %xmm4
957
- ; SSE2-NEXT: pmovmskb %xmm4, %eax
871
+ ; SSE2-NEXT: packssdw %xmm3, %xmm2
872
+ ; SSE2-NEXT: packssdw %xmm1, %xmm0
873
+ ; SSE2-NEXT: packsswb %xmm2, %xmm0
874
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
958
875
; SSE2-NEXT: testw %ax, %ax
959
876
; SSE2-NEXT: sete %al
960
877
; SSE2-NEXT: retq
961
878
;
962
879
; AVX1-LABEL: allzeros_v16i32_sign:
963
880
; AVX1: # %bb.0:
964
881
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
965
- ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
966
- ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
967
- ; AVX1-NEXT: vpcmpgtd %xmm1, %xmm3, %xmm1
968
882
; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1
969
883
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
970
- ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
971
- ; AVX1-NEXT: vpcmpgtd %xmm0, %xmm3, %xmm0
972
884
; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
973
885
; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
974
886
; AVX1-NEXT: vpmovmskb %xmm0, %eax
@@ -4663,13 +4575,9 @@ define i32 @movmskpd256(<4 x double> %x) {
4663
4575
define i32 @movmskps256 (<8 x float > %x ) {
4664
4576
; SSE2-LABEL: movmskps256:
4665
4577
; SSE2: # %bb.0:
4666
- ; SSE2-NEXT: pxor %xmm2, %xmm2
4667
- ; SSE2-NEXT: pxor %xmm3, %xmm3
4668
- ; SSE2-NEXT: pcmpgtd %xmm1, %xmm3
4669
- ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
4670
- ; SSE2-NEXT: packssdw %xmm3, %xmm2
4671
- ; SSE2-NEXT: packsswb %xmm0, %xmm2
4672
- ; SSE2-NEXT: pmovmskb %xmm2, %eax
4578
+ ; SSE2-NEXT: packssdw %xmm1, %xmm0
4579
+ ; SSE2-NEXT: packsswb %xmm0, %xmm0
4580
+ ; SSE2-NEXT: pmovmskb %xmm0, %eax
4673
4581
; SSE2-NEXT: movzbl %al, %eax
4674
4582
; SSE2-NEXT: retq
4675
4583
;
0 commit comments