llvm/llvm/test/CodeGen/X86/fptoui-sat-scalar.ll

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=i686-linux | FileCheck %s --check-prefix=X86-X87
; RUN: llc < %s -mtriple=i686-linux -mattr=+sse2 | FileCheck %s --check-prefix=X86-SSE
; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X64

;
; 32-bit float to unsigned integer
;

declare   i1 @llvm.fptoui.sat.i1.f32  (float)
declare   i8 @llvm.fptoui.sat.i8.f32  (float)
declare  i13 @llvm.fptoui.sat.i13.f32 (float)
declare  i16 @llvm.fptoui.sat.i16.f32 (float)
declare  i19 @llvm.fptoui.sat.i19.f32 (float)
declare  i32 @llvm.fptoui.sat.i32.f32 (float)
declare  i50 @llvm.fptoui.sat.i50.f32 (float)
declare  i64 @llvm.fptoui.sat.i64.f32 (float)
declare i100 @llvm.fptoui.sat.i100.f32(float)
declare i128 @llvm.fptoui.sat.i128.f32(float)

define i1 @test_unsigned_i1_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i1_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB0_1
; X86-X87-NEXT:  # %bb.2:
; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    jmp .LBB0_3
; X86-X87-NEXT:  .LBB0_1:
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:  .LBB0_3:
; X86-X87-NEXT:    fld1
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movb $1, %al
; X86-X87-NEXT:    ja .LBB0_5
; X86-X87-NEXT:  # %bb.4:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB0_5:
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i1_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    xorps %xmm0, %xmm0
; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
; X86-SSE-NEXT:    minss %xmm0, %xmm1
; X86-SSE-NEXT:    cvttss2si %xmm1, %eax
; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i1_f32:
; X64:       # %bb.0:
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    maxss %xmm0, %xmm1
; X64-NEXT:    movss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
; X64-NEXT:    minss %xmm1, %xmm0
; X64-NEXT:    cvttss2si %xmm0, %eax
; X64-NEXT:    # kill: def $al killed $al killed $eax
; X64-NEXT:    retq
    %x = call i1 @llvm.fptoui.sat.i1.f32(float %f)
    ret i1 %x
}

define i8 @test_unsigned_i8_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i8_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB1_1
; X86-X87-NEXT:  # %bb.2:
; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    jmp .LBB1_3
; X86-X87-NEXT:  .LBB1_1:
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:  .LBB1_3:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movb $-1, %al
; X86-X87-NEXT:    ja .LBB1_5
; X86-X87-NEXT:  # %bb.4:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB1_5:
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i8_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    xorps %xmm0, %xmm0
; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]
; X86-SSE-NEXT:    minss %xmm0, %xmm1
; X86-SSE-NEXT:    cvttss2si %xmm1, %eax
; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i8_f32:
; X64:       # %bb.0:
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    maxss %xmm0, %xmm1
; X64-NEXT:    movss {{.*#+}} xmm0 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]
; X64-NEXT:    minss %xmm1, %xmm0
; X64-NEXT:    cvttss2si %xmm0, %eax
; X64-NEXT:    # kill: def $al killed $al killed $eax
; X64-NEXT:    retq
    %x = call i8 @llvm.fptoui.sat.i8.f32(float %f)
    ret i8 %x
}

define i13 @test_unsigned_i13_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i13_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw (%esp)
; X86-X87-NEXT:    movzwl (%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB2_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB2_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $8191, %eax # imm = 0x1FFF
; X86-X87-NEXT:    ja .LBB2_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB2_4:
; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i13_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    xorps %xmm0, %xmm0
; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [8.191E+3,0.0E+0,0.0E+0,0.0E+0]
; X86-SSE-NEXT:    minss %xmm0, %xmm1
; X86-SSE-NEXT:    cvttss2si %xmm1, %eax
; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i13_f32:
; X64:       # %bb.0:
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    maxss %xmm0, %xmm1
; X64-NEXT:    movss {{.*#+}} xmm0 = [8.191E+3,0.0E+0,0.0E+0,0.0E+0]
; X64-NEXT:    minss %xmm1, %xmm0
; X64-NEXT:    cvttss2si %xmm0, %eax
; X64-NEXT:    # kill: def $ax killed $ax killed $eax
; X64-NEXT:    retq
    %x = call i13 @llvm.fptoui.sat.i13.f32(float %f)
    ret i13 %x
}

define i16 @test_unsigned_i16_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i16_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw (%esp)
; X86-X87-NEXT:    movzwl (%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB3_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB3_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $65535, %eax # imm = 0xFFFF
; X86-X87-NEXT:    ja .LBB3_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB3_4:
; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i16_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    xorps %xmm0, %xmm0
; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]
; X86-SSE-NEXT:    minss %xmm0, %xmm1
; X86-SSE-NEXT:    cvttss2si %xmm1, %eax
; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i16_f32:
; X64:       # %bb.0:
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    maxss %xmm0, %xmm1
; X64-NEXT:    movss {{.*#+}} xmm0 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]
; X64-NEXT:    minss %xmm1, %xmm0
; X64-NEXT:    cvttss2si %xmm0, %eax
; X64-NEXT:    # kill: def $ax killed $ax killed $eax
; X64-NEXT:    retq
    %x = call i16 @llvm.fptoui.sat.i16.f32(float %f)
    ret i16 %x
}

define i19 @test_unsigned_i19_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i19_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB4_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB4_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $524287, %eax # imm = 0x7FFFF
; X86-X87-NEXT:    ja .LBB4_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB4_4:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i19_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    maxss %xmm1, %xmm0
; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i19_f32:
; X64:       # %bb.0:
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    maxss %xmm1, %xmm0
; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    cvttss2si %xmm0, %eax
; X64-NEXT:    retq
    %x = call i19 @llvm.fptoui.sat.i19.f32(float %f)
    ret i19 %x
}

define i32 @test_unsigned_i32_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i32_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB5_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB5_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    ja .LBB5_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB5_4:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i32_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
; X86-SSE-NEXT:    movl %eax, %ecx
; X86-SSE-NEXT:    sarl $31, %ecx
; X86-SSE-NEXT:    movaps %xmm0, %xmm1
; X86-SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1
; X86-SSE-NEXT:    cvttss2si %xmm1, %edx
; X86-SSE-NEXT:    andl %ecx, %edx
; X86-SSE-NEXT:    orl %eax, %edx
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    cmovael %edx, %ecx
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $-1, %eax
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i32_f32:
; X64:       # %bb.0:
; X64-NEXT:    cvttss2si %xmm0, %rax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovael %eax, %ecx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movl $-1, %eax
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    retq
    %x = call i32 @llvm.fptoui.sat.i32.f32(float %f)
    ret i32 %x
}

define i50 @test_unsigned_i50_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i50_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $16, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    setbe %al
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    jbe .LBB6_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:  .LBB6_2:
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsubr %st(2), %st
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00
; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movb %al, %cl
; X86-X87-NEXT:    shll $31, %ecx
; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %edx, %edx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %esi
; X86-X87-NEXT:    jb .LBB6_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %esi
; X86-X87-NEXT:  .LBB6_4:
; X86-X87-NEXT:    jb .LBB6_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:  .LBB6_6:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    ja .LBB6_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %edx, %eax
; X86-X87-NEXT:  .LBB6_8:
; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF
; X86-X87-NEXT:    ja .LBB6_10
; X86-X87-NEXT:  # %bb.9:
; X86-X87-NEXT:    movl %esi, %edx
; X86-X87-NEXT:  .LBB6_10:
; X86-X87-NEXT:    addl $16, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i50_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $16, %esp
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]
; X86-SSE-NEXT:    ucomiss %xmm0, %xmm2
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    jbe .LBB6_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    xorps %xmm2, %xmm2
; X86-SSE-NEXT:  .LBB6_2:
; X86-SSE-NEXT:    movaps %xmm0, %xmm3
; X86-SSE-NEXT:    subss %xmm2, %xmm3
; X86-SSE-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    setbe %cl
; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %esi
; X86-SSE-NEXT:    jb .LBB6_4
; X86-SSE-NEXT:  # %bb.3:
; X86-SSE-NEXT:    movzbl %cl, %eax
; X86-SSE-NEXT:    shll $31, %eax
; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:  .LBB6_4:
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF
; X86-SSE-NEXT:    cmovbel %eax, %edx
; X86-SSE-NEXT:    movl $-1, %eax
; X86-SSE-NEXT:    cmovbel %esi, %eax
; X86-SSE-NEXT:    addl $16, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i50_f32:
; X64:       # %bb.0:
; X64-NEXT:    cvttss2si %xmm0, %rax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovaeq %rax, %rcx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movabsq $1125899906842623, %rax # imm = 0x3FFFFFFFFFFFF
; X64-NEXT:    cmovbeq %rcx, %rax
; X64-NEXT:    retq
    %x = call i50 @llvm.fptoui.sat.i50.f32(float %f)
    ret i50 %x
}

define i64 @test_unsigned_i64_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i64_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    setbe %al
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    jbe .LBB7_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:  .LBB7_2:
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsubr %st(2), %st
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00
; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movb %al, %cl
; X86-X87-NEXT:    shll $31, %ecx
; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %esi, %esi
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %edi
; X86-X87-NEXT:    jb .LBB7_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %edi
; X86-X87-NEXT:  .LBB7_4:
; X86-X87-NEXT:    jb .LBB7_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-X87-NEXT:  .LBB7_6:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    movl $-1, %edx
; X86-X87-NEXT:    ja .LBB7_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %esi, %eax
; X86-X87-NEXT:    movl %edi, %edx
; X86-X87-NEXT:  .LBB7_8:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i64_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $20, %esp
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]
; X86-SSE-NEXT:    ucomiss %xmm0, %xmm2
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    jbe .LBB7_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    xorps %xmm2, %xmm2
; X86-SSE-NEXT:  .LBB7_2:
; X86-SSE-NEXT:    movaps %xmm0, %xmm3
; X86-SSE-NEXT:    subss %xmm2, %xmm3
; X86-SSE-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    setbe %cl
; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %edx, %edx
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %eax
; X86-SSE-NEXT:    jb .LBB7_4
; X86-SSE-NEXT:  # %bb.3:
; X86-SSE-NEXT:    movzbl %cl, %edx
; X86-SSE-NEXT:    shll $31, %edx
; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:  .LBB7_4:
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $-1, %ecx
; X86-SSE-NEXT:    cmoval %ecx, %edx
; X86-SSE-NEXT:    cmoval %ecx, %eax
; X86-SSE-NEXT:    addl $20, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i64_f32:
; X64:       # %bb.0:
; X64-NEXT:    cvttss2si %xmm0, %rax
; X64-NEXT:    movq %rax, %rcx
; X64-NEXT:    sarq $63, %rcx
; X64-NEXT:    movaps %xmm0, %xmm1
; X64-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    cvttss2si %xmm1, %rdx
; X64-NEXT:    andq %rcx, %rdx
; X64-NEXT:    orq %rax, %rdx
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovaeq %rdx, %rcx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movq $-1, %rax
; X64-NEXT:    cmovbeq %rcx, %rax
; X64-NEXT:    retq
    %x = call i64 @llvm.fptoui.sat.i64.f32(float %f)
    ret i64 %x
}

define i100 @test_unsigned_i100_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i100_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %ebp
; X86-X87-NEXT:    pushl %ebx
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $44, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    movl %eax, %ebx
; X86-X87-NEXT:    calll __fixunssfti
; X86-X87-NEXT:    subl $4, %esp
; X86-X87-NEXT:    xorl %edi, %edi
; X86-X87-NEXT:    movb %bh, %ah
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %eax
; X86-X87-NEXT:    jb .LBB8_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:  .LBB8_2:
; X86-X87-NEXT:    movl $0, %esi
; X86-X87-NEXT:    movl $0, %ebx
; X86-X87-NEXT:    jb .LBB8_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-X87-NEXT:  .LBB8_4:
; X86-X87-NEXT:    jb .LBB8_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-X87-NEXT:  .LBB8_6:
; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $15, %eax
; X86-X87-NEXT:    ja .LBB8_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %edi, %eax
; X86-X87-NEXT:  .LBB8_8:
; X86-X87-NEXT:    movl $-1, %edi
; X86-X87-NEXT:    movl $-1, %ebp
; X86-X87-NEXT:    movl $-1, %edx
; X86-X87-NEXT:    ja .LBB8_10
; X86-X87-NEXT:  # %bb.9:
; X86-X87-NEXT:    movl %ebx, %edi
; X86-X87-NEXT:    movl %esi, %ebp
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
; X86-X87-NEXT:  .LBB8_10:
; X86-X87-NEXT:    movl %edx, 8(%ecx)
; X86-X87-NEXT:    movl %ebp, 4(%ecx)
; X86-X87-NEXT:    movl %edi, (%ecx)
; X86-X87-NEXT:    andl $15, %eax
; X86-X87-NEXT:    movb %al, 12(%ecx)
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:    addl $44, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    popl %ebx
; X86-X87-NEXT:    popl %ebp
; X86-X87-NEXT:    retl $4
;
; X86-SSE-LABEL: test_unsigned_i100_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %ebx
; X86-SSE-NEXT:    pushl %edi
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $32, %esp
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl %eax, (%esp)
; X86-SSE-NEXT:    calll __fixunssfti
; X86-SSE-NEXT:    subl $4, %esp
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    xorps %xmm0, %xmm0
; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    ucomiss %xmm0, %xmm1
; X86-SSE-NEXT:    movaps %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %ecx
; X86-SSE-NEXT:    movl $0, %edx
; X86-SSE-NEXT:    movl $0, %edi
; X86-SSE-NEXT:    jb .LBB8_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-SSE-NEXT:  .LBB8_2:
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $15, %ebx
; X86-SSE-NEXT:    cmovbel %edi, %ebx
; X86-SSE-NEXT:    movl $-1, %edi
; X86-SSE-NEXT:    cmoval %edi, %edx
; X86-SSE-NEXT:    cmoval %edi, %ecx
; X86-SSE-NEXT:    cmoval %edi, %eax
; X86-SSE-NEXT:    movl %eax, 8(%esi)
; X86-SSE-NEXT:    movl %ecx, 4(%esi)
; X86-SSE-NEXT:    movl %edx, (%esi)
; X86-SSE-NEXT:    andl $15, %ebx
; X86-SSE-NEXT:    movb %bl, 12(%esi)
; X86-SSE-NEXT:    movl %esi, %eax
; X86-SSE-NEXT:    addl $32, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    popl %edi
; X86-SSE-NEXT:    popl %ebx
; X86-SSE-NEXT:    retl $4
;
; X64-LABEL: test_unsigned_i100_f32:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
; X64-NEXT:    callq __fixunssfti@PLT
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm0, %xmm0
; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload
; X64-NEXT:    # xmm1 = mem[0],zero,zero,zero
; X64-NEXT:    ucomiss %xmm0, %xmm1
; X64-NEXT:    cmovbq %rcx, %rdx
; X64-NEXT:    cmovbq %rcx, %rax
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    movq $-1, %rcx
; X64-NEXT:    cmovaq %rcx, %rax
; X64-NEXT:    movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF
; X64-NEXT:    cmovaq %rcx, %rdx
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i100 @llvm.fptoui.sat.i100.f32(float %f)
    ret i100 %x
}

define i128 @test_unsigned_i128_f32(float %f) nounwind {
; X86-X87-LABEL: test_unsigned_i128_f32:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %ebp
; X86-X87-NEXT:    pushl %ebx
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $60, %esp
; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    movl %eax, %ebx
; X86-X87-NEXT:    calll __fixunssfti
; X86-X87-NEXT:    subl $4, %esp
; X86-X87-NEXT:    xorl %edx, %edx
; X86-X87-NEXT:    movb %bh, %ah
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %eax
; X86-X87-NEXT:    jb .LBB9_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:  .LBB9_2:
; X86-X87-NEXT:    movl $0, %ecx
; X86-X87-NEXT:    jb .LBB9_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB9_4:
; X86-X87-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    movl $0, %ebx
; X86-X87-NEXT:    jb .LBB9_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:  .LBB9_6:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    movl $-1, %ebp
; X86-X87-NEXT:    movl $-1, %edi
; X86-X87-NEXT:    movl $-1, %esi
; X86-X87-NEXT:    ja .LBB9_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %ebx, %eax
; X86-X87-NEXT:    movl %edx, %ebp
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
; X86-X87-NEXT:  .LBB9_8:
; X86-X87-NEXT:    movl %esi, 12(%ecx)
; X86-X87-NEXT:    movl %edi, 8(%ecx)
; X86-X87-NEXT:    movl %ebp, 4(%ecx)
; X86-X87-NEXT:    movl %eax, (%ecx)
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:    addl $60, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    popl %ebx
; X86-X87-NEXT:    popl %ebp
; X86-X87-NEXT:    retl $4
;
; X86-SSE-LABEL: test_unsigned_i128_f32:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %ebx
; X86-SSE-NEXT:    pushl %edi
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $32, %esp
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl %eax, (%esp)
; X86-SSE-NEXT:    calll __fixunssfti
; X86-SSE-NEXT:    subl $4, %esp
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    xorps %xmm0, %xmm0
; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    ucomiss %xmm0, %xmm1
; X86-SSE-NEXT:    movaps %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %ecx
; X86-SSE-NEXT:    movl $0, %edx
; X86-SSE-NEXT:    movl $0, %edi
; X86-SSE-NEXT:    jb .LBB9_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-SSE-NEXT:  .LBB9_2:
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $-1, %ebx
; X86-SSE-NEXT:    cmoval %ebx, %edi
; X86-SSE-NEXT:    cmoval %ebx, %edx
; X86-SSE-NEXT:    cmoval %ebx, %ecx
; X86-SSE-NEXT:    cmoval %ebx, %eax
; X86-SSE-NEXT:    movl %eax, 12(%esi)
; X86-SSE-NEXT:    movl %ecx, 8(%esi)
; X86-SSE-NEXT:    movl %edx, 4(%esi)
; X86-SSE-NEXT:    movl %edi, (%esi)
; X86-SSE-NEXT:    movl %esi, %eax
; X86-SSE-NEXT:    addl $32, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    popl %edi
; X86-SSE-NEXT:    popl %ebx
; X86-SSE-NEXT:    retl $4
;
; X64-LABEL: test_unsigned_i128_f32:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
; X64-NEXT:    callq __fixunssfti@PLT
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm0, %xmm0
; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload
; X64-NEXT:    # xmm1 = mem[0],zero,zero,zero
; X64-NEXT:    ucomiss %xmm0, %xmm1
; X64-NEXT:    cmovbq %rcx, %rdx
; X64-NEXT:    cmovbq %rcx, %rax
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    movq $-1, %rcx
; X64-NEXT:    cmovaq %rcx, %rax
; X64-NEXT:    cmovaq %rcx, %rdx
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i128 @llvm.fptoui.sat.i128.f32(float %f)
    ret i128 %x
}

;
; 64-bit float to unsigned integer
;

declare   i1 @llvm.fptoui.sat.i1.f64  (double)
declare   i8 @llvm.fptoui.sat.i8.f64  (double)
declare  i13 @llvm.fptoui.sat.i13.f64 (double)
declare  i16 @llvm.fptoui.sat.i16.f64 (double)
declare  i19 @llvm.fptoui.sat.i19.f64 (double)
declare  i32 @llvm.fptoui.sat.i32.f64 (double)
declare  i50 @llvm.fptoui.sat.i50.f64 (double)
declare  i64 @llvm.fptoui.sat.i64.f64 (double)
declare i100 @llvm.fptoui.sat.i100.f64(double)
declare i128 @llvm.fptoui.sat.i128.f64(double)

define i1 @test_unsigned_i1_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i1_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB10_1
; X86-X87-NEXT:  # %bb.2:
; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    jmp .LBB10_3
; X86-X87-NEXT:  .LBB10_1:
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:  .LBB10_3:
; X86-X87-NEXT:    fld1
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movb $1, %al
; X86-X87-NEXT:    ja .LBB10_5
; X86-X87-NEXT:  # %bb.4:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB10_5:
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i1_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    xorpd %xmm0, %xmm0
; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [1.0E+0,0.0E+0]
; X86-SSE-NEXT:    minsd %xmm0, %xmm1
; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax
; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i1_f64:
; X64:       # %bb.0:
; X64-NEXT:    xorpd %xmm1, %xmm1
; X64-NEXT:    maxsd %xmm0, %xmm1
; X64-NEXT:    movsd {{.*#+}} xmm0 = [1.0E+0,0.0E+0]
; X64-NEXT:    minsd %xmm1, %xmm0
; X64-NEXT:    cvttsd2si %xmm0, %eax
; X64-NEXT:    # kill: def $al killed $al killed $eax
; X64-NEXT:    retq
    %x = call i1 @llvm.fptoui.sat.i1.f64(double %f)
    ret i1 %x
}

define i8 @test_unsigned_i8_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i8_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB11_1
; X86-X87-NEXT:  # %bb.2:
; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    jmp .LBB11_3
; X86-X87-NEXT:  .LBB11_1:
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:  .LBB11_3:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movb $-1, %al
; X86-X87-NEXT:    ja .LBB11_5
; X86-X87-NEXT:  # %bb.4:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB11_5:
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i8_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    xorpd %xmm0, %xmm0
; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [2.55E+2,0.0E+0]
; X86-SSE-NEXT:    minsd %xmm0, %xmm1
; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax
; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i8_f64:
; X64:       # %bb.0:
; X64-NEXT:    xorpd %xmm1, %xmm1
; X64-NEXT:    maxsd %xmm0, %xmm1
; X64-NEXT:    movsd {{.*#+}} xmm0 = [2.55E+2,0.0E+0]
; X64-NEXT:    minsd %xmm1, %xmm0
; X64-NEXT:    cvttsd2si %xmm0, %eax
; X64-NEXT:    # kill: def $al killed $al killed $eax
; X64-NEXT:    retq
    %x = call i8 @llvm.fptoui.sat.i8.f64(double %f)
    ret i8 %x
}

define i13 @test_unsigned_i13_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i13_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw (%esp)
; X86-X87-NEXT:    movzwl (%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB12_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB12_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $8191, %eax # imm = 0x1FFF
; X86-X87-NEXT:    ja .LBB12_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB12_4:
; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i13_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    xorpd %xmm0, %xmm0
; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [8.191E+3,0.0E+0]
; X86-SSE-NEXT:    minsd %xmm0, %xmm1
; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax
; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i13_f64:
; X64:       # %bb.0:
; X64-NEXT:    xorpd %xmm1, %xmm1
; X64-NEXT:    maxsd %xmm0, %xmm1
; X64-NEXT:    movsd {{.*#+}} xmm0 = [8.191E+3,0.0E+0]
; X64-NEXT:    minsd %xmm1, %xmm0
; X64-NEXT:    cvttsd2si %xmm0, %eax
; X64-NEXT:    # kill: def $ax killed $ax killed $eax
; X64-NEXT:    retq
    %x = call i13 @llvm.fptoui.sat.i13.f64(double %f)
    ret i13 %x
}

define i16 @test_unsigned_i16_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i16_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw (%esp)
; X86-X87-NEXT:    movzwl (%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB13_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB13_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $65535, %eax # imm = 0xFFFF
; X86-X87-NEXT:    ja .LBB13_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB13_4:
; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i16_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    xorpd %xmm0, %xmm0
; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [6.5535E+4,0.0E+0]
; X86-SSE-NEXT:    minsd %xmm0, %xmm1
; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax
; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i16_f64:
; X64:       # %bb.0:
; X64-NEXT:    xorpd %xmm1, %xmm1
; X64-NEXT:    maxsd %xmm0, %xmm1
; X64-NEXT:    movsd {{.*#+}} xmm0 = [6.5535E+4,0.0E+0]
; X64-NEXT:    minsd %xmm1, %xmm0
; X64-NEXT:    cvttsd2si %xmm0, %eax
; X64-NEXT:    # kill: def $ax killed $ax killed $eax
; X64-NEXT:    retq
    %x = call i16 @llvm.fptoui.sat.i16.f64(double %f)
    ret i16 %x
}

define i19 @test_unsigned_i19_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i19_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB14_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB14_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $524287, %eax # imm = 0x7FFFF
; X86-X87-NEXT:    ja .LBB14_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB14_4:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i19_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
; X86-SSE-NEXT:    xorpd %xmm1, %xmm1
; X86-SSE-NEXT:    maxsd %xmm1, %xmm0
; X86-SSE-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    cvttsd2si %xmm0, %eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i19_f64:
; X64:       # %bb.0:
; X64-NEXT:    xorpd %xmm1, %xmm1
; X64-NEXT:    maxsd %xmm1, %xmm0
; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    cvttsd2si %xmm0, %eax
; X64-NEXT:    retq
    %x = call i19 @llvm.fptoui.sat.i19.f64(double %f)
    ret i19 %x
}

define i32 @test_unsigned_i32_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i32_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB15_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB15_2:
; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    ja .LBB15_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB15_4:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i32_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
; X86-SSE-NEXT:    xorpd %xmm1, %xmm1
; X86-SSE-NEXT:    maxsd %xmm1, %xmm0
; X86-SSE-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    cvttsd2si %xmm0, %ecx
; X86-SSE-NEXT:    movl %ecx, %edx
; X86-SSE-NEXT:    sarl $31, %edx
; X86-SSE-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    cvttsd2si %xmm0, %eax
; X86-SSE-NEXT:    andl %edx, %eax
; X86-SSE-NEXT:    orl %ecx, %eax
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i32_f64:
; X64:       # %bb.0:
; X64-NEXT:    xorpd %xmm1, %xmm1
; X64-NEXT:    maxsd %xmm0, %xmm1
; X64-NEXT:    movsd {{.*#+}} xmm0 = [4.294967295E+9,0.0E+0]
; X64-NEXT:    minsd %xmm1, %xmm0
; X64-NEXT:    cvttsd2si %xmm0, %rax
; X64-NEXT:    # kill: def $eax killed $eax killed $rax
; X64-NEXT:    retq
    %x = call i32 @llvm.fptoui.sat.i32.f64(double %f)
    ret i32 %x
}

define i50 @test_unsigned_i50_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i50_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $16, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    setbe %al
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    jbe .LBB16_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:  .LBB16_2:
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsubr %st(2), %st
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00
; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movb %al, %cl
; X86-X87-NEXT:    shll $31, %ecx
; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %edx, %edx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %esi
; X86-X87-NEXT:    jb .LBB16_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %esi
; X86-X87-NEXT:  .LBB16_4:
; X86-X87-NEXT:    jb .LBB16_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:  .LBB16_6:
; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    ja .LBB16_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %edx, %eax
; X86-X87-NEXT:  .LBB16_8:
; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF
; X86-X87-NEXT:    ja .LBB16_10
; X86-X87-NEXT:  # %bb.9:
; X86-X87-NEXT:    movl %esi, %edx
; X86-X87-NEXT:  .LBB16_10:
; X86-X87-NEXT:    addl $16, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i50_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $16, %esp
; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
; X86-SSE-NEXT:    movsd {{.*#+}} xmm2 = [9.2233720368547758E+18,0.0E+0]
; X86-SSE-NEXT:    ucomisd %xmm0, %xmm2
; X86-SSE-NEXT:    xorpd %xmm1, %xmm1
; X86-SSE-NEXT:    jbe .LBB16_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    xorpd %xmm2, %xmm2
; X86-SSE-NEXT:  .LBB16_2:
; X86-SSE-NEXT:    movapd %xmm0, %xmm3
; X86-SSE-NEXT:    subsd %xmm2, %xmm3
; X86-SSE-NEXT:    movsd %xmm3, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    setbe %cl
; X86-SSE-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    ucomisd %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %esi
; X86-SSE-NEXT:    jb .LBB16_4
; X86-SSE-NEXT:  # %bb.3:
; X86-SSE-NEXT:    movzbl %cl, %eax
; X86-SSE-NEXT:    shll $31, %eax
; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:  .LBB16_4:
; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF
; X86-SSE-NEXT:    cmovbel %eax, %edx
; X86-SSE-NEXT:    movl $-1, %eax
; X86-SSE-NEXT:    cmovbel %esi, %eax
; X86-SSE-NEXT:    addl $16, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i50_f64:
; X64:       # %bb.0:
; X64-NEXT:    xorpd %xmm1, %xmm1
; X64-NEXT:    maxsd %xmm1, %xmm0
; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    cvttsd2si %xmm0, %rax
; X64-NEXT:    retq
    %x = call i50 @llvm.fptoui.sat.i50.f64(double %f)
    ret i50 %x
}

define i64 @test_unsigned_i64_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i64_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    setbe %al
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    jbe .LBB17_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:  .LBB17_2:
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsubr %st(2), %st
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00
; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movb %al, %cl
; X86-X87-NEXT:    shll $31, %ecx
; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %esi, %esi
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %edi
; X86-X87-NEXT:    jb .LBB17_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %edi
; X86-X87-NEXT:  .LBB17_4:
; X86-X87-NEXT:    jb .LBB17_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-X87-NEXT:  .LBB17_6:
; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    movl $-1, %edx
; X86-X87-NEXT:    ja .LBB17_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %esi, %eax
; X86-X87-NEXT:    movl %edi, %edx
; X86-X87-NEXT:  .LBB17_8:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i64_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $20, %esp
; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
; X86-SSE-NEXT:    movsd {{.*#+}} xmm2 = [9.2233720368547758E+18,0.0E+0]
; X86-SSE-NEXT:    ucomisd %xmm0, %xmm2
; X86-SSE-NEXT:    xorpd %xmm1, %xmm1
; X86-SSE-NEXT:    jbe .LBB17_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    xorpd %xmm2, %xmm2
; X86-SSE-NEXT:  .LBB17_2:
; X86-SSE-NEXT:    movapd %xmm0, %xmm3
; X86-SSE-NEXT:    subsd %xmm2, %xmm3
; X86-SSE-NEXT:    movsd %xmm3, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    setbe %cl
; X86-SSE-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %edx, %edx
; X86-SSE-NEXT:    ucomisd %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %eax
; X86-SSE-NEXT:    jb .LBB17_4
; X86-SSE-NEXT:  # %bb.3:
; X86-SSE-NEXT:    movzbl %cl, %edx
; X86-SSE-NEXT:    shll $31, %edx
; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:  .LBB17_4:
; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $-1, %ecx
; X86-SSE-NEXT:    cmoval %ecx, %edx
; X86-SSE-NEXT:    cmoval %ecx, %eax
; X86-SSE-NEXT:    addl $20, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i64_f64:
; X64:       # %bb.0:
; X64-NEXT:    cvttsd2si %xmm0, %rax
; X64-NEXT:    movq %rax, %rcx
; X64-NEXT:    sarq $63, %rcx
; X64-NEXT:    movapd %xmm0, %xmm1
; X64-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    cvttsd2si %xmm1, %rdx
; X64-NEXT:    andq %rcx, %rdx
; X64-NEXT:    orq %rax, %rdx
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorpd %xmm1, %xmm1
; X64-NEXT:    ucomisd %xmm1, %xmm0
; X64-NEXT:    cmovaeq %rdx, %rcx
; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movq $-1, %rax
; X64-NEXT:    cmovbeq %rcx, %rax
; X64-NEXT:    retq
    %x = call i64 @llvm.fptoui.sat.i64.f64(double %f)
    ret i64 %x
}

define i100 @test_unsigned_i100_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i100_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %ebp
; X86-X87-NEXT:    pushl %ebx
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $44, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fstl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    movl %eax, %ebx
; X86-X87-NEXT:    calll __fixunsdfti
; X86-X87-NEXT:    subl $4, %esp
; X86-X87-NEXT:    xorl %edi, %edi
; X86-X87-NEXT:    movb %bh, %ah
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %eax
; X86-X87-NEXT:    jb .LBB18_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:  .LBB18_2:
; X86-X87-NEXT:    movl $0, %esi
; X86-X87-NEXT:    movl $0, %ebx
; X86-X87-NEXT:    jb .LBB18_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-X87-NEXT:  .LBB18_4:
; X86-X87-NEXT:    jb .LBB18_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-X87-NEXT:  .LBB18_6:
; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $15, %eax
; X86-X87-NEXT:    ja .LBB18_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %edi, %eax
; X86-X87-NEXT:  .LBB18_8:
; X86-X87-NEXT:    movl $-1, %edi
; X86-X87-NEXT:    movl $-1, %ebp
; X86-X87-NEXT:    movl $-1, %edx
; X86-X87-NEXT:    ja .LBB18_10
; X86-X87-NEXT:  # %bb.9:
; X86-X87-NEXT:    movl %ebx, %edi
; X86-X87-NEXT:    movl %esi, %ebp
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
; X86-X87-NEXT:  .LBB18_10:
; X86-X87-NEXT:    movl %edx, 8(%ecx)
; X86-X87-NEXT:    movl %ebp, 4(%ecx)
; X86-X87-NEXT:    movl %edi, (%ecx)
; X86-X87-NEXT:    andl $15, %eax
; X86-X87-NEXT:    movb %al, 12(%ecx)
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:    addl $44, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    popl %ebx
; X86-X87-NEXT:    popl %ebp
; X86-X87-NEXT:    retl $4
;
; X86-SSE-LABEL: test_unsigned_i100_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %ebx
; X86-SSE-NEXT:    pushl %edi
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $32, %esp
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl %eax, (%esp)
; X86-SSE-NEXT:    calll __fixunsdfti
; X86-SSE-NEXT:    subl $4, %esp
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    xorpd %xmm0, %xmm0
; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
; X86-SSE-NEXT:    ucomisd %xmm0, %xmm1
; X86-SSE-NEXT:    movapd %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %ecx
; X86-SSE-NEXT:    movl $0, %edx
; X86-SSE-NEXT:    movl $0, %edi
; X86-SSE-NEXT:    jb .LBB18_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-SSE-NEXT:  .LBB18_2:
; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $15, %ebx
; X86-SSE-NEXT:    cmovbel %edi, %ebx
; X86-SSE-NEXT:    movl $-1, %edi
; X86-SSE-NEXT:    cmoval %edi, %edx
; X86-SSE-NEXT:    cmoval %edi, %ecx
; X86-SSE-NEXT:    cmoval %edi, %eax
; X86-SSE-NEXT:    movl %eax, 8(%esi)
; X86-SSE-NEXT:    movl %ecx, 4(%esi)
; X86-SSE-NEXT:    movl %edx, (%esi)
; X86-SSE-NEXT:    andl $15, %ebx
; X86-SSE-NEXT:    movb %bl, 12(%esi)
; X86-SSE-NEXT:    movl %esi, %eax
; X86-SSE-NEXT:    addl $32, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    popl %edi
; X86-SSE-NEXT:    popl %ebx
; X86-SSE-NEXT:    retl $4
;
; X64-LABEL: test_unsigned_i100_f64:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill
; X64-NEXT:    callq __fixunsdfti@PLT
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorpd %xmm0, %xmm0
; X64-NEXT:    movsd (%rsp), %xmm1 # 8-byte Reload
; X64-NEXT:    # xmm1 = mem[0],zero
; X64-NEXT:    ucomisd %xmm0, %xmm1
; X64-NEXT:    cmovbq %rcx, %rdx
; X64-NEXT:    cmovbq %rcx, %rax
; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    movq $-1, %rcx
; X64-NEXT:    cmovaq %rcx, %rax
; X64-NEXT:    movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF
; X64-NEXT:    cmovaq %rcx, %rdx
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i100 @llvm.fptoui.sat.i100.f64(double %f)
    ret i100 %x
}

define i128 @test_unsigned_i128_f64(double %f) nounwind {
; X86-X87-LABEL: test_unsigned_i128_f64:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %ebp
; X86-X87-NEXT:    pushl %ebx
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $60, %esp
; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fstl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    movl %eax, %ebx
; X86-X87-NEXT:    calll __fixunsdfti
; X86-X87-NEXT:    subl $4, %esp
; X86-X87-NEXT:    xorl %edx, %edx
; X86-X87-NEXT:    movb %bh, %ah
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %eax
; X86-X87-NEXT:    jb .LBB19_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:  .LBB19_2:
; X86-X87-NEXT:    movl $0, %ecx
; X86-X87-NEXT:    jb .LBB19_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB19_4:
; X86-X87-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    movl $0, %ebx
; X86-X87-NEXT:    jb .LBB19_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:  .LBB19_6:
; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    movl $-1, %ebp
; X86-X87-NEXT:    movl $-1, %edi
; X86-X87-NEXT:    movl $-1, %esi
; X86-X87-NEXT:    ja .LBB19_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %ebx, %eax
; X86-X87-NEXT:    movl %edx, %ebp
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
; X86-X87-NEXT:  .LBB19_8:
; X86-X87-NEXT:    movl %esi, 12(%ecx)
; X86-X87-NEXT:    movl %edi, 8(%ecx)
; X86-X87-NEXT:    movl %ebp, 4(%ecx)
; X86-X87-NEXT:    movl %eax, (%ecx)
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:    addl $60, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    popl %ebx
; X86-X87-NEXT:    popl %ebp
; X86-X87-NEXT:    retl $4
;
; X86-SSE-LABEL: test_unsigned_i128_f64:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %ebx
; X86-SSE-NEXT:    pushl %edi
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $32, %esp
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl %eax, (%esp)
; X86-SSE-NEXT:    calll __fixunsdfti
; X86-SSE-NEXT:    subl $4, %esp
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    xorpd %xmm0, %xmm0
; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
; X86-SSE-NEXT:    ucomisd %xmm0, %xmm1
; X86-SSE-NEXT:    movapd %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %ecx
; X86-SSE-NEXT:    movl $0, %edx
; X86-SSE-NEXT:    movl $0, %edi
; X86-SSE-NEXT:    jb .LBB19_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-SSE-NEXT:  .LBB19_2:
; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $-1, %ebx
; X86-SSE-NEXT:    cmoval %ebx, %edi
; X86-SSE-NEXT:    cmoval %ebx, %edx
; X86-SSE-NEXT:    cmoval %ebx, %ecx
; X86-SSE-NEXT:    cmoval %ebx, %eax
; X86-SSE-NEXT:    movl %eax, 12(%esi)
; X86-SSE-NEXT:    movl %ecx, 8(%esi)
; X86-SSE-NEXT:    movl %edx, 4(%esi)
; X86-SSE-NEXT:    movl %edi, (%esi)
; X86-SSE-NEXT:    movl %esi, %eax
; X86-SSE-NEXT:    addl $32, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    popl %edi
; X86-SSE-NEXT:    popl %ebx
; X86-SSE-NEXT:    retl $4
;
; X64-LABEL: test_unsigned_i128_f64:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill
; X64-NEXT:    callq __fixunsdfti@PLT
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorpd %xmm0, %xmm0
; X64-NEXT:    movsd (%rsp), %xmm1 # 8-byte Reload
; X64-NEXT:    # xmm1 = mem[0],zero
; X64-NEXT:    ucomisd %xmm0, %xmm1
; X64-NEXT:    cmovbq %rcx, %rdx
; X64-NEXT:    cmovbq %rcx, %rax
; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    movq $-1, %rcx
; X64-NEXT:    cmovaq %rcx, %rax
; X64-NEXT:    cmovaq %rcx, %rdx
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i128 @llvm.fptoui.sat.i128.f64(double %f)
    ret i128 %x
}

;
; 16-bit float to unsigned integer
;

declare   i1 @llvm.fptoui.sat.i1.f16  (half)
declare   i8 @llvm.fptoui.sat.i8.f16  (half)
declare  i13 @llvm.fptoui.sat.i13.f16 (half)
declare  i16 @llvm.fptoui.sat.i16.f16 (half)
declare  i19 @llvm.fptoui.sat.i19.f16 (half)
declare  i32 @llvm.fptoui.sat.i32.f16 (half)
declare  i50 @llvm.fptoui.sat.i50.f16 (half)
declare  i64 @llvm.fptoui.sat.i64.f16 (half)
declare i100 @llvm.fptoui.sat.i100.f16(half)
declare i128 @llvm.fptoui.sat.i128.f16(half)

define i1 @test_unsigned_i1_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i1_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $12, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB20_1
; X86-X87-NEXT:  # %bb.2:
; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    jmp .LBB20_3
; X86-X87-NEXT:  .LBB20_1:
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:  .LBB20_3:
; X86-X87-NEXT:    fld1
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movb $1, %al
; X86-X87-NEXT:    ja .LBB20_5
; X86-X87-NEXT:  # %bb.4:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB20_5:
; X86-X87-NEXT:    addl $12, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i1_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $12, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    cmovael %eax, %ecx
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $1, %eax
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
; X86-SSE-NEXT:    addl $12, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i1_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    cvttss2si %xmm0, %eax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovael %eax, %ecx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movl $1, %eax
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    # kill: def $al killed $al killed $eax
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i1 @llvm.fptoui.sat.i1.f16(half %f)
    ret i1 %x
}

define i8 @test_unsigned_i8_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i8_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $12, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB21_1
; X86-X87-NEXT:  # %bb.2:
; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    jmp .LBB21_3
; X86-X87-NEXT:  .LBB21_1:
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:  .LBB21_3:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movb $-1, %al
; X86-X87-NEXT:    ja .LBB21_5
; X86-X87-NEXT:  # %bb.4:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB21_5:
; X86-X87-NEXT:    addl $12, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i8_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $12, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    cmovael %eax, %ecx
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $255, %eax
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
; X86-SSE-NEXT:    addl $12, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i8_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    cvttss2si %xmm0, %eax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovael %eax, %ecx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movl $255, %eax
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    # kill: def $al killed $al killed $eax
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i8 @llvm.fptoui.sat.i8.f16(half %f)
    ret i8 %x
}

define i13 @test_unsigned_i13_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i13_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $12, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB22_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB22_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $8191, %eax # imm = 0x1FFF
; X86-X87-NEXT:    ja .LBB22_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB22_4:
; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-X87-NEXT:    addl $12, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i13_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $12, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    cmovael %eax, %ecx
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $8191, %eax # imm = 0x1FFF
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-SSE-NEXT:    addl $12, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i13_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    cvttss2si %xmm0, %eax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovael %eax, %ecx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movl $8191, %eax # imm = 0x1FFF
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    # kill: def $ax killed $ax killed $eax
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i13 @llvm.fptoui.sat.i13.f16(half %f)
    ret i13 %x
}

define i16 @test_unsigned_i16_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i16_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $12, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB23_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB23_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $65535, %eax # imm = 0xFFFF
; X86-X87-NEXT:    ja .LBB23_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB23_4:
; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-X87-NEXT:    addl $12, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i16_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $12, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    cmovael %eax, %ecx
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $65535, %eax # imm = 0xFFFF
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-SSE-NEXT:    addl $12, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i16_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    cvttss2si %xmm0, %eax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovael %eax, %ecx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movl $65535, %eax # imm = 0xFFFF
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    # kill: def $ax killed $ax killed $eax
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i16 @llvm.fptoui.sat.i16.f16(half %f)
    ret i16 %x
}

define i19 @test_unsigned_i19_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i19_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $28, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB24_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB24_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $524287, %eax # imm = 0x7FFFF
; X86-X87-NEXT:    ja .LBB24_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB24_4:
; X86-X87-NEXT:    addl $28, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i19_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $12, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
; X86-SSE-NEXT:    movl %eax, %ecx
; X86-SSE-NEXT:    sarl $31, %ecx
; X86-SSE-NEXT:    movaps %xmm0, %xmm1
; X86-SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1
; X86-SSE-NEXT:    cvttss2si %xmm1, %edx
; X86-SSE-NEXT:    andl %ecx, %edx
; X86-SSE-NEXT:    orl %eax, %edx
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    cmovael %edx, %ecx
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $524287, %eax # imm = 0x7FFFF
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    addl $12, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i19_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    cvttss2si %xmm0, %rax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovael %eax, %ecx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movl $524287, %eax # imm = 0x7FFFF
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i19 @llvm.fptoui.sat.i19.f16(half %f)
    ret i19 %x
}

define i32 @test_unsigned_i32_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i32_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $28, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB25_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB25_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    ja .LBB25_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB25_4:
; X86-X87-NEXT:    addl $28, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i32_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $12, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
; X86-SSE-NEXT:    movl %eax, %ecx
; X86-SSE-NEXT:    sarl $31, %ecx
; X86-SSE-NEXT:    movaps %xmm0, %xmm1
; X86-SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1
; X86-SSE-NEXT:    cvttss2si %xmm1, %edx
; X86-SSE-NEXT:    andl %ecx, %edx
; X86-SSE-NEXT:    orl %eax, %edx
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    cmovael %edx, %ecx
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $-1, %eax
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    addl $12, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i32_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    cvttss2si %xmm0, %rax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovael %eax, %ecx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movl $-1, %eax
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i32 @llvm.fptoui.sat.i32.f16(half %f)
    ret i32 %x
}

define i50 @test_unsigned_i50_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i50_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $24, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    setae %al
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    jae .LBB26_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    fstp %st(2)
; X86-X87-NEXT:    fld %st(1)
; X86-X87-NEXT:    fxch %st(2)
; X86-X87-NEXT:  .LBB26_2:
; X86-X87-NEXT:    fxch %st(2)
; X86-X87-NEXT:    fsubr %st(1), %st
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00
; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movb %al, %cl
; X86-X87-NEXT:    shll $31, %ecx
; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %edx, %edx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %esi
; X86-X87-NEXT:    jb .LBB26_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %esi
; X86-X87-NEXT:  .LBB26_4:
; X86-X87-NEXT:    jb .LBB26_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:  .LBB26_6:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    ja .LBB26_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %edx, %eax
; X86-X87-NEXT:  .LBB26_8:
; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF
; X86-X87-NEXT:    ja .LBB26_10
; X86-X87-NEXT:  # %bb.9:
; X86-X87-NEXT:    movl %esi, %edx
; X86-X87-NEXT:  .LBB26_10:
; X86-X87-NEXT:    addl $24, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i50_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $24, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]
; X86-SSE-NEXT:    ucomiss %xmm2, %xmm0
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    jae .LBB26_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    xorps %xmm2, %xmm2
; X86-SSE-NEXT:  .LBB26_2:
; X86-SSE-NEXT:    movaps %xmm0, %xmm3
; X86-SSE-NEXT:    subss %xmm2, %xmm3
; X86-SSE-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    setae %cl
; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %esi
; X86-SSE-NEXT:    jb .LBB26_4
; X86-SSE-NEXT:  # %bb.3:
; X86-SSE-NEXT:    movzbl %cl, %eax
; X86-SSE-NEXT:    shll $31, %eax
; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:  .LBB26_4:
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF
; X86-SSE-NEXT:    cmovbel %eax, %edx
; X86-SSE-NEXT:    movl $-1, %eax
; X86-SSE-NEXT:    cmovbel %esi, %eax
; X86-SSE-NEXT:    addl $24, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i50_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    cvttss2si %xmm0, %rax
; X64-NEXT:    movq %rax, %rcx
; X64-NEXT:    sarq $63, %rcx
; X64-NEXT:    movaps %xmm0, %xmm1
; X64-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    cvttss2si %xmm1, %rdx
; X64-NEXT:    andq %rcx, %rdx
; X64-NEXT:    orq %rax, %rdx
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovaeq %rdx, %rcx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movabsq $1125899906842623, %rax # imm = 0x3FFFFFFFFFFFF
; X64-NEXT:    cmovbeq %rcx, %rax
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i50 @llvm.fptoui.sat.i50.f16(half %f)
    ret i50 %x
}

define i64 @test_unsigned_i64_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i64_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    setae %al
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    jae .LBB27_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    fstp %st(2)
; X86-X87-NEXT:    fld %st(1)
; X86-X87-NEXT:    fxch %st(2)
; X86-X87-NEXT:  .LBB27_2:
; X86-X87-NEXT:    fxch %st(2)
; X86-X87-NEXT:    fsubr %st(1), %st
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00
; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movb %al, %cl
; X86-X87-NEXT:    shll $31, %ecx
; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %esi, %esi
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %edi
; X86-X87-NEXT:    jb .LBB27_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %edi
; X86-X87-NEXT:  .LBB27_4:
; X86-X87-NEXT:    jb .LBB27_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-X87-NEXT:  .LBB27_6:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    movl $-1, %edx
; X86-X87-NEXT:    ja .LBB27_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %esi, %eax
; X86-X87-NEXT:    movl %edi, %edx
; X86-X87-NEXT:  .LBB27_8:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i64_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $28, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]
; X86-SSE-NEXT:    ucomiss %xmm2, %xmm0
; X86-SSE-NEXT:    xorps %xmm1, %xmm1
; X86-SSE-NEXT:    jae .LBB27_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    xorps %xmm2, %xmm2
; X86-SSE-NEXT:  .LBB27_2:
; X86-SSE-NEXT:    movaps %xmm0, %xmm3
; X86-SSE-NEXT:    subss %xmm2, %xmm3
; X86-SSE-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    setae %cl
; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %edx, %edx
; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %eax
; X86-SSE-NEXT:    jb .LBB27_4
; X86-SSE-NEXT:  # %bb.3:
; X86-SSE-NEXT:    movzbl %cl, %edx
; X86-SSE-NEXT:    shll $31, %edx
; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:  .LBB27_4:
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $-1, %ecx
; X86-SSE-NEXT:    cmoval %ecx, %edx
; X86-SSE-NEXT:    cmoval %ecx, %eax
; X86-SSE-NEXT:    addl $28, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i64_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    cvttss2si %xmm0, %rax
; X64-NEXT:    movq %rax, %rcx
; X64-NEXT:    sarq $63, %rcx
; X64-NEXT:    movaps %xmm0, %xmm1
; X64-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    cvttss2si %xmm1, %rdx
; X64-NEXT:    andq %rcx, %rdx
; X64-NEXT:    orq %rax, %rdx
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm1, %xmm1
; X64-NEXT:    ucomiss %xmm1, %xmm0
; X64-NEXT:    cmovaeq %rdx, %rcx
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; X64-NEXT:    movq $-1, %rax
; X64-NEXT:    cmovbeq %rcx, %rax
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i64 @llvm.fptoui.sat.i64.f16(half %f)
    ret i64 %x
}

define i100 @test_unsigned_i100_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i100_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %ebp
; X86-X87-NEXT:    pushl %ebx
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $44, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    movl %eax, %ebx
; X86-X87-NEXT:    calll __fixunssfti
; X86-X87-NEXT:    subl $4, %esp
; X86-X87-NEXT:    xorl %edi, %edi
; X86-X87-NEXT:    movb %bh, %ah
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %eax
; X86-X87-NEXT:    jb .LBB28_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:  .LBB28_2:
; X86-X87-NEXT:    movl $0, %esi
; X86-X87-NEXT:    movl $0, %ebx
; X86-X87-NEXT:    jb .LBB28_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-X87-NEXT:  .LBB28_4:
; X86-X87-NEXT:    jb .LBB28_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-X87-NEXT:  .LBB28_6:
; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $15, %eax
; X86-X87-NEXT:    ja .LBB28_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %edi, %eax
; X86-X87-NEXT:  .LBB28_8:
; X86-X87-NEXT:    movl $-1, %edi
; X86-X87-NEXT:    movl $-1, %ebp
; X86-X87-NEXT:    movl $-1, %edx
; X86-X87-NEXT:    ja .LBB28_10
; X86-X87-NEXT:  # %bb.9:
; X86-X87-NEXT:    movl %ebx, %edi
; X86-X87-NEXT:    movl %esi, %ebp
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
; X86-X87-NEXT:  .LBB28_10:
; X86-X87-NEXT:    movl %edx, 8(%ecx)
; X86-X87-NEXT:    movl %ebp, 4(%ecx)
; X86-X87-NEXT:    movl %edi, (%ecx)
; X86-X87-NEXT:    andl $15, %eax
; X86-X87-NEXT:    movb %al, 12(%ecx)
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:    addl $44, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    popl %ebx
; X86-X87-NEXT:    popl %ebp
; X86-X87-NEXT:    retl $4
;
; X86-SSE-LABEL: test_unsigned_i100_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %ebx
; X86-SSE-NEXT:    pushl %edi
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $32, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl %eax, (%esp)
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    calll __fixunssfti
; X86-SSE-NEXT:    subl $4, %esp
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    xorps %xmm0, %xmm0
; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 4-byte Reload
; X86-SSE-NEXT:    # xmm1 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    ucomiss %xmm0, %xmm1
; X86-SSE-NEXT:    movaps %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %ecx
; X86-SSE-NEXT:    movl $0, %edx
; X86-SSE-NEXT:    movl $0, %edi
; X86-SSE-NEXT:    jb .LBB28_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-SSE-NEXT:  .LBB28_2:
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $15, %ebx
; X86-SSE-NEXT:    cmovbel %edi, %ebx
; X86-SSE-NEXT:    movl $-1, %edi
; X86-SSE-NEXT:    cmoval %edi, %edx
; X86-SSE-NEXT:    cmoval %edi, %ecx
; X86-SSE-NEXT:    cmoval %edi, %eax
; X86-SSE-NEXT:    movl %eax, 8(%esi)
; X86-SSE-NEXT:    movl %ecx, 4(%esi)
; X86-SSE-NEXT:    movl %edx, (%esi)
; X86-SSE-NEXT:    andl $15, %ebx
; X86-SSE-NEXT:    movb %bl, 12(%esi)
; X86-SSE-NEXT:    movl %esi, %eax
; X86-SSE-NEXT:    addl $32, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    popl %edi
; X86-SSE-NEXT:    popl %ebx
; X86-SSE-NEXT:    retl $4
;
; X64-LABEL: test_unsigned_i100_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
; X64-NEXT:    callq __fixunssfti@PLT
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm0, %xmm0
; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload
; X64-NEXT:    # xmm1 = mem[0],zero,zero,zero
; X64-NEXT:    ucomiss %xmm0, %xmm1
; X64-NEXT:    cmovbq %rcx, %rdx
; X64-NEXT:    cmovbq %rcx, %rax
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    movq $-1, %rcx
; X64-NEXT:    cmovaq %rcx, %rax
; X64-NEXT:    movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF
; X64-NEXT:    cmovaq %rcx, %rdx
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i100 @llvm.fptoui.sat.i100.f16(half %f)
    ret i100 %x
}

define i128 @test_unsigned_i128_f16(half %f) nounwind {
; X86-X87-LABEL: test_unsigned_i128_f16:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %ebp
; X86-X87-NEXT:    pushl %ebx
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $60, %esp
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    calll __gnu_h2f_ieee
; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    movl %eax, %ebx
; X86-X87-NEXT:    calll __fixunssfti
; X86-X87-NEXT:    subl $4, %esp
; X86-X87-NEXT:    xorl %edx, %edx
; X86-X87-NEXT:    movb %bh, %ah
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %eax
; X86-X87-NEXT:    jb .LBB29_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:  .LBB29_2:
; X86-X87-NEXT:    movl $0, %ecx
; X86-X87-NEXT:    jb .LBB29_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB29_4:
; X86-X87-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    movl $0, %ebx
; X86-X87-NEXT:    jb .LBB29_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:  .LBB29_6:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    movl $-1, %ebp
; X86-X87-NEXT:    movl $-1, %edi
; X86-X87-NEXT:    movl $-1, %esi
; X86-X87-NEXT:    ja .LBB29_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %ebx, %eax
; X86-X87-NEXT:    movl %edx, %ebp
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
; X86-X87-NEXT:  .LBB29_8:
; X86-X87-NEXT:    movl %esi, 12(%ecx)
; X86-X87-NEXT:    movl %edi, 8(%ecx)
; X86-X87-NEXT:    movl %ebp, 4(%ecx)
; X86-X87-NEXT:    movl %eax, (%ecx)
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:    addl $60, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    popl %ebx
; X86-X87-NEXT:    popl %ebp
; X86-X87-NEXT:    retl $4
;
; X86-SSE-LABEL: test_unsigned_i128_f16:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %ebx
; X86-SSE-NEXT:    pushl %edi
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $32, %esp
; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
; X86-SSE-NEXT:    movw %ax, (%esp)
; X86-SSE-NEXT:    calll __extendhfsf2
; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl %eax, (%esp)
; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    calll __fixunssfti
; X86-SSE-NEXT:    subl $4, %esp
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    xorps %xmm0, %xmm0
; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 4-byte Reload
; X86-SSE-NEXT:    # xmm1 = mem[0],zero,zero,zero
; X86-SSE-NEXT:    ucomiss %xmm0, %xmm1
; X86-SSE-NEXT:    movaps %xmm1, %xmm0
; X86-SSE-NEXT:    movl $0, %ecx
; X86-SSE-NEXT:    movl $0, %edx
; X86-SSE-NEXT:    movl $0, %edi
; X86-SSE-NEXT:    jb .LBB29_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-SSE-NEXT:  .LBB29_2:
; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-SSE-NEXT:    movl $-1, %ebx
; X86-SSE-NEXT:    cmoval %ebx, %edi
; X86-SSE-NEXT:    cmoval %ebx, %edx
; X86-SSE-NEXT:    cmoval %ebx, %ecx
; X86-SSE-NEXT:    cmoval %ebx, %eax
; X86-SSE-NEXT:    movl %eax, 12(%esi)
; X86-SSE-NEXT:    movl %ecx, 8(%esi)
; X86-SSE-NEXT:    movl %edx, 4(%esi)
; X86-SSE-NEXT:    movl %edi, (%esi)
; X86-SSE-NEXT:    movl %esi, %eax
; X86-SSE-NEXT:    addl $32, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    popl %edi
; X86-SSE-NEXT:    popl %ebx
; X86-SSE-NEXT:    retl $4
;
; X64-LABEL: test_unsigned_i128_f16:
; X64:       # %bb.0:
; X64-NEXT:    pushq %rax
; X64-NEXT:    callq __extendhfsf2@PLT
; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
; X64-NEXT:    callq __fixunssfti@PLT
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    xorps %xmm0, %xmm0
; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload
; X64-NEXT:    # xmm1 = mem[0],zero,zero,zero
; X64-NEXT:    ucomiss %xmm0, %xmm1
; X64-NEXT:    cmovbq %rcx, %rdx
; X64-NEXT:    cmovbq %rcx, %rax
; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; X64-NEXT:    movq $-1, %rcx
; X64-NEXT:    cmovaq %rcx, %rax
; X64-NEXT:    cmovaq %rcx, %rdx
; X64-NEXT:    popq %rcx
; X64-NEXT:    retq
    %x = call i128 @llvm.fptoui.sat.i128.f16(half %f)
    ret i128 %x
}

;
; 80-bit float to unsigned integer
;

declare   i1 @llvm.fptoui.sat.i1.f80  (x86_fp80)
declare   i8 @llvm.fptoui.sat.i8.f80  (x86_fp80)
declare  i13 @llvm.fptoui.sat.i13.f80 (x86_fp80)
declare  i16 @llvm.fptoui.sat.i16.f80 (x86_fp80)
declare  i19 @llvm.fptoui.sat.i19.f80 (x86_fp80)
declare  i32 @llvm.fptoui.sat.i32.f80 (x86_fp80)
declare  i50 @llvm.fptoui.sat.i50.f80 (x86_fp80)
declare  i64 @llvm.fptoui.sat.i64.f80 (x86_fp80)
declare i100 @llvm.fptoui.sat.i100.f80(x86_fp80)
declare i128 @llvm.fptoui.sat.i128.f80(x86_fp80)

define i1 @test_unsigned_i1_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i1_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB30_1
; X86-X87-NEXT:  # %bb.2:
; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    jmp .LBB30_3
; X86-X87-NEXT:  .LBB30_1:
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:  .LBB30_3:
; X86-X87-NEXT:    fld1
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movb $1, %al
; X86-X87-NEXT:    ja .LBB30_5
; X86-X87-NEXT:  # %bb.4:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB30_5:
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i1_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $8, %esp
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    cmovael %eax, %ecx
; X86-SSE-NEXT:    fld1
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $1, %eax
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
; X86-SSE-NEXT:    addl $8, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i1_f80:
; X64:       # %bb.0:
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
; X64-NEXT:    orl $3072, %eax # imm = 0xC00
; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    fists -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fldz
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    cmovael %eax, %ecx
; X64-NEXT:    fld1
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movl $1, %eax
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    # kill: def $al killed $al killed $eax
; X64-NEXT:    retq
    %x = call i1 @llvm.fptoui.sat.i1.f80(x86_fp80 %f)
    ret i1 %x
}

define i8 @test_unsigned_i8_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i8_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB31_1
; X86-X87-NEXT:  # %bb.2:
; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    jmp .LBB31_3
; X86-X87-NEXT:  .LBB31_1:
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:  .LBB31_3:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movb $-1, %al
; X86-X87-NEXT:    ja .LBB31_5
; X86-X87-NEXT:  # %bb.4:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB31_5:
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i8_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $8, %esp
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    cmovael %eax, %ecx
; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $255, %eax
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
; X86-SSE-NEXT:    addl $8, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i8_f80:
; X64:       # %bb.0:
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
; X64-NEXT:    orl $3072, %eax # imm = 0xC00
; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    fists -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fldz
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    cmovael %eax, %ecx
; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movl $255, %eax
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    # kill: def $al killed $al killed $eax
; X64-NEXT:    retq
    %x = call i8 @llvm.fptoui.sat.i8.f80(x86_fp80 %f)
    ret i8 %x
}

define i13 @test_unsigned_i13_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i13_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw (%esp)
; X86-X87-NEXT:    movzwl (%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB32_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB32_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $8191, %eax # imm = 0x1FFF
; X86-X87-NEXT:    ja .LBB32_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB32_4:
; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i13_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $8, %esp
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw (%esp)
; X86-SSE-NEXT:    movzwl (%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw (%esp)
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    jb .LBB32_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:  .LBB32_2:
; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $8191, %eax # imm = 0x1FFF
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-SSE-NEXT:    addl $8, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i13_f80:
; X64:       # %bb.0:
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
; X64-NEXT:    orl $3072, %eax # imm = 0xC00
; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    fistl -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fldz
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    jb .LBB32_2
; X64-NEXT:  # %bb.1:
; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx
; X64-NEXT:  .LBB32_2:
; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movl $8191, %eax # imm = 0x1FFF
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    # kill: def $ax killed $ax killed $eax
; X64-NEXT:    retq
    %x = call i13 @llvm.fptoui.sat.i13.f80(x86_fp80 %f)
    ret i13 %x
}

define i16 @test_unsigned_i16_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i16_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $8, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw (%esp)
; X86-X87-NEXT:    movzwl (%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB33_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB33_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $65535, %eax # imm = 0xFFFF
; X86-X87-NEXT:    ja .LBB33_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB33_4:
; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-X87-NEXT:    addl $8, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i16_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $8, %esp
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw (%esp)
; X86-SSE-NEXT:    movzwl (%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistl {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw (%esp)
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    jb .LBB33_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:  .LBB33_2:
; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $65535, %eax # imm = 0xFFFF
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
; X86-SSE-NEXT:    addl $8, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i16_f80:
; X64:       # %bb.0:
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
; X64-NEXT:    orl $3072, %eax # imm = 0xC00
; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    fistl -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fldz
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    jb .LBB33_2
; X64-NEXT:  # %bb.1:
; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx
; X64-NEXT:  .LBB33_2:
; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movl $65535, %eax # imm = 0xFFFF
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    # kill: def $ax killed $ax killed $eax
; X64-NEXT:    retq
    %x = call i16 @llvm.fptoui.sat.i16.f80(x86_fp80 %f)
    ret i16 %x
}

define i19 @test_unsigned_i19_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i19_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB34_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB34_2:
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $524287, %eax # imm = 0x7FFFF
; X86-X87-NEXT:    ja .LBB34_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB34_4:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i19_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $20, %esp
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fld %st(0)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    jb .LBB34_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:  .LBB34_2:
; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $524287, %eax # imm = 0x7FFFF
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    addl $20, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i19_f80:
; X64:       # %bb.0:
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
; X64-NEXT:    orl $3072, %eax # imm = 0xC00
; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    fld %st(0)
; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fldz
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    jb .LBB34_2
; X64-NEXT:  # %bb.1:
; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx
; X64-NEXT:  .LBB34_2:
; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movl $524287, %eax # imm = 0x7FFFF
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    retq
    %x = call i19 @llvm.fptoui.sat.i19.f80(x86_fp80 %f)
    ret i19 %x
}

define i32 @test_unsigned_i32_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i32_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    jb .LBB35_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB35_2:
; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    ja .LBB35_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:  .LBB35_4:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i32_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    subl $20, %esp
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fld %st(0)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    jb .LBB35_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:  .LBB35_2:
; X86-SSE-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $-1, %eax
; X86-SSE-NEXT:    cmovbel %ecx, %eax
; X86-SSE-NEXT:    addl $20, %esp
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i32_f80:
; X64:       # %bb.0:
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
; X64-NEXT:    orl $3072, %eax # imm = 0xC00
; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    fld %st(0)
; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fldz
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    jb .LBB35_2
; X64-NEXT:  # %bb.1:
; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx
; X64-NEXT:  .LBB35_2:
; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movl $-1, %eax
; X64-NEXT:    cmovbel %ecx, %eax
; X64-NEXT:    retq
    %x = call i32 @llvm.fptoui.sat.i32.f80(x86_fp80 %f)
    ret i32 %x
}

define i50 @test_unsigned_i50_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i50_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $16, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    setbe %al
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    jbe .LBB36_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:  .LBB36_2:
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsubr %st(2), %st
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00
; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movb %al, %cl
; X86-X87-NEXT:    shll $31, %ecx
; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %edx, %edx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %esi
; X86-X87-NEXT:    jb .LBB36_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %esi
; X86-X87-NEXT:  .LBB36_4:
; X86-X87-NEXT:    jb .LBB36_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:  .LBB36_6:
; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    ja .LBB36_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %edx, %eax
; X86-X87-NEXT:  .LBB36_8:
; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF
; X86-X87-NEXT:    ja .LBB36_10
; X86-X87-NEXT:  # %bb.9:
; X86-X87-NEXT:    movl %esi, %edx
; X86-X87-NEXT:  .LBB36_10:
; X86-X87-NEXT:    addl $16, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i50_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $16, %esp
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    setbe %cl
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fld %st(0)
; X86-SSE-NEXT:    fcmovbe %st(2), %st
; X86-SSE-NEXT:    fstp %st(2)
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fsubr %st(2), %st
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    orl $3072, %edx # imm = 0xC00
; X86-SSE-NEXT:    movw %dx, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %esi, %esi
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    movl $0, %edx
; X86-SSE-NEXT:    jb .LBB36_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movb %cl, %al
; X86-SSE-NEXT:    shll $31, %eax
; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl %eax, %esi
; X86-SSE-NEXT:  .LBB36_2:
; X86-SSE-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $-1, %eax
; X86-SSE-NEXT:    cmovbel %edx, %eax
; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF
; X86-SSE-NEXT:    cmovbel %esi, %edx
; X86-SSE-NEXT:    addl $16, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i50_f80:
; X64:       # %bb.0:
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    xorl %eax, %eax
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    setbe %al
; X64-NEXT:    fldz
; X64-NEXT:    fld %st(0)
; X64-NEXT:    fcmovbe %st(2), %st
; X64-NEXT:    fstp %st(2)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fsubr %st(2), %st
; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %ecx
; X64-NEXT:    orl $3072, %ecx # imm = 0xC00
; X64-NEXT:    movw %cx, -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    shlq $63, %rax
; X64-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    cmovaeq %rax, %rcx
; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movabsq $1125899906842623, %rax # imm = 0x3FFFFFFFFFFFF
; X64-NEXT:    cmovbeq %rcx, %rax
; X64-NEXT:    retq
    %x = call i50 @llvm.fptoui.sat.i50.f80(x86_fp80 %f)
    ret i50 %x
}

define i64 @test_unsigned_i64_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i64_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $20, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %ecx, %ecx
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    setbe %al
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    jbe .LBB37_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:  .LBB37_2:
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fsubr %st(2), %st
; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00
; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-X87-NEXT:    movb %al, %cl
; X86-X87-NEXT:    shll $31, %ecx
; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucom %st(1)
; X86-X87-NEXT:    fstp %st(1)
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    xorl %esi, %esi
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %edi
; X86-X87-NEXT:    jb .LBB37_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl %ecx, %edi
; X86-X87-NEXT:  .LBB37_4:
; X86-X87-NEXT:    jb .LBB37_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-X87-NEXT:  .LBB37_6:
; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    movl $-1, %edx
; X86-X87-NEXT:    ja .LBB37_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %esi, %eax
; X86-X87-NEXT:    movl %edi, %edx
; X86-X87-NEXT:  .LBB37_8:
; X86-X87-NEXT:    addl $20, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    retl
;
; X86-SSE-LABEL: test_unsigned_i64_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %ebx
; X86-SSE-NEXT:    subl $16, %esp
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    xorl %ecx, %ecx
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    setbe %bl
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fld %st(0)
; X86-SSE-NEXT:    fcmovbe %st(2), %st
; X86-SSE-NEXT:    fstp %st(2)
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fsubr %st(2), %st
; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    xorl %edx, %edx
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    movl $0, %eax
; X86-SSE-NEXT:    jb .LBB37_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movb %bl, %cl
; X86-SSE-NEXT:    shll $31, %ecx
; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl %ecx, %edx
; X86-SSE-NEXT:  .LBB37_2:
; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $-1, %ecx
; X86-SSE-NEXT:    cmoval %ecx, %eax
; X86-SSE-NEXT:    cmoval %ecx, %edx
; X86-SSE-NEXT:    addl $16, %esp
; X86-SSE-NEXT:    popl %ebx
; X86-SSE-NEXT:    retl
;
; X64-LABEL: test_unsigned_i64_f80:
; X64:       # %bb.0:
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    xorl %eax, %eax
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    setbe %al
; X64-NEXT:    fldz
; X64-NEXT:    fld %st(0)
; X64-NEXT:    fcmovbe %st(2), %st
; X64-NEXT:    fstp %st(2)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fsubr %st(2), %st
; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %ecx
; X64-NEXT:    orl $3072, %ecx # imm = 0xC00
; X64-NEXT:    movw %cx, -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)
; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
; X64-NEXT:    shlq $63, %rax
; X64-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    cmovaeq %rax, %rcx
; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movq $-1, %rax
; X64-NEXT:    cmovbeq %rcx, %rax
; X64-NEXT:    retq
    %x = call i64 @llvm.fptoui.sat.i64.f80(x86_fp80 %f)
    ret i64 %x
}

define i100 @test_unsigned_i100_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i100_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %ebp
; X86-X87-NEXT:    pushl %ebx
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $60, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fstpt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fld %st(1)
; X86-X87-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    movl %eax, %ebx
; X86-X87-NEXT:    calll __fixunsxfti
; X86-X87-NEXT:    subl $4, %esp
; X86-X87-NEXT:    xorl %edi, %edi
; X86-X87-NEXT:    movb %bh, %ah
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %eax
; X86-X87-NEXT:    jb .LBB38_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:  .LBB38_2:
; X86-X87-NEXT:    movl $0, %esi
; X86-X87-NEXT:    movl $0, %ebx
; X86-X87-NEXT:    jb .LBB38_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-X87-NEXT:  .LBB38_4:
; X86-X87-NEXT:    jb .LBB38_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-X87-NEXT:  .LBB38_6:
; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $15, %eax
; X86-X87-NEXT:    ja .LBB38_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %edi, %eax
; X86-X87-NEXT:  .LBB38_8:
; X86-X87-NEXT:    movl $-1, %edi
; X86-X87-NEXT:    movl $-1, %ebp
; X86-X87-NEXT:    movl $-1, %edx
; X86-X87-NEXT:    ja .LBB38_10
; X86-X87-NEXT:  # %bb.9:
; X86-X87-NEXT:    movl %ebx, %edi
; X86-X87-NEXT:    movl %esi, %ebp
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
; X86-X87-NEXT:  .LBB38_10:
; X86-X87-NEXT:    movl %edx, 8(%ecx)
; X86-X87-NEXT:    movl %ebp, 4(%ecx)
; X86-X87-NEXT:    movl %edi, (%ecx)
; X86-X87-NEXT:    andl $15, %eax
; X86-X87-NEXT:    movb %al, 12(%ecx)
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:    addl $60, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    popl %ebx
; X86-X87-NEXT:    popl %ebp
; X86-X87-NEXT:    retl $4
;
; X86-SSE-LABEL: test_unsigned_i100_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %ebx
; X86-SSE-NEXT:    pushl %edi
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $48, %esp
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fld %st(0)
; X86-SSE-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill
; X86-SSE-NEXT:    fstpt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl %eax, (%esp)
; X86-SSE-NEXT:    calll __fixunsxfti
; X86-SSE-NEXT:    subl $4, %esp
; X86-SSE-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    movl $0, %ecx
; X86-SSE-NEXT:    movl $0, %edx
; X86-SSE-NEXT:    movl $0, %edi
; X86-SSE-NEXT:    jb .LBB38_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-SSE-NEXT:  .LBB38_2:
; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $15, %ebx
; X86-SSE-NEXT:    cmovbel %edi, %ebx
; X86-SSE-NEXT:    movl $-1, %edi
; X86-SSE-NEXT:    cmoval %edi, %edx
; X86-SSE-NEXT:    cmoval %edi, %ecx
; X86-SSE-NEXT:    cmoval %edi, %eax
; X86-SSE-NEXT:    movl %eax, 8(%esi)
; X86-SSE-NEXT:    movl %ecx, 4(%esi)
; X86-SSE-NEXT:    movl %edx, (%esi)
; X86-SSE-NEXT:    andl $15, %ebx
; X86-SSE-NEXT:    movb %bl, 12(%esi)
; X86-SSE-NEXT:    movl %esi, %eax
; X86-SSE-NEXT:    addl $48, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    popl %edi
; X86-SSE-NEXT:    popl %ebx
; X86-SSE-NEXT:    retl $4
;
; X64-LABEL: test_unsigned_i100_f80:
; X64:       # %bb.0:
; X64-NEXT:    subq $40, %rsp
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    fld %st(0)
; X64-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill
; X64-NEXT:    fstpt (%rsp)
; X64-NEXT:    callq __fixunsxfti@PLT
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fldz
; X64-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    cmovbq %rcx, %rdx
; X64-NEXT:    cmovbq %rcx, %rax
; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movq $-1, %rcx
; X64-NEXT:    cmovaq %rcx, %rax
; X64-NEXT:    movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF
; X64-NEXT:    cmovaq %rcx, %rdx
; X64-NEXT:    addq $40, %rsp
; X64-NEXT:    retq
    %x = call i100 @llvm.fptoui.sat.i100.f80(x86_fp80 %f)
    ret i100 %x
}

define i128 @test_unsigned_i128_f80(x86_fp80 %f) nounwind {
; X86-X87-LABEL: test_unsigned_i128_f80:
; X86-X87:       # %bb.0:
; X86-X87-NEXT:    pushl %ebp
; X86-X87-NEXT:    pushl %ebx
; X86-X87-NEXT:    pushl %edi
; X86-X87-NEXT:    pushl %esi
; X86-X87-NEXT:    subl $60, %esp
; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    fld %st(0)
; X86-X87-NEXT:    fstpt {{[0-9]+}}(%esp)
; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:    movl %eax, (%esp)
; X86-X87-NEXT:    fldz
; X86-X87-NEXT:    fld %st(1)
; X86-X87-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill
; X86-X87-NEXT:    fxch %st(1)
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    movl %eax, %ebx
; X86-X87-NEXT:    calll __fixunsxfti
; X86-X87-NEXT:    subl $4, %esp
; X86-X87-NEXT:    xorl %edx, %edx
; X86-X87-NEXT:    movb %bh, %ah
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $0, %eax
; X86-X87-NEXT:    jb .LBB39_2
; X86-X87-NEXT:  # %bb.1:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-X87-NEXT:  .LBB39_2:
; X86-X87-NEXT:    movl $0, %ecx
; X86-X87-NEXT:    jb .LBB39_4
; X86-X87-NEXT:  # %bb.3:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:  .LBB39_4:
; X86-X87-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-X87-NEXT:    movl $0, %ebx
; X86-X87-NEXT:    jb .LBB39_6
; X86-X87-NEXT:  # %bb.5:
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-X87-NEXT:  .LBB39_6:
; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
; X86-X87-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload
; X86-X87-NEXT:    fucompp
; X86-X87-NEXT:    fnstsw %ax
; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
; X86-X87-NEXT:    sahf
; X86-X87-NEXT:    movl $-1, %eax
; X86-X87-NEXT:    movl $-1, %ebp
; X86-X87-NEXT:    movl $-1, %edi
; X86-X87-NEXT:    movl $-1, %esi
; X86-X87-NEXT:    ja .LBB39_8
; X86-X87-NEXT:  # %bb.7:
; X86-X87-NEXT:    movl %ebx, %eax
; X86-X87-NEXT:    movl %edx, %ebp
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
; X86-X87-NEXT:  .LBB39_8:
; X86-X87-NEXT:    movl %esi, 12(%ecx)
; X86-X87-NEXT:    movl %edi, 8(%ecx)
; X86-X87-NEXT:    movl %ebp, 4(%ecx)
; X86-X87-NEXT:    movl %eax, (%ecx)
; X86-X87-NEXT:    movl %ecx, %eax
; X86-X87-NEXT:    addl $60, %esp
; X86-X87-NEXT:    popl %esi
; X86-X87-NEXT:    popl %edi
; X86-X87-NEXT:    popl %ebx
; X86-X87-NEXT:    popl %ebp
; X86-X87-NEXT:    retl $4
;
; X86-SSE-LABEL: test_unsigned_i128_f80:
; X86-SSE:       # %bb.0:
; X86-SSE-NEXT:    pushl %ebx
; X86-SSE-NEXT:    pushl %edi
; X86-SSE-NEXT:    pushl %esi
; X86-SSE-NEXT:    subl $48, %esp
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    fld %st(0)
; X86-SSE-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill
; X86-SSE-NEXT:    fstpt {{[0-9]+}}(%esp)
; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl %eax, (%esp)
; X86-SSE-NEXT:    calll __fixunsxfti
; X86-SSE-NEXT:    subl $4, %esp
; X86-SSE-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload
; X86-SSE-NEXT:    xorl %eax, %eax
; X86-SSE-NEXT:    fldz
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucomi %st(1), %st
; X86-SSE-NEXT:    fstp %st(1)
; X86-SSE-NEXT:    movl $0, %ecx
; X86-SSE-NEXT:    movl $0, %edx
; X86-SSE-NEXT:    movl $0, %edi
; X86-SSE-NEXT:    jb .LBB39_2
; X86-SSE-NEXT:  # %bb.1:
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
; X86-SSE-NEXT:  .LBB39_2:
; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
; X86-SSE-NEXT:    fxch %st(1)
; X86-SSE-NEXT:    fucompi %st(1), %st
; X86-SSE-NEXT:    fstp %st(0)
; X86-SSE-NEXT:    movl $-1, %ebx
; X86-SSE-NEXT:    cmoval %ebx, %edi
; X86-SSE-NEXT:    cmoval %ebx, %edx
; X86-SSE-NEXT:    cmoval %ebx, %ecx
; X86-SSE-NEXT:    cmoval %ebx, %eax
; X86-SSE-NEXT:    movl %eax, 12(%esi)
; X86-SSE-NEXT:    movl %ecx, 8(%esi)
; X86-SSE-NEXT:    movl %edx, 4(%esi)
; X86-SSE-NEXT:    movl %edi, (%esi)
; X86-SSE-NEXT:    movl %esi, %eax
; X86-SSE-NEXT:    addl $48, %esp
; X86-SSE-NEXT:    popl %esi
; X86-SSE-NEXT:    popl %edi
; X86-SSE-NEXT:    popl %ebx
; X86-SSE-NEXT:    retl $4
;
; X64-LABEL: test_unsigned_i128_f80:
; X64:       # %bb.0:
; X64-NEXT:    subq $40, %rsp
; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
; X64-NEXT:    fld %st(0)
; X64-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill
; X64-NEXT:    fstpt (%rsp)
; X64-NEXT:    callq __fixunsxfti@PLT
; X64-NEXT:    xorl %ecx, %ecx
; X64-NEXT:    fldz
; X64-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload
; X64-NEXT:    fucomi %st(1), %st
; X64-NEXT:    fstp %st(1)
; X64-NEXT:    cmovbq %rcx, %rdx
; X64-NEXT:    cmovbq %rcx, %rax
; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
; X64-NEXT:    fxch %st(1)
; X64-NEXT:    fucompi %st(1), %st
; X64-NEXT:    fstp %st(0)
; X64-NEXT:    movq $-1, %rcx
; X64-NEXT:    cmovaq %rcx, %rax
; X64-NEXT:    cmovaq %rcx, %rdx
; X64-NEXT:    addq $40, %rsp
; X64-NEXT:    retq
    %x = call i128 @llvm.fptoui.sat.i128.f80(x86_fp80 %f)
    ret i128 %x
}