|  | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
|  | ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefix=SSE-32 | 
|  | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefix=SSE-64 | 
|  | ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefix=AVX-32 | 
|  | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefix=AVX-64 | 
|  | ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefix=AVX-32 | 
|  | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefix=AVX-64 | 
|  | ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=-sse -O3 | FileCheck %s --check-prefix=X87 | 
|  | ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=-sse,+cmov -O3 | FileCheck %s --check-prefix=X87-CMOV | 
|  |  | 
|  | define i32 @test_f32_oeq_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_oeq_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_oeq_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %esi, %eax | 
|  | ; SSE-64-NEXT:    cmovpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_oeq_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_oeq_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %esi, %eax | 
|  | ; AVX-64-NEXT:    cmovpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_oeq_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    jne .LBB0_3 | 
|  | ; X87-NEXT:  # %bb.1: | 
|  | ; X87-NEXT:    jp .LBB0_3 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:  .LBB0_3: | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_oeq_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"oeq", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ogt_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ogt_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmoval %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ogt_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovbel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ogt_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmoval %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ogt_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovbel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ogt_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    ja .LBB1_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB1_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ogt_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmoval %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"ogt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_oge_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_oge_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovael %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_oge_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovbl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_oge_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovael %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_oge_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovbl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_oge_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jae .LBB2_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB2_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_oge_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovael %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"oge", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_olt_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_olt_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmoval %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_olt_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovbel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_olt_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmoval %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_olt_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovbel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_olt_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    ja .LBB3_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB3_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_olt_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmoval %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"olt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ole_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ole_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovael %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ole_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovbl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ole_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovael %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ole_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovbl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ole_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jae .LBB4_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB4_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ole_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovael %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"ole", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_one_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_one_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_one_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_one_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_one_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_one_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jne .LBB5_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB5_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_one_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"one", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ord_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ord_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ord_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ord_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ord_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ord_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jnp .LBB6_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB6_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ord_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"ord", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ueq_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ueq_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ueq_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ueq_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ueq_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ueq_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    je .LBB7_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB7_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ueq_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"ueq", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ugt_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ugt_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ugt_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovael %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ugt_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ugt_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovael %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ugt_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jb .LBB8_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB8_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ugt_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"ugt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_uge_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_uge_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_uge_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmoval %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_uge_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_uge_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmoval %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_uge_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jbe .LBB9_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB9_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_uge_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"uge", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ult_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ult_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ult_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovael %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ult_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ult_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovael %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ult_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jb .LBB10_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB10_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ult_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"ult", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ule_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ule_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ule_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmoval %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ule_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ule_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmoval %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ule_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jbe .LBB11_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB11_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ule_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"ule", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_une_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_une_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_une_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %esi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %edi, %eax | 
|  | ; SSE-64-NEXT:    cmovpl %edi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_une_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_une_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %esi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %edi, %eax | 
|  | ; AVX-64-NEXT:    cmovpl %edi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_une_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    jne .LBB12_3 | 
|  | ; X87-NEXT:  # %bb.1: | 
|  | ; X87-NEXT:    jp .LBB12_3 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:  .LBB12_3: | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_une_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"une", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_uno_q(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_uno_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_uno_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_uno_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_uno_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_uno_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jp .LBB13_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB13_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_uno_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f32( | 
|  | float %f1, float %f2, metadata !"uno", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_oeq_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_oeq_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_oeq_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %esi, %eax | 
|  | ; SSE-64-NEXT:    cmovpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_oeq_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_oeq_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %esi, %eax | 
|  | ; AVX-64-NEXT:    cmovpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_oeq_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    jne .LBB14_3 | 
|  | ; X87-NEXT:  # %bb.1: | 
|  | ; X87-NEXT:    jp .LBB14_3 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:  .LBB14_3: | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_oeq_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"oeq", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ogt_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ogt_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmoval %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ogt_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovbel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ogt_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmoval %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ogt_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovbel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ogt_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    ja .LBB15_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB15_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ogt_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmoval %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"ogt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_oge_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_oge_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovael %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_oge_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovbl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_oge_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovael %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_oge_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovbl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_oge_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jae .LBB16_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB16_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_oge_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovael %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"oge", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_olt_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_olt_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmoval %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_olt_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovbel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_olt_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmoval %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_olt_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovbel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_olt_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    ja .LBB17_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB17_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_olt_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmoval %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"olt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ole_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ole_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovael %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ole_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovbl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ole_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovael %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ole_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovbl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ole_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jae .LBB18_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB18_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ole_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovael %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"ole", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_one_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_one_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_one_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_one_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_one_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_one_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jne .LBB19_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB19_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_one_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"one", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ord_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ord_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ord_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ord_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ord_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ord_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jnp .LBB20_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB20_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ord_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"ord", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ueq_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ueq_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ueq_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ueq_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ueq_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ueq_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    je .LBB21_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB21_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ueq_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"ueq", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ugt_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ugt_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ugt_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovael %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ugt_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ugt_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovael %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ugt_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jb .LBB22_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB22_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ugt_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"ugt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_uge_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_uge_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_uge_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmoval %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_uge_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_uge_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmoval %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_uge_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jbe .LBB23_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB23_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_uge_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"uge", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ult_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ult_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ult_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovael %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ult_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ult_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovael %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ult_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jb .LBB24_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB24_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ult_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"ult", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ule_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ule_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ule_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmoval %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ule_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ule_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmoval %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ule_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jbe .LBB25_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB25_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ule_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"ule", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_une_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_une_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_une_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %esi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %edi, %eax | 
|  | ; SSE-64-NEXT:    cmovpl %edi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_une_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_une_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %esi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %edi, %eax | 
|  | ; AVX-64-NEXT:    cmovpl %edi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_une_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    jne .LBB26_3 | 
|  | ; X87-NEXT:  # %bb.1: | 
|  | ; X87-NEXT:    jp .LBB26_3 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:  .LBB26_3: | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_une_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"une", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_uno_q(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_uno_q: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_uno_q: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    ucomisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_uno_q: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_uno_q: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vucomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_uno_q: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jp .LBB27_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB27_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_uno_q: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmp.f64( | 
|  | double %f1, double %f2, metadata !"uno", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_oeq_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_oeq_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_oeq_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %esi, %eax | 
|  | ; SSE-64-NEXT:    cmovpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_oeq_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_oeq_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %esi, %eax | 
|  | ; AVX-64-NEXT:    cmovpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_oeq_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    jne .LBB28_3 | 
|  | ; X87-NEXT:  # %bb.1: | 
|  | ; X87-NEXT:    jp .LBB28_3 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:  .LBB28_3: | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_oeq_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"oeq", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ogt_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ogt_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmoval %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ogt_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovbel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ogt_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmoval %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ogt_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovbel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ogt_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    ja .LBB29_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB29_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ogt_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmoval %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"ogt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_oge_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_oge_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovael %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_oge_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovbl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_oge_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovael %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_oge_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovbl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_oge_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jae .LBB30_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB30_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_oge_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovael %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"oge", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_olt_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_olt_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmoval %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_olt_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovbel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_olt_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmoval %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_olt_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovbel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_olt_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    ja .LBB31_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB31_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_olt_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmoval %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"olt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ole_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ole_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovael %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ole_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovbl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ole_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovael %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ole_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovbl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ole_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jae .LBB32_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB32_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ole_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovael %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"ole", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_one_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_one_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_one_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_one_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_one_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_one_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jne .LBB33_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB33_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_one_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"one", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ord_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ord_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ord_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ord_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ord_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ord_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jnp .LBB34_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB34_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ord_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"ord", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ueq_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ueq_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ueq_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ueq_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ueq_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ueq_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    je .LBB35_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB35_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ueq_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"ueq", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ugt_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ugt_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ugt_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovael %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ugt_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ugt_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovael %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ugt_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jb .LBB36_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB36_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ugt_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"ugt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_uge_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_uge_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_uge_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmoval %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_uge_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_uge_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmoval %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_uge_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jbe .LBB37_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB37_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_uge_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"uge", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ult_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ult_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ult_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovael %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ult_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ult_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovael %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ult_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jb .LBB38_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB38_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ult_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"ult", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_ule_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_ule_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_ule_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmoval %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_ule_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_ule_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmoval %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_ule_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jbe .LBB39_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB39_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_ule_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"ule", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_une_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_une_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_une_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %esi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %edi, %eax | 
|  | ; SSE-64-NEXT:    cmovpl %edi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_une_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_une_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %esi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %edi, %eax | 
|  | ; AVX-64-NEXT:    cmovpl %edi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_une_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    jne .LBB40_3 | 
|  | ; X87-NEXT:  # %bb.1: | 
|  | ; X87-NEXT:    jp .LBB40_3 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:  .LBB40_3: | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_une_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"une", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f32_uno_s(i32 %a, i32 %b, float %f1, float %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f32_uno_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f32_uno_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f32_uno_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f32_uno_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f32_uno_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jp .LBB41_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB41_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f32_uno_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f32( | 
|  | float %f1, float %f2, metadata !"uno", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_oeq_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_oeq_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_oeq_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %esi, %eax | 
|  | ; SSE-64-NEXT:    cmovpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_oeq_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_oeq_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %esi, %eax | 
|  | ; AVX-64-NEXT:    cmovpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_oeq_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    jne .LBB42_3 | 
|  | ; X87-NEXT:  # %bb.1: | 
|  | ; X87-NEXT:    jp .LBB42_3 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:  .LBB42_3: | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_oeq_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"oeq", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ogt_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ogt_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmoval %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ogt_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovbel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ogt_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmoval %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ogt_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovbel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ogt_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    ja .LBB43_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB43_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ogt_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmoval %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"ogt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_oge_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_oge_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovael %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_oge_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovbl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_oge_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovael %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_oge_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovbl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_oge_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jae .LBB44_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB44_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_oge_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovael %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"oge", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_olt_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_olt_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmoval %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_olt_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovbel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_olt_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmoval %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_olt_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovbel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_olt_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    ja .LBB45_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB45_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_olt_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmoval %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"olt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ole_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ole_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovael %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ole_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovbl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ole_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovael %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ole_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovbl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ole_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jae .LBB46_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB46_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ole_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovael %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"ole", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_one_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_one_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_one_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_one_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_one_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_one_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jne .LBB47_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB47_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_one_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"one", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ord_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ord_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ord_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ord_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ord_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ord_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jnp .LBB48_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB48_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ord_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"ord", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ueq_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ueq_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ueq_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ueq_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ueq_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ueq_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    je .LBB49_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB49_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ueq_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"ueq", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ugt_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ugt_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ugt_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmovael %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ugt_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ugt_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmovael %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ugt_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jb .LBB50_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB50_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ugt_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"ugt", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_uge_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_uge_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_uge_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm0, %xmm1 | 
|  | ; SSE-64-NEXT:    cmoval %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_uge_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_uge_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm0, %xmm1 | 
|  | ; AVX-64-NEXT:    cmoval %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_uge_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jbe .LBB51_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB51_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_uge_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"uge", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ult_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ult_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ult_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovael %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ult_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ult_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovael %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ult_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jb .LBB52_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB52_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ult_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"ult", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_ule_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_ule_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_ule_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmoval %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_ule_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovbel %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_ule_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmoval %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_ule_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jbe .LBB53_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB53_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_ule_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovbel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"ule", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_une_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_une_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_une_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %esi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnel %edi, %eax | 
|  | ; SSE-64-NEXT:    cmovpl %edi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_une_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovnel %eax, %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_une_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %esi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnel %edi, %eax | 
|  | ; AVX-64-NEXT:    cmovpl %edi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_une_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    jne .LBB54_3 | 
|  | ; X87-NEXT:  # %bb.1: | 
|  | ; X87-NEXT:    jp .LBB54_3 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:  .LBB54_3: | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_une_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovnel %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"une", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define i32 @test_f64_uno_s(i32 %a, i32 %b, double %f1, double %f2) #0 { | 
|  | ; SSE-32-LABEL: test_f64_uno_s: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; SSE-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; SSE-32-NEXT:    movl (%ecx), %eax | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: test_f64_uno_s: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    movl %edi, %eax | 
|  | ; SSE-64-NEXT:    comisd %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    cmovnpl %esi, %eax | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: test_f64_uno_s: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero | 
|  | ; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; AVX-32-NEXT:    cmovpl %eax, %ecx | 
|  | ; AVX-32-NEXT:    movl (%ecx), %eax | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: test_f64_uno_s: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    movl %edi, %eax | 
|  | ; AVX-64-NEXT:    vcomisd %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    cmovnpl %esi, %eax | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: test_f64_uno_s: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fcompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    jp .LBB55_1 | 
|  | ; X87-NEXT:  # %bb.2: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; X87-NEXT:  .LBB55_1: | 
|  | ; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-NEXT:    movl (%eax), %eax | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: test_f64_uno_s: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fcompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax | 
|  | ; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx | 
|  | ; X87-CMOV-NEXT:    cmovpl %eax, %ecx | 
|  | ; X87-CMOV-NEXT:    movl (%ecx), %eax | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %cond = call i1 @llvm.experimental.constrained.fcmps.f64( | 
|  | double %f1, double %f2, metadata !"uno", | 
|  | metadata !"fpexcept.strict") #0 | 
|  | %res = select i1 %cond, i32 %a, i32 %b | 
|  | ret i32 %res | 
|  | } | 
|  |  | 
|  | define void @foo(float %0, float %1) #0 { | 
|  | ; SSE-32-LABEL: foo: | 
|  | ; SSE-32:       # %bb.0: | 
|  | ; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; SSE-32-NEXT:    ja bar # TAILCALL | 
|  | ; SSE-32-NEXT:  # %bb.1: | 
|  | ; SSE-32-NEXT:    retl | 
|  | ; | 
|  | ; SSE-64-LABEL: foo: | 
|  | ; SSE-64:       # %bb.0: | 
|  | ; SSE-64-NEXT:    ucomiss %xmm1, %xmm0 | 
|  | ; SSE-64-NEXT:    ja bar # TAILCALL | 
|  | ; SSE-64-NEXT:  # %bb.1: | 
|  | ; SSE-64-NEXT:    retq | 
|  | ; | 
|  | ; AVX-32-LABEL: foo: | 
|  | ; AVX-32:       # %bb.0: | 
|  | ; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero | 
|  | ; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0 | 
|  | ; AVX-32-NEXT:    ja bar # TAILCALL | 
|  | ; AVX-32-NEXT:  # %bb.1: | 
|  | ; AVX-32-NEXT:    retl | 
|  | ; | 
|  | ; AVX-64-LABEL: foo: | 
|  | ; AVX-64:       # %bb.0: | 
|  | ; AVX-64-NEXT:    vucomiss %xmm1, %xmm0 | 
|  | ; AVX-64-NEXT:    ja bar # TAILCALL | 
|  | ; AVX-64-NEXT:  # %bb.1: | 
|  | ; AVX-64-NEXT:    retq | 
|  | ; | 
|  | ; X87-LABEL: foo: | 
|  | ; X87:       # %bb.0: | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-NEXT:    fucompp | 
|  | ; X87-NEXT:    wait | 
|  | ; X87-NEXT:    fnstsw %ax | 
|  | ; X87-NEXT:    # kill: def $ah killed $ah killed $ax | 
|  | ; X87-NEXT:    sahf | 
|  | ; X87-NEXT:    ja bar # TAILCALL | 
|  | ; X87-NEXT:  # %bb.1: | 
|  | ; X87-NEXT:    retl | 
|  | ; | 
|  | ; X87-CMOV-LABEL: foo: | 
|  | ; X87-CMOV:       # %bb.0: | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp) | 
|  | ; X87-CMOV-NEXT:    fucompi %st(1), %st | 
|  | ; X87-CMOV-NEXT:    fstp %st(0) | 
|  | ; X87-CMOV-NEXT:    wait | 
|  | ; X87-CMOV-NEXT:    ja bar # TAILCALL | 
|  | ; X87-CMOV-NEXT:  # %bb.1: | 
|  | ; X87-CMOV-NEXT:    retl | 
|  | %3 = call i1 @llvm.experimental.constrained.fcmp.f32( float %0, float %1, metadata !"ogt", metadata !"fpexcept.strict") #0 | 
|  | br i1 %3, label %4, label %5 | 
|  |  | 
|  | 4:                                                ; preds = %2 | 
|  | tail call void @bar() #0 | 
|  | br label %5 | 
|  |  | 
|  | 5:                                                ; preds = %4, %2 | 
|  | ret void | 
|  | } | 
|  | declare dso_local void @bar() | 
|  |  | 
|  | attributes #0 = { strictfp } | 
|  |  | 
|  | declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata) | 
|  | declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata) | 
|  | declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata) | 
|  | declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata) |