@@ -481,18 +481,10 @@ define void @bitcast_64i8_store(i64* %p, <64 x i8> %a0) {
481
481
define void @bitcast_32i16_store (i32* %p , <32 x i16 > %a0 ) {
482
482
; SSE-LABEL: bitcast_32i16_store:
483
483
; SSE: # %bb.0:
484
- ; SSE-NEXT: pxor %xmm4, %xmm4
485
- ; SSE-NEXT: pxor %xmm5, %xmm5
486
- ; SSE-NEXT: pcmpgtw %xmm1, %xmm5
487
- ; SSE-NEXT: pxor %xmm1, %xmm1
488
- ; SSE-NEXT: pcmpgtw %xmm0, %xmm1
489
- ; SSE-NEXT: packsswb %xmm5, %xmm1
490
- ; SSE-NEXT: pmovmskb %xmm1, %eax
491
- ; SSE-NEXT: pxor %xmm0, %xmm0
492
- ; SSE-NEXT: pcmpgtw %xmm3, %xmm0
493
- ; SSE-NEXT: pcmpgtw %xmm2, %xmm4
494
- ; SSE-NEXT: packsswb %xmm0, %xmm4
495
- ; SSE-NEXT: pmovmskb %xmm4, %ecx
484
+ ; SSE-NEXT: packsswb %xmm1, %xmm0
485
+ ; SSE-NEXT: pmovmskb %xmm0, %eax
486
+ ; SSE-NEXT: packsswb %xmm3, %xmm2
487
+ ; SSE-NEXT: pmovmskb %xmm2, %ecx
496
488
; SSE-NEXT: shll $16, %ecx
497
489
; SSE-NEXT: orl %eax, %ecx
498
490
; SSE-NEXT: movl %ecx, (%rdi)
@@ -501,14 +493,9 @@ define void @bitcast_32i16_store(i32* %p, <32 x i16> %a0) {
501
493
; AVX1-LABEL: bitcast_32i16_store:
502
494
; AVX1: # %bb.0:
503
495
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
504
- ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
505
- ; AVX1-NEXT: vpcmpgtw %xmm2, %xmm3, %xmm2
506
- ; AVX1-NEXT: vpcmpgtw %xmm0, %xmm3, %xmm0
507
496
; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0
508
497
; AVX1-NEXT: vpmovmskb %xmm0, %eax
509
498
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
510
- ; AVX1-NEXT: vpcmpgtw %xmm0, %xmm3, %xmm0
511
- ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm3, %xmm1
512
499
; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm0
513
500
; AVX1-NEXT: vpmovmskb %xmm0, %ecx
514
501
; AVX1-NEXT: shll $16, %ecx
@@ -519,9 +506,6 @@ define void @bitcast_32i16_store(i32* %p, <32 x i16> %a0) {
519
506
;
520
507
; AVX2-LABEL: bitcast_32i16_store:
521
508
; AVX2: # %bb.0:
522
- ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
523
- ; AVX2-NEXT: vpcmpgtw %ymm1, %ymm2, %ymm1
524
- ; AVX2-NEXT: vpcmpgtw %ymm0, %ymm2, %ymm0
525
509
; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0
526
510
; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
527
511
; AVX2-NEXT: vpmovmskb %ymm0, %eax
@@ -558,31 +542,18 @@ define void @bitcast_32i16_store(i32* %p, <32 x i16> %a0) {
558
542
define void @bitcast_16i32_store (i16* %p , <16 x i32 > %a0 ) {
559
543
; SSE-LABEL: bitcast_16i32_store:
560
544
; SSE: # %bb.0:
561
- ; SSE-NEXT: pxor %xmm4, %xmm4
562
- ; SSE-NEXT: pxor %xmm5, %xmm5
563
- ; SSE-NEXT: pcmpgtd %xmm3, %xmm5
564
- ; SSE-NEXT: pxor %xmm3, %xmm3
565
- ; SSE-NEXT: pcmpgtd %xmm2, %xmm3
566
- ; SSE-NEXT: packssdw %xmm5, %xmm3
567
- ; SSE-NEXT: pxor %xmm2, %xmm2
568
- ; SSE-NEXT: pcmpgtd %xmm1, %xmm2
569
- ; SSE-NEXT: pcmpgtd %xmm0, %xmm4
570
- ; SSE-NEXT: packssdw %xmm2, %xmm4
571
- ; SSE-NEXT: packsswb %xmm3, %xmm4
572
- ; SSE-NEXT: pmovmskb %xmm4, %eax
545
+ ; SSE-NEXT: packssdw %xmm3, %xmm2
546
+ ; SSE-NEXT: packssdw %xmm1, %xmm0
547
+ ; SSE-NEXT: packsswb %xmm2, %xmm0
548
+ ; SSE-NEXT: pmovmskb %xmm0, %eax
573
549
; SSE-NEXT: movw %ax, (%rdi)
574
550
; SSE-NEXT: retq
575
551
;
576
552
; AVX1-LABEL: bitcast_16i32_store:
577
553
; AVX1: # %bb.0:
578
554
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
579
- ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
580
- ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
581
- ; AVX1-NEXT: vpcmpgtd %xmm1, %xmm3, %xmm1
582
555
; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1
583
556
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
584
- ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
585
- ; AVX1-NEXT: vpcmpgtd %xmm0, %xmm3, %xmm0
586
557
; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
587
558
; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
588
559
; AVX1-NEXT: vpmovmskb %xmm0, %eax
0 commit comments