[llvm] e1823e8 - [X86] Fix miscompile of fptosi.sat.iN.f16 for NaN under avx512fp16 (#210556)

via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 31 00:14:00 PDT 2026


Author: Nathaniel McCallum
Date: 2026-07-31T07:13:54Z
New Revision: e1823e8b1778997d12ba947350190af5ee845ca9

URL: https://github.com/llvm/llvm-project/commit/e1823e8b1778997d12ba947350190af5ee845ca9
DIFF: https://github.com/llvm/llvm-project/commit/e1823e8b1778997d12ba947350190af5ee845ca9.diff

LOG: [X86] Fix miscompile of fptosi.sat.iN.f16 for NaN under avx512fp16 (#210556)

`X86TargetLowering::LowerFP_TO_INT_SAT` incorrectly lowered
`llvm.fptosi.sat.iN.f16` for N = 13, 14, 15, 16 under `avx512fp16`
codegen: NaN inputs produced the destination type's minimum value
instead of the 0 that the intrinsic's documented semantics require.
Vector forms that scalarize through this lowering are affected under
the same condition, applied per element. See the third commit message
for the full root-cause analysis and fix rationale.

---

Assisted-by: Claude (Anthropic)
Assisted-by: Codex (OpenAI)

The investigation, root-cause analysis, fix, and tests in this PR were
developed with substantial AI assistance (Claude), including four
independent AI-assisted review rounds (Codex). I reviewed and take
responsibility for all code, analysis, and claims in this PR, and can
answer questions about the reasoning above.

Added: 
    llvm/test/CodeGen/X86/fptosi-sat-scalar-f16.ll

Modified: 
    llvm/lib/Target/X86/X86ISelLowering.cpp
    llvm/test/CodeGen/X86/fptosi-sat-scalar.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 1de4ffa33e960..712db68314e6e 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -22536,10 +22536,14 @@ X86TargetLowering::LowerFP_TO_INT_SAT(SDValue Op, SelectionDAG &DAG) const {
   // result type of the fptoi instructions, INDVAL coincides with integer
   // minimum, so we don't need to explicitly check it.
   if (!IsSigned || SatWidth != TmpVT.getScalarSizeInBits()) {
-    // If Src ULT MinFloat, select MinInt. In particular, this also selects
-    // MinInt if Src is NaN.
-    Select = DAG.getSelectCC(
-      dl, Src, MinFloatNode, MinIntNode, Select, ISD::CondCode::SETULT);
+    // If Src is less than MinFloat, select MinInt. An unordered comparison
+    // also selects MinInt for NaN, which is correct except when signed and
+    // promoted to a wider TmpVT: there MinInt != 0, but the earlier
+    // truncation already mapped NaN to the correct 0, so use an ordered
+    // comparison to leave it alone.
+    ISD::CondCode MinCC = (IsSigned && DstVT != TmpVT) ? ISD::CondCode::SETOLT
+                                                       : ISD::CondCode::SETULT;
+    Select = DAG.getSelectCC(dl, Src, MinFloatNode, MinIntNode, Select, MinCC);
   }
 
   // If Src OGT MaxFloat, select MaxInt.

diff  --git a/llvm/test/CodeGen/X86/fptosi-sat-scalar-f16.ll b/llvm/test/CodeGen/X86/fptosi-sat-scalar-f16.ll
new file mode 100644
index 0000000000000..1079a7baab2b9
--- /dev/null
+++ b/llvm/test/CodeGen/X86/fptosi-sat-scalar-f16.ll
@@ -0,0 +1,1298 @@
+; 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
+; RUN: llc < %s -mtriple=x86_64-linux -mattr=+avx512fp16 | FileCheck %s --check-prefix=X64-AVX512FP16
+
+;
+; 16-bit float to signed integer
+;
+
+; FIXME: Can be optimizated with maxss + minss
+define i1 @test_signed_i1_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_i1_f16:
+; X86-X87:       # %bb.0:
+; X86-X87-NEXT:    pushl %ebx
+; X86-X87-NEXT:    subl $24, %esp
+; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-X87-NEXT:    movl %eax, (%esp)
+; X86-X87-NEXT:    calll __extendhfsf2
+; 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:    fld1
+; X86-X87-NEXT:    fchs
+; 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:    movb $-1, %dl
+; X86-X87-NEXT:    jb .LBB0_2
+; X86-X87-NEXT:  # %bb.1:
+; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
+; X86-X87-NEXT:  .LBB0_2:
+; 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:    movl $0, %ebx
+; X86-X87-NEXT:    ja .LBB0_4
+; X86-X87-NEXT:  # %bb.3:
+; X86-X87-NEXT:    movl %edx, %ebx
+; X86-X87-NEXT:  .LBB0_4:
+; X86-X87-NEXT:    fucomp %st(0)
+; X86-X87-NEXT:    fnstsw %ax
+; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
+; X86-X87-NEXT:    sahf
+; X86-X87-NEXT:    jp .LBB0_6
+; X86-X87-NEXT:  # %bb.5:
+; X86-X87-NEXT:    movl %ebx, %ecx
+; X86-X87-NEXT:  .LBB0_6:
+; X86-X87-NEXT:    movl %ecx, %eax
+; X86-X87-NEXT:    addl $24, %esp
+; X86-X87-NEXT:    popl %ebx
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    xorps %xmm1, %xmm1
+; X86-SSE-NEXT:    minss %xmm0, %xmm1
+; X86-SSE-NEXT:    cvttss2si %xmm1, %ecx
+; X86-SSE-NEXT:    cmovnpl %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_signed_i1_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    xorl %eax, %eax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    xorps %xmm1, %xmm1
+; X64-NEXT:    minss %xmm0, %xmm1
+; X64-NEXT:    cvttss2si %xmm1, %ecx
+; X64-NEXT:    cmovnpl %ecx, %eax
+; X64-NEXT:    # kill: def $al killed $al killed $eax
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i1_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    vmovsh {{.*#+}} xmm1 = [-1.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0]
+; X64-AVX512FP16-NEXT:    vmaxsh %xmm0, %xmm1, %xmm0
+; X64-AVX512FP16-NEXT:    vxorps %xmm1, %xmm1, %xmm1
+; X64-AVX512FP16-NEXT:    vminsh %xmm0, %xmm1, %xmm0
+; X64-AVX512FP16-NEXT:    vcvttsh2si %xmm0, %eax
+; X64-AVX512FP16-NEXT:    # kill: def $al killed $al killed $eax
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i1 @llvm.fptosi.sat.i1.f16(half %f)
+    ret i1 %x
+}
+
+; FIXME: Can be optimizated with maxss + minss
+define i8 @test_signed_i8_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_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 __extendhfsf2
+; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movb $-128, %dl
+; X86-X87-NEXT:    jb .LBB1_2
+; X86-X87-NEXT:  # %bb.1:
+; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
+; X86-X87-NEXT:  .LBB1_2:
+; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movb $127, %cl
+; X86-X87-NEXT:    ja .LBB1_4
+; X86-X87-NEXT:  # %bb.3:
+; X86-X87-NEXT:    movl %edx, %ecx
+; X86-X87-NEXT:  .LBB1_4:
+; X86-X87-NEXT:    fucomp %st(0)
+; X86-X87-NEXT:    fnstsw %ax
+; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
+; X86-X87-NEXT:    sahf
+; X86-X87-NEXT:    jnp .LBB1_6
+; X86-X87-NEXT:  # %bb.5:
+; X86-X87-NEXT:    xorl %ecx, %ecx
+; X86-X87-NEXT:  .LBB1_6:
+; X86-X87-NEXT:    movl %ecx, %eax
+; X86-X87-NEXT:    addl $12, %esp
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
+; X86-SSE-NEXT:    cmovnpl %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_signed_i8_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    xorl %eax, %eax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    cvttss2si %xmm0, %ecx
+; X64-NEXT:    cmovnpl %ecx, %eax
+; X64-NEXT:    # kill: def $al killed $al killed $eax
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i8_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    vmovsh {{.*#+}} xmm1 = [-1.28E+2,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0]
+; X64-AVX512FP16-NEXT:    vmaxsh %xmm0, %xmm1, %xmm0
+; X64-AVX512FP16-NEXT:    vmovsh {{.*#+}} xmm1 = [1.27E+2,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0]
+; X64-AVX512FP16-NEXT:    vminsh %xmm0, %xmm1, %xmm0
+; X64-AVX512FP16-NEXT:    vcvttsh2si %xmm0, %eax
+; X64-AVX512FP16-NEXT:    # kill: def $al killed $al killed $eax
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i8 @llvm.fptosi.sat.i8.f16(half %f)
+    ret i8 %x
+}
+
+; FIXME: Can be optimizated with maxss + minss
+define i13 @test_signed_i13_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_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 __extendhfsf2
+; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movl $61440, %ecx # imm = 0xF000
+; X86-X87-NEXT:    jb .LBB2_2
+; X86-X87-NEXT:  # %bb.1:
+; X86-X87-NEXT:    movzwl {{[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:    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:    movl $4095, %edx # imm = 0xFFF
+; X86-X87-NEXT:    ja .LBB2_4
+; X86-X87-NEXT:  # %bb.3:
+; X86-X87-NEXT:    movl %ecx, %edx
+; X86-X87-NEXT:  .LBB2_4:
+; X86-X87-NEXT:    fucomp %st(0)
+; 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:    jp .LBB2_6
+; X86-X87-NEXT:  # %bb.5:
+; X86-X87-NEXT:    movl %edx, %ecx
+; X86-X87-NEXT:  .LBB2_6:
+; X86-X87-NEXT:    movl %ecx, %eax
+; X86-X87-NEXT:    addl $12, %esp
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
+; X86-SSE-NEXT:    cmovnpl %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_signed_i13_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    xorl %eax, %eax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    cvttss2si %xmm0, %ecx
+; X64-NEXT:    cmovnpl %ecx, %eax
+; X64-NEXT:    # kill: def $ax killed $ax killed $eax
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i13_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    vcvttsh2si %xmm0, %eax
+; X64-AVX512FP16-NEXT:    vmovsh {{.*#+}} xmm1 = [-4.096E+3,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0]
+; X64-AVX512FP16-NEXT:    vucomish %xmm0, %xmm1
+; X64-AVX512FP16-NEXT:    movl $61440, %ecx # imm = 0xF000
+; X64-AVX512FP16-NEXT:    cmovbel %eax, %ecx
+; X64-AVX512FP16-NEXT:    vucomish {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movl $4095, %eax # imm = 0xFFF
+; X64-AVX512FP16-NEXT:    cmovbel %ecx, %eax
+; X64-AVX512FP16-NEXT:    # kill: def $ax killed $ax killed $eax
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i13 @llvm.fptosi.sat.i13.f16(half %f)
+    ret i13 %x
+}
+
+; FIXME: Can be optimizated with maxss + minss
+define i16 @test_signed_i16_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_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 __extendhfsf2
+; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movl $32768, %ecx # imm = 0x8000
+; X86-X87-NEXT:    jb .LBB3_2
+; X86-X87-NEXT:  # %bb.1:
+; X86-X87-NEXT:    movzwl {{[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:    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:    movl $32767, %edx # imm = 0x7FFF
+; X86-X87-NEXT:    ja .LBB3_4
+; X86-X87-NEXT:  # %bb.3:
+; X86-X87-NEXT:    movl %ecx, %edx
+; X86-X87-NEXT:  .LBB3_4:
+; X86-X87-NEXT:    fucomp %st(0)
+; 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:    jp .LBB3_6
+; X86-X87-NEXT:  # %bb.5:
+; X86-X87-NEXT:    movl %edx, %ecx
+; X86-X87-NEXT:  .LBB3_6:
+; X86-X87-NEXT:    movl %ecx, %eax
+; X86-X87-NEXT:    addl $12, %esp
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
+; X86-SSE-NEXT:    cmovnpl %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_signed_i16_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    xorl %eax, %eax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    cvttss2si %xmm0, %ecx
+; X64-NEXT:    cmovnpl %ecx, %eax
+; X64-NEXT:    # kill: def $ax killed $ax killed $eax
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i16_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    vcvttsh2si %xmm0, %eax
+; X64-AVX512FP16-NEXT:    vmovsh {{.*#+}} xmm1 = [-3.2768E+4,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0]
+; X64-AVX512FP16-NEXT:    vucomish %xmm0, %xmm1
+; X64-AVX512FP16-NEXT:    movl $32768, %ecx # imm = 0x8000
+; X64-AVX512FP16-NEXT:    cmovbel %eax, %ecx
+; X64-AVX512FP16-NEXT:    vucomish {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movl $32767, %eax # imm = 0x7FFF
+; X64-AVX512FP16-NEXT:    cmovbel %ecx, %eax
+; X64-AVX512FP16-NEXT:    # kill: def $ax killed $ax killed $eax
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i16 @llvm.fptosi.sat.i16.f16(half %f)
+    ret i16 %x
+}
+
+; FIXME: Can be optimizated with maxss + minss
+define i19 @test_signed_i19_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_i19_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 __extendhfsf2
+; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movl $-262144, %ecx # imm = 0xFFFC0000
+; 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:    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:    movl $262143, %edx # imm = 0x3FFFF
+; X86-X87-NEXT:    ja .LBB4_4
+; X86-X87-NEXT:  # %bb.3:
+; X86-X87-NEXT:    movl %ecx, %edx
+; X86-X87-NEXT:  .LBB4_4:
+; X86-X87-NEXT:    fucomp %st(0)
+; 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:    jp .LBB4_6
+; X86-X87-NEXT:  # %bb.5:
+; X86-X87-NEXT:    movl %edx, %ecx
+; X86-X87-NEXT:  .LBB4_6:
+; X86-X87-NEXT:    movl %ecx, %eax
+; X86-X87-NEXT:    addl $12, %esp
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
+; X86-SSE-NEXT:    cmovnpl %ecx, %eax
+; X86-SSE-NEXT:    addl $12, %esp
+; X86-SSE-NEXT:    retl
+;
+; X64-LABEL: test_signed_i19_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    xorl %eax, %eax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    cvttss2si %xmm0, %ecx
+; X64-NEXT:    cmovnpl %ecx, %eax
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i19_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    vcvttsh2si %xmm0, %eax
+; X64-AVX512FP16-NEXT:    vucomish {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movl $-262144, %ecx # imm = 0xFFFC0000
+; X64-AVX512FP16-NEXT:    cmovael %eax, %ecx
+; X64-AVX512FP16-NEXT:    vucomish {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movl $262143, %edx # imm = 0x3FFFF
+; X64-AVX512FP16-NEXT:    cmovbel %ecx, %edx
+; X64-AVX512FP16-NEXT:    xorl %eax, %eax
+; X64-AVX512FP16-NEXT:    vucomish %xmm0, %xmm0
+; X64-AVX512FP16-NEXT:    cmovnpl %edx, %eax
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i19 @llvm.fptosi.sat.i19.f16(half %f)
+    ret i19 %x
+}
+
+define i32 @test_signed_i32_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_i32_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 __extendhfsf2
+; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movl $-2147483648, %ecx # imm = 0x80000000
+; 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:    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:    movl $2147483647, %edx # imm = 0x7FFFFFFF
+; X86-X87-NEXT:    ja .LBB5_4
+; X86-X87-NEXT:  # %bb.3:
+; X86-X87-NEXT:    movl %ecx, %edx
+; X86-X87-NEXT:  .LBB5_4:
+; X86-X87-NEXT:    fucomp %st(0)
+; 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:    jp .LBB5_6
+; X86-X87-NEXT:  # %bb.5:
+; X86-X87-NEXT:    movl %edx, %ecx
+; X86-X87-NEXT:  .LBB5_6:
+; X86-X87-NEXT:    movl %ecx, %eax
+; X86-X87-NEXT:    addl $12, %esp
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: test_signed_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:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
+; X86-SSE-NEXT:    cmovael %eax, %ecx
+; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
+; X86-SSE-NEXT:    cmovbel %ecx, %edx
+; X86-SSE-NEXT:    xorl %eax, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    cmovnpl %edx, %eax
+; X86-SSE-NEXT:    addl $12, %esp
+; X86-SSE-NEXT:    retl
+;
+; X64-LABEL: test_signed_i32_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    cvttss2si %xmm0, %eax
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
+; X64-NEXT:    cmovael %eax, %ecx
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
+; X64-NEXT:    cmovbel %ecx, %edx
+; X64-NEXT:    xorl %eax, %eax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    cmovnpl %edx, %eax
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i32_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    vcvttsh2si %xmm0, %eax
+; X64-AVX512FP16-NEXT:    vucomish {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movl $2147483647, %ecx # imm = 0x7FFFFFFF
+; X64-AVX512FP16-NEXT:    cmovbel %eax, %ecx
+; X64-AVX512FP16-NEXT:    xorl %eax, %eax
+; X64-AVX512FP16-NEXT:    vucomish %xmm0, %xmm0
+; X64-AVX512FP16-NEXT:    cmovnpl %ecx, %eax
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i32 @llvm.fptosi.sat.i32.f16(half %f)
+    ret i32 %x
+}
+
+define i50 @test_signed_i50_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_i50_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 __extendhfsf2
+; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movl $0, %edx
+; X86-X87-NEXT:    jb .LBB6_2
+; X86-X87-NEXT:  # %bb.1:
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-X87-NEXT:  .LBB6_2:
+; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE0000
+; X86-X87-NEXT:    jb .LBB6_4
+; X86-X87-NEXT:  # %bb.3:
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-X87-NEXT:  .LBB6_4:
+; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movl $131071, %esi # imm = 0x1FFFF
+; X86-X87-NEXT:    ja .LBB6_6
+; X86-X87-NEXT:  # %bb.5:
+; X86-X87-NEXT:    movl %edi, %esi
+; X86-X87-NEXT:  .LBB6_6:
+; X86-X87-NEXT:    movl $-1, %edi
+; X86-X87-NEXT:    ja .LBB6_8
+; X86-X87-NEXT:  # %bb.7:
+; X86-X87-NEXT:    movl %edx, %edi
+; X86-X87-NEXT:  .LBB6_8:
+; X86-X87-NEXT:    fucomp %st(0)
+; X86-X87-NEXT:    fnstsw %ax
+; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
+; X86-X87-NEXT:    sahf
+; X86-X87-NEXT:    movl $0, %edx
+; X86-X87-NEXT:    jp .LBB6_10
+; X86-X87-NEXT:  # %bb.9:
+; X86-X87-NEXT:    movl %edi, %ecx
+; X86-X87-NEXT:    movl %esi, %edx
+; X86-X87-NEXT:  .LBB6_10:
+; X86-X87-NEXT:    movl %ecx, %eax
+; X86-X87-NEXT:    addl $20, %esp
+; X86-X87-NEXT:    popl %esi
+; X86-X87-NEXT:    popl %edi
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: test_signed_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 %xmm0, {{[0-9]+}}(%esp)
+; 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 %ecx, %ecx
+; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-SSE-NEXT:    cmovbl %ecx, %esi
+; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE0000
+; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
+; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF
+; X86-SSE-NEXT:    cmovbel %eax, %edx
+; X86-SSE-NEXT:    movl $-1, %eax
+; X86-SSE-NEXT:    cmovbel %esi, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    cmovpl %ecx, %eax
+; X86-SSE-NEXT:    cmovpl %ecx, %edx
+; X86-SSE-NEXT:    addl $24, %esp
+; X86-SSE-NEXT:    popl %esi
+; X86-SSE-NEXT:    retl
+;
+; X64-LABEL: test_signed_i50_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    cvttss2si %xmm0, %rax
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    movabsq $-562949953421312, %rcx # imm = 0xFFFE000000000000
+; X64-NEXT:    cmovaeq %rax, %rcx
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    movabsq $562949953421311, %rdx # imm = 0x1FFFFFFFFFFFF
+; X64-NEXT:    cmovbeq %rcx, %rdx
+; X64-NEXT:    xorl %eax, %eax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    cmovnpq %rdx, %rax
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i50_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    vcvttsh2si %xmm0, %rax
+; X64-AVX512FP16-NEXT:    vucomish {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movabsq $-562949953421312, %rcx # imm = 0xFFFE000000000000
+; X64-AVX512FP16-NEXT:    cmovaeq %rax, %rcx
+; X64-AVX512FP16-NEXT:    vucomish {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movabsq $562949953421311, %rdx # imm = 0x1FFFFFFFFFFFF
+; X64-AVX512FP16-NEXT:    cmovbeq %rcx, %rdx
+; X64-AVX512FP16-NEXT:    xorl %eax, %eax
+; X64-AVX512FP16-NEXT:    vucomish %xmm0, %xmm0
+; X64-AVX512FP16-NEXT:    cmovnpq %rdx, %rax
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i50 @llvm.fptosi.sat.i50.f16(half %f)
+    ret i50 %x
+}
+
+define i64 @test_signed_i64_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_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 __extendhfsf2
+; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movl $0, %edx
+; X86-X87-NEXT:    jb .LBB7_2
+; X86-X87-NEXT:  # %bb.1:
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-X87-NEXT:  .LBB7_2:
+; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x80000000
+; X86-X87-NEXT:    jb .LBB7_4
+; X86-X87-NEXT:  # %bb.3:
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-X87-NEXT:  .LBB7_4:
+; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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:    movl $2147483647, %esi # imm = 0x7FFFFFFF
+; X86-X87-NEXT:    ja .LBB7_6
+; X86-X87-NEXT:  # %bb.5:
+; X86-X87-NEXT:    movl %edi, %esi
+; X86-X87-NEXT:  .LBB7_6:
+; X86-X87-NEXT:    movl $-1, %edi
+; X86-X87-NEXT:    ja .LBB7_8
+; X86-X87-NEXT:  # %bb.7:
+; X86-X87-NEXT:    movl %edx, %edi
+; X86-X87-NEXT:  .LBB7_8:
+; X86-X87-NEXT:    fucomp %st(0)
+; X86-X87-NEXT:    fnstsw %ax
+; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
+; X86-X87-NEXT:    sahf
+; X86-X87-NEXT:    movl $0, %edx
+; X86-X87-NEXT:    jp .LBB7_10
+; X86-X87-NEXT:  # %bb.9:
+; X86-X87-NEXT:    movl %edi, %ecx
+; X86-X87-NEXT:    movl %esi, %edx
+; X86-X87-NEXT:  .LBB7_10:
+; X86-X87-NEXT:    movl %ecx, %eax
+; X86-X87-NEXT:    addl $20, %esp
+; X86-X87-NEXT:    popl %esi
+; X86-X87-NEXT:    popl %edi
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: test_signed_i64_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 %xmm0, {{[0-9]+}}(%esp)
+; 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 %ecx, %ecx
+; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-SSE-NEXT:    cmovbl %ecx, %esi
+; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
+; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
+; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
+; X86-SSE-NEXT:    cmovbel %eax, %edx
+; X86-SSE-NEXT:    movl $-1, %eax
+; X86-SSE-NEXT:    cmovbel %esi, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    cmovpl %ecx, %eax
+; X86-SSE-NEXT:    cmovpl %ecx, %edx
+; X86-SSE-NEXT:    addl $24, %esp
+; X86-SSE-NEXT:    popl %esi
+; X86-SSE-NEXT:    retl
+;
+; X64-LABEL: test_signed_i64_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    cvttss2si %xmm0, %rax
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
+; X64-NEXT:    cmovaeq %rax, %rcx
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF
+; X64-NEXT:    cmovbeq %rcx, %rdx
+; X64-NEXT:    xorl %eax, %eax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    cmovnpq %rdx, %rax
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i64_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    vcvttsh2si %xmm0, %rax
+; X64-AVX512FP16-NEXT:    vucomish {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
+; X64-AVX512FP16-NEXT:    cmovbeq %rax, %rcx
+; X64-AVX512FP16-NEXT:    xorl %eax, %eax
+; X64-AVX512FP16-NEXT:    vucomish %xmm0, %xmm0
+; X64-AVX512FP16-NEXT:    cmovnpq %rcx, %rax
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i64 @llvm.fptosi.sat.i64.f16(half %f)
+    ret i64 %x
+}
+
+define i100 @test_signed_i100_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_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 $60, %esp
+; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-X87-NEXT:    movl %eax, (%esp)
+; X86-X87-NEXT:    calll __extendhfsf2
+; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; X86-X87-NEXT:    movl %eax, (%esp)
+; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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 __fixsfti
+; 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 $-8, %ebx
+; X86-X87-NEXT:    jb .LBB8_2
+; X86-X87-NEXT:  # %bb.1:
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-X87-NEXT:  .LBB8_2:
+; X86-X87-NEXT:    movl $0, %ecx
+; X86-X87-NEXT:    movl $0, %ebp
+; X86-X87-NEXT:    jb .LBB8_4
+; X86-X87-NEXT:  # %bb.3:
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-X87-NEXT:  .LBB8_4:
+; X86-X87-NEXT:    movl $0, %edi
+; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
+; 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:    movl $-1, %eax
+; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
+; X86-X87-NEXT:    movl $-1, %esi
+; X86-X87-NEXT:    ja .LBB8_8
+; X86-X87-NEXT:  # %bb.7:
+; X86-X87-NEXT:    movl %edi, %eax
+; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-X87-NEXT:    movl %ecx, %esi
+; X86-X87-NEXT:  .LBB8_8:
+; 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 $7, %edi
+; X86-X87-NEXT:    ja .LBB8_10
+; X86-X87-NEXT:  # %bb.9:
+; X86-X87-NEXT:    movl %ebx, %edi
+; X86-X87-NEXT:  .LBB8_10:
+; X86-X87-NEXT:    fucomp %st(0)
+; X86-X87-NEXT:    fnstsw %ax
+; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
+; X86-X87-NEXT:    sahf
+; X86-X87-NEXT:    movl $0, %eax
+; X86-X87-NEXT:    movl $0, %ebp
+; X86-X87-NEXT:    movl $0, %ebx
+; X86-X87-NEXT:    jp .LBB8_12
+; X86-X87-NEXT:  # %bb.11:
+; X86-X87-NEXT:    movl %edi, %edx
+; X86-X87-NEXT:    movl %esi, %eax
+; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
+; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
+; X86-X87-NEXT:  .LBB8_12:
+; X86-X87-NEXT:    movl %ebx, 8(%ecx)
+; X86-X87-NEXT:    movl %ebp, 4(%ecx)
+; X86-X87-NEXT:    movl %eax, (%ecx)
+; X86-X87-NEXT:    andl $15, %edx
+; X86-X87-NEXT:    movb %dl, 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_signed_i100_f16:
+; X86-SSE:       # %bb.0:
+; X86-SSE-NEXT:    pushl %ebp
+; X86-SSE-NEXT:    pushl %ebx
+; X86-SSE-NEXT:    pushl %edi
+; X86-SSE-NEXT:    pushl %esi
+; X86-SSE-NEXT:    subl $44, %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 __fixsfti
+; X86-SSE-NEXT:    subl $4, %esp
+; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload
+; X86-SSE-NEXT:    # xmm0 = mem[0],zero,zero,zero
+; X86-SSE-NEXT:    xorl %ebp, %ebp
+; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    movl $-8, %ebx
+; 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), %ebx
+; 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 $-1, %eax
+; X86-SSE-NEXT:    cmoval %eax, %edi
+; X86-SSE-NEXT:    cmoval %eax, %edx
+; X86-SSE-NEXT:    cmoval %eax, %ecx
+; X86-SSE-NEXT:    movl $7, %eax
+; X86-SSE-NEXT:    cmovbel %ebx, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    cmovpl %ebp, %eax
+; X86-SSE-NEXT:    cmovpl %ebp, %ecx
+; X86-SSE-NEXT:    cmovpl %ebp, %edx
+; X86-SSE-NEXT:    cmovpl %ebp, %edi
+; X86-SSE-NEXT:    movl %edi, 8(%esi)
+; X86-SSE-NEXT:    movl %edx, 4(%esi)
+; X86-SSE-NEXT:    movl %ecx, (%esi)
+; X86-SSE-NEXT:    andl $15, %eax
+; X86-SSE-NEXT:    movb %al, 12(%esi)
+; X86-SSE-NEXT:    movl %esi, %eax
+; X86-SSE-NEXT:    addl $44, %esp
+; X86-SSE-NEXT:    popl %esi
+; X86-SSE-NEXT:    popl %edi
+; X86-SSE-NEXT:    popl %ebx
+; X86-SSE-NEXT:    popl %ebp
+; X86-SSE-NEXT:    retl $4
+;
+; X64-LABEL: test_signed_i100_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; X64-NEXT:    callq __fixsfti at PLT
+; X64-NEXT:    xorl %ecx, %ecx
+; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
+; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    cmovbq %rcx, %rax
+; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF800000000
+; X64-NEXT:    cmovbq %rsi, %rdx
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF
+; X64-NEXT:    cmovaq %rsi, %rdx
+; X64-NEXT:    movq $-1, %rsi
+; X64-NEXT:    cmovaq %rsi, %rax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    cmovpq %rcx, %rax
+; X64-NEXT:    cmovpq %rcx, %rdx
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i100_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    pushq %rax
+; X64-AVX512FP16-NEXT:    vcvtsh2ss %xmm0, %xmm0, %xmm0
+; X64-AVX512FP16-NEXT:    vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; X64-AVX512FP16-NEXT:    callq __fixsfti at PLT
+; X64-AVX512FP16-NEXT:    xorl %ecx, %ecx
+; X64-AVX512FP16-NEXT:    vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
+; X64-AVX512FP16-NEXT:    # xmm0 = mem[0],zero,zero,zero
+; X64-AVX512FP16-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    cmovbq %rcx, %rax
+; X64-AVX512FP16-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF800000000
+; X64-AVX512FP16-NEXT:    cmovbq %rsi, %rdx
+; X64-AVX512FP16-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF
+; X64-AVX512FP16-NEXT:    cmovaq %rsi, %rdx
+; X64-AVX512FP16-NEXT:    movq $-1, %rsi
+; X64-AVX512FP16-NEXT:    cmovaq %rsi, %rax
+; X64-AVX512FP16-NEXT:    vucomiss %xmm0, %xmm0
+; X64-AVX512FP16-NEXT:    cmovpq %rcx, %rax
+; X64-AVX512FP16-NEXT:    cmovpq %rcx, %rdx
+; X64-AVX512FP16-NEXT:    popq %rcx
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i100 @llvm.fptosi.sat.i100.f16(half %f)
+    ret i100 %x
+}
+
+define i128 @test_signed_i128_f16(half %f) nounwind {
+; X86-X87-LABEL: test_signed_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 __extendhfsf2
+; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; X86-X87-NEXT:    movl %eax, (%esp)
+; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; 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 __fixsfti
+; X86-X87-NEXT:    subl $4, %esp
+; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
+; X86-X87-NEXT:    movb %bh, %ah
+; X86-X87-NEXT:    sahf
+; X86-X87-NEXT:    movl $0, %eax
+; X86-X87-NEXT:    movl $0, %ebx
+; X86-X87-NEXT:    jae .LBB9_1
+; X86-X87-NEXT:  # %bb.2:
+; X86-X87-NEXT:    movl $0, %edx
+; X86-X87-NEXT:    jae .LBB9_3
+; X86-X87-NEXT:  .LBB9_4:
+; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
+; X86-X87-NEXT:    jb .LBB9_6
+; X86-X87-NEXT:  .LBB9_5:
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-X87-NEXT:  .LBB9_6:
+; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; 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:    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:    movl $2147483647, %eax # imm = 0x7FFFFFFF
+; X86-X87-NEXT:    ja .LBB9_8
+; X86-X87-NEXT:  # %bb.7:
+; X86-X87-NEXT:    movl %ecx, %eax
+; X86-X87-NEXT:  .LBB9_8:
+; 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 $-1, %ebp
+; X86-X87-NEXT:    movl $-1, %edi
+; X86-X87-NEXT:    movl $-1, %esi
+; X86-X87-NEXT:    ja .LBB9_10
+; X86-X87-NEXT:  # %bb.9:
+; X86-X87-NEXT:    movl %edx, %ebp
+; X86-X87-NEXT:    movl %ebx, %edi
+; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
+; X86-X87-NEXT:  .LBB9_10:
+; X86-X87-NEXT:    fucomp %st(0)
+; X86-X87-NEXT:    fnstsw %ax
+; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
+; X86-X87-NEXT:    sahf
+; X86-X87-NEXT:    movl $0, %eax
+; X86-X87-NEXT:    movl $0, %edx
+; X86-X87-NEXT:    movl $0, %ebx
+; X86-X87-NEXT:    jp .LBB9_12
+; X86-X87-NEXT:  # %bb.11:
+; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-X87-NEXT:    movl %edi, %eax
+; X86-X87-NEXT:    movl %ebp, %edx
+; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
+; X86-X87-NEXT:  .LBB9_12:
+; X86-X87-NEXT:    movl %ebx, 12(%ecx)
+; X86-X87-NEXT:    movl %edx, 8(%ecx)
+; X86-X87-NEXT:    movl %eax, 4(%ecx)
+; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; 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-X87-NEXT:  .LBB9_1:
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-X87-NEXT:    movl $0, %edx
+; X86-X87-NEXT:    jb .LBB9_4
+; X86-X87-NEXT:  .LBB9_3:
+; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
+; X86-X87-NEXT:    jae .LBB9_5
+; X86-X87-NEXT:    jmp .LBB9_6
+;
+; X86-SSE-LABEL: test_signed_i128_f16:
+; X86-SSE:       # %bb.0:
+; X86-SSE-NEXT:    pushl %ebp
+; X86-SSE-NEXT:    pushl %ebx
+; X86-SSE-NEXT:    pushl %edi
+; X86-SSE-NEXT:    pushl %esi
+; X86-SSE-NEXT:    subl $44, %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 __fixsfti
+; X86-SSE-NEXT:    subl $4, %esp
+; X86-SSE-NEXT:    xorl %ecx, %ecx
+; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload
+; X86-SSE-NEXT:    # xmm0 = mem[0],zero,zero,zero
+; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE-NEXT:    cmovbl %ecx, %eax
+; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE-NEXT:    cmovbl %ecx, %edx
+; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-SSE-NEXT:    cmovbl %ecx, %edi
+; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x80000000
+; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp
+; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
+; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF
+; X86-SSE-NEXT:    cmovbel %ebp, %ebx
+; X86-SSE-NEXT:    movl $-1, %ebp
+; X86-SSE-NEXT:    cmoval %ebp, %edi
+; X86-SSE-NEXT:    cmoval %ebp, %edx
+; X86-SSE-NEXT:    cmoval %ebp, %eax
+; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
+; X86-SSE-NEXT:    cmovpl %ecx, %eax
+; X86-SSE-NEXT:    cmovpl %ecx, %edx
+; X86-SSE-NEXT:    cmovpl %ecx, %edi
+; X86-SSE-NEXT:    cmovpl %ecx, %ebx
+; X86-SSE-NEXT:    movl %ebx, 12(%esi)
+; X86-SSE-NEXT:    movl %edi, 8(%esi)
+; X86-SSE-NEXT:    movl %edx, 4(%esi)
+; X86-SSE-NEXT:    movl %eax, (%esi)
+; X86-SSE-NEXT:    movl %esi, %eax
+; X86-SSE-NEXT:    addl $44, %esp
+; X86-SSE-NEXT:    popl %esi
+; X86-SSE-NEXT:    popl %edi
+; X86-SSE-NEXT:    popl %ebx
+; X86-SSE-NEXT:    popl %ebp
+; X86-SSE-NEXT:    retl $4
+;
+; X64-LABEL: test_signed_i128_f16:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rax
+; X64-NEXT:    callq __extendhfsf2 at PLT
+; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; X64-NEXT:    callq __fixsfti at PLT
+; X64-NEXT:    xorl %ecx, %ecx
+; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
+; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    cmovbq %rcx, %rax
+; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
+; X64-NEXT:    cmovbq %rsi, %rdx
+; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF
+; X64-NEXT:    cmovaq %rsi, %rdx
+; X64-NEXT:    movq $-1, %rsi
+; X64-NEXT:    cmovaq %rsi, %rax
+; X64-NEXT:    ucomiss %xmm0, %xmm0
+; X64-NEXT:    cmovpq %rcx, %rax
+; X64-NEXT:    cmovpq %rcx, %rdx
+; X64-NEXT:    popq %rcx
+; X64-NEXT:    retq
+;
+; X64-AVX512FP16-LABEL: test_signed_i128_f16:
+; X64-AVX512FP16:       # %bb.0:
+; X64-AVX512FP16-NEXT:    pushq %rax
+; X64-AVX512FP16-NEXT:    vcvtsh2ss %xmm0, %xmm0, %xmm0
+; X64-AVX512FP16-NEXT:    vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; X64-AVX512FP16-NEXT:    callq __fixsfti at PLT
+; X64-AVX512FP16-NEXT:    xorl %ecx, %ecx
+; X64-AVX512FP16-NEXT:    vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
+; X64-AVX512FP16-NEXT:    # xmm0 = mem[0],zero,zero,zero
+; X64-AVX512FP16-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    cmovbq %rcx, %rax
+; X64-AVX512FP16-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
+; X64-AVX512FP16-NEXT:    cmovbq %rsi, %rdx
+; X64-AVX512FP16-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; X64-AVX512FP16-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF
+; X64-AVX512FP16-NEXT:    cmovaq %rsi, %rdx
+; X64-AVX512FP16-NEXT:    movq $-1, %rsi
+; X64-AVX512FP16-NEXT:    cmovaq %rsi, %rax
+; X64-AVX512FP16-NEXT:    vucomiss %xmm0, %xmm0
+; X64-AVX512FP16-NEXT:    cmovpq %rcx, %rax
+; X64-AVX512FP16-NEXT:    cmovpq %rcx, %rdx
+; X64-AVX512FP16-NEXT:    popq %rcx
+; X64-AVX512FP16-NEXT:    retq
+    %x = call i128 @llvm.fptosi.sat.i128.f16(half %f)
+    ret i128 %x
+}

diff  --git a/llvm/test/CodeGen/X86/fptosi-sat-scalar.ll b/llvm/test/CodeGen/X86/fptosi-sat-scalar.ll
index 9b7a43a29a942..d58047e2f16ad 100644
--- a/llvm/test/CodeGen/X86/fptosi-sat-scalar.ll
+++ b/llvm/test/CodeGen/X86/fptosi-sat-scalar.ll
@@ -2032,1166 +2032,6 @@ define i128 @test_signed_i128_f64(double %f) nounwind {
     ret i128 %x
 }
 
-;
-; 16-bit float to signed integer
-;
-
-declare   i1 @llvm.fptosi.sat.i1.f16  (half)
-declare   i8 @llvm.fptosi.sat.i8.f16  (half)
-declare  i13 @llvm.fptosi.sat.i13.f16 (half)
-declare  i16 @llvm.fptosi.sat.i16.f16 (half)
-declare  i19 @llvm.fptosi.sat.i19.f16 (half)
-declare  i32 @llvm.fptosi.sat.i32.f16 (half)
-declare  i50 @llvm.fptosi.sat.i50.f16 (half)
-declare  i64 @llvm.fptosi.sat.i64.f16 (half)
-declare i100 @llvm.fptosi.sat.i100.f16(half)
-declare i128 @llvm.fptosi.sat.i128.f16(half)
-
-; FIXME: Can be optimizated with maxss + minss
-define i1 @test_signed_i1_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_i1_f16:
-; X86-X87:       # %bb.0:
-; X86-X87-NEXT:    pushl %ebx
-; X86-X87-NEXT:    subl $24, %esp
-; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; X86-X87-NEXT:    movl %eax, (%esp)
-; X86-X87-NEXT:    calll __extendhfsf2
-; 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:    fld1
-; X86-X87-NEXT:    fchs
-; 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:    movb $-1, %dl
-; X86-X87-NEXT:    jb .LBB20_2
-; X86-X87-NEXT:  # %bb.1:
-; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
-; X86-X87-NEXT:  .LBB20_2:
-; 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:    movl $0, %ebx
-; X86-X87-NEXT:    ja .LBB20_4
-; X86-X87-NEXT:  # %bb.3:
-; X86-X87-NEXT:    movl %edx, %ebx
-; X86-X87-NEXT:  .LBB20_4:
-; X86-X87-NEXT:    fucomp %st(0)
-; X86-X87-NEXT:    fnstsw %ax
-; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
-; X86-X87-NEXT:    sahf
-; X86-X87-NEXT:    jp .LBB20_6
-; X86-X87-NEXT:  # %bb.5:
-; X86-X87-NEXT:    movl %ebx, %ecx
-; X86-X87-NEXT:  .LBB20_6:
-; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:    addl $24, %esp
-; X86-X87-NEXT:    popl %ebx
-; X86-X87-NEXT:    retl
-;
-; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    xorps %xmm1, %xmm1
-; X86-SSE-NEXT:    minss %xmm0, %xmm1
-; X86-SSE-NEXT:    cvttss2si %xmm1, %ecx
-; X86-SSE-NEXT:    cmovnpl %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_signed_i1_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    xorl %eax, %eax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    xorps %xmm1, %xmm1
-; X64-NEXT:    minss %xmm0, %xmm1
-; X64-NEXT:    cvttss2si %xmm1, %ecx
-; X64-NEXT:    cmovnpl %ecx, %eax
-; X64-NEXT:    # kill: def $al killed $al killed $eax
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i1 @llvm.fptosi.sat.i1.f16(half %f)
-    ret i1 %x
-}
-
-; FIXME: Can be optimizated with maxss + minss
-define i8 @test_signed_i8_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_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 __extendhfsf2
-; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movb $-128, %dl
-; X86-X87-NEXT:    jb .LBB21_2
-; X86-X87-NEXT:  # %bb.1:
-; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
-; X86-X87-NEXT:  .LBB21_2:
-; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movb $127, %cl
-; X86-X87-NEXT:    ja .LBB21_4
-; X86-X87-NEXT:  # %bb.3:
-; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB21_4:
-; X86-X87-NEXT:    fucomp %st(0)
-; X86-X87-NEXT:    fnstsw %ax
-; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
-; X86-X87-NEXT:    sahf
-; X86-X87-NEXT:    jnp .LBB21_6
-; X86-X87-NEXT:  # %bb.5:
-; X86-X87-NEXT:    xorl %ecx, %ecx
-; X86-X87-NEXT:  .LBB21_6:
-; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:    addl $12, %esp
-; X86-X87-NEXT:    retl
-;
-; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
-; X86-SSE-NEXT:    cmovnpl %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_signed_i8_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    xorl %eax, %eax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    cvttss2si %xmm0, %ecx
-; X64-NEXT:    cmovnpl %ecx, %eax
-; X64-NEXT:    # kill: def $al killed $al killed $eax
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i8 @llvm.fptosi.sat.i8.f16(half %f)
-    ret i8 %x
-}
-
-; FIXME: Can be optimizated with maxss + minss
-define i13 @test_signed_i13_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_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 __extendhfsf2
-; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movl $61440, %ecx # imm = 0xF000
-; X86-X87-NEXT:    jb .LBB22_2
-; X86-X87-NEXT:  # %bb.1:
-; X86-X87-NEXT:    movzwl {{[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:    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:    movl $4095, %edx # imm = 0xFFF
-; X86-X87-NEXT:    ja .LBB22_4
-; X86-X87-NEXT:  # %bb.3:
-; X86-X87-NEXT:    movl %ecx, %edx
-; X86-X87-NEXT:  .LBB22_4:
-; X86-X87-NEXT:    fucomp %st(0)
-; 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:    jp .LBB22_6
-; X86-X87-NEXT:  # %bb.5:
-; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB22_6:
-; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:    addl $12, %esp
-; X86-X87-NEXT:    retl
-;
-; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
-; X86-SSE-NEXT:    cmovnpl %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_signed_i13_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    xorl %eax, %eax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    cvttss2si %xmm0, %ecx
-; X64-NEXT:    cmovnpl %ecx, %eax
-; X64-NEXT:    # kill: def $ax killed $ax killed $eax
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i13 @llvm.fptosi.sat.i13.f16(half %f)
-    ret i13 %x
-}
-
-; FIXME: Can be optimizated with maxss + minss
-define i16 @test_signed_i16_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_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 __extendhfsf2
-; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movl $32768, %ecx # imm = 0x8000
-; X86-X87-NEXT:    jb .LBB23_2
-; X86-X87-NEXT:  # %bb.1:
-; X86-X87-NEXT:    movzwl {{[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:    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:    movl $32767, %edx # imm = 0x7FFF
-; X86-X87-NEXT:    ja .LBB23_4
-; X86-X87-NEXT:  # %bb.3:
-; X86-X87-NEXT:    movl %ecx, %edx
-; X86-X87-NEXT:  .LBB23_4:
-; X86-X87-NEXT:    fucomp %st(0)
-; 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:    jp .LBB23_6
-; X86-X87-NEXT:  # %bb.5:
-; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB23_6:
-; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:    addl $12, %esp
-; X86-X87-NEXT:    retl
-;
-; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
-; X86-SSE-NEXT:    cmovnpl %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_signed_i16_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    xorl %eax, %eax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    cvttss2si %xmm0, %ecx
-; X64-NEXT:    cmovnpl %ecx, %eax
-; X64-NEXT:    # kill: def $ax killed $ax killed $eax
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i16 @llvm.fptosi.sat.i16.f16(half %f)
-    ret i16 %x
-}
-
-; FIXME: Can be optimizated with maxss + minss
-define i19 @test_signed_i19_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_i19_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 __extendhfsf2
-; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movl $-262144, %ecx # imm = 0xFFFC0000
-; 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:    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:    movl $262143, %edx # imm = 0x3FFFF
-; X86-X87-NEXT:    ja .LBB24_4
-; X86-X87-NEXT:  # %bb.3:
-; X86-X87-NEXT:    movl %ecx, %edx
-; X86-X87-NEXT:  .LBB24_4:
-; X86-X87-NEXT:    fucomp %st(0)
-; 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:    jp .LBB24_6
-; X86-X87-NEXT:  # %bb.5:
-; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB24_6:
-; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:    addl $12, %esp
-; X86-X87-NEXT:    retl
-;
-; X86-SSE-LABEL: test_signed_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:    xorl %eax, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
-; X86-SSE-NEXT:    cmovnpl %ecx, %eax
-; X86-SSE-NEXT:    addl $12, %esp
-; X86-SSE-NEXT:    retl
-;
-; X64-LABEL: test_signed_i19_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    xorl %eax, %eax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    cvttss2si %xmm0, %ecx
-; X64-NEXT:    cmovnpl %ecx, %eax
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i19 @llvm.fptosi.sat.i19.f16(half %f)
-    ret i19 %x
-}
-
-define i32 @test_signed_i32_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_i32_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 __extendhfsf2
-; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movl $-2147483648, %ecx # imm = 0x80000000
-; 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:    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:    movl $2147483647, %edx # imm = 0x7FFFFFFF
-; X86-X87-NEXT:    ja .LBB25_4
-; X86-X87-NEXT:  # %bb.3:
-; X86-X87-NEXT:    movl %ecx, %edx
-; X86-X87-NEXT:  .LBB25_4:
-; X86-X87-NEXT:    fucomp %st(0)
-; 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:    jp .LBB25_6
-; X86-X87-NEXT:  # %bb.5:
-; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB25_6:
-; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:    addl $12, %esp
-; X86-X87-NEXT:    retl
-;
-; X86-SSE-LABEL: test_signed_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:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
-; X86-SSE-NEXT:    cmovael %eax, %ecx
-; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
-; X86-SSE-NEXT:    cmovbel %ecx, %edx
-; X86-SSE-NEXT:    xorl %eax, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    cmovnpl %edx, %eax
-; X86-SSE-NEXT:    addl $12, %esp
-; X86-SSE-NEXT:    retl
-;
-; X64-LABEL: test_signed_i32_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    cvttss2si %xmm0, %eax
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
-; X64-NEXT:    cmovael %eax, %ecx
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
-; X64-NEXT:    cmovbel %ecx, %edx
-; X64-NEXT:    xorl %eax, %eax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    cmovnpl %edx, %eax
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i32 @llvm.fptosi.sat.i32.f16(half %f)
-    ret i32 %x
-}
-
-define i50 @test_signed_i50_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_i50_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 __extendhfsf2
-; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movl $0, %edx
-; X86-X87-NEXT:    jb .LBB26_2
-; X86-X87-NEXT:  # %bb.1:
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-X87-NEXT:  .LBB26_2:
-; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE0000
-; X86-X87-NEXT:    jb .LBB26_4
-; X86-X87-NEXT:  # %bb.3:
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-X87-NEXT:  .LBB26_4:
-; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movl $131071, %esi # imm = 0x1FFFF
-; X86-X87-NEXT:    ja .LBB26_6
-; X86-X87-NEXT:  # %bb.5:
-; X86-X87-NEXT:    movl %edi, %esi
-; X86-X87-NEXT:  .LBB26_6:
-; X86-X87-NEXT:    movl $-1, %edi
-; X86-X87-NEXT:    ja .LBB26_8
-; X86-X87-NEXT:  # %bb.7:
-; X86-X87-NEXT:    movl %edx, %edi
-; X86-X87-NEXT:  .LBB26_8:
-; X86-X87-NEXT:    fucomp %st(0)
-; X86-X87-NEXT:    fnstsw %ax
-; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
-; X86-X87-NEXT:    sahf
-; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jp .LBB26_10
-; X86-X87-NEXT:  # %bb.9:
-; X86-X87-NEXT:    movl %edi, %ecx
-; X86-X87-NEXT:    movl %esi, %edx
-; X86-X87-NEXT:  .LBB26_10:
-; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:    addl $20, %esp
-; X86-X87-NEXT:    popl %esi
-; X86-X87-NEXT:    popl %edi
-; X86-X87-NEXT:    retl
-;
-; X86-SSE-LABEL: test_signed_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 %xmm0, {{[0-9]+}}(%esp)
-; 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 %ecx, %ecx
-; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-SSE-NEXT:    cmovbl %ecx, %esi
-; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE0000
-; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
-; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF
-; X86-SSE-NEXT:    cmovbel %eax, %edx
-; X86-SSE-NEXT:    movl $-1, %eax
-; X86-SSE-NEXT:    cmovbel %esi, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    cmovpl %ecx, %eax
-; X86-SSE-NEXT:    cmovpl %ecx, %edx
-; X86-SSE-NEXT:    addl $24, %esp
-; X86-SSE-NEXT:    popl %esi
-; X86-SSE-NEXT:    retl
-;
-; X64-LABEL: test_signed_i50_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    cvttss2si %xmm0, %rax
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    movabsq $-562949953421312, %rcx # imm = 0xFFFE000000000000
-; X64-NEXT:    cmovaeq %rax, %rcx
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    movabsq $562949953421311, %rdx # imm = 0x1FFFFFFFFFFFF
-; X64-NEXT:    cmovbeq %rcx, %rdx
-; X64-NEXT:    xorl %eax, %eax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    cmovnpq %rdx, %rax
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i50 @llvm.fptosi.sat.i50.f16(half %f)
-    ret i50 %x
-}
-
-define i64 @test_signed_i64_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_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 __extendhfsf2
-; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movl $0, %edx
-; X86-X87-NEXT:    jb .LBB27_2
-; X86-X87-NEXT:  # %bb.1:
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-X87-NEXT:  .LBB27_2:
-; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x80000000
-; X86-X87-NEXT:    jb .LBB27_4
-; X86-X87-NEXT:  # %bb.3:
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-X87-NEXT:  .LBB27_4:
-; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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:    movl $2147483647, %esi # imm = 0x7FFFFFFF
-; X86-X87-NEXT:    ja .LBB27_6
-; X86-X87-NEXT:  # %bb.5:
-; X86-X87-NEXT:    movl %edi, %esi
-; X86-X87-NEXT:  .LBB27_6:
-; X86-X87-NEXT:    movl $-1, %edi
-; X86-X87-NEXT:    ja .LBB27_8
-; X86-X87-NEXT:  # %bb.7:
-; X86-X87-NEXT:    movl %edx, %edi
-; X86-X87-NEXT:  .LBB27_8:
-; X86-X87-NEXT:    fucomp %st(0)
-; X86-X87-NEXT:    fnstsw %ax
-; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
-; X86-X87-NEXT:    sahf
-; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jp .LBB27_10
-; X86-X87-NEXT:  # %bb.9:
-; X86-X87-NEXT:    movl %edi, %ecx
-; X86-X87-NEXT:    movl %esi, %edx
-; X86-X87-NEXT:  .LBB27_10:
-; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:    addl $20, %esp
-; X86-X87-NEXT:    popl %esi
-; X86-X87-NEXT:    popl %edi
-; X86-X87-NEXT:    retl
-;
-; X86-SSE-LABEL: test_signed_i64_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 %xmm0, {{[0-9]+}}(%esp)
-; 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 %ecx, %ecx
-; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-SSE-NEXT:    cmovbl %ecx, %esi
-; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
-; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
-; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
-; X86-SSE-NEXT:    cmovbel %eax, %edx
-; X86-SSE-NEXT:    movl $-1, %eax
-; X86-SSE-NEXT:    cmovbel %esi, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    cmovpl %ecx, %eax
-; X86-SSE-NEXT:    cmovpl %ecx, %edx
-; X86-SSE-NEXT:    addl $24, %esp
-; X86-SSE-NEXT:    popl %esi
-; X86-SSE-NEXT:    retl
-;
-; X64-LABEL: test_signed_i64_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    cvttss2si %xmm0, %rax
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
-; X64-NEXT:    cmovaeq %rax, %rcx
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF
-; X64-NEXT:    cmovbeq %rcx, %rdx
-; X64-NEXT:    xorl %eax, %eax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    cmovnpq %rdx, %rax
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i64 @llvm.fptosi.sat.i64.f16(half %f)
-    ret i64 %x
-}
-
-define i100 @test_signed_i100_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_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 $60, %esp
-; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; X86-X87-NEXT:    movl %eax, (%esp)
-; X86-X87-NEXT:    calll __extendhfsf2
-; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
-; X86-X87-NEXT:    movl %eax, (%esp)
-; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
-; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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 __fixsfti
-; 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 $-8, %ebx
-; X86-X87-NEXT:    jb .LBB28_2
-; X86-X87-NEXT:  # %bb.1:
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
-; X86-X87-NEXT:  .LBB28_2:
-; X86-X87-NEXT:    movl $0, %ecx
-; X86-X87-NEXT:    movl $0, %ebp
-; X86-X87-NEXT:    jb .LBB28_4
-; X86-X87-NEXT:  # %bb.3:
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
-; X86-X87-NEXT:  .LBB28_4:
-; X86-X87-NEXT:    movl $0, %edi
-; 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:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
-; 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:    movl $-1, %eax
-; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
-; X86-X87-NEXT:    movl $-1, %esi
-; X86-X87-NEXT:    ja .LBB28_8
-; X86-X87-NEXT:  # %bb.7:
-; X86-X87-NEXT:    movl %edi, %eax
-; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
-; X86-X87-NEXT:    movl %ecx, %esi
-; X86-X87-NEXT:  .LBB28_8:
-; 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 $7, %edi
-; X86-X87-NEXT:    ja .LBB28_10
-; X86-X87-NEXT:  # %bb.9:
-; X86-X87-NEXT:    movl %ebx, %edi
-; X86-X87-NEXT:  .LBB28_10:
-; X86-X87-NEXT:    fucomp %st(0)
-; X86-X87-NEXT:    fnstsw %ax
-; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
-; X86-X87-NEXT:    sahf
-; X86-X87-NEXT:    movl $0, %eax
-; X86-X87-NEXT:    movl $0, %ebp
-; X86-X87-NEXT:    movl $0, %ebx
-; X86-X87-NEXT:    jp .LBB28_12
-; X86-X87-NEXT:  # %bb.11:
-; X86-X87-NEXT:    movl %edi, %edx
-; X86-X87-NEXT:    movl %esi, %eax
-; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
-; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
-; X86-X87-NEXT:  .LBB28_12:
-; X86-X87-NEXT:    movl %ebx, 8(%ecx)
-; X86-X87-NEXT:    movl %ebp, 4(%ecx)
-; X86-X87-NEXT:    movl %eax, (%ecx)
-; X86-X87-NEXT:    andl $15, %edx
-; X86-X87-NEXT:    movb %dl, 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_signed_i100_f16:
-; X86-SSE:       # %bb.0:
-; X86-SSE-NEXT:    pushl %ebp
-; X86-SSE-NEXT:    pushl %ebx
-; X86-SSE-NEXT:    pushl %edi
-; X86-SSE-NEXT:    pushl %esi
-; X86-SSE-NEXT:    subl $44, %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 __fixsfti
-; X86-SSE-NEXT:    subl $4, %esp
-; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload
-; X86-SSE-NEXT:    # xmm0 = mem[0],zero,zero,zero
-; X86-SSE-NEXT:    xorl %ebp, %ebp
-; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    movl $-8, %ebx
-; 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), %ebx
-; 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 $-1, %eax
-; X86-SSE-NEXT:    cmoval %eax, %edi
-; X86-SSE-NEXT:    cmoval %eax, %edx
-; X86-SSE-NEXT:    cmoval %eax, %ecx
-; X86-SSE-NEXT:    movl $7, %eax
-; X86-SSE-NEXT:    cmovbel %ebx, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    cmovpl %ebp, %eax
-; X86-SSE-NEXT:    cmovpl %ebp, %ecx
-; X86-SSE-NEXT:    cmovpl %ebp, %edx
-; X86-SSE-NEXT:    cmovpl %ebp, %edi
-; X86-SSE-NEXT:    movl %edi, 8(%esi)
-; X86-SSE-NEXT:    movl %edx, 4(%esi)
-; X86-SSE-NEXT:    movl %ecx, (%esi)
-; X86-SSE-NEXT:    andl $15, %eax
-; X86-SSE-NEXT:    movb %al, 12(%esi)
-; X86-SSE-NEXT:    movl %esi, %eax
-; X86-SSE-NEXT:    addl $44, %esp
-; X86-SSE-NEXT:    popl %esi
-; X86-SSE-NEXT:    popl %edi
-; X86-SSE-NEXT:    popl %ebx
-; X86-SSE-NEXT:    popl %ebp
-; X86-SSE-NEXT:    retl $4
-;
-; X64-LABEL: test_signed_i100_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; X64-NEXT:    callq __fixsfti at PLT
-; X64-NEXT:    xorl %ecx, %ecx
-; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
-; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    cmovbq %rcx, %rax
-; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF800000000
-; X64-NEXT:    cmovbq %rsi, %rdx
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF
-; X64-NEXT:    cmovaq %rsi, %rdx
-; X64-NEXT:    movq $-1, %rsi
-; X64-NEXT:    cmovaq %rsi, %rax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    cmovpq %rcx, %rax
-; X64-NEXT:    cmovpq %rcx, %rdx
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i100 @llvm.fptosi.sat.i100.f16(half %f)
-    ret i100 %x
-}
-
-define i128 @test_signed_i128_f16(half %f) nounwind {
-; X86-X87-LABEL: test_signed_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 __extendhfsf2
-; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
-; X86-X87-NEXT:    movl %eax, (%esp)
-; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
-; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
-; 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 __fixsfti
-; X86-X87-NEXT:    subl $4, %esp
-; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
-; X86-X87-NEXT:    movb %bh, %ah
-; X86-X87-NEXT:    sahf
-; X86-X87-NEXT:    movl $0, %eax
-; X86-X87-NEXT:    movl $0, %ebx
-; X86-X87-NEXT:    jae .LBB29_1
-; X86-X87-NEXT:  # %bb.2:
-; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jae .LBB29_3
-; X86-X87-NEXT:  .LBB29_4:
-; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
-; X86-X87-NEXT:    jb .LBB29_6
-; X86-X87-NEXT:  .LBB29_5:
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-X87-NEXT:  .LBB29_6:
-; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
-; 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:    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:    movl $2147483647, %eax # imm = 0x7FFFFFFF
-; X86-X87-NEXT:    ja .LBB29_8
-; X86-X87-NEXT:  # %bb.7:
-; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:  .LBB29_8:
-; 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 $-1, %ebp
-; X86-X87-NEXT:    movl $-1, %edi
-; X86-X87-NEXT:    movl $-1, %esi
-; X86-X87-NEXT:    ja .LBB29_10
-; X86-X87-NEXT:  # %bb.9:
-; X86-X87-NEXT:    movl %edx, %ebp
-; X86-X87-NEXT:    movl %ebx, %edi
-; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
-; X86-X87-NEXT:  .LBB29_10:
-; X86-X87-NEXT:    fucomp %st(0)
-; X86-X87-NEXT:    fnstsw %ax
-; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
-; X86-X87-NEXT:    sahf
-; X86-X87-NEXT:    movl $0, %eax
-; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    movl $0, %ebx
-; X86-X87-NEXT:    jp .LBB29_12
-; X86-X87-NEXT:  # %bb.11:
-; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
-; X86-X87-NEXT:    movl %edi, %eax
-; X86-X87-NEXT:    movl %ebp, %edx
-; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
-; X86-X87-NEXT:  .LBB29_12:
-; X86-X87-NEXT:    movl %ebx, 12(%ecx)
-; X86-X87-NEXT:    movl %edx, 8(%ecx)
-; X86-X87-NEXT:    movl %eax, 4(%ecx)
-; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
-; 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-X87-NEXT:  .LBB29_1:
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
-; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jb .LBB29_4
-; X86-X87-NEXT:  .LBB29_3:
-; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
-; X86-X87-NEXT:    jae .LBB29_5
-; X86-X87-NEXT:    jmp .LBB29_6
-;
-; X86-SSE-LABEL: test_signed_i128_f16:
-; X86-SSE:       # %bb.0:
-; X86-SSE-NEXT:    pushl %ebp
-; X86-SSE-NEXT:    pushl %ebx
-; X86-SSE-NEXT:    pushl %edi
-; X86-SSE-NEXT:    pushl %esi
-; X86-SSE-NEXT:    subl $44, %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 __fixsfti
-; X86-SSE-NEXT:    subl $4, %esp
-; X86-SSE-NEXT:    xorl %ecx, %ecx
-; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload
-; X86-SSE-NEXT:    # xmm0 = mem[0],zero,zero,zero
-; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-SSE-NEXT:    cmovbl %ecx, %eax
-; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-SSE-NEXT:    cmovbl %ecx, %edx
-; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-SSE-NEXT:    cmovbl %ecx, %edi
-; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x80000000
-; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp
-; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
-; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF
-; X86-SSE-NEXT:    cmovbel %ebp, %ebx
-; X86-SSE-NEXT:    movl $-1, %ebp
-; X86-SSE-NEXT:    cmoval %ebp, %edi
-; X86-SSE-NEXT:    cmoval %ebp, %edx
-; X86-SSE-NEXT:    cmoval %ebp, %eax
-; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
-; X86-SSE-NEXT:    cmovpl %ecx, %eax
-; X86-SSE-NEXT:    cmovpl %ecx, %edx
-; X86-SSE-NEXT:    cmovpl %ecx, %edi
-; X86-SSE-NEXT:    cmovpl %ecx, %ebx
-; X86-SSE-NEXT:    movl %ebx, 12(%esi)
-; X86-SSE-NEXT:    movl %edi, 8(%esi)
-; X86-SSE-NEXT:    movl %edx, 4(%esi)
-; X86-SSE-NEXT:    movl %eax, (%esi)
-; X86-SSE-NEXT:    movl %esi, %eax
-; X86-SSE-NEXT:    addl $44, %esp
-; X86-SSE-NEXT:    popl %esi
-; X86-SSE-NEXT:    popl %edi
-; X86-SSE-NEXT:    popl %ebx
-; X86-SSE-NEXT:    popl %ebp
-; X86-SSE-NEXT:    retl $4
-;
-; X64-LABEL: test_signed_i128_f16:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq %rax
-; X64-NEXT:    callq __extendhfsf2 at PLT
-; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; X64-NEXT:    callq __fixsfti at PLT
-; X64-NEXT:    xorl %ecx, %ecx
-; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
-; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    cmovbq %rcx, %rax
-; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
-; X64-NEXT:    cmovbq %rsi, %rdx
-; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF
-; X64-NEXT:    cmovaq %rsi, %rdx
-; X64-NEXT:    movq $-1, %rsi
-; X64-NEXT:    cmovaq %rsi, %rax
-; X64-NEXT:    ucomiss %xmm0, %xmm0
-; X64-NEXT:    cmovpq %rcx, %rax
-; X64-NEXT:    cmovpq %rcx, %rdx
-; X64-NEXT:    popq %rcx
-; X64-NEXT:    retq
-    %x = call i128 @llvm.fptosi.sat.i128.f16(half %f)
-    ret i128 %x
-}
-
 ;
 ; 80-bit float to signed integer
 ;
@@ -3229,10 +2069,10 @@ define i1 @test_signed_i1_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movb $-1, %dl
-; X86-X87-NEXT:    jb .LBB30_2
+; X86-X87-NEXT:    jb .LBB20_2
 ; X86-X87-NEXT:  # %bb.1:
 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
-; X86-X87-NEXT:  .LBB30_2:
+; X86-X87-NEXT:  .LBB20_2:
 ; X86-X87-NEXT:    fldz
 ; X86-X87-NEXT:    fxch %st(1)
 ; X86-X87-NEXT:    fucom %st(1)
@@ -3242,18 +2082,18 @@ define i1 @test_signed_i1_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $0, %ebx
-; X86-X87-NEXT:    ja .LBB30_4
+; X86-X87-NEXT:    ja .LBB20_4
 ; X86-X87-NEXT:  # %bb.3:
 ; X86-X87-NEXT:    movl %edx, %ebx
-; X86-X87-NEXT:  .LBB30_4:
+; X86-X87-NEXT:  .LBB20_4:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; X86-X87-NEXT:    fnstsw %ax
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
-; X86-X87-NEXT:    jp .LBB30_6
+; X86-X87-NEXT:    jp .LBB20_6
 ; X86-X87-NEXT:  # %bb.5:
 ; X86-X87-NEXT:    movl %ebx, %ecx
-; X86-X87-NEXT:  .LBB30_6:
+; X86-X87-NEXT:  .LBB20_6:
 ; X86-X87-NEXT:    movl %ecx, %eax
 ; X86-X87-NEXT:    addl $8, %esp
 ; X86-X87-NEXT:    popl %ebx
@@ -3342,10 +2182,10 @@ define i8 @test_signed_i8_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movb $-128, %dl
-; X86-X87-NEXT:    jb .LBB31_2
+; X86-X87-NEXT:    jb .LBB21_2
 ; X86-X87-NEXT:  # %bb.1:
 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
-; X86-X87-NEXT:  .LBB31_2:
+; X86-X87-NEXT:  .LBB21_2:
 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-X87-NEXT:    fxch %st(1)
 ; X86-X87-NEXT:    fucom %st(1)
@@ -3354,18 +2194,18 @@ define i8 @test_signed_i8_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movb $127, %cl
-; X86-X87-NEXT:    ja .LBB31_4
+; X86-X87-NEXT:    ja .LBB21_4
 ; X86-X87-NEXT:  # %bb.3:
 ; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB31_4:
+; X86-X87-NEXT:  .LBB21_4:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; X86-X87-NEXT:    fnstsw %ax
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
-; X86-X87-NEXT:    jnp .LBB31_6
+; X86-X87-NEXT:    jnp .LBB21_6
 ; X86-X87-NEXT:  # %bb.5:
 ; X86-X87-NEXT:    xorl %ecx, %ecx
-; X86-X87-NEXT:  .LBB31_6:
+; X86-X87-NEXT:  .LBB21_6:
 ; X86-X87-NEXT:    movl %ecx, %eax
 ; X86-X87-NEXT:    addl $8, %esp
 ; X86-X87-NEXT:    retl
@@ -3453,10 +2293,10 @@ define i13 @test_signed_i13_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $61440, %ecx # imm = 0xF000
-; X86-X87-NEXT:    jb .LBB32_2
+; X86-X87-NEXT:    jb .LBB22_2
 ; X86-X87-NEXT:  # %bb.1:
 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
-; X86-X87-NEXT:  .LBB32_2:
+; X86-X87-NEXT:  .LBB22_2:
 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-X87-NEXT:    fxch %st(1)
 ; X86-X87-NEXT:    fucom %st(1)
@@ -3465,19 +2305,19 @@ define i13 @test_signed_i13_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $4095, %edx # imm = 0xFFF
-; X86-X87-NEXT:    ja .LBB32_4
+; X86-X87-NEXT:    ja .LBB22_4
 ; X86-X87-NEXT:  # %bb.3:
 ; X86-X87-NEXT:    movl %ecx, %edx
-; X86-X87-NEXT:  .LBB32_4:
+; X86-X87-NEXT:  .LBB22_4:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; 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:    jp .LBB32_6
+; X86-X87-NEXT:    jp .LBB22_6
 ; X86-X87-NEXT:  # %bb.5:
 ; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB32_6:
+; X86-X87-NEXT:  .LBB22_6:
 ; X86-X87-NEXT:    movl %ecx, %eax
 ; X86-X87-NEXT:    addl $8, %esp
 ; X86-X87-NEXT:    retl
@@ -3565,10 +2405,10 @@ define i16 @test_signed_i16_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $32768, %ecx # imm = 0x8000
-; X86-X87-NEXT:    jb .LBB33_2
+; X86-X87-NEXT:    jb .LBB23_2
 ; X86-X87-NEXT:  # %bb.1:
 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
-; X86-X87-NEXT:  .LBB33_2:
+; X86-X87-NEXT:  .LBB23_2:
 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-X87-NEXT:    fxch %st(1)
 ; X86-X87-NEXT:    fucom %st(1)
@@ -3577,19 +2417,19 @@ define i16 @test_signed_i16_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $32767, %edx # imm = 0x7FFF
-; X86-X87-NEXT:    ja .LBB33_4
+; X86-X87-NEXT:    ja .LBB23_4
 ; X86-X87-NEXT:  # %bb.3:
 ; X86-X87-NEXT:    movl %ecx, %edx
-; X86-X87-NEXT:  .LBB33_4:
+; X86-X87-NEXT:  .LBB23_4:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; 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:    jp .LBB33_6
+; X86-X87-NEXT:    jp .LBB23_6
 ; X86-X87-NEXT:  # %bb.5:
 ; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB33_6:
+; X86-X87-NEXT:  .LBB23_6:
 ; X86-X87-NEXT:    movl %ecx, %eax
 ; X86-X87-NEXT:    addl $8, %esp
 ; X86-X87-NEXT:    retl
@@ -3677,10 +2517,10 @@ define i19 @test_signed_i19_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $-262144, %ecx # imm = 0xFFFC0000
-; X86-X87-NEXT:    jb .LBB34_2
+; X86-X87-NEXT:    jb .LBB24_2
 ; X86-X87-NEXT:  # %bb.1:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-X87-NEXT:  .LBB34_2:
+; X86-X87-NEXT:  .LBB24_2:
 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-X87-NEXT:    fxch %st(1)
 ; X86-X87-NEXT:    fucom %st(1)
@@ -3689,19 +2529,19 @@ define i19 @test_signed_i19_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF
-; X86-X87-NEXT:    ja .LBB34_4
+; X86-X87-NEXT:    ja .LBB24_4
 ; X86-X87-NEXT:  # %bb.3:
 ; X86-X87-NEXT:    movl %ecx, %edx
-; X86-X87-NEXT:  .LBB34_4:
+; X86-X87-NEXT:  .LBB24_4:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; 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:    jp .LBB34_6
+; X86-X87-NEXT:    jp .LBB24_6
 ; X86-X87-NEXT:  # %bb.5:
 ; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB34_6:
+; X86-X87-NEXT:  .LBB24_6:
 ; X86-X87-NEXT:    movl %ecx, %eax
 ; X86-X87-NEXT:    addl $8, %esp
 ; X86-X87-NEXT:    retl
@@ -3722,10 +2562,10 @@ define i19 @test_signed_i19_f80(x86_fp80 %f) nounwind {
 ; X86-SSE-NEXT:    fucomi %st(1), %st
 ; X86-SSE-NEXT:    fstp %st(1)
 ; X86-SSE-NEXT:    movl $-262144, %eax # imm = 0xFFFC0000
-; X86-SSE-NEXT:    jb .LBB34_2
+; X86-SSE-NEXT:    jb .LBB24_2
 ; X86-SSE-NEXT:  # %bb.1:
 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-SSE-NEXT:  .LBB34_2:
+; X86-SSE-NEXT:  .LBB24_2:
 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-SSE-NEXT:    fxch %st(1)
 ; X86-SSE-NEXT:    fucomi %st(1), %st
@@ -3753,10 +2593,10 @@ define i19 @test_signed_i19_f80(x86_fp80 %f) nounwind {
 ; X64-NEXT:    fucomi %st(1), %st
 ; X64-NEXT:    fstp %st(1)
 ; X64-NEXT:    movl $-262144, %eax # imm = 0xFFFC0000
-; X64-NEXT:    jb .LBB34_2
+; X64-NEXT:    jb .LBB24_2
 ; X64-NEXT:  # %bb.1:
 ; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
-; X64-NEXT:  .LBB34_2:
+; X64-NEXT:  .LBB24_2:
 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
 ; X64-NEXT:    fxch %st(1)
 ; X64-NEXT:    fucomi %st(1), %st
@@ -3791,10 +2631,10 @@ define i32 @test_signed_i32_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
-; X86-X87-NEXT:    jb .LBB35_2
+; X86-X87-NEXT:    jb .LBB25_2
 ; X86-X87-NEXT:  # %bb.1:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-X87-NEXT:  .LBB35_2:
+; X86-X87-NEXT:  .LBB25_2:
 ; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-X87-NEXT:    fxch %st(1)
 ; X86-X87-NEXT:    fucom %st(1)
@@ -3803,19 +2643,19 @@ define i32 @test_signed_i32_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
-; X86-X87-NEXT:    ja .LBB35_4
+; X86-X87-NEXT:    ja .LBB25_4
 ; X86-X87-NEXT:  # %bb.3:
 ; X86-X87-NEXT:    movl %ecx, %edx
-; X86-X87-NEXT:  .LBB35_4:
+; X86-X87-NEXT:  .LBB25_4:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; 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:    jp .LBB35_6
+; X86-X87-NEXT:    jp .LBB25_6
 ; X86-X87-NEXT:  # %bb.5:
 ; X86-X87-NEXT:    movl %edx, %ecx
-; X86-X87-NEXT:  .LBB35_6:
+; X86-X87-NEXT:  .LBB25_6:
 ; X86-X87-NEXT:    movl %ecx, %eax
 ; X86-X87-NEXT:    addl $8, %esp
 ; X86-X87-NEXT:    retl
@@ -3836,10 +2676,10 @@ define i32 @test_signed_i32_f80(x86_fp80 %f) nounwind {
 ; X86-SSE-NEXT:    fucomi %st(1), %st
 ; X86-SSE-NEXT:    fstp %st(1)
 ; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
-; X86-SSE-NEXT:    jb .LBB35_2
+; X86-SSE-NEXT:    jb .LBB25_2
 ; X86-SSE-NEXT:  # %bb.1:
 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-SSE-NEXT:  .LBB35_2:
+; X86-SSE-NEXT:  .LBB25_2:
 ; X86-SSE-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-SSE-NEXT:    fxch %st(1)
 ; X86-SSE-NEXT:    fucomi %st(1), %st
@@ -3867,10 +2707,10 @@ define i32 @test_signed_i32_f80(x86_fp80 %f) nounwind {
 ; X64-NEXT:    fucomi %st(1), %st
 ; X64-NEXT:    fstp %st(1)
 ; X64-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
-; X64-NEXT:    jb .LBB35_2
+; X64-NEXT:    jb .LBB25_2
 ; X64-NEXT:  # %bb.1:
 ; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
-; X64-NEXT:  .LBB35_2:
+; X64-NEXT:  .LBB25_2:
 ; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
 ; X64-NEXT:    fxch %st(1)
 ; X64-NEXT:    fucomi %st(1), %st
@@ -3909,15 +2749,15 @@ define i50 @test_signed_i50_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jb .LBB36_2
+; X86-X87-NEXT:    jb .LBB26_2
 ; X86-X87-NEXT:  # %bb.1:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-X87-NEXT:  .LBB36_2:
+; X86-X87-NEXT:  .LBB26_2:
 ; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE0000
-; X86-X87-NEXT:    jb .LBB36_4
+; X86-X87-NEXT:    jb .LBB26_4
 ; X86-X87-NEXT:  # %bb.3:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-X87-NEXT:  .LBB36_4:
+; X86-X87-NEXT:  .LBB26_4:
 ; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-X87-NEXT:    fxch %st(1)
 ; X86-X87-NEXT:    fucom %st(1)
@@ -3926,25 +2766,25 @@ define i50 @test_signed_i50_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $131071, %esi # imm = 0x1FFFF
-; X86-X87-NEXT:    ja .LBB36_6
+; X86-X87-NEXT:    ja .LBB26_6
 ; X86-X87-NEXT:  # %bb.5:
 ; X86-X87-NEXT:    movl %edi, %esi
-; X86-X87-NEXT:  .LBB36_6:
+; X86-X87-NEXT:  .LBB26_6:
 ; X86-X87-NEXT:    movl $-1, %edi
-; X86-X87-NEXT:    ja .LBB36_8
+; X86-X87-NEXT:    ja .LBB26_8
 ; X86-X87-NEXT:  # %bb.7:
 ; X86-X87-NEXT:    movl %edx, %edi
-; X86-X87-NEXT:  .LBB36_8:
+; X86-X87-NEXT:  .LBB26_8:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; X86-X87-NEXT:    fnstsw %ax
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jp .LBB36_10
+; X86-X87-NEXT:    jp .LBB26_10
 ; X86-X87-NEXT:  # %bb.9:
 ; X86-X87-NEXT:    movl %edi, %ecx
 ; X86-X87-NEXT:    movl %esi, %edx
-; X86-X87-NEXT:  .LBB36_10:
+; X86-X87-NEXT:  .LBB26_10:
 ; X86-X87-NEXT:    movl %ecx, %eax
 ; X86-X87-NEXT:    addl $20, %esp
 ; X86-X87-NEXT:    popl %esi
@@ -4003,13 +2843,13 @@ define i50 @test_signed_i50_f80(x86_fp80 %f) nounwind {
 ; X64-NEXT:    fxch %st(1)
 ; X64-NEXT:    fucomi %st(1), %st
 ; X64-NEXT:    fstp %st(1)
-; X64-NEXT:    jb .LBB36_1
+; X64-NEXT:    jb .LBB26_1
 ; X64-NEXT:  # %bb.2:
 ; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
-; X64-NEXT:    jmp .LBB36_3
-; X64-NEXT:  .LBB36_1:
+; X64-NEXT:    jmp .LBB26_3
+; X64-NEXT:  .LBB26_1:
 ; X64-NEXT:    movabsq $-562949953421312, %rax # imm = 0xFFFE000000000000
-; X64-NEXT:  .LBB36_3:
+; X64-NEXT:  .LBB26_3:
 ; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
 ; X64-NEXT:    fxch %st(1)
 ; X64-NEXT:    fucomi %st(1), %st
@@ -4048,15 +2888,15 @@ define i64 @test_signed_i64_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jb .LBB37_2
+; X86-X87-NEXT:    jb .LBB27_2
 ; X86-X87-NEXT:  # %bb.1:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-X87-NEXT:  .LBB37_2:
+; X86-X87-NEXT:  .LBB27_2:
 ; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x80000000
-; X86-X87-NEXT:    jb .LBB37_4
+; X86-X87-NEXT:    jb .LBB27_4
 ; X86-X87-NEXT:  # %bb.3:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-X87-NEXT:  .LBB37_4:
+; X86-X87-NEXT:  .LBB27_4:
 ; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-X87-NEXT:    fxch %st(1)
 ; X86-X87-NEXT:    fucom %st(1)
@@ -4065,25 +2905,25 @@ define i64 @test_signed_i64_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $2147483647, %esi # imm = 0x7FFFFFFF
-; X86-X87-NEXT:    ja .LBB37_6
+; X86-X87-NEXT:    ja .LBB27_6
 ; X86-X87-NEXT:  # %bb.5:
 ; X86-X87-NEXT:    movl %edi, %esi
-; X86-X87-NEXT:  .LBB37_6:
+; X86-X87-NEXT:  .LBB27_6:
 ; X86-X87-NEXT:    movl $-1, %edi
-; X86-X87-NEXT:    ja .LBB37_8
+; X86-X87-NEXT:    ja .LBB27_8
 ; X86-X87-NEXT:  # %bb.7:
 ; X86-X87-NEXT:    movl %edx, %edi
-; X86-X87-NEXT:  .LBB37_8:
+; X86-X87-NEXT:  .LBB27_8:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; X86-X87-NEXT:    fnstsw %ax
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jp .LBB37_10
+; X86-X87-NEXT:    jp .LBB27_10
 ; X86-X87-NEXT:  # %bb.9:
 ; X86-X87-NEXT:    movl %edi, %ecx
 ; X86-X87-NEXT:    movl %esi, %edx
-; X86-X87-NEXT:  .LBB37_10:
+; X86-X87-NEXT:  .LBB27_10:
 ; X86-X87-NEXT:    movl %ecx, %eax
 ; X86-X87-NEXT:    addl $20, %esp
 ; X86-X87-NEXT:    popl %esi
@@ -4142,13 +2982,13 @@ define i64 @test_signed_i64_f80(x86_fp80 %f) nounwind {
 ; X64-NEXT:    fxch %st(1)
 ; X64-NEXT:    fucomi %st(1), %st
 ; X64-NEXT:    fstp %st(1)
-; X64-NEXT:    jb .LBB37_1
+; X64-NEXT:    jb .LBB27_1
 ; X64-NEXT:  # %bb.2:
 ; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
-; X64-NEXT:    jmp .LBB37_3
-; X64-NEXT:  .LBB37_1:
+; X64-NEXT:    jmp .LBB27_3
+; X64-NEXT:  .LBB27_1:
 ; X64-NEXT:    movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
-; X64-NEXT:  .LBB37_3:
+; X64-NEXT:  .LBB27_3:
 ; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
 ; X64-NEXT:    fxch %st(1)
 ; X64-NEXT:    fucomi %st(1), %st
@@ -4189,22 +3029,22 @@ define i100 @test_signed_i100_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    movb %bh, %ah
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $-8, %ebx
-; X86-X87-NEXT:    jb .LBB38_2
+; X86-X87-NEXT:    jb .LBB28_2
 ; X86-X87-NEXT:  # %bb.1:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
-; X86-X87-NEXT:  .LBB38_2:
+; X86-X87-NEXT:  .LBB28_2:
 ; X86-X87-NEXT:    movl $0, %ecx
 ; X86-X87-NEXT:    movl $0, %ebp
-; X86-X87-NEXT:    jb .LBB38_4
+; X86-X87-NEXT:    jb .LBB28_4
 ; X86-X87-NEXT:  # %bb.3:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
-; X86-X87-NEXT:  .LBB38_4:
+; X86-X87-NEXT:  .LBB28_4:
 ; X86-X87-NEXT:    movl $0, %edi
-; X86-X87-NEXT:    jb .LBB38_6
+; X86-X87-NEXT:    jb .LBB28_6
 ; X86-X87-NEXT:  # %bb.5:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-X87-NEXT:  .LBB38_6:
+; X86-X87-NEXT:  .LBB28_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:    fucom %st(1)
@@ -4215,19 +3055,19 @@ define i100 @test_signed_i100_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    movl $-1, %eax
 ; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
 ; X86-X87-NEXT:    movl $-1, %esi
-; X86-X87-NEXT:    ja .LBB38_8
+; X86-X87-NEXT:    ja .LBB28_8
 ; X86-X87-NEXT:  # %bb.7:
 ; X86-X87-NEXT:    movl %edi, %eax
 ; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
 ; X86-X87-NEXT:    movl %ecx, %esi
-; X86-X87-NEXT:  .LBB38_8:
+; X86-X87-NEXT:  .LBB28_8:
 ; 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 $7, %edi
-; X86-X87-NEXT:    ja .LBB38_10
+; X86-X87-NEXT:    ja .LBB28_10
 ; X86-X87-NEXT:  # %bb.9:
 ; X86-X87-NEXT:    movl %ebx, %edi
-; X86-X87-NEXT:  .LBB38_10:
+; X86-X87-NEXT:  .LBB28_10:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; X86-X87-NEXT:    fnstsw %ax
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
@@ -4235,13 +3075,13 @@ define i100 @test_signed_i100_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    movl $0, %eax
 ; X86-X87-NEXT:    movl $0, %ebp
 ; X86-X87-NEXT:    movl $0, %ebx
-; X86-X87-NEXT:    jp .LBB38_12
+; X86-X87-NEXT:    jp .LBB28_12
 ; X86-X87-NEXT:  # %bb.11:
 ; X86-X87-NEXT:    movl %edi, %edx
 ; X86-X87-NEXT:    movl %esi, %eax
 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
-; X86-X87-NEXT:  .LBB38_12:
+; X86-X87-NEXT:  .LBB28_12:
 ; X86-X87-NEXT:    movl %ebx, 8(%ecx)
 ; X86-X87-NEXT:    movl %ebp, 4(%ecx)
 ; X86-X87-NEXT:    movl %eax, (%ecx)
@@ -4281,13 +3121,13 @@ define i100 @test_signed_i100_f80(x86_fp80 %f) nounwind {
 ; 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:    jb .LBB28_2
 ; X86-SSE-NEXT:  # %bb.1:
 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx
 ; 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:  .LBB28_2:
 ; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-SSE-NEXT:    fxch %st(1)
 ; X86-SSE-NEXT:    fucomi %st(1), %st
@@ -4376,16 +3216,16 @@ define i128 @test_signed_i128_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $0, %eax
 ; X86-X87-NEXT:    movl $0, %ebx
-; X86-X87-NEXT:    jae .LBB39_1
+; X86-X87-NEXT:    jae .LBB29_1
 ; X86-X87-NEXT:  # %bb.2:
 ; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jae .LBB39_3
-; X86-X87-NEXT:  .LBB39_4:
+; X86-X87-NEXT:    jae .LBB29_3
+; X86-X87-NEXT:  .LBB29_4:
 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
-; X86-X87-NEXT:    jb .LBB39_6
-; X86-X87-NEXT:  .LBB39_5:
+; X86-X87-NEXT:    jb .LBB29_6
+; X86-X87-NEXT:  .LBB29_5:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-X87-NEXT:  .LBB39_6:
+; X86-X87-NEXT:  .LBB29_6:
 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
 ; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-X87-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload
@@ -4395,21 +3235,21 @@ define i128 @test_signed_i128_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
 ; X86-X87-NEXT:    sahf
 ; X86-X87-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF
-; X86-X87-NEXT:    ja .LBB39_8
+; X86-X87-NEXT:    ja .LBB29_8
 ; X86-X87-NEXT:  # %bb.7:
 ; X86-X87-NEXT:    movl %ecx, %eax
-; X86-X87-NEXT:  .LBB39_8:
+; X86-X87-NEXT:  .LBB29_8:
 ; 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 $-1, %ebp
 ; X86-X87-NEXT:    movl $-1, %edi
 ; X86-X87-NEXT:    movl $-1, %esi
-; X86-X87-NEXT:    ja .LBB39_10
+; X86-X87-NEXT:    ja .LBB29_10
 ; X86-X87-NEXT:  # %bb.9:
 ; X86-X87-NEXT:    movl %edx, %ebp
 ; X86-X87-NEXT:    movl %ebx, %edi
 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
-; X86-X87-NEXT:  .LBB39_10:
+; X86-X87-NEXT:  .LBB29_10:
 ; X86-X87-NEXT:    fucomp %st(0)
 ; X86-X87-NEXT:    fnstsw %ax
 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
@@ -4417,13 +3257,13 @@ define i128 @test_signed_i128_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    movl $0, %eax
 ; X86-X87-NEXT:    movl $0, %edx
 ; X86-X87-NEXT:    movl $0, %ebx
-; X86-X87-NEXT:    jp .LBB39_12
+; X86-X87-NEXT:    jp .LBB29_12
 ; X86-X87-NEXT:  # %bb.11:
 ; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
 ; X86-X87-NEXT:    movl %edi, %eax
 ; X86-X87-NEXT:    movl %ebp, %edx
 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
-; X86-X87-NEXT:  .LBB39_12:
+; X86-X87-NEXT:  .LBB29_12:
 ; X86-X87-NEXT:    movl %ebx, 12(%ecx)
 ; X86-X87-NEXT:    movl %edx, 8(%ecx)
 ; X86-X87-NEXT:    movl %eax, 4(%ecx)
@@ -4436,16 +3276,16 @@ define i128 @test_signed_i128_f80(x86_fp80 %f) nounwind {
 ; X86-X87-NEXT:    popl %ebx
 ; X86-X87-NEXT:    popl %ebp
 ; X86-X87-NEXT:    retl $4
-; X86-X87-NEXT:  .LBB39_1:
+; X86-X87-NEXT:  .LBB29_1:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
 ; X86-X87-NEXT:    movl $0, %edx
-; X86-X87-NEXT:    jb .LBB39_4
-; X86-X87-NEXT:  .LBB39_3:
+; X86-X87-NEXT:    jb .LBB29_4
+; X86-X87-NEXT:  .LBB29_3:
 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
-; X86-X87-NEXT:    jae .LBB39_5
-; X86-X87-NEXT:    jmp .LBB39_6
+; X86-X87-NEXT:    jae .LBB29_5
+; X86-X87-NEXT:    jmp .LBB29_6
 ;
 ; X86-SSE-LABEL: test_signed_i128_f80:
 ; X86-SSE:       # %bb.0:


        


More information about the llvm-commits mailing list