brintos

brintos / llvm-project-archived public Read only

0
0
Text · 162.5 KiB · 85f4c94 Raw
4581 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 signed integer8;9 10declare   i1 @llvm.fptosi.sat.i1.f32  (float)11declare   i8 @llvm.fptosi.sat.i8.f32  (float)12declare  i13 @llvm.fptosi.sat.i13.f32 (float)13declare  i16 @llvm.fptosi.sat.i16.f32 (float)14declare  i19 @llvm.fptosi.sat.i19.f32 (float)15declare  i32 @llvm.fptosi.sat.i32.f32 (float)16declare  i50 @llvm.fptosi.sat.i50.f32 (float)17declare  i64 @llvm.fptosi.sat.i64.f32 (float)18declare i100 @llvm.fptosi.sat.i100.f32(float)19declare i128 @llvm.fptosi.sat.i128.f32(float)20 21define i1 @test_signed_i1_f32(float %f) nounwind {22; X86-X87-LABEL: test_signed_i1_f32:23; X86-X87:       # %bb.0:24; X86-X87-NEXT:    pushl %ebx25; X86-X87-NEXT:    subl $8, %esp26; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)27; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)28; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax29; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC0030; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)31; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)32; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)33; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)34; X86-X87-NEXT:    fld135; X86-X87-NEXT:    fchs36; X86-X87-NEXT:    fxch %st(1)37; X86-X87-NEXT:    fucom %st(1)38; X86-X87-NEXT:    fstp %st(1)39; X86-X87-NEXT:    fnstsw %ax40; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax41; X86-X87-NEXT:    sahf42; X86-X87-NEXT:    movb $-1, %dl43; X86-X87-NEXT:    jb .LBB0_244; X86-X87-NEXT:  # %bb.1:45; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx46; X86-X87-NEXT:  .LBB0_2:47; X86-X87-NEXT:    fldz48; X86-X87-NEXT:    fxch %st(1)49; X86-X87-NEXT:    fucom %st(1)50; X86-X87-NEXT:    fstp %st(1)51; X86-X87-NEXT:    fnstsw %ax52; X86-X87-NEXT:    xorl %ecx, %ecx53; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax54; X86-X87-NEXT:    sahf55; X86-X87-NEXT:    movl $0, %ebx56; X86-X87-NEXT:    ja .LBB0_457; X86-X87-NEXT:  # %bb.3:58; X86-X87-NEXT:    movl %edx, %ebx59; X86-X87-NEXT:  .LBB0_4:60; X86-X87-NEXT:    fucomp %st(0)61; X86-X87-NEXT:    fnstsw %ax62; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax63; X86-X87-NEXT:    sahf64; X86-X87-NEXT:    jp .LBB0_665; X86-X87-NEXT:  # %bb.5:66; X86-X87-NEXT:    movl %ebx, %ecx67; X86-X87-NEXT:  .LBB0_6:68; X86-X87-NEXT:    movl %ecx, %eax69; X86-X87-NEXT:    addl $8, %esp70; X86-X87-NEXT:    popl %ebx71; X86-X87-NEXT:    retl72;73; X86-SSE-LABEL: test_signed_i1_f32:74; X86-SSE:       # %bb.0:75; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [-1.0E+0,0.0E+0,0.0E+0,0.0E+0]76; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm077; X86-SSE-NEXT:    xorps %xmm1, %xmm178; X86-SSE-NEXT:    minss %xmm0, %xmm179; X86-SSE-NEXT:    cvttss2si %xmm1, %eax80; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax81; X86-SSE-NEXT:    retl82;83; X64-LABEL: test_signed_i1_f32:84; X64:       # %bb.0:85; X64-NEXT:    movss {{.*#+}} xmm1 = [-1.0E+0,0.0E+0,0.0E+0,0.0E+0]86; X64-NEXT:    maxss %xmm0, %xmm187; X64-NEXT:    xorps %xmm0, %xmm088; X64-NEXT:    minss %xmm1, %xmm089; X64-NEXT:    cvttss2si %xmm0, %eax90; X64-NEXT:    # kill: def $al killed $al killed $eax91; X64-NEXT:    retq92    %x = call i1 @llvm.fptosi.sat.i1.f32(float %f)93    ret i1 %x94}95 96define i8 @test_signed_i8_f32(float %f) nounwind {97; X86-X87-LABEL: test_signed_i8_f32:98; X86-X87:       # %bb.0:99; X86-X87-NEXT:    subl $8, %esp100; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)101; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)102; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax103; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00104; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)105; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)106; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)107; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)108; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}109; X86-X87-NEXT:    fxch %st(1)110; X86-X87-NEXT:    fucom %st(1)111; X86-X87-NEXT:    fstp %st(1)112; X86-X87-NEXT:    fnstsw %ax113; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax114; X86-X87-NEXT:    sahf115; X86-X87-NEXT:    movb $-128, %dl116; X86-X87-NEXT:    jb .LBB1_2117; X86-X87-NEXT:  # %bb.1:118; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx119; X86-X87-NEXT:  .LBB1_2:120; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}121; X86-X87-NEXT:    fxch %st(1)122; X86-X87-NEXT:    fucom %st(1)123; X86-X87-NEXT:    fstp %st(1)124; X86-X87-NEXT:    fnstsw %ax125; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax126; X86-X87-NEXT:    sahf127; X86-X87-NEXT:    movb $127, %cl128; X86-X87-NEXT:    ja .LBB1_4129; X86-X87-NEXT:  # %bb.3:130; X86-X87-NEXT:    movl %edx, %ecx131; X86-X87-NEXT:  .LBB1_4:132; X86-X87-NEXT:    fucomp %st(0)133; X86-X87-NEXT:    fnstsw %ax134; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax135; X86-X87-NEXT:    sahf136; X86-X87-NEXT:    jnp .LBB1_6137; X86-X87-NEXT:  # %bb.5:138; X86-X87-NEXT:    xorl %ecx, %ecx139; X86-X87-NEXT:  .LBB1_6:140; X86-X87-NEXT:    movl %ecx, %eax141; X86-X87-NEXT:    addl $8, %esp142; X86-X87-NEXT:    retl143;144; X86-SSE-LABEL: test_signed_i8_f32:145; X86-SSE:       # %bb.0:146; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [-1.28E+2,0.0E+0,0.0E+0,0.0E+0]147; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0148; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [1.27E+2,0.0E+0,0.0E+0,0.0E+0]149; X86-SSE-NEXT:    minss %xmm0, %xmm1150; X86-SSE-NEXT:    cvttss2si %xmm1, %eax151; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax152; X86-SSE-NEXT:    retl153;154; X64-LABEL: test_signed_i8_f32:155; X64:       # %bb.0:156; X64-NEXT:    movss {{.*#+}} xmm1 = [-1.28E+2,0.0E+0,0.0E+0,0.0E+0]157; X64-NEXT:    maxss %xmm0, %xmm1158; X64-NEXT:    movss {{.*#+}} xmm0 = [1.27E+2,0.0E+0,0.0E+0,0.0E+0]159; X64-NEXT:    minss %xmm1, %xmm0160; X64-NEXT:    cvttss2si %xmm0, %eax161; X64-NEXT:    # kill: def $al killed $al killed $eax162; X64-NEXT:    retq163    %x = call i8 @llvm.fptosi.sat.i8.f32(float %f)164    ret i8 %x165}166 167define i13 @test_signed_i13_f32(float %f) nounwind {168; X86-X87-LABEL: test_signed_i13_f32:169; X86-X87:       # %bb.0:170; X86-X87-NEXT:    subl $8, %esp171; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)172; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)173; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax174; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00175; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)176; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)177; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)178; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)179; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}180; X86-X87-NEXT:    fxch %st(1)181; X86-X87-NEXT:    fucom %st(1)182; X86-X87-NEXT:    fstp %st(1)183; X86-X87-NEXT:    fnstsw %ax184; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax185; X86-X87-NEXT:    sahf186; X86-X87-NEXT:    movl $61440, %ecx # imm = 0xF000187; X86-X87-NEXT:    jb .LBB2_2188; X86-X87-NEXT:  # %bb.1:189; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx190; X86-X87-NEXT:  .LBB2_2:191; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}192; X86-X87-NEXT:    fxch %st(1)193; X86-X87-NEXT:    fucom %st(1)194; X86-X87-NEXT:    fstp %st(1)195; X86-X87-NEXT:    fnstsw %ax196; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax197; X86-X87-NEXT:    sahf198; X86-X87-NEXT:    movl $4095, %edx # imm = 0xFFF199; X86-X87-NEXT:    ja .LBB2_4200; X86-X87-NEXT:  # %bb.3:201; X86-X87-NEXT:    movl %ecx, %edx202; X86-X87-NEXT:  .LBB2_4:203; X86-X87-NEXT:    fucomp %st(0)204; X86-X87-NEXT:    fnstsw %ax205; X86-X87-NEXT:    xorl %ecx, %ecx206; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax207; X86-X87-NEXT:    sahf208; X86-X87-NEXT:    jp .LBB2_6209; X86-X87-NEXT:  # %bb.5:210; X86-X87-NEXT:    movl %edx, %ecx211; X86-X87-NEXT:  .LBB2_6:212; X86-X87-NEXT:    movl %ecx, %eax213; X86-X87-NEXT:    addl $8, %esp214; X86-X87-NEXT:    retl215;216; X86-SSE-LABEL: test_signed_i13_f32:217; X86-SSE:       # %bb.0:218; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [-4.096E+3,0.0E+0,0.0E+0,0.0E+0]219; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0220; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [4.095E+3,0.0E+0,0.0E+0,0.0E+0]221; X86-SSE-NEXT:    minss %xmm0, %xmm1222; X86-SSE-NEXT:    cvttss2si %xmm1, %eax223; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax224; X86-SSE-NEXT:    retl225;226; X64-LABEL: test_signed_i13_f32:227; X64:       # %bb.0:228; X64-NEXT:    movss {{.*#+}} xmm1 = [-4.096E+3,0.0E+0,0.0E+0,0.0E+0]229; X64-NEXT:    maxss %xmm0, %xmm1230; X64-NEXT:    movss {{.*#+}} xmm0 = [4.095E+3,0.0E+0,0.0E+0,0.0E+0]231; X64-NEXT:    minss %xmm1, %xmm0232; X64-NEXT:    cvttss2si %xmm0, %eax233; X64-NEXT:    # kill: def $ax killed $ax killed $eax234; X64-NEXT:    retq235    %x = call i13 @llvm.fptosi.sat.i13.f32(float %f)236    ret i13 %x237}238 239define i16 @test_signed_i16_f32(float %f) nounwind {240; X86-X87-LABEL: test_signed_i16_f32:241; X86-X87:       # %bb.0:242; X86-X87-NEXT:    subl $8, %esp243; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)244; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)245; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax246; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00247; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)248; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)249; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)250; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)251; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}252; X86-X87-NEXT:    fxch %st(1)253; X86-X87-NEXT:    fucom %st(1)254; X86-X87-NEXT:    fstp %st(1)255; X86-X87-NEXT:    fnstsw %ax256; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax257; X86-X87-NEXT:    sahf258; X86-X87-NEXT:    movl $32768, %ecx # imm = 0x8000259; X86-X87-NEXT:    jb .LBB3_2260; X86-X87-NEXT:  # %bb.1:261; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx262; X86-X87-NEXT:  .LBB3_2:263; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}264; X86-X87-NEXT:    fxch %st(1)265; X86-X87-NEXT:    fucom %st(1)266; X86-X87-NEXT:    fstp %st(1)267; X86-X87-NEXT:    fnstsw %ax268; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax269; X86-X87-NEXT:    sahf270; X86-X87-NEXT:    movl $32767, %edx # imm = 0x7FFF271; X86-X87-NEXT:    ja .LBB3_4272; X86-X87-NEXT:  # %bb.3:273; X86-X87-NEXT:    movl %ecx, %edx274; X86-X87-NEXT:  .LBB3_4:275; X86-X87-NEXT:    fucomp %st(0)276; X86-X87-NEXT:    fnstsw %ax277; X86-X87-NEXT:    xorl %ecx, %ecx278; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax279; X86-X87-NEXT:    sahf280; X86-X87-NEXT:    jp .LBB3_6281; X86-X87-NEXT:  # %bb.5:282; X86-X87-NEXT:    movl %edx, %ecx283; X86-X87-NEXT:  .LBB3_6:284; X86-X87-NEXT:    movl %ecx, %eax285; X86-X87-NEXT:    addl $8, %esp286; X86-X87-NEXT:    retl287;288; X86-SSE-LABEL: test_signed_i16_f32:289; X86-SSE:       # %bb.0:290; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [-3.2768E+4,0.0E+0,0.0E+0,0.0E+0]291; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0292; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [3.2767E+4,0.0E+0,0.0E+0,0.0E+0]293; X86-SSE-NEXT:    minss %xmm0, %xmm1294; X86-SSE-NEXT:    cvttss2si %xmm1, %eax295; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax296; X86-SSE-NEXT:    retl297;298; X64-LABEL: test_signed_i16_f32:299; X64:       # %bb.0:300; X64-NEXT:    movss {{.*#+}} xmm1 = [-3.2768E+4,0.0E+0,0.0E+0,0.0E+0]301; X64-NEXT:    maxss %xmm0, %xmm1302; X64-NEXT:    movss {{.*#+}} xmm0 = [3.2767E+4,0.0E+0,0.0E+0,0.0E+0]303; X64-NEXT:    minss %xmm1, %xmm0304; X64-NEXT:    cvttss2si %xmm0, %eax305; X64-NEXT:    # kill: def $ax killed $ax killed $eax306; X64-NEXT:    retq307    %x = call i16 @llvm.fptosi.sat.i16.f32(float %f)308    ret i16 %x309}310 311define i19 @test_signed_i19_f32(float %f) nounwind {312; X86-X87-LABEL: test_signed_i19_f32:313; X86-X87:       # %bb.0:314; X86-X87-NEXT:    subl $8, %esp315; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)316; X86-X87-NEXT:    fnstcw (%esp)317; X86-X87-NEXT:    movzwl (%esp), %eax318; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00319; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)320; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)321; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)322; X86-X87-NEXT:    fldcw (%esp)323; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}324; X86-X87-NEXT:    fxch %st(1)325; X86-X87-NEXT:    fucom %st(1)326; X86-X87-NEXT:    fstp %st(1)327; X86-X87-NEXT:    fnstsw %ax328; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax329; X86-X87-NEXT:    sahf330; X86-X87-NEXT:    movl $-262144, %ecx # imm = 0xFFFC0000331; X86-X87-NEXT:    jb .LBB4_2332; X86-X87-NEXT:  # %bb.1:333; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx334; X86-X87-NEXT:  .LBB4_2:335; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}336; X86-X87-NEXT:    fxch %st(1)337; X86-X87-NEXT:    fucom %st(1)338; X86-X87-NEXT:    fstp %st(1)339; X86-X87-NEXT:    fnstsw %ax340; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax341; X86-X87-NEXT:    sahf342; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF343; X86-X87-NEXT:    ja .LBB4_4344; X86-X87-NEXT:  # %bb.3:345; X86-X87-NEXT:    movl %ecx, %edx346; X86-X87-NEXT:  .LBB4_4:347; X86-X87-NEXT:    fucomp %st(0)348; X86-X87-NEXT:    fnstsw %ax349; X86-X87-NEXT:    xorl %ecx, %ecx350; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax351; X86-X87-NEXT:    sahf352; X86-X87-NEXT:    jp .LBB4_6353; X86-X87-NEXT:  # %bb.5:354; X86-X87-NEXT:    movl %edx, %ecx355; X86-X87-NEXT:  .LBB4_6:356; X86-X87-NEXT:    movl %ecx, %eax357; X86-X87-NEXT:    addl $8, %esp358; X86-X87-NEXT:    retl359;360; X86-SSE-LABEL: test_signed_i19_f32:361; X86-SSE:       # %bb.0:362; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero363; X86-SSE-NEXT:    xorl %eax, %eax364; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0365; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0366; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0367; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx368; X86-SSE-NEXT:    cmovnpl %ecx, %eax369; X86-SSE-NEXT:    retl370;371; X64-LABEL: test_signed_i19_f32:372; X64:       # %bb.0:373; X64-NEXT:    xorl %eax, %eax374; X64-NEXT:    ucomiss %xmm0, %xmm0375; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0376; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0377; X64-NEXT:    cvttss2si %xmm0, %ecx378; X64-NEXT:    cmovnpl %ecx, %eax379; X64-NEXT:    retq380    %x = call i19 @llvm.fptosi.sat.i19.f32(float %f)381    ret i19 %x382}383 384define i32 @test_signed_i32_f32(float %f) nounwind {385; X86-X87-LABEL: test_signed_i32_f32:386; X86-X87:       # %bb.0:387; X86-X87-NEXT:    subl $8, %esp388; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)389; X86-X87-NEXT:    fnstcw (%esp)390; X86-X87-NEXT:    movzwl (%esp), %eax391; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00392; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)393; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)394; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)395; X86-X87-NEXT:    fldcw (%esp)396; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}397; X86-X87-NEXT:    fxch %st(1)398; X86-X87-NEXT:    fucom %st(1)399; X86-X87-NEXT:    fstp %st(1)400; X86-X87-NEXT:    fnstsw %ax401; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax402; X86-X87-NEXT:    sahf403; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000404; X86-X87-NEXT:    jb .LBB5_2405; X86-X87-NEXT:  # %bb.1:406; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx407; X86-X87-NEXT:  .LBB5_2:408; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}409; X86-X87-NEXT:    fxch %st(1)410; X86-X87-NEXT:    fucom %st(1)411; X86-X87-NEXT:    fstp %st(1)412; X86-X87-NEXT:    fnstsw %ax413; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax414; X86-X87-NEXT:    sahf415; X86-X87-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF416; X86-X87-NEXT:    ja .LBB5_4417; X86-X87-NEXT:  # %bb.3:418; X86-X87-NEXT:    movl %ecx, %edx419; X86-X87-NEXT:  .LBB5_4:420; X86-X87-NEXT:    fucomp %st(0)421; X86-X87-NEXT:    fnstsw %ax422; X86-X87-NEXT:    xorl %ecx, %ecx423; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax424; X86-X87-NEXT:    sahf425; X86-X87-NEXT:    jp .LBB5_6426; X86-X87-NEXT:  # %bb.5:427; X86-X87-NEXT:    movl %edx, %ecx428; X86-X87-NEXT:  .LBB5_6:429; X86-X87-NEXT:    movl %ecx, %eax430; X86-X87-NEXT:    addl $8, %esp431; X86-X87-NEXT:    retl432;433; X86-SSE-LABEL: test_signed_i32_f32:434; X86-SSE:       # %bb.0:435; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero436; X86-SSE-NEXT:    cvttss2si %xmm0, %eax437; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0438; X86-SSE-NEXT:    movl $2147483647, %ecx # imm = 0x7FFFFFFF439; X86-SSE-NEXT:    cmovbel %eax, %ecx440; X86-SSE-NEXT:    xorl %eax, %eax441; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0442; X86-SSE-NEXT:    cmovnpl %ecx, %eax443; X86-SSE-NEXT:    retl444;445; X64-LABEL: test_signed_i32_f32:446; X64:       # %bb.0:447; X64-NEXT:    cvttss2si %xmm0, %eax448; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0449; X64-NEXT:    movl $2147483647, %ecx # imm = 0x7FFFFFFF450; X64-NEXT:    cmovbel %eax, %ecx451; X64-NEXT:    xorl %eax, %eax452; X64-NEXT:    ucomiss %xmm0, %xmm0453; X64-NEXT:    cmovnpl %ecx, %eax454; X64-NEXT:    retq455    %x = call i32 @llvm.fptosi.sat.i32.f32(float %f)456    ret i32 %x457}458 459define i50 @test_signed_i50_f32(float %f) nounwind {460; X86-X87-LABEL: test_signed_i50_f32:461; X86-X87:       # %bb.0:462; X86-X87-NEXT:    pushl %edi463; X86-X87-NEXT:    pushl %esi464; X86-X87-NEXT:    subl $20, %esp465; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)466; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)467; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax468; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00469; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)470; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)471; X86-X87-NEXT:    fld %st(0)472; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)473; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)474; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}475; X86-X87-NEXT:    fxch %st(1)476; X86-X87-NEXT:    fucom %st(1)477; X86-X87-NEXT:    fstp %st(1)478; X86-X87-NEXT:    fnstsw %ax479; X86-X87-NEXT:    xorl %ecx, %ecx480; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax481; X86-X87-NEXT:    sahf482; X86-X87-NEXT:    movl $0, %edx483; X86-X87-NEXT:    jb .LBB6_2484; X86-X87-NEXT:  # %bb.1:485; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx486; X86-X87-NEXT:  .LBB6_2:487; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE0000488; X86-X87-NEXT:    jb .LBB6_4489; X86-X87-NEXT:  # %bb.3:490; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi491; X86-X87-NEXT:  .LBB6_4:492; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}493; X86-X87-NEXT:    fxch %st(1)494; X86-X87-NEXT:    fucom %st(1)495; X86-X87-NEXT:    fstp %st(1)496; X86-X87-NEXT:    fnstsw %ax497; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax498; X86-X87-NEXT:    sahf499; X86-X87-NEXT:    movl $131071, %esi # imm = 0x1FFFF500; X86-X87-NEXT:    ja .LBB6_6501; X86-X87-NEXT:  # %bb.5:502; X86-X87-NEXT:    movl %edi, %esi503; X86-X87-NEXT:  .LBB6_6:504; X86-X87-NEXT:    movl $-1, %edi505; X86-X87-NEXT:    ja .LBB6_8506; X86-X87-NEXT:  # %bb.7:507; X86-X87-NEXT:    movl %edx, %edi508; X86-X87-NEXT:  .LBB6_8:509; X86-X87-NEXT:    fucomp %st(0)510; X86-X87-NEXT:    fnstsw %ax511; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax512; X86-X87-NEXT:    sahf513; X86-X87-NEXT:    movl $0, %edx514; X86-X87-NEXT:    jp .LBB6_10515; X86-X87-NEXT:  # %bb.9:516; X86-X87-NEXT:    movl %edi, %ecx517; X86-X87-NEXT:    movl %esi, %edx518; X86-X87-NEXT:  .LBB6_10:519; X86-X87-NEXT:    movl %ecx, %eax520; X86-X87-NEXT:    addl $20, %esp521; X86-X87-NEXT:    popl %esi522; X86-X87-NEXT:    popl %edi523; X86-X87-NEXT:    retl524;525; X86-SSE-LABEL: test_signed_i50_f32:526; X86-SSE:       # %bb.0:527; X86-SSE-NEXT:    pushl %esi528; X86-SSE-NEXT:    subl $16, %esp529; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero530; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)531; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)532; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)533; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax534; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00535; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)536; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)537; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)538; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)539; X86-SSE-NEXT:    xorl %ecx, %ecx540; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0541; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi542; X86-SSE-NEXT:    cmovbl %ecx, %esi543; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE0000544; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax545; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0546; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF547; X86-SSE-NEXT:    cmovbel %eax, %edx548; X86-SSE-NEXT:    movl $-1, %eax549; X86-SSE-NEXT:    cmovbel %esi, %eax550; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0551; X86-SSE-NEXT:    cmovpl %ecx, %eax552; X86-SSE-NEXT:    cmovpl %ecx, %edx553; X86-SSE-NEXT:    addl $16, %esp554; X86-SSE-NEXT:    popl %esi555; X86-SSE-NEXT:    retl556;557; X64-LABEL: test_signed_i50_f32:558; X64:       # %bb.0:559; X64-NEXT:    cvttss2si %xmm0, %rax560; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0561; X64-NEXT:    movabsq $-562949953421312, %rcx # imm = 0xFFFE000000000000562; X64-NEXT:    cmovaeq %rax, %rcx563; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0564; X64-NEXT:    movabsq $562949953421311, %rdx # imm = 0x1FFFFFFFFFFFF565; X64-NEXT:    cmovbeq %rcx, %rdx566; X64-NEXT:    xorl %eax, %eax567; X64-NEXT:    ucomiss %xmm0, %xmm0568; X64-NEXT:    cmovnpq %rdx, %rax569; X64-NEXT:    retq570    %x = call i50 @llvm.fptosi.sat.i50.f32(float %f)571    ret i50 %x572}573 574define i64 @test_signed_i64_f32(float %f) nounwind {575; X86-X87-LABEL: test_signed_i64_f32:576; X86-X87:       # %bb.0:577; X86-X87-NEXT:    pushl %edi578; X86-X87-NEXT:    pushl %esi579; X86-X87-NEXT:    subl $20, %esp580; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)581; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)582; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax583; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00584; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)585; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)586; X86-X87-NEXT:    fld %st(0)587; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)588; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)589; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}590; X86-X87-NEXT:    fxch %st(1)591; X86-X87-NEXT:    fucom %st(1)592; X86-X87-NEXT:    fstp %st(1)593; X86-X87-NEXT:    fnstsw %ax594; X86-X87-NEXT:    xorl %ecx, %ecx595; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax596; X86-X87-NEXT:    sahf597; X86-X87-NEXT:    movl $0, %edx598; X86-X87-NEXT:    jb .LBB7_2599; X86-X87-NEXT:  # %bb.1:600; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx601; X86-X87-NEXT:  .LBB7_2:602; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x80000000603; X86-X87-NEXT:    jb .LBB7_4604; X86-X87-NEXT:  # %bb.3:605; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi606; X86-X87-NEXT:  .LBB7_4:607; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}608; X86-X87-NEXT:    fxch %st(1)609; X86-X87-NEXT:    fucom %st(1)610; X86-X87-NEXT:    fstp %st(1)611; X86-X87-NEXT:    fnstsw %ax612; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax613; X86-X87-NEXT:    sahf614; X86-X87-NEXT:    movl $2147483647, %esi # imm = 0x7FFFFFFF615; X86-X87-NEXT:    ja .LBB7_6616; X86-X87-NEXT:  # %bb.5:617; X86-X87-NEXT:    movl %edi, %esi618; X86-X87-NEXT:  .LBB7_6:619; X86-X87-NEXT:    movl $-1, %edi620; X86-X87-NEXT:    ja .LBB7_8621; X86-X87-NEXT:  # %bb.7:622; X86-X87-NEXT:    movl %edx, %edi623; X86-X87-NEXT:  .LBB7_8:624; X86-X87-NEXT:    fucomp %st(0)625; X86-X87-NEXT:    fnstsw %ax626; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax627; X86-X87-NEXT:    sahf628; X86-X87-NEXT:    movl $0, %edx629; X86-X87-NEXT:    jp .LBB7_10630; X86-X87-NEXT:  # %bb.9:631; X86-X87-NEXT:    movl %edi, %ecx632; X86-X87-NEXT:    movl %esi, %edx633; X86-X87-NEXT:  .LBB7_10:634; X86-X87-NEXT:    movl %ecx, %eax635; X86-X87-NEXT:    addl $20, %esp636; X86-X87-NEXT:    popl %esi637; X86-X87-NEXT:    popl %edi638; X86-X87-NEXT:    retl639;640; X86-SSE-LABEL: test_signed_i64_f32:641; X86-SSE:       # %bb.0:642; X86-SSE-NEXT:    pushl %esi643; X86-SSE-NEXT:    subl $16, %esp644; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero645; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)646; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)647; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)648; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax649; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00650; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)651; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)652; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)653; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)654; X86-SSE-NEXT:    xorl %ecx, %ecx655; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0656; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi657; X86-SSE-NEXT:    cmovbl %ecx, %esi658; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000659; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax660; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0661; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF662; X86-SSE-NEXT:    cmovbel %eax, %edx663; X86-SSE-NEXT:    movl $-1, %eax664; X86-SSE-NEXT:    cmovbel %esi, %eax665; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0666; X86-SSE-NEXT:    cmovpl %ecx, %eax667; X86-SSE-NEXT:    cmovpl %ecx, %edx668; X86-SSE-NEXT:    addl $16, %esp669; X86-SSE-NEXT:    popl %esi670; X86-SSE-NEXT:    retl671;672; X64-LABEL: test_signed_i64_f32:673; X64:       # %bb.0:674; X64-NEXT:    cvttss2si %xmm0, %rax675; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0676; X64-NEXT:    movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF677; X64-NEXT:    cmovbeq %rax, %rcx678; X64-NEXT:    xorl %eax, %eax679; X64-NEXT:    ucomiss %xmm0, %xmm0680; X64-NEXT:    cmovnpq %rcx, %rax681; X64-NEXT:    retq682    %x = call i64 @llvm.fptosi.sat.i64.f32(float %f)683    ret i64 %x684}685 686define i100 @test_signed_i100_f32(float %f) nounwind {687; X86-X87-LABEL: test_signed_i100_f32:688; X86-X87:       # %bb.0:689; X86-X87-NEXT:    pushl %ebp690; X86-X87-NEXT:    pushl %ebx691; X86-X87-NEXT:    pushl %edi692; X86-X87-NEXT:    pushl %esi693; X86-X87-NEXT:    subl $60, %esp694; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)695; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)696; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax697; X86-X87-NEXT:    movl %eax, (%esp)698; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}699; X86-X87-NEXT:    fxch %st(1)700; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill701; X86-X87-NEXT:    fucompp702; X86-X87-NEXT:    fnstsw %ax703; X86-X87-NEXT:    movl %eax, %ebx704; X86-X87-NEXT:    calll __fixsfti705; X86-X87-NEXT:    subl $4, %esp706; X86-X87-NEXT:    xorl %edx, %edx707; X86-X87-NEXT:    movb %bh, %ah708; X86-X87-NEXT:    sahf709; X86-X87-NEXT:    movl $-8, %ebx710; X86-X87-NEXT:    jb .LBB8_2711; X86-X87-NEXT:  # %bb.1:712; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx713; X86-X87-NEXT:  .LBB8_2:714; X86-X87-NEXT:    movl $0, %ecx715; X86-X87-NEXT:    movl $0, %ebp716; X86-X87-NEXT:    jb .LBB8_4717; X86-X87-NEXT:  # %bb.3:718; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx719; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp720; X86-X87-NEXT:  .LBB8_4:721; X86-X87-NEXT:    movl $0, %edi722; X86-X87-NEXT:    jb .LBB8_6723; X86-X87-NEXT:  # %bb.5:724; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi725; X86-X87-NEXT:  .LBB8_6:726; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}727; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload728; X86-X87-NEXT:    fucom %st(1)729; X86-X87-NEXT:    fstp %st(1)730; X86-X87-NEXT:    fnstsw %ax731; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax732; X86-X87-NEXT:    sahf733; X86-X87-NEXT:    movl $-1, %eax734; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill735; X86-X87-NEXT:    movl $-1, %esi736; X86-X87-NEXT:    ja .LBB8_8737; X86-X87-NEXT:  # %bb.7:738; X86-X87-NEXT:    movl %edi, %eax739; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill740; X86-X87-NEXT:    movl %ecx, %esi741; X86-X87-NEXT:  .LBB8_8:742; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill743; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx744; X86-X87-NEXT:    movl $7, %edi745; X86-X87-NEXT:    ja .LBB8_10746; X86-X87-NEXT:  # %bb.9:747; X86-X87-NEXT:    movl %ebx, %edi748; X86-X87-NEXT:  .LBB8_10:749; X86-X87-NEXT:    fucomp %st(0)750; X86-X87-NEXT:    fnstsw %ax751; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax752; X86-X87-NEXT:    sahf753; X86-X87-NEXT:    movl $0, %eax754; X86-X87-NEXT:    movl $0, %ebp755; X86-X87-NEXT:    movl $0, %ebx756; X86-X87-NEXT:    jp .LBB8_12757; X86-X87-NEXT:  # %bb.11:758; X86-X87-NEXT:    movl %edi, %edx759; X86-X87-NEXT:    movl %esi, %eax760; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload761; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload762; X86-X87-NEXT:  .LBB8_12:763; X86-X87-NEXT:    movl %ebx, 8(%ecx)764; X86-X87-NEXT:    movl %ebp, 4(%ecx)765; X86-X87-NEXT:    movl %eax, (%ecx)766; X86-X87-NEXT:    andl $15, %edx767; X86-X87-NEXT:    movb %dl, 12(%ecx)768; X86-X87-NEXT:    movl %ecx, %eax769; X86-X87-NEXT:    addl $60, %esp770; X86-X87-NEXT:    popl %esi771; X86-X87-NEXT:    popl %edi772; X86-X87-NEXT:    popl %ebx773; X86-X87-NEXT:    popl %ebp774; X86-X87-NEXT:    retl $4775;776; X86-SSE-LABEL: test_signed_i100_f32:777; X86-SSE:       # %bb.0:778; X86-SSE-NEXT:    pushl %ebp779; X86-SSE-NEXT:    pushl %ebx780; X86-SSE-NEXT:    pushl %edi781; X86-SSE-NEXT:    pushl %esi782; X86-SSE-NEXT:    subl $44, %esp783; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi784; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero785; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)786; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax787; X86-SSE-NEXT:    movl %eax, (%esp)788; X86-SSE-NEXT:    calll __fixsfti789; X86-SSE-NEXT:    subl $4, %esp790; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero791; X86-SSE-NEXT:    xorl %ebp, %ebp792; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0793; X86-SSE-NEXT:    movl $-8, %ebx794; X86-SSE-NEXT:    movl $0, %ecx795; X86-SSE-NEXT:    movl $0, %edx796; X86-SSE-NEXT:    movl $0, %edi797; X86-SSE-NEXT:    jb .LBB8_2798; X86-SSE-NEXT:  # %bb.1:799; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx800; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx801; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx802; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi803; X86-SSE-NEXT:  .LBB8_2:804; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0805; X86-SSE-NEXT:    movl $-1, %eax806; X86-SSE-NEXT:    cmoval %eax, %edi807; X86-SSE-NEXT:    cmoval %eax, %edx808; X86-SSE-NEXT:    cmoval %eax, %ecx809; X86-SSE-NEXT:    movl $7, %eax810; X86-SSE-NEXT:    cmovbel %ebx, %eax811; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0812; X86-SSE-NEXT:    cmovpl %ebp, %eax813; X86-SSE-NEXT:    cmovpl %ebp, %ecx814; X86-SSE-NEXT:    cmovpl %ebp, %edx815; X86-SSE-NEXT:    cmovpl %ebp, %edi816; X86-SSE-NEXT:    movl %edi, 8(%esi)817; X86-SSE-NEXT:    movl %edx, 4(%esi)818; X86-SSE-NEXT:    movl %ecx, (%esi)819; X86-SSE-NEXT:    andl $15, %eax820; X86-SSE-NEXT:    movb %al, 12(%esi)821; X86-SSE-NEXT:    movl %esi, %eax822; X86-SSE-NEXT:    addl $44, %esp823; X86-SSE-NEXT:    popl %esi824; X86-SSE-NEXT:    popl %edi825; X86-SSE-NEXT:    popl %ebx826; X86-SSE-NEXT:    popl %ebp827; X86-SSE-NEXT:    retl $4828;829; X64-LABEL: test_signed_i100_f32:830; X64:       # %bb.0:831; X64-NEXT:    pushq %rax832; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill833; X64-NEXT:    callq __fixsfti@PLT834; X64-NEXT:    xorl %ecx, %ecx835; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload836; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero837; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0838; X64-NEXT:    cmovbq %rcx, %rax839; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF800000000840; X64-NEXT:    cmovbq %rsi, %rdx841; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0842; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF843; X64-NEXT:    cmovaq %rsi, %rdx844; X64-NEXT:    movq $-1, %rsi845; X64-NEXT:    cmovaq %rsi, %rax846; X64-NEXT:    ucomiss %xmm0, %xmm0847; X64-NEXT:    cmovpq %rcx, %rax848; X64-NEXT:    cmovpq %rcx, %rdx849; X64-NEXT:    popq %rcx850; X64-NEXT:    retq851    %x = call i100 @llvm.fptosi.sat.i100.f32(float %f)852    ret i100 %x853}854 855define i128 @test_signed_i128_f32(float %f) nounwind {856; X86-X87-LABEL: test_signed_i128_f32:857; X86-X87:       # %bb.0:858; X86-X87-NEXT:    pushl %ebp859; X86-X87-NEXT:    pushl %ebx860; X86-X87-NEXT:    pushl %edi861; X86-X87-NEXT:    pushl %esi862; X86-X87-NEXT:    subl $60, %esp863; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)864; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)865; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax866; X86-X87-NEXT:    movl %eax, (%esp)867; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}868; X86-X87-NEXT:    fxch %st(1)869; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill870; X86-X87-NEXT:    fucompp871; X86-X87-NEXT:    fnstsw %ax872; X86-X87-NEXT:    movl %eax, %ebx873; X86-X87-NEXT:    calll __fixsfti874; X86-X87-NEXT:    subl $4, %esp875; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill876; X86-X87-NEXT:    movb %bh, %ah877; X86-X87-NEXT:    sahf878; X86-X87-NEXT:    movl $0, %eax879; X86-X87-NEXT:    movl $0, %ebx880; X86-X87-NEXT:    jae .LBB9_1881; X86-X87-NEXT:  # %bb.2:882; X86-X87-NEXT:    movl $0, %edx883; X86-X87-NEXT:    jae .LBB9_3884; X86-X87-NEXT:  .LBB9_4:885; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000886; X86-X87-NEXT:    jb .LBB9_6887; X86-X87-NEXT:  .LBB9_5:888; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx889; X86-X87-NEXT:  .LBB9_6:890; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill891; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}892; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload893; X86-X87-NEXT:    fucom %st(1)894; X86-X87-NEXT:    fstp %st(1)895; X86-X87-NEXT:    fnstsw %ax896; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax897; X86-X87-NEXT:    sahf898; X86-X87-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF899; X86-X87-NEXT:    ja .LBB9_8900; X86-X87-NEXT:  # %bb.7:901; X86-X87-NEXT:    movl %ecx, %eax902; X86-X87-NEXT:  .LBB9_8:903; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill904; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx905; X86-X87-NEXT:    movl $-1, %ebp906; X86-X87-NEXT:    movl $-1, %edi907; X86-X87-NEXT:    movl $-1, %esi908; X86-X87-NEXT:    ja .LBB9_10909; X86-X87-NEXT:  # %bb.9:910; X86-X87-NEXT:    movl %edx, %ebp911; X86-X87-NEXT:    movl %ebx, %edi912; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload913; X86-X87-NEXT:  .LBB9_10:914; X86-X87-NEXT:    fucomp %st(0)915; X86-X87-NEXT:    fnstsw %ax916; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax917; X86-X87-NEXT:    sahf918; X86-X87-NEXT:    movl $0, %eax919; X86-X87-NEXT:    movl $0, %edx920; X86-X87-NEXT:    movl $0, %ebx921; X86-X87-NEXT:    jp .LBB9_12922; X86-X87-NEXT:  # %bb.11:923; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill924; X86-X87-NEXT:    movl %edi, %eax925; X86-X87-NEXT:    movl %ebp, %edx926; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload927; X86-X87-NEXT:  .LBB9_12:928; X86-X87-NEXT:    movl %ebx, 12(%ecx)929; X86-X87-NEXT:    movl %edx, 8(%ecx)930; X86-X87-NEXT:    movl %eax, 4(%ecx)931; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload932; X86-X87-NEXT:    movl %eax, (%ecx)933; X86-X87-NEXT:    movl %ecx, %eax934; X86-X87-NEXT:    addl $60, %esp935; X86-X87-NEXT:    popl %esi936; X86-X87-NEXT:    popl %edi937; X86-X87-NEXT:    popl %ebx938; X86-X87-NEXT:    popl %ebp939; X86-X87-NEXT:    retl $4940; X86-X87-NEXT:  .LBB9_1:941; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax942; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx943; X86-X87-NEXT:    movl $0, %edx944; X86-X87-NEXT:    jb .LBB9_4945; X86-X87-NEXT:  .LBB9_3:946; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx947; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000948; X86-X87-NEXT:    jae .LBB9_5949; X86-X87-NEXT:    jmp .LBB9_6950;951; X86-SSE-LABEL: test_signed_i128_f32:952; X86-SSE:       # %bb.0:953; X86-SSE-NEXT:    pushl %ebp954; X86-SSE-NEXT:    pushl %ebx955; X86-SSE-NEXT:    pushl %edi956; X86-SSE-NEXT:    pushl %esi957; X86-SSE-NEXT:    subl $44, %esp958; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi959; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero960; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)961; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax962; X86-SSE-NEXT:    movl %eax, (%esp)963; X86-SSE-NEXT:    calll __fixsfti964; X86-SSE-NEXT:    subl $4, %esp965; X86-SSE-NEXT:    xorl %ecx, %ecx966; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero967; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0968; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax969; X86-SSE-NEXT:    cmovbl %ecx, %eax970; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx971; X86-SSE-NEXT:    cmovbl %ecx, %edx972; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi973; X86-SSE-NEXT:    cmovbl %ecx, %edi974; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x80000000975; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp976; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0977; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF978; X86-SSE-NEXT:    cmovbel %ebp, %ebx979; X86-SSE-NEXT:    movl $-1, %ebp980; X86-SSE-NEXT:    cmoval %ebp, %edi981; X86-SSE-NEXT:    cmoval %ebp, %edx982; X86-SSE-NEXT:    cmoval %ebp, %eax983; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0984; X86-SSE-NEXT:    cmovpl %ecx, %eax985; X86-SSE-NEXT:    cmovpl %ecx, %edx986; X86-SSE-NEXT:    cmovpl %ecx, %edi987; X86-SSE-NEXT:    cmovpl %ecx, %ebx988; X86-SSE-NEXT:    movl %ebx, 12(%esi)989; X86-SSE-NEXT:    movl %edi, 8(%esi)990; X86-SSE-NEXT:    movl %edx, 4(%esi)991; X86-SSE-NEXT:    movl %eax, (%esi)992; X86-SSE-NEXT:    movl %esi, %eax993; X86-SSE-NEXT:    addl $44, %esp994; X86-SSE-NEXT:    popl %esi995; X86-SSE-NEXT:    popl %edi996; X86-SSE-NEXT:    popl %ebx997; X86-SSE-NEXT:    popl %ebp998; X86-SSE-NEXT:    retl $4999;1000; X64-LABEL: test_signed_i128_f32:1001; X64:       # %bb.0:1002; X64-NEXT:    pushq %rax1003; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1004; X64-NEXT:    callq __fixsfti@PLT1005; X64-NEXT:    xorl %ecx, %ecx1006; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1007; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero1008; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01009; X64-NEXT:    cmovbq %rcx, %rax1010; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x80000000000000001011; X64-NEXT:    cmovbq %rsi, %rdx1012; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01013; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF1014; X64-NEXT:    cmovaq %rsi, %rdx1015; X64-NEXT:    movq $-1, %rsi1016; X64-NEXT:    cmovaq %rsi, %rax1017; X64-NEXT:    ucomiss %xmm0, %xmm01018; X64-NEXT:    cmovpq %rcx, %rax1019; X64-NEXT:    cmovpq %rcx, %rdx1020; X64-NEXT:    popq %rcx1021; X64-NEXT:    retq1022    %x = call i128 @llvm.fptosi.sat.i128.f32(float %f)1023    ret i128 %x1024}1025 1026;1027; 64-bit float to signed integer1028;1029 1030declare   i1 @llvm.fptosi.sat.i1.f64  (double)1031declare   i8 @llvm.fptosi.sat.i8.f64  (double)1032declare  i13 @llvm.fptosi.sat.i13.f64 (double)1033declare  i16 @llvm.fptosi.sat.i16.f64 (double)1034declare  i19 @llvm.fptosi.sat.i19.f64 (double)1035declare  i32 @llvm.fptosi.sat.i32.f64 (double)1036declare  i50 @llvm.fptosi.sat.i50.f64 (double)1037declare  i64 @llvm.fptosi.sat.i64.f64 (double)1038declare i100 @llvm.fptosi.sat.i100.f64(double)1039declare i128 @llvm.fptosi.sat.i128.f64(double)1040 1041define i1 @test_signed_i1_f64(double %f) nounwind {1042; X86-X87-LABEL: test_signed_i1_f64:1043; X86-X87:       # %bb.0:1044; X86-X87-NEXT:    pushl %ebx1045; X86-X87-NEXT:    subl $8, %esp1046; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1047; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1048; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1049; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001050; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1051; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1052; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)1053; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1054; X86-X87-NEXT:    fld11055; X86-X87-NEXT:    fchs1056; X86-X87-NEXT:    fxch %st(1)1057; X86-X87-NEXT:    fucom %st(1)1058; X86-X87-NEXT:    fstp %st(1)1059; X86-X87-NEXT:    fnstsw %ax1060; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1061; X86-X87-NEXT:    sahf1062; X86-X87-NEXT:    movb $-1, %dl1063; X86-X87-NEXT:    jb .LBB10_21064; X86-X87-NEXT:  # %bb.1:1065; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx1066; X86-X87-NEXT:  .LBB10_2:1067; X86-X87-NEXT:    fldz1068; X86-X87-NEXT:    fxch %st(1)1069; X86-X87-NEXT:    fucom %st(1)1070; X86-X87-NEXT:    fstp %st(1)1071; X86-X87-NEXT:    fnstsw %ax1072; X86-X87-NEXT:    xorl %ecx, %ecx1073; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1074; X86-X87-NEXT:    sahf1075; X86-X87-NEXT:    movl $0, %ebx1076; X86-X87-NEXT:    ja .LBB10_41077; X86-X87-NEXT:  # %bb.3:1078; X86-X87-NEXT:    movl %edx, %ebx1079; X86-X87-NEXT:  .LBB10_4:1080; X86-X87-NEXT:    fucomp %st(0)1081; X86-X87-NEXT:    fnstsw %ax1082; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1083; X86-X87-NEXT:    sahf1084; X86-X87-NEXT:    jp .LBB10_61085; X86-X87-NEXT:  # %bb.5:1086; X86-X87-NEXT:    movl %ebx, %ecx1087; X86-X87-NEXT:  .LBB10_6:1088; X86-X87-NEXT:    movl %ecx, %eax1089; X86-X87-NEXT:    addl $8, %esp1090; X86-X87-NEXT:    popl %ebx1091; X86-X87-NEXT:    retl1092;1093; X86-SSE-LABEL: test_signed_i1_f64:1094; X86-SSE:       # %bb.0:1095; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = [-1.0E+0,0.0E+0]1096; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm01097; X86-SSE-NEXT:    xorpd %xmm1, %xmm11098; X86-SSE-NEXT:    minsd %xmm0, %xmm11099; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax1100; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax1101; X86-SSE-NEXT:    retl1102;1103; X64-LABEL: test_signed_i1_f64:1104; X64:       # %bb.0:1105; X64-NEXT:    movsd {{.*#+}} xmm1 = [-1.0E+0,0.0E+0]1106; X64-NEXT:    maxsd %xmm0, %xmm11107; X64-NEXT:    xorpd %xmm0, %xmm01108; X64-NEXT:    minsd %xmm1, %xmm01109; X64-NEXT:    cvttsd2si %xmm0, %eax1110; X64-NEXT:    # kill: def $al killed $al killed $eax1111; X64-NEXT:    retq1112    %x = call i1 @llvm.fptosi.sat.i1.f64(double %f)1113    ret i1 %x1114}1115 1116define i8 @test_signed_i8_f64(double %f) nounwind {1117; X86-X87-LABEL: test_signed_i8_f64:1118; X86-X87:       # %bb.0:1119; X86-X87-NEXT:    subl $8, %esp1120; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1121; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1122; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1123; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001124; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1125; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1126; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)1127; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1128; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1129; X86-X87-NEXT:    fxch %st(1)1130; X86-X87-NEXT:    fucom %st(1)1131; X86-X87-NEXT:    fstp %st(1)1132; X86-X87-NEXT:    fnstsw %ax1133; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1134; X86-X87-NEXT:    sahf1135; X86-X87-NEXT:    movb $-128, %dl1136; X86-X87-NEXT:    jb .LBB11_21137; X86-X87-NEXT:  # %bb.1:1138; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx1139; X86-X87-NEXT:  .LBB11_2:1140; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1141; X86-X87-NEXT:    fxch %st(1)1142; X86-X87-NEXT:    fucom %st(1)1143; X86-X87-NEXT:    fstp %st(1)1144; X86-X87-NEXT:    fnstsw %ax1145; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1146; X86-X87-NEXT:    sahf1147; X86-X87-NEXT:    movb $127, %cl1148; X86-X87-NEXT:    ja .LBB11_41149; X86-X87-NEXT:  # %bb.3:1150; X86-X87-NEXT:    movl %edx, %ecx1151; X86-X87-NEXT:  .LBB11_4:1152; X86-X87-NEXT:    fucomp %st(0)1153; X86-X87-NEXT:    fnstsw %ax1154; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1155; X86-X87-NEXT:    sahf1156; X86-X87-NEXT:    jnp .LBB11_61157; X86-X87-NEXT:  # %bb.5:1158; X86-X87-NEXT:    xorl %ecx, %ecx1159; X86-X87-NEXT:  .LBB11_6:1160; X86-X87-NEXT:    movl %ecx, %eax1161; X86-X87-NEXT:    addl $8, %esp1162; X86-X87-NEXT:    retl1163;1164; X86-SSE-LABEL: test_signed_i8_f64:1165; X86-SSE:       # %bb.0:1166; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = [-1.28E+2,0.0E+0]1167; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm01168; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [1.27E+2,0.0E+0]1169; X86-SSE-NEXT:    minsd %xmm0, %xmm11170; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax1171; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax1172; X86-SSE-NEXT:    retl1173;1174; X64-LABEL: test_signed_i8_f64:1175; X64:       # %bb.0:1176; X64-NEXT:    movsd {{.*#+}} xmm1 = [-1.28E+2,0.0E+0]1177; X64-NEXT:    maxsd %xmm0, %xmm11178; X64-NEXT:    movsd {{.*#+}} xmm0 = [1.27E+2,0.0E+0]1179; X64-NEXT:    minsd %xmm1, %xmm01180; X64-NEXT:    cvttsd2si %xmm0, %eax1181; X64-NEXT:    # kill: def $al killed $al killed $eax1182; X64-NEXT:    retq1183    %x = call i8 @llvm.fptosi.sat.i8.f64(double %f)1184    ret i8 %x1185}1186 1187define i13 @test_signed_i13_f64(double %f) nounwind {1188; X86-X87-LABEL: test_signed_i13_f64:1189; X86-X87:       # %bb.0:1190; X86-X87-NEXT:    subl $8, %esp1191; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1192; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1193; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1194; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001195; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1196; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1197; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)1198; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1199; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1200; X86-X87-NEXT:    fxch %st(1)1201; X86-X87-NEXT:    fucom %st(1)1202; X86-X87-NEXT:    fstp %st(1)1203; X86-X87-NEXT:    fnstsw %ax1204; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1205; X86-X87-NEXT:    sahf1206; X86-X87-NEXT:    movl $61440, %ecx # imm = 0xF0001207; X86-X87-NEXT:    jb .LBB12_21208; X86-X87-NEXT:  # %bb.1:1209; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx1210; X86-X87-NEXT:  .LBB12_2:1211; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1212; X86-X87-NEXT:    fxch %st(1)1213; X86-X87-NEXT:    fucom %st(1)1214; X86-X87-NEXT:    fstp %st(1)1215; X86-X87-NEXT:    fnstsw %ax1216; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1217; X86-X87-NEXT:    sahf1218; X86-X87-NEXT:    movl $4095, %edx # imm = 0xFFF1219; X86-X87-NEXT:    ja .LBB12_41220; X86-X87-NEXT:  # %bb.3:1221; X86-X87-NEXT:    movl %ecx, %edx1222; X86-X87-NEXT:  .LBB12_4:1223; X86-X87-NEXT:    fucomp %st(0)1224; X86-X87-NEXT:    fnstsw %ax1225; X86-X87-NEXT:    xorl %ecx, %ecx1226; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1227; X86-X87-NEXT:    sahf1228; X86-X87-NEXT:    jp .LBB12_61229; X86-X87-NEXT:  # %bb.5:1230; X86-X87-NEXT:    movl %edx, %ecx1231; X86-X87-NEXT:  .LBB12_6:1232; X86-X87-NEXT:    movl %ecx, %eax1233; X86-X87-NEXT:    addl $8, %esp1234; X86-X87-NEXT:    retl1235;1236; X86-SSE-LABEL: test_signed_i13_f64:1237; X86-SSE:       # %bb.0:1238; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = [-4.096E+3,0.0E+0]1239; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm01240; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [4.095E+3,0.0E+0]1241; X86-SSE-NEXT:    minsd %xmm0, %xmm11242; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax1243; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax1244; X86-SSE-NEXT:    retl1245;1246; X64-LABEL: test_signed_i13_f64:1247; X64:       # %bb.0:1248; X64-NEXT:    movsd {{.*#+}} xmm1 = [-4.096E+3,0.0E+0]1249; X64-NEXT:    maxsd %xmm0, %xmm11250; X64-NEXT:    movsd {{.*#+}} xmm0 = [4.095E+3,0.0E+0]1251; X64-NEXT:    minsd %xmm1, %xmm01252; X64-NEXT:    cvttsd2si %xmm0, %eax1253; X64-NEXT:    # kill: def $ax killed $ax killed $eax1254; X64-NEXT:    retq1255    %x = call i13 @llvm.fptosi.sat.i13.f64(double %f)1256    ret i13 %x1257}1258 1259define i16 @test_signed_i16_f64(double %f) nounwind {1260; X86-X87-LABEL: test_signed_i16_f64:1261; X86-X87:       # %bb.0:1262; X86-X87-NEXT:    subl $8, %esp1263; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1264; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1265; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1266; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001267; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1268; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1269; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)1270; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1271; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1272; X86-X87-NEXT:    fxch %st(1)1273; X86-X87-NEXT:    fucom %st(1)1274; X86-X87-NEXT:    fstp %st(1)1275; X86-X87-NEXT:    fnstsw %ax1276; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1277; X86-X87-NEXT:    sahf1278; X86-X87-NEXT:    movl $32768, %ecx # imm = 0x80001279; X86-X87-NEXT:    jb .LBB13_21280; X86-X87-NEXT:  # %bb.1:1281; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx1282; X86-X87-NEXT:  .LBB13_2:1283; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1284; X86-X87-NEXT:    fxch %st(1)1285; X86-X87-NEXT:    fucom %st(1)1286; X86-X87-NEXT:    fstp %st(1)1287; X86-X87-NEXT:    fnstsw %ax1288; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1289; X86-X87-NEXT:    sahf1290; X86-X87-NEXT:    movl $32767, %edx # imm = 0x7FFF1291; X86-X87-NEXT:    ja .LBB13_41292; X86-X87-NEXT:  # %bb.3:1293; X86-X87-NEXT:    movl %ecx, %edx1294; X86-X87-NEXT:  .LBB13_4:1295; X86-X87-NEXT:    fucomp %st(0)1296; X86-X87-NEXT:    fnstsw %ax1297; X86-X87-NEXT:    xorl %ecx, %ecx1298; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1299; X86-X87-NEXT:    sahf1300; X86-X87-NEXT:    jp .LBB13_61301; X86-X87-NEXT:  # %bb.5:1302; X86-X87-NEXT:    movl %edx, %ecx1303; X86-X87-NEXT:  .LBB13_6:1304; X86-X87-NEXT:    movl %ecx, %eax1305; X86-X87-NEXT:    addl $8, %esp1306; X86-X87-NEXT:    retl1307;1308; X86-SSE-LABEL: test_signed_i16_f64:1309; X86-SSE:       # %bb.0:1310; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = [-3.2768E+4,0.0E+0]1311; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm01312; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [3.2767E+4,0.0E+0]1313; X86-SSE-NEXT:    minsd %xmm0, %xmm11314; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax1315; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax1316; X86-SSE-NEXT:    retl1317;1318; X64-LABEL: test_signed_i16_f64:1319; X64:       # %bb.0:1320; X64-NEXT:    movsd {{.*#+}} xmm1 = [-3.2768E+4,0.0E+0]1321; X64-NEXT:    maxsd %xmm0, %xmm11322; X64-NEXT:    movsd {{.*#+}} xmm0 = [3.2767E+4,0.0E+0]1323; X64-NEXT:    minsd %xmm1, %xmm01324; X64-NEXT:    cvttsd2si %xmm0, %eax1325; X64-NEXT:    # kill: def $ax killed $ax killed $eax1326; X64-NEXT:    retq1327    %x = call i16 @llvm.fptosi.sat.i16.f64(double %f)1328    ret i16 %x1329}1330 1331define i19 @test_signed_i19_f64(double %f) nounwind {1332; X86-X87-LABEL: test_signed_i19_f64:1333; X86-X87:       # %bb.0:1334; X86-X87-NEXT:    subl $8, %esp1335; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1336; X86-X87-NEXT:    fnstcw (%esp)1337; X86-X87-NEXT:    movzwl (%esp), %eax1338; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001339; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1340; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1341; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)1342; X86-X87-NEXT:    fldcw (%esp)1343; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1344; X86-X87-NEXT:    fxch %st(1)1345; X86-X87-NEXT:    fucom %st(1)1346; X86-X87-NEXT:    fstp %st(1)1347; X86-X87-NEXT:    fnstsw %ax1348; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1349; X86-X87-NEXT:    sahf1350; X86-X87-NEXT:    movl $-262144, %ecx # imm = 0xFFFC00001351; X86-X87-NEXT:    jb .LBB14_21352; X86-X87-NEXT:  # %bb.1:1353; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1354; X86-X87-NEXT:  .LBB14_2:1355; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1356; X86-X87-NEXT:    fxch %st(1)1357; X86-X87-NEXT:    fucom %st(1)1358; X86-X87-NEXT:    fstp %st(1)1359; X86-X87-NEXT:    fnstsw %ax1360; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1361; X86-X87-NEXT:    sahf1362; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF1363; X86-X87-NEXT:    ja .LBB14_41364; X86-X87-NEXT:  # %bb.3:1365; X86-X87-NEXT:    movl %ecx, %edx1366; X86-X87-NEXT:  .LBB14_4:1367; X86-X87-NEXT:    fucomp %st(0)1368; X86-X87-NEXT:    fnstsw %ax1369; X86-X87-NEXT:    xorl %ecx, %ecx1370; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1371; X86-X87-NEXT:    sahf1372; X86-X87-NEXT:    jp .LBB14_61373; X86-X87-NEXT:  # %bb.5:1374; X86-X87-NEXT:    movl %edx, %ecx1375; X86-X87-NEXT:  .LBB14_6:1376; X86-X87-NEXT:    movl %ecx, %eax1377; X86-X87-NEXT:    addl $8, %esp1378; X86-X87-NEXT:    retl1379;1380; X86-SSE-LABEL: test_signed_i19_f64:1381; X86-SSE:       # %bb.0:1382; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1383; X86-SSE-NEXT:    xorl %eax, %eax1384; X86-SSE-NEXT:    ucomisd %xmm0, %xmm01385; X86-SSE-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01386; X86-SSE-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01387; X86-SSE-NEXT:    cvttsd2si %xmm0, %ecx1388; X86-SSE-NEXT:    cmovnpl %ecx, %eax1389; X86-SSE-NEXT:    retl1390;1391; X64-LABEL: test_signed_i19_f64:1392; X64:       # %bb.0:1393; X64-NEXT:    xorl %eax, %eax1394; X64-NEXT:    ucomisd %xmm0, %xmm01395; X64-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01396; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01397; X64-NEXT:    cvttsd2si %xmm0, %ecx1398; X64-NEXT:    cmovnpl %ecx, %eax1399; X64-NEXT:    retq1400    %x = call i19 @llvm.fptosi.sat.i19.f64(double %f)1401    ret i19 %x1402}1403 1404define i32 @test_signed_i32_f64(double %f) nounwind {1405; X86-X87-LABEL: test_signed_i32_f64:1406; X86-X87:       # %bb.0:1407; X86-X87-NEXT:    subl $8, %esp1408; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1409; X86-X87-NEXT:    fnstcw (%esp)1410; X86-X87-NEXT:    movzwl (%esp), %eax1411; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001412; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1413; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1414; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)1415; X86-X87-NEXT:    fldcw (%esp)1416; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1417; X86-X87-NEXT:    fxch %st(1)1418; X86-X87-NEXT:    fucom %st(1)1419; X86-X87-NEXT:    fstp %st(1)1420; X86-X87-NEXT:    fnstsw %ax1421; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1422; X86-X87-NEXT:    sahf1423; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x800000001424; X86-X87-NEXT:    jb .LBB15_21425; X86-X87-NEXT:  # %bb.1:1426; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1427; X86-X87-NEXT:  .LBB15_2:1428; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1429; X86-X87-NEXT:    fxch %st(1)1430; X86-X87-NEXT:    fucom %st(1)1431; X86-X87-NEXT:    fstp %st(1)1432; X86-X87-NEXT:    fnstsw %ax1433; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1434; X86-X87-NEXT:    sahf1435; X86-X87-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF1436; X86-X87-NEXT:    ja .LBB15_41437; X86-X87-NEXT:  # %bb.3:1438; X86-X87-NEXT:    movl %ecx, %edx1439; X86-X87-NEXT:  .LBB15_4:1440; X86-X87-NEXT:    fucomp %st(0)1441; X86-X87-NEXT:    fnstsw %ax1442; X86-X87-NEXT:    xorl %ecx, %ecx1443; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1444; X86-X87-NEXT:    sahf1445; X86-X87-NEXT:    jp .LBB15_61446; X86-X87-NEXT:  # %bb.5:1447; X86-X87-NEXT:    movl %edx, %ecx1448; X86-X87-NEXT:  .LBB15_6:1449; X86-X87-NEXT:    movl %ecx, %eax1450; X86-X87-NEXT:    addl $8, %esp1451; X86-X87-NEXT:    retl1452;1453; X86-SSE-LABEL: test_signed_i32_f64:1454; X86-SSE:       # %bb.0:1455; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1456; X86-SSE-NEXT:    xorl %eax, %eax1457; X86-SSE-NEXT:    ucomisd %xmm0, %xmm01458; X86-SSE-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01459; X86-SSE-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01460; X86-SSE-NEXT:    cvttsd2si %xmm0, %ecx1461; X86-SSE-NEXT:    cmovnpl %ecx, %eax1462; X86-SSE-NEXT:    retl1463;1464; X64-LABEL: test_signed_i32_f64:1465; X64:       # %bb.0:1466; X64-NEXT:    xorl %eax, %eax1467; X64-NEXT:    ucomisd %xmm0, %xmm01468; X64-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01469; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01470; X64-NEXT:    cvttsd2si %xmm0, %ecx1471; X64-NEXT:    cmovnpl %ecx, %eax1472; X64-NEXT:    retq1473    %x = call i32 @llvm.fptosi.sat.i32.f64(double %f)1474    ret i32 %x1475}1476 1477define i50 @test_signed_i50_f64(double %f) nounwind {1478; X86-X87-LABEL: test_signed_i50_f64:1479; X86-X87:       # %bb.0:1480; X86-X87-NEXT:    pushl %edi1481; X86-X87-NEXT:    pushl %esi1482; X86-X87-NEXT:    subl $20, %esp1483; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1484; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1485; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1486; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001487; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1488; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1489; X86-X87-NEXT:    fld %st(0)1490; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)1491; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1492; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1493; X86-X87-NEXT:    fxch %st(1)1494; X86-X87-NEXT:    fucom %st(1)1495; X86-X87-NEXT:    fstp %st(1)1496; X86-X87-NEXT:    fnstsw %ax1497; X86-X87-NEXT:    xorl %ecx, %ecx1498; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1499; X86-X87-NEXT:    sahf1500; X86-X87-NEXT:    movl $0, %edx1501; X86-X87-NEXT:    jb .LBB16_21502; X86-X87-NEXT:  # %bb.1:1503; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx1504; X86-X87-NEXT:  .LBB16_2:1505; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE00001506; X86-X87-NEXT:    jb .LBB16_41507; X86-X87-NEXT:  # %bb.3:1508; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi1509; X86-X87-NEXT:  .LBB16_4:1510; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1511; X86-X87-NEXT:    fxch %st(1)1512; X86-X87-NEXT:    fucom %st(1)1513; X86-X87-NEXT:    fstp %st(1)1514; X86-X87-NEXT:    fnstsw %ax1515; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1516; X86-X87-NEXT:    sahf1517; X86-X87-NEXT:    movl $131071, %esi # imm = 0x1FFFF1518; X86-X87-NEXT:    ja .LBB16_61519; X86-X87-NEXT:  # %bb.5:1520; X86-X87-NEXT:    movl %edi, %esi1521; X86-X87-NEXT:  .LBB16_6:1522; X86-X87-NEXT:    movl $-1, %edi1523; X86-X87-NEXT:    ja .LBB16_81524; X86-X87-NEXT:  # %bb.7:1525; X86-X87-NEXT:    movl %edx, %edi1526; X86-X87-NEXT:  .LBB16_8:1527; X86-X87-NEXT:    fucomp %st(0)1528; X86-X87-NEXT:    fnstsw %ax1529; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1530; X86-X87-NEXT:    sahf1531; X86-X87-NEXT:    movl $0, %edx1532; X86-X87-NEXT:    jp .LBB16_101533; X86-X87-NEXT:  # %bb.9:1534; X86-X87-NEXT:    movl %edi, %ecx1535; X86-X87-NEXT:    movl %esi, %edx1536; X86-X87-NEXT:  .LBB16_10:1537; X86-X87-NEXT:    movl %ecx, %eax1538; X86-X87-NEXT:    addl $20, %esp1539; X86-X87-NEXT:    popl %esi1540; X86-X87-NEXT:    popl %edi1541; X86-X87-NEXT:    retl1542;1543; X86-SSE-LABEL: test_signed_i50_f64:1544; X86-SSE:       # %bb.0:1545; X86-SSE-NEXT:    pushl %esi1546; X86-SSE-NEXT:    subl $16, %esp1547; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1548; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)1549; X86-SSE-NEXT:    fldl {{[0-9]+}}(%esp)1550; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)1551; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1552; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC001553; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)1554; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)1555; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)1556; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)1557; X86-SSE-NEXT:    xorl %ecx, %ecx1558; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01559; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi1560; X86-SSE-NEXT:    cmovbl %ecx, %esi1561; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE00001562; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax1563; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01564; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF1565; X86-SSE-NEXT:    cmovbel %eax, %edx1566; X86-SSE-NEXT:    movl $-1, %eax1567; X86-SSE-NEXT:    cmovbel %esi, %eax1568; X86-SSE-NEXT:    ucomisd %xmm0, %xmm01569; X86-SSE-NEXT:    cmovpl %ecx, %eax1570; X86-SSE-NEXT:    cmovpl %ecx, %edx1571; X86-SSE-NEXT:    addl $16, %esp1572; X86-SSE-NEXT:    popl %esi1573; X86-SSE-NEXT:    retl1574;1575; X64-LABEL: test_signed_i50_f64:1576; X64:       # %bb.0:1577; X64-NEXT:    xorl %eax, %eax1578; X64-NEXT:    ucomisd %xmm0, %xmm01579; X64-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01580; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01581; X64-NEXT:    cvttsd2si %xmm0, %rcx1582; X64-NEXT:    cmovnpq %rcx, %rax1583; X64-NEXT:    retq1584    %x = call i50 @llvm.fptosi.sat.i50.f64(double %f)1585    ret i50 %x1586}1587 1588define i64 @test_signed_i64_f64(double %f) nounwind {1589; X86-X87-LABEL: test_signed_i64_f64:1590; X86-X87:       # %bb.0:1591; X86-X87-NEXT:    pushl %edi1592; X86-X87-NEXT:    pushl %esi1593; X86-X87-NEXT:    subl $20, %esp1594; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1595; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)1596; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1597; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC001598; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)1599; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1600; X86-X87-NEXT:    fld %st(0)1601; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)1602; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)1603; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1604; X86-X87-NEXT:    fxch %st(1)1605; X86-X87-NEXT:    fucom %st(1)1606; X86-X87-NEXT:    fstp %st(1)1607; X86-X87-NEXT:    fnstsw %ax1608; X86-X87-NEXT:    xorl %ecx, %ecx1609; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1610; X86-X87-NEXT:    sahf1611; X86-X87-NEXT:    movl $0, %edx1612; X86-X87-NEXT:    jb .LBB17_21613; X86-X87-NEXT:  # %bb.1:1614; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx1615; X86-X87-NEXT:  .LBB17_2:1616; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x800000001617; X86-X87-NEXT:    jb .LBB17_41618; X86-X87-NEXT:  # %bb.3:1619; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi1620; X86-X87-NEXT:  .LBB17_4:1621; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1622; X86-X87-NEXT:    fxch %st(1)1623; X86-X87-NEXT:    fucom %st(1)1624; X86-X87-NEXT:    fstp %st(1)1625; X86-X87-NEXT:    fnstsw %ax1626; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1627; X86-X87-NEXT:    sahf1628; X86-X87-NEXT:    movl $2147483647, %esi # imm = 0x7FFFFFFF1629; X86-X87-NEXT:    ja .LBB17_61630; X86-X87-NEXT:  # %bb.5:1631; X86-X87-NEXT:    movl %edi, %esi1632; X86-X87-NEXT:  .LBB17_6:1633; X86-X87-NEXT:    movl $-1, %edi1634; X86-X87-NEXT:    ja .LBB17_81635; X86-X87-NEXT:  # %bb.7:1636; X86-X87-NEXT:    movl %edx, %edi1637; X86-X87-NEXT:  .LBB17_8:1638; X86-X87-NEXT:    fucomp %st(0)1639; X86-X87-NEXT:    fnstsw %ax1640; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1641; X86-X87-NEXT:    sahf1642; X86-X87-NEXT:    movl $0, %edx1643; X86-X87-NEXT:    jp .LBB17_101644; X86-X87-NEXT:  # %bb.9:1645; X86-X87-NEXT:    movl %edi, %ecx1646; X86-X87-NEXT:    movl %esi, %edx1647; X86-X87-NEXT:  .LBB17_10:1648; X86-X87-NEXT:    movl %ecx, %eax1649; X86-X87-NEXT:    addl $20, %esp1650; X86-X87-NEXT:    popl %esi1651; X86-X87-NEXT:    popl %edi1652; X86-X87-NEXT:    retl1653;1654; X86-SSE-LABEL: test_signed_i64_f64:1655; X86-SSE:       # %bb.0:1656; X86-SSE-NEXT:    pushl %esi1657; X86-SSE-NEXT:    subl $16, %esp1658; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1659; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)1660; X86-SSE-NEXT:    fldl {{[0-9]+}}(%esp)1661; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)1662; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1663; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC001664; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)1665; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)1666; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)1667; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)1668; X86-SSE-NEXT:    xorl %ecx, %ecx1669; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01670; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi1671; X86-SSE-NEXT:    cmovbl %ecx, %esi1672; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x800000001673; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax1674; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01675; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF1676; X86-SSE-NEXT:    cmovbel %eax, %edx1677; X86-SSE-NEXT:    movl $-1, %eax1678; X86-SSE-NEXT:    cmovbel %esi, %eax1679; X86-SSE-NEXT:    ucomisd %xmm0, %xmm01680; X86-SSE-NEXT:    cmovpl %ecx, %eax1681; X86-SSE-NEXT:    cmovpl %ecx, %edx1682; X86-SSE-NEXT:    addl $16, %esp1683; X86-SSE-NEXT:    popl %esi1684; X86-SSE-NEXT:    retl1685;1686; X64-LABEL: test_signed_i64_f64:1687; X64:       # %bb.0:1688; X64-NEXT:    cvttsd2si %xmm0, %rax1689; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01690; X64-NEXT:    movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1691; X64-NEXT:    cmovbeq %rax, %rcx1692; X64-NEXT:    xorl %eax, %eax1693; X64-NEXT:    ucomisd %xmm0, %xmm01694; X64-NEXT:    cmovnpq %rcx, %rax1695; X64-NEXT:    retq1696    %x = call i64 @llvm.fptosi.sat.i64.f64(double %f)1697    ret i64 %x1698}1699 1700define i100 @test_signed_i100_f64(double %f) nounwind {1701; X86-X87-LABEL: test_signed_i100_f64:1702; X86-X87:       # %bb.0:1703; X86-X87-NEXT:    pushl %ebp1704; X86-X87-NEXT:    pushl %ebx1705; X86-X87-NEXT:    pushl %edi1706; X86-X87-NEXT:    pushl %esi1707; X86-X87-NEXT:    subl $60, %esp1708; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1709; X86-X87-NEXT:    fstl {{[0-9]+}}(%esp)1710; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1711; X86-X87-NEXT:    movl %eax, (%esp)1712; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1713; X86-X87-NEXT:    fxch %st(1)1714; X86-X87-NEXT:    fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill1715; X86-X87-NEXT:    fucompp1716; X86-X87-NEXT:    fnstsw %ax1717; X86-X87-NEXT:    movl %eax, %ebx1718; X86-X87-NEXT:    calll __fixdfti1719; X86-X87-NEXT:    subl $4, %esp1720; X86-X87-NEXT:    xorl %edx, %edx1721; X86-X87-NEXT:    movb %bh, %ah1722; X86-X87-NEXT:    sahf1723; X86-X87-NEXT:    movl $-8, %ebx1724; X86-X87-NEXT:    jb .LBB18_21725; X86-X87-NEXT:  # %bb.1:1726; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx1727; X86-X87-NEXT:  .LBB18_2:1728; X86-X87-NEXT:    movl $0, %ecx1729; X86-X87-NEXT:    movl $0, %ebp1730; X86-X87-NEXT:    jb .LBB18_41731; X86-X87-NEXT:  # %bb.3:1732; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1733; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp1734; X86-X87-NEXT:  .LBB18_4:1735; X86-X87-NEXT:    movl $0, %edi1736; X86-X87-NEXT:    jb .LBB18_61737; X86-X87-NEXT:  # %bb.5:1738; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi1739; X86-X87-NEXT:  .LBB18_6:1740; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1741; X86-X87-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload1742; X86-X87-NEXT:    fucom %st(1)1743; X86-X87-NEXT:    fstp %st(1)1744; X86-X87-NEXT:    fnstsw %ax1745; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1746; X86-X87-NEXT:    sahf1747; X86-X87-NEXT:    movl $-1, %eax1748; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill1749; X86-X87-NEXT:    movl $-1, %esi1750; X86-X87-NEXT:    ja .LBB18_81751; X86-X87-NEXT:  # %bb.7:1752; X86-X87-NEXT:    movl %edi, %eax1753; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1754; X86-X87-NEXT:    movl %ecx, %esi1755; X86-X87-NEXT:  .LBB18_8:1756; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1757; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1758; X86-X87-NEXT:    movl $7, %edi1759; X86-X87-NEXT:    ja .LBB18_101760; X86-X87-NEXT:  # %bb.9:1761; X86-X87-NEXT:    movl %ebx, %edi1762; X86-X87-NEXT:  .LBB18_10:1763; X86-X87-NEXT:    fucomp %st(0)1764; X86-X87-NEXT:    fnstsw %ax1765; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1766; X86-X87-NEXT:    sahf1767; X86-X87-NEXT:    movl $0, %eax1768; X86-X87-NEXT:    movl $0, %ebp1769; X86-X87-NEXT:    movl $0, %ebx1770; X86-X87-NEXT:    jp .LBB18_121771; X86-X87-NEXT:  # %bb.11:1772; X86-X87-NEXT:    movl %edi, %edx1773; X86-X87-NEXT:    movl %esi, %eax1774; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload1775; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload1776; X86-X87-NEXT:  .LBB18_12:1777; X86-X87-NEXT:    movl %ebx, 8(%ecx)1778; X86-X87-NEXT:    movl %ebp, 4(%ecx)1779; X86-X87-NEXT:    movl %eax, (%ecx)1780; X86-X87-NEXT:    andl $15, %edx1781; X86-X87-NEXT:    movb %dl, 12(%ecx)1782; X86-X87-NEXT:    movl %ecx, %eax1783; X86-X87-NEXT:    addl $60, %esp1784; X86-X87-NEXT:    popl %esi1785; X86-X87-NEXT:    popl %edi1786; X86-X87-NEXT:    popl %ebx1787; X86-X87-NEXT:    popl %ebp1788; X86-X87-NEXT:    retl $41789;1790; X86-SSE-LABEL: test_signed_i100_f64:1791; X86-SSE:       # %bb.0:1792; X86-SSE-NEXT:    pushl %ebp1793; X86-SSE-NEXT:    pushl %ebx1794; X86-SSE-NEXT:    pushl %edi1795; X86-SSE-NEXT:    pushl %esi1796; X86-SSE-NEXT:    subl $44, %esp1797; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi1798; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1799; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)1800; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax1801; X86-SSE-NEXT:    movl %eax, (%esp)1802; X86-SSE-NEXT:    calll __fixdfti1803; X86-SSE-NEXT:    subl $4, %esp1804; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1805; X86-SSE-NEXT:    xorl %ebp, %ebp1806; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01807; X86-SSE-NEXT:    movl $-8, %ebx1808; X86-SSE-NEXT:    movl $0, %ecx1809; X86-SSE-NEXT:    movl $0, %edx1810; X86-SSE-NEXT:    movl $0, %edi1811; X86-SSE-NEXT:    jb .LBB18_21812; X86-SSE-NEXT:  # %bb.1:1813; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx1814; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx1815; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx1816; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi1817; X86-SSE-NEXT:  .LBB18_2:1818; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01819; X86-SSE-NEXT:    movl $-1, %eax1820; X86-SSE-NEXT:    cmoval %eax, %edi1821; X86-SSE-NEXT:    cmoval %eax, %edx1822; X86-SSE-NEXT:    cmoval %eax, %ecx1823; X86-SSE-NEXT:    movl $7, %eax1824; X86-SSE-NEXT:    cmovbel %ebx, %eax1825; X86-SSE-NEXT:    ucomisd %xmm0, %xmm01826; X86-SSE-NEXT:    cmovpl %ebp, %eax1827; X86-SSE-NEXT:    cmovpl %ebp, %ecx1828; X86-SSE-NEXT:    cmovpl %ebp, %edx1829; X86-SSE-NEXT:    cmovpl %ebp, %edi1830; X86-SSE-NEXT:    movl %edi, 8(%esi)1831; X86-SSE-NEXT:    movl %edx, 4(%esi)1832; X86-SSE-NEXT:    movl %ecx, (%esi)1833; X86-SSE-NEXT:    andl $15, %eax1834; X86-SSE-NEXT:    movb %al, 12(%esi)1835; X86-SSE-NEXT:    movl %esi, %eax1836; X86-SSE-NEXT:    addl $44, %esp1837; X86-SSE-NEXT:    popl %esi1838; X86-SSE-NEXT:    popl %edi1839; X86-SSE-NEXT:    popl %ebx1840; X86-SSE-NEXT:    popl %ebp1841; X86-SSE-NEXT:    retl $41842;1843; X64-LABEL: test_signed_i100_f64:1844; X64:       # %bb.0:1845; X64-NEXT:    pushq %rax1846; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill1847; X64-NEXT:    callq __fixdfti@PLT1848; X64-NEXT:    xorl %ecx, %ecx1849; X64-NEXT:    movsd (%rsp), %xmm0 # 8-byte Reload1850; X64-NEXT:    # xmm0 = mem[0],zero1851; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01852; X64-NEXT:    cmovbq %rcx, %rax1853; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF8000000001854; X64-NEXT:    cmovbq %rsi, %rdx1855; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01856; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF1857; X64-NEXT:    cmovaq %rsi, %rdx1858; X64-NEXT:    movq $-1, %rsi1859; X64-NEXT:    cmovaq %rsi, %rax1860; X64-NEXT:    ucomisd %xmm0, %xmm01861; X64-NEXT:    cmovpq %rcx, %rax1862; X64-NEXT:    cmovpq %rcx, %rdx1863; X64-NEXT:    popq %rcx1864; X64-NEXT:    retq1865    %x = call i100 @llvm.fptosi.sat.i100.f64(double %f)1866    ret i100 %x1867}1868 1869define i128 @test_signed_i128_f64(double %f) nounwind {1870; X86-X87-LABEL: test_signed_i128_f64:1871; X86-X87:       # %bb.0:1872; X86-X87-NEXT:    pushl %ebp1873; X86-X87-NEXT:    pushl %ebx1874; X86-X87-NEXT:    pushl %edi1875; X86-X87-NEXT:    pushl %esi1876; X86-X87-NEXT:    subl $60, %esp1877; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)1878; X86-X87-NEXT:    fstl {{[0-9]+}}(%esp)1879; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1880; X86-X87-NEXT:    movl %eax, (%esp)1881; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1882; X86-X87-NEXT:    fxch %st(1)1883; X86-X87-NEXT:    fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill1884; X86-X87-NEXT:    fucompp1885; X86-X87-NEXT:    fnstsw %ax1886; X86-X87-NEXT:    movl %eax, %ebx1887; X86-X87-NEXT:    calll __fixdfti1888; X86-X87-NEXT:    subl $4, %esp1889; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill1890; X86-X87-NEXT:    movb %bh, %ah1891; X86-X87-NEXT:    sahf1892; X86-X87-NEXT:    movl $0, %eax1893; X86-X87-NEXT:    movl $0, %ebx1894; X86-X87-NEXT:    jae .LBB19_11895; X86-X87-NEXT:  # %bb.2:1896; X86-X87-NEXT:    movl $0, %edx1897; X86-X87-NEXT:    jae .LBB19_31898; X86-X87-NEXT:  .LBB19_4:1899; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x800000001900; X86-X87-NEXT:    jb .LBB19_61901; X86-X87-NEXT:  .LBB19_5:1902; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1903; X86-X87-NEXT:  .LBB19_6:1904; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1905; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}1906; X86-X87-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload1907; X86-X87-NEXT:    fucom %st(1)1908; X86-X87-NEXT:    fstp %st(1)1909; X86-X87-NEXT:    fnstsw %ax1910; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1911; X86-X87-NEXT:    sahf1912; X86-X87-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF1913; X86-X87-NEXT:    ja .LBB19_81914; X86-X87-NEXT:  # %bb.7:1915; X86-X87-NEXT:    movl %ecx, %eax1916; X86-X87-NEXT:  .LBB19_8:1917; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1918; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx1919; X86-X87-NEXT:    movl $-1, %ebp1920; X86-X87-NEXT:    movl $-1, %edi1921; X86-X87-NEXT:    movl $-1, %esi1922; X86-X87-NEXT:    ja .LBB19_101923; X86-X87-NEXT:  # %bb.9:1924; X86-X87-NEXT:    movl %edx, %ebp1925; X86-X87-NEXT:    movl %ebx, %edi1926; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload1927; X86-X87-NEXT:  .LBB19_10:1928; X86-X87-NEXT:    fucomp %st(0)1929; X86-X87-NEXT:    fnstsw %ax1930; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax1931; X86-X87-NEXT:    sahf1932; X86-X87-NEXT:    movl $0, %eax1933; X86-X87-NEXT:    movl $0, %edx1934; X86-X87-NEXT:    movl $0, %ebx1935; X86-X87-NEXT:    jp .LBB19_121936; X86-X87-NEXT:  # %bb.11:1937; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1938; X86-X87-NEXT:    movl %edi, %eax1939; X86-X87-NEXT:    movl %ebp, %edx1940; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload1941; X86-X87-NEXT:  .LBB19_12:1942; X86-X87-NEXT:    movl %ebx, 12(%ecx)1943; X86-X87-NEXT:    movl %edx, 8(%ecx)1944; X86-X87-NEXT:    movl %eax, 4(%ecx)1945; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1946; X86-X87-NEXT:    movl %eax, (%ecx)1947; X86-X87-NEXT:    movl %ecx, %eax1948; X86-X87-NEXT:    addl $60, %esp1949; X86-X87-NEXT:    popl %esi1950; X86-X87-NEXT:    popl %edi1951; X86-X87-NEXT:    popl %ebx1952; X86-X87-NEXT:    popl %ebp1953; X86-X87-NEXT:    retl $41954; X86-X87-NEXT:  .LBB19_1:1955; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax1956; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx1957; X86-X87-NEXT:    movl $0, %edx1958; X86-X87-NEXT:    jb .LBB19_41959; X86-X87-NEXT:  .LBB19_3:1960; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx1961; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x800000001962; X86-X87-NEXT:    jae .LBB19_51963; X86-X87-NEXT:    jmp .LBB19_61964;1965; X86-SSE-LABEL: test_signed_i128_f64:1966; X86-SSE:       # %bb.0:1967; X86-SSE-NEXT:    pushl %ebp1968; X86-SSE-NEXT:    pushl %ebx1969; X86-SSE-NEXT:    pushl %edi1970; X86-SSE-NEXT:    pushl %esi1971; X86-SSE-NEXT:    subl $44, %esp1972; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi1973; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1974; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)1975; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax1976; X86-SSE-NEXT:    movl %eax, (%esp)1977; X86-SSE-NEXT:    calll __fixdfti1978; X86-SSE-NEXT:    subl $4, %esp1979; X86-SSE-NEXT:    xorl %ecx, %ecx1980; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1981; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01982; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1983; X86-SSE-NEXT:    cmovbl %ecx, %eax1984; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx1985; X86-SSE-NEXT:    cmovbl %ecx, %edx1986; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi1987; X86-SSE-NEXT:    cmovbl %ecx, %edi1988; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x800000001989; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp1990; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01991; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF1992; X86-SSE-NEXT:    cmovbel %ebp, %ebx1993; X86-SSE-NEXT:    movl $-1, %ebp1994; X86-SSE-NEXT:    cmoval %ebp, %edi1995; X86-SSE-NEXT:    cmoval %ebp, %edx1996; X86-SSE-NEXT:    cmoval %ebp, %eax1997; X86-SSE-NEXT:    ucomisd %xmm0, %xmm01998; X86-SSE-NEXT:    cmovpl %ecx, %eax1999; X86-SSE-NEXT:    cmovpl %ecx, %edx2000; X86-SSE-NEXT:    cmovpl %ecx, %edi2001; X86-SSE-NEXT:    cmovpl %ecx, %ebx2002; X86-SSE-NEXT:    movl %ebx, 12(%esi)2003; X86-SSE-NEXT:    movl %edi, 8(%esi)2004; X86-SSE-NEXT:    movl %edx, 4(%esi)2005; X86-SSE-NEXT:    movl %eax, (%esi)2006; X86-SSE-NEXT:    movl %esi, %eax2007; X86-SSE-NEXT:    addl $44, %esp2008; X86-SSE-NEXT:    popl %esi2009; X86-SSE-NEXT:    popl %edi2010; X86-SSE-NEXT:    popl %ebx2011; X86-SSE-NEXT:    popl %ebp2012; X86-SSE-NEXT:    retl $42013;2014; X64-LABEL: test_signed_i128_f64:2015; X64:       # %bb.0:2016; X64-NEXT:    pushq %rax2017; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill2018; X64-NEXT:    callq __fixdfti@PLT2019; X64-NEXT:    xorl %ecx, %ecx2020; X64-NEXT:    movsd (%rsp), %xmm0 # 8-byte Reload2021; X64-NEXT:    # xmm0 = mem[0],zero2022; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02023; X64-NEXT:    cmovbq %rcx, %rax2024; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x80000000000000002025; X64-NEXT:    cmovbq %rsi, %rdx2026; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02027; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF2028; X64-NEXT:    cmovaq %rsi, %rdx2029; X64-NEXT:    movq $-1, %rsi2030; X64-NEXT:    cmovaq %rsi, %rax2031; X64-NEXT:    ucomisd %xmm0, %xmm02032; X64-NEXT:    cmovpq %rcx, %rax2033; X64-NEXT:    cmovpq %rcx, %rdx2034; X64-NEXT:    popq %rcx2035; X64-NEXT:    retq2036    %x = call i128 @llvm.fptosi.sat.i128.f64(double %f)2037    ret i128 %x2038}2039 2040;2041; 16-bit float to signed integer2042;2043 2044declare   i1 @llvm.fptosi.sat.i1.f16  (half)2045declare   i8 @llvm.fptosi.sat.i8.f16  (half)2046declare  i13 @llvm.fptosi.sat.i13.f16 (half)2047declare  i16 @llvm.fptosi.sat.i16.f16 (half)2048declare  i19 @llvm.fptosi.sat.i19.f16 (half)2049declare  i32 @llvm.fptosi.sat.i32.f16 (half)2050declare  i50 @llvm.fptosi.sat.i50.f16 (half)2051declare  i64 @llvm.fptosi.sat.i64.f16 (half)2052declare i100 @llvm.fptosi.sat.i100.f16(half)2053declare i128 @llvm.fptosi.sat.i128.f16(half)2054 2055; FIXME: Can be optimizated with maxss + minss2056define i1 @test_signed_i1_f16(half %f) nounwind {2057; X86-X87-LABEL: test_signed_i1_f16:2058; X86-X87:       # %bb.0:2059; X86-X87-NEXT:    pushl %ebx2060; X86-X87-NEXT:    subl $24, %esp2061; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2062; X86-X87-NEXT:    movl %eax, (%esp)2063; X86-X87-NEXT:    calll __extendhfsf22064; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2065; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2066; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002067; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2068; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2069; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)2070; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2071; X86-X87-NEXT:    fld12072; X86-X87-NEXT:    fchs2073; X86-X87-NEXT:    fxch %st(1)2074; X86-X87-NEXT:    fucom %st(1)2075; X86-X87-NEXT:    fstp %st(1)2076; X86-X87-NEXT:    fnstsw %ax2077; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2078; X86-X87-NEXT:    sahf2079; X86-X87-NEXT:    movb $-1, %dl2080; X86-X87-NEXT:    jb .LBB20_22081; X86-X87-NEXT:  # %bb.1:2082; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx2083; X86-X87-NEXT:  .LBB20_2:2084; X86-X87-NEXT:    fldz2085; X86-X87-NEXT:    fxch %st(1)2086; X86-X87-NEXT:    fucom %st(1)2087; X86-X87-NEXT:    fstp %st(1)2088; X86-X87-NEXT:    fnstsw %ax2089; X86-X87-NEXT:    xorl %ecx, %ecx2090; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2091; X86-X87-NEXT:    sahf2092; X86-X87-NEXT:    movl $0, %ebx2093; X86-X87-NEXT:    ja .LBB20_42094; X86-X87-NEXT:  # %bb.3:2095; X86-X87-NEXT:    movl %edx, %ebx2096; X86-X87-NEXT:  .LBB20_4:2097; X86-X87-NEXT:    fucomp %st(0)2098; X86-X87-NEXT:    fnstsw %ax2099; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2100; X86-X87-NEXT:    sahf2101; X86-X87-NEXT:    jp .LBB20_62102; X86-X87-NEXT:  # %bb.5:2103; X86-X87-NEXT:    movl %ebx, %ecx2104; X86-X87-NEXT:  .LBB20_6:2105; X86-X87-NEXT:    movl %ecx, %eax2106; X86-X87-NEXT:    addl $24, %esp2107; X86-X87-NEXT:    popl %ebx2108; X86-X87-NEXT:    retl2109;2110; X86-SSE-LABEL: test_signed_i1_f16:2111; X86-SSE:       # %bb.0:2112; X86-SSE-NEXT:    subl $12, %esp2113; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02114; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2115; X86-SSE-NEXT:    movw %ax, (%esp)2116; X86-SSE-NEXT:    calll __extendhfsf22117; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2118; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2119; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx2120; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02121; X86-SSE-NEXT:    movl $255, %eax2122; X86-SSE-NEXT:    cmovael %ecx, %eax2123; X86-SSE-NEXT:    xorl %ecx, %ecx2124; X86-SSE-NEXT:    xorps %xmm1, %xmm12125; X86-SSE-NEXT:    ucomiss %xmm1, %xmm02126; X86-SSE-NEXT:    cmoval %ecx, %eax2127; X86-SSE-NEXT:    ucomiss %xmm0, %xmm02128; X86-SSE-NEXT:    cmovpl %ecx, %eax2129; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax2130; X86-SSE-NEXT:    addl $12, %esp2131; X86-SSE-NEXT:    retl2132;2133; X64-LABEL: test_signed_i1_f16:2134; X64:       # %bb.0:2135; X64-NEXT:    pushq %rax2136; X64-NEXT:    callq __extendhfsf2@PLT2137; X64-NEXT:    cvttss2si %xmm0, %ecx2138; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02139; X64-NEXT:    movl $255, %eax2140; X64-NEXT:    cmovael %ecx, %eax2141; X64-NEXT:    xorl %ecx, %ecx2142; X64-NEXT:    xorps %xmm1, %xmm12143; X64-NEXT:    ucomiss %xmm1, %xmm02144; X64-NEXT:    cmoval %ecx, %eax2145; X64-NEXT:    ucomiss %xmm0, %xmm02146; X64-NEXT:    cmovpl %ecx, %eax2147; X64-NEXT:    # kill: def $al killed $al killed $eax2148; X64-NEXT:    popq %rcx2149; X64-NEXT:    retq2150    %x = call i1 @llvm.fptosi.sat.i1.f16(half %f)2151    ret i1 %x2152}2153 2154; FIXME: Can be optimizated with maxss + minss2155define i8 @test_signed_i8_f16(half %f) nounwind {2156; X86-X87-LABEL: test_signed_i8_f16:2157; X86-X87:       # %bb.0:2158; X86-X87-NEXT:    subl $12, %esp2159; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2160; X86-X87-NEXT:    movl %eax, (%esp)2161; X86-X87-NEXT:    calll __extendhfsf22162; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2163; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2164; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002165; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2166; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2167; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)2168; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2169; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2170; X86-X87-NEXT:    fxch %st(1)2171; X86-X87-NEXT:    fucom %st(1)2172; X86-X87-NEXT:    fstp %st(1)2173; X86-X87-NEXT:    fnstsw %ax2174; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2175; X86-X87-NEXT:    sahf2176; X86-X87-NEXT:    movb $-128, %dl2177; X86-X87-NEXT:    jb .LBB21_22178; X86-X87-NEXT:  # %bb.1:2179; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx2180; X86-X87-NEXT:  .LBB21_2:2181; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2182; X86-X87-NEXT:    fxch %st(1)2183; X86-X87-NEXT:    fucom %st(1)2184; X86-X87-NEXT:    fstp %st(1)2185; X86-X87-NEXT:    fnstsw %ax2186; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2187; X86-X87-NEXT:    sahf2188; X86-X87-NEXT:    movb $127, %cl2189; X86-X87-NEXT:    ja .LBB21_42190; X86-X87-NEXT:  # %bb.3:2191; X86-X87-NEXT:    movl %edx, %ecx2192; X86-X87-NEXT:  .LBB21_4:2193; X86-X87-NEXT:    fucomp %st(0)2194; X86-X87-NEXT:    fnstsw %ax2195; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2196; X86-X87-NEXT:    sahf2197; X86-X87-NEXT:    jnp .LBB21_62198; X86-X87-NEXT:  # %bb.5:2199; X86-X87-NEXT:    xorl %ecx, %ecx2200; X86-X87-NEXT:  .LBB21_6:2201; X86-X87-NEXT:    movl %ecx, %eax2202; X86-X87-NEXT:    addl $12, %esp2203; X86-X87-NEXT:    retl2204;2205; X86-SSE-LABEL: test_signed_i8_f16:2206; X86-SSE:       # %bb.0:2207; X86-SSE-NEXT:    subl $12, %esp2208; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02209; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2210; X86-SSE-NEXT:    movw %ax, (%esp)2211; X86-SSE-NEXT:    calll __extendhfsf22212; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2213; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2214; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2215; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02216; X86-SSE-NEXT:    movl $128, %ecx2217; X86-SSE-NEXT:    cmovael %eax, %ecx2218; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02219; X86-SSE-NEXT:    movl $127, %edx2220; X86-SSE-NEXT:    cmovbel %ecx, %edx2221; X86-SSE-NEXT:    xorl %eax, %eax2222; X86-SSE-NEXT:    ucomiss %xmm0, %xmm02223; X86-SSE-NEXT:    cmovnpl %edx, %eax2224; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax2225; X86-SSE-NEXT:    addl $12, %esp2226; X86-SSE-NEXT:    retl2227;2228; X64-LABEL: test_signed_i8_f16:2229; X64:       # %bb.0:2230; X64-NEXT:    pushq %rax2231; X64-NEXT:    callq __extendhfsf2@PLT2232; X64-NEXT:    cvttss2si %xmm0, %eax2233; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02234; X64-NEXT:    movl $128, %ecx2235; X64-NEXT:    cmovael %eax, %ecx2236; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02237; X64-NEXT:    movl $127, %edx2238; X64-NEXT:    cmovbel %ecx, %edx2239; X64-NEXT:    xorl %eax, %eax2240; X64-NEXT:    ucomiss %xmm0, %xmm02241; X64-NEXT:    cmovnpl %edx, %eax2242; X64-NEXT:    # kill: def $al killed $al killed $eax2243; X64-NEXT:    popq %rcx2244; X64-NEXT:    retq2245    %x = call i8 @llvm.fptosi.sat.i8.f16(half %f)2246    ret i8 %x2247}2248 2249; FIXME: Can be optimizated with maxss + minss2250define i13 @test_signed_i13_f16(half %f) nounwind {2251; X86-X87-LABEL: test_signed_i13_f16:2252; X86-X87:       # %bb.0:2253; X86-X87-NEXT:    subl $12, %esp2254; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2255; X86-X87-NEXT:    movl %eax, (%esp)2256; X86-X87-NEXT:    calll __extendhfsf22257; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2258; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2259; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002260; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2261; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2262; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)2263; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2264; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2265; X86-X87-NEXT:    fxch %st(1)2266; X86-X87-NEXT:    fucom %st(1)2267; X86-X87-NEXT:    fstp %st(1)2268; X86-X87-NEXT:    fnstsw %ax2269; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2270; X86-X87-NEXT:    sahf2271; X86-X87-NEXT:    movl $61440, %ecx # imm = 0xF0002272; X86-X87-NEXT:    jb .LBB22_22273; X86-X87-NEXT:  # %bb.1:2274; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx2275; X86-X87-NEXT:  .LBB22_2:2276; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2277; X86-X87-NEXT:    fxch %st(1)2278; X86-X87-NEXT:    fucom %st(1)2279; X86-X87-NEXT:    fstp %st(1)2280; X86-X87-NEXT:    fnstsw %ax2281; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2282; X86-X87-NEXT:    sahf2283; X86-X87-NEXT:    movl $4095, %edx # imm = 0xFFF2284; X86-X87-NEXT:    ja .LBB22_42285; X86-X87-NEXT:  # %bb.3:2286; X86-X87-NEXT:    movl %ecx, %edx2287; X86-X87-NEXT:  .LBB22_4:2288; X86-X87-NEXT:    fucomp %st(0)2289; X86-X87-NEXT:    fnstsw %ax2290; X86-X87-NEXT:    xorl %ecx, %ecx2291; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2292; X86-X87-NEXT:    sahf2293; X86-X87-NEXT:    jp .LBB22_62294; X86-X87-NEXT:  # %bb.5:2295; X86-X87-NEXT:    movl %edx, %ecx2296; X86-X87-NEXT:  .LBB22_6:2297; X86-X87-NEXT:    movl %ecx, %eax2298; X86-X87-NEXT:    addl $12, %esp2299; X86-X87-NEXT:    retl2300;2301; X86-SSE-LABEL: test_signed_i13_f16:2302; X86-SSE:       # %bb.0:2303; X86-SSE-NEXT:    subl $12, %esp2304; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02305; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2306; X86-SSE-NEXT:    movw %ax, (%esp)2307; X86-SSE-NEXT:    calll __extendhfsf22308; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2309; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2310; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2311; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02312; X86-SSE-NEXT:    movl $61440, %ecx # imm = 0xF0002313; X86-SSE-NEXT:    cmovael %eax, %ecx2314; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02315; X86-SSE-NEXT:    movl $4095, %edx # imm = 0xFFF2316; X86-SSE-NEXT:    cmovbel %ecx, %edx2317; X86-SSE-NEXT:    xorl %eax, %eax2318; X86-SSE-NEXT:    ucomiss %xmm0, %xmm02319; X86-SSE-NEXT:    cmovnpl %edx, %eax2320; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax2321; X86-SSE-NEXT:    addl $12, %esp2322; X86-SSE-NEXT:    retl2323;2324; X64-LABEL: test_signed_i13_f16:2325; X64:       # %bb.0:2326; X64-NEXT:    pushq %rax2327; X64-NEXT:    callq __extendhfsf2@PLT2328; X64-NEXT:    cvttss2si %xmm0, %eax2329; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02330; X64-NEXT:    movl $61440, %ecx # imm = 0xF0002331; X64-NEXT:    cmovael %eax, %ecx2332; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02333; X64-NEXT:    movl $4095, %edx # imm = 0xFFF2334; X64-NEXT:    cmovbel %ecx, %edx2335; X64-NEXT:    xorl %eax, %eax2336; X64-NEXT:    ucomiss %xmm0, %xmm02337; X64-NEXT:    cmovnpl %edx, %eax2338; X64-NEXT:    # kill: def $ax killed $ax killed $eax2339; X64-NEXT:    popq %rcx2340; X64-NEXT:    retq2341    %x = call i13 @llvm.fptosi.sat.i13.f16(half %f)2342    ret i13 %x2343}2344 2345; FIXME: Can be optimizated with maxss + minss2346define i16 @test_signed_i16_f16(half %f) nounwind {2347; X86-X87-LABEL: test_signed_i16_f16:2348; X86-X87:       # %bb.0:2349; X86-X87-NEXT:    subl $12, %esp2350; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2351; X86-X87-NEXT:    movl %eax, (%esp)2352; X86-X87-NEXT:    calll __extendhfsf22353; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2354; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2355; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002356; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2357; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2358; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)2359; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2360; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2361; X86-X87-NEXT:    fxch %st(1)2362; X86-X87-NEXT:    fucom %st(1)2363; X86-X87-NEXT:    fstp %st(1)2364; X86-X87-NEXT:    fnstsw %ax2365; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2366; X86-X87-NEXT:    sahf2367; X86-X87-NEXT:    movl $32768, %ecx # imm = 0x80002368; X86-X87-NEXT:    jb .LBB23_22369; X86-X87-NEXT:  # %bb.1:2370; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx2371; X86-X87-NEXT:  .LBB23_2:2372; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2373; X86-X87-NEXT:    fxch %st(1)2374; X86-X87-NEXT:    fucom %st(1)2375; X86-X87-NEXT:    fstp %st(1)2376; X86-X87-NEXT:    fnstsw %ax2377; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2378; X86-X87-NEXT:    sahf2379; X86-X87-NEXT:    movl $32767, %edx # imm = 0x7FFF2380; X86-X87-NEXT:    ja .LBB23_42381; X86-X87-NEXT:  # %bb.3:2382; X86-X87-NEXT:    movl %ecx, %edx2383; X86-X87-NEXT:  .LBB23_4:2384; X86-X87-NEXT:    fucomp %st(0)2385; X86-X87-NEXT:    fnstsw %ax2386; X86-X87-NEXT:    xorl %ecx, %ecx2387; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2388; X86-X87-NEXT:    sahf2389; X86-X87-NEXT:    jp .LBB23_62390; X86-X87-NEXT:  # %bb.5:2391; X86-X87-NEXT:    movl %edx, %ecx2392; X86-X87-NEXT:  .LBB23_6:2393; X86-X87-NEXT:    movl %ecx, %eax2394; X86-X87-NEXT:    addl $12, %esp2395; X86-X87-NEXT:    retl2396;2397; X86-SSE-LABEL: test_signed_i16_f16:2398; X86-SSE:       # %bb.0:2399; X86-SSE-NEXT:    subl $12, %esp2400; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02401; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2402; X86-SSE-NEXT:    movw %ax, (%esp)2403; X86-SSE-NEXT:    calll __extendhfsf22404; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2405; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2406; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2407; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02408; X86-SSE-NEXT:    movl $32768, %ecx # imm = 0x80002409; X86-SSE-NEXT:    cmovael %eax, %ecx2410; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02411; X86-SSE-NEXT:    movl $32767, %edx # imm = 0x7FFF2412; X86-SSE-NEXT:    cmovbel %ecx, %edx2413; X86-SSE-NEXT:    xorl %eax, %eax2414; X86-SSE-NEXT:    ucomiss %xmm0, %xmm02415; X86-SSE-NEXT:    cmovnpl %edx, %eax2416; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax2417; X86-SSE-NEXT:    addl $12, %esp2418; X86-SSE-NEXT:    retl2419;2420; X64-LABEL: test_signed_i16_f16:2421; X64:       # %bb.0:2422; X64-NEXT:    pushq %rax2423; X64-NEXT:    callq __extendhfsf2@PLT2424; X64-NEXT:    cvttss2si %xmm0, %eax2425; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02426; X64-NEXT:    movl $32768, %ecx # imm = 0x80002427; X64-NEXT:    cmovael %eax, %ecx2428; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02429; X64-NEXT:    movl $32767, %edx # imm = 0x7FFF2430; X64-NEXT:    cmovbel %ecx, %edx2431; X64-NEXT:    xorl %eax, %eax2432; X64-NEXT:    ucomiss %xmm0, %xmm02433; X64-NEXT:    cmovnpl %edx, %eax2434; X64-NEXT:    # kill: def $ax killed $ax killed $eax2435; X64-NEXT:    popq %rcx2436; X64-NEXT:    retq2437    %x = call i16 @llvm.fptosi.sat.i16.f16(half %f)2438    ret i16 %x2439}2440 2441; FIXME: Can be optimizated with maxss + minss2442define i19 @test_signed_i19_f16(half %f) nounwind {2443; X86-X87-LABEL: test_signed_i19_f16:2444; X86-X87:       # %bb.0:2445; X86-X87-NEXT:    subl $12, %esp2446; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2447; X86-X87-NEXT:    movl %eax, (%esp)2448; X86-X87-NEXT:    calll __extendhfsf22449; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2450; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2451; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002452; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2453; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2454; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)2455; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2456; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2457; X86-X87-NEXT:    fxch %st(1)2458; X86-X87-NEXT:    fucom %st(1)2459; X86-X87-NEXT:    fstp %st(1)2460; X86-X87-NEXT:    fnstsw %ax2461; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2462; X86-X87-NEXT:    sahf2463; X86-X87-NEXT:    movl $-262144, %ecx # imm = 0xFFFC00002464; X86-X87-NEXT:    jb .LBB24_22465; X86-X87-NEXT:  # %bb.1:2466; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2467; X86-X87-NEXT:  .LBB24_2:2468; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2469; X86-X87-NEXT:    fxch %st(1)2470; X86-X87-NEXT:    fucom %st(1)2471; X86-X87-NEXT:    fstp %st(1)2472; X86-X87-NEXT:    fnstsw %ax2473; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2474; X86-X87-NEXT:    sahf2475; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF2476; X86-X87-NEXT:    ja .LBB24_42477; X86-X87-NEXT:  # %bb.3:2478; X86-X87-NEXT:    movl %ecx, %edx2479; X86-X87-NEXT:  .LBB24_4:2480; X86-X87-NEXT:    fucomp %st(0)2481; X86-X87-NEXT:    fnstsw %ax2482; X86-X87-NEXT:    xorl %ecx, %ecx2483; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2484; X86-X87-NEXT:    sahf2485; X86-X87-NEXT:    jp .LBB24_62486; X86-X87-NEXT:  # %bb.5:2487; X86-X87-NEXT:    movl %edx, %ecx2488; X86-X87-NEXT:  .LBB24_6:2489; X86-X87-NEXT:    movl %ecx, %eax2490; X86-X87-NEXT:    addl $12, %esp2491; X86-X87-NEXT:    retl2492;2493; X86-SSE-LABEL: test_signed_i19_f16:2494; X86-SSE:       # %bb.0:2495; X86-SSE-NEXT:    subl $12, %esp2496; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02497; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2498; X86-SSE-NEXT:    movw %ax, (%esp)2499; X86-SSE-NEXT:    calll __extendhfsf22500; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2501; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2502; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2503; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02504; X86-SSE-NEXT:    movl $-262144, %ecx # imm = 0xFFFC00002505; X86-SSE-NEXT:    cmovael %eax, %ecx2506; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02507; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF2508; X86-SSE-NEXT:    cmovbel %ecx, %edx2509; X86-SSE-NEXT:    xorl %eax, %eax2510; X86-SSE-NEXT:    ucomiss %xmm0, %xmm02511; X86-SSE-NEXT:    cmovnpl %edx, %eax2512; X86-SSE-NEXT:    addl $12, %esp2513; X86-SSE-NEXT:    retl2514;2515; X64-LABEL: test_signed_i19_f16:2516; X64:       # %bb.0:2517; X64-NEXT:    pushq %rax2518; X64-NEXT:    callq __extendhfsf2@PLT2519; X64-NEXT:    cvttss2si %xmm0, %eax2520; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02521; X64-NEXT:    movl $-262144, %ecx # imm = 0xFFFC00002522; X64-NEXT:    cmovael %eax, %ecx2523; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02524; X64-NEXT:    movl $262143, %edx # imm = 0x3FFFF2525; X64-NEXT:    cmovbel %ecx, %edx2526; X64-NEXT:    xorl %eax, %eax2527; X64-NEXT:    ucomiss %xmm0, %xmm02528; X64-NEXT:    cmovnpl %edx, %eax2529; X64-NEXT:    popq %rcx2530; X64-NEXT:    retq2531    %x = call i19 @llvm.fptosi.sat.i19.f16(half %f)2532    ret i19 %x2533}2534 2535define i32 @test_signed_i32_f16(half %f) nounwind {2536; X86-X87-LABEL: test_signed_i32_f16:2537; X86-X87:       # %bb.0:2538; X86-X87-NEXT:    subl $12, %esp2539; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2540; X86-X87-NEXT:    movl %eax, (%esp)2541; X86-X87-NEXT:    calll __extendhfsf22542; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2543; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2544; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002545; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2546; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2547; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)2548; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2549; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2550; X86-X87-NEXT:    fxch %st(1)2551; X86-X87-NEXT:    fucom %st(1)2552; X86-X87-NEXT:    fstp %st(1)2553; X86-X87-NEXT:    fnstsw %ax2554; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2555; X86-X87-NEXT:    sahf2556; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x800000002557; X86-X87-NEXT:    jb .LBB25_22558; X86-X87-NEXT:  # %bb.1:2559; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2560; X86-X87-NEXT:  .LBB25_2:2561; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2562; X86-X87-NEXT:    fxch %st(1)2563; X86-X87-NEXT:    fucom %st(1)2564; X86-X87-NEXT:    fstp %st(1)2565; X86-X87-NEXT:    fnstsw %ax2566; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2567; X86-X87-NEXT:    sahf2568; X86-X87-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF2569; X86-X87-NEXT:    ja .LBB25_42570; X86-X87-NEXT:  # %bb.3:2571; X86-X87-NEXT:    movl %ecx, %edx2572; X86-X87-NEXT:  .LBB25_4:2573; X86-X87-NEXT:    fucomp %st(0)2574; X86-X87-NEXT:    fnstsw %ax2575; X86-X87-NEXT:    xorl %ecx, %ecx2576; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2577; X86-X87-NEXT:    sahf2578; X86-X87-NEXT:    jp .LBB25_62579; X86-X87-NEXT:  # %bb.5:2580; X86-X87-NEXT:    movl %edx, %ecx2581; X86-X87-NEXT:  .LBB25_6:2582; X86-X87-NEXT:    movl %ecx, %eax2583; X86-X87-NEXT:    addl $12, %esp2584; X86-X87-NEXT:    retl2585;2586; X86-SSE-LABEL: test_signed_i32_f16:2587; X86-SSE:       # %bb.0:2588; X86-SSE-NEXT:    subl $12, %esp2589; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02590; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2591; X86-SSE-NEXT:    movw %ax, (%esp)2592; X86-SSE-NEXT:    calll __extendhfsf22593; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2594; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2595; X86-SSE-NEXT:    cvttss2si %xmm0, %eax2596; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02597; X86-SSE-NEXT:    movl $-2147483648, %ecx # imm = 0x800000002598; X86-SSE-NEXT:    cmovael %eax, %ecx2599; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02600; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF2601; X86-SSE-NEXT:    cmovbel %ecx, %edx2602; X86-SSE-NEXT:    xorl %eax, %eax2603; X86-SSE-NEXT:    ucomiss %xmm0, %xmm02604; X86-SSE-NEXT:    cmovnpl %edx, %eax2605; X86-SSE-NEXT:    addl $12, %esp2606; X86-SSE-NEXT:    retl2607;2608; X64-LABEL: test_signed_i32_f16:2609; X64:       # %bb.0:2610; X64-NEXT:    pushq %rax2611; X64-NEXT:    callq __extendhfsf2@PLT2612; X64-NEXT:    cvttss2si %xmm0, %eax2613; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02614; X64-NEXT:    movl $-2147483648, %ecx # imm = 0x800000002615; X64-NEXT:    cmovael %eax, %ecx2616; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02617; X64-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF2618; X64-NEXT:    cmovbel %ecx, %edx2619; X64-NEXT:    xorl %eax, %eax2620; X64-NEXT:    ucomiss %xmm0, %xmm02621; X64-NEXT:    cmovnpl %edx, %eax2622; X64-NEXT:    popq %rcx2623; X64-NEXT:    retq2624    %x = call i32 @llvm.fptosi.sat.i32.f16(half %f)2625    ret i32 %x2626}2627 2628define i50 @test_signed_i50_f16(half %f) nounwind {2629; X86-X87-LABEL: test_signed_i50_f16:2630; X86-X87:       # %bb.0:2631; X86-X87-NEXT:    pushl %edi2632; X86-X87-NEXT:    pushl %esi2633; X86-X87-NEXT:    subl $20, %esp2634; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2635; X86-X87-NEXT:    movl %eax, (%esp)2636; X86-X87-NEXT:    calll __extendhfsf22637; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2638; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2639; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002640; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2641; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2642; X86-X87-NEXT:    fld %st(0)2643; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)2644; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2645; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2646; X86-X87-NEXT:    fxch %st(1)2647; X86-X87-NEXT:    fucom %st(1)2648; X86-X87-NEXT:    fstp %st(1)2649; X86-X87-NEXT:    fnstsw %ax2650; X86-X87-NEXT:    xorl %ecx, %ecx2651; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2652; X86-X87-NEXT:    sahf2653; X86-X87-NEXT:    movl $0, %edx2654; X86-X87-NEXT:    jb .LBB26_22655; X86-X87-NEXT:  # %bb.1:2656; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx2657; X86-X87-NEXT:  .LBB26_2:2658; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE00002659; X86-X87-NEXT:    jb .LBB26_42660; X86-X87-NEXT:  # %bb.3:2661; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi2662; X86-X87-NEXT:  .LBB26_4:2663; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2664; X86-X87-NEXT:    fxch %st(1)2665; X86-X87-NEXT:    fucom %st(1)2666; X86-X87-NEXT:    fstp %st(1)2667; X86-X87-NEXT:    fnstsw %ax2668; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2669; X86-X87-NEXT:    sahf2670; X86-X87-NEXT:    movl $131071, %esi # imm = 0x1FFFF2671; X86-X87-NEXT:    ja .LBB26_62672; X86-X87-NEXT:  # %bb.5:2673; X86-X87-NEXT:    movl %edi, %esi2674; X86-X87-NEXT:  .LBB26_6:2675; X86-X87-NEXT:    movl $-1, %edi2676; X86-X87-NEXT:    ja .LBB26_82677; X86-X87-NEXT:  # %bb.7:2678; X86-X87-NEXT:    movl %edx, %edi2679; X86-X87-NEXT:  .LBB26_8:2680; X86-X87-NEXT:    fucomp %st(0)2681; X86-X87-NEXT:    fnstsw %ax2682; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2683; X86-X87-NEXT:    sahf2684; X86-X87-NEXT:    movl $0, %edx2685; X86-X87-NEXT:    jp .LBB26_102686; X86-X87-NEXT:  # %bb.9:2687; X86-X87-NEXT:    movl %edi, %ecx2688; X86-X87-NEXT:    movl %esi, %edx2689; X86-X87-NEXT:  .LBB26_10:2690; X86-X87-NEXT:    movl %ecx, %eax2691; X86-X87-NEXT:    addl $20, %esp2692; X86-X87-NEXT:    popl %esi2693; X86-X87-NEXT:    popl %edi2694; X86-X87-NEXT:    retl2695;2696; X86-SSE-LABEL: test_signed_i50_f16:2697; X86-SSE:       # %bb.0:2698; X86-SSE-NEXT:    pushl %esi2699; X86-SSE-NEXT:    subl $24, %esp2700; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02701; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2702; X86-SSE-NEXT:    movw %ax, (%esp)2703; X86-SSE-NEXT:    calll __extendhfsf22704; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2705; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2706; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)2707; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)2708; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)2709; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2710; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC002711; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)2712; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)2713; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)2714; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)2715; X86-SSE-NEXT:    xorl %ecx, %ecx2716; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02717; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi2718; X86-SSE-NEXT:    cmovbl %ecx, %esi2719; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE00002720; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax2721; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02722; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF2723; X86-SSE-NEXT:    cmovbel %eax, %edx2724; X86-SSE-NEXT:    movl $-1, %eax2725; X86-SSE-NEXT:    cmovbel %esi, %eax2726; X86-SSE-NEXT:    ucomiss %xmm0, %xmm02727; X86-SSE-NEXT:    cmovpl %ecx, %eax2728; X86-SSE-NEXT:    cmovpl %ecx, %edx2729; X86-SSE-NEXT:    addl $24, %esp2730; X86-SSE-NEXT:    popl %esi2731; X86-SSE-NEXT:    retl2732;2733; X64-LABEL: test_signed_i50_f16:2734; X64:       # %bb.0:2735; X64-NEXT:    pushq %rax2736; X64-NEXT:    callq __extendhfsf2@PLT2737; X64-NEXT:    cvttss2si %xmm0, %rax2738; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02739; X64-NEXT:    movabsq $-562949953421312, %rcx # imm = 0xFFFE0000000000002740; X64-NEXT:    cmovaeq %rax, %rcx2741; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02742; X64-NEXT:    movabsq $562949953421311, %rdx # imm = 0x1FFFFFFFFFFFF2743; X64-NEXT:    cmovbeq %rcx, %rdx2744; X64-NEXT:    xorl %eax, %eax2745; X64-NEXT:    ucomiss %xmm0, %xmm02746; X64-NEXT:    cmovnpq %rdx, %rax2747; X64-NEXT:    popq %rcx2748; X64-NEXT:    retq2749    %x = call i50 @llvm.fptosi.sat.i50.f16(half %f)2750    ret i50 %x2751}2752 2753define i64 @test_signed_i64_f16(half %f) nounwind {2754; X86-X87-LABEL: test_signed_i64_f16:2755; X86-X87:       # %bb.0:2756; X86-X87-NEXT:    pushl %edi2757; X86-X87-NEXT:    pushl %esi2758; X86-X87-NEXT:    subl $20, %esp2759; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2760; X86-X87-NEXT:    movl %eax, (%esp)2761; X86-X87-NEXT:    calll __extendhfsf22762; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)2763; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2764; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC002765; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)2766; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2767; X86-X87-NEXT:    fld %st(0)2768; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)2769; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)2770; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2771; X86-X87-NEXT:    fxch %st(1)2772; X86-X87-NEXT:    fucom %st(1)2773; X86-X87-NEXT:    fstp %st(1)2774; X86-X87-NEXT:    fnstsw %ax2775; X86-X87-NEXT:    xorl %ecx, %ecx2776; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2777; X86-X87-NEXT:    sahf2778; X86-X87-NEXT:    movl $0, %edx2779; X86-X87-NEXT:    jb .LBB27_22780; X86-X87-NEXT:  # %bb.1:2781; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx2782; X86-X87-NEXT:  .LBB27_2:2783; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x800000002784; X86-X87-NEXT:    jb .LBB27_42785; X86-X87-NEXT:  # %bb.3:2786; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi2787; X86-X87-NEXT:  .LBB27_4:2788; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2789; X86-X87-NEXT:    fxch %st(1)2790; X86-X87-NEXT:    fucom %st(1)2791; X86-X87-NEXT:    fstp %st(1)2792; X86-X87-NEXT:    fnstsw %ax2793; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2794; X86-X87-NEXT:    sahf2795; X86-X87-NEXT:    movl $2147483647, %esi # imm = 0x7FFFFFFF2796; X86-X87-NEXT:    ja .LBB27_62797; X86-X87-NEXT:  # %bb.5:2798; X86-X87-NEXT:    movl %edi, %esi2799; X86-X87-NEXT:  .LBB27_6:2800; X86-X87-NEXT:    movl $-1, %edi2801; X86-X87-NEXT:    ja .LBB27_82802; X86-X87-NEXT:  # %bb.7:2803; X86-X87-NEXT:    movl %edx, %edi2804; X86-X87-NEXT:  .LBB27_8:2805; X86-X87-NEXT:    fucomp %st(0)2806; X86-X87-NEXT:    fnstsw %ax2807; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2808; X86-X87-NEXT:    sahf2809; X86-X87-NEXT:    movl $0, %edx2810; X86-X87-NEXT:    jp .LBB27_102811; X86-X87-NEXT:  # %bb.9:2812; X86-X87-NEXT:    movl %edi, %ecx2813; X86-X87-NEXT:    movl %esi, %edx2814; X86-X87-NEXT:  .LBB27_10:2815; X86-X87-NEXT:    movl %ecx, %eax2816; X86-X87-NEXT:    addl $20, %esp2817; X86-X87-NEXT:    popl %esi2818; X86-X87-NEXT:    popl %edi2819; X86-X87-NEXT:    retl2820;2821; X86-SSE-LABEL: test_signed_i64_f16:2822; X86-SSE:       # %bb.0:2823; X86-SSE-NEXT:    pushl %esi2824; X86-SSE-NEXT:    subl $24, %esp2825; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02826; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2827; X86-SSE-NEXT:    movw %ax, (%esp)2828; X86-SSE-NEXT:    calll __extendhfsf22829; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2830; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2831; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)2832; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)2833; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)2834; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2835; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC002836; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)2837; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)2838; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)2839; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)2840; X86-SSE-NEXT:    xorl %ecx, %ecx2841; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02842; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi2843; X86-SSE-NEXT:    cmovbl %ecx, %esi2844; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x800000002845; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax2846; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02847; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF2848; X86-SSE-NEXT:    cmovbel %eax, %edx2849; X86-SSE-NEXT:    movl $-1, %eax2850; X86-SSE-NEXT:    cmovbel %esi, %eax2851; X86-SSE-NEXT:    ucomiss %xmm0, %xmm02852; X86-SSE-NEXT:    cmovpl %ecx, %eax2853; X86-SSE-NEXT:    cmovpl %ecx, %edx2854; X86-SSE-NEXT:    addl $24, %esp2855; X86-SSE-NEXT:    popl %esi2856; X86-SSE-NEXT:    retl2857;2858; X64-LABEL: test_signed_i64_f16:2859; X64:       # %bb.0:2860; X64-NEXT:    pushq %rax2861; X64-NEXT:    callq __extendhfsf2@PLT2862; X64-NEXT:    cvttss2si %xmm0, %rax2863; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02864; X64-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x80000000000000002865; X64-NEXT:    cmovaeq %rax, %rcx2866; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02867; X64-NEXT:    movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF2868; X64-NEXT:    cmovbeq %rcx, %rdx2869; X64-NEXT:    xorl %eax, %eax2870; X64-NEXT:    ucomiss %xmm0, %xmm02871; X64-NEXT:    cmovnpq %rdx, %rax2872; X64-NEXT:    popq %rcx2873; X64-NEXT:    retq2874    %x = call i64 @llvm.fptosi.sat.i64.f16(half %f)2875    ret i64 %x2876}2877 2878define i100 @test_signed_i100_f16(half %f) nounwind {2879; X86-X87-LABEL: test_signed_i100_f16:2880; X86-X87:       # %bb.0:2881; X86-X87-NEXT:    pushl %ebp2882; X86-X87-NEXT:    pushl %ebx2883; X86-X87-NEXT:    pushl %edi2884; X86-X87-NEXT:    pushl %esi2885; X86-X87-NEXT:    subl $60, %esp2886; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax2887; X86-X87-NEXT:    movl %eax, (%esp)2888; X86-X87-NEXT:    calll __extendhfsf22889; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2890; X86-X87-NEXT:    movl %eax, (%esp)2891; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)2892; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2893; X86-X87-NEXT:    fxch %st(1)2894; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill2895; X86-X87-NEXT:    fucompp2896; X86-X87-NEXT:    fnstsw %ax2897; X86-X87-NEXT:    movl %eax, %ebx2898; X86-X87-NEXT:    calll __fixsfti2899; X86-X87-NEXT:    subl $4, %esp2900; X86-X87-NEXT:    xorl %edx, %edx2901; X86-X87-NEXT:    movb %bh, %ah2902; X86-X87-NEXT:    sahf2903; X86-X87-NEXT:    movl $-8, %ebx2904; X86-X87-NEXT:    jb .LBB28_22905; X86-X87-NEXT:  # %bb.1:2906; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx2907; X86-X87-NEXT:  .LBB28_2:2908; X86-X87-NEXT:    movl $0, %ecx2909; X86-X87-NEXT:    movl $0, %ebp2910; X86-X87-NEXT:    jb .LBB28_42911; X86-X87-NEXT:  # %bb.3:2912; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2913; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp2914; X86-X87-NEXT:  .LBB28_4:2915; X86-X87-NEXT:    movl $0, %edi2916; X86-X87-NEXT:    jb .LBB28_62917; X86-X87-NEXT:  # %bb.5:2918; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi2919; X86-X87-NEXT:  .LBB28_6:2920; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2921; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload2922; X86-X87-NEXT:    fucom %st(1)2923; X86-X87-NEXT:    fstp %st(1)2924; X86-X87-NEXT:    fnstsw %ax2925; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2926; X86-X87-NEXT:    sahf2927; X86-X87-NEXT:    movl $-1, %eax2928; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill2929; X86-X87-NEXT:    movl $-1, %esi2930; X86-X87-NEXT:    ja .LBB28_82931; X86-X87-NEXT:  # %bb.7:2932; X86-X87-NEXT:    movl %edi, %eax2933; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2934; X86-X87-NEXT:    movl %ecx, %esi2935; X86-X87-NEXT:  .LBB28_8:2936; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2937; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx2938; X86-X87-NEXT:    movl $7, %edi2939; X86-X87-NEXT:    ja .LBB28_102940; X86-X87-NEXT:  # %bb.9:2941; X86-X87-NEXT:    movl %ebx, %edi2942; X86-X87-NEXT:  .LBB28_10:2943; X86-X87-NEXT:    fucomp %st(0)2944; X86-X87-NEXT:    fnstsw %ax2945; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax2946; X86-X87-NEXT:    sahf2947; X86-X87-NEXT:    movl $0, %eax2948; X86-X87-NEXT:    movl $0, %ebp2949; X86-X87-NEXT:    movl $0, %ebx2950; X86-X87-NEXT:    jp .LBB28_122951; X86-X87-NEXT:  # %bb.11:2952; X86-X87-NEXT:    movl %edi, %edx2953; X86-X87-NEXT:    movl %esi, %eax2954; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload2955; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload2956; X86-X87-NEXT:  .LBB28_12:2957; X86-X87-NEXT:    movl %ebx, 8(%ecx)2958; X86-X87-NEXT:    movl %ebp, 4(%ecx)2959; X86-X87-NEXT:    movl %eax, (%ecx)2960; X86-X87-NEXT:    andl $15, %edx2961; X86-X87-NEXT:    movb %dl, 12(%ecx)2962; X86-X87-NEXT:    movl %ecx, %eax2963; X86-X87-NEXT:    addl $60, %esp2964; X86-X87-NEXT:    popl %esi2965; X86-X87-NEXT:    popl %edi2966; X86-X87-NEXT:    popl %ebx2967; X86-X87-NEXT:    popl %ebp2968; X86-X87-NEXT:    retl $42969;2970; X86-SSE-LABEL: test_signed_i100_f16:2971; X86-SSE:       # %bb.0:2972; X86-SSE-NEXT:    pushl %ebp2973; X86-SSE-NEXT:    pushl %ebx2974; X86-SSE-NEXT:    pushl %edi2975; X86-SSE-NEXT:    pushl %esi2976; X86-SSE-NEXT:    subl $44, %esp2977; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm02978; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi2979; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax2980; X86-SSE-NEXT:    movw %ax, (%esp)2981; X86-SSE-NEXT:    calll __extendhfsf22982; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax2983; X86-SSE-NEXT:    movl %eax, (%esp)2984; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)2985; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2986; X86-SSE-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2987; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)2988; X86-SSE-NEXT:    calll __fixsfti2989; X86-SSE-NEXT:    subl $4, %esp2990; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload2991; X86-SSE-NEXT:    # xmm0 = mem[0],zero,zero,zero2992; X86-SSE-NEXT:    xorl %ebp, %ebp2993; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02994; X86-SSE-NEXT:    movl $-8, %ebx2995; X86-SSE-NEXT:    movl $0, %ecx2996; X86-SSE-NEXT:    movl $0, %edx2997; X86-SSE-NEXT:    movl $0, %edi2998; X86-SSE-NEXT:    jb .LBB28_22999; X86-SSE-NEXT:  # %bb.1:3000; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx3001; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx3002; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx3003; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi3004; X86-SSE-NEXT:  .LBB28_2:3005; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm03006; X86-SSE-NEXT:    movl $-1, %eax3007; X86-SSE-NEXT:    cmoval %eax, %edi3008; X86-SSE-NEXT:    cmoval %eax, %edx3009; X86-SSE-NEXT:    cmoval %eax, %ecx3010; X86-SSE-NEXT:    movl $7, %eax3011; X86-SSE-NEXT:    cmovbel %ebx, %eax3012; X86-SSE-NEXT:    ucomiss %xmm0, %xmm03013; X86-SSE-NEXT:    cmovpl %ebp, %eax3014; X86-SSE-NEXT:    cmovpl %ebp, %ecx3015; X86-SSE-NEXT:    cmovpl %ebp, %edx3016; X86-SSE-NEXT:    cmovpl %ebp, %edi3017; X86-SSE-NEXT:    movl %edi, 8(%esi)3018; X86-SSE-NEXT:    movl %edx, 4(%esi)3019; X86-SSE-NEXT:    movl %ecx, (%esi)3020; X86-SSE-NEXT:    andl $15, %eax3021; X86-SSE-NEXT:    movb %al, 12(%esi)3022; X86-SSE-NEXT:    movl %esi, %eax3023; X86-SSE-NEXT:    addl $44, %esp3024; X86-SSE-NEXT:    popl %esi3025; X86-SSE-NEXT:    popl %edi3026; X86-SSE-NEXT:    popl %ebx3027; X86-SSE-NEXT:    popl %ebp3028; X86-SSE-NEXT:    retl $43029;3030; X64-LABEL: test_signed_i100_f16:3031; X64:       # %bb.0:3032; X64-NEXT:    pushq %rax3033; X64-NEXT:    callq __extendhfsf2@PLT3034; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill3035; X64-NEXT:    callq __fixsfti@PLT3036; X64-NEXT:    xorl %ecx, %ecx3037; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload3038; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero3039; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03040; X64-NEXT:    cmovbq %rcx, %rax3041; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF8000000003042; X64-NEXT:    cmovbq %rsi, %rdx3043; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03044; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF3045; X64-NEXT:    cmovaq %rsi, %rdx3046; X64-NEXT:    movq $-1, %rsi3047; X64-NEXT:    cmovaq %rsi, %rax3048; X64-NEXT:    ucomiss %xmm0, %xmm03049; X64-NEXT:    cmovpq %rcx, %rax3050; X64-NEXT:    cmovpq %rcx, %rdx3051; X64-NEXT:    popq %rcx3052; X64-NEXT:    retq3053    %x = call i100 @llvm.fptosi.sat.i100.f16(half %f)3054    ret i100 %x3055}3056 3057define i128 @test_signed_i128_f16(half %f) nounwind {3058; X86-X87-LABEL: test_signed_i128_f16:3059; X86-X87:       # %bb.0:3060; X86-X87-NEXT:    pushl %ebp3061; X86-X87-NEXT:    pushl %ebx3062; X86-X87-NEXT:    pushl %edi3063; X86-X87-NEXT:    pushl %esi3064; X86-X87-NEXT:    subl $60, %esp3065; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3066; X86-X87-NEXT:    movl %eax, (%esp)3067; X86-X87-NEXT:    calll __extendhfsf23068; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3069; X86-X87-NEXT:    movl %eax, (%esp)3070; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)3071; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3072; X86-X87-NEXT:    fxch %st(1)3073; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill3074; X86-X87-NEXT:    fucompp3075; X86-X87-NEXT:    fnstsw %ax3076; X86-X87-NEXT:    movl %eax, %ebx3077; X86-X87-NEXT:    calll __fixsfti3078; X86-X87-NEXT:    subl $4, %esp3079; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill3080; X86-X87-NEXT:    movb %bh, %ah3081; X86-X87-NEXT:    sahf3082; X86-X87-NEXT:    movl $0, %eax3083; X86-X87-NEXT:    movl $0, %ebx3084; X86-X87-NEXT:    jae .LBB29_13085; X86-X87-NEXT:  # %bb.2:3086; X86-X87-NEXT:    movl $0, %edx3087; X86-X87-NEXT:    jae .LBB29_33088; X86-X87-NEXT:  .LBB29_4:3089; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x800000003090; X86-X87-NEXT:    jb .LBB29_63091; X86-X87-NEXT:  .LBB29_5:3092; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx3093; X86-X87-NEXT:  .LBB29_6:3094; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3095; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3096; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload3097; X86-X87-NEXT:    fucom %st(1)3098; X86-X87-NEXT:    fstp %st(1)3099; X86-X87-NEXT:    fnstsw %ax3100; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3101; X86-X87-NEXT:    sahf3102; X86-X87-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF3103; X86-X87-NEXT:    ja .LBB29_83104; X86-X87-NEXT:  # %bb.7:3105; X86-X87-NEXT:    movl %ecx, %eax3106; X86-X87-NEXT:  .LBB29_8:3107; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3108; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx3109; X86-X87-NEXT:    movl $-1, %ebp3110; X86-X87-NEXT:    movl $-1, %edi3111; X86-X87-NEXT:    movl $-1, %esi3112; X86-X87-NEXT:    ja .LBB29_103113; X86-X87-NEXT:  # %bb.9:3114; X86-X87-NEXT:    movl %edx, %ebp3115; X86-X87-NEXT:    movl %ebx, %edi3116; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload3117; X86-X87-NEXT:  .LBB29_10:3118; X86-X87-NEXT:    fucomp %st(0)3119; X86-X87-NEXT:    fnstsw %ax3120; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3121; X86-X87-NEXT:    sahf3122; X86-X87-NEXT:    movl $0, %eax3123; X86-X87-NEXT:    movl $0, %edx3124; X86-X87-NEXT:    movl $0, %ebx3125; X86-X87-NEXT:    jp .LBB29_123126; X86-X87-NEXT:  # %bb.11:3127; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3128; X86-X87-NEXT:    movl %edi, %eax3129; X86-X87-NEXT:    movl %ebp, %edx3130; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload3131; X86-X87-NEXT:  .LBB29_12:3132; X86-X87-NEXT:    movl %ebx, 12(%ecx)3133; X86-X87-NEXT:    movl %edx, 8(%ecx)3134; X86-X87-NEXT:    movl %eax, 4(%ecx)3135; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3136; X86-X87-NEXT:    movl %eax, (%ecx)3137; X86-X87-NEXT:    movl %ecx, %eax3138; X86-X87-NEXT:    addl $60, %esp3139; X86-X87-NEXT:    popl %esi3140; X86-X87-NEXT:    popl %edi3141; X86-X87-NEXT:    popl %ebx3142; X86-X87-NEXT:    popl %ebp3143; X86-X87-NEXT:    retl $43144; X86-X87-NEXT:  .LBB29_1:3145; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax3146; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx3147; X86-X87-NEXT:    movl $0, %edx3148; X86-X87-NEXT:    jb .LBB29_43149; X86-X87-NEXT:  .LBB29_3:3150; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx3151; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x800000003152; X86-X87-NEXT:    jae .LBB29_53153; X86-X87-NEXT:    jmp .LBB29_63154;3155; X86-SSE-LABEL: test_signed_i128_f16:3156; X86-SSE:       # %bb.0:3157; X86-SSE-NEXT:    pushl %ebp3158; X86-SSE-NEXT:    pushl %ebx3159; X86-SSE-NEXT:    pushl %edi3160; X86-SSE-NEXT:    pushl %esi3161; X86-SSE-NEXT:    subl $44, %esp3162; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm03163; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi3164; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax3165; X86-SSE-NEXT:    movw %ax, (%esp)3166; X86-SSE-NEXT:    calll __extendhfsf23167; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax3168; X86-SSE-NEXT:    movl %eax, (%esp)3169; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)3170; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero3171; X86-SSE-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3172; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)3173; X86-SSE-NEXT:    calll __fixsfti3174; X86-SSE-NEXT:    subl $4, %esp3175; X86-SSE-NEXT:    xorl %ecx, %ecx3176; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload3177; X86-SSE-NEXT:    # xmm0 = mem[0],zero,zero,zero3178; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm03179; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax3180; X86-SSE-NEXT:    cmovbl %ecx, %eax3181; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx3182; X86-SSE-NEXT:    cmovbl %ecx, %edx3183; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi3184; X86-SSE-NEXT:    cmovbl %ecx, %edi3185; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x800000003186; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp3187; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm03188; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF3189; X86-SSE-NEXT:    cmovbel %ebp, %ebx3190; X86-SSE-NEXT:    movl $-1, %ebp3191; X86-SSE-NEXT:    cmoval %ebp, %edi3192; X86-SSE-NEXT:    cmoval %ebp, %edx3193; X86-SSE-NEXT:    cmoval %ebp, %eax3194; X86-SSE-NEXT:    ucomiss %xmm0, %xmm03195; X86-SSE-NEXT:    cmovpl %ecx, %eax3196; X86-SSE-NEXT:    cmovpl %ecx, %edx3197; X86-SSE-NEXT:    cmovpl %ecx, %edi3198; X86-SSE-NEXT:    cmovpl %ecx, %ebx3199; X86-SSE-NEXT:    movl %ebx, 12(%esi)3200; X86-SSE-NEXT:    movl %edi, 8(%esi)3201; X86-SSE-NEXT:    movl %edx, 4(%esi)3202; X86-SSE-NEXT:    movl %eax, (%esi)3203; X86-SSE-NEXT:    movl %esi, %eax3204; X86-SSE-NEXT:    addl $44, %esp3205; X86-SSE-NEXT:    popl %esi3206; X86-SSE-NEXT:    popl %edi3207; X86-SSE-NEXT:    popl %ebx3208; X86-SSE-NEXT:    popl %ebp3209; X86-SSE-NEXT:    retl $43210;3211; X64-LABEL: test_signed_i128_f16:3212; X64:       # %bb.0:3213; X64-NEXT:    pushq %rax3214; X64-NEXT:    callq __extendhfsf2@PLT3215; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill3216; X64-NEXT:    callq __fixsfti@PLT3217; X64-NEXT:    xorl %ecx, %ecx3218; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload3219; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero3220; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03221; X64-NEXT:    cmovbq %rcx, %rax3222; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x80000000000000003223; X64-NEXT:    cmovbq %rsi, %rdx3224; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03225; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF3226; X64-NEXT:    cmovaq %rsi, %rdx3227; X64-NEXT:    movq $-1, %rsi3228; X64-NEXT:    cmovaq %rsi, %rax3229; X64-NEXT:    ucomiss %xmm0, %xmm03230; X64-NEXT:    cmovpq %rcx, %rax3231; X64-NEXT:    cmovpq %rcx, %rdx3232; X64-NEXT:    popq %rcx3233; X64-NEXT:    retq3234    %x = call i128 @llvm.fptosi.sat.i128.f16(half %f)3235    ret i128 %x3236}3237 3238;3239; 80-bit float to signed integer3240;3241 3242declare   i1 @llvm.fptosi.sat.i1.f80  (x86_fp80)3243declare   i8 @llvm.fptosi.sat.i8.f80  (x86_fp80)3244declare  i13 @llvm.fptosi.sat.i13.f80 (x86_fp80)3245declare  i16 @llvm.fptosi.sat.i16.f80 (x86_fp80)3246declare  i19 @llvm.fptosi.sat.i19.f80 (x86_fp80)3247declare  i32 @llvm.fptosi.sat.i32.f80 (x86_fp80)3248declare  i50 @llvm.fptosi.sat.i50.f80 (x86_fp80)3249declare  i64 @llvm.fptosi.sat.i64.f80 (x86_fp80)3250declare i100 @llvm.fptosi.sat.i100.f80(x86_fp80)3251declare i128 @llvm.fptosi.sat.i128.f80(x86_fp80)3252 3253define i1 @test_signed_i1_f80(x86_fp80 %f) nounwind {3254; X86-X87-LABEL: test_signed_i1_f80:3255; X86-X87:       # %bb.0:3256; X86-X87-NEXT:    pushl %ebx3257; X86-X87-NEXT:    subl $8, %esp3258; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3259; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3260; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3261; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003262; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3263; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3264; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)3265; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3266; X86-X87-NEXT:    fld13267; X86-X87-NEXT:    fchs3268; X86-X87-NEXT:    fxch %st(1)3269; X86-X87-NEXT:    fucom %st(1)3270; X86-X87-NEXT:    fstp %st(1)3271; X86-X87-NEXT:    fnstsw %ax3272; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3273; X86-X87-NEXT:    sahf3274; X86-X87-NEXT:    movb $-1, %dl3275; X86-X87-NEXT:    jb .LBB30_23276; X86-X87-NEXT:  # %bb.1:3277; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx3278; X86-X87-NEXT:  .LBB30_2:3279; X86-X87-NEXT:    fldz3280; X86-X87-NEXT:    fxch %st(1)3281; X86-X87-NEXT:    fucom %st(1)3282; X86-X87-NEXT:    fstp %st(1)3283; X86-X87-NEXT:    fnstsw %ax3284; X86-X87-NEXT:    xorl %ecx, %ecx3285; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3286; X86-X87-NEXT:    sahf3287; X86-X87-NEXT:    movl $0, %ebx3288; X86-X87-NEXT:    ja .LBB30_43289; X86-X87-NEXT:  # %bb.3:3290; X86-X87-NEXT:    movl %edx, %ebx3291; X86-X87-NEXT:  .LBB30_4:3292; X86-X87-NEXT:    fucomp %st(0)3293; X86-X87-NEXT:    fnstsw %ax3294; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3295; X86-X87-NEXT:    sahf3296; X86-X87-NEXT:    jp .LBB30_63297; X86-X87-NEXT:  # %bb.5:3298; X86-X87-NEXT:    movl %ebx, %ecx3299; X86-X87-NEXT:  .LBB30_6:3300; X86-X87-NEXT:    movl %ecx, %eax3301; X86-X87-NEXT:    addl $8, %esp3302; X86-X87-NEXT:    popl %ebx3303; X86-X87-NEXT:    retl3304;3305; X86-SSE-LABEL: test_signed_i1_f80:3306; X86-SSE:       # %bb.0:3307; X86-SSE-NEXT:    subl $8, %esp3308; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3309; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3310; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3311; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003312; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3313; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3314; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)3315; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3316; X86-SSE-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx3317; X86-SSE-NEXT:    fld13318; X86-SSE-NEXT:    fchs3319; X86-SSE-NEXT:    fxch %st(1)3320; X86-SSE-NEXT:    fucomi %st(1), %st3321; X86-SSE-NEXT:    fstp %st(1)3322; X86-SSE-NEXT:    movl $255, %eax3323; X86-SSE-NEXT:    cmovael %ecx, %eax3324; X86-SSE-NEXT:    xorl %ecx, %ecx3325; X86-SSE-NEXT:    fldz3326; X86-SSE-NEXT:    fxch %st(1)3327; X86-SSE-NEXT:    fucomi %st(1), %st3328; X86-SSE-NEXT:    fstp %st(1)3329; X86-SSE-NEXT:    cmoval %ecx, %eax3330; X86-SSE-NEXT:    fucompi %st(0), %st3331; X86-SSE-NEXT:    cmovpl %ecx, %eax3332; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax3333; X86-SSE-NEXT:    addl $8, %esp3334; X86-SSE-NEXT:    retl3335;3336; X64-LABEL: test_signed_i1_f80:3337; X64:       # %bb.0:3338; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3339; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3340; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3341; X64-NEXT:    orl $3072, %eax # imm = 0xC003342; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3343; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3344; X64-NEXT:    fists -{{[0-9]+}}(%rsp)3345; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3346; X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx3347; X64-NEXT:    fld13348; X64-NEXT:    fchs3349; X64-NEXT:    fxch %st(1)3350; X64-NEXT:    fucomi %st(1), %st3351; X64-NEXT:    fstp %st(1)3352; X64-NEXT:    movl $255, %eax3353; X64-NEXT:    cmovael %ecx, %eax3354; X64-NEXT:    xorl %ecx, %ecx3355; X64-NEXT:    fldz3356; X64-NEXT:    fxch %st(1)3357; X64-NEXT:    fucomi %st(1), %st3358; X64-NEXT:    fstp %st(1)3359; X64-NEXT:    cmoval %ecx, %eax3360; X64-NEXT:    fucompi %st(0), %st3361; X64-NEXT:    cmovpl %ecx, %eax3362; X64-NEXT:    # kill: def $al killed $al killed $eax3363; X64-NEXT:    retq3364    %x = call i1 @llvm.fptosi.sat.i1.f80(x86_fp80 %f)3365    ret i1 %x3366}3367 3368define i8 @test_signed_i8_f80(x86_fp80 %f) nounwind {3369; X86-X87-LABEL: test_signed_i8_f80:3370; X86-X87:       # %bb.0:3371; X86-X87-NEXT:    subl $8, %esp3372; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3373; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3374; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3375; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003376; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3377; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3378; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)3379; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3380; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3381; X86-X87-NEXT:    fxch %st(1)3382; X86-X87-NEXT:    fucom %st(1)3383; X86-X87-NEXT:    fstp %st(1)3384; X86-X87-NEXT:    fnstsw %ax3385; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3386; X86-X87-NEXT:    sahf3387; X86-X87-NEXT:    movb $-128, %dl3388; X86-X87-NEXT:    jb .LBB31_23389; X86-X87-NEXT:  # %bb.1:3390; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx3391; X86-X87-NEXT:  .LBB31_2:3392; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3393; X86-X87-NEXT:    fxch %st(1)3394; X86-X87-NEXT:    fucom %st(1)3395; X86-X87-NEXT:    fstp %st(1)3396; X86-X87-NEXT:    fnstsw %ax3397; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3398; X86-X87-NEXT:    sahf3399; X86-X87-NEXT:    movb $127, %cl3400; X86-X87-NEXT:    ja .LBB31_43401; X86-X87-NEXT:  # %bb.3:3402; X86-X87-NEXT:    movl %edx, %ecx3403; X86-X87-NEXT:  .LBB31_4:3404; X86-X87-NEXT:    fucomp %st(0)3405; X86-X87-NEXT:    fnstsw %ax3406; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3407; X86-X87-NEXT:    sahf3408; X86-X87-NEXT:    jnp .LBB31_63409; X86-X87-NEXT:  # %bb.5:3410; X86-X87-NEXT:    xorl %ecx, %ecx3411; X86-X87-NEXT:  .LBB31_6:3412; X86-X87-NEXT:    movl %ecx, %eax3413; X86-X87-NEXT:    addl $8, %esp3414; X86-X87-NEXT:    retl3415;3416; X86-SSE-LABEL: test_signed_i8_f80:3417; X86-SSE:       # %bb.0:3418; X86-SSE-NEXT:    subl $8, %esp3419; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3420; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3421; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3422; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003423; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3424; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3425; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)3426; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3427; X86-SSE-NEXT:    movzbl {{[0-9]+}}(%esp), %eax3428; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3429; X86-SSE-NEXT:    fxch %st(1)3430; X86-SSE-NEXT:    fucomi %st(1), %st3431; X86-SSE-NEXT:    fstp %st(1)3432; X86-SSE-NEXT:    movl $128, %ecx3433; X86-SSE-NEXT:    cmovael %eax, %ecx3434; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3435; X86-SSE-NEXT:    fxch %st(1)3436; X86-SSE-NEXT:    fucomi %st(1), %st3437; X86-SSE-NEXT:    fstp %st(1)3438; X86-SSE-NEXT:    movl $127, %edx3439; X86-SSE-NEXT:    cmovbel %ecx, %edx3440; X86-SSE-NEXT:    xorl %eax, %eax3441; X86-SSE-NEXT:    fucompi %st(0), %st3442; X86-SSE-NEXT:    cmovnpl %edx, %eax3443; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax3444; X86-SSE-NEXT:    addl $8, %esp3445; X86-SSE-NEXT:    retl3446;3447; X64-LABEL: test_signed_i8_f80:3448; X64:       # %bb.0:3449; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3450; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3451; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3452; X64-NEXT:    orl $3072, %eax # imm = 0xC003453; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3454; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3455; X64-NEXT:    fists -{{[0-9]+}}(%rsp)3456; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3457; X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax3458; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3459; X64-NEXT:    fxch %st(1)3460; X64-NEXT:    fucomi %st(1), %st3461; X64-NEXT:    fstp %st(1)3462; X64-NEXT:    movl $128, %ecx3463; X64-NEXT:    cmovael %eax, %ecx3464; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3465; X64-NEXT:    fxch %st(1)3466; X64-NEXT:    fucomi %st(1), %st3467; X64-NEXT:    fstp %st(1)3468; X64-NEXT:    movl $127, %edx3469; X64-NEXT:    cmovbel %ecx, %edx3470; X64-NEXT:    xorl %eax, %eax3471; X64-NEXT:    fucompi %st(0), %st3472; X64-NEXT:    cmovnpl %edx, %eax3473; X64-NEXT:    # kill: def $al killed $al killed $eax3474; X64-NEXT:    retq3475    %x = call i8 @llvm.fptosi.sat.i8.f80(x86_fp80 %f)3476    ret i8 %x3477}3478 3479define i13 @test_signed_i13_f80(x86_fp80 %f) nounwind {3480; X86-X87-LABEL: test_signed_i13_f80:3481; X86-X87:       # %bb.0:3482; X86-X87-NEXT:    subl $8, %esp3483; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3484; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3485; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3486; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003487; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3488; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3489; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)3490; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3491; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3492; X86-X87-NEXT:    fxch %st(1)3493; X86-X87-NEXT:    fucom %st(1)3494; X86-X87-NEXT:    fstp %st(1)3495; X86-X87-NEXT:    fnstsw %ax3496; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3497; X86-X87-NEXT:    sahf3498; X86-X87-NEXT:    movl $61440, %ecx # imm = 0xF0003499; X86-X87-NEXT:    jb .LBB32_23500; X86-X87-NEXT:  # %bb.1:3501; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx3502; X86-X87-NEXT:  .LBB32_2:3503; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3504; X86-X87-NEXT:    fxch %st(1)3505; X86-X87-NEXT:    fucom %st(1)3506; X86-X87-NEXT:    fstp %st(1)3507; X86-X87-NEXT:    fnstsw %ax3508; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3509; X86-X87-NEXT:    sahf3510; X86-X87-NEXT:    movl $4095, %edx # imm = 0xFFF3511; X86-X87-NEXT:    ja .LBB32_43512; X86-X87-NEXT:  # %bb.3:3513; X86-X87-NEXT:    movl %ecx, %edx3514; X86-X87-NEXT:  .LBB32_4:3515; X86-X87-NEXT:    fucomp %st(0)3516; X86-X87-NEXT:    fnstsw %ax3517; X86-X87-NEXT:    xorl %ecx, %ecx3518; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3519; X86-X87-NEXT:    sahf3520; X86-X87-NEXT:    jp .LBB32_63521; X86-X87-NEXT:  # %bb.5:3522; X86-X87-NEXT:    movl %edx, %ecx3523; X86-X87-NEXT:  .LBB32_6:3524; X86-X87-NEXT:    movl %ecx, %eax3525; X86-X87-NEXT:    addl $8, %esp3526; X86-X87-NEXT:    retl3527;3528; X86-SSE-LABEL: test_signed_i13_f80:3529; X86-SSE:       # %bb.0:3530; X86-SSE-NEXT:    subl $8, %esp3531; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3532; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3533; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3534; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003535; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3536; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3537; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)3538; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3539; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3540; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3541; X86-SSE-NEXT:    fxch %st(1)3542; X86-SSE-NEXT:    fucomi %st(1), %st3543; X86-SSE-NEXT:    fstp %st(1)3544; X86-SSE-NEXT:    movl $61440, %ecx # imm = 0xF0003545; X86-SSE-NEXT:    cmovael %eax, %ecx3546; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3547; X86-SSE-NEXT:    fxch %st(1)3548; X86-SSE-NEXT:    fucomi %st(1), %st3549; X86-SSE-NEXT:    fstp %st(1)3550; X86-SSE-NEXT:    movl $4095, %edx # imm = 0xFFF3551; X86-SSE-NEXT:    cmovbel %ecx, %edx3552; X86-SSE-NEXT:    xorl %eax, %eax3553; X86-SSE-NEXT:    fucompi %st(0), %st3554; X86-SSE-NEXT:    cmovnpl %edx, %eax3555; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax3556; X86-SSE-NEXT:    addl $8, %esp3557; X86-SSE-NEXT:    retl3558;3559; X64-LABEL: test_signed_i13_f80:3560; X64:       # %bb.0:3561; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3562; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3563; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3564; X64-NEXT:    orl $3072, %eax # imm = 0xC003565; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3566; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3567; X64-NEXT:    fists -{{[0-9]+}}(%rsp)3568; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3569; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3570; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3571; X64-NEXT:    fxch %st(1)3572; X64-NEXT:    fucomi %st(1), %st3573; X64-NEXT:    fstp %st(1)3574; X64-NEXT:    movl $61440, %ecx # imm = 0xF0003575; X64-NEXT:    cmovael %eax, %ecx3576; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3577; X64-NEXT:    fxch %st(1)3578; X64-NEXT:    fucomi %st(1), %st3579; X64-NEXT:    fstp %st(1)3580; X64-NEXT:    movl $4095, %edx # imm = 0xFFF3581; X64-NEXT:    cmovbel %ecx, %edx3582; X64-NEXT:    xorl %eax, %eax3583; X64-NEXT:    fucompi %st(0), %st3584; X64-NEXT:    cmovnpl %edx, %eax3585; X64-NEXT:    # kill: def $ax killed $ax killed $eax3586; X64-NEXT:    retq3587    %x = call i13 @llvm.fptosi.sat.i13.f80(x86_fp80 %f)3588    ret i13 %x3589}3590 3591define i16 @test_signed_i16_f80(x86_fp80 %f) nounwind {3592; X86-X87-LABEL: test_signed_i16_f80:3593; X86-X87:       # %bb.0:3594; X86-X87-NEXT:    subl $8, %esp3595; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3596; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3597; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3598; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003599; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3600; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3601; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)3602; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3603; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3604; X86-X87-NEXT:    fxch %st(1)3605; X86-X87-NEXT:    fucom %st(1)3606; X86-X87-NEXT:    fstp %st(1)3607; X86-X87-NEXT:    fnstsw %ax3608; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3609; X86-X87-NEXT:    sahf3610; X86-X87-NEXT:    movl $32768, %ecx # imm = 0x80003611; X86-X87-NEXT:    jb .LBB33_23612; X86-X87-NEXT:  # %bb.1:3613; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx3614; X86-X87-NEXT:  .LBB33_2:3615; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3616; X86-X87-NEXT:    fxch %st(1)3617; X86-X87-NEXT:    fucom %st(1)3618; X86-X87-NEXT:    fstp %st(1)3619; X86-X87-NEXT:    fnstsw %ax3620; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3621; X86-X87-NEXT:    sahf3622; X86-X87-NEXT:    movl $32767, %edx # imm = 0x7FFF3623; X86-X87-NEXT:    ja .LBB33_43624; X86-X87-NEXT:  # %bb.3:3625; X86-X87-NEXT:    movl %ecx, %edx3626; X86-X87-NEXT:  .LBB33_4:3627; X86-X87-NEXT:    fucomp %st(0)3628; X86-X87-NEXT:    fnstsw %ax3629; X86-X87-NEXT:    xorl %ecx, %ecx3630; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3631; X86-X87-NEXT:    sahf3632; X86-X87-NEXT:    jp .LBB33_63633; X86-X87-NEXT:  # %bb.5:3634; X86-X87-NEXT:    movl %edx, %ecx3635; X86-X87-NEXT:  .LBB33_6:3636; X86-X87-NEXT:    movl %ecx, %eax3637; X86-X87-NEXT:    addl $8, %esp3638; X86-X87-NEXT:    retl3639;3640; X86-SSE-LABEL: test_signed_i16_f80:3641; X86-SSE:       # %bb.0:3642; X86-SSE-NEXT:    subl $8, %esp3643; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3644; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)3645; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3646; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003647; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3648; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3649; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)3650; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3651; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3652; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3653; X86-SSE-NEXT:    fxch %st(1)3654; X86-SSE-NEXT:    fucomi %st(1), %st3655; X86-SSE-NEXT:    fstp %st(1)3656; X86-SSE-NEXT:    movl $32768, %ecx # imm = 0x80003657; X86-SSE-NEXT:    cmovael %eax, %ecx3658; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3659; X86-SSE-NEXT:    fxch %st(1)3660; X86-SSE-NEXT:    fucomi %st(1), %st3661; X86-SSE-NEXT:    fstp %st(1)3662; X86-SSE-NEXT:    movl $32767, %edx # imm = 0x7FFF3663; X86-SSE-NEXT:    cmovbel %ecx, %edx3664; X86-SSE-NEXT:    xorl %eax, %eax3665; X86-SSE-NEXT:    fucompi %st(0), %st3666; X86-SSE-NEXT:    cmovnpl %edx, %eax3667; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax3668; X86-SSE-NEXT:    addl $8, %esp3669; X86-SSE-NEXT:    retl3670;3671; X64-LABEL: test_signed_i16_f80:3672; X64:       # %bb.0:3673; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3674; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3675; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3676; X64-NEXT:    orl $3072, %eax # imm = 0xC003677; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3678; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3679; X64-NEXT:    fists -{{[0-9]+}}(%rsp)3680; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3681; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3682; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3683; X64-NEXT:    fxch %st(1)3684; X64-NEXT:    fucomi %st(1), %st3685; X64-NEXT:    fstp %st(1)3686; X64-NEXT:    movl $32768, %ecx # imm = 0x80003687; X64-NEXT:    cmovael %eax, %ecx3688; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3689; X64-NEXT:    fxch %st(1)3690; X64-NEXT:    fucomi %st(1), %st3691; X64-NEXT:    fstp %st(1)3692; X64-NEXT:    movl $32767, %edx # imm = 0x7FFF3693; X64-NEXT:    cmovbel %ecx, %edx3694; X64-NEXT:    xorl %eax, %eax3695; X64-NEXT:    fucompi %st(0), %st3696; X64-NEXT:    cmovnpl %edx, %eax3697; X64-NEXT:    # kill: def $ax killed $ax killed $eax3698; X64-NEXT:    retq3699    %x = call i16 @llvm.fptosi.sat.i16.f80(x86_fp80 %f)3700    ret i16 %x3701}3702 3703define i19 @test_signed_i19_f80(x86_fp80 %f) nounwind {3704; X86-X87-LABEL: test_signed_i19_f80:3705; X86-X87:       # %bb.0:3706; X86-X87-NEXT:    subl $8, %esp3707; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3708; X86-X87-NEXT:    fnstcw (%esp)3709; X86-X87-NEXT:    movzwl (%esp), %eax3710; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003711; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3712; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3713; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)3714; X86-X87-NEXT:    fldcw (%esp)3715; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3716; X86-X87-NEXT:    fxch %st(1)3717; X86-X87-NEXT:    fucom %st(1)3718; X86-X87-NEXT:    fstp %st(1)3719; X86-X87-NEXT:    fnstsw %ax3720; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3721; X86-X87-NEXT:    sahf3722; X86-X87-NEXT:    movl $-262144, %ecx # imm = 0xFFFC00003723; X86-X87-NEXT:    jb .LBB34_23724; X86-X87-NEXT:  # %bb.1:3725; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx3726; X86-X87-NEXT:  .LBB34_2:3727; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3728; X86-X87-NEXT:    fxch %st(1)3729; X86-X87-NEXT:    fucom %st(1)3730; X86-X87-NEXT:    fstp %st(1)3731; X86-X87-NEXT:    fnstsw %ax3732; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3733; X86-X87-NEXT:    sahf3734; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF3735; X86-X87-NEXT:    ja .LBB34_43736; X86-X87-NEXT:  # %bb.3:3737; X86-X87-NEXT:    movl %ecx, %edx3738; X86-X87-NEXT:  .LBB34_4:3739; X86-X87-NEXT:    fucomp %st(0)3740; X86-X87-NEXT:    fnstsw %ax3741; X86-X87-NEXT:    xorl %ecx, %ecx3742; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3743; X86-X87-NEXT:    sahf3744; X86-X87-NEXT:    jp .LBB34_63745; X86-X87-NEXT:  # %bb.5:3746; X86-X87-NEXT:    movl %edx, %ecx3747; X86-X87-NEXT:  .LBB34_6:3748; X86-X87-NEXT:    movl %ecx, %eax3749; X86-X87-NEXT:    addl $8, %esp3750; X86-X87-NEXT:    retl3751;3752; X86-SSE-LABEL: test_signed_i19_f80:3753; X86-SSE:       # %bb.0:3754; X86-SSE-NEXT:    subl $8, %esp3755; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3756; X86-SSE-NEXT:    fnstcw (%esp)3757; X86-SSE-NEXT:    movzwl (%esp), %eax3758; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003759; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3760; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3761; X86-SSE-NEXT:    fistl {{[0-9]+}}(%esp)3762; X86-SSE-NEXT:    fldcw (%esp)3763; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3764; X86-SSE-NEXT:    fxch %st(1)3765; X86-SSE-NEXT:    fucomi %st(1), %st3766; X86-SSE-NEXT:    fstp %st(1)3767; X86-SSE-NEXT:    movl $-262144, %eax # imm = 0xFFFC00003768; X86-SSE-NEXT:    jb .LBB34_23769; X86-SSE-NEXT:  # %bb.1:3770; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax3771; X86-SSE-NEXT:  .LBB34_2:3772; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3773; X86-SSE-NEXT:    fxch %st(1)3774; X86-SSE-NEXT:    fucomi %st(1), %st3775; X86-SSE-NEXT:    fstp %st(1)3776; X86-SSE-NEXT:    movl $262143, %ecx # imm = 0x3FFFF3777; X86-SSE-NEXT:    cmovbel %eax, %ecx3778; X86-SSE-NEXT:    xorl %eax, %eax3779; X86-SSE-NEXT:    fucompi %st(0), %st3780; X86-SSE-NEXT:    cmovnpl %ecx, %eax3781; X86-SSE-NEXT:    addl $8, %esp3782; X86-SSE-NEXT:    retl3783;3784; X64-LABEL: test_signed_i19_f80:3785; X64:       # %bb.0:3786; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3787; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3788; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3789; X64-NEXT:    orl $3072, %eax # imm = 0xC003790; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3791; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3792; X64-NEXT:    fistl -{{[0-9]+}}(%rsp)3793; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3794; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3795; X64-NEXT:    fxch %st(1)3796; X64-NEXT:    fucomi %st(1), %st3797; X64-NEXT:    fstp %st(1)3798; X64-NEXT:    movl $-262144, %eax # imm = 0xFFFC00003799; X64-NEXT:    jb .LBB34_23800; X64-NEXT:  # %bb.1:3801; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax3802; X64-NEXT:  .LBB34_2:3803; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3804; X64-NEXT:    fxch %st(1)3805; X64-NEXT:    fucomi %st(1), %st3806; X64-NEXT:    fstp %st(1)3807; X64-NEXT:    movl $262143, %ecx # imm = 0x3FFFF3808; X64-NEXT:    cmovbel %eax, %ecx3809; X64-NEXT:    xorl %eax, %eax3810; X64-NEXT:    fucompi %st(0), %st3811; X64-NEXT:    cmovnpl %ecx, %eax3812; X64-NEXT:    retq3813    %x = call i19 @llvm.fptosi.sat.i19.f80(x86_fp80 %f)3814    ret i19 %x3815}3816 3817define i32 @test_signed_i32_f80(x86_fp80 %f) nounwind {3818; X86-X87-LABEL: test_signed_i32_f80:3819; X86-X87:       # %bb.0:3820; X86-X87-NEXT:    subl $8, %esp3821; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3822; X86-X87-NEXT:    fnstcw (%esp)3823; X86-X87-NEXT:    movzwl (%esp), %eax3824; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003825; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3826; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3827; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)3828; X86-X87-NEXT:    fldcw (%esp)3829; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3830; X86-X87-NEXT:    fxch %st(1)3831; X86-X87-NEXT:    fucom %st(1)3832; X86-X87-NEXT:    fstp %st(1)3833; X86-X87-NEXT:    fnstsw %ax3834; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3835; X86-X87-NEXT:    sahf3836; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x800000003837; X86-X87-NEXT:    jb .LBB35_23838; X86-X87-NEXT:  # %bb.1:3839; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx3840; X86-X87-NEXT:  .LBB35_2:3841; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}3842; X86-X87-NEXT:    fxch %st(1)3843; X86-X87-NEXT:    fucom %st(1)3844; X86-X87-NEXT:    fstp %st(1)3845; X86-X87-NEXT:    fnstsw %ax3846; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3847; X86-X87-NEXT:    sahf3848; X86-X87-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF3849; X86-X87-NEXT:    ja .LBB35_43850; X86-X87-NEXT:  # %bb.3:3851; X86-X87-NEXT:    movl %ecx, %edx3852; X86-X87-NEXT:  .LBB35_4:3853; X86-X87-NEXT:    fucomp %st(0)3854; X86-X87-NEXT:    fnstsw %ax3855; X86-X87-NEXT:    xorl %ecx, %ecx3856; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3857; X86-X87-NEXT:    sahf3858; X86-X87-NEXT:    jp .LBB35_63859; X86-X87-NEXT:  # %bb.5:3860; X86-X87-NEXT:    movl %edx, %ecx3861; X86-X87-NEXT:  .LBB35_6:3862; X86-X87-NEXT:    movl %ecx, %eax3863; X86-X87-NEXT:    addl $8, %esp3864; X86-X87-NEXT:    retl3865;3866; X86-SSE-LABEL: test_signed_i32_f80:3867; X86-SSE:       # %bb.0:3868; X86-SSE-NEXT:    subl $8, %esp3869; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)3870; X86-SSE-NEXT:    fnstcw (%esp)3871; X86-SSE-NEXT:    movzwl (%esp), %eax3872; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC003873; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)3874; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)3875; X86-SSE-NEXT:    fistl {{[0-9]+}}(%esp)3876; X86-SSE-NEXT:    fldcw (%esp)3877; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3878; X86-SSE-NEXT:    fxch %st(1)3879; X86-SSE-NEXT:    fucomi %st(1), %st3880; X86-SSE-NEXT:    fstp %st(1)3881; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x800000003882; X86-SSE-NEXT:    jb .LBB35_23883; X86-SSE-NEXT:  # %bb.1:3884; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax3885; X86-SSE-NEXT:  .LBB35_2:3886; X86-SSE-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}3887; X86-SSE-NEXT:    fxch %st(1)3888; X86-SSE-NEXT:    fucomi %st(1), %st3889; X86-SSE-NEXT:    fstp %st(1)3890; X86-SSE-NEXT:    movl $2147483647, %ecx # imm = 0x7FFFFFFF3891; X86-SSE-NEXT:    cmovbel %eax, %ecx3892; X86-SSE-NEXT:    xorl %eax, %eax3893; X86-SSE-NEXT:    fucompi %st(0), %st3894; X86-SSE-NEXT:    cmovnpl %ecx, %eax3895; X86-SSE-NEXT:    addl $8, %esp3896; X86-SSE-NEXT:    retl3897;3898; X64-LABEL: test_signed_i32_f80:3899; X64:       # %bb.0:3900; X64-NEXT:    fldt {{[0-9]+}}(%rsp)3901; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)3902; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax3903; X64-NEXT:    orl $3072, %eax # imm = 0xC003904; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)3905; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3906; X64-NEXT:    fistl -{{[0-9]+}}(%rsp)3907; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)3908; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3909; X64-NEXT:    fxch %st(1)3910; X64-NEXT:    fucomi %st(1), %st3911; X64-NEXT:    fstp %st(1)3912; X64-NEXT:    movl $-2147483648, %eax # imm = 0x800000003913; X64-NEXT:    jb .LBB35_23914; X64-NEXT:  # %bb.1:3915; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax3916; X64-NEXT:  .LBB35_2:3917; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3918; X64-NEXT:    fxch %st(1)3919; X64-NEXT:    fucomi %st(1), %st3920; X64-NEXT:    fstp %st(1)3921; X64-NEXT:    movl $2147483647, %ecx # imm = 0x7FFFFFFF3922; X64-NEXT:    cmovbel %eax, %ecx3923; X64-NEXT:    xorl %eax, %eax3924; X64-NEXT:    fucompi %st(0), %st3925; X64-NEXT:    cmovnpl %ecx, %eax3926; X64-NEXT:    retq3927    %x = call i32 @llvm.fptosi.sat.i32.f80(x86_fp80 %f)3928    ret i32 %x3929}3930 3931define i50 @test_signed_i50_f80(x86_fp80 %f) nounwind {3932; X86-X87-LABEL: test_signed_i50_f80:3933; X86-X87:       # %bb.0:3934; X86-X87-NEXT:    pushl %edi3935; X86-X87-NEXT:    pushl %esi3936; X86-X87-NEXT:    subl $20, %esp3937; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)3938; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)3939; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3940; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC003941; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)3942; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3943; X86-X87-NEXT:    fld %st(0)3944; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)3945; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)3946; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}3947; X86-X87-NEXT:    fxch %st(1)3948; X86-X87-NEXT:    fucom %st(1)3949; X86-X87-NEXT:    fstp %st(1)3950; X86-X87-NEXT:    fnstsw %ax3951; X86-X87-NEXT:    xorl %ecx, %ecx3952; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3953; X86-X87-NEXT:    sahf3954; X86-X87-NEXT:    movl $0, %edx3955; X86-X87-NEXT:    jb .LBB36_23956; X86-X87-NEXT:  # %bb.1:3957; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx3958; X86-X87-NEXT:  .LBB36_2:3959; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE00003960; X86-X87-NEXT:    jb .LBB36_43961; X86-X87-NEXT:  # %bb.3:3962; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi3963; X86-X87-NEXT:  .LBB36_4:3964; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}3965; X86-X87-NEXT:    fxch %st(1)3966; X86-X87-NEXT:    fucom %st(1)3967; X86-X87-NEXT:    fstp %st(1)3968; X86-X87-NEXT:    fnstsw %ax3969; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3970; X86-X87-NEXT:    sahf3971; X86-X87-NEXT:    movl $131071, %esi # imm = 0x1FFFF3972; X86-X87-NEXT:    ja .LBB36_63973; X86-X87-NEXT:  # %bb.5:3974; X86-X87-NEXT:    movl %edi, %esi3975; X86-X87-NEXT:  .LBB36_6:3976; X86-X87-NEXT:    movl $-1, %edi3977; X86-X87-NEXT:    ja .LBB36_83978; X86-X87-NEXT:  # %bb.7:3979; X86-X87-NEXT:    movl %edx, %edi3980; X86-X87-NEXT:  .LBB36_8:3981; X86-X87-NEXT:    fucomp %st(0)3982; X86-X87-NEXT:    fnstsw %ax3983; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax3984; X86-X87-NEXT:    sahf3985; X86-X87-NEXT:    movl $0, %edx3986; X86-X87-NEXT:    jp .LBB36_103987; X86-X87-NEXT:  # %bb.9:3988; X86-X87-NEXT:    movl %edi, %ecx3989; X86-X87-NEXT:    movl %esi, %edx3990; X86-X87-NEXT:  .LBB36_10:3991; X86-X87-NEXT:    movl %ecx, %eax3992; X86-X87-NEXT:    addl $20, %esp3993; X86-X87-NEXT:    popl %esi3994; X86-X87-NEXT:    popl %edi3995; X86-X87-NEXT:    retl3996;3997; X86-SSE-LABEL: test_signed_i50_f80:3998; X86-SSE:       # %bb.0:3999; X86-SSE-NEXT:    pushl %esi4000; X86-SSE-NEXT:    subl $16, %esp4001; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)4002; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)4003; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax4004; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC004005; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)4006; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)4007; X86-SSE-NEXT:    fld %st(0)4008; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)4009; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)4010; X86-SSE-NEXT:    xorl %ecx, %ecx4011; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}4012; X86-SSE-NEXT:    fxch %st(1)4013; X86-SSE-NEXT:    fucomi %st(1), %st4014; X86-SSE-NEXT:    fstp %st(1)4015; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi4016; X86-SSE-NEXT:    cmovbl %ecx, %esi4017; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE00004018; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax4019; X86-SSE-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}4020; X86-SSE-NEXT:    fxch %st(1)4021; X86-SSE-NEXT:    fucomi %st(1), %st4022; X86-SSE-NEXT:    fstp %st(1)4023; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF4024; X86-SSE-NEXT:    cmovbel %eax, %edx4025; X86-SSE-NEXT:    movl $-1, %eax4026; X86-SSE-NEXT:    cmovbel %esi, %eax4027; X86-SSE-NEXT:    fucompi %st(0), %st4028; X86-SSE-NEXT:    cmovpl %ecx, %eax4029; X86-SSE-NEXT:    cmovpl %ecx, %edx4030; X86-SSE-NEXT:    addl $16, %esp4031; X86-SSE-NEXT:    popl %esi4032; X86-SSE-NEXT:    retl4033;4034; X64-LABEL: test_signed_i50_f80:4035; X64:       # %bb.0:4036; X64-NEXT:    fldt {{[0-9]+}}(%rsp)4037; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)4038; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax4039; X64-NEXT:    orl $3072, %eax # imm = 0xC004040; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)4041; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)4042; X64-NEXT:    fld %st(0)4043; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)4044; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)4045; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4046; X64-NEXT:    fxch %st(1)4047; X64-NEXT:    fucomi %st(1), %st4048; X64-NEXT:    fstp %st(1)4049; X64-NEXT:    jb .LBB36_14050; X64-NEXT:  # %bb.2:4051; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax4052; X64-NEXT:    jmp .LBB36_34053; X64-NEXT:  .LBB36_1:4054; X64-NEXT:    movabsq $-562949953421312, %rax # imm = 0xFFFE0000000000004055; X64-NEXT:  .LBB36_3:4056; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4057; X64-NEXT:    fxch %st(1)4058; X64-NEXT:    fucomi %st(1), %st4059; X64-NEXT:    fstp %st(1)4060; X64-NEXT:    movabsq $562949953421311, %rcx # imm = 0x1FFFFFFFFFFFF4061; X64-NEXT:    cmovbeq %rax, %rcx4062; X64-NEXT:    xorl %eax, %eax4063; X64-NEXT:    fucompi %st(0), %st4064; X64-NEXT:    cmovnpq %rcx, %rax4065; X64-NEXT:    retq4066    %x = call i50 @llvm.fptosi.sat.i50.f80(x86_fp80 %f)4067    ret i50 %x4068}4069 4070define i64 @test_signed_i64_f80(x86_fp80 %f) nounwind {4071; X86-X87-LABEL: test_signed_i64_f80:4072; X86-X87:       # %bb.0:4073; X86-X87-NEXT:    pushl %edi4074; X86-X87-NEXT:    pushl %esi4075; X86-X87-NEXT:    subl $20, %esp4076; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)4077; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)4078; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax4079; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC004080; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)4081; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)4082; X86-X87-NEXT:    fld %st(0)4083; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)4084; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)4085; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}4086; X86-X87-NEXT:    fxch %st(1)4087; X86-X87-NEXT:    fucom %st(1)4088; X86-X87-NEXT:    fstp %st(1)4089; X86-X87-NEXT:    fnstsw %ax4090; X86-X87-NEXT:    xorl %ecx, %ecx4091; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax4092; X86-X87-NEXT:    sahf4093; X86-X87-NEXT:    movl $0, %edx4094; X86-X87-NEXT:    jb .LBB37_24095; X86-X87-NEXT:  # %bb.1:4096; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx4097; X86-X87-NEXT:  .LBB37_2:4098; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x800000004099; X86-X87-NEXT:    jb .LBB37_44100; X86-X87-NEXT:  # %bb.3:4101; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi4102; X86-X87-NEXT:  .LBB37_4:4103; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}4104; X86-X87-NEXT:    fxch %st(1)4105; X86-X87-NEXT:    fucom %st(1)4106; X86-X87-NEXT:    fstp %st(1)4107; X86-X87-NEXT:    fnstsw %ax4108; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax4109; X86-X87-NEXT:    sahf4110; X86-X87-NEXT:    movl $2147483647, %esi # imm = 0x7FFFFFFF4111; X86-X87-NEXT:    ja .LBB37_64112; X86-X87-NEXT:  # %bb.5:4113; X86-X87-NEXT:    movl %edi, %esi4114; X86-X87-NEXT:  .LBB37_6:4115; X86-X87-NEXT:    movl $-1, %edi4116; X86-X87-NEXT:    ja .LBB37_84117; X86-X87-NEXT:  # %bb.7:4118; X86-X87-NEXT:    movl %edx, %edi4119; X86-X87-NEXT:  .LBB37_8:4120; X86-X87-NEXT:    fucomp %st(0)4121; X86-X87-NEXT:    fnstsw %ax4122; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax4123; X86-X87-NEXT:    sahf4124; X86-X87-NEXT:    movl $0, %edx4125; X86-X87-NEXT:    jp .LBB37_104126; X86-X87-NEXT:  # %bb.9:4127; X86-X87-NEXT:    movl %edi, %ecx4128; X86-X87-NEXT:    movl %esi, %edx4129; X86-X87-NEXT:  .LBB37_10:4130; X86-X87-NEXT:    movl %ecx, %eax4131; X86-X87-NEXT:    addl $20, %esp4132; X86-X87-NEXT:    popl %esi4133; X86-X87-NEXT:    popl %edi4134; X86-X87-NEXT:    retl4135;4136; X86-SSE-LABEL: test_signed_i64_f80:4137; X86-SSE:       # %bb.0:4138; X86-SSE-NEXT:    pushl %esi4139; X86-SSE-NEXT:    subl $16, %esp4140; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)4141; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)4142; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax4143; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC004144; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)4145; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)4146; X86-SSE-NEXT:    fld %st(0)4147; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)4148; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)4149; X86-SSE-NEXT:    xorl %ecx, %ecx4150; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}4151; X86-SSE-NEXT:    fxch %st(1)4152; X86-SSE-NEXT:    fucomi %st(1), %st4153; X86-SSE-NEXT:    fstp %st(1)4154; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi4155; X86-SSE-NEXT:    cmovbl %ecx, %esi4156; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x800000004157; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax4158; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}4159; X86-SSE-NEXT:    fxch %st(1)4160; X86-SSE-NEXT:    fucomi %st(1), %st4161; X86-SSE-NEXT:    fstp %st(1)4162; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF4163; X86-SSE-NEXT:    cmovbel %eax, %edx4164; X86-SSE-NEXT:    movl $-1, %eax4165; X86-SSE-NEXT:    cmovbel %esi, %eax4166; X86-SSE-NEXT:    fucompi %st(0), %st4167; X86-SSE-NEXT:    cmovpl %ecx, %eax4168; X86-SSE-NEXT:    cmovpl %ecx, %edx4169; X86-SSE-NEXT:    addl $16, %esp4170; X86-SSE-NEXT:    popl %esi4171; X86-SSE-NEXT:    retl4172;4173; X64-LABEL: test_signed_i64_f80:4174; X64:       # %bb.0:4175; X64-NEXT:    fldt {{[0-9]+}}(%rsp)4176; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)4177; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax4178; X64-NEXT:    orl $3072, %eax # imm = 0xC004179; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)4180; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)4181; X64-NEXT:    fld %st(0)4182; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)4183; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)4184; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4185; X64-NEXT:    fxch %st(1)4186; X64-NEXT:    fucomi %st(1), %st4187; X64-NEXT:    fstp %st(1)4188; X64-NEXT:    jb .LBB37_14189; X64-NEXT:  # %bb.2:4190; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax4191; X64-NEXT:    jmp .LBB37_34192; X64-NEXT:  .LBB37_1:4193; X64-NEXT:    movabsq $-9223372036854775808, %rax # imm = 0x80000000000000004194; X64-NEXT:  .LBB37_3:4195; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4196; X64-NEXT:    fxch %st(1)4197; X64-NEXT:    fucomi %st(1), %st4198; X64-NEXT:    fstp %st(1)4199; X64-NEXT:    movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF4200; X64-NEXT:    cmovbeq %rax, %rcx4201; X64-NEXT:    xorl %eax, %eax4202; X64-NEXT:    fucompi %st(0), %st4203; X64-NEXT:    cmovnpq %rcx, %rax4204; X64-NEXT:    retq4205    %x = call i64 @llvm.fptosi.sat.i64.f80(x86_fp80 %f)4206    ret i64 %x4207}4208 4209define i100 @test_signed_i100_f80(x86_fp80 %f) nounwind {4210; X86-X87-LABEL: test_signed_i100_f80:4211; X86-X87:       # %bb.0:4212; X86-X87-NEXT:    pushl %ebp4213; X86-X87-NEXT:    pushl %ebx4214; X86-X87-NEXT:    pushl %edi4215; X86-X87-NEXT:    pushl %esi4216; X86-X87-NEXT:    subl $60, %esp4217; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)4218; X86-X87-NEXT:    fld %st(0)4219; X86-X87-NEXT:    fstpt {{[0-9]+}}(%esp)4220; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax4221; X86-X87-NEXT:    movl %eax, (%esp)4222; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}4223; X86-X87-NEXT:    fld %st(1)4224; X86-X87-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill4225; X86-X87-NEXT:    fxch %st(1)4226; X86-X87-NEXT:    fucompp4227; X86-X87-NEXT:    fnstsw %ax4228; X86-X87-NEXT:    movl %eax, %ebx4229; X86-X87-NEXT:    calll __fixxfti4230; X86-X87-NEXT:    subl $4, %esp4231; X86-X87-NEXT:    xorl %edx, %edx4232; X86-X87-NEXT:    movb %bh, %ah4233; X86-X87-NEXT:    sahf4234; X86-X87-NEXT:    movl $-8, %ebx4235; X86-X87-NEXT:    jb .LBB38_24236; X86-X87-NEXT:  # %bb.1:4237; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx4238; X86-X87-NEXT:  .LBB38_2:4239; X86-X87-NEXT:    movl $0, %ecx4240; X86-X87-NEXT:    movl $0, %ebp4241; X86-X87-NEXT:    jb .LBB38_44242; X86-X87-NEXT:  # %bb.3:4243; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx4244; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp4245; X86-X87-NEXT:  .LBB38_4:4246; X86-X87-NEXT:    movl $0, %edi4247; X86-X87-NEXT:    jb .LBB38_64248; X86-X87-NEXT:  # %bb.5:4249; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi4250; X86-X87-NEXT:  .LBB38_6:4251; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}4252; X86-X87-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload4253; X86-X87-NEXT:    fucom %st(1)4254; X86-X87-NEXT:    fstp %st(1)4255; X86-X87-NEXT:    fnstsw %ax4256; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax4257; X86-X87-NEXT:    sahf4258; X86-X87-NEXT:    movl $-1, %eax4259; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill4260; X86-X87-NEXT:    movl $-1, %esi4261; X86-X87-NEXT:    ja .LBB38_84262; X86-X87-NEXT:  # %bb.7:4263; X86-X87-NEXT:    movl %edi, %eax4264; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4265; X86-X87-NEXT:    movl %ecx, %esi4266; X86-X87-NEXT:  .LBB38_8:4267; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4268; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx4269; X86-X87-NEXT:    movl $7, %edi4270; X86-X87-NEXT:    ja .LBB38_104271; X86-X87-NEXT:  # %bb.9:4272; X86-X87-NEXT:    movl %ebx, %edi4273; X86-X87-NEXT:  .LBB38_10:4274; X86-X87-NEXT:    fucomp %st(0)4275; X86-X87-NEXT:    fnstsw %ax4276; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax4277; X86-X87-NEXT:    sahf4278; X86-X87-NEXT:    movl $0, %eax4279; X86-X87-NEXT:    movl $0, %ebp4280; X86-X87-NEXT:    movl $0, %ebx4281; X86-X87-NEXT:    jp .LBB38_124282; X86-X87-NEXT:  # %bb.11:4283; X86-X87-NEXT:    movl %edi, %edx4284; X86-X87-NEXT:    movl %esi, %eax4285; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload4286; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload4287; X86-X87-NEXT:  .LBB38_12:4288; X86-X87-NEXT:    movl %ebx, 8(%ecx)4289; X86-X87-NEXT:    movl %ebp, 4(%ecx)4290; X86-X87-NEXT:    movl %eax, (%ecx)4291; X86-X87-NEXT:    andl $15, %edx4292; X86-X87-NEXT:    movb %dl, 12(%ecx)4293; X86-X87-NEXT:    movl %ecx, %eax4294; X86-X87-NEXT:    addl $60, %esp4295; X86-X87-NEXT:    popl %esi4296; X86-X87-NEXT:    popl %edi4297; X86-X87-NEXT:    popl %ebx4298; X86-X87-NEXT:    popl %ebp4299; X86-X87-NEXT:    retl $44300;4301; X86-SSE-LABEL: test_signed_i100_f80:4302; X86-SSE:       # %bb.0:4303; X86-SSE-NEXT:    pushl %ebp4304; X86-SSE-NEXT:    pushl %ebx4305; X86-SSE-NEXT:    pushl %edi4306; X86-SSE-NEXT:    pushl %esi4307; X86-SSE-NEXT:    subl $44, %esp4308; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi4309; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)4310; X86-SSE-NEXT:    fld %st(0)4311; X86-SSE-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill4312; X86-SSE-NEXT:    fstpt {{[0-9]+}}(%esp)4313; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax4314; X86-SSE-NEXT:    movl %eax, (%esp)4315; X86-SSE-NEXT:    calll __fixxfti4316; X86-SSE-NEXT:    subl $4, %esp4317; X86-SSE-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload4318; X86-SSE-NEXT:    xorl %ebp, %ebp4319; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}4320; X86-SSE-NEXT:    fxch %st(1)4321; X86-SSE-NEXT:    fucomi %st(1), %st4322; X86-SSE-NEXT:    fstp %st(1)4323; X86-SSE-NEXT:    movl $-8, %ebx4324; X86-SSE-NEXT:    movl $0, %ecx4325; X86-SSE-NEXT:    movl $0, %edx4326; X86-SSE-NEXT:    movl $0, %edi4327; X86-SSE-NEXT:    jb .LBB38_24328; X86-SSE-NEXT:  # %bb.1:4329; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx4330; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx4331; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx4332; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi4333; X86-SSE-NEXT:  .LBB38_2:4334; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}4335; X86-SSE-NEXT:    fxch %st(1)4336; X86-SSE-NEXT:    fucomi %st(1), %st4337; X86-SSE-NEXT:    fstp %st(1)4338; X86-SSE-NEXT:    movl $-1, %eax4339; X86-SSE-NEXT:    cmoval %eax, %edi4340; X86-SSE-NEXT:    cmoval %eax, %edx4341; X86-SSE-NEXT:    cmoval %eax, %ecx4342; X86-SSE-NEXT:    movl $7, %eax4343; X86-SSE-NEXT:    cmovbel %ebx, %eax4344; X86-SSE-NEXT:    fucompi %st(0), %st4345; X86-SSE-NEXT:    cmovpl %ebp, %eax4346; X86-SSE-NEXT:    cmovpl %ebp, %ecx4347; X86-SSE-NEXT:    cmovpl %ebp, %edx4348; X86-SSE-NEXT:    cmovpl %ebp, %edi4349; X86-SSE-NEXT:    movl %edi, 8(%esi)4350; X86-SSE-NEXT:    movl %edx, 4(%esi)4351; X86-SSE-NEXT:    movl %ecx, (%esi)4352; X86-SSE-NEXT:    andl $15, %eax4353; X86-SSE-NEXT:    movb %al, 12(%esi)4354; X86-SSE-NEXT:    movl %esi, %eax4355; X86-SSE-NEXT:    addl $44, %esp4356; X86-SSE-NEXT:    popl %esi4357; X86-SSE-NEXT:    popl %edi4358; X86-SSE-NEXT:    popl %ebx4359; X86-SSE-NEXT:    popl %ebp4360; X86-SSE-NEXT:    retl $44361;4362; X64-LABEL: test_signed_i100_f80:4363; X64:       # %bb.0:4364; X64-NEXT:    subq $40, %rsp4365; X64-NEXT:    fldt {{[0-9]+}}(%rsp)4366; X64-NEXT:    fld %st(0)4367; X64-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill4368; X64-NEXT:    fstpt (%rsp)4369; X64-NEXT:    callq __fixxfti@PLT4370; X64-NEXT:    xorl %ecx, %ecx4371; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4372; X64-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload4373; X64-NEXT:    fucomi %st(1), %st4374; X64-NEXT:    fstp %st(1)4375; X64-NEXT:    cmovbq %rcx, %rax4376; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF8000000004377; X64-NEXT:    cmovbq %rsi, %rdx4378; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4379; X64-NEXT:    fxch %st(1)4380; X64-NEXT:    fucomi %st(1), %st4381; X64-NEXT:    fstp %st(1)4382; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF4383; X64-NEXT:    cmovaq %rsi, %rdx4384; X64-NEXT:    movq $-1, %rsi4385; X64-NEXT:    cmovaq %rsi, %rax4386; X64-NEXT:    fucompi %st(0), %st4387; X64-NEXT:    cmovpq %rcx, %rax4388; X64-NEXT:    cmovpq %rcx, %rdx4389; X64-NEXT:    addq $40, %rsp4390; X64-NEXT:    retq4391    %x = call i100 @llvm.fptosi.sat.i100.f80(x86_fp80 %f)4392    ret i100 %x4393}4394 4395define i128 @test_signed_i128_f80(x86_fp80 %f) nounwind {4396; X86-X87-LABEL: test_signed_i128_f80:4397; X86-X87:       # %bb.0:4398; X86-X87-NEXT:    pushl %ebp4399; X86-X87-NEXT:    pushl %ebx4400; X86-X87-NEXT:    pushl %edi4401; X86-X87-NEXT:    pushl %esi4402; X86-X87-NEXT:    subl $60, %esp4403; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)4404; X86-X87-NEXT:    fld %st(0)4405; X86-X87-NEXT:    fstpt {{[0-9]+}}(%esp)4406; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax4407; X86-X87-NEXT:    movl %eax, (%esp)4408; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}4409; X86-X87-NEXT:    fld %st(1)4410; X86-X87-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill4411; X86-X87-NEXT:    fxch %st(1)4412; X86-X87-NEXT:    fucompp4413; X86-X87-NEXT:    fnstsw %ax4414; X86-X87-NEXT:    movl %eax, %ebx4415; X86-X87-NEXT:    calll __fixxfti4416; X86-X87-NEXT:    subl $4, %esp4417; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill4418; X86-X87-NEXT:    movb %bh, %ah4419; X86-X87-NEXT:    sahf4420; X86-X87-NEXT:    movl $0, %eax4421; X86-X87-NEXT:    movl $0, %ebx4422; X86-X87-NEXT:    jae .LBB39_14423; X86-X87-NEXT:  # %bb.2:4424; X86-X87-NEXT:    movl $0, %edx4425; X86-X87-NEXT:    jae .LBB39_34426; X86-X87-NEXT:  .LBB39_4:4427; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x800000004428; X86-X87-NEXT:    jb .LBB39_64429; X86-X87-NEXT:  .LBB39_5:4430; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx4431; X86-X87-NEXT:  .LBB39_6:4432; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4433; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}4434; X86-X87-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload4435; X86-X87-NEXT:    fucom %st(1)4436; X86-X87-NEXT:    fstp %st(1)4437; X86-X87-NEXT:    fnstsw %ax4438; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax4439; X86-X87-NEXT:    sahf4440; X86-X87-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF4441; X86-X87-NEXT:    ja .LBB39_84442; X86-X87-NEXT:  # %bb.7:4443; X86-X87-NEXT:    movl %ecx, %eax4444; X86-X87-NEXT:  .LBB39_8:4445; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4446; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx4447; X86-X87-NEXT:    movl $-1, %ebp4448; X86-X87-NEXT:    movl $-1, %edi4449; X86-X87-NEXT:    movl $-1, %esi4450; X86-X87-NEXT:    ja .LBB39_104451; X86-X87-NEXT:  # %bb.9:4452; X86-X87-NEXT:    movl %edx, %ebp4453; X86-X87-NEXT:    movl %ebx, %edi4454; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload4455; X86-X87-NEXT:  .LBB39_10:4456; X86-X87-NEXT:    fucomp %st(0)4457; X86-X87-NEXT:    fnstsw %ax4458; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax4459; X86-X87-NEXT:    sahf4460; X86-X87-NEXT:    movl $0, %eax4461; X86-X87-NEXT:    movl $0, %edx4462; X86-X87-NEXT:    movl $0, %ebx4463; X86-X87-NEXT:    jp .LBB39_124464; X86-X87-NEXT:  # %bb.11:4465; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4466; X86-X87-NEXT:    movl %edi, %eax4467; X86-X87-NEXT:    movl %ebp, %edx4468; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload4469; X86-X87-NEXT:  .LBB39_12:4470; X86-X87-NEXT:    movl %ebx, 12(%ecx)4471; X86-X87-NEXT:    movl %edx, 8(%ecx)4472; X86-X87-NEXT:    movl %eax, 4(%ecx)4473; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4474; X86-X87-NEXT:    movl %eax, (%ecx)4475; X86-X87-NEXT:    movl %ecx, %eax4476; X86-X87-NEXT:    addl $60, %esp4477; X86-X87-NEXT:    popl %esi4478; X86-X87-NEXT:    popl %edi4479; X86-X87-NEXT:    popl %ebx4480; X86-X87-NEXT:    popl %ebp4481; X86-X87-NEXT:    retl $44482; X86-X87-NEXT:  .LBB39_1:4483; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax4484; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx4485; X86-X87-NEXT:    movl $0, %edx4486; X86-X87-NEXT:    jb .LBB39_44487; X86-X87-NEXT:  .LBB39_3:4488; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx4489; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x800000004490; X86-X87-NEXT:    jae .LBB39_54491; X86-X87-NEXT:    jmp .LBB39_64492;4493; X86-SSE-LABEL: test_signed_i128_f80:4494; X86-SSE:       # %bb.0:4495; X86-SSE-NEXT:    pushl %ebp4496; X86-SSE-NEXT:    pushl %ebx4497; X86-SSE-NEXT:    pushl %edi4498; X86-SSE-NEXT:    pushl %esi4499; X86-SSE-NEXT:    subl $44, %esp4500; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi4501; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)4502; X86-SSE-NEXT:    fld %st(0)4503; X86-SSE-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill4504; X86-SSE-NEXT:    fstpt {{[0-9]+}}(%esp)4505; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax4506; X86-SSE-NEXT:    movl %eax, (%esp)4507; X86-SSE-NEXT:    calll __fixxfti4508; X86-SSE-NEXT:    subl $4, %esp4509; X86-SSE-NEXT:    xorl %ecx, %ecx4510; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}4511; X86-SSE-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload4512; X86-SSE-NEXT:    fucomi %st(1), %st4513; X86-SSE-NEXT:    fstp %st(1)4514; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax4515; X86-SSE-NEXT:    cmovbl %ecx, %eax4516; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx4517; X86-SSE-NEXT:    cmovbl %ecx, %edx4518; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi4519; X86-SSE-NEXT:    cmovbl %ecx, %edi4520; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x800000004521; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp4522; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}4523; X86-SSE-NEXT:    fxch %st(1)4524; X86-SSE-NEXT:    fucomi %st(1), %st4525; X86-SSE-NEXT:    fstp %st(1)4526; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF4527; X86-SSE-NEXT:    cmovbel %ebp, %ebx4528; X86-SSE-NEXT:    movl $-1, %ebp4529; X86-SSE-NEXT:    cmoval %ebp, %edi4530; X86-SSE-NEXT:    cmoval %ebp, %edx4531; X86-SSE-NEXT:    cmoval %ebp, %eax4532; X86-SSE-NEXT:    fucompi %st(0), %st4533; X86-SSE-NEXT:    cmovpl %ecx, %eax4534; X86-SSE-NEXT:    cmovpl %ecx, %edx4535; X86-SSE-NEXT:    cmovpl %ecx, %edi4536; X86-SSE-NEXT:    cmovpl %ecx, %ebx4537; X86-SSE-NEXT:    movl %ebx, 12(%esi)4538; X86-SSE-NEXT:    movl %edi, 8(%esi)4539; X86-SSE-NEXT:    movl %edx, 4(%esi)4540; X86-SSE-NEXT:    movl %eax, (%esi)4541; X86-SSE-NEXT:    movl %esi, %eax4542; X86-SSE-NEXT:    addl $44, %esp4543; X86-SSE-NEXT:    popl %esi4544; X86-SSE-NEXT:    popl %edi4545; X86-SSE-NEXT:    popl %ebx4546; X86-SSE-NEXT:    popl %ebp4547; X86-SSE-NEXT:    retl $44548;4549; X64-LABEL: test_signed_i128_f80:4550; X64:       # %bb.0:4551; X64-NEXT:    subq $40, %rsp4552; X64-NEXT:    fldt {{[0-9]+}}(%rsp)4553; X64-NEXT:    fld %st(0)4554; X64-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill4555; X64-NEXT:    fstpt (%rsp)4556; X64-NEXT:    callq __fixxfti@PLT4557; X64-NEXT:    xorl %ecx, %ecx4558; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4559; X64-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload4560; X64-NEXT:    fucomi %st(1), %st4561; X64-NEXT:    fstp %st(1)4562; X64-NEXT:    cmovbq %rcx, %rax4563; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x80000000000000004564; X64-NEXT:    cmovbq %rsi, %rdx4565; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4566; X64-NEXT:    fxch %st(1)4567; X64-NEXT:    fucomi %st(1), %st4568; X64-NEXT:    fstp %st(1)4569; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4570; X64-NEXT:    cmovaq %rsi, %rdx4571; X64-NEXT:    movq $-1, %rsi4572; X64-NEXT:    cmovaq %rsi, %rax4573; X64-NEXT:    fucompi %st(0), %st4574; X64-NEXT:    cmovpq %rcx, %rax4575; X64-NEXT:    cmovpq %rcx, %rdx4576; X64-NEXT:    addq $40, %rsp4577; X64-NEXT:    retq4578    %x = call i128 @llvm.fptosi.sat.i128.f80(x86_fp80 %f)4579    ret i128 %x4580}4581