@@ -4457,8 +4457,8 @@ define i1 @movmsk_v4i32(<4 x i32> %x, <4 x i32> %y) {
4457
4457
ret i1 %u1
4458
4458
}
4459
4459
4460
- define i1 @movmsk_v2i64 (<2 x i64 > %x , <2 x i64 > %y ) {
4461
- ; SSE2-LABEL: movmsk_v2i64 :
4460
+ define i1 @movmsk_and_v2i64 (<2 x i64 > %x , <2 x i64 > %y ) {
4461
+ ; SSE2-LABEL: movmsk_and_v2i64 :
4462
4462
; SSE2: # %bb.0:
4463
4463
; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
4464
4464
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
@@ -4469,7 +4469,7 @@ define i1 @movmsk_v2i64(<2 x i64> %x, <2 x i64> %y) {
4469
4469
; SSE2-NEXT: sete %al
4470
4470
; SSE2-NEXT: retq
4471
4471
;
4472
- ; AVX-LABEL: movmsk_v2i64 :
4472
+ ; AVX-LABEL: movmsk_and_v2i64 :
4473
4473
; AVX: # %bb.0:
4474
4474
; AVX-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
4475
4475
; AVX-NEXT: vmovmskpd %xmm0, %eax
@@ -4478,7 +4478,7 @@ define i1 @movmsk_v2i64(<2 x i64> %x, <2 x i64> %y) {
4478
4478
; AVX-NEXT: sete %al
4479
4479
; AVX-NEXT: retq
4480
4480
;
4481
- ; KNL-LABEL: movmsk_v2i64 :
4481
+ ; KNL-LABEL: movmsk_and_v2i64 :
4482
4482
; KNL: # %bb.0:
4483
4483
; KNL-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
4484
4484
; KNL-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
@@ -4491,7 +4491,7 @@ define i1 @movmsk_v2i64(<2 x i64> %x, <2 x i64> %y) {
4491
4491
; KNL-NEXT: vzeroupper
4492
4492
; KNL-NEXT: retq
4493
4493
;
4494
- ; SKX-LABEL: movmsk_v2i64 :
4494
+ ; SKX-LABEL: movmsk_and_v2i64 :
4495
4495
; SKX: # %bb.0:
4496
4496
; SKX-NEXT: vpcmpneqq %xmm1, %xmm0, %k0
4497
4497
; SKX-NEXT: kshiftrb $1, %k0, %k1
@@ -4507,6 +4507,58 @@ define i1 @movmsk_v2i64(<2 x i64> %x, <2 x i64> %y) {
4507
4507
ret i1 %u1
4508
4508
}
4509
4509
4510
+ define i1 @movmsk_or_v2i64 (<2 x i64 > %x , <2 x i64 > %y ) {
4511
+ ; SSE2-LABEL: movmsk_or_v2i64:
4512
+ ; SSE2: # %bb.0:
4513
+ ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
4514
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
4515
+ ; SSE2-NEXT: pand %xmm0, %xmm1
4516
+ ; SSE2-NEXT: movmskpd %xmm1, %ecx
4517
+ ; SSE2-NEXT: xorl $3, %ecx
4518
+ ; SSE2-NEXT: movl %ecx, %eax
4519
+ ; SSE2-NEXT: shrb %al
4520
+ ; SSE2-NEXT: orb %cl, %al
4521
+ ; SSE2-NEXT: retq
4522
+ ;
4523
+ ; AVX-LABEL: movmsk_or_v2i64:
4524
+ ; AVX: # %bb.0:
4525
+ ; AVX-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
4526
+ ; AVX-NEXT: vmovmskpd %xmm0, %ecx
4527
+ ; AVX-NEXT: xorl $3, %ecx
4528
+ ; AVX-NEXT: movl %ecx, %eax
4529
+ ; AVX-NEXT: shrb %al
4530
+ ; AVX-NEXT: orb %cl, %al
4531
+ ; AVX-NEXT: retq
4532
+ ;
4533
+ ; KNL-LABEL: movmsk_or_v2i64:
4534
+ ; KNL: # %bb.0:
4535
+ ; KNL-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
4536
+ ; KNL-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
4537
+ ; KNL-NEXT: vpcmpneqq %zmm1, %zmm0, %k0
4538
+ ; KNL-NEXT: kshiftrw $1, %k0, %k1
4539
+ ; KNL-NEXT: kmovw %k1, %ecx
4540
+ ; KNL-NEXT: kmovw %k0, %eax
4541
+ ; KNL-NEXT: orb %cl, %al
4542
+ ; KNL-NEXT: # kill: def $al killed $al killed $eax
4543
+ ; KNL-NEXT: vzeroupper
4544
+ ; KNL-NEXT: retq
4545
+ ;
4546
+ ; SKX-LABEL: movmsk_or_v2i64:
4547
+ ; SKX: # %bb.0:
4548
+ ; SKX-NEXT: vpcmpneqq %xmm1, %xmm0, %k0
4549
+ ; SKX-NEXT: kshiftrb $1, %k0, %k1
4550
+ ; SKX-NEXT: kmovd %k1, %ecx
4551
+ ; SKX-NEXT: kmovd %k0, %eax
4552
+ ; SKX-NEXT: orb %cl, %al
4553
+ ; SKX-NEXT: # kill: def $al killed $al killed $eax
4554
+ ; SKX-NEXT: retq
4555
+ %cmp = icmp ne <2 x i64 > %x , %y
4556
+ %e1 = extractelement <2 x i1 > %cmp , i32 0
4557
+ %e2 = extractelement <2 x i1 > %cmp , i32 1
4558
+ %u1 = or i1 %e1 , %e2
4559
+ ret i1 %u1
4560
+ }
4561
+
4510
4562
define i1 @movmsk_v4f32 (<4 x float > %x , <4 x float > %y ) {
4511
4563
; SSE2-LABEL: movmsk_v4f32:
4512
4564
; SSE2: # %bb.0:
@@ -4566,24 +4618,24 @@ define i1 @movmsk_v4f32(<4 x float> %x, <4 x float> %y) {
4566
4618
ret i1 %u2
4567
4619
}
4568
4620
4569
- define i1 @movmsk_v2f64 (<2 x double > %x , <2 x double > %y ) {
4570
- ; SSE2-LABEL: movmsk_v2f64 :
4621
+ define i1 @movmsk_and_v2f64 (<2 x double > %x , <2 x double > %y ) {
4622
+ ; SSE2-LABEL: movmsk_and_v2f64 :
4571
4623
; SSE2: # %bb.0:
4572
4624
; SSE2-NEXT: cmplepd %xmm0, %xmm1
4573
4625
; SSE2-NEXT: movmskpd %xmm1, %eax
4574
4626
; SSE2-NEXT: cmpb $3, %al
4575
4627
; SSE2-NEXT: sete %al
4576
4628
; SSE2-NEXT: retq
4577
4629
;
4578
- ; AVX-LABEL: movmsk_v2f64 :
4630
+ ; AVX-LABEL: movmsk_and_v2f64 :
4579
4631
; AVX: # %bb.0:
4580
4632
; AVX-NEXT: vcmplepd %xmm0, %xmm1, %xmm0
4581
4633
; AVX-NEXT: vmovmskpd %xmm0, %eax
4582
4634
; AVX-NEXT: cmpb $3, %al
4583
4635
; AVX-NEXT: sete %al
4584
4636
; AVX-NEXT: retq
4585
4637
;
4586
- ; KNL-LABEL: movmsk_v2f64 :
4638
+ ; KNL-LABEL: movmsk_and_v2f64 :
4587
4639
; KNL: # %bb.0:
4588
4640
; KNL-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
4589
4641
; KNL-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
@@ -4596,7 +4648,7 @@ define i1 @movmsk_v2f64(<2 x double> %x, <2 x double> %y) {
4596
4648
; KNL-NEXT: vzeroupper
4597
4649
; KNL-NEXT: retq
4598
4650
;
4599
- ; SKX-LABEL: movmsk_v2f64 :
4651
+ ; SKX-LABEL: movmsk_and_v2f64 :
4600
4652
; SKX: # %bb.0:
4601
4653
; SKX-NEXT: vcmplepd %xmm0, %xmm1, %k0
4602
4654
; SKX-NEXT: kshiftrb $1, %k0, %k1
@@ -4612,6 +4664,54 @@ define i1 @movmsk_v2f64(<2 x double> %x, <2 x double> %y) {
4612
4664
ret i1 %u1
4613
4665
}
4614
4666
4667
+ define i1 @movmsk_or_v2f64 (<2 x double > %x , <2 x double > %y ) {
4668
+ ; SSE2-LABEL: movmsk_or_v2f64:
4669
+ ; SSE2: # %bb.0:
4670
+ ; SSE2-NEXT: cmplepd %xmm0, %xmm1
4671
+ ; SSE2-NEXT: movmskpd %xmm1, %ecx
4672
+ ; SSE2-NEXT: movl %ecx, %eax
4673
+ ; SSE2-NEXT: shrb %al
4674
+ ; SSE2-NEXT: orb %cl, %al
4675
+ ; SSE2-NEXT: retq
4676
+ ;
4677
+ ; AVX-LABEL: movmsk_or_v2f64:
4678
+ ; AVX: # %bb.0:
4679
+ ; AVX-NEXT: vcmplepd %xmm0, %xmm1, %xmm0
4680
+ ; AVX-NEXT: vmovmskpd %xmm0, %ecx
4681
+ ; AVX-NEXT: movl %ecx, %eax
4682
+ ; AVX-NEXT: shrb %al
4683
+ ; AVX-NEXT: orb %cl, %al
4684
+ ; AVX-NEXT: retq
4685
+ ;
4686
+ ; KNL-LABEL: movmsk_or_v2f64:
4687
+ ; KNL: # %bb.0:
4688
+ ; KNL-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
4689
+ ; KNL-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
4690
+ ; KNL-NEXT: vcmplepd %zmm0, %zmm1, %k0
4691
+ ; KNL-NEXT: kshiftrw $1, %k0, %k1
4692
+ ; KNL-NEXT: kmovw %k1, %ecx
4693
+ ; KNL-NEXT: kmovw %k0, %eax
4694
+ ; KNL-NEXT: orb %cl, %al
4695
+ ; KNL-NEXT: # kill: def $al killed $al killed $eax
4696
+ ; KNL-NEXT: vzeroupper
4697
+ ; KNL-NEXT: retq
4698
+ ;
4699
+ ; SKX-LABEL: movmsk_or_v2f64:
4700
+ ; SKX: # %bb.0:
4701
+ ; SKX-NEXT: vcmplepd %xmm0, %xmm1, %k0
4702
+ ; SKX-NEXT: kshiftrb $1, %k0, %k1
4703
+ ; SKX-NEXT: kmovd %k1, %ecx
4704
+ ; SKX-NEXT: kmovd %k0, %eax
4705
+ ; SKX-NEXT: orb %cl, %al
4706
+ ; SKX-NEXT: # kill: def $al killed $al killed $eax
4707
+ ; SKX-NEXT: retq
4708
+ %cmp = fcmp oge <2 x double > %x , %y
4709
+ %e1 = extractelement <2 x i1 > %cmp , i32 0
4710
+ %e2 = extractelement <2 x i1 > %cmp , i32 1
4711
+ %u1 = or i1 %e1 , %e2
4712
+ ret i1 %u1
4713
+ }
4714
+
4615
4715
define i32 @PR39665_c_ray (<2 x double > %x , <2 x double > %y ) {
4616
4716
; SSE2-LABEL: PR39665_c_ray:
4617
4717
; SSE2: # %bb.0:
0 commit comments