Skip to content

Commit d8c44a5

Browse files
committed
[X86][SSE] Add OR(EXTRACTELT(X,0),OR(EXTRACTELT(X,1))) movmsk v2X64 tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375462 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 88e224a commit d8c44a5

File tree

1 file changed

+110
-10
lines changed

1 file changed

+110
-10
lines changed

test/CodeGen/X86/movmsk-cmp.ll

Lines changed: 110 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4457,8 +4457,8 @@ define i1 @movmsk_v4i32(<4 x i32> %x, <4 x i32> %y) {
44574457
ret i1 %u1
44584458
}
44594459

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:
44624462
; SSE2: # %bb.0:
44634463
; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
44644464
; 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) {
44694469
; SSE2-NEXT: sete %al
44704470
; SSE2-NEXT: retq
44714471
;
4472-
; AVX-LABEL: movmsk_v2i64:
4472+
; AVX-LABEL: movmsk_and_v2i64:
44734473
; AVX: # %bb.0:
44744474
; AVX-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
44754475
; AVX-NEXT: vmovmskpd %xmm0, %eax
@@ -4478,7 +4478,7 @@ define i1 @movmsk_v2i64(<2 x i64> %x, <2 x i64> %y) {
44784478
; AVX-NEXT: sete %al
44794479
; AVX-NEXT: retq
44804480
;
4481-
; KNL-LABEL: movmsk_v2i64:
4481+
; KNL-LABEL: movmsk_and_v2i64:
44824482
; KNL: # %bb.0:
44834483
; KNL-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
44844484
; 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) {
44914491
; KNL-NEXT: vzeroupper
44924492
; KNL-NEXT: retq
44934493
;
4494-
; SKX-LABEL: movmsk_v2i64:
4494+
; SKX-LABEL: movmsk_and_v2i64:
44954495
; SKX: # %bb.0:
44964496
; SKX-NEXT: vpcmpneqq %xmm1, %xmm0, %k0
44974497
; SKX-NEXT: kshiftrb $1, %k0, %k1
@@ -4507,6 +4507,58 @@ define i1 @movmsk_v2i64(<2 x i64> %x, <2 x i64> %y) {
45074507
ret i1 %u1
45084508
}
45094509

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+
45104562
define i1 @movmsk_v4f32(<4 x float> %x, <4 x float> %y) {
45114563
; SSE2-LABEL: movmsk_v4f32:
45124564
; SSE2: # %bb.0:
@@ -4566,24 +4618,24 @@ define i1 @movmsk_v4f32(<4 x float> %x, <4 x float> %y) {
45664618
ret i1 %u2
45674619
}
45684620

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:
45714623
; SSE2: # %bb.0:
45724624
; SSE2-NEXT: cmplepd %xmm0, %xmm1
45734625
; SSE2-NEXT: movmskpd %xmm1, %eax
45744626
; SSE2-NEXT: cmpb $3, %al
45754627
; SSE2-NEXT: sete %al
45764628
; SSE2-NEXT: retq
45774629
;
4578-
; AVX-LABEL: movmsk_v2f64:
4630+
; AVX-LABEL: movmsk_and_v2f64:
45794631
; AVX: # %bb.0:
45804632
; AVX-NEXT: vcmplepd %xmm0, %xmm1, %xmm0
45814633
; AVX-NEXT: vmovmskpd %xmm0, %eax
45824634
; AVX-NEXT: cmpb $3, %al
45834635
; AVX-NEXT: sete %al
45844636
; AVX-NEXT: retq
45854637
;
4586-
; KNL-LABEL: movmsk_v2f64:
4638+
; KNL-LABEL: movmsk_and_v2f64:
45874639
; KNL: # %bb.0:
45884640
; KNL-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
45894641
; 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) {
45964648
; KNL-NEXT: vzeroupper
45974649
; KNL-NEXT: retq
45984650
;
4599-
; SKX-LABEL: movmsk_v2f64:
4651+
; SKX-LABEL: movmsk_and_v2f64:
46004652
; SKX: # %bb.0:
46014653
; SKX-NEXT: vcmplepd %xmm0, %xmm1, %k0
46024654
; SKX-NEXT: kshiftrb $1, %k0, %k1
@@ -4612,6 +4664,54 @@ define i1 @movmsk_v2f64(<2 x double> %x, <2 x double> %y) {
46124664
ret i1 %u1
46134665
}
46144666

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+
46154715
define i32 @PR39665_c_ray(<2 x double> %x, <2 x double> %y) {
46164716
; SSE2-LABEL: PR39665_c_ray:
46174717
; SSE2: # %bb.0:

0 commit comments

Comments
 (0)