diff options
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 | 

