brintos

brintos / llvm-project-archived public Read only

0
0
Text · 143.8 KiB · 47dc3ca Raw
4184 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-linux | FileCheck %s --check-prefix=X86-X873; RUN: llc < %s -mtriple=i686-linux -mattr=+sse2 | FileCheck %s --check-prefix=X86-SSE4; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X645 6;7; 32-bit float to unsigned integer8;9 10declare   i1 @llvm.fptoui.sat.i1.f32  (float)11declare   i8 @llvm.fptoui.sat.i8.f32  (float)12declare  i13 @llvm.fptoui.sat.i13.f32 (float)13declare  i16 @llvm.fptoui.sat.i16.f32 (float)14declare  i19 @llvm.fptoui.sat.i19.f32 (float)15declare  i32 @llvm.fptoui.sat.i32.f32 (float)16declare  i50 @llvm.fptoui.sat.i50.f32 (float)17declare  i64 @llvm.fptoui.sat.i64.f32 (float)18declare i100 @llvm.fptoui.sat.i100.f32(float)19declare i128 @llvm.fptoui.sat.i128.f32(float)20 21define i1 @test_unsigned_i1_f32(float %f) nounwind {22; X86-X87-LABEL: test_unsigned_i1_f32:23; X86-X87:       # %bb.0:24; X86-X87-NEXT:    subl $8, %esp25; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)26; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)27; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax28; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC0029; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)30; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)31; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)32; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)33; X86-X87-NEXT:    fldz34; X86-X87-NEXT:    fxch %st(1)35; X86-X87-NEXT:    fucom %st(1)36; X86-X87-NEXT:    fstp %st(1)37; X86-X87-NEXT:    fnstsw %ax38; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax39; X86-X87-NEXT:    sahf40; X86-X87-NEXT:    jb .LBB0_141; X86-X87-NEXT:  # %bb.2:42; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx43; X86-X87-NEXT:    jmp .LBB0_344; X86-X87-NEXT:  .LBB0_1:45; X86-X87-NEXT:    xorl %ecx, %ecx46; X86-X87-NEXT:  .LBB0_3:47; X86-X87-NEXT:    fld148; X86-X87-NEXT:    fxch %st(1)49; X86-X87-NEXT:    fucompp50; X86-X87-NEXT:    fnstsw %ax51; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax52; X86-X87-NEXT:    sahf53; X86-X87-NEXT:    movb $1, %al54; X86-X87-NEXT:    ja .LBB0_555; X86-X87-NEXT:  # %bb.4:56; X86-X87-NEXT:    movl %ecx, %eax57; X86-X87-NEXT:  .LBB0_5:58; X86-X87-NEXT:    addl $8, %esp59; X86-X87-NEXT:    retl60;61; X86-SSE-LABEL: test_unsigned_i1_f32:62; X86-SSE:       # %bb.0:63; X86-SSE-NEXT:    xorps %xmm0, %xmm064; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm065; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]66; X86-SSE-NEXT:    minss %xmm0, %xmm167; X86-SSE-NEXT:    cvttss2si %xmm1, %eax68; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax69; X86-SSE-NEXT:    retl70;71; X64-LABEL: test_unsigned_i1_f32:72; X64:       # %bb.0:73; X64-NEXT:    xorps %xmm1, %xmm174; X64-NEXT:    maxss %xmm0, %xmm175; X64-NEXT:    movss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]76; X64-NEXT:    minss %xmm1, %xmm077; X64-NEXT:    cvttss2si %xmm0, %eax78; X64-NEXT:    # kill: def $al killed $al killed $eax79; X64-NEXT:    retq80    %x = call i1 @llvm.fptoui.sat.i1.f32(float %f)81    ret i1 %x82}83 84define i8 @test_unsigned_i8_f32(float %f) nounwind {85; X86-X87-LABEL: test_unsigned_i8_f32:86; X86-X87:       # %bb.0:87; X86-X87-NEXT:    subl $8, %esp88; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)89; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)90; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax91; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC0092; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)93; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)94; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)95; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)96; X86-X87-NEXT:    fldz97; X86-X87-NEXT:    fxch %st(1)98; X86-X87-NEXT:    fucom %st(1)99; X86-X87-NEXT:    fstp %st(1)100; X86-X87-NEXT:    fnstsw %ax101; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax102; X86-X87-NEXT:    sahf103; X86-X87-NEXT:    jb .LBB1_1104; X86-X87-NEXT:  # %bb.2:105; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx106; X86-X87-NEXT:    jmp .LBB1_3107; X86-X87-NEXT:  .LBB1_1:108; X86-X87-NEXT:    xorl %ecx, %ecx109; X86-X87-NEXT:  .LBB1_3:110; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}111; X86-X87-NEXT:    fxch %st(1)112; X86-X87-NEXT:    fucompp113; X86-X87-NEXT:    fnstsw %ax114; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax115; X86-X87-NEXT:    sahf116; X86-X87-NEXT:    movb $-1, %al117; X86-X87-NEXT:    ja .LBB1_5118; X86-X87-NEXT:  # %bb.4:119; X86-X87-NEXT:    movl %ecx, %eax120; X86-X87-NEXT:  .LBB1_5:121; X86-X87-NEXT:    addl $8, %esp122; X86-X87-NEXT:    retl123;124; X86-SSE-LABEL: test_unsigned_i8_f32:125; X86-SSE:       # %bb.0:126; X86-SSE-NEXT:    xorps %xmm0, %xmm0127; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0128; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]129; X86-SSE-NEXT:    minss %xmm0, %xmm1130; X86-SSE-NEXT:    cvttss2si %xmm1, %eax131; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax132; X86-SSE-NEXT:    retl133;134; X64-LABEL: test_unsigned_i8_f32:135; X64:       # %bb.0:136; X64-NEXT:    xorps %xmm1, %xmm1137; X64-NEXT:    maxss %xmm0, %xmm1138; X64-NEXT:    movss {{.*#+}} xmm0 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]139; X64-NEXT:    minss %xmm1, %xmm0140; X64-NEXT:    cvttss2si %xmm0, %eax141; X64-NEXT:    # kill: def $al killed $al killed $eax142; X64-NEXT:    retq143    %x = call i8 @llvm.fptoui.sat.i8.f32(float %f)144    ret i8 %x145}146 147define i13 @test_unsigned_i13_f32(float %f) nounwind {148; X86-X87-LABEL: test_unsigned_i13_f32:149; X86-X87:       # %bb.0:150; X86-X87-NEXT:    subl $8, %esp151; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)152; X86-X87-NEXT:    fnstcw (%esp)153; X86-X87-NEXT:    movzwl (%esp), %eax154; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00155; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)156; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)157; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)158; X86-X87-NEXT:    fldcw (%esp)159; X86-X87-NEXT:    fldz160; X86-X87-NEXT:    fxch %st(1)161; X86-X87-NEXT:    fucom %st(1)162; X86-X87-NEXT:    fstp %st(1)163; X86-X87-NEXT:    fnstsw %ax164; X86-X87-NEXT:    xorl %ecx, %ecx165; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax166; X86-X87-NEXT:    sahf167; X86-X87-NEXT:    jb .LBB2_2168; X86-X87-NEXT:  # %bb.1:169; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx170; X86-X87-NEXT:  .LBB2_2:171; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}172; X86-X87-NEXT:    fxch %st(1)173; X86-X87-NEXT:    fucompp174; X86-X87-NEXT:    fnstsw %ax175; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax176; X86-X87-NEXT:    sahf177; X86-X87-NEXT:    movl $8191, %eax # imm = 0x1FFF178; X86-X87-NEXT:    ja .LBB2_4179; X86-X87-NEXT:  # %bb.3:180; X86-X87-NEXT:    movl %ecx, %eax181; X86-X87-NEXT:  .LBB2_4:182; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax183; X86-X87-NEXT:    addl $8, %esp184; X86-X87-NEXT:    retl185;186; X86-SSE-LABEL: test_unsigned_i13_f32:187; X86-SSE:       # %bb.0:188; X86-SSE-NEXT:    xorps %xmm0, %xmm0189; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0190; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [8.191E+3,0.0E+0,0.0E+0,0.0E+0]191; X86-SSE-NEXT:    minss %xmm0, %xmm1192; X86-SSE-NEXT:    cvttss2si %xmm1, %eax193; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax194; X86-SSE-NEXT:    retl195;196; X64-LABEL: test_unsigned_i13_f32:197; X64:       # %bb.0:198; X64-NEXT:    xorps %xmm1, %xmm1199; X64-NEXT:    maxss %xmm0, %xmm1200; X64-NEXT:    movss {{.*#+}} xmm0 = [8.191E+3,0.0E+0,0.0E+0,0.0E+0]201; X64-NEXT:    minss %xmm1, %xmm0202; X64-NEXT:    cvttss2si %xmm0, %eax203; X64-NEXT:    # kill: def $ax killed $ax killed $eax204; X64-NEXT:    retq205    %x = call i13 @llvm.fptoui.sat.i13.f32(float %f)206    ret i13 %x207}208 209define i16 @test_unsigned_i16_f32(float %f) nounwind {210; X86-X87-LABEL: test_unsigned_i16_f32:211; X86-X87:       # %bb.0:212; X86-X87-NEXT:    subl $8, %esp213; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)214; X86-X87-NEXT:    fnstcw (%esp)215; X86-X87-NEXT:    movzwl (%esp), %eax216; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00217; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)218; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)219; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)220; X86-X87-NEXT:    fldcw (%esp)221; X86-X87-NEXT:    fldz222; X86-X87-NEXT:    fxch %st(1)223; X86-X87-NEXT:    fucom %st(1)224; X86-X87-NEXT:    fstp %st(1)225; X86-X87-NEXT:    fnstsw %ax226; X86-X87-NEXT:    xorl %ecx, %ecx227; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax228; X86-X87-NEXT:    sahf229; X86-X87-NEXT:    jb .LBB3_2230; X86-X87-NEXT:  # %bb.1:231; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx232; X86-X87-NEXT:  .LBB3_2:233; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}234; X86-X87-NEXT:    fxch %st(1)235; X86-X87-NEXT:    fucompp236; X86-X87-NEXT:    fnstsw %ax237; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax238; X86-X87-NEXT:    sahf239; X86-X87-NEXT:    movl $65535, %eax # imm = 0xFFFF240; X86-X87-NEXT:    ja .LBB3_4241; X86-X87-NEXT:  # %bb.3:242; X86-X87-NEXT:    movl %ecx, %eax243; X86-X87-NEXT:  .LBB3_4:244; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax245; X86-X87-NEXT:    addl $8, %esp246; X86-X87-NEXT:    retl247;248; X86-SSE-LABEL: test_unsigned_i16_f32:249; X86-SSE:       # %bb.0:250; X86-SSE-NEXT:    xorps %xmm0, %xmm0251; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0252; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]253; X86-SSE-NEXT:    minss %xmm0, %xmm1254; X86-SSE-NEXT:    cvttss2si %xmm1, %eax255; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax256; X86-SSE-NEXT:    retl257;258; X64-LABEL: test_unsigned_i16_f32:259; X64:       # %bb.0:260; X64-NEXT:    xorps %xmm1, %xmm1261; X64-NEXT:    maxss %xmm0, %xmm1262; X64-NEXT:    movss {{.*#+}} xmm0 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]263; X64-NEXT:    minss %xmm1, %xmm0264; X64-NEXT:    cvttss2si %xmm0, %eax265; X64-NEXT:    # kill: def $ax killed $ax killed $eax266; X64-NEXT:    retq267    %x = call i16 @llvm.fptoui.sat.i16.f32(float %f)268    ret i16 %x269}270 271define i19 @test_unsigned_i19_f32(float %f) nounwind {272; X86-X87-LABEL: test_unsigned_i19_f32:273; X86-X87:       # %bb.0:274; X86-X87-NEXT:    subl $20, %esp275; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)276; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)277; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax278; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00279; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)280; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)281; X86-X87-NEXT:    fld %st(0)282; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)283; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)284; X86-X87-NEXT:    fldz285; X86-X87-NEXT:    fxch %st(1)286; X86-X87-NEXT:    fucom %st(1)287; X86-X87-NEXT:    fstp %st(1)288; X86-X87-NEXT:    fnstsw %ax289; X86-X87-NEXT:    xorl %ecx, %ecx290; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax291; X86-X87-NEXT:    sahf292; X86-X87-NEXT:    jb .LBB4_2293; X86-X87-NEXT:  # %bb.1:294; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx295; X86-X87-NEXT:  .LBB4_2:296; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}297; X86-X87-NEXT:    fxch %st(1)298; X86-X87-NEXT:    fucompp299; X86-X87-NEXT:    fnstsw %ax300; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax301; X86-X87-NEXT:    sahf302; X86-X87-NEXT:    movl $524287, %eax # imm = 0x7FFFF303; X86-X87-NEXT:    ja .LBB4_4304; X86-X87-NEXT:  # %bb.3:305; X86-X87-NEXT:    movl %ecx, %eax306; X86-X87-NEXT:  .LBB4_4:307; X86-X87-NEXT:    addl $20, %esp308; X86-X87-NEXT:    retl309;310; X86-SSE-LABEL: test_unsigned_i19_f32:311; X86-SSE:       # %bb.0:312; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero313; X86-SSE-NEXT:    xorps %xmm1, %xmm1314; X86-SSE-NEXT:    maxss %xmm1, %xmm0315; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0316; X86-SSE-NEXT:    cvttss2si %xmm0, %eax317; X86-SSE-NEXT:    retl318;319; X64-LABEL: test_unsigned_i19_f32:320; X64:       # %bb.0:321; X64-NEXT:    xorps %xmm1, %xmm1322; X64-NEXT:    maxss %xmm1, %xmm0323; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0324; X64-NEXT:    cvttss2si %xmm0, %eax325; X64-NEXT:    retq326    %x = call i19 @llvm.fptoui.sat.i19.f32(float %f)327    ret i19 %x328}329 330define i32 @test_unsigned_i32_f32(float %f) nounwind {331; X86-X87-LABEL: test_unsigned_i32_f32:332; X86-X87:       # %bb.0:333; X86-X87-NEXT:    subl $20, %esp334; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)335; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)336; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax337; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00338; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)339; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)340; X86-X87-NEXT:    fld %st(0)341; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)342; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)343; X86-X87-NEXT:    fldz344; X86-X87-NEXT:    fxch %st(1)345; X86-X87-NEXT:    fucom %st(1)346; X86-X87-NEXT:    fstp %st(1)347; X86-X87-NEXT:    fnstsw %ax348; X86-X87-NEXT:    xorl %ecx, %ecx349; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax350; X86-X87-NEXT:    sahf351; X86-X87-NEXT:    jb .LBB5_2352; X86-X87-NEXT:  # %bb.1:353; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx354; X86-X87-NEXT:  .LBB5_2:355; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}356; X86-X87-NEXT:    fxch %st(1)357; X86-X87-NEXT:    fucompp358; X86-X87-NEXT:    fnstsw %ax359; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax360; X86-X87-NEXT:    sahf361; X86-X87-NEXT:    movl $-1, %eax362; X86-X87-NEXT:    ja .LBB5_4363; X86-X87-NEXT:  # %bb.3:364; X86-X87-NEXT:    movl %ecx, %eax365; X86-X87-NEXT:  .LBB5_4:366; X86-X87-NEXT:    addl $20, %esp367; X86-X87-NEXT:    retl368;369; X86-SSE-LABEL: test_unsigned_i32_f32:370; X86-SSE:       # %bb.0:371; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero372; X86-SSE-NEXT:    cvttss2si %xmm0, %eax373; X86-SSE-NEXT:    movl %eax, %ecx374; X86-SSE-NEXT:    sarl $31, %ecx375; X86-SSE-NEXT:    movaps %xmm0, %xmm1376; X86-SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1377; X86-SSE-NEXT:    cvttss2si %xmm1, %edx378; X86-SSE-NEXT:    andl %ecx, %edx379; X86-SSE-NEXT:    orl %eax, %edx380; X86-SSE-NEXT:    xorl %ecx, %ecx381; X86-SSE-NEXT:    xorps %xmm1, %xmm1382; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0383; X86-SSE-NEXT:    cmovael %edx, %ecx384; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0385; X86-SSE-NEXT:    movl $-1, %eax386; X86-SSE-NEXT:    cmovbel %ecx, %eax387; X86-SSE-NEXT:    retl388;389; X64-LABEL: test_unsigned_i32_f32:390; X64:       # %bb.0:391; X64-NEXT:    cvttss2si %xmm0, %rax392; X64-NEXT:    xorl %ecx, %ecx393; X64-NEXT:    xorps %xmm1, %xmm1394; X64-NEXT:    ucomiss %xmm1, %xmm0395; X64-NEXT:    cmovael %eax, %ecx396; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0397; X64-NEXT:    movl $-1, %eax398; X64-NEXT:    cmovbel %ecx, %eax399; X64-NEXT:    retq400    %x = call i32 @llvm.fptoui.sat.i32.f32(float %f)401    ret i32 %x402}403 404define i50 @test_unsigned_i50_f32(float %f) nounwind {405; X86-X87-LABEL: test_unsigned_i50_f32:406; X86-X87:       # %bb.0:407; X86-X87-NEXT:    pushl %esi408; X86-X87-NEXT:    subl $16, %esp409; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)410; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}411; X86-X87-NEXT:    fucom %st(1)412; X86-X87-NEXT:    fnstsw %ax413; X86-X87-NEXT:    xorl %ecx, %ecx414; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax415; X86-X87-NEXT:    sahf416; X86-X87-NEXT:    setbe %al417; X86-X87-NEXT:    fldz418; X86-X87-NEXT:    jbe .LBB6_2419; X86-X87-NEXT:  # %bb.1:420; X86-X87-NEXT:    fstp %st(1)421; X86-X87-NEXT:    fld %st(0)422; X86-X87-NEXT:    fxch %st(1)423; X86-X87-NEXT:  .LBB6_2:424; X86-X87-NEXT:    fxch %st(1)425; X86-X87-NEXT:    fsubr %st(2), %st426; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)427; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx428; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00429; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)430; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)431; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)432; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)433; X86-X87-NEXT:    movb %al, %cl434; X86-X87-NEXT:    shll $31, %ecx435; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx436; X86-X87-NEXT:    fxch %st(1)437; X86-X87-NEXT:    fucom %st(1)438; X86-X87-NEXT:    fstp %st(1)439; X86-X87-NEXT:    fnstsw %ax440; X86-X87-NEXT:    xorl %edx, %edx441; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax442; X86-X87-NEXT:    sahf443; X86-X87-NEXT:    movl $0, %esi444; X86-X87-NEXT:    jb .LBB6_4445; X86-X87-NEXT:  # %bb.3:446; X86-X87-NEXT:    movl %ecx, %esi447; X86-X87-NEXT:  .LBB6_4:448; X86-X87-NEXT:    jb .LBB6_6449; X86-X87-NEXT:  # %bb.5:450; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx451; X86-X87-NEXT:  .LBB6_6:452; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}453; X86-X87-NEXT:    fxch %st(1)454; X86-X87-NEXT:    fucompp455; X86-X87-NEXT:    fnstsw %ax456; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax457; X86-X87-NEXT:    sahf458; X86-X87-NEXT:    movl $-1, %eax459; X86-X87-NEXT:    ja .LBB6_8460; X86-X87-NEXT:  # %bb.7:461; X86-X87-NEXT:    movl %edx, %eax462; X86-X87-NEXT:  .LBB6_8:463; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF464; X86-X87-NEXT:    ja .LBB6_10465; X86-X87-NEXT:  # %bb.9:466; X86-X87-NEXT:    movl %esi, %edx467; X86-X87-NEXT:  .LBB6_10:468; X86-X87-NEXT:    addl $16, %esp469; X86-X87-NEXT:    popl %esi470; X86-X87-NEXT:    retl471;472; X86-SSE-LABEL: test_unsigned_i50_f32:473; X86-SSE:       # %bb.0:474; X86-SSE-NEXT:    pushl %esi475; X86-SSE-NEXT:    subl $16, %esp476; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero477; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]478; X86-SSE-NEXT:    ucomiss %xmm0, %xmm2479; X86-SSE-NEXT:    xorps %xmm1, %xmm1480; X86-SSE-NEXT:    jbe .LBB6_2481; X86-SSE-NEXT:  # %bb.1:482; X86-SSE-NEXT:    xorps %xmm2, %xmm2483; X86-SSE-NEXT:  .LBB6_2:484; X86-SSE-NEXT:    movaps %xmm0, %xmm3485; X86-SSE-NEXT:    subss %xmm2, %xmm3486; X86-SSE-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)487; X86-SSE-NEXT:    setbe %cl488; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)489; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)490; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax491; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00492; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)493; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)494; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)495; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)496; X86-SSE-NEXT:    xorl %eax, %eax497; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0498; X86-SSE-NEXT:    movl $0, %esi499; X86-SSE-NEXT:    jb .LBB6_4500; X86-SSE-NEXT:  # %bb.3:501; X86-SSE-NEXT:    movzbl %cl, %eax502; X86-SSE-NEXT:    shll $31, %eax503; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax504; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi505; X86-SSE-NEXT:  .LBB6_4:506; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0507; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF508; X86-SSE-NEXT:    cmovbel %eax, %edx509; X86-SSE-NEXT:    movl $-1, %eax510; X86-SSE-NEXT:    cmovbel %esi, %eax511; X86-SSE-NEXT:    addl $16, %esp512; X86-SSE-NEXT:    popl %esi513; X86-SSE-NEXT:    retl514;515; X64-LABEL: test_unsigned_i50_f32:516; X64:       # %bb.0:517; X64-NEXT:    cvttss2si %xmm0, %rax518; X64-NEXT:    xorl %ecx, %ecx519; X64-NEXT:    xorps %xmm1, %xmm1520; X64-NEXT:    ucomiss %xmm1, %xmm0521; X64-NEXT:    cmovaeq %rax, %rcx522; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0523; X64-NEXT:    movabsq $1125899906842623, %rax # imm = 0x3FFFFFFFFFFFF524; X64-NEXT:    cmovbeq %rcx, %rax525; X64-NEXT:    retq526    %x = call i50 @llvm.fptoui.sat.i50.f32(float %f)527    ret i50 %x528}529 530define i64 @test_unsigned_i64_f32(float %f) nounwind {531; X86-X87-LABEL: test_unsigned_i64_f32:532; X86-X87:       # %bb.0:533; X86-X87-NEXT:    pushl %edi534; X86-X87-NEXT:    pushl %esi535; X86-X87-NEXT:    subl $20, %esp536; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)537; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}538; X86-X87-NEXT:    fucom %st(1)539; X86-X87-NEXT:    fnstsw %ax540; X86-X87-NEXT:    xorl %ecx, %ecx541; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax542; X86-X87-NEXT:    sahf543; X86-X87-NEXT:    setbe %al544; X86-X87-NEXT:    fldz545; X86-X87-NEXT:    jbe .LBB7_2546; X86-X87-NEXT:  # %bb.1:547; X86-X87-NEXT:    fstp %st(1)548; X86-X87-NEXT:    fld %st(0)549; X86-X87-NEXT:    fxch %st(1)550; X86-X87-NEXT:  .LBB7_2:551; X86-X87-NEXT:    fxch %st(1)552; X86-X87-NEXT:    fsubr %st(2), %st553; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)554; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx555; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC00556; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)557; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)558; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)559; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)560; X86-X87-NEXT:    movb %al, %cl561; X86-X87-NEXT:    shll $31, %ecx562; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx563; X86-X87-NEXT:    fxch %st(1)564; X86-X87-NEXT:    fucom %st(1)565; X86-X87-NEXT:    fstp %st(1)566; X86-X87-NEXT:    fnstsw %ax567; X86-X87-NEXT:    xorl %esi, %esi568; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax569; X86-X87-NEXT:    sahf570; X86-X87-NEXT:    movl $0, %edi571; X86-X87-NEXT:    jb .LBB7_4572; X86-X87-NEXT:  # %bb.3:573; X86-X87-NEXT:    movl %ecx, %edi574; X86-X87-NEXT:  .LBB7_4:575; X86-X87-NEXT:    jb .LBB7_6576; X86-X87-NEXT:  # %bb.5:577; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi578; X86-X87-NEXT:  .LBB7_6:579; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}580; X86-X87-NEXT:    fxch %st(1)581; X86-X87-NEXT:    fucompp582; X86-X87-NEXT:    fnstsw %ax583; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax584; X86-X87-NEXT:    sahf585; X86-X87-NEXT:    movl $-1, %eax586; X86-X87-NEXT:    movl $-1, %edx587; X86-X87-NEXT:    ja .LBB7_8588; X86-X87-NEXT:  # %bb.7:589; X86-X87-NEXT:    movl %esi, %eax590; X86-X87-NEXT:    movl %edi, %edx591; X86-X87-NEXT:  .LBB7_8:592; X86-X87-NEXT:    addl $20, %esp593; X86-X87-NEXT:    popl %esi594; X86-X87-NEXT:    popl %edi595; X86-X87-NEXT:    retl596;597; X86-SSE-LABEL: test_unsigned_i64_f32:598; X86-SSE:       # %bb.0:599; X86-SSE-NEXT:    subl $20, %esp600; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero601; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]602; X86-SSE-NEXT:    ucomiss %xmm0, %xmm2603; X86-SSE-NEXT:    xorps %xmm1, %xmm1604; X86-SSE-NEXT:    jbe .LBB7_2605; X86-SSE-NEXT:  # %bb.1:606; X86-SSE-NEXT:    xorps %xmm2, %xmm2607; X86-SSE-NEXT:  .LBB7_2:608; X86-SSE-NEXT:    movaps %xmm0, %xmm3609; X86-SSE-NEXT:    subss %xmm2, %xmm3610; X86-SSE-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)611; X86-SSE-NEXT:    setbe %cl612; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)613; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)614; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax615; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00616; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)617; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)618; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)619; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)620; X86-SSE-NEXT:    xorl %edx, %edx621; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0622; X86-SSE-NEXT:    movl $0, %eax623; X86-SSE-NEXT:    jb .LBB7_4624; X86-SSE-NEXT:  # %bb.3:625; X86-SSE-NEXT:    movzbl %cl, %edx626; X86-SSE-NEXT:    shll $31, %edx627; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %edx628; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax629; X86-SSE-NEXT:  .LBB7_4:630; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0631; X86-SSE-NEXT:    movl $-1, %ecx632; X86-SSE-NEXT:    cmoval %ecx, %edx633; X86-SSE-NEXT:    cmoval %ecx, %eax634; X86-SSE-NEXT:    addl $20, %esp635; X86-SSE-NEXT:    retl636;637; X64-LABEL: test_unsigned_i64_f32:638; X64:       # %bb.0:639; X64-NEXT:    cvttss2si %xmm0, %rax640; X64-NEXT:    movq %rax, %rcx641; X64-NEXT:    sarq $63, %rcx642; X64-NEXT:    movaps %xmm0, %xmm1643; X64-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1644; X64-NEXT:    cvttss2si %xmm1, %rdx645; X64-NEXT:    andq %rcx, %rdx646; X64-NEXT:    orq %rax, %rdx647; X64-NEXT:    xorl %ecx, %ecx648; X64-NEXT:    xorps %xmm1, %xmm1649; X64-NEXT:    ucomiss %xmm1, %xmm0650; X64-NEXT:    cmovaeq %rdx, %rcx651; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0652; X64-NEXT:    movq $-1, %rax653; X64-NEXT:    cmovbeq %rcx, %rax654; X64-NEXT:    retq655    %x = call i64 @llvm.fptoui.sat.i64.f32(float %f)656    ret i64 %x657}658 659define i100 @test_unsigned_i100_f32(float %f) nounwind {660; X86-X87-LABEL: test_unsigned_i100_f32:661; X86-X87:       # %bb.0:662; X86-X87-NEXT:    pushl %ebp663; X86-X87-NEXT:    pushl %ebx664; X86-X87-NEXT:    pushl %edi665; X86-X87-NEXT:    pushl %esi666; X86-X87-NEXT:    subl $44, %esp667; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)668; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)669; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax670; X86-X87-NEXT:    movl %eax, (%esp)671; X86-X87-NEXT:    fldz672; X86-X87-NEXT:    fxch %st(1)673; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill674; X86-X87-NEXT:    fucompp675; X86-X87-NEXT:    fnstsw %ax676; X86-X87-NEXT:    movl %eax, %ebx677; X86-X87-NEXT:    calll __fixunssfti678; X86-X87-NEXT:    subl $4, %esp679; X86-X87-NEXT:    xorl %edi, %edi680; X86-X87-NEXT:    movb %bh, %ah681; X86-X87-NEXT:    sahf682; X86-X87-NEXT:    movl $0, %eax683; X86-X87-NEXT:    jb .LBB8_2684; X86-X87-NEXT:  # %bb.1:685; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax686; X86-X87-NEXT:  .LBB8_2:687; X86-X87-NEXT:    movl $0, %esi688; X86-X87-NEXT:    movl $0, %ebx689; X86-X87-NEXT:    jb .LBB8_4690; X86-X87-NEXT:  # %bb.3:691; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx692; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi693; X86-X87-NEXT:  .LBB8_4:694; X86-X87-NEXT:    jb .LBB8_6695; X86-X87-NEXT:  # %bb.5:696; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi697; X86-X87-NEXT:  .LBB8_6:698; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill699; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx700; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}701; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload702; X86-X87-NEXT:    fucompp703; X86-X87-NEXT:    fnstsw %ax704; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax705; X86-X87-NEXT:    sahf706; X86-X87-NEXT:    movl $15, %eax707; X86-X87-NEXT:    ja .LBB8_8708; X86-X87-NEXT:  # %bb.7:709; X86-X87-NEXT:    movl %edi, %eax710; X86-X87-NEXT:  .LBB8_8:711; X86-X87-NEXT:    movl $-1, %edi712; X86-X87-NEXT:    movl $-1, %ebp713; X86-X87-NEXT:    movl $-1, %edx714; X86-X87-NEXT:    ja .LBB8_10715; X86-X87-NEXT:  # %bb.9:716; X86-X87-NEXT:    movl %ebx, %edi717; X86-X87-NEXT:    movl %esi, %ebp718; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload719; X86-X87-NEXT:  .LBB8_10:720; X86-X87-NEXT:    movl %edx, 8(%ecx)721; X86-X87-NEXT:    movl %ebp, 4(%ecx)722; X86-X87-NEXT:    movl %edi, (%ecx)723; X86-X87-NEXT:    andl $15, %eax724; X86-X87-NEXT:    movb %al, 12(%ecx)725; X86-X87-NEXT:    movl %ecx, %eax726; X86-X87-NEXT:    addl $44, %esp727; X86-X87-NEXT:    popl %esi728; X86-X87-NEXT:    popl %edi729; X86-X87-NEXT:    popl %ebx730; X86-X87-NEXT:    popl %ebp731; X86-X87-NEXT:    retl $4732;733; X86-SSE-LABEL: test_unsigned_i100_f32:734; X86-SSE:       # %bb.0:735; X86-SSE-NEXT:    pushl %ebx736; X86-SSE-NEXT:    pushl %edi737; X86-SSE-NEXT:    pushl %esi738; X86-SSE-NEXT:    subl $32, %esp739; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi740; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero741; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)742; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax743; X86-SSE-NEXT:    movl %eax, (%esp)744; X86-SSE-NEXT:    calll __fixunssfti745; X86-SSE-NEXT:    subl $4, %esp746; X86-SSE-NEXT:    xorl %eax, %eax747; X86-SSE-NEXT:    xorps %xmm0, %xmm0748; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero749; X86-SSE-NEXT:    ucomiss %xmm0, %xmm1750; X86-SSE-NEXT:    movaps %xmm1, %xmm0751; X86-SSE-NEXT:    movl $0, %ecx752; X86-SSE-NEXT:    movl $0, %edx753; X86-SSE-NEXT:    movl $0, %edi754; X86-SSE-NEXT:    jb .LBB8_2755; X86-SSE-NEXT:  # %bb.1:756; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax757; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx758; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx759; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi760; X86-SSE-NEXT:  .LBB8_2:761; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0762; X86-SSE-NEXT:    movl $15, %ebx763; X86-SSE-NEXT:    cmovbel %edi, %ebx764; X86-SSE-NEXT:    movl $-1, %edi765; X86-SSE-NEXT:    cmoval %edi, %edx766; X86-SSE-NEXT:    cmoval %edi, %ecx767; X86-SSE-NEXT:    cmoval %edi, %eax768; X86-SSE-NEXT:    movl %eax, 8(%esi)769; X86-SSE-NEXT:    movl %ecx, 4(%esi)770; X86-SSE-NEXT:    movl %edx, (%esi)771; X86-SSE-NEXT:    andl $15, %ebx772; X86-SSE-NEXT:    movb %bl, 12(%esi)773; X86-SSE-NEXT:    movl %esi, %eax774; X86-SSE-NEXT:    addl $32, %esp775; X86-SSE-NEXT:    popl %esi776; X86-SSE-NEXT:    popl %edi777; X86-SSE-NEXT:    popl %ebx778; X86-SSE-NEXT:    retl $4779;780; X64-LABEL: test_unsigned_i100_f32:781; X64:       # %bb.0:782; X64-NEXT:    pushq %rax783; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill784; X64-NEXT:    callq __fixunssfti@PLT785; X64-NEXT:    xorl %ecx, %ecx786; X64-NEXT:    xorps %xmm0, %xmm0787; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload788; X64-NEXT:    # xmm1 = mem[0],zero,zero,zero789; X64-NEXT:    ucomiss %xmm0, %xmm1790; X64-NEXT:    cmovbq %rcx, %rdx791; X64-NEXT:    cmovbq %rcx, %rax792; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1793; X64-NEXT:    movq $-1, %rcx794; X64-NEXT:    cmovaq %rcx, %rax795; X64-NEXT:    movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF796; X64-NEXT:    cmovaq %rcx, %rdx797; X64-NEXT:    popq %rcx798; X64-NEXT:    retq799    %x = call i100 @llvm.fptoui.sat.i100.f32(float %f)800    ret i100 %x801}802 803define i128 @test_unsigned_i128_f32(float %f) nounwind {804; X86-X87-LABEL: test_unsigned_i128_f32:805; X86-X87:       # %bb.0:806; X86-X87-NEXT:    pushl %ebp807; X86-X87-NEXT:    pushl %ebx808; X86-X87-NEXT:    pushl %edi809; X86-X87-NEXT:    pushl %esi810; X86-X87-NEXT:    subl $60, %esp811; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)812; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)813; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax814; X86-X87-NEXT:    movl %eax, (%esp)815; X86-X87-NEXT:    fldz816; X86-X87-NEXT:    fxch %st(1)817; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill818; X86-X87-NEXT:    fucompp819; X86-X87-NEXT:    fnstsw %ax820; X86-X87-NEXT:    movl %eax, %ebx821; X86-X87-NEXT:    calll __fixunssfti822; X86-X87-NEXT:    subl $4, %esp823; X86-X87-NEXT:    xorl %edx, %edx824; X86-X87-NEXT:    movb %bh, %ah825; X86-X87-NEXT:    sahf826; X86-X87-NEXT:    movl $0, %eax827; X86-X87-NEXT:    jb .LBB9_2828; X86-X87-NEXT:  # %bb.1:829; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax830; X86-X87-NEXT:  .LBB9_2:831; X86-X87-NEXT:    movl $0, %ecx832; X86-X87-NEXT:    jb .LBB9_4833; X86-X87-NEXT:  # %bb.3:834; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx835; X86-X87-NEXT:  .LBB9_4:836; X86-X87-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill837; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill838; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx839; X86-X87-NEXT:    movl $0, %ebx840; X86-X87-NEXT:    jb .LBB9_6841; X86-X87-NEXT:  # %bb.5:842; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx843; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx844; X86-X87-NEXT:  .LBB9_6:845; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}846; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload847; X86-X87-NEXT:    fucompp848; X86-X87-NEXT:    fnstsw %ax849; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax850; X86-X87-NEXT:    sahf851; X86-X87-NEXT:    movl $-1, %eax852; X86-X87-NEXT:    movl $-1, %ebp853; X86-X87-NEXT:    movl $-1, %edi854; X86-X87-NEXT:    movl $-1, %esi855; X86-X87-NEXT:    ja .LBB9_8856; X86-X87-NEXT:  # %bb.7:857; X86-X87-NEXT:    movl %ebx, %eax858; X86-X87-NEXT:    movl %edx, %ebp859; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload860; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload861; X86-X87-NEXT:  .LBB9_8:862; X86-X87-NEXT:    movl %esi, 12(%ecx)863; X86-X87-NEXT:    movl %edi, 8(%ecx)864; X86-X87-NEXT:    movl %ebp, 4(%ecx)865; X86-X87-NEXT:    movl %eax, (%ecx)866; X86-X87-NEXT:    movl %ecx, %eax867; X86-X87-NEXT:    addl $60, %esp868; X86-X87-NEXT:    popl %esi869; X86-X87-NEXT:    popl %edi870; X86-X87-NEXT:    popl %ebx871; X86-X87-NEXT:    popl %ebp872; X86-X87-NEXT:    retl $4873;874; X86-SSE-LABEL: test_unsigned_i128_f32:875; X86-SSE:       # %bb.0:876; X86-SSE-NEXT:    pushl %ebx877; X86-SSE-NEXT:    pushl %edi878; X86-SSE-NEXT:    pushl %esi879; X86-SSE-NEXT:    subl $32, %esp880; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi881; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero882; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)883; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax884; X86-SSE-NEXT:    movl %eax, (%esp)885; X86-SSE-NEXT:    calll __fixunssfti886; X86-SSE-NEXT:    subl $4, %esp887; X86-SSE-NEXT:    xorl %eax, %eax888; X86-SSE-NEXT:    xorps %xmm0, %xmm0889; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero890; X86-SSE-NEXT:    ucomiss %xmm0, %xmm1891; X86-SSE-NEXT:    movaps %xmm1, %xmm0892; X86-SSE-NEXT:    movl $0, %ecx893; X86-SSE-NEXT:    movl $0, %edx894; X86-SSE-NEXT:    movl $0, %edi895; X86-SSE-NEXT:    jb .LBB9_2896; X86-SSE-NEXT:  # %bb.1:897; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax898; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx899; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx900; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi901; X86-SSE-NEXT:  .LBB9_2:902; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0903; X86-SSE-NEXT:    movl $-1, %ebx904; X86-SSE-NEXT:    cmoval %ebx, %edi905; X86-SSE-NEXT:    cmoval %ebx, %edx906; X86-SSE-NEXT:    cmoval %ebx, %ecx907; X86-SSE-NEXT:    cmoval %ebx, %eax908; X86-SSE-NEXT:    movl %eax, 12(%esi)909; X86-SSE-NEXT:    movl %ecx, 8(%esi)910; X86-SSE-NEXT:    movl %edx, 4(%esi)911; X86-SSE-NEXT:    movl %edi, (%esi)912; X86-SSE-NEXT:    movl %esi, %eax913; X86-SSE-NEXT:    addl $32, %esp914; X86-SSE-NEXT:    popl %esi915; X86-SSE-NEXT:    popl %edi916; X86-SSE-NEXT:    popl %ebx917; X86-SSE-NEXT:    retl $4918;919; X64-LABEL: test_unsigned_i128_f32:920; X64:       # %bb.0:921; X64-NEXT:    pushq %rax922; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill923; X64-NEXT:    callq __fixunssfti@PLT924; X64-NEXT:    xorl %ecx, %ecx925; X64-NEXT:    xorps %xmm0, %xmm0926; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload927; X64-NEXT:    # xmm1 = mem[0],zero,zero,zero928; X64-NEXT:    ucomiss %xmm0, %xmm1929; X64-NEXT:    cmovbq %rcx, %rdx930; X64-NEXT:    cmovbq %rcx, %rax931; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1932; X64-NEXT:    movq $-1, %rcx933; X64-NEXT:    cmovaq %rcx, %rax934; X64-NEXT:    cmovaq %rcx, %rdx935; X64-NEXT:    popq %rcx936; X64-NEXT:    retq937    %x = call i128 @llvm.fptoui.sat.i128.f32(float %f)938    ret i128 %x939}940 941;942; 64-bit float to unsigned integer943;944 945declare   i1 @llvm.fptoui.sat.i1.f64  (double)946declare   i8 @llvm.fptoui.sat.i8.f64  (double)947declare  i13 @llvm.fptoui.sat.i13.f64 (double)948declare  i16 @llvm.fptoui.sat.i16.f64 (double)949declare  i19 @llvm.fptoui.sat.i19.f64 (double)950declare  i32 @llvm.fptoui.sat.i32.f64 (double)951declare  i50 @llvm.fptoui.sat.i50.f64 (double)952declare  i64 @llvm.fptoui.sat.i64.f64 (double)953declare i100 @llvm.fptoui.sat.i100.f64(double)954declare i128 @llvm.fptoui.sat.i128.f64(double)955 956define i1 @test_unsigned_i1_f64(double %f) nounwind {957; X86-X87-LABEL: test_unsigned_i1_f64:958; X86-X87:       # %bb.0:959; X86-X87-NEXT:    subl $8, %esp960; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)961; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)962; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax963; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00964; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)965; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)966; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)967; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)968; X86-X87-NEXT:    fldz969; X86-X87-NEXT:    fxch %st(1)970; X86-X87-NEXT:    fucom %st(1)971; X86-X87-NEXT:    fstp %st(1)972; X86-X87-NEXT:    fnstsw %ax973; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax974; X86-X87-NEXT:    sahf975; X86-X87-NEXT:    jb .LBB10_1976; X86-X87-NEXT:  # %bb.2:977; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx978; X86-X87-NEXT:    jmp .LBB10_3979; X86-X87-NEXT:  .LBB10_1:980; X86-X87-NEXT:    xorl %ecx, %ecx981; X86-X87-NEXT:  .LBB10_3:982; X86-X87-NEXT:    fld1983; X86-X87-NEXT:    fxch %st(1)984; X86-X87-NEXT:    fucompp985; X86-X87-NEXT:    fnstsw %ax986; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax987; X86-X87-NEXT:    sahf988; X86-X87-NEXT:    movb $1, %al989; X86-X87-NEXT:    ja .LBB10_5990; X86-X87-NEXT:  # %bb.4:991; X86-X87-NEXT:    movl %ecx, %eax992; X86-X87-NEXT:  .LBB10_5:993; X86-X87-NEXT:    addl $8, %esp994; X86-X87-NEXT:    retl995;996; X86-SSE-LABEL: test_unsigned_i1_f64:997; X86-SSE:       # %bb.0:998; X86-SSE-NEXT:    xorpd %xmm0, %xmm0999; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm01000; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [1.0E+0,0.0E+0]1001; X86-SSE-NEXT:    minsd %xmm0, %xmm11002; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax1003; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax1004; X86-SSE-NEXT:    retl1005;1006; X64-LABEL: test_unsigned_i1_f64:1007; X64:       # %bb.0:1008; X64-NEXT:    xorpd %xmm1, %xmm11009; X64-NEXT:    maxsd %xmm0, %xmm11010; X64-NEXT:    movsd {{.*#+}} xmm0 = [1.0E+0,0.0E+0]1011; X64-NEXT:    minsd %xmm1, %xmm01012; X64-NEXT:    cvttsd2si %xmm0, %eax1013; X64-NEXT:    # kill: def $al killed $al killed $eax1014; X64-NEXT:    retq1015    %x = call i1 @llvm.fptoui.sat.i1.f64(double %f)1016    ret i1 %x1017}1018 1019define i8 @test_unsigned_i8_f64(double %f) nounwind {1020; X86-X87-LABEL: test_unsigned_i8_f64:1021; X86-X87:       # %bb.0:1022; X86-X87-NEXT:    subl $8, %esp1023; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1024; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1025; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1026; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001027; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1028; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1029; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)1030; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1031; X86-X87-NEXT:    fldz1032; X86-X87-NEXT:    fxch %st(1)1033; X86-X87-NEXT:    fucom %st(1)1034; X86-X87-NEXT:    fstp %st(1)1035; X86-X87-NEXT:    fnstsw %ax1036; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1037; X86-X87-NEXT:    sahf1038; X86-X87-NEXT:    jb .LBB11_11039; X86-X87-NEXT:  # %bb.2:1040; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx1041; X86-X87-NEXT:    jmp .LBB11_31042; X86-X87-NEXT:  .LBB11_1:1043; X86-X87-NEXT:    xorl %ecx, %ecx1044; X86-X87-NEXT:  .LBB11_3:1045; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1046; X86-X87-NEXT:    fxch %st(1)1047; X86-X87-NEXT:    fucompp1048; X86-X87-NEXT:    fnstsw %ax1049; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1050; X86-X87-NEXT:    sahf1051; X86-X87-NEXT:    movb $-1, %al1052; X86-X87-NEXT:    ja .LBB11_51053; X86-X87-NEXT:  # %bb.4:1054; X86-X87-NEXT:    movl %ecx, %eax1055; X86-X87-NEXT:  .LBB11_5:1056; X86-X87-NEXT:    addl $8, %esp1057; X86-X87-NEXT:    retl1058;1059; X86-SSE-LABEL: test_unsigned_i8_f64:1060; X86-SSE:       # %bb.0:1061; X86-SSE-NEXT:    xorpd %xmm0, %xmm01062; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm01063; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [2.55E+2,0.0E+0]1064; X86-SSE-NEXT:    minsd %xmm0, %xmm11065; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax1066; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax1067; X86-SSE-NEXT:    retl1068;1069; X64-LABEL: test_unsigned_i8_f64:1070; X64:       # %bb.0:1071; X64-NEXT:    xorpd %xmm1, %xmm11072; X64-NEXT:    maxsd %xmm0, %xmm11073; X64-NEXT:    movsd {{.*#+}} xmm0 = [2.55E+2,0.0E+0]1074; X64-NEXT:    minsd %xmm1, %xmm01075; X64-NEXT:    cvttsd2si %xmm0, %eax1076; X64-NEXT:    # kill: def $al killed $al killed $eax1077; X64-NEXT:    retq1078    %x = call i8 @llvm.fptoui.sat.i8.f64(double %f)1079    ret i8 %x1080}1081 1082define i13 @test_unsigned_i13_f64(double %f) nounwind {1083; X86-X87-LABEL: test_unsigned_i13_f64:1084; X86-X87:       # %bb.0:1085; X86-X87-NEXT:    subl $8, %esp1086; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1087; X86-X87-NEXT:    fnstcw (%esp)1088; X86-X87-NEXT:    movzwl (%esp), %eax1089; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001090; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1091; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1092; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)1093; X86-X87-NEXT:    fldcw (%esp)1094; X86-X87-NEXT:    fldz1095; X86-X87-NEXT:    fxch %st(1)1096; X86-X87-NEXT:    fucom %st(1)1097; X86-X87-NEXT:    fstp %st(1)1098; X86-X87-NEXT:    fnstsw %ax1099; X86-X87-NEXT:    xorl %ecx, %ecx1100; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1101; X86-X87-NEXT:    sahf1102; X86-X87-NEXT:    jb .LBB12_21103; X86-X87-NEXT:  # %bb.1:1104; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1105; X86-X87-NEXT:  .LBB12_2:1106; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1107; X86-X87-NEXT:    fxch %st(1)1108; X86-X87-NEXT:    fucompp1109; X86-X87-NEXT:    fnstsw %ax1110; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1111; X86-X87-NEXT:    sahf1112; X86-X87-NEXT:    movl $8191, %eax # imm = 0x1FFF1113; X86-X87-NEXT:    ja .LBB12_41114; X86-X87-NEXT:  # %bb.3:1115; X86-X87-NEXT:    movl %ecx, %eax1116; X86-X87-NEXT:  .LBB12_4:1117; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax1118; X86-X87-NEXT:    addl $8, %esp1119; X86-X87-NEXT:    retl1120;1121; X86-SSE-LABEL: test_unsigned_i13_f64:1122; X86-SSE:       # %bb.0:1123; X86-SSE-NEXT:    xorpd %xmm0, %xmm01124; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm01125; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [8.191E+3,0.0E+0]1126; X86-SSE-NEXT:    minsd %xmm0, %xmm11127; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax1128; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax1129; X86-SSE-NEXT:    retl1130;1131; X64-LABEL: test_unsigned_i13_f64:1132; X64:       # %bb.0:1133; X64-NEXT:    xorpd %xmm1, %xmm11134; X64-NEXT:    maxsd %xmm0, %xmm11135; X64-NEXT:    movsd {{.*#+}} xmm0 = [8.191E+3,0.0E+0]1136; X64-NEXT:    minsd %xmm1, %xmm01137; X64-NEXT:    cvttsd2si %xmm0, %eax1138; X64-NEXT:    # kill: def $ax killed $ax killed $eax1139; X64-NEXT:    retq1140    %x = call i13 @llvm.fptoui.sat.i13.f64(double %f)1141    ret i13 %x1142}1143 1144define i16 @test_unsigned_i16_f64(double %f) nounwind {1145; X86-X87-LABEL: test_unsigned_i16_f64:1146; X86-X87:       # %bb.0:1147; X86-X87-NEXT:    subl $8, %esp1148; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1149; X86-X87-NEXT:    fnstcw (%esp)1150; X86-X87-NEXT:    movzwl (%esp), %eax1151; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001152; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1153; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1154; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)1155; X86-X87-NEXT:    fldcw (%esp)1156; X86-X87-NEXT:    fldz1157; X86-X87-NEXT:    fxch %st(1)1158; X86-X87-NEXT:    fucom %st(1)1159; X86-X87-NEXT:    fstp %st(1)1160; X86-X87-NEXT:    fnstsw %ax1161; X86-X87-NEXT:    xorl %ecx, %ecx1162; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1163; X86-X87-NEXT:    sahf1164; X86-X87-NEXT:    jb .LBB13_21165; X86-X87-NEXT:  # %bb.1:1166; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1167; X86-X87-NEXT:  .LBB13_2:1168; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1169; X86-X87-NEXT:    fxch %st(1)1170; X86-X87-NEXT:    fucompp1171; X86-X87-NEXT:    fnstsw %ax1172; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1173; X86-X87-NEXT:    sahf1174; X86-X87-NEXT:    movl $65535, %eax # imm = 0xFFFF1175; X86-X87-NEXT:    ja .LBB13_41176; X86-X87-NEXT:  # %bb.3:1177; X86-X87-NEXT:    movl %ecx, %eax1178; X86-X87-NEXT:  .LBB13_4:1179; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax1180; X86-X87-NEXT:    addl $8, %esp1181; X86-X87-NEXT:    retl1182;1183; X86-SSE-LABEL: test_unsigned_i16_f64:1184; X86-SSE:       # %bb.0:1185; X86-SSE-NEXT:    xorpd %xmm0, %xmm01186; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm01187; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [6.5535E+4,0.0E+0]1188; X86-SSE-NEXT:    minsd %xmm0, %xmm11189; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax1190; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax1191; X86-SSE-NEXT:    retl1192;1193; X64-LABEL: test_unsigned_i16_f64:1194; X64:       # %bb.0:1195; X64-NEXT:    xorpd %xmm1, %xmm11196; X64-NEXT:    maxsd %xmm0, %xmm11197; X64-NEXT:    movsd {{.*#+}} xmm0 = [6.5535E+4,0.0E+0]1198; X64-NEXT:    minsd %xmm1, %xmm01199; X64-NEXT:    cvttsd2si %xmm0, %eax1200; X64-NEXT:    # kill: def $ax killed $ax killed $eax1201; X64-NEXT:    retq1202    %x = call i16 @llvm.fptoui.sat.i16.f64(double %f)1203    ret i16 %x1204}1205 1206define i19 @test_unsigned_i19_f64(double %f) nounwind {1207; X86-X87-LABEL: test_unsigned_i19_f64:1208; X86-X87:       # %bb.0:1209; X86-X87-NEXT:    subl $20, %esp1210; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1211; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1212; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1213; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001214; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1215; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1216; X86-X87-NEXT:    fld %st(0)1217; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)1218; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1219; X86-X87-NEXT:    fldz1220; X86-X87-NEXT:    fxch %st(1)1221; X86-X87-NEXT:    fucom %st(1)1222; X86-X87-NEXT:    fstp %st(1)1223; X86-X87-NEXT:    fnstsw %ax1224; X86-X87-NEXT:    xorl %ecx, %ecx1225; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1226; X86-X87-NEXT:    sahf1227; X86-X87-NEXT:    jb .LBB14_21228; X86-X87-NEXT:  # %bb.1:1229; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1230; X86-X87-NEXT:  .LBB14_2:1231; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1232; X86-X87-NEXT:    fxch %st(1)1233; X86-X87-NEXT:    fucompp1234; X86-X87-NEXT:    fnstsw %ax1235; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1236; X86-X87-NEXT:    sahf1237; X86-X87-NEXT:    movl $524287, %eax # imm = 0x7FFFF1238; X86-X87-NEXT:    ja .LBB14_41239; X86-X87-NEXT:  # %bb.3:1240; X86-X87-NEXT:    movl %ecx, %eax1241; X86-X87-NEXT:  .LBB14_4:1242; X86-X87-NEXT:    addl $20, %esp1243; X86-X87-NEXT:    retl1244;1245; X86-SSE-LABEL: test_unsigned_i19_f64:1246; X86-SSE:       # %bb.0:1247; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1248; X86-SSE-NEXT:    xorpd %xmm1, %xmm11249; X86-SSE-NEXT:    maxsd %xmm1, %xmm01250; X86-SSE-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01251; X86-SSE-NEXT:    cvttsd2si %xmm0, %eax1252; X86-SSE-NEXT:    retl1253;1254; X64-LABEL: test_unsigned_i19_f64:1255; X64:       # %bb.0:1256; X64-NEXT:    xorpd %xmm1, %xmm11257; X64-NEXT:    maxsd %xmm1, %xmm01258; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01259; X64-NEXT:    cvttsd2si %xmm0, %eax1260; X64-NEXT:    retq1261    %x = call i19 @llvm.fptoui.sat.i19.f64(double %f)1262    ret i19 %x1263}1264 1265define i32 @test_unsigned_i32_f64(double %f) nounwind {1266; X86-X87-LABEL: test_unsigned_i32_f64:1267; X86-X87:       # %bb.0:1268; X86-X87-NEXT:    subl $20, %esp1269; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1270; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1271; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1272; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001273; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1274; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1275; X86-X87-NEXT:    fld %st(0)1276; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)1277; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1278; X86-X87-NEXT:    fldz1279; X86-X87-NEXT:    fxch %st(1)1280; X86-X87-NEXT:    fucom %st(1)1281; X86-X87-NEXT:    fstp %st(1)1282; X86-X87-NEXT:    fnstsw %ax1283; X86-X87-NEXT:    xorl %ecx, %ecx1284; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1285; X86-X87-NEXT:    sahf1286; X86-X87-NEXT:    jb .LBB15_21287; X86-X87-NEXT:  # %bb.1:1288; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1289; X86-X87-NEXT:  .LBB15_2:1290; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1291; X86-X87-NEXT:    fxch %st(1)1292; X86-X87-NEXT:    fucompp1293; X86-X87-NEXT:    fnstsw %ax1294; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1295; X86-X87-NEXT:    sahf1296; X86-X87-NEXT:    movl $-1, %eax1297; X86-X87-NEXT:    ja .LBB15_41298; X86-X87-NEXT:  # %bb.3:1299; X86-X87-NEXT:    movl %ecx, %eax1300; X86-X87-NEXT:  .LBB15_4:1301; X86-X87-NEXT:    addl $20, %esp1302; X86-X87-NEXT:    retl1303;1304; X86-SSE-LABEL: test_unsigned_i32_f64:1305; X86-SSE:       # %bb.0:1306; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1307; X86-SSE-NEXT:    xorpd %xmm1, %xmm11308; X86-SSE-NEXT:    maxsd %xmm1, %xmm01309; X86-SSE-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01310; X86-SSE-NEXT:    cvttsd2si %xmm0, %ecx1311; X86-SSE-NEXT:    movl %ecx, %edx1312; X86-SSE-NEXT:    sarl $31, %edx1313; X86-SSE-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01314; X86-SSE-NEXT:    cvttsd2si %xmm0, %eax1315; X86-SSE-NEXT:    andl %edx, %eax1316; X86-SSE-NEXT:    orl %ecx, %eax1317; X86-SSE-NEXT:    retl1318;1319; X64-LABEL: test_unsigned_i32_f64:1320; X64:       # %bb.0:1321; X64-NEXT:    xorpd %xmm1, %xmm11322; X64-NEXT:    maxsd %xmm0, %xmm11323; X64-NEXT:    movsd {{.*#+}} xmm0 = [4.294967295E+9,0.0E+0]1324; X64-NEXT:    minsd %xmm1, %xmm01325; X64-NEXT:    cvttsd2si %xmm0, %rax1326; X64-NEXT:    # kill: def $eax killed $eax killed $rax1327; X64-NEXT:    retq1328    %x = call i32 @llvm.fptoui.sat.i32.f64(double %f)1329    ret i32 %x1330}1331 1332define i50 @test_unsigned_i50_f64(double %f) nounwind {1333; X86-X87-LABEL: test_unsigned_i50_f64:1334; X86-X87:       # %bb.0:1335; X86-X87-NEXT:    pushl %esi1336; X86-X87-NEXT:    subl $16, %esp1337; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1338; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1339; X86-X87-NEXT:    fucom %st(1)1340; X86-X87-NEXT:    fnstsw %ax1341; X86-X87-NEXT:    xorl %ecx, %ecx1342; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1343; X86-X87-NEXT:    sahf1344; X86-X87-NEXT:    setbe %al1345; X86-X87-NEXT:    fldz1346; X86-X87-NEXT:    jbe .LBB16_21347; X86-X87-NEXT:  # %bb.1:1348; X86-X87-NEXT:    fstp %st(1)1349; X86-X87-NEXT:    fld %st(0)1350; X86-X87-NEXT:    fxch %st(1)1351; X86-X87-NEXT:  .LBB16_2:1352; X86-X87-NEXT:    fxch %st(1)1353; X86-X87-NEXT:    fsubr %st(2), %st1354; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1355; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx1356; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC001357; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)1358; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1359; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)1360; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1361; X86-X87-NEXT:    movb %al, %cl1362; X86-X87-NEXT:    shll $31, %ecx1363; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx1364; X86-X87-NEXT:    fxch %st(1)1365; X86-X87-NEXT:    fucom %st(1)1366; X86-X87-NEXT:    fstp %st(1)1367; X86-X87-NEXT:    fnstsw %ax1368; X86-X87-NEXT:    xorl %edx, %edx1369; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1370; X86-X87-NEXT:    sahf1371; X86-X87-NEXT:    movl $0, %esi1372; X86-X87-NEXT:    jb .LBB16_41373; X86-X87-NEXT:  # %bb.3:1374; X86-X87-NEXT:    movl %ecx, %esi1375; X86-X87-NEXT:  .LBB16_4:1376; X86-X87-NEXT:    jb .LBB16_61377; X86-X87-NEXT:  # %bb.5:1378; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx1379; X86-X87-NEXT:  .LBB16_6:1380; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1381; X86-X87-NEXT:    fxch %st(1)1382; X86-X87-NEXT:    fucompp1383; X86-X87-NEXT:    fnstsw %ax1384; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1385; X86-X87-NEXT:    sahf1386; X86-X87-NEXT:    movl $-1, %eax1387; X86-X87-NEXT:    ja .LBB16_81388; X86-X87-NEXT:  # %bb.7:1389; X86-X87-NEXT:    movl %edx, %eax1390; X86-X87-NEXT:  .LBB16_8:1391; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF1392; X86-X87-NEXT:    ja .LBB16_101393; X86-X87-NEXT:  # %bb.9:1394; X86-X87-NEXT:    movl %esi, %edx1395; X86-X87-NEXT:  .LBB16_10:1396; X86-X87-NEXT:    addl $16, %esp1397; X86-X87-NEXT:    popl %esi1398; X86-X87-NEXT:    retl1399;1400; X86-SSE-LABEL: test_unsigned_i50_f64:1401; X86-SSE:       # %bb.0:1402; X86-SSE-NEXT:    pushl %esi1403; X86-SSE-NEXT:    subl $16, %esp1404; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1405; X86-SSE-NEXT:    movsd {{.*#+}} xmm2 = [9.2233720368547758E+18,0.0E+0]1406; X86-SSE-NEXT:    ucomisd %xmm0, %xmm21407; X86-SSE-NEXT:    xorpd %xmm1, %xmm11408; X86-SSE-NEXT:    jbe .LBB16_21409; X86-SSE-NEXT:  # %bb.1:1410; X86-SSE-NEXT:    xorpd %xmm2, %xmm21411; X86-SSE-NEXT:  .LBB16_2:1412; X86-SSE-NEXT:    movapd %xmm0, %xmm31413; X86-SSE-NEXT:    subsd %xmm2, %xmm31414; X86-SSE-NEXT:    movsd %xmm3, {{[0-9]+}}(%esp)1415; X86-SSE-NEXT:    setbe %cl1416; X86-SSE-NEXT:    fldl {{[0-9]+}}(%esp)1417; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)1418; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1419; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC001420; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)1421; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)1422; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)1423; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)1424; X86-SSE-NEXT:    xorl %eax, %eax1425; X86-SSE-NEXT:    ucomisd %xmm1, %xmm01426; X86-SSE-NEXT:    movl $0, %esi1427; X86-SSE-NEXT:    jb .LBB16_41428; X86-SSE-NEXT:  # %bb.3:1429; X86-SSE-NEXT:    movzbl %cl, %eax1430; X86-SSE-NEXT:    shll $31, %eax1431; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax1432; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi1433; X86-SSE-NEXT:  .LBB16_4:1434; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01435; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF1436; X86-SSE-NEXT:    cmovbel %eax, %edx1437; X86-SSE-NEXT:    movl $-1, %eax1438; X86-SSE-NEXT:    cmovbel %esi, %eax1439; X86-SSE-NEXT:    addl $16, %esp1440; X86-SSE-NEXT:    popl %esi1441; X86-SSE-NEXT:    retl1442;1443; X64-LABEL: test_unsigned_i50_f64:1444; X64:       # %bb.0:1445; X64-NEXT:    xorpd %xmm1, %xmm11446; X64-NEXT:    maxsd %xmm1, %xmm01447; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01448; X64-NEXT:    cvttsd2si %xmm0, %rax1449; X64-NEXT:    retq1450    %x = call i50 @llvm.fptoui.sat.i50.f64(double %f)1451    ret i50 %x1452}1453 1454define i64 @test_unsigned_i64_f64(double %f) nounwind {1455; X86-X87-LABEL: test_unsigned_i64_f64:1456; X86-X87:       # %bb.0:1457; X86-X87-NEXT:    pushl %edi1458; X86-X87-NEXT:    pushl %esi1459; X86-X87-NEXT:    subl $20, %esp1460; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1461; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1462; X86-X87-NEXT:    fucom %st(1)1463; X86-X87-NEXT:    fnstsw %ax1464; X86-X87-NEXT:    xorl %ecx, %ecx1465; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1466; X86-X87-NEXT:    sahf1467; X86-X87-NEXT:    setbe %al1468; X86-X87-NEXT:    fldz1469; X86-X87-NEXT:    jbe .LBB17_21470; X86-X87-NEXT:  # %bb.1:1471; X86-X87-NEXT:    fstp %st(1)1472; X86-X87-NEXT:    fld %st(0)1473; X86-X87-NEXT:    fxch %st(1)1474; X86-X87-NEXT:  .LBB17_2:1475; X86-X87-NEXT:    fxch %st(1)1476; X86-X87-NEXT:    fsubr %st(2), %st1477; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1478; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx1479; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC001480; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)1481; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1482; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)1483; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1484; X86-X87-NEXT:    movb %al, %cl1485; X86-X87-NEXT:    shll $31, %ecx1486; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx1487; X86-X87-NEXT:    fxch %st(1)1488; X86-X87-NEXT:    fucom %st(1)1489; X86-X87-NEXT:    fstp %st(1)1490; X86-X87-NEXT:    fnstsw %ax1491; X86-X87-NEXT:    xorl %esi, %esi1492; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1493; X86-X87-NEXT:    sahf1494; X86-X87-NEXT:    movl $0, %edi1495; X86-X87-NEXT:    jb .LBB17_41496; X86-X87-NEXT:  # %bb.3:1497; X86-X87-NEXT:    movl %ecx, %edi1498; X86-X87-NEXT:  .LBB17_4:1499; X86-X87-NEXT:    jb .LBB17_61500; X86-X87-NEXT:  # %bb.5:1501; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi1502; X86-X87-NEXT:  .LBB17_6:1503; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1504; X86-X87-NEXT:    fxch %st(1)1505; X86-X87-NEXT:    fucompp1506; X86-X87-NEXT:    fnstsw %ax1507; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1508; X86-X87-NEXT:    sahf1509; X86-X87-NEXT:    movl $-1, %eax1510; X86-X87-NEXT:    movl $-1, %edx1511; X86-X87-NEXT:    ja .LBB17_81512; X86-X87-NEXT:  # %bb.7:1513; X86-X87-NEXT:    movl %esi, %eax1514; X86-X87-NEXT:    movl %edi, %edx1515; X86-X87-NEXT:  .LBB17_8:1516; X86-X87-NEXT:    addl $20, %esp1517; X86-X87-NEXT:    popl %esi1518; X86-X87-NEXT:    popl %edi1519; X86-X87-NEXT:    retl1520;1521; X86-SSE-LABEL: test_unsigned_i64_f64:1522; X86-SSE:       # %bb.0:1523; X86-SSE-NEXT:    subl $20, %esp1524; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1525; X86-SSE-NEXT:    movsd {{.*#+}} xmm2 = [9.2233720368547758E+18,0.0E+0]1526; X86-SSE-NEXT:    ucomisd %xmm0, %xmm21527; X86-SSE-NEXT:    xorpd %xmm1, %xmm11528; X86-SSE-NEXT:    jbe .LBB17_21529; X86-SSE-NEXT:  # %bb.1:1530; X86-SSE-NEXT:    xorpd %xmm2, %xmm21531; X86-SSE-NEXT:  .LBB17_2:1532; X86-SSE-NEXT:    movapd %xmm0, %xmm31533; X86-SSE-NEXT:    subsd %xmm2, %xmm31534; X86-SSE-NEXT:    movsd %xmm3, {{[0-9]+}}(%esp)1535; X86-SSE-NEXT:    setbe %cl1536; X86-SSE-NEXT:    fldl {{[0-9]+}}(%esp)1537; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)1538; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1539; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC001540; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)1541; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)1542; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)1543; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)1544; X86-SSE-NEXT:    xorl %edx, %edx1545; X86-SSE-NEXT:    ucomisd %xmm1, %xmm01546; X86-SSE-NEXT:    movl $0, %eax1547; X86-SSE-NEXT:    jb .LBB17_41548; X86-SSE-NEXT:  # %bb.3:1549; X86-SSE-NEXT:    movzbl %cl, %edx1550; X86-SSE-NEXT:    shll $31, %edx1551; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %edx1552; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1553; X86-SSE-NEXT:  .LBB17_4:1554; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01555; X86-SSE-NEXT:    movl $-1, %ecx1556; X86-SSE-NEXT:    cmoval %ecx, %edx1557; X86-SSE-NEXT:    cmoval %ecx, %eax1558; X86-SSE-NEXT:    addl $20, %esp1559; X86-SSE-NEXT:    retl1560;1561; X64-LABEL: test_unsigned_i64_f64:1562; X64:       # %bb.0:1563; X64-NEXT:    cvttsd2si %xmm0, %rax1564; X64-NEXT:    movq %rax, %rcx1565; X64-NEXT:    sarq $63, %rcx1566; X64-NEXT:    movapd %xmm0, %xmm11567; X64-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11568; X64-NEXT:    cvttsd2si %xmm1, %rdx1569; X64-NEXT:    andq %rcx, %rdx1570; X64-NEXT:    orq %rax, %rdx1571; X64-NEXT:    xorl %ecx, %ecx1572; X64-NEXT:    xorpd %xmm1, %xmm11573; X64-NEXT:    ucomisd %xmm1, %xmm01574; X64-NEXT:    cmovaeq %rdx, %rcx1575; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01576; X64-NEXT:    movq $-1, %rax1577; X64-NEXT:    cmovbeq %rcx, %rax1578; X64-NEXT:    retq1579    %x = call i64 @llvm.fptoui.sat.i64.f64(double %f)1580    ret i64 %x1581}1582 1583define i100 @test_unsigned_i100_f64(double %f) nounwind {1584; X86-X87-LABEL: test_unsigned_i100_f64:1585; X86-X87:       # %bb.0:1586; X86-X87-NEXT:    pushl %ebp1587; X86-X87-NEXT:    pushl %ebx1588; X86-X87-NEXT:    pushl %edi1589; X86-X87-NEXT:    pushl %esi1590; X86-X87-NEXT:    subl $44, %esp1591; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1592; X86-X87-NEXT:    fstl {{[0-9]+}}(%esp)1593; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1594; X86-X87-NEXT:    movl %eax, (%esp)1595; X86-X87-NEXT:    fldz1596; X86-X87-NEXT:    fxch %st(1)1597; X86-X87-NEXT:    fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill1598; X86-X87-NEXT:    fucompp1599; X86-X87-NEXT:    fnstsw %ax1600; X86-X87-NEXT:    movl %eax, %ebx1601; X86-X87-NEXT:    calll __fixunsdfti1602; X86-X87-NEXT:    subl $4, %esp1603; X86-X87-NEXT:    xorl %edi, %edi1604; X86-X87-NEXT:    movb %bh, %ah1605; X86-X87-NEXT:    sahf1606; X86-X87-NEXT:    movl $0, %eax1607; X86-X87-NEXT:    jb .LBB18_21608; X86-X87-NEXT:  # %bb.1:1609; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax1610; X86-X87-NEXT:  .LBB18_2:1611; X86-X87-NEXT:    movl $0, %esi1612; X86-X87-NEXT:    movl $0, %ebx1613; X86-X87-NEXT:    jb .LBB18_41614; X86-X87-NEXT:  # %bb.3:1615; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx1616; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi1617; X86-X87-NEXT:  .LBB18_4:1618; X86-X87-NEXT:    jb .LBB18_61619; X86-X87-NEXT:  # %bb.5:1620; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi1621; X86-X87-NEXT:  .LBB18_6:1622; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1623; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1624; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1625; X86-X87-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload1626; X86-X87-NEXT:    fucompp1627; X86-X87-NEXT:    fnstsw %ax1628; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1629; X86-X87-NEXT:    sahf1630; X86-X87-NEXT:    movl $15, %eax1631; X86-X87-NEXT:    ja .LBB18_81632; X86-X87-NEXT:  # %bb.7:1633; X86-X87-NEXT:    movl %edi, %eax1634; X86-X87-NEXT:  .LBB18_8:1635; X86-X87-NEXT:    movl $-1, %edi1636; X86-X87-NEXT:    movl $-1, %ebp1637; X86-X87-NEXT:    movl $-1, %edx1638; X86-X87-NEXT:    ja .LBB18_101639; X86-X87-NEXT:  # %bb.9:1640; X86-X87-NEXT:    movl %ebx, %edi1641; X86-X87-NEXT:    movl %esi, %ebp1642; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload1643; X86-X87-NEXT:  .LBB18_10:1644; X86-X87-NEXT:    movl %edx, 8(%ecx)1645; X86-X87-NEXT:    movl %ebp, 4(%ecx)1646; X86-X87-NEXT:    movl %edi, (%ecx)1647; X86-X87-NEXT:    andl $15, %eax1648; X86-X87-NEXT:    movb %al, 12(%ecx)1649; X86-X87-NEXT:    movl %ecx, %eax1650; X86-X87-NEXT:    addl $44, %esp1651; X86-X87-NEXT:    popl %esi1652; X86-X87-NEXT:    popl %edi1653; X86-X87-NEXT:    popl %ebx1654; X86-X87-NEXT:    popl %ebp1655; X86-X87-NEXT:    retl $41656;1657; X86-SSE-LABEL: test_unsigned_i100_f64:1658; X86-SSE:       # %bb.0:1659; X86-SSE-NEXT:    pushl %ebx1660; X86-SSE-NEXT:    pushl %edi1661; X86-SSE-NEXT:    pushl %esi1662; X86-SSE-NEXT:    subl $32, %esp1663; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi1664; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1665; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)1666; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax1667; X86-SSE-NEXT:    movl %eax, (%esp)1668; X86-SSE-NEXT:    calll __fixunsdfti1669; X86-SSE-NEXT:    subl $4, %esp1670; X86-SSE-NEXT:    xorl %eax, %eax1671; X86-SSE-NEXT:    xorpd %xmm0, %xmm01672; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero1673; X86-SSE-NEXT:    ucomisd %xmm0, %xmm11674; X86-SSE-NEXT:    movapd %xmm1, %xmm01675; X86-SSE-NEXT:    movl $0, %ecx1676; X86-SSE-NEXT:    movl $0, %edx1677; X86-SSE-NEXT:    movl $0, %edi1678; X86-SSE-NEXT:    jb .LBB18_21679; X86-SSE-NEXT:  # %bb.1:1680; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1681; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx1682; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx1683; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi1684; X86-SSE-NEXT:  .LBB18_2:1685; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01686; X86-SSE-NEXT:    movl $15, %ebx1687; X86-SSE-NEXT:    cmovbel %edi, %ebx1688; X86-SSE-NEXT:    movl $-1, %edi1689; X86-SSE-NEXT:    cmoval %edi, %edx1690; X86-SSE-NEXT:    cmoval %edi, %ecx1691; X86-SSE-NEXT:    cmoval %edi, %eax1692; X86-SSE-NEXT:    movl %eax, 8(%esi)1693; X86-SSE-NEXT:    movl %ecx, 4(%esi)1694; X86-SSE-NEXT:    movl %edx, (%esi)1695; X86-SSE-NEXT:    andl $15, %ebx1696; X86-SSE-NEXT:    movb %bl, 12(%esi)1697; X86-SSE-NEXT:    movl %esi, %eax1698; X86-SSE-NEXT:    addl $32, %esp1699; X86-SSE-NEXT:    popl %esi1700; X86-SSE-NEXT:    popl %edi1701; X86-SSE-NEXT:    popl %ebx1702; X86-SSE-NEXT:    retl $41703;1704; X64-LABEL: test_unsigned_i100_f64:1705; X64:       # %bb.0:1706; X64-NEXT:    pushq %rax1707; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill1708; X64-NEXT:    callq __fixunsdfti@PLT1709; X64-NEXT:    xorl %ecx, %ecx1710; X64-NEXT:    xorpd %xmm0, %xmm01711; X64-NEXT:    movsd (%rsp), %xmm1 # 8-byte Reload1712; X64-NEXT:    # xmm1 = mem[0],zero1713; X64-NEXT:    ucomisd %xmm0, %xmm11714; X64-NEXT:    cmovbq %rcx, %rdx1715; X64-NEXT:    cmovbq %rcx, %rax1716; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11717; X64-NEXT:    movq $-1, %rcx1718; X64-NEXT:    cmovaq %rcx, %rax1719; X64-NEXT:    movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF1720; X64-NEXT:    cmovaq %rcx, %rdx1721; X64-NEXT:    popq %rcx1722; X64-NEXT:    retq1723    %x = call i100 @llvm.fptoui.sat.i100.f64(double %f)1724    ret i100 %x1725}1726 1727define i128 @test_unsigned_i128_f64(double %f) nounwind {1728; X86-X87-LABEL: test_unsigned_i128_f64:1729; X86-X87:       # %bb.0:1730; X86-X87-NEXT:    pushl %ebp1731; X86-X87-NEXT:    pushl %ebx1732; X86-X87-NEXT:    pushl %edi1733; X86-X87-NEXT:    pushl %esi1734; X86-X87-NEXT:    subl $60, %esp1735; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1736; X86-X87-NEXT:    fstl {{[0-9]+}}(%esp)1737; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1738; X86-X87-NEXT:    movl %eax, (%esp)1739; X86-X87-NEXT:    fldz1740; X86-X87-NEXT:    fxch %st(1)1741; X86-X87-NEXT:    fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill1742; X86-X87-NEXT:    fucompp1743; X86-X87-NEXT:    fnstsw %ax1744; X86-X87-NEXT:    movl %eax, %ebx1745; X86-X87-NEXT:    calll __fixunsdfti1746; X86-X87-NEXT:    subl $4, %esp1747; X86-X87-NEXT:    xorl %edx, %edx1748; X86-X87-NEXT:    movb %bh, %ah1749; X86-X87-NEXT:    sahf1750; X86-X87-NEXT:    movl $0, %eax1751; X86-X87-NEXT:    jb .LBB19_21752; X86-X87-NEXT:  # %bb.1:1753; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax1754; X86-X87-NEXT:  .LBB19_2:1755; X86-X87-NEXT:    movl $0, %ecx1756; X86-X87-NEXT:    jb .LBB19_41757; X86-X87-NEXT:  # %bb.3:1758; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1759; X86-X87-NEXT:  .LBB19_4:1760; X86-X87-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1761; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1762; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1763; X86-X87-NEXT:    movl $0, %ebx1764; X86-X87-NEXT:    jb .LBB19_61765; X86-X87-NEXT:  # %bb.5:1766; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx1767; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx1768; X86-X87-NEXT:  .LBB19_6:1769; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1770; X86-X87-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload1771; X86-X87-NEXT:    fucompp1772; X86-X87-NEXT:    fnstsw %ax1773; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1774; X86-X87-NEXT:    sahf1775; X86-X87-NEXT:    movl $-1, %eax1776; X86-X87-NEXT:    movl $-1, %ebp1777; X86-X87-NEXT:    movl $-1, %edi1778; X86-X87-NEXT:    movl $-1, %esi1779; X86-X87-NEXT:    ja .LBB19_81780; X86-X87-NEXT:  # %bb.7:1781; X86-X87-NEXT:    movl %ebx, %eax1782; X86-X87-NEXT:    movl %edx, %ebp1783; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload1784; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload1785; X86-X87-NEXT:  .LBB19_8:1786; X86-X87-NEXT:    movl %esi, 12(%ecx)1787; X86-X87-NEXT:    movl %edi, 8(%ecx)1788; X86-X87-NEXT:    movl %ebp, 4(%ecx)1789; X86-X87-NEXT:    movl %eax, (%ecx)1790; X86-X87-NEXT:    movl %ecx, %eax1791; X86-X87-NEXT:    addl $60, %esp1792; X86-X87-NEXT:    popl %esi1793; X86-X87-NEXT:    popl %edi1794; X86-X87-NEXT:    popl %ebx1795; X86-X87-NEXT:    popl %ebp1796; X86-X87-NEXT:    retl $41797;1798; X86-SSE-LABEL: test_unsigned_i128_f64:1799; X86-SSE:       # %bb.0:1800; X86-SSE-NEXT:    pushl %ebx1801; X86-SSE-NEXT:    pushl %edi1802; X86-SSE-NEXT:    pushl %esi1803; X86-SSE-NEXT:    subl $32, %esp1804; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi1805; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1806; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)1807; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax1808; X86-SSE-NEXT:    movl %eax, (%esp)1809; X86-SSE-NEXT:    calll __fixunsdfti1810; X86-SSE-NEXT:    subl $4, %esp1811; X86-SSE-NEXT:    xorl %eax, %eax1812; X86-SSE-NEXT:    xorpd %xmm0, %xmm01813; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero1814; X86-SSE-NEXT:    ucomisd %xmm0, %xmm11815; X86-SSE-NEXT:    movapd %xmm1, %xmm01816; X86-SSE-NEXT:    movl $0, %ecx1817; X86-SSE-NEXT:    movl $0, %edx1818; X86-SSE-NEXT:    movl $0, %edi1819; X86-SSE-NEXT:    jb .LBB19_21820; X86-SSE-NEXT:  # %bb.1:1821; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1822; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx1823; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx1824; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi1825; X86-SSE-NEXT:  .LBB19_2:1826; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01827; X86-SSE-NEXT:    movl $-1, %ebx1828; X86-SSE-NEXT:    cmoval %ebx, %edi1829; X86-SSE-NEXT:    cmoval %ebx, %edx1830; X86-SSE-NEXT:    cmoval %ebx, %ecx1831; X86-SSE-NEXT:    cmoval %ebx, %eax1832; X86-SSE-NEXT:    movl %eax, 12(%esi)1833; X86-SSE-NEXT:    movl %ecx, 8(%esi)1834; X86-SSE-NEXT:    movl %edx, 4(%esi)1835; X86-SSE-NEXT:    movl %edi, (%esi)1836; X86-SSE-NEXT:    movl %esi, %eax1837; X86-SSE-NEXT:    addl $32, %esp1838; X86-SSE-NEXT:    popl %esi1839; X86-SSE-NEXT:    popl %edi1840; X86-SSE-NEXT:    popl %ebx1841; X86-SSE-NEXT:    retl $41842;1843; X64-LABEL: test_unsigned_i128_f64:1844; X64:       # %bb.0:1845; X64-NEXT:    pushq %rax1846; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill1847; X64-NEXT:    callq __fixunsdfti@PLT1848; X64-NEXT:    xorl %ecx, %ecx1849; X64-NEXT:    xorpd %xmm0, %xmm01850; X64-NEXT:    movsd (%rsp), %xmm1 # 8-byte Reload1851; X64-NEXT:    # xmm1 = mem[0],zero1852; X64-NEXT:    ucomisd %xmm0, %xmm11853; X64-NEXT:    cmovbq %rcx, %rdx1854; X64-NEXT:    cmovbq %rcx, %rax1855; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11856; X64-NEXT:    movq $-1, %rcx1857; X64-NEXT:    cmovaq %rcx, %rax1858; X64-NEXT:    cmovaq %rcx, %rdx1859; X64-NEXT:    popq %rcx1860; X64-NEXT:    retq1861    %x = call i128 @llvm.fptoui.sat.i128.f64(double %f)1862    ret i128 %x1863}1864 1865;1866; 16-bit float to unsigned integer1867;1868 1869declare   i1 @llvm.fptoui.sat.i1.f16  (half)1870declare   i8 @llvm.fptoui.sat.i8.f16  (half)1871declare  i13 @llvm.fptoui.sat.i13.f16 (half)1872declare  i16 @llvm.fptoui.sat.i16.f16 (half)1873declare  i19 @llvm.fptoui.sat.i19.f16 (half)1874declare  i32 @llvm.fptoui.sat.i32.f16 (half)1875declare  i50 @llvm.fptoui.sat.i50.f16 (half)1876declare  i64 @llvm.fptoui.sat.i64.f16 (half)1877declare i100 @llvm.fptoui.sat.i100.f16(half)1878declare i128 @llvm.fptoui.sat.i128.f16(half)1879 1880define i1 @test_unsigned_i1_f16(half %f) nounwind {1881; X86-X87-LABEL: test_unsigned_i1_f16:1882; X86-X87:       # %bb.0:1883; X86-X87-NEXT:    subl $12, %esp1884; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1885; X86-X87-NEXT:    movl %eax, (%esp)1886; X86-X87-NEXT:    calll __extendhfsf21887; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1888; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1889; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001890; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1891; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1892; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)1893; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1894; X86-X87-NEXT:    fldz1895; X86-X87-NEXT:    fxch %st(1)1896; X86-X87-NEXT:    fucom %st(1)1897; X86-X87-NEXT:    fstp %st(1)1898; X86-X87-NEXT:    fnstsw %ax1899; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1900; X86-X87-NEXT:    sahf1901; X86-X87-NEXT:    jb .LBB20_11902; X86-X87-NEXT:  # %bb.2:1903; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx1904; X86-X87-NEXT:    jmp .LBB20_31905; X86-X87-NEXT:  .LBB20_1:1906; X86-X87-NEXT:    xorl %ecx, %ecx1907; X86-X87-NEXT:  .LBB20_3:1908; X86-X87-NEXT:    fld11909; X86-X87-NEXT:    fxch %st(1)1910; X86-X87-NEXT:    fucompp1911; X86-X87-NEXT:    fnstsw %ax1912; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1913; X86-X87-NEXT:    sahf1914; X86-X87-NEXT:    movb $1, %al1915; X86-X87-NEXT:    ja .LBB20_51916; X86-X87-NEXT:  # %bb.4:1917; X86-X87-NEXT:    movl %ecx, %eax1918; X86-X87-NEXT:  .LBB20_5:1919; X86-X87-NEXT:    addl $12, %esp1920; X86-X87-NEXT:    retl1921;1922; X86-SSE-LABEL: test_unsigned_i1_f16:1923; X86-SSE:       # %bb.0:1924; X86-SSE-NEXT:    subl $12, %esp1925; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm01926; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax1927; X86-SSE-NEXT:    movw %ax, (%esp)1928; X86-SSE-NEXT:    calll __extendhfsf21929; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)1930; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1931; X86-SSE-NEXT:    cvttss2si %xmm0, %eax1932; X86-SSE-NEXT:    xorl %ecx, %ecx1933; X86-SSE-NEXT:    xorps %xmm1, %xmm11934; X86-SSE-NEXT:    ucomiss %xmm1, %xmm01935; X86-SSE-NEXT:    cmovael %eax, %ecx1936; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01937; X86-SSE-NEXT:    movl $1, %eax1938; X86-SSE-NEXT:    cmovbel %ecx, %eax1939; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax1940; X86-SSE-NEXT:    addl $12, %esp1941; X86-SSE-NEXT:    retl1942;1943; X64-LABEL: test_unsigned_i1_f16:1944; X64:       # %bb.0:1945; X64-NEXT:    pushq %rax1946; X64-NEXT:    callq __extendhfsf2@PLT1947; X64-NEXT:    cvttss2si %xmm0, %eax1948; X64-NEXT:    xorl %ecx, %ecx1949; X64-NEXT:    xorps %xmm1, %xmm11950; X64-NEXT:    ucomiss %xmm1, %xmm01951; X64-NEXT:    cmovael %eax, %ecx1952; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01953; X64-NEXT:    movl $1, %eax1954; X64-NEXT:    cmovbel %ecx, %eax1955; X64-NEXT:    # kill: def $al killed $al killed $eax1956; X64-NEXT:    popq %rcx1957; X64-NEXT:    retq1958    %x = call i1 @llvm.fptoui.sat.i1.f16(half %f)1959    ret i1 %x1960}1961 1962define i8 @test_unsigned_i8_f16(half %f) nounwind {1963; X86-X87-LABEL: test_unsigned_i8_f16:1964; X86-X87:       # %bb.0:1965; X86-X87-NEXT:    subl $12, %esp1966; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1967; X86-X87-NEXT:    movl %eax, (%esp)1968; X86-X87-NEXT:    calll __extendhfsf21969; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1970; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1971; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001972; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1973; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1974; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)1975; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1976; X86-X87-NEXT:    fldz1977; X86-X87-NEXT:    fxch %st(1)1978; X86-X87-NEXT:    fucom %st(1)1979; X86-X87-NEXT:    fstp %st(1)1980; X86-X87-NEXT:    fnstsw %ax1981; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1982; X86-X87-NEXT:    sahf1983; X86-X87-NEXT:    jb .LBB21_11984; X86-X87-NEXT:  # %bb.2:1985; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx1986; X86-X87-NEXT:    jmp .LBB21_31987; X86-X87-NEXT:  .LBB21_1:1988; X86-X87-NEXT:    xorl %ecx, %ecx1989; X86-X87-NEXT:  .LBB21_3:1990; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1991; X86-X87-NEXT:    fxch %st(1)1992; X86-X87-NEXT:    fucompp1993; X86-X87-NEXT:    fnstsw %ax1994; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1995; X86-X87-NEXT:    sahf1996; X86-X87-NEXT:    movb $-1, %al1997; X86-X87-NEXT:    ja .LBB21_51998; X86-X87-NEXT:  # %bb.4:1999; X86-X87-NEXT:    movl %ecx, %eax2000; X86-X87-NEXT:  .LBB21_5:2001; X86-X87-NEXT:    addl $12, %esp2002; X86-X87-NEXT:    retl2003;2004; X86-SSE-LABEL: test_unsigned_i8_f16:2005; X86-SSE:       # %bb.0:2006; X86-SSE-NEXT:    subl $12, %esp2007; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02008; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2009; X86-SSE-NEXT:    movw %ax, (%esp)2010; X86-SSE-NEXT:    calll __extendhfsf22011; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2012; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2013; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2014; X86-SSE-NEXT:    xorl %ecx, %ecx2015; X86-SSE-NEXT:    xorps %xmm1, %xmm12016; X86-SSE-NEXT:    ucomiss %xmm1, %xmm02017; X86-SSE-NEXT:    cmovael %eax, %ecx2018; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02019; X86-SSE-NEXT:    movl $255, %eax2020; X86-SSE-NEXT:    cmovbel %ecx, %eax2021; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax2022; X86-SSE-NEXT:    addl $12, %esp2023; X86-SSE-NEXT:    retl2024;2025; X64-LABEL: test_unsigned_i8_f16:2026; X64:       # %bb.0:2027; X64-NEXT:    pushq %rax2028; X64-NEXT:    callq __extendhfsf2@PLT2029; X64-NEXT:    cvttss2si %xmm0, %eax2030; X64-NEXT:    xorl %ecx, %ecx2031; X64-NEXT:    xorps %xmm1, %xmm12032; X64-NEXT:    ucomiss %xmm1, %xmm02033; X64-NEXT:    cmovael %eax, %ecx2034; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02035; X64-NEXT:    movl $255, %eax2036; X64-NEXT:    cmovbel %ecx, %eax2037; X64-NEXT:    # kill: def $al killed $al killed $eax2038; X64-NEXT:    popq %rcx2039; X64-NEXT:    retq2040    %x = call i8 @llvm.fptoui.sat.i8.f16(half %f)2041    ret i8 %x2042}2043 2044define i13 @test_unsigned_i13_f16(half %f) nounwind {2045; X86-X87-LABEL: test_unsigned_i13_f16:2046; X86-X87:       # %bb.0:2047; X86-X87-NEXT:    subl $12, %esp2048; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2049; X86-X87-NEXT:    movl %eax, (%esp)2050; X86-X87-NEXT:    calll __extendhfsf22051; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2052; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2053; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002054; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2055; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2056; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)2057; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2058; X86-X87-NEXT:    fldz2059; X86-X87-NEXT:    fxch %st(1)2060; X86-X87-NEXT:    fucom %st(1)2061; X86-X87-NEXT:    fstp %st(1)2062; X86-X87-NEXT:    fnstsw %ax2063; X86-X87-NEXT:    xorl %ecx, %ecx2064; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2065; X86-X87-NEXT:    sahf2066; X86-X87-NEXT:    jb .LBB22_22067; X86-X87-NEXT:  # %bb.1:2068; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2069; X86-X87-NEXT:  .LBB22_2:2070; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2071; X86-X87-NEXT:    fxch %st(1)2072; X86-X87-NEXT:    fucompp2073; X86-X87-NEXT:    fnstsw %ax2074; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2075; X86-X87-NEXT:    sahf2076; X86-X87-NEXT:    movl $8191, %eax # imm = 0x1FFF2077; X86-X87-NEXT:    ja .LBB22_42078; X86-X87-NEXT:  # %bb.3:2079; X86-X87-NEXT:    movl %ecx, %eax2080; X86-X87-NEXT:  .LBB22_4:2081; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax2082; X86-X87-NEXT:    addl $12, %esp2083; X86-X87-NEXT:    retl2084;2085; X86-SSE-LABEL: test_unsigned_i13_f16:2086; X86-SSE:       # %bb.0:2087; X86-SSE-NEXT:    subl $12, %esp2088; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02089; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2090; X86-SSE-NEXT:    movw %ax, (%esp)2091; X86-SSE-NEXT:    calll __extendhfsf22092; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2093; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2094; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2095; X86-SSE-NEXT:    xorl %ecx, %ecx2096; X86-SSE-NEXT:    xorps %xmm1, %xmm12097; X86-SSE-NEXT:    ucomiss %xmm1, %xmm02098; X86-SSE-NEXT:    cmovael %eax, %ecx2099; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02100; X86-SSE-NEXT:    movl $8191, %eax # imm = 0x1FFF2101; X86-SSE-NEXT:    cmovbel %ecx, %eax2102; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax2103; X86-SSE-NEXT:    addl $12, %esp2104; X86-SSE-NEXT:    retl2105;2106; X64-LABEL: test_unsigned_i13_f16:2107; X64:       # %bb.0:2108; X64-NEXT:    pushq %rax2109; X64-NEXT:    callq __extendhfsf2@PLT2110; X64-NEXT:    cvttss2si %xmm0, %eax2111; X64-NEXT:    xorl %ecx, %ecx2112; X64-NEXT:    xorps %xmm1, %xmm12113; X64-NEXT:    ucomiss %xmm1, %xmm02114; X64-NEXT:    cmovael %eax, %ecx2115; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02116; X64-NEXT:    movl $8191, %eax # imm = 0x1FFF2117; X64-NEXT:    cmovbel %ecx, %eax2118; X64-NEXT:    # kill: def $ax killed $ax killed $eax2119; X64-NEXT:    popq %rcx2120; X64-NEXT:    retq2121    %x = call i13 @llvm.fptoui.sat.i13.f16(half %f)2122    ret i13 %x2123}2124 2125define i16 @test_unsigned_i16_f16(half %f) nounwind {2126; X86-X87-LABEL: test_unsigned_i16_f16:2127; X86-X87:       # %bb.0:2128; X86-X87-NEXT:    subl $12, %esp2129; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2130; X86-X87-NEXT:    movl %eax, (%esp)2131; X86-X87-NEXT:    calll __extendhfsf22132; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2133; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2134; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002135; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2136; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2137; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)2138; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2139; X86-X87-NEXT:    fldz2140; X86-X87-NEXT:    fxch %st(1)2141; X86-X87-NEXT:    fucom %st(1)2142; X86-X87-NEXT:    fstp %st(1)2143; X86-X87-NEXT:    fnstsw %ax2144; X86-X87-NEXT:    xorl %ecx, %ecx2145; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2146; X86-X87-NEXT:    sahf2147; X86-X87-NEXT:    jb .LBB23_22148; X86-X87-NEXT:  # %bb.1:2149; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2150; X86-X87-NEXT:  .LBB23_2:2151; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2152; X86-X87-NEXT:    fxch %st(1)2153; X86-X87-NEXT:    fucompp2154; X86-X87-NEXT:    fnstsw %ax2155; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2156; X86-X87-NEXT:    sahf2157; X86-X87-NEXT:    movl $65535, %eax # imm = 0xFFFF2158; X86-X87-NEXT:    ja .LBB23_42159; X86-X87-NEXT:  # %bb.3:2160; X86-X87-NEXT:    movl %ecx, %eax2161; X86-X87-NEXT:  .LBB23_4:2162; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax2163; X86-X87-NEXT:    addl $12, %esp2164; X86-X87-NEXT:    retl2165;2166; X86-SSE-LABEL: test_unsigned_i16_f16:2167; X86-SSE:       # %bb.0:2168; X86-SSE-NEXT:    subl $12, %esp2169; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02170; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2171; X86-SSE-NEXT:    movw %ax, (%esp)2172; X86-SSE-NEXT:    calll __extendhfsf22173; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2174; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2175; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2176; X86-SSE-NEXT:    xorl %ecx, %ecx2177; X86-SSE-NEXT:    xorps %xmm1, %xmm12178; X86-SSE-NEXT:    ucomiss %xmm1, %xmm02179; X86-SSE-NEXT:    cmovael %eax, %ecx2180; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02181; X86-SSE-NEXT:    movl $65535, %eax # imm = 0xFFFF2182; X86-SSE-NEXT:    cmovbel %ecx, %eax2183; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax2184; X86-SSE-NEXT:    addl $12, %esp2185; X86-SSE-NEXT:    retl2186;2187; X64-LABEL: test_unsigned_i16_f16:2188; X64:       # %bb.0:2189; X64-NEXT:    pushq %rax2190; X64-NEXT:    callq __extendhfsf2@PLT2191; X64-NEXT:    cvttss2si %xmm0, %eax2192; X64-NEXT:    xorl %ecx, %ecx2193; X64-NEXT:    xorps %xmm1, %xmm12194; X64-NEXT:    ucomiss %xmm1, %xmm02195; X64-NEXT:    cmovael %eax, %ecx2196; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02197; X64-NEXT:    movl $65535, %eax # imm = 0xFFFF2198; X64-NEXT:    cmovbel %ecx, %eax2199; X64-NEXT:    # kill: def $ax killed $ax killed $eax2200; X64-NEXT:    popq %rcx2201; X64-NEXT:    retq2202    %x = call i16 @llvm.fptoui.sat.i16.f16(half %f)2203    ret i16 %x2204}2205 2206define i19 @test_unsigned_i19_f16(half %f) nounwind {2207; X86-X87-LABEL: test_unsigned_i19_f16:2208; X86-X87:       # %bb.0:2209; X86-X87-NEXT:    subl $28, %esp2210; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2211; X86-X87-NEXT:    movl %eax, (%esp)2212; X86-X87-NEXT:    calll __extendhfsf22213; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2214; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2215; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002216; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2217; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2218; X86-X87-NEXT:    fld %st(0)2219; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)2220; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2221; X86-X87-NEXT:    fldz2222; X86-X87-NEXT:    fxch %st(1)2223; X86-X87-NEXT:    fucom %st(1)2224; X86-X87-NEXT:    fstp %st(1)2225; X86-X87-NEXT:    fnstsw %ax2226; X86-X87-NEXT:    xorl %ecx, %ecx2227; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2228; X86-X87-NEXT:    sahf2229; X86-X87-NEXT:    jb .LBB24_22230; X86-X87-NEXT:  # %bb.1:2231; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2232; X86-X87-NEXT:  .LBB24_2:2233; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2234; X86-X87-NEXT:    fxch %st(1)2235; X86-X87-NEXT:    fucompp2236; X86-X87-NEXT:    fnstsw %ax2237; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2238; X86-X87-NEXT:    sahf2239; X86-X87-NEXT:    movl $524287, %eax # imm = 0x7FFFF2240; X86-X87-NEXT:    ja .LBB24_42241; X86-X87-NEXT:  # %bb.3:2242; X86-X87-NEXT:    movl %ecx, %eax2243; X86-X87-NEXT:  .LBB24_4:2244; X86-X87-NEXT:    addl $28, %esp2245; X86-X87-NEXT:    retl2246;2247; X86-SSE-LABEL: test_unsigned_i19_f16:2248; X86-SSE:       # %bb.0:2249; X86-SSE-NEXT:    subl $12, %esp2250; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02251; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2252; X86-SSE-NEXT:    movw %ax, (%esp)2253; X86-SSE-NEXT:    calll __extendhfsf22254; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2255; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2256; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2257; X86-SSE-NEXT:    movl %eax, %ecx2258; X86-SSE-NEXT:    sarl $31, %ecx2259; X86-SSE-NEXT:    movaps %xmm0, %xmm12260; X86-SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm12261; X86-SSE-NEXT:    cvttss2si %xmm1, %edx2262; X86-SSE-NEXT:    andl %ecx, %edx2263; X86-SSE-NEXT:    orl %eax, %edx2264; X86-SSE-NEXT:    xorl %ecx, %ecx2265; X86-SSE-NEXT:    xorps %xmm1, %xmm12266; X86-SSE-NEXT:    ucomiss %xmm1, %xmm02267; X86-SSE-NEXT:    cmovael %edx, %ecx2268; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02269; X86-SSE-NEXT:    movl $524287, %eax # imm = 0x7FFFF2270; X86-SSE-NEXT:    cmovbel %ecx, %eax2271; X86-SSE-NEXT:    addl $12, %esp2272; X86-SSE-NEXT:    retl2273;2274; X64-LABEL: test_unsigned_i19_f16:2275; X64:       # %bb.0:2276; X64-NEXT:    pushq %rax2277; X64-NEXT:    callq __extendhfsf2@PLT2278; X64-NEXT:    cvttss2si %xmm0, %rax2279; X64-NEXT:    xorl %ecx, %ecx2280; X64-NEXT:    xorps %xmm1, %xmm12281; X64-NEXT:    ucomiss %xmm1, %xmm02282; X64-NEXT:    cmovael %eax, %ecx2283; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02284; X64-NEXT:    movl $524287, %eax # imm = 0x7FFFF2285; X64-NEXT:    cmovbel %ecx, %eax2286; X64-NEXT:    popq %rcx2287; X64-NEXT:    retq2288    %x = call i19 @llvm.fptoui.sat.i19.f16(half %f)2289    ret i19 %x2290}2291 2292define i32 @test_unsigned_i32_f16(half %f) nounwind {2293; X86-X87-LABEL: test_unsigned_i32_f16:2294; X86-X87:       # %bb.0:2295; X86-X87-NEXT:    subl $28, %esp2296; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2297; X86-X87-NEXT:    movl %eax, (%esp)2298; X86-X87-NEXT:    calll __extendhfsf22299; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2300; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2301; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002302; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2303; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2304; X86-X87-NEXT:    fld %st(0)2305; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)2306; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2307; X86-X87-NEXT:    fldz2308; X86-X87-NEXT:    fxch %st(1)2309; X86-X87-NEXT:    fucom %st(1)2310; X86-X87-NEXT:    fstp %st(1)2311; X86-X87-NEXT:    fnstsw %ax2312; X86-X87-NEXT:    xorl %ecx, %ecx2313; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2314; X86-X87-NEXT:    sahf2315; X86-X87-NEXT:    jb .LBB25_22316; X86-X87-NEXT:  # %bb.1:2317; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2318; X86-X87-NEXT:  .LBB25_2:2319; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2320; X86-X87-NEXT:    fxch %st(1)2321; X86-X87-NEXT:    fucompp2322; X86-X87-NEXT:    fnstsw %ax2323; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2324; X86-X87-NEXT:    sahf2325; X86-X87-NEXT:    movl $-1, %eax2326; X86-X87-NEXT:    ja .LBB25_42327; X86-X87-NEXT:  # %bb.3:2328; X86-X87-NEXT:    movl %ecx, %eax2329; X86-X87-NEXT:  .LBB25_4:2330; X86-X87-NEXT:    addl $28, %esp2331; X86-X87-NEXT:    retl2332;2333; X86-SSE-LABEL: test_unsigned_i32_f16:2334; X86-SSE:       # %bb.0:2335; X86-SSE-NEXT:    subl $12, %esp2336; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02337; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2338; X86-SSE-NEXT:    movw %ax, (%esp)2339; X86-SSE-NEXT:    calll __extendhfsf22340; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2341; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2342; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2343; X86-SSE-NEXT:    movl %eax, %ecx2344; X86-SSE-NEXT:    sarl $31, %ecx2345; X86-SSE-NEXT:    movaps %xmm0, %xmm12346; X86-SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm12347; X86-SSE-NEXT:    cvttss2si %xmm1, %edx2348; X86-SSE-NEXT:    andl %ecx, %edx2349; X86-SSE-NEXT:    orl %eax, %edx2350; X86-SSE-NEXT:    xorl %ecx, %ecx2351; X86-SSE-NEXT:    xorps %xmm1, %xmm12352; X86-SSE-NEXT:    ucomiss %xmm1, %xmm02353; X86-SSE-NEXT:    cmovael %edx, %ecx2354; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02355; X86-SSE-NEXT:    movl $-1, %eax2356; X86-SSE-NEXT:    cmovbel %ecx, %eax2357; X86-SSE-NEXT:    addl $12, %esp2358; X86-SSE-NEXT:    retl2359;2360; X64-LABEL: test_unsigned_i32_f16:2361; X64:       # %bb.0:2362; X64-NEXT:    pushq %rax2363; X64-NEXT:    callq __extendhfsf2@PLT2364; X64-NEXT:    cvttss2si %xmm0, %rax2365; X64-NEXT:    xorl %ecx, %ecx2366; X64-NEXT:    xorps %xmm1, %xmm12367; X64-NEXT:    ucomiss %xmm1, %xmm02368; X64-NEXT:    cmovael %eax, %ecx2369; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02370; X64-NEXT:    movl $-1, %eax2371; X64-NEXT:    cmovbel %ecx, %eax2372; X64-NEXT:    popq %rcx2373; X64-NEXT:    retq2374    %x = call i32 @llvm.fptoui.sat.i32.f16(half %f)2375    ret i32 %x2376}2377 2378define i50 @test_unsigned_i50_f16(half %f) nounwind {2379; X86-X87-LABEL: test_unsigned_i50_f16:2380; X86-X87:       # %bb.0:2381; X86-X87-NEXT:    pushl %esi2382; X86-X87-NEXT:    subl $24, %esp2383; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2384; X86-X87-NEXT:    movl %eax, (%esp)2385; X86-X87-NEXT:    calll __extendhfsf22386; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2387; X86-X87-NEXT:    fxch %st(1)2388; X86-X87-NEXT:    fucom %st(1)2389; X86-X87-NEXT:    fnstsw %ax2390; X86-X87-NEXT:    xorl %ecx, %ecx2391; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2392; X86-X87-NEXT:    sahf2393; X86-X87-NEXT:    setae %al2394; X86-X87-NEXT:    fldz2395; X86-X87-NEXT:    jae .LBB26_22396; X86-X87-NEXT:  # %bb.1:2397; X86-X87-NEXT:    fstp %st(2)2398; X86-X87-NEXT:    fld %st(1)2399; X86-X87-NEXT:    fxch %st(2)2400; X86-X87-NEXT:  .LBB26_2:2401; X86-X87-NEXT:    fxch %st(2)2402; X86-X87-NEXT:    fsubr %st(1), %st2403; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2404; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx2405; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC002406; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)2407; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2408; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)2409; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2410; X86-X87-NEXT:    movb %al, %cl2411; X86-X87-NEXT:    shll $31, %ecx2412; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx2413; X86-X87-NEXT:    fucom %st(1)2414; X86-X87-NEXT:    fstp %st(1)2415; X86-X87-NEXT:    fnstsw %ax2416; X86-X87-NEXT:    xorl %edx, %edx2417; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2418; X86-X87-NEXT:    sahf2419; X86-X87-NEXT:    movl $0, %esi2420; X86-X87-NEXT:    jb .LBB26_42421; X86-X87-NEXT:  # %bb.3:2422; X86-X87-NEXT:    movl %ecx, %esi2423; X86-X87-NEXT:  .LBB26_4:2424; X86-X87-NEXT:    jb .LBB26_62425; X86-X87-NEXT:  # %bb.5:2426; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx2427; X86-X87-NEXT:  .LBB26_6:2428; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2429; X86-X87-NEXT:    fxch %st(1)2430; X86-X87-NEXT:    fucompp2431; X86-X87-NEXT:    fnstsw %ax2432; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2433; X86-X87-NEXT:    sahf2434; X86-X87-NEXT:    movl $-1, %eax2435; X86-X87-NEXT:    ja .LBB26_82436; X86-X87-NEXT:  # %bb.7:2437; X86-X87-NEXT:    movl %edx, %eax2438; X86-X87-NEXT:  .LBB26_8:2439; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF2440; X86-X87-NEXT:    ja .LBB26_102441; X86-X87-NEXT:  # %bb.9:2442; X86-X87-NEXT:    movl %esi, %edx2443; X86-X87-NEXT:  .LBB26_10:2444; X86-X87-NEXT:    addl $24, %esp2445; X86-X87-NEXT:    popl %esi2446; X86-X87-NEXT:    retl2447;2448; X86-SSE-LABEL: test_unsigned_i50_f16:2449; X86-SSE:       # %bb.0:2450; X86-SSE-NEXT:    pushl %esi2451; X86-SSE-NEXT:    subl $24, %esp2452; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02453; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2454; X86-SSE-NEXT:    movw %ax, (%esp)2455; X86-SSE-NEXT:    calll __extendhfsf22456; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2457; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2458; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]2459; X86-SSE-NEXT:    ucomiss %xmm2, %xmm02460; X86-SSE-NEXT:    xorps %xmm1, %xmm12461; X86-SSE-NEXT:    jae .LBB26_22462; X86-SSE-NEXT:  # %bb.1:2463; X86-SSE-NEXT:    xorps %xmm2, %xmm22464; X86-SSE-NEXT:  .LBB26_2:2465; X86-SSE-NEXT:    movaps %xmm0, %xmm32466; X86-SSE-NEXT:    subss %xmm2, %xmm32467; X86-SSE-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)2468; X86-SSE-NEXT:    setae %cl2469; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)2470; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)2471; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2472; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC002473; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)2474; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)2475; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)2476; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)2477; X86-SSE-NEXT:    xorl %eax, %eax2478; X86-SSE-NEXT:    ucomiss %xmm1, %xmm02479; X86-SSE-NEXT:    movl $0, %esi2480; X86-SSE-NEXT:    jb .LBB26_42481; X86-SSE-NEXT:  # %bb.3:2482; X86-SSE-NEXT:    movzbl %cl, %eax2483; X86-SSE-NEXT:    shll $31, %eax2484; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax2485; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi2486; X86-SSE-NEXT:  .LBB26_4:2487; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02488; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF2489; X86-SSE-NEXT:    cmovbel %eax, %edx2490; X86-SSE-NEXT:    movl $-1, %eax2491; X86-SSE-NEXT:    cmovbel %esi, %eax2492; X86-SSE-NEXT:    addl $24, %esp2493; X86-SSE-NEXT:    popl %esi2494; X86-SSE-NEXT:    retl2495;2496; X64-LABEL: test_unsigned_i50_f16:2497; X64:       # %bb.0:2498; X64-NEXT:    pushq %rax2499; X64-NEXT:    callq __extendhfsf2@PLT2500; X64-NEXT:    cvttss2si %xmm0, %rax2501; X64-NEXT:    movq %rax, %rcx2502; X64-NEXT:    sarq $63, %rcx2503; X64-NEXT:    movaps %xmm0, %xmm12504; X64-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12505; X64-NEXT:    cvttss2si %xmm1, %rdx2506; X64-NEXT:    andq %rcx, %rdx2507; X64-NEXT:    orq %rax, %rdx2508; X64-NEXT:    xorl %ecx, %ecx2509; X64-NEXT:    xorps %xmm1, %xmm12510; X64-NEXT:    ucomiss %xmm1, %xmm02511; X64-NEXT:    cmovaeq %rdx, %rcx2512; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02513; X64-NEXT:    movabsq $1125899906842623, %rax # imm = 0x3FFFFFFFFFFFF2514; X64-NEXT:    cmovbeq %rcx, %rax2515; X64-NEXT:    popq %rcx2516; X64-NEXT:    retq2517    %x = call i50 @llvm.fptoui.sat.i50.f16(half %f)2518    ret i50 %x2519}2520 2521define i64 @test_unsigned_i64_f16(half %f) nounwind {2522; X86-X87-LABEL: test_unsigned_i64_f16:2523; X86-X87:       # %bb.0:2524; X86-X87-NEXT:    pushl %edi2525; X86-X87-NEXT:    pushl %esi2526; X86-X87-NEXT:    subl $20, %esp2527; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2528; X86-X87-NEXT:    movl %eax, (%esp)2529; X86-X87-NEXT:    calll __extendhfsf22530; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2531; X86-X87-NEXT:    fxch %st(1)2532; X86-X87-NEXT:    fucom %st(1)2533; X86-X87-NEXT:    fnstsw %ax2534; X86-X87-NEXT:    xorl %ecx, %ecx2535; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2536; X86-X87-NEXT:    sahf2537; X86-X87-NEXT:    setae %al2538; X86-X87-NEXT:    fldz2539; X86-X87-NEXT:    jae .LBB27_22540; X86-X87-NEXT:  # %bb.1:2541; X86-X87-NEXT:    fstp %st(2)2542; X86-X87-NEXT:    fld %st(1)2543; X86-X87-NEXT:    fxch %st(2)2544; X86-X87-NEXT:  .LBB27_2:2545; X86-X87-NEXT:    fxch %st(2)2546; X86-X87-NEXT:    fsubr %st(1), %st2547; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2548; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx2549; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC002550; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)2551; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2552; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)2553; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2554; X86-X87-NEXT:    movb %al, %cl2555; X86-X87-NEXT:    shll $31, %ecx2556; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx2557; X86-X87-NEXT:    fucom %st(1)2558; X86-X87-NEXT:    fstp %st(1)2559; X86-X87-NEXT:    fnstsw %ax2560; X86-X87-NEXT:    xorl %esi, %esi2561; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2562; X86-X87-NEXT:    sahf2563; X86-X87-NEXT:    movl $0, %edi2564; X86-X87-NEXT:    jb .LBB27_42565; X86-X87-NEXT:  # %bb.3:2566; X86-X87-NEXT:    movl %ecx, %edi2567; X86-X87-NEXT:  .LBB27_4:2568; X86-X87-NEXT:    jb .LBB27_62569; X86-X87-NEXT:  # %bb.5:2570; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi2571; X86-X87-NEXT:  .LBB27_6:2572; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2573; X86-X87-NEXT:    fxch %st(1)2574; X86-X87-NEXT:    fucompp2575; X86-X87-NEXT:    fnstsw %ax2576; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2577; X86-X87-NEXT:    sahf2578; X86-X87-NEXT:    movl $-1, %eax2579; X86-X87-NEXT:    movl $-1, %edx2580; X86-X87-NEXT:    ja .LBB27_82581; X86-X87-NEXT:  # %bb.7:2582; X86-X87-NEXT:    movl %esi, %eax2583; X86-X87-NEXT:    movl %edi, %edx2584; X86-X87-NEXT:  .LBB27_8:2585; X86-X87-NEXT:    addl $20, %esp2586; X86-X87-NEXT:    popl %esi2587; X86-X87-NEXT:    popl %edi2588; X86-X87-NEXT:    retl2589;2590; X86-SSE-LABEL: test_unsigned_i64_f16:2591; X86-SSE:       # %bb.0:2592; X86-SSE-NEXT:    subl $28, %esp2593; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02594; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2595; X86-SSE-NEXT:    movw %ax, (%esp)2596; X86-SSE-NEXT:    calll __extendhfsf22597; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2598; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2599; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]2600; X86-SSE-NEXT:    ucomiss %xmm2, %xmm02601; X86-SSE-NEXT:    xorps %xmm1, %xmm12602; X86-SSE-NEXT:    jae .LBB27_22603; X86-SSE-NEXT:  # %bb.1:2604; X86-SSE-NEXT:    xorps %xmm2, %xmm22605; X86-SSE-NEXT:  .LBB27_2:2606; X86-SSE-NEXT:    movaps %xmm0, %xmm32607; X86-SSE-NEXT:    subss %xmm2, %xmm32608; X86-SSE-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)2609; X86-SSE-NEXT:    setae %cl2610; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)2611; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)2612; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2613; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC002614; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)2615; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)2616; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)2617; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)2618; X86-SSE-NEXT:    xorl %edx, %edx2619; X86-SSE-NEXT:    ucomiss %xmm1, %xmm02620; X86-SSE-NEXT:    movl $0, %eax2621; X86-SSE-NEXT:    jb .LBB27_42622; X86-SSE-NEXT:  # %bb.3:2623; X86-SSE-NEXT:    movzbl %cl, %edx2624; X86-SSE-NEXT:    shll $31, %edx2625; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %edx2626; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax2627; X86-SSE-NEXT:  .LBB27_4:2628; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02629; X86-SSE-NEXT:    movl $-1, %ecx2630; X86-SSE-NEXT:    cmoval %ecx, %edx2631; X86-SSE-NEXT:    cmoval %ecx, %eax2632; X86-SSE-NEXT:    addl $28, %esp2633; X86-SSE-NEXT:    retl2634;2635; X64-LABEL: test_unsigned_i64_f16:2636; X64:       # %bb.0:2637; X64-NEXT:    pushq %rax2638; X64-NEXT:    callq __extendhfsf2@PLT2639; X64-NEXT:    cvttss2si %xmm0, %rax2640; X64-NEXT:    movq %rax, %rcx2641; X64-NEXT:    sarq $63, %rcx2642; X64-NEXT:    movaps %xmm0, %xmm12643; X64-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12644; X64-NEXT:    cvttss2si %xmm1, %rdx2645; X64-NEXT:    andq %rcx, %rdx2646; X64-NEXT:    orq %rax, %rdx2647; X64-NEXT:    xorl %ecx, %ecx2648; X64-NEXT:    xorps %xmm1, %xmm12649; X64-NEXT:    ucomiss %xmm1, %xmm02650; X64-NEXT:    cmovaeq %rdx, %rcx2651; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02652; X64-NEXT:    movq $-1, %rax2653; X64-NEXT:    cmovbeq %rcx, %rax2654; X64-NEXT:    popq %rcx2655; X64-NEXT:    retq2656    %x = call i64 @llvm.fptoui.sat.i64.f16(half %f)2657    ret i64 %x2658}2659 2660define i100 @test_unsigned_i100_f16(half %f) nounwind {2661; X86-X87-LABEL: test_unsigned_i100_f16:2662; X86-X87:       # %bb.0:2663; X86-X87-NEXT:    pushl %ebp2664; X86-X87-NEXT:    pushl %ebx2665; X86-X87-NEXT:    pushl %edi2666; X86-X87-NEXT:    pushl %esi2667; X86-X87-NEXT:    subl $44, %esp2668; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2669; X86-X87-NEXT:    movl %eax, (%esp)2670; X86-X87-NEXT:    calll __extendhfsf22671; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2672; X86-X87-NEXT:    movl %eax, (%esp)2673; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)2674; X86-X87-NEXT:    fldz2675; X86-X87-NEXT:    fxch %st(1)2676; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill2677; X86-X87-NEXT:    fucompp2678; X86-X87-NEXT:    fnstsw %ax2679; X86-X87-NEXT:    movl %eax, %ebx2680; X86-X87-NEXT:    calll __fixunssfti2681; X86-X87-NEXT:    subl $4, %esp2682; X86-X87-NEXT:    xorl %edi, %edi2683; X86-X87-NEXT:    movb %bh, %ah2684; X86-X87-NEXT:    sahf2685; X86-X87-NEXT:    movl $0, %eax2686; X86-X87-NEXT:    jb .LBB28_22687; X86-X87-NEXT:  # %bb.1:2688; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax2689; X86-X87-NEXT:  .LBB28_2:2690; X86-X87-NEXT:    movl $0, %esi2691; X86-X87-NEXT:    movl $0, %ebx2692; X86-X87-NEXT:    jb .LBB28_42693; X86-X87-NEXT:  # %bb.3:2694; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx2695; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi2696; X86-X87-NEXT:  .LBB28_4:2697; X86-X87-NEXT:    jb .LBB28_62698; X86-X87-NEXT:  # %bb.5:2699; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi2700; X86-X87-NEXT:  .LBB28_6:2701; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2702; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2703; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2704; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload2705; X86-X87-NEXT:    fucompp2706; X86-X87-NEXT:    fnstsw %ax2707; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2708; X86-X87-NEXT:    sahf2709; X86-X87-NEXT:    movl $15, %eax2710; X86-X87-NEXT:    ja .LBB28_82711; X86-X87-NEXT:  # %bb.7:2712; X86-X87-NEXT:    movl %edi, %eax2713; X86-X87-NEXT:  .LBB28_8:2714; X86-X87-NEXT:    movl $-1, %edi2715; X86-X87-NEXT:    movl $-1, %ebp2716; X86-X87-NEXT:    movl $-1, %edx2717; X86-X87-NEXT:    ja .LBB28_102718; X86-X87-NEXT:  # %bb.9:2719; X86-X87-NEXT:    movl %ebx, %edi2720; X86-X87-NEXT:    movl %esi, %ebp2721; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2722; X86-X87-NEXT:  .LBB28_10:2723; X86-X87-NEXT:    movl %edx, 8(%ecx)2724; X86-X87-NEXT:    movl %ebp, 4(%ecx)2725; X86-X87-NEXT:    movl %edi, (%ecx)2726; X86-X87-NEXT:    andl $15, %eax2727; X86-X87-NEXT:    movb %al, 12(%ecx)2728; X86-X87-NEXT:    movl %ecx, %eax2729; X86-X87-NEXT:    addl $44, %esp2730; X86-X87-NEXT:    popl %esi2731; X86-X87-NEXT:    popl %edi2732; X86-X87-NEXT:    popl %ebx2733; X86-X87-NEXT:    popl %ebp2734; X86-X87-NEXT:    retl $42735;2736; X86-SSE-LABEL: test_unsigned_i100_f16:2737; X86-SSE:       # %bb.0:2738; X86-SSE-NEXT:    pushl %ebx2739; X86-SSE-NEXT:    pushl %edi2740; X86-SSE-NEXT:    pushl %esi2741; X86-SSE-NEXT:    subl $32, %esp2742; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02743; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi2744; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2745; X86-SSE-NEXT:    movw %ax, (%esp)2746; X86-SSE-NEXT:    calll __extendhfsf22747; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax2748; X86-SSE-NEXT:    movl %eax, (%esp)2749; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2750; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2751; X86-SSE-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2752; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)2753; X86-SSE-NEXT:    calll __fixunssfti2754; X86-SSE-NEXT:    subl $4, %esp2755; X86-SSE-NEXT:    xorl %eax, %eax2756; X86-SSE-NEXT:    xorps %xmm0, %xmm02757; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 4-byte Reload2758; X86-SSE-NEXT:    # xmm1 = mem[0],zero,zero,zero2759; X86-SSE-NEXT:    ucomiss %xmm0, %xmm12760; X86-SSE-NEXT:    movaps %xmm1, %xmm02761; X86-SSE-NEXT:    movl $0, %ecx2762; X86-SSE-NEXT:    movl $0, %edx2763; X86-SSE-NEXT:    movl $0, %edi2764; X86-SSE-NEXT:    jb .LBB28_22765; X86-SSE-NEXT:  # %bb.1:2766; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax2767; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx2768; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx2769; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi2770; X86-SSE-NEXT:  .LBB28_2:2771; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02772; X86-SSE-NEXT:    movl $15, %ebx2773; X86-SSE-NEXT:    cmovbel %edi, %ebx2774; X86-SSE-NEXT:    movl $-1, %edi2775; X86-SSE-NEXT:    cmoval %edi, %edx2776; X86-SSE-NEXT:    cmoval %edi, %ecx2777; X86-SSE-NEXT:    cmoval %edi, %eax2778; X86-SSE-NEXT:    movl %eax, 8(%esi)2779; X86-SSE-NEXT:    movl %ecx, 4(%esi)2780; X86-SSE-NEXT:    movl %edx, (%esi)2781; X86-SSE-NEXT:    andl $15, %ebx2782; X86-SSE-NEXT:    movb %bl, 12(%esi)2783; X86-SSE-NEXT:    movl %esi, %eax2784; X86-SSE-NEXT:    addl $32, %esp2785; X86-SSE-NEXT:    popl %esi2786; X86-SSE-NEXT:    popl %edi2787; X86-SSE-NEXT:    popl %ebx2788; X86-SSE-NEXT:    retl $42789;2790; X64-LABEL: test_unsigned_i100_f16:2791; X64:       # %bb.0:2792; X64-NEXT:    pushq %rax2793; X64-NEXT:    callq __extendhfsf2@PLT2794; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2795; X64-NEXT:    callq __fixunssfti@PLT2796; X64-NEXT:    xorl %ecx, %ecx2797; X64-NEXT:    xorps %xmm0, %xmm02798; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload2799; X64-NEXT:    # xmm1 = mem[0],zero,zero,zero2800; X64-NEXT:    ucomiss %xmm0, %xmm12801; X64-NEXT:    cmovbq %rcx, %rdx2802; X64-NEXT:    cmovbq %rcx, %rax2803; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12804; X64-NEXT:    movq $-1, %rcx2805; X64-NEXT:    cmovaq %rcx, %rax2806; X64-NEXT:    movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF2807; X64-NEXT:    cmovaq %rcx, %rdx2808; X64-NEXT:    popq %rcx2809; X64-NEXT:    retq2810    %x = call i100 @llvm.fptoui.sat.i100.f16(half %f)2811    ret i100 %x2812}2813 2814define i128 @test_unsigned_i128_f16(half %f) nounwind {2815; X86-X87-LABEL: test_unsigned_i128_f16:2816; X86-X87:       # %bb.0:2817; X86-X87-NEXT:    pushl %ebp2818; X86-X87-NEXT:    pushl %ebx2819; X86-X87-NEXT:    pushl %edi2820; X86-X87-NEXT:    pushl %esi2821; X86-X87-NEXT:    subl $60, %esp2822; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2823; X86-X87-NEXT:    movl %eax, (%esp)2824; X86-X87-NEXT:    calll __extendhfsf22825; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2826; X86-X87-NEXT:    movl %eax, (%esp)2827; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)2828; X86-X87-NEXT:    fldz2829; X86-X87-NEXT:    fxch %st(1)2830; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill2831; X86-X87-NEXT:    fucompp2832; X86-X87-NEXT:    fnstsw %ax2833; X86-X87-NEXT:    movl %eax, %ebx2834; X86-X87-NEXT:    calll __fixunssfti2835; X86-X87-NEXT:    subl $4, %esp2836; X86-X87-NEXT:    xorl %edx, %edx2837; X86-X87-NEXT:    movb %bh, %ah2838; X86-X87-NEXT:    sahf2839; X86-X87-NEXT:    movl $0, %eax2840; X86-X87-NEXT:    jb .LBB29_22841; X86-X87-NEXT:  # %bb.1:2842; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax2843; X86-X87-NEXT:  .LBB29_2:2844; X86-X87-NEXT:    movl $0, %ecx2845; X86-X87-NEXT:    jb .LBB29_42846; X86-X87-NEXT:  # %bb.3:2847; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2848; X86-X87-NEXT:  .LBB29_4:2849; X86-X87-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2850; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2851; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2852; X86-X87-NEXT:    movl $0, %ebx2853; X86-X87-NEXT:    jb .LBB29_62854; X86-X87-NEXT:  # %bb.5:2855; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx2856; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx2857; X86-X87-NEXT:  .LBB29_6:2858; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2859; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload2860; X86-X87-NEXT:    fucompp2861; X86-X87-NEXT:    fnstsw %ax2862; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2863; X86-X87-NEXT:    sahf2864; X86-X87-NEXT:    movl $-1, %eax2865; X86-X87-NEXT:    movl $-1, %ebp2866; X86-X87-NEXT:    movl $-1, %edi2867; X86-X87-NEXT:    movl $-1, %esi2868; X86-X87-NEXT:    ja .LBB29_82869; X86-X87-NEXT:  # %bb.7:2870; X86-X87-NEXT:    movl %ebx, %eax2871; X86-X87-NEXT:    movl %edx, %ebp2872; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload2873; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload2874; X86-X87-NEXT:  .LBB29_8:2875; X86-X87-NEXT:    movl %esi, 12(%ecx)2876; X86-X87-NEXT:    movl %edi, 8(%ecx)2877; X86-X87-NEXT:    movl %ebp, 4(%ecx)2878; X86-X87-NEXT:    movl %eax, (%ecx)2879; X86-X87-NEXT:    movl %ecx, %eax2880; X86-X87-NEXT:    addl $60, %esp2881; X86-X87-NEXT:    popl %esi2882; X86-X87-NEXT:    popl %edi2883; X86-X87-NEXT:    popl %ebx2884; X86-X87-NEXT:    popl %ebp2885; X86-X87-NEXT:    retl $42886;2887; X86-SSE-LABEL: test_unsigned_i128_f16:2888; X86-SSE:       # %bb.0:2889; X86-SSE-NEXT:    pushl %ebx2890; X86-SSE-NEXT:    pushl %edi2891; X86-SSE-NEXT:    pushl %esi2892; X86-SSE-NEXT:    subl $32, %esp2893; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02894; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi2895; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2896; X86-SSE-NEXT:    movw %ax, (%esp)2897; X86-SSE-NEXT:    calll __extendhfsf22898; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax2899; X86-SSE-NEXT:    movl %eax, (%esp)2900; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2901; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2902; X86-SSE-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2903; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)2904; X86-SSE-NEXT:    calll __fixunssfti2905; X86-SSE-NEXT:    subl $4, %esp2906; X86-SSE-NEXT:    xorl %eax, %eax2907; X86-SSE-NEXT:    xorps %xmm0, %xmm02908; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 4-byte Reload2909; X86-SSE-NEXT:    # xmm1 = mem[0],zero,zero,zero2910; X86-SSE-NEXT:    ucomiss %xmm0, %xmm12911; X86-SSE-NEXT:    movaps %xmm1, %xmm02912; X86-SSE-NEXT:    movl $0, %ecx2913; X86-SSE-NEXT:    movl $0, %edx2914; X86-SSE-NEXT:    movl $0, %edi2915; X86-SSE-NEXT:    jb .LBB29_22916; X86-SSE-NEXT:  # %bb.1:2917; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax2918; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx2919; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx2920; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi2921; X86-SSE-NEXT:  .LBB29_2:2922; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02923; X86-SSE-NEXT:    movl $-1, %ebx2924; X86-SSE-NEXT:    cmoval %ebx, %edi2925; X86-SSE-NEXT:    cmoval %ebx, %edx2926; X86-SSE-NEXT:    cmoval %ebx, %ecx2927; X86-SSE-NEXT:    cmoval %ebx, %eax2928; X86-SSE-NEXT:    movl %eax, 12(%esi)2929; X86-SSE-NEXT:    movl %ecx, 8(%esi)2930; X86-SSE-NEXT:    movl %edx, 4(%esi)2931; X86-SSE-NEXT:    movl %edi, (%esi)2932; X86-SSE-NEXT:    movl %esi, %eax2933; X86-SSE-NEXT:    addl $32, %esp2934; X86-SSE-NEXT:    popl %esi2935; X86-SSE-NEXT:    popl %edi2936; X86-SSE-NEXT:    popl %ebx2937; X86-SSE-NEXT:    retl $42938;2939; X64-LABEL: test_unsigned_i128_f16:2940; X64:       # %bb.0:2941; X64-NEXT:    pushq %rax2942; X64-NEXT:    callq __extendhfsf2@PLT2943; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2944; X64-NEXT:    callq __fixunssfti@PLT2945; X64-NEXT:    xorl %ecx, %ecx2946; X64-NEXT:    xorps %xmm0, %xmm02947; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload2948; X64-NEXT:    # xmm1 = mem[0],zero,zero,zero2949; X64-NEXT:    ucomiss %xmm0, %xmm12950; X64-NEXT:    cmovbq %rcx, %rdx2951; X64-NEXT:    cmovbq %rcx, %rax2952; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12953; X64-NEXT:    movq $-1, %rcx2954; X64-NEXT:    cmovaq %rcx, %rax2955; X64-NEXT:    cmovaq %rcx, %rdx2956; X64-NEXT:    popq %rcx2957; X64-NEXT:    retq2958    %x = call i128 @llvm.fptoui.sat.i128.f16(half %f)2959    ret i128 %x2960}2961 2962;2963; 80-bit float to unsigned integer2964;2965 2966declare   i1 @llvm.fptoui.sat.i1.f80  (x86_fp80)2967declare   i8 @llvm.fptoui.sat.i8.f80  (x86_fp80)2968declare  i13 @llvm.fptoui.sat.i13.f80 (x86_fp80)2969declare  i16 @llvm.fptoui.sat.i16.f80 (x86_fp80)2970declare  i19 @llvm.fptoui.sat.i19.f80 (x86_fp80)2971declare  i32 @llvm.fptoui.sat.i32.f80 (x86_fp80)2972declare  i50 @llvm.fptoui.sat.i50.f80 (x86_fp80)2973declare  i64 @llvm.fptoui.sat.i64.f80 (x86_fp80)2974declare i100 @llvm.fptoui.sat.i100.f80(x86_fp80)2975declare i128 @llvm.fptoui.sat.i128.f80(x86_fp80)2976 2977define i1 @test_unsigned_i1_f80(x86_fp80 %f) nounwind {2978; X86-X87-LABEL: test_unsigned_i1_f80:2979; X86-X87:       # %bb.0:2980; X86-X87-NEXT:    subl $8, %esp2981; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)2982; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2983; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2984; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002985; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2986; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2987; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)2988; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2989; X86-X87-NEXT:    fldz2990; X86-X87-NEXT:    fxch %st(1)2991; X86-X87-NEXT:    fucom %st(1)2992; X86-X87-NEXT:    fstp %st(1)2993; X86-X87-NEXT:    fnstsw %ax2994; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2995; X86-X87-NEXT:    sahf2996; X86-X87-NEXT:    jb .LBB30_12997; X86-X87-NEXT:  # %bb.2:2998; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx2999; X86-X87-NEXT:    jmp .LBB30_33000; X86-X87-NEXT:  .LBB30_1:3001; X86-X87-NEXT:    xorl %ecx, %ecx3002; X86-X87-NEXT:  .LBB30_3:3003; X86-X87-NEXT:    fld13004; X86-X87-NEXT:    fxch %st(1)3005; X86-X87-NEXT:    fucompp3006; X86-X87-NEXT:    fnstsw %ax3007; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3008; X86-X87-NEXT:    sahf3009; X86-X87-NEXT:    movb $1, %al3010; X86-X87-NEXT:    ja .LBB30_53011; X86-X87-NEXT:  # %bb.4:3012; X86-X87-NEXT:    movl %ecx, %eax3013; X86-X87-NEXT:  .LBB30_5:3014; X86-X87-NEXT:    addl $8, %esp3015; X86-X87-NEXT:    retl3016;3017; X86-SSE-LABEL: test_unsigned_i1_f80:3018; X86-SSE:       # %bb.0:3019; X86-SSE-NEXT:    subl $8, %esp3020; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3021; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3022; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3023; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003024; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3025; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3026; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)3027; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3028; X86-SSE-NEXT:    movzbl {{[0-9]+}}(%esp), %eax3029; X86-SSE-NEXT:    xorl %ecx, %ecx3030; X86-SSE-NEXT:    fldz3031; X86-SSE-NEXT:    fxch %st(1)3032; X86-SSE-NEXT:    fucomi %st(1), %st3033; X86-SSE-NEXT:    fstp %st(1)3034; X86-SSE-NEXT:    cmovael %eax, %ecx3035; X86-SSE-NEXT:    fld13036; X86-SSE-NEXT:    fxch %st(1)3037; X86-SSE-NEXT:    fucompi %st(1), %st3038; X86-SSE-NEXT:    fstp %st(0)3039; X86-SSE-NEXT:    movl $1, %eax3040; X86-SSE-NEXT:    cmovbel %ecx, %eax3041; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax3042; X86-SSE-NEXT:    addl $8, %esp3043; X86-SSE-NEXT:    retl3044;3045; X64-LABEL: test_unsigned_i1_f80:3046; X64:       # %bb.0:3047; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3048; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3049; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3050; X64-NEXT:    orl $3072, %eax # imm = 0xC003051; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3052; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3053; X64-NEXT:    fists -{{[0-9]+}}(%rsp)3054; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3055; X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax3056; X64-NEXT:    xorl %ecx, %ecx3057; X64-NEXT:    fldz3058; X64-NEXT:    fxch %st(1)3059; X64-NEXT:    fucomi %st(1), %st3060; X64-NEXT:    fstp %st(1)3061; X64-NEXT:    cmovael %eax, %ecx3062; X64-NEXT:    fld13063; X64-NEXT:    fxch %st(1)3064; X64-NEXT:    fucompi %st(1), %st3065; X64-NEXT:    fstp %st(0)3066; X64-NEXT:    movl $1, %eax3067; X64-NEXT:    cmovbel %ecx, %eax3068; X64-NEXT:    # kill: def $al killed $al killed $eax3069; X64-NEXT:    retq3070    %x = call i1 @llvm.fptoui.sat.i1.f80(x86_fp80 %f)3071    ret i1 %x3072}3073 3074define i8 @test_unsigned_i8_f80(x86_fp80 %f) nounwind {3075; X86-X87-LABEL: test_unsigned_i8_f80:3076; X86-X87:       # %bb.0:3077; X86-X87-NEXT:    subl $8, %esp3078; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3079; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3080; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3081; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003082; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3083; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3084; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)3085; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3086; X86-X87-NEXT:    fldz3087; X86-X87-NEXT:    fxch %st(1)3088; X86-X87-NEXT:    fucom %st(1)3089; X86-X87-NEXT:    fstp %st(1)3090; X86-X87-NEXT:    fnstsw %ax3091; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3092; X86-X87-NEXT:    sahf3093; X86-X87-NEXT:    jb .LBB31_13094; X86-X87-NEXT:  # %bb.2:3095; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx3096; X86-X87-NEXT:    jmp .LBB31_33097; X86-X87-NEXT:  .LBB31_1:3098; X86-X87-NEXT:    xorl %ecx, %ecx3099; X86-X87-NEXT:  .LBB31_3:3100; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3101; X86-X87-NEXT:    fxch %st(1)3102; X86-X87-NEXT:    fucompp3103; X86-X87-NEXT:    fnstsw %ax3104; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3105; X86-X87-NEXT:    sahf3106; X86-X87-NEXT:    movb $-1, %al3107; X86-X87-NEXT:    ja .LBB31_53108; X86-X87-NEXT:  # %bb.4:3109; X86-X87-NEXT:    movl %ecx, %eax3110; X86-X87-NEXT:  .LBB31_5:3111; X86-X87-NEXT:    addl $8, %esp3112; X86-X87-NEXT:    retl3113;3114; X86-SSE-LABEL: test_unsigned_i8_f80:3115; X86-SSE:       # %bb.0:3116; X86-SSE-NEXT:    subl $8, %esp3117; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3118; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3119; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3120; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003121; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3122; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3123; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)3124; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3125; X86-SSE-NEXT:    movzbl {{[0-9]+}}(%esp), %eax3126; X86-SSE-NEXT:    xorl %ecx, %ecx3127; X86-SSE-NEXT:    fldz3128; X86-SSE-NEXT:    fxch %st(1)3129; X86-SSE-NEXT:    fucomi %st(1), %st3130; X86-SSE-NEXT:    fstp %st(1)3131; X86-SSE-NEXT:    cmovael %eax, %ecx3132; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3133; X86-SSE-NEXT:    fxch %st(1)3134; X86-SSE-NEXT:    fucompi %st(1), %st3135; X86-SSE-NEXT:    fstp %st(0)3136; X86-SSE-NEXT:    movl $255, %eax3137; X86-SSE-NEXT:    cmovbel %ecx, %eax3138; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax3139; X86-SSE-NEXT:    addl $8, %esp3140; X86-SSE-NEXT:    retl3141;3142; X64-LABEL: test_unsigned_i8_f80:3143; X64:       # %bb.0:3144; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3145; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3146; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3147; X64-NEXT:    orl $3072, %eax # imm = 0xC003148; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3149; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3150; X64-NEXT:    fists -{{[0-9]+}}(%rsp)3151; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3152; X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax3153; X64-NEXT:    xorl %ecx, %ecx3154; X64-NEXT:    fldz3155; X64-NEXT:    fxch %st(1)3156; X64-NEXT:    fucomi %st(1), %st3157; X64-NEXT:    fstp %st(1)3158; X64-NEXT:    cmovael %eax, %ecx3159; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3160; X64-NEXT:    fxch %st(1)3161; X64-NEXT:    fucompi %st(1), %st3162; X64-NEXT:    fstp %st(0)3163; X64-NEXT:    movl $255, %eax3164; X64-NEXT:    cmovbel %ecx, %eax3165; X64-NEXT:    # kill: def $al killed $al killed $eax3166; X64-NEXT:    retq3167    %x = call i8 @llvm.fptoui.sat.i8.f80(x86_fp80 %f)3168    ret i8 %x3169}3170 3171define i13 @test_unsigned_i13_f80(x86_fp80 %f) nounwind {3172; X86-X87-LABEL: test_unsigned_i13_f80:3173; X86-X87:       # %bb.0:3174; X86-X87-NEXT:    subl $8, %esp3175; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3176; X86-X87-NEXT:    fnstcw (%esp)3177; X86-X87-NEXT:    movzwl (%esp), %eax3178; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003179; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3180; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3181; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)3182; X86-X87-NEXT:    fldcw (%esp)3183; X86-X87-NEXT:    fldz3184; X86-X87-NEXT:    fxch %st(1)3185; X86-X87-NEXT:    fucom %st(1)3186; X86-X87-NEXT:    fstp %st(1)3187; X86-X87-NEXT:    fnstsw %ax3188; X86-X87-NEXT:    xorl %ecx, %ecx3189; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3190; X86-X87-NEXT:    sahf3191; X86-X87-NEXT:    jb .LBB32_23192; X86-X87-NEXT:  # %bb.1:3193; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx3194; X86-X87-NEXT:  .LBB32_2:3195; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3196; X86-X87-NEXT:    fxch %st(1)3197; X86-X87-NEXT:    fucompp3198; X86-X87-NEXT:    fnstsw %ax3199; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3200; X86-X87-NEXT:    sahf3201; X86-X87-NEXT:    movl $8191, %eax # imm = 0x1FFF3202; X86-X87-NEXT:    ja .LBB32_43203; X86-X87-NEXT:  # %bb.3:3204; X86-X87-NEXT:    movl %ecx, %eax3205; X86-X87-NEXT:  .LBB32_4:3206; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax3207; X86-X87-NEXT:    addl $8, %esp3208; X86-X87-NEXT:    retl3209;3210; X86-SSE-LABEL: test_unsigned_i13_f80:3211; X86-SSE:       # %bb.0:3212; X86-SSE-NEXT:    subl $8, %esp3213; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3214; X86-SSE-NEXT:    fnstcw (%esp)3215; X86-SSE-NEXT:    movzwl (%esp), %eax3216; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003217; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3218; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3219; X86-SSE-NEXT:    fistl {{[0-9]+}}(%esp)3220; X86-SSE-NEXT:    fldcw (%esp)3221; X86-SSE-NEXT:    xorl %ecx, %ecx3222; X86-SSE-NEXT:    fldz3223; X86-SSE-NEXT:    fxch %st(1)3224; X86-SSE-NEXT:    fucomi %st(1), %st3225; X86-SSE-NEXT:    fstp %st(1)3226; X86-SSE-NEXT:    jb .LBB32_23227; X86-SSE-NEXT:  # %bb.1:3228; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx3229; X86-SSE-NEXT:  .LBB32_2:3230; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3231; X86-SSE-NEXT:    fxch %st(1)3232; X86-SSE-NEXT:    fucompi %st(1), %st3233; X86-SSE-NEXT:    fstp %st(0)3234; X86-SSE-NEXT:    movl $8191, %eax # imm = 0x1FFF3235; X86-SSE-NEXT:    cmovbel %ecx, %eax3236; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax3237; X86-SSE-NEXT:    addl $8, %esp3238; X86-SSE-NEXT:    retl3239;3240; X64-LABEL: test_unsigned_i13_f80:3241; X64:       # %bb.0:3242; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3243; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3244; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3245; X64-NEXT:    orl $3072, %eax # imm = 0xC003246; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3247; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3248; X64-NEXT:    fistl -{{[0-9]+}}(%rsp)3249; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3250; X64-NEXT:    xorl %ecx, %ecx3251; X64-NEXT:    fldz3252; X64-NEXT:    fxch %st(1)3253; X64-NEXT:    fucomi %st(1), %st3254; X64-NEXT:    fstp %st(1)3255; X64-NEXT:    jb .LBB32_23256; X64-NEXT:  # %bb.1:3257; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx3258; X64-NEXT:  .LBB32_2:3259; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3260; X64-NEXT:    fxch %st(1)3261; X64-NEXT:    fucompi %st(1), %st3262; X64-NEXT:    fstp %st(0)3263; X64-NEXT:    movl $8191, %eax # imm = 0x1FFF3264; X64-NEXT:    cmovbel %ecx, %eax3265; X64-NEXT:    # kill: def $ax killed $ax killed $eax3266; X64-NEXT:    retq3267    %x = call i13 @llvm.fptoui.sat.i13.f80(x86_fp80 %f)3268    ret i13 %x3269}3270 3271define i16 @test_unsigned_i16_f80(x86_fp80 %f) nounwind {3272; X86-X87-LABEL: test_unsigned_i16_f80:3273; X86-X87:       # %bb.0:3274; X86-X87-NEXT:    subl $8, %esp3275; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3276; X86-X87-NEXT:    fnstcw (%esp)3277; X86-X87-NEXT:    movzwl (%esp), %eax3278; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003279; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3280; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3281; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)3282; X86-X87-NEXT:    fldcw (%esp)3283; X86-X87-NEXT:    fldz3284; X86-X87-NEXT:    fxch %st(1)3285; X86-X87-NEXT:    fucom %st(1)3286; X86-X87-NEXT:    fstp %st(1)3287; X86-X87-NEXT:    fnstsw %ax3288; X86-X87-NEXT:    xorl %ecx, %ecx3289; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3290; X86-X87-NEXT:    sahf3291; X86-X87-NEXT:    jb .LBB33_23292; X86-X87-NEXT:  # %bb.1:3293; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx3294; X86-X87-NEXT:  .LBB33_2:3295; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3296; X86-X87-NEXT:    fxch %st(1)3297; X86-X87-NEXT:    fucompp3298; X86-X87-NEXT:    fnstsw %ax3299; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3300; X86-X87-NEXT:    sahf3301; X86-X87-NEXT:    movl $65535, %eax # imm = 0xFFFF3302; X86-X87-NEXT:    ja .LBB33_43303; X86-X87-NEXT:  # %bb.3:3304; X86-X87-NEXT:    movl %ecx, %eax3305; X86-X87-NEXT:  .LBB33_4:3306; X86-X87-NEXT:    # kill: def $ax killed $ax killed $eax3307; X86-X87-NEXT:    addl $8, %esp3308; X86-X87-NEXT:    retl3309;3310; X86-SSE-LABEL: test_unsigned_i16_f80:3311; X86-SSE:       # %bb.0:3312; X86-SSE-NEXT:    subl $8, %esp3313; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3314; X86-SSE-NEXT:    fnstcw (%esp)3315; X86-SSE-NEXT:    movzwl (%esp), %eax3316; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003317; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3318; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3319; X86-SSE-NEXT:    fistl {{[0-9]+}}(%esp)3320; X86-SSE-NEXT:    fldcw (%esp)3321; X86-SSE-NEXT:    xorl %ecx, %ecx3322; X86-SSE-NEXT:    fldz3323; X86-SSE-NEXT:    fxch %st(1)3324; X86-SSE-NEXT:    fucomi %st(1), %st3325; X86-SSE-NEXT:    fstp %st(1)3326; X86-SSE-NEXT:    jb .LBB33_23327; X86-SSE-NEXT:  # %bb.1:3328; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx3329; X86-SSE-NEXT:  .LBB33_2:3330; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3331; X86-SSE-NEXT:    fxch %st(1)3332; X86-SSE-NEXT:    fucompi %st(1), %st3333; X86-SSE-NEXT:    fstp %st(0)3334; X86-SSE-NEXT:    movl $65535, %eax # imm = 0xFFFF3335; X86-SSE-NEXT:    cmovbel %ecx, %eax3336; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax3337; X86-SSE-NEXT:    addl $8, %esp3338; X86-SSE-NEXT:    retl3339;3340; X64-LABEL: test_unsigned_i16_f80:3341; X64:       # %bb.0:3342; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3343; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3344; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3345; X64-NEXT:    orl $3072, %eax # imm = 0xC003346; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3347; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3348; X64-NEXT:    fistl -{{[0-9]+}}(%rsp)3349; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3350; X64-NEXT:    xorl %ecx, %ecx3351; X64-NEXT:    fldz3352; X64-NEXT:    fxch %st(1)3353; X64-NEXT:    fucomi %st(1), %st3354; X64-NEXT:    fstp %st(1)3355; X64-NEXT:    jb .LBB33_23356; X64-NEXT:  # %bb.1:3357; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx3358; X64-NEXT:  .LBB33_2:3359; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3360; X64-NEXT:    fxch %st(1)3361; X64-NEXT:    fucompi %st(1), %st3362; X64-NEXT:    fstp %st(0)3363; X64-NEXT:    movl $65535, %eax # imm = 0xFFFF3364; X64-NEXT:    cmovbel %ecx, %eax3365; X64-NEXT:    # kill: def $ax killed $ax killed $eax3366; X64-NEXT:    retq3367    %x = call i16 @llvm.fptoui.sat.i16.f80(x86_fp80 %f)3368    ret i16 %x3369}3370 3371define i19 @test_unsigned_i19_f80(x86_fp80 %f) nounwind {3372; X86-X87-LABEL: test_unsigned_i19_f80:3373; X86-X87:       # %bb.0:3374; X86-X87-NEXT:    subl $20, %esp3375; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3376; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3377; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3378; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003379; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3380; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3381; X86-X87-NEXT:    fld %st(0)3382; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)3383; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3384; X86-X87-NEXT:    fldz3385; X86-X87-NEXT:    fxch %st(1)3386; X86-X87-NEXT:    fucom %st(1)3387; X86-X87-NEXT:    fstp %st(1)3388; X86-X87-NEXT:    fnstsw %ax3389; X86-X87-NEXT:    xorl %ecx, %ecx3390; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3391; X86-X87-NEXT:    sahf3392; X86-X87-NEXT:    jb .LBB34_23393; X86-X87-NEXT:  # %bb.1:3394; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx3395; X86-X87-NEXT:  .LBB34_2:3396; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3397; X86-X87-NEXT:    fxch %st(1)3398; X86-X87-NEXT:    fucompp3399; X86-X87-NEXT:    fnstsw %ax3400; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3401; X86-X87-NEXT:    sahf3402; X86-X87-NEXT:    movl $524287, %eax # imm = 0x7FFFF3403; X86-X87-NEXT:    ja .LBB34_43404; X86-X87-NEXT:  # %bb.3:3405; X86-X87-NEXT:    movl %ecx, %eax3406; X86-X87-NEXT:  .LBB34_4:3407; X86-X87-NEXT:    addl $20, %esp3408; X86-X87-NEXT:    retl3409;3410; X86-SSE-LABEL: test_unsigned_i19_f80:3411; X86-SSE:       # %bb.0:3412; X86-SSE-NEXT:    subl $20, %esp3413; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3414; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3415; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3416; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003417; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3418; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3419; X86-SSE-NEXT:    fld %st(0)3420; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)3421; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3422; X86-SSE-NEXT:    xorl %ecx, %ecx3423; X86-SSE-NEXT:    fldz3424; X86-SSE-NEXT:    fxch %st(1)3425; X86-SSE-NEXT:    fucomi %st(1), %st3426; X86-SSE-NEXT:    fstp %st(1)3427; X86-SSE-NEXT:    jb .LBB34_23428; X86-SSE-NEXT:  # %bb.1:3429; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx3430; X86-SSE-NEXT:  .LBB34_2:3431; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3432; X86-SSE-NEXT:    fxch %st(1)3433; X86-SSE-NEXT:    fucompi %st(1), %st3434; X86-SSE-NEXT:    fstp %st(0)3435; X86-SSE-NEXT:    movl $524287, %eax # imm = 0x7FFFF3436; X86-SSE-NEXT:    cmovbel %ecx, %eax3437; X86-SSE-NEXT:    addl $20, %esp3438; X86-SSE-NEXT:    retl3439;3440; X64-LABEL: test_unsigned_i19_f80:3441; X64:       # %bb.0:3442; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3443; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3444; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3445; X64-NEXT:    orl $3072, %eax # imm = 0xC003446; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3447; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3448; X64-NEXT:    fld %st(0)3449; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)3450; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3451; X64-NEXT:    xorl %ecx, %ecx3452; X64-NEXT:    fldz3453; X64-NEXT:    fxch %st(1)3454; X64-NEXT:    fucomi %st(1), %st3455; X64-NEXT:    fstp %st(1)3456; X64-NEXT:    jb .LBB34_23457; X64-NEXT:  # %bb.1:3458; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx3459; X64-NEXT:  .LBB34_2:3460; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3461; X64-NEXT:    fxch %st(1)3462; X64-NEXT:    fucompi %st(1), %st3463; X64-NEXT:    fstp %st(0)3464; X64-NEXT:    movl $524287, %eax # imm = 0x7FFFF3465; X64-NEXT:    cmovbel %ecx, %eax3466; X64-NEXT:    retq3467    %x = call i19 @llvm.fptoui.sat.i19.f80(x86_fp80 %f)3468    ret i19 %x3469}3470 3471define i32 @test_unsigned_i32_f80(x86_fp80 %f) nounwind {3472; X86-X87-LABEL: test_unsigned_i32_f80:3473; X86-X87:       # %bb.0:3474; X86-X87-NEXT:    subl $20, %esp3475; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3476; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3477; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3478; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003479; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3480; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3481; X86-X87-NEXT:    fld %st(0)3482; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)3483; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3484; X86-X87-NEXT:    fldz3485; X86-X87-NEXT:    fxch %st(1)3486; X86-X87-NEXT:    fucom %st(1)3487; X86-X87-NEXT:    fstp %st(1)3488; X86-X87-NEXT:    fnstsw %ax3489; X86-X87-NEXT:    xorl %ecx, %ecx3490; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3491; X86-X87-NEXT:    sahf3492; X86-X87-NEXT:    jb .LBB35_23493; X86-X87-NEXT:  # %bb.1:3494; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx3495; X86-X87-NEXT:  .LBB35_2:3496; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}3497; X86-X87-NEXT:    fxch %st(1)3498; X86-X87-NEXT:    fucompp3499; X86-X87-NEXT:    fnstsw %ax3500; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3501; X86-X87-NEXT:    sahf3502; X86-X87-NEXT:    movl $-1, %eax3503; X86-X87-NEXT:    ja .LBB35_43504; X86-X87-NEXT:  # %bb.3:3505; X86-X87-NEXT:    movl %ecx, %eax3506; X86-X87-NEXT:  .LBB35_4:3507; X86-X87-NEXT:    addl $20, %esp3508; X86-X87-NEXT:    retl3509;3510; X86-SSE-LABEL: test_unsigned_i32_f80:3511; X86-SSE:       # %bb.0:3512; X86-SSE-NEXT:    subl $20, %esp3513; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3514; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3515; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3516; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003517; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3518; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3519; X86-SSE-NEXT:    fld %st(0)3520; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)3521; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3522; X86-SSE-NEXT:    xorl %ecx, %ecx3523; X86-SSE-NEXT:    fldz3524; X86-SSE-NEXT:    fxch %st(1)3525; X86-SSE-NEXT:    fucomi %st(1), %st3526; X86-SSE-NEXT:    fstp %st(1)3527; X86-SSE-NEXT:    jb .LBB35_23528; X86-SSE-NEXT:  # %bb.1:3529; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx3530; X86-SSE-NEXT:  .LBB35_2:3531; X86-SSE-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}3532; X86-SSE-NEXT:    fxch %st(1)3533; X86-SSE-NEXT:    fucompi %st(1), %st3534; X86-SSE-NEXT:    fstp %st(0)3535; X86-SSE-NEXT:    movl $-1, %eax3536; X86-SSE-NEXT:    cmovbel %ecx, %eax3537; X86-SSE-NEXT:    addl $20, %esp3538; X86-SSE-NEXT:    retl3539;3540; X64-LABEL: test_unsigned_i32_f80:3541; X64:       # %bb.0:3542; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3543; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3544; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3545; X64-NEXT:    orl $3072, %eax # imm = 0xC003546; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3547; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3548; X64-NEXT:    fld %st(0)3549; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)3550; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3551; X64-NEXT:    xorl %ecx, %ecx3552; X64-NEXT:    fldz3553; X64-NEXT:    fxch %st(1)3554; X64-NEXT:    fucomi %st(1), %st3555; X64-NEXT:    fstp %st(1)3556; X64-NEXT:    jb .LBB35_23557; X64-NEXT:  # %bb.1:3558; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx3559; X64-NEXT:  .LBB35_2:3560; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3561; X64-NEXT:    fxch %st(1)3562; X64-NEXT:    fucompi %st(1), %st3563; X64-NEXT:    fstp %st(0)3564; X64-NEXT:    movl $-1, %eax3565; X64-NEXT:    cmovbel %ecx, %eax3566; X64-NEXT:    retq3567    %x = call i32 @llvm.fptoui.sat.i32.f80(x86_fp80 %f)3568    ret i32 %x3569}3570 3571define i50 @test_unsigned_i50_f80(x86_fp80 %f) nounwind {3572; X86-X87-LABEL: test_unsigned_i50_f80:3573; X86-X87:       # %bb.0:3574; X86-X87-NEXT:    pushl %esi3575; X86-X87-NEXT:    subl $16, %esp3576; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3577; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3578; X86-X87-NEXT:    fucom %st(1)3579; X86-X87-NEXT:    fnstsw %ax3580; X86-X87-NEXT:    xorl %ecx, %ecx3581; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3582; X86-X87-NEXT:    sahf3583; X86-X87-NEXT:    setbe %al3584; X86-X87-NEXT:    fldz3585; X86-X87-NEXT:    jbe .LBB36_23586; X86-X87-NEXT:  # %bb.1:3587; X86-X87-NEXT:    fstp %st(1)3588; X86-X87-NEXT:    fld %st(0)3589; X86-X87-NEXT:    fxch %st(1)3590; X86-X87-NEXT:  .LBB36_2:3591; X86-X87-NEXT:    fxch %st(1)3592; X86-X87-NEXT:    fsubr %st(2), %st3593; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3594; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx3595; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC003596; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)3597; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3598; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)3599; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3600; X86-X87-NEXT:    movb %al, %cl3601; X86-X87-NEXT:    shll $31, %ecx3602; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx3603; X86-X87-NEXT:    fxch %st(1)3604; X86-X87-NEXT:    fucom %st(1)3605; X86-X87-NEXT:    fstp %st(1)3606; X86-X87-NEXT:    fnstsw %ax3607; X86-X87-NEXT:    xorl %edx, %edx3608; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3609; X86-X87-NEXT:    sahf3610; X86-X87-NEXT:    movl $0, %esi3611; X86-X87-NEXT:    jb .LBB36_43612; X86-X87-NEXT:  # %bb.3:3613; X86-X87-NEXT:    movl %ecx, %esi3614; X86-X87-NEXT:  .LBB36_4:3615; X86-X87-NEXT:    jb .LBB36_63616; X86-X87-NEXT:  # %bb.5:3617; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx3618; X86-X87-NEXT:  .LBB36_6:3619; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}3620; X86-X87-NEXT:    fxch %st(1)3621; X86-X87-NEXT:    fucompp3622; X86-X87-NEXT:    fnstsw %ax3623; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3624; X86-X87-NEXT:    sahf3625; X86-X87-NEXT:    movl $-1, %eax3626; X86-X87-NEXT:    ja .LBB36_83627; X86-X87-NEXT:  # %bb.7:3628; X86-X87-NEXT:    movl %edx, %eax3629; X86-X87-NEXT:  .LBB36_8:3630; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF3631; X86-X87-NEXT:    ja .LBB36_103632; X86-X87-NEXT:  # %bb.9:3633; X86-X87-NEXT:    movl %esi, %edx3634; X86-X87-NEXT:  .LBB36_10:3635; X86-X87-NEXT:    addl $16, %esp3636; X86-X87-NEXT:    popl %esi3637; X86-X87-NEXT:    retl3638;3639; X86-SSE-LABEL: test_unsigned_i50_f80:3640; X86-SSE:       # %bb.0:3641; X86-SSE-NEXT:    pushl %esi3642; X86-SSE-NEXT:    subl $16, %esp3643; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3644; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3645; X86-SSE-NEXT:    xorl %eax, %eax3646; X86-SSE-NEXT:    fucomi %st(1), %st3647; X86-SSE-NEXT:    setbe %cl3648; X86-SSE-NEXT:    fldz3649; X86-SSE-NEXT:    fld %st(0)3650; X86-SSE-NEXT:    fcmovbe %st(2), %st3651; X86-SSE-NEXT:    fstp %st(2)3652; X86-SSE-NEXT:    fxch %st(1)3653; X86-SSE-NEXT:    fsubr %st(2), %st3654; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3655; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %edx3656; X86-SSE-NEXT:    orl $3072, %edx # imm = 0xC003657; X86-SSE-NEXT:    movw %dx, {{[0-9]+}}(%esp)3658; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3659; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)3660; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3661; X86-SSE-NEXT:    xorl %esi, %esi3662; X86-SSE-NEXT:    fxch %st(1)3663; X86-SSE-NEXT:    fucomi %st(1), %st3664; X86-SSE-NEXT:    fstp %st(1)3665; X86-SSE-NEXT:    movl $0, %edx3666; X86-SSE-NEXT:    jb .LBB36_23667; X86-SSE-NEXT:  # %bb.1:3668; X86-SSE-NEXT:    movb %cl, %al3669; X86-SSE-NEXT:    shll $31, %eax3670; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax3671; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx3672; X86-SSE-NEXT:    movl %eax, %esi3673; X86-SSE-NEXT:  .LBB36_2:3674; X86-SSE-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}3675; X86-SSE-NEXT:    fxch %st(1)3676; X86-SSE-NEXT:    fucompi %st(1), %st3677; X86-SSE-NEXT:    fstp %st(0)3678; X86-SSE-NEXT:    movl $-1, %eax3679; X86-SSE-NEXT:    cmovbel %edx, %eax3680; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF3681; X86-SSE-NEXT:    cmovbel %esi, %edx3682; X86-SSE-NEXT:    addl $16, %esp3683; X86-SSE-NEXT:    popl %esi3684; X86-SSE-NEXT:    retl3685;3686; X64-LABEL: test_unsigned_i50_f80:3687; X64:       # %bb.0:3688; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3689; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3690; X64-NEXT:    xorl %eax, %eax3691; X64-NEXT:    fucomi %st(1), %st3692; X64-NEXT:    setbe %al3693; X64-NEXT:    fldz3694; X64-NEXT:    fld %st(0)3695; X64-NEXT:    fcmovbe %st(2), %st3696; X64-NEXT:    fstp %st(2)3697; X64-NEXT:    fxch %st(1)3698; X64-NEXT:    fsubr %st(2), %st3699; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3700; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %ecx3701; X64-NEXT:    orl $3072, %ecx # imm = 0xC003702; X64-NEXT:    movw %cx, -{{[0-9]+}}(%rsp)3703; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3704; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)3705; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3706; X64-NEXT:    shlq $63, %rax3707; X64-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax3708; X64-NEXT:    xorl %ecx, %ecx3709; X64-NEXT:    fxch %st(1)3710; X64-NEXT:    fucomi %st(1), %st3711; X64-NEXT:    fstp %st(1)3712; X64-NEXT:    cmovaeq %rax, %rcx3713; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3714; X64-NEXT:    fxch %st(1)3715; X64-NEXT:    fucompi %st(1), %st3716; X64-NEXT:    fstp %st(0)3717; X64-NEXT:    movabsq $1125899906842623, %rax # imm = 0x3FFFFFFFFFFFF3718; X64-NEXT:    cmovbeq %rcx, %rax3719; X64-NEXT:    retq3720    %x = call i50 @llvm.fptoui.sat.i50.f80(x86_fp80 %f)3721    ret i50 %x3722}3723 3724define i64 @test_unsigned_i64_f80(x86_fp80 %f) nounwind {3725; X86-X87-LABEL: test_unsigned_i64_f80:3726; X86-X87:       # %bb.0:3727; X86-X87-NEXT:    pushl %edi3728; X86-X87-NEXT:    pushl %esi3729; X86-X87-NEXT:    subl $20, %esp3730; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3731; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3732; X86-X87-NEXT:    fucom %st(1)3733; X86-X87-NEXT:    fnstsw %ax3734; X86-X87-NEXT:    xorl %ecx, %ecx3735; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3736; X86-X87-NEXT:    sahf3737; X86-X87-NEXT:    setbe %al3738; X86-X87-NEXT:    fldz3739; X86-X87-NEXT:    jbe .LBB37_23740; X86-X87-NEXT:  # %bb.1:3741; X86-X87-NEXT:    fstp %st(1)3742; X86-X87-NEXT:    fld %st(0)3743; X86-X87-NEXT:    fxch %st(1)3744; X86-X87-NEXT:  .LBB37_2:3745; X86-X87-NEXT:    fxch %st(1)3746; X86-X87-NEXT:    fsubr %st(2), %st3747; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3748; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %edx3749; X86-X87-NEXT:    orl $3072, %edx # imm = 0xC003750; X86-X87-NEXT:    movw %dx, {{[0-9]+}}(%esp)3751; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3752; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)3753; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3754; X86-X87-NEXT:    movb %al, %cl3755; X86-X87-NEXT:    shll $31, %ecx3756; X86-X87-NEXT:    xorl {{[0-9]+}}(%esp), %ecx3757; X86-X87-NEXT:    fxch %st(1)3758; X86-X87-NEXT:    fucom %st(1)3759; X86-X87-NEXT:    fstp %st(1)3760; X86-X87-NEXT:    fnstsw %ax3761; X86-X87-NEXT:    xorl %esi, %esi3762; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3763; X86-X87-NEXT:    sahf3764; X86-X87-NEXT:    movl $0, %edi3765; X86-X87-NEXT:    jb .LBB37_43766; X86-X87-NEXT:  # %bb.3:3767; X86-X87-NEXT:    movl %ecx, %edi3768; X86-X87-NEXT:  .LBB37_4:3769; X86-X87-NEXT:    jb .LBB37_63770; X86-X87-NEXT:  # %bb.5:3771; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi3772; X86-X87-NEXT:  .LBB37_6:3773; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}3774; X86-X87-NEXT:    fxch %st(1)3775; X86-X87-NEXT:    fucompp3776; X86-X87-NEXT:    fnstsw %ax3777; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3778; X86-X87-NEXT:    sahf3779; X86-X87-NEXT:    movl $-1, %eax3780; X86-X87-NEXT:    movl $-1, %edx3781; X86-X87-NEXT:    ja .LBB37_83782; X86-X87-NEXT:  # %bb.7:3783; X86-X87-NEXT:    movl %esi, %eax3784; X86-X87-NEXT:    movl %edi, %edx3785; X86-X87-NEXT:  .LBB37_8:3786; X86-X87-NEXT:    addl $20, %esp3787; X86-X87-NEXT:    popl %esi3788; X86-X87-NEXT:    popl %edi3789; X86-X87-NEXT:    retl3790;3791; X86-SSE-LABEL: test_unsigned_i64_f80:3792; X86-SSE:       # %bb.0:3793; X86-SSE-NEXT:    pushl %ebx3794; X86-SSE-NEXT:    subl $16, %esp3795; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3796; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3797; X86-SSE-NEXT:    xorl %ecx, %ecx3798; X86-SSE-NEXT:    fucomi %st(1), %st3799; X86-SSE-NEXT:    setbe %bl3800; X86-SSE-NEXT:    fldz3801; X86-SSE-NEXT:    fld %st(0)3802; X86-SSE-NEXT:    fcmovbe %st(2), %st3803; X86-SSE-NEXT:    fstp %st(2)3804; X86-SSE-NEXT:    fxch %st(1)3805; X86-SSE-NEXT:    fsubr %st(2), %st3806; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3807; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3808; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003809; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3810; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3811; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)3812; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3813; X86-SSE-NEXT:    xorl %edx, %edx3814; X86-SSE-NEXT:    fxch %st(1)3815; X86-SSE-NEXT:    fucomi %st(1), %st3816; X86-SSE-NEXT:    fstp %st(1)3817; X86-SSE-NEXT:    movl $0, %eax3818; X86-SSE-NEXT:    jb .LBB37_23819; X86-SSE-NEXT:  # %bb.1:3820; X86-SSE-NEXT:    movb %bl, %cl3821; X86-SSE-NEXT:    shll $31, %ecx3822; X86-SSE-NEXT:    xorl {{[0-9]+}}(%esp), %ecx3823; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax3824; X86-SSE-NEXT:    movl %ecx, %edx3825; X86-SSE-NEXT:  .LBB37_2:3826; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}3827; X86-SSE-NEXT:    fxch %st(1)3828; X86-SSE-NEXT:    fucompi %st(1), %st3829; X86-SSE-NEXT:    fstp %st(0)3830; X86-SSE-NEXT:    movl $-1, %ecx3831; X86-SSE-NEXT:    cmoval %ecx, %eax3832; X86-SSE-NEXT:    cmoval %ecx, %edx3833; X86-SSE-NEXT:    addl $16, %esp3834; X86-SSE-NEXT:    popl %ebx3835; X86-SSE-NEXT:    retl3836;3837; X64-LABEL: test_unsigned_i64_f80:3838; X64:       # %bb.0:3839; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3840; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3841; X64-NEXT:    xorl %eax, %eax3842; X64-NEXT:    fucomi %st(1), %st3843; X64-NEXT:    setbe %al3844; X64-NEXT:    fldz3845; X64-NEXT:    fld %st(0)3846; X64-NEXT:    fcmovbe %st(2), %st3847; X64-NEXT:    fstp %st(2)3848; X64-NEXT:    fxch %st(1)3849; X64-NEXT:    fsubr %st(2), %st3850; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3851; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %ecx3852; X64-NEXT:    orl $3072, %ecx # imm = 0xC003853; X64-NEXT:    movw %cx, -{{[0-9]+}}(%rsp)3854; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3855; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)3856; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3857; X64-NEXT:    shlq $63, %rax3858; X64-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax3859; X64-NEXT:    xorl %ecx, %ecx3860; X64-NEXT:    fxch %st(1)3861; X64-NEXT:    fucomi %st(1), %st3862; X64-NEXT:    fstp %st(1)3863; X64-NEXT:    cmovaeq %rax, %rcx3864; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3865; X64-NEXT:    fxch %st(1)3866; X64-NEXT:    fucompi %st(1), %st3867; X64-NEXT:    fstp %st(0)3868; X64-NEXT:    movq $-1, %rax3869; X64-NEXT:    cmovbeq %rcx, %rax3870; X64-NEXT:    retq3871    %x = call i64 @llvm.fptoui.sat.i64.f80(x86_fp80 %f)3872    ret i64 %x3873}3874 3875define i100 @test_unsigned_i100_f80(x86_fp80 %f) nounwind {3876; X86-X87-LABEL: test_unsigned_i100_f80:3877; X86-X87:       # %bb.0:3878; X86-X87-NEXT:    pushl %ebp3879; X86-X87-NEXT:    pushl %ebx3880; X86-X87-NEXT:    pushl %edi3881; X86-X87-NEXT:    pushl %esi3882; X86-X87-NEXT:    subl $60, %esp3883; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3884; X86-X87-NEXT:    fld %st(0)3885; X86-X87-NEXT:    fstpt {{[0-9]+}}(%esp)3886; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3887; X86-X87-NEXT:    movl %eax, (%esp)3888; X86-X87-NEXT:    fldz3889; X86-X87-NEXT:    fld %st(1)3890; X86-X87-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill3891; X86-X87-NEXT:    fxch %st(1)3892; X86-X87-NEXT:    fucompp3893; X86-X87-NEXT:    fnstsw %ax3894; X86-X87-NEXT:    movl %eax, %ebx3895; X86-X87-NEXT:    calll __fixunsxfti3896; X86-X87-NEXT:    subl $4, %esp3897; X86-X87-NEXT:    xorl %edi, %edi3898; X86-X87-NEXT:    movb %bh, %ah3899; X86-X87-NEXT:    sahf3900; X86-X87-NEXT:    movl $0, %eax3901; X86-X87-NEXT:    jb .LBB38_23902; X86-X87-NEXT:  # %bb.1:3903; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax3904; X86-X87-NEXT:  .LBB38_2:3905; X86-X87-NEXT:    movl $0, %esi3906; X86-X87-NEXT:    movl $0, %ebx3907; X86-X87-NEXT:    jb .LBB38_43908; X86-X87-NEXT:  # %bb.3:3909; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx3910; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %esi3911; X86-X87-NEXT:  .LBB38_4:3912; X86-X87-NEXT:    jb .LBB38_63913; X86-X87-NEXT:  # %bb.5:3914; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi3915; X86-X87-NEXT:  .LBB38_6:3916; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3917; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx3918; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}3919; X86-X87-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload3920; X86-X87-NEXT:    fucompp3921; X86-X87-NEXT:    fnstsw %ax3922; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3923; X86-X87-NEXT:    sahf3924; X86-X87-NEXT:    movl $15, %eax3925; X86-X87-NEXT:    ja .LBB38_83926; X86-X87-NEXT:  # %bb.7:3927; X86-X87-NEXT:    movl %edi, %eax3928; X86-X87-NEXT:  .LBB38_8:3929; X86-X87-NEXT:    movl $-1, %edi3930; X86-X87-NEXT:    movl $-1, %ebp3931; X86-X87-NEXT:    movl $-1, %edx3932; X86-X87-NEXT:    ja .LBB38_103933; X86-X87-NEXT:  # %bb.9:3934; X86-X87-NEXT:    movl %ebx, %edi3935; X86-X87-NEXT:    movl %esi, %ebp3936; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3937; X86-X87-NEXT:  .LBB38_10:3938; X86-X87-NEXT:    movl %edx, 8(%ecx)3939; X86-X87-NEXT:    movl %ebp, 4(%ecx)3940; X86-X87-NEXT:    movl %edi, (%ecx)3941; X86-X87-NEXT:    andl $15, %eax3942; X86-X87-NEXT:    movb %al, 12(%ecx)3943; X86-X87-NEXT:    movl %ecx, %eax3944; X86-X87-NEXT:    addl $60, %esp3945; X86-X87-NEXT:    popl %esi3946; X86-X87-NEXT:    popl %edi3947; X86-X87-NEXT:    popl %ebx3948; X86-X87-NEXT:    popl %ebp3949; X86-X87-NEXT:    retl $43950;3951; X86-SSE-LABEL: test_unsigned_i100_f80:3952; X86-SSE:       # %bb.0:3953; X86-SSE-NEXT:    pushl %ebx3954; X86-SSE-NEXT:    pushl %edi3955; X86-SSE-NEXT:    pushl %esi3956; X86-SSE-NEXT:    subl $48, %esp3957; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi3958; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3959; X86-SSE-NEXT:    fld %st(0)3960; X86-SSE-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill3961; X86-SSE-NEXT:    fstpt {{[0-9]+}}(%esp)3962; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax3963; X86-SSE-NEXT:    movl %eax, (%esp)3964; X86-SSE-NEXT:    calll __fixunsxfti3965; X86-SSE-NEXT:    subl $4, %esp3966; X86-SSE-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload3967; X86-SSE-NEXT:    xorl %eax, %eax3968; X86-SSE-NEXT:    fldz3969; X86-SSE-NEXT:    fxch %st(1)3970; X86-SSE-NEXT:    fucomi %st(1), %st3971; X86-SSE-NEXT:    fstp %st(1)3972; X86-SSE-NEXT:    movl $0, %ecx3973; X86-SSE-NEXT:    movl $0, %edx3974; X86-SSE-NEXT:    movl $0, %edi3975; X86-SSE-NEXT:    jb .LBB38_23976; X86-SSE-NEXT:  # %bb.1:3977; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax3978; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx3979; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx3980; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi3981; X86-SSE-NEXT:  .LBB38_2:3982; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}3983; X86-SSE-NEXT:    fxch %st(1)3984; X86-SSE-NEXT:    fucompi %st(1), %st3985; X86-SSE-NEXT:    fstp %st(0)3986; X86-SSE-NEXT:    movl $15, %ebx3987; X86-SSE-NEXT:    cmovbel %edi, %ebx3988; X86-SSE-NEXT:    movl $-1, %edi3989; X86-SSE-NEXT:    cmoval %edi, %edx3990; X86-SSE-NEXT:    cmoval %edi, %ecx3991; X86-SSE-NEXT:    cmoval %edi, %eax3992; X86-SSE-NEXT:    movl %eax, 8(%esi)3993; X86-SSE-NEXT:    movl %ecx, 4(%esi)3994; X86-SSE-NEXT:    movl %edx, (%esi)3995; X86-SSE-NEXT:    andl $15, %ebx3996; X86-SSE-NEXT:    movb %bl, 12(%esi)3997; X86-SSE-NEXT:    movl %esi, %eax3998; X86-SSE-NEXT:    addl $48, %esp3999; X86-SSE-NEXT:    popl %esi4000; X86-SSE-NEXT:    popl %edi4001; X86-SSE-NEXT:    popl %ebx4002; X86-SSE-NEXT:    retl $44003;4004; X64-LABEL: test_unsigned_i100_f80:4005; X64:       # %bb.0:4006; X64-NEXT:    subq $40, %rsp4007; X64-NEXT:    fldt {{[0-9]+}}(%rsp)4008; X64-NEXT:    fld %st(0)4009; X64-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill4010; X64-NEXT:    fstpt (%rsp)4011; X64-NEXT:    callq __fixunsxfti@PLT4012; X64-NEXT:    xorl %ecx, %ecx4013; X64-NEXT:    fldz4014; X64-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload4015; X64-NEXT:    fucomi %st(1), %st4016; X64-NEXT:    fstp %st(1)4017; X64-NEXT:    cmovbq %rcx, %rdx4018; X64-NEXT:    cmovbq %rcx, %rax4019; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4020; X64-NEXT:    fxch %st(1)4021; X64-NEXT:    fucompi %st(1), %st4022; X64-NEXT:    fstp %st(0)4023; X64-NEXT:    movq $-1, %rcx4024; X64-NEXT:    cmovaq %rcx, %rax4025; X64-NEXT:    movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF4026; X64-NEXT:    cmovaq %rcx, %rdx4027; X64-NEXT:    addq $40, %rsp4028; X64-NEXT:    retq4029    %x = call i100 @llvm.fptoui.sat.i100.f80(x86_fp80 %f)4030    ret i100 %x4031}4032 4033define i128 @test_unsigned_i128_f80(x86_fp80 %f) nounwind {4034; X86-X87-LABEL: test_unsigned_i128_f80:4035; X86-X87:       # %bb.0:4036; X86-X87-NEXT:    pushl %ebp4037; X86-X87-NEXT:    pushl %ebx4038; X86-X87-NEXT:    pushl %edi4039; X86-X87-NEXT:    pushl %esi4040; X86-X87-NEXT:    subl $60, %esp4041; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)4042; X86-X87-NEXT:    fld %st(0)4043; X86-X87-NEXT:    fstpt {{[0-9]+}}(%esp)4044; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax4045; X86-X87-NEXT:    movl %eax, (%esp)4046; X86-X87-NEXT:    fldz4047; X86-X87-NEXT:    fld %st(1)4048; X86-X87-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill4049; X86-X87-NEXT:    fxch %st(1)4050; X86-X87-NEXT:    fucompp4051; X86-X87-NEXT:    fnstsw %ax4052; X86-X87-NEXT:    movl %eax, %ebx4053; X86-X87-NEXT:    calll __fixunsxfti4054; X86-X87-NEXT:    subl $4, %esp4055; X86-X87-NEXT:    xorl %edx, %edx4056; X86-X87-NEXT:    movb %bh, %ah4057; X86-X87-NEXT:    sahf4058; X86-X87-NEXT:    movl $0, %eax4059; X86-X87-NEXT:    jb .LBB39_24060; X86-X87-NEXT:  # %bb.1:4061; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax4062; X86-X87-NEXT:  .LBB39_2:4063; X86-X87-NEXT:    movl $0, %ecx4064; X86-X87-NEXT:    jb .LBB39_44065; X86-X87-NEXT:  # %bb.3:4066; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx4067; X86-X87-NEXT:  .LBB39_4:4068; X86-X87-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4069; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4070; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx4071; X86-X87-NEXT:    movl $0, %ebx4072; X86-X87-NEXT:    jb .LBB39_64073; X86-X87-NEXT:  # %bb.5:4074; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx4075; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx4076; X86-X87-NEXT:  .LBB39_6:4077; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}4078; X86-X87-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload4079; X86-X87-NEXT:    fucompp4080; X86-X87-NEXT:    fnstsw %ax4081; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax4082; X86-X87-NEXT:    sahf4083; X86-X87-NEXT:    movl $-1, %eax4084; X86-X87-NEXT:    movl $-1, %ebp4085; X86-X87-NEXT:    movl $-1, %edi4086; X86-X87-NEXT:    movl $-1, %esi4087; X86-X87-NEXT:    ja .LBB39_84088; X86-X87-NEXT:  # %bb.7:4089; X86-X87-NEXT:    movl %ebx, %eax4090; X86-X87-NEXT:    movl %edx, %ebp4091; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload4092; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload4093; X86-X87-NEXT:  .LBB39_8:4094; X86-X87-NEXT:    movl %esi, 12(%ecx)4095; X86-X87-NEXT:    movl %edi, 8(%ecx)4096; X86-X87-NEXT:    movl %ebp, 4(%ecx)4097; X86-X87-NEXT:    movl %eax, (%ecx)4098; X86-X87-NEXT:    movl %ecx, %eax4099; X86-X87-NEXT:    addl $60, %esp4100; X86-X87-NEXT:    popl %esi4101; X86-X87-NEXT:    popl %edi4102; X86-X87-NEXT:    popl %ebx4103; X86-X87-NEXT:    popl %ebp4104; X86-X87-NEXT:    retl $44105;4106; X86-SSE-LABEL: test_unsigned_i128_f80:4107; X86-SSE:       # %bb.0:4108; X86-SSE-NEXT:    pushl %ebx4109; X86-SSE-NEXT:    pushl %edi4110; X86-SSE-NEXT:    pushl %esi4111; X86-SSE-NEXT:    subl $48, %esp4112; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi4113; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)4114; X86-SSE-NEXT:    fld %st(0)4115; X86-SSE-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill4116; X86-SSE-NEXT:    fstpt {{[0-9]+}}(%esp)4117; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax4118; X86-SSE-NEXT:    movl %eax, (%esp)4119; X86-SSE-NEXT:    calll __fixunsxfti4120; X86-SSE-NEXT:    subl $4, %esp4121; X86-SSE-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload4122; X86-SSE-NEXT:    xorl %eax, %eax4123; X86-SSE-NEXT:    fldz4124; X86-SSE-NEXT:    fxch %st(1)4125; X86-SSE-NEXT:    fucomi %st(1), %st4126; X86-SSE-NEXT:    fstp %st(1)4127; X86-SSE-NEXT:    movl $0, %ecx4128; X86-SSE-NEXT:    movl $0, %edx4129; X86-SSE-NEXT:    movl $0, %edi4130; X86-SSE-NEXT:    jb .LBB39_24131; X86-SSE-NEXT:  # %bb.1:4132; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax4133; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx4134; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx4135; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi4136; X86-SSE-NEXT:  .LBB39_2:4137; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}4138; X86-SSE-NEXT:    fxch %st(1)4139; X86-SSE-NEXT:    fucompi %st(1), %st4140; X86-SSE-NEXT:    fstp %st(0)4141; X86-SSE-NEXT:    movl $-1, %ebx4142; X86-SSE-NEXT:    cmoval %ebx, %edi4143; X86-SSE-NEXT:    cmoval %ebx, %edx4144; X86-SSE-NEXT:    cmoval %ebx, %ecx4145; X86-SSE-NEXT:    cmoval %ebx, %eax4146; X86-SSE-NEXT:    movl %eax, 12(%esi)4147; X86-SSE-NEXT:    movl %ecx, 8(%esi)4148; X86-SSE-NEXT:    movl %edx, 4(%esi)4149; X86-SSE-NEXT:    movl %edi, (%esi)4150; X86-SSE-NEXT:    movl %esi, %eax4151; X86-SSE-NEXT:    addl $48, %esp4152; X86-SSE-NEXT:    popl %esi4153; X86-SSE-NEXT:    popl %edi4154; X86-SSE-NEXT:    popl %ebx4155; X86-SSE-NEXT:    retl $44156;4157; X64-LABEL: test_unsigned_i128_f80:4158; X64:       # %bb.0:4159; X64-NEXT:    subq $40, %rsp4160; X64-NEXT:    fldt {{[0-9]+}}(%rsp)4161; X64-NEXT:    fld %st(0)4162; X64-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill4163; X64-NEXT:    fstpt (%rsp)4164; X64-NEXT:    callq __fixunsxfti@PLT4165; X64-NEXT:    xorl %ecx, %ecx4166; X64-NEXT:    fldz4167; X64-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload4168; X64-NEXT:    fucomi %st(1), %st4169; X64-NEXT:    fstp %st(1)4170; X64-NEXT:    cmovbq %rcx, %rdx4171; X64-NEXT:    cmovbq %rcx, %rax4172; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4173; X64-NEXT:    fxch %st(1)4174; X64-NEXT:    fucompi %st(1), %st4175; X64-NEXT:    fstp %st(0)4176; X64-NEXT:    movq $-1, %rcx4177; X64-NEXT:    cmovaq %rcx, %rax4178; X64-NEXT:    cmovaq %rcx, %rdx4179; X64-NEXT:    addq $40, %rsp4180; X64-NEXT:    retq4181    %x = call i128 @llvm.fptoui.sat.i128.f80(x86_fp80 %f)4182    ret i128 %x4183}4184