diff options
| author | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2016-05-14 15:06:09 +0000 |
|---|---|---|
| committer | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2016-05-14 15:06:09 +0000 |
| commit | e79b716dafb575ab0a595bee793e9473f0d38c0f (patch) | |
| tree | 4bc95522d8050822d60174a693966e691629d3df /llvm/test | |
| parent | f4917d35c91692587a00a3cc5abd68fb983e722a (diff) | |
| download | bcm5719-llvm-e79b716dafb575ab0a595bee793e9473f0d38c0f.tar.gz bcm5719-llvm-e79b716dafb575ab0a595bee793e9473f0d38c0f.zip | |
Fixed lowering of _comi_ intrinsics from all sets - SSE/SSE2/AVX/AVX-512
Differential revision http://reviews.llvm.org/D19261
llvm-svn: 269569
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/avx-intrinsics-x86.ll | 88 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/avx512-intrinsics.ll | 45 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/sse-intrinsics-x86.ll | 88 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/sse2-intrinsics-x86.ll | 88 |
4 files changed, 174 insertions, 135 deletions
diff --git a/llvm/test/CodeGen/X86/avx-intrinsics-x86.ll b/llvm/test/CodeGen/X86/avx-intrinsics-x86.ll index 7753013538a..f8d285866a7 100644 --- a/llvm/test/CodeGen/X86/avx-intrinsics-x86.ll +++ b/llvm/test/CodeGen/X86/avx-intrinsics-x86.ll @@ -104,8 +104,10 @@ define i32 @test_x86_sse2_comieq_sd(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_sse2_comieq_sd: ; CHECK: ## BB#0: ; CHECK-NEXT: vcomisd %xmm1, %xmm0 -; CHECK-NEXT: sete %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: setnp %al +; CHECK-NEXT: sete %cl +; CHECK-NEXT: andb %al, %cl +; CHECK-NEXT: movzbl %cl, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -142,8 +144,8 @@ declare i32 @llvm.x86.sse2.comigt.sd(<2 x double>, <2 x double>) nounwind readno define i32 @test_x86_sse2_comile_sd(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_sse2_comile_sd: ; CHECK: ## BB#0: -; CHECK-NEXT: vcomisd %xmm1, %xmm0 -; CHECK-NEXT: setbe %al +; CHECK-NEXT: vcomisd %xmm0, %xmm1 +; CHECK-NEXT: setae %al ; CHECK-NEXT: movzbl %al, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse2.comile.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] @@ -155,9 +157,9 @@ declare i32 @llvm.x86.sse2.comile.sd(<2 x double>, <2 x double>) nounwind readno define i32 @test_x86_sse2_comilt_sd(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_sse2_comilt_sd: ; CHECK: ## BB#0: -; CHECK-NEXT: vcomisd %xmm1, %xmm0 -; CHECK-NEXT: sbbl %eax, %eax -; CHECK-NEXT: andl $1, %eax +; CHECK-NEXT: vcomisd %xmm0, %xmm1 +; CHECK-NEXT: seta %al +; CHECK-NEXT: movzbl %al, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse2.comilt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -169,8 +171,10 @@ define i32 @test_x86_sse2_comineq_sd(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_sse2_comineq_sd: ; CHECK: ## BB#0: ; CHECK-NEXT: vcomisd %xmm1, %xmm0 -; CHECK-NEXT: setne %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: setp %al +; CHECK-NEXT: setne %cl +; CHECK-NEXT: orb %al, %cl +; CHECK-NEXT: movzbl %cl, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse2.comineq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -912,8 +916,10 @@ define i32 @test_x86_sse2_ucomieq_sd(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_sse2_ucomieq_sd: ; CHECK: ## BB#0: ; CHECK-NEXT: vucomisd %xmm1, %xmm0 -; CHECK-NEXT: sete %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: setnp %al +; CHECK-NEXT: sete %cl +; CHECK-NEXT: andb %al, %cl +; CHECK-NEXT: movzbl %cl, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -950,8 +956,8 @@ declare i32 @llvm.x86.sse2.ucomigt.sd(<2 x double>, <2 x double>) nounwind readn define i32 @test_x86_sse2_ucomile_sd(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_sse2_ucomile_sd: ; CHECK: ## BB#0: -; CHECK-NEXT: vucomisd %xmm1, %xmm0 -; CHECK-NEXT: setbe %al +; CHECK-NEXT: vucomisd %xmm0, %xmm1 +; CHECK-NEXT: setae %al ; CHECK-NEXT: movzbl %al, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] @@ -963,9 +969,9 @@ declare i32 @llvm.x86.sse2.ucomile.sd(<2 x double>, <2 x double>) nounwind readn define i32 @test_x86_sse2_ucomilt_sd(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_sse2_ucomilt_sd: ; CHECK: ## BB#0: -; CHECK-NEXT: vucomisd %xmm1, %xmm0 -; CHECK-NEXT: sbbl %eax, %eax -; CHECK-NEXT: andl $1, %eax +; CHECK-NEXT: vucomisd %xmm0, %xmm1 +; CHECK-NEXT: seta %al +; CHECK-NEXT: movzbl %al, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -977,8 +983,10 @@ define i32 @test_x86_sse2_ucomineq_sd(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_sse2_ucomineq_sd: ; CHECK: ## BB#0: ; CHECK-NEXT: vucomisd %xmm1, %xmm0 -; CHECK-NEXT: setne %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: setp %al +; CHECK-NEXT: setne %cl +; CHECK-NEXT: orb %al, %cl +; CHECK-NEXT: movzbl %cl, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -1699,8 +1707,10 @@ define i32 @test_x86_sse_comieq_ss(<4 x float> %a0, <4 x float> %a1) { ; CHECK-LABEL: test_x86_sse_comieq_ss: ; CHECK: ## BB#0: ; CHECK-NEXT: vcomiss %xmm1, %xmm0 -; CHECK-NEXT: sete %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: setnp %al +; CHECK-NEXT: sete %cl +; CHECK-NEXT: andb %al, %cl +; CHECK-NEXT: movzbl %cl, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -1737,8 +1747,8 @@ declare i32 @llvm.x86.sse.comigt.ss(<4 x float>, <4 x float>) nounwind readnone define i32 @test_x86_sse_comile_ss(<4 x float> %a0, <4 x float> %a1) { ; CHECK-LABEL: test_x86_sse_comile_ss: ; CHECK: ## BB#0: -; CHECK-NEXT: vcomiss %xmm1, %xmm0 -; CHECK-NEXT: setbe %al +; CHECK-NEXT: vcomiss %xmm0, %xmm1 +; CHECK-NEXT: setae %al ; CHECK-NEXT: movzbl %al, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse.comile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] @@ -1750,9 +1760,9 @@ declare i32 @llvm.x86.sse.comile.ss(<4 x float>, <4 x float>) nounwind readnone define i32 @test_x86_sse_comilt_ss(<4 x float> %a0, <4 x float> %a1) { ; CHECK-LABEL: test_x86_sse_comilt_ss: ; CHECK: ## BB#0: -; CHECK-NEXT: vcomiss %xmm1, %xmm0 -; CHECK-NEXT: sbbl %eax, %eax -; CHECK-NEXT: andl $1, %eax +; CHECK-NEXT: vcomiss %xmm0, %xmm1 +; CHECK-NEXT: seta %al +; CHECK-NEXT: movzbl %al, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse.comilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -1764,8 +1774,10 @@ define i32 @test_x86_sse_comineq_ss(<4 x float> %a0, <4 x float> %a1) { ; CHECK-LABEL: test_x86_sse_comineq_ss: ; CHECK: ## BB#0: ; CHECK-NEXT: vcomiss %xmm1, %xmm0 -; CHECK-NEXT: setne %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: setp %al +; CHECK-NEXT: setne %cl +; CHECK-NEXT: orb %al, %cl +; CHECK-NEXT: movzbl %cl, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse.comineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -2003,8 +2015,10 @@ define i32 @test_x86_sse_ucomieq_ss(<4 x float> %a0, <4 x float> %a1) { ; CHECK-LABEL: test_x86_sse_ucomieq_ss: ; CHECK: ## BB#0: ; CHECK-NEXT: vucomiss %xmm1, %xmm0 -; CHECK-NEXT: sete %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: setnp %al +; CHECK-NEXT: sete %cl +; CHECK-NEXT: andb %al, %cl +; CHECK-NEXT: movzbl %cl, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -2041,8 +2055,8 @@ declare i32 @llvm.x86.sse.ucomigt.ss(<4 x float>, <4 x float>) nounwind readnone define i32 @test_x86_sse_ucomile_ss(<4 x float> %a0, <4 x float> %a1) { ; CHECK-LABEL: test_x86_sse_ucomile_ss: ; CHECK: ## BB#0: -; CHECK-NEXT: vucomiss %xmm1, %xmm0 -; CHECK-NEXT: setbe %al +; CHECK-NEXT: vucomiss %xmm0, %xmm1 +; CHECK-NEXT: setae %al ; CHECK-NEXT: movzbl %al, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse.ucomile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] @@ -2054,9 +2068,9 @@ declare i32 @llvm.x86.sse.ucomile.ss(<4 x float>, <4 x float>) nounwind readnone define i32 @test_x86_sse_ucomilt_ss(<4 x float> %a0, <4 x float> %a1) { ; CHECK-LABEL: test_x86_sse_ucomilt_ss: ; CHECK: ## BB#0: -; CHECK-NEXT: vucomiss %xmm1, %xmm0 -; CHECK-NEXT: sbbl %eax, %eax -; CHECK-NEXT: andl $1, %eax +; CHECK-NEXT: vucomiss %xmm0, %xmm1 +; CHECK-NEXT: seta %al +; CHECK-NEXT: movzbl %al, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -2068,8 +2082,10 @@ define i32 @test_x86_sse_ucomineq_ss(<4 x float> %a0, <4 x float> %a1) { ; CHECK-LABEL: test_x86_sse_ucomineq_ss: ; CHECK: ## BB#0: ; CHECK-NEXT: vucomiss %xmm1, %xmm0 -; CHECK-NEXT: setne %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: setp %al +; CHECK-NEXT: setne %cl +; CHECK-NEXT: orb %al, %cl +; CHECK-NEXT: movzbl %cl, %eax ; CHECK-NEXT: retl %res = call i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res diff --git a/llvm/test/CodeGen/X86/avx512-intrinsics.ll b/llvm/test/CodeGen/X86/avx512-intrinsics.ll index 45dbf00fab3..657dd10482b 100644 --- a/llvm/test/CodeGen/X86/avx512-intrinsics.ll +++ b/llvm/test/CodeGen/X86/avx512-intrinsics.ll @@ -6307,9 +6307,8 @@ define <8 x double>@test_int_x86_avx512_mask_movddup_512(<8 x double> %x0, <8 x define i32 @test_x86_avx512_comi_sd_eq_sae(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_avx512_comi_sd_eq_sae: ; CHECK: ## BB#0: -; CHECK-NEXT: vcomisd {sae}, %xmm1, %xmm0 -; CHECK-NEXT: sete %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: vcmpeqsd {sae}, %xmm1, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: retq %res = call i32 @llvm.x86.avx512.vcomi.sd(<2 x double> %a0, <2 x double> %a1, i32 0, i32 8) ret i32 %res @@ -6318,9 +6317,8 @@ define i32 @test_x86_avx512_comi_sd_eq_sae(<2 x double> %a0, <2 x double> %a1) { define i32 @test_x86_avx512_ucomi_sd_eq_sae(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_avx512_ucomi_sd_eq_sae: ; CHECK: ## BB#0: -; CHECK-NEXT: vucomisd {sae}, %xmm1, %xmm0 -; CHECK-NEXT: sete %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: vcmpeq_uqsd {sae}, %xmm1, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: retq %res = call i32 @llvm.x86.avx512.vcomi.sd(<2 x double> %a0, <2 x double> %a1, i32 8, i32 8) ret i32 %res @@ -6329,9 +6327,8 @@ define i32 @test_x86_avx512_ucomi_sd_eq_sae(<2 x double> %a0, <2 x double> %a1) define i32 @test_x86_avx512_comi_sd_eq(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_avx512_comi_sd_eq: ; CHECK: ## BB#0: -; CHECK-NEXT: vcomisd %xmm1, %xmm0 -; CHECK-NEXT: sete %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: vcmpeqsd %xmm1, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: retq %res = call i32 @llvm.x86.avx512.vcomi.sd(<2 x double> %a0, <2 x double> %a1, i32 0, i32 4) ret i32 %res @@ -6340,9 +6337,8 @@ define i32 @test_x86_avx512_comi_sd_eq(<2 x double> %a0, <2 x double> %a1) { define i32 @test_x86_avx512_ucomi_sd_eq(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_avx512_ucomi_sd_eq: ; CHECK: ## BB#0: -; CHECK-NEXT: vucomisd %xmm1, %xmm0 -; CHECK-NEXT: sete %al -; CHECK-NEXT: movzbl %al, %eax +; CHECK-NEXT: vcmpeq_uqsd %xmm1, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: retq %res = call i32 @llvm.x86.avx512.vcomi.sd(<2 x double> %a0, <2 x double> %a1, i32 8, i32 4) ret i32 %res @@ -6351,9 +6347,8 @@ define i32 @test_x86_avx512_ucomi_sd_eq(<2 x double> %a0, <2 x double> %a1) { define i32 @test_x86_avx512_comi_sd_lt_sae(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_avx512_comi_sd_lt_sae: ; CHECK: ## BB#0: -; CHECK-NEXT: vcomisd {sae}, %xmm1, %xmm0 -; CHECK-NEXT: sbbl %eax, %eax -; CHECK-NEXT: andl $1, %eax +; CHECK-NEXT: vcmpltsd {sae}, %xmm1, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: retq %res = call i32 @llvm.x86.avx512.vcomi.sd(<2 x double> %a0, <2 x double> %a1, i32 1, i32 8) ret i32 %res @@ -6362,9 +6357,8 @@ define i32 @test_x86_avx512_comi_sd_lt_sae(<2 x double> %a0, <2 x double> %a1) { define i32 @test_x86_avx512_ucomi_sd_lt_sae(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_avx512_ucomi_sd_lt_sae: ; CHECK: ## BB#0: -; CHECK-NEXT: vucomisd {sae}, %xmm1, %xmm0 -; CHECK-NEXT: sbbl %eax, %eax -; CHECK-NEXT: andl $1, %eax +; CHECK-NEXT: vcmpngesd {sae}, %xmm1, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: retq %res = call i32 @llvm.x86.avx512.vcomi.sd(<2 x double> %a0, <2 x double> %a1, i32 9, i32 8) ret i32 %res @@ -6373,9 +6367,8 @@ define i32 @test_x86_avx512_ucomi_sd_lt_sae(<2 x double> %a0, <2 x double> %a1) define i32 @test_x86_avx512_comi_sd_lt(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_avx512_comi_sd_lt: ; CHECK: ## BB#0: -; CHECK-NEXT: vcomisd %xmm1, %xmm0 -; CHECK-NEXT: sbbl %eax, %eax -; CHECK-NEXT: andl $1, %eax +; CHECK-NEXT: vcmpltsd %xmm1, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: retq %res = call i32 @llvm.x86.avx512.vcomi.sd(<2 x double> %a0, <2 x double> %a1, i32 1, i32 4) ret i32 %res @@ -6384,9 +6377,8 @@ define i32 @test_x86_avx512_comi_sd_lt(<2 x double> %a0, <2 x double> %a1) { define i32 @test_x86_avx512_ucomi_sd_lt(<2 x double> %a0, <2 x double> %a1) { ; CHECK-LABEL: test_x86_avx512_ucomi_sd_lt: ; CHECK: ## BB#0: -; CHECK-NEXT: vucomisd %xmm1, %xmm0 -; CHECK-NEXT: sbbl %eax, %eax -; CHECK-NEXT: andl $1, %eax +; CHECK-NEXT: vcmpngesd %xmm1, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: retq %res = call i32 @llvm.x86.avx512.vcomi.sd(<2 x double> %a0, <2 x double> %a1, i32 9, i32 4) ret i32 %res @@ -6397,9 +6389,8 @@ declare i32 @llvm.x86.avx512.vcomi.sd(<2 x double>, <2 x double>, i32, i32) define i32 @test_x86_avx512_ucomi_ss_lt(<4 x float> %a0, <4 x float> %a1) { ; CHECK-LABEL: test_x86_avx512_ucomi_ss_lt: ; CHECK: ## BB#0: -; CHECK-NEXT: vucomiss %xmm1, %xmm0 -; CHECK-NEXT: sbbl %eax, %eax -; CHECK-NEXT: andl $1, %eax +; CHECK-NEXT: vcmpngess %xmm1, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: retq %res = call i32 @llvm.x86.avx512.vcomi.ss(<4 x float> %a0, <4 x float> %a1, i32 9, i32 4) ret i32 %res diff --git a/llvm/test/CodeGen/X86/sse-intrinsics-x86.ll b/llvm/test/CodeGen/X86/sse-intrinsics-x86.ll index 0449b2aa942..86b52419a39 100644 --- a/llvm/test/CodeGen/X86/sse-intrinsics-x86.ll +++ b/llvm/test/CodeGen/X86/sse-intrinsics-x86.ll @@ -54,15 +54,19 @@ define i32 @test_x86_sse_comieq_ss(<4 x float> %a0, <4 x float> %a1) { ; SSE-LABEL: test_x86_sse_comieq_ss: ; SSE: ## BB#0: ; SSE-NEXT: comiss %xmm1, %xmm0 -; SSE-NEXT: sete %al -; SSE-NEXT: movzbl %al, %eax +; SSE-NEXT: setnp %al +; SSE-NEXT: sete %cl +; SSE-NEXT: andb %al, %cl +; SSE-NEXT: movzbl %cl, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse_comieq_ss: ; KNL: ## BB#0: ; KNL-NEXT: vcomiss %xmm1, %xmm0 -; KNL-NEXT: sete %al -; KNL-NEXT: movzbl %al, %eax +; KNL-NEXT: setnp %al +; KNL-NEXT: sete %cl +; KNL-NEXT: andb %al, %cl +; KNL-NEXT: movzbl %cl, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -113,15 +117,15 @@ declare i32 @llvm.x86.sse.comigt.ss(<4 x float>, <4 x float>) nounwind readnone define i32 @test_x86_sse_comile_ss(<4 x float> %a0, <4 x float> %a1) { ; SSE-LABEL: test_x86_sse_comile_ss: ; SSE: ## BB#0: -; SSE-NEXT: comiss %xmm1, %xmm0 -; SSE-NEXT: setbe %al +; SSE-NEXT: comiss %xmm0, %xmm1 +; SSE-NEXT: setae %al ; SSE-NEXT: movzbl %al, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse_comile_ss: ; KNL: ## BB#0: -; KNL-NEXT: vcomiss %xmm1, %xmm0 -; KNL-NEXT: setbe %al +; KNL-NEXT: vcomiss %xmm0, %xmm1 +; KNL-NEXT: setae %al ; KNL-NEXT: movzbl %al, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse.comile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] @@ -133,16 +137,16 @@ declare i32 @llvm.x86.sse.comile.ss(<4 x float>, <4 x float>) nounwind readnone define i32 @test_x86_sse_comilt_ss(<4 x float> %a0, <4 x float> %a1) { ; SSE-LABEL: test_x86_sse_comilt_ss: ; SSE: ## BB#0: -; SSE-NEXT: comiss %xmm1, %xmm0 -; SSE-NEXT: sbbl %eax, %eax -; SSE-NEXT: andl $1, %eax +; SSE-NEXT: comiss %xmm0, %xmm1 +; SSE-NEXT: seta %al +; SSE-NEXT: movzbl %al, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse_comilt_ss: ; KNL: ## BB#0: -; KNL-NEXT: vcomiss %xmm1, %xmm0 -; KNL-NEXT: sbbl %eax, %eax -; KNL-NEXT: andl $1, %eax +; KNL-NEXT: vcomiss %xmm0, %xmm1 +; KNL-NEXT: seta %al +; KNL-NEXT: movzbl %al, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse.comilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -154,15 +158,19 @@ define i32 @test_x86_sse_comineq_ss(<4 x float> %a0, <4 x float> %a1) { ; SSE-LABEL: test_x86_sse_comineq_ss: ; SSE: ## BB#0: ; SSE-NEXT: comiss %xmm1, %xmm0 -; SSE-NEXT: setne %al -; SSE-NEXT: movzbl %al, %eax +; SSE-NEXT: setp %al +; SSE-NEXT: setne %cl +; SSE-NEXT: orb %al, %cl +; SSE-NEXT: movzbl %cl, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse_comineq_ss: ; KNL: ## BB#0: ; KNL-NEXT: vcomiss %xmm1, %xmm0 -; KNL-NEXT: setne %al -; KNL-NEXT: movzbl %al, %eax +; KNL-NEXT: setp %al +; KNL-NEXT: setne %cl +; KNL-NEXT: orb %al, %cl +; KNL-NEXT: movzbl %cl, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse.comineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -504,15 +512,19 @@ define i32 @test_x86_sse_ucomieq_ss(<4 x float> %a0, <4 x float> %a1) { ; SSE-LABEL: test_x86_sse_ucomieq_ss: ; SSE: ## BB#0: ; SSE-NEXT: ucomiss %xmm1, %xmm0 -; SSE-NEXT: sete %al -; SSE-NEXT: movzbl %al, %eax +; SSE-NEXT: setnp %al +; SSE-NEXT: sete %cl +; SSE-NEXT: andb %al, %cl +; SSE-NEXT: movzbl %cl, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse_ucomieq_ss: ; KNL: ## BB#0: ; KNL-NEXT: vucomiss %xmm1, %xmm0 -; KNL-NEXT: sete %al -; KNL-NEXT: movzbl %al, %eax +; KNL-NEXT: setnp %al +; KNL-NEXT: sete %cl +; KNL-NEXT: andb %al, %cl +; KNL-NEXT: movzbl %cl, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -563,15 +575,15 @@ declare i32 @llvm.x86.sse.ucomigt.ss(<4 x float>, <4 x float>) nounwind readnone define i32 @test_x86_sse_ucomile_ss(<4 x float> %a0, <4 x float> %a1) { ; SSE-LABEL: test_x86_sse_ucomile_ss: ; SSE: ## BB#0: -; SSE-NEXT: ucomiss %xmm1, %xmm0 -; SSE-NEXT: setbe %al +; SSE-NEXT: ucomiss %xmm0, %xmm1 +; SSE-NEXT: setae %al ; SSE-NEXT: movzbl %al, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse_ucomile_ss: ; KNL: ## BB#0: -; KNL-NEXT: vucomiss %xmm1, %xmm0 -; KNL-NEXT: setbe %al +; KNL-NEXT: vucomiss %xmm0, %xmm1 +; KNL-NEXT: setae %al ; KNL-NEXT: movzbl %al, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse.ucomile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] @@ -583,16 +595,16 @@ declare i32 @llvm.x86.sse.ucomile.ss(<4 x float>, <4 x float>) nounwind readnone define i32 @test_x86_sse_ucomilt_ss(<4 x float> %a0, <4 x float> %a1) { ; SSE-LABEL: test_x86_sse_ucomilt_ss: ; SSE: ## BB#0: -; SSE-NEXT: ucomiss %xmm1, %xmm0 -; SSE-NEXT: sbbl %eax, %eax -; SSE-NEXT: andl $1, %eax +; SSE-NEXT: ucomiss %xmm0, %xmm1 +; SSE-NEXT: seta %al +; SSE-NEXT: movzbl %al, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse_ucomilt_ss: ; KNL: ## BB#0: -; KNL-NEXT: vucomiss %xmm1, %xmm0 -; KNL-NEXT: sbbl %eax, %eax -; KNL-NEXT: andl $1, %eax +; KNL-NEXT: vucomiss %xmm0, %xmm1 +; KNL-NEXT: seta %al +; KNL-NEXT: movzbl %al, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res @@ -604,15 +616,19 @@ define i32 @test_x86_sse_ucomineq_ss(<4 x float> %a0, <4 x float> %a1) { ; SSE-LABEL: test_x86_sse_ucomineq_ss: ; SSE: ## BB#0: ; SSE-NEXT: ucomiss %xmm1, %xmm0 -; SSE-NEXT: setne %al -; SSE-NEXT: movzbl %al, %eax +; SSE-NEXT: setp %al +; SSE-NEXT: setne %cl +; SSE-NEXT: orb %al, %cl +; SSE-NEXT: movzbl %cl, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse_ucomineq_ss: ; KNL: ## BB#0: ; KNL-NEXT: vucomiss %xmm1, %xmm0 -; KNL-NEXT: setne %al -; KNL-NEXT: movzbl %al, %eax +; KNL-NEXT: setp %al +; KNL-NEXT: setne %cl +; KNL-NEXT: orb %al, %cl +; KNL-NEXT: movzbl %cl, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1] ret i32 %res diff --git a/llvm/test/CodeGen/X86/sse2-intrinsics-x86.ll b/llvm/test/CodeGen/X86/sse2-intrinsics-x86.ll index bbabc66e496..cfc8ddc41b7 100644 --- a/llvm/test/CodeGen/X86/sse2-intrinsics-x86.ll +++ b/llvm/test/CodeGen/X86/sse2-intrinsics-x86.ll @@ -54,15 +54,19 @@ define i32 @test_x86_sse2_comieq_sd(<2 x double> %a0, <2 x double> %a1) { ; SSE-LABEL: test_x86_sse2_comieq_sd: ; SSE: ## BB#0: ; SSE-NEXT: comisd %xmm1, %xmm0 -; SSE-NEXT: sete %al -; SSE-NEXT: movzbl %al, %eax +; SSE-NEXT: setnp %al +; SSE-NEXT: sete %cl +; SSE-NEXT: andb %al, %cl +; SSE-NEXT: movzbl %cl, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse2_comieq_sd: ; KNL: ## BB#0: ; KNL-NEXT: vcomisd %xmm1, %xmm0 -; KNL-NEXT: sete %al -; KNL-NEXT: movzbl %al, %eax +; KNL-NEXT: setnp %al +; KNL-NEXT: sete %cl +; KNL-NEXT: andb %al, %cl +; KNL-NEXT: movzbl %cl, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -113,15 +117,15 @@ declare i32 @llvm.x86.sse2.comigt.sd(<2 x double>, <2 x double>) nounwind readno define i32 @test_x86_sse2_comile_sd(<2 x double> %a0, <2 x double> %a1) { ; SSE-LABEL: test_x86_sse2_comile_sd: ; SSE: ## BB#0: -; SSE-NEXT: comisd %xmm1, %xmm0 -; SSE-NEXT: setbe %al +; SSE-NEXT: comisd %xmm0, %xmm1 +; SSE-NEXT: setae %al ; SSE-NEXT: movzbl %al, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse2_comile_sd: ; KNL: ## BB#0: -; KNL-NEXT: vcomisd %xmm1, %xmm0 -; KNL-NEXT: setbe %al +; KNL-NEXT: vcomisd %xmm0, %xmm1 +; KNL-NEXT: setae %al ; KNL-NEXT: movzbl %al, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse2.comile.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] @@ -133,16 +137,16 @@ declare i32 @llvm.x86.sse2.comile.sd(<2 x double>, <2 x double>) nounwind readno define i32 @test_x86_sse2_comilt_sd(<2 x double> %a0, <2 x double> %a1) { ; SSE-LABEL: test_x86_sse2_comilt_sd: ; SSE: ## BB#0: -; SSE-NEXT: comisd %xmm1, %xmm0 -; SSE-NEXT: sbbl %eax, %eax -; SSE-NEXT: andl $1, %eax +; SSE-NEXT: comisd %xmm0, %xmm1 +; SSE-NEXT: seta %al +; SSE-NEXT: movzbl %al, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse2_comilt_sd: ; KNL: ## BB#0: -; KNL-NEXT: vcomisd %xmm1, %xmm0 -; KNL-NEXT: sbbl %eax, %eax -; KNL-NEXT: andl $1, %eax +; KNL-NEXT: vcomisd %xmm0, %xmm1 +; KNL-NEXT: seta %al +; KNL-NEXT: movzbl %al, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse2.comilt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -154,15 +158,19 @@ define i32 @test_x86_sse2_comineq_sd(<2 x double> %a0, <2 x double> %a1) { ; SSE-LABEL: test_x86_sse2_comineq_sd: ; SSE: ## BB#0: ; SSE-NEXT: comisd %xmm1, %xmm0 -; SSE-NEXT: setne %al -; SSE-NEXT: movzbl %al, %eax +; SSE-NEXT: setp %al +; SSE-NEXT: setne %cl +; SSE-NEXT: orb %al, %cl +; SSE-NEXT: movzbl %cl, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse2_comineq_sd: ; KNL: ## BB#0: ; KNL-NEXT: vcomisd %xmm1, %xmm0 -; KNL-NEXT: setne %al -; KNL-NEXT: movzbl %al, %eax +; KNL-NEXT: setp %al +; KNL-NEXT: setne %cl +; KNL-NEXT: orb %al, %cl +; KNL-NEXT: movzbl %cl, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse2.comineq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -1237,15 +1245,19 @@ define i32 @test_x86_sse2_ucomieq_sd(<2 x double> %a0, <2 x double> %a1) { ; SSE-LABEL: test_x86_sse2_ucomieq_sd: ; SSE: ## BB#0: ; SSE-NEXT: ucomisd %xmm1, %xmm0 -; SSE-NEXT: sete %al -; SSE-NEXT: movzbl %al, %eax +; SSE-NEXT: setnp %al +; SSE-NEXT: sete %cl +; SSE-NEXT: andb %al, %cl +; SSE-NEXT: movzbl %cl, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse2_ucomieq_sd: ; KNL: ## BB#0: ; KNL-NEXT: vucomisd %xmm1, %xmm0 -; KNL-NEXT: sete %al -; KNL-NEXT: movzbl %al, %eax +; KNL-NEXT: setnp %al +; KNL-NEXT: sete %cl +; KNL-NEXT: andb %al, %cl +; KNL-NEXT: movzbl %cl, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -1296,15 +1308,15 @@ declare i32 @llvm.x86.sse2.ucomigt.sd(<2 x double>, <2 x double>) nounwind readn define i32 @test_x86_sse2_ucomile_sd(<2 x double> %a0, <2 x double> %a1) { ; SSE-LABEL: test_x86_sse2_ucomile_sd: ; SSE: ## BB#0: -; SSE-NEXT: ucomisd %xmm1, %xmm0 -; SSE-NEXT: setbe %al +; SSE-NEXT: ucomisd %xmm0, %xmm1 +; SSE-NEXT: setae %al ; SSE-NEXT: movzbl %al, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse2_ucomile_sd: ; KNL: ## BB#0: -; KNL-NEXT: vucomisd %xmm1, %xmm0 -; KNL-NEXT: setbe %al +; KNL-NEXT: vucomisd %xmm0, %xmm1 +; KNL-NEXT: setae %al ; KNL-NEXT: movzbl %al, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] @@ -1316,16 +1328,16 @@ declare i32 @llvm.x86.sse2.ucomile.sd(<2 x double>, <2 x double>) nounwind readn define i32 @test_x86_sse2_ucomilt_sd(<2 x double> %a0, <2 x double> %a1) { ; SSE-LABEL: test_x86_sse2_ucomilt_sd: ; SSE: ## BB#0: -; SSE-NEXT: ucomisd %xmm1, %xmm0 -; SSE-NEXT: sbbl %eax, %eax -; SSE-NEXT: andl $1, %eax +; SSE-NEXT: ucomisd %xmm0, %xmm1 +; SSE-NEXT: seta %al +; SSE-NEXT: movzbl %al, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse2_ucomilt_sd: ; KNL: ## BB#0: -; KNL-NEXT: vucomisd %xmm1, %xmm0 -; KNL-NEXT: sbbl %eax, %eax -; KNL-NEXT: andl $1, %eax +; KNL-NEXT: vucomisd %xmm0, %xmm1 +; KNL-NEXT: seta %al +; KNL-NEXT: movzbl %al, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res @@ -1337,15 +1349,19 @@ define i32 @test_x86_sse2_ucomineq_sd(<2 x double> %a0, <2 x double> %a1) { ; SSE-LABEL: test_x86_sse2_ucomineq_sd: ; SSE: ## BB#0: ; SSE-NEXT: ucomisd %xmm1, %xmm0 -; SSE-NEXT: setne %al -; SSE-NEXT: movzbl %al, %eax +; SSE-NEXT: setp %al +; SSE-NEXT: setne %cl +; SSE-NEXT: orb %al, %cl +; SSE-NEXT: movzbl %cl, %eax ; SSE-NEXT: retl ; ; KNL-LABEL: test_x86_sse2_ucomineq_sd: ; KNL: ## BB#0: ; KNL-NEXT: vucomisd %xmm1, %xmm0 -; KNL-NEXT: setne %al -; KNL-NEXT: movzbl %al, %eax +; KNL-NEXT: setp %al +; KNL-NEXT: setne %cl +; KNL-NEXT: orb %al, %cl +; KNL-NEXT: movzbl %cl, %eax ; KNL-NEXT: retl %res = call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1] ret i32 %res |

