brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.5 KiB · 49e3314 Raw
496 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; NOTE: Fast Isel is not added because it does not support x87 stores.3 4; RUN: llc < %s -mtriple=x86_64-- -mattr=+x87,-sse,-sse2 -global-isel=0 | FileCheck %s --check-prefixes X64,SDAG-X645; RUN: llc < %s -mtriple=x86_64-- -mattr=+x87,-sse,-sse2 -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes X64,GISEL-X646; RUN: llc < %s -mtriple=i686-- -mattr=+x87,-sse,-sse2 -global-isel=0 | FileCheck %s --check-prefixes X86,SDAG-X867; TODO: The last RUN line fails GISEL for f64/double cases and will fallback to DAG due to lack of support for8; loads/stores in X86 mode, support is expected soon enough, for this reason the isel-fp64-to-sint-x86.mir test is added.9; RUN: llc < %s -mtriple=i686-- -mattr=+x87,-sse,-sse2 -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes X86,GISEL-X8610 11define i8 @test_float_to_int8(float %input) nounwind {12; SDAG-X64-LABEL: test_float_to_int8:13; SDAG-X64:       # %bb.0: # %entry14; SDAG-X64-NEXT:    flds {{[0-9]+}}(%rsp)15; SDAG-X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)16; SDAG-X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax17; SDAG-X64-NEXT:    orl $3072, %eax # imm = 0xC0018; SDAG-X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)19; SDAG-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)20; SDAG-X64-NEXT:    fistps -{{[0-9]+}}(%rsp)21; SDAG-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)22; SDAG-X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax23; SDAG-X64-NEXT:    retq24;25; GISEL-X64-LABEL: test_float_to_int8:26; GISEL-X64:       # %bb.0: # %entry27; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)28; GISEL-X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)29; GISEL-X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax30; GISEL-X64-NEXT:    orl $3072, %eax # imm = 0xC0031; GISEL-X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)32; GISEL-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)33; GISEL-X64-NEXT:    fistps -{{[0-9]+}}(%rsp)34; GISEL-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)35; GISEL-X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax36; GISEL-X64-NEXT:    # kill: def $al killed $al killed $ax37; GISEL-X64-NEXT:    retq38;39; SDAG-X86-LABEL: test_float_to_int8:40; SDAG-X86:       # %bb.0: # %entry41; SDAG-X86-NEXT:    subl $8, %esp42; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)43; SDAG-X86-NEXT:    fnstcw {{[0-9]+}}(%esp)44; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax45; SDAG-X86-NEXT:    orl $3072, %eax # imm = 0xC0046; SDAG-X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)47; SDAG-X86-NEXT:    fldcw {{[0-9]+}}(%esp)48; SDAG-X86-NEXT:    fistps {{[0-9]+}}(%esp)49; SDAG-X86-NEXT:    fldcw {{[0-9]+}}(%esp)50; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax51; SDAG-X86-NEXT:    addl $8, %esp52; SDAG-X86-NEXT:    retl53;54; GISEL-X86-LABEL: test_float_to_int8:55; GISEL-X86:       # %bb.0: # %entry56; GISEL-X86-NEXT:    subl $8, %esp57; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)58; GISEL-X86-NEXT:    fnstcw {{[0-9]+}}(%esp)59; GISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax60; GISEL-X86-NEXT:    orl $3072, %eax # imm = 0xC0061; GISEL-X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)62; GISEL-X86-NEXT:    fldcw {{[0-9]+}}(%esp)63; GISEL-X86-NEXT:    fistps {{[0-9]+}}(%esp)64; GISEL-X86-NEXT:    fldcw {{[0-9]+}}(%esp)65; GISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax66; GISEL-X86-NEXT:    # kill: def $al killed $al killed $ax67; GISEL-X86-NEXT:    addl $8, %esp68; GISEL-X86-NEXT:    retl69entry:70    %conv = fptosi float %input to i871    ret i8 %conv72}73 74define i8 @test_longdouble_to_int8(x86_fp80 %input) nounwind {75; SDAG-X64-LABEL: test_longdouble_to_int8:76; SDAG-X64:       # %bb.0: # %entry77; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)78; SDAG-X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)79; SDAG-X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax80; SDAG-X64-NEXT:    orl $3072, %eax # imm = 0xC0081; SDAG-X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)82; SDAG-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)83; SDAG-X64-NEXT:    fistps -{{[0-9]+}}(%rsp)84; SDAG-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)85; SDAG-X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax86; SDAG-X64-NEXT:    retq87;88; GISEL-X64-LABEL: test_longdouble_to_int8:89; GISEL-X64:       # %bb.0: # %entry90; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)91; GISEL-X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)92; GISEL-X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax93; GISEL-X64-NEXT:    orl $3072, %eax # imm = 0xC0094; GISEL-X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)95; GISEL-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)96; GISEL-X64-NEXT:    fistps -{{[0-9]+}}(%rsp)97; GISEL-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)98; GISEL-X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax99; GISEL-X64-NEXT:    # kill: def $al killed $al killed $ax100; GISEL-X64-NEXT:    retq101;102; SDAG-X86-LABEL: test_longdouble_to_int8:103; SDAG-X86:       # %bb.0: # %entry104; SDAG-X86-NEXT:    subl $8, %esp105; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)106; SDAG-X86-NEXT:    fnstcw {{[0-9]+}}(%esp)107; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax108; SDAG-X86-NEXT:    orl $3072, %eax # imm = 0xC00109; SDAG-X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)110; SDAG-X86-NEXT:    fldcw {{[0-9]+}}(%esp)111; SDAG-X86-NEXT:    fistps {{[0-9]+}}(%esp)112; SDAG-X86-NEXT:    fldcw {{[0-9]+}}(%esp)113; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax114; SDAG-X86-NEXT:    addl $8, %esp115; SDAG-X86-NEXT:    retl116;117; GISEL-X86-LABEL: test_longdouble_to_int8:118; GISEL-X86:       # %bb.0: # %entry119; GISEL-X86-NEXT:    subl $8, %esp120; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)121; GISEL-X86-NEXT:    fnstcw {{[0-9]+}}(%esp)122; GISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax123; GISEL-X86-NEXT:    orl $3072, %eax # imm = 0xC00124; GISEL-X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)125; GISEL-X86-NEXT:    fldcw {{[0-9]+}}(%esp)126; GISEL-X86-NEXT:    fistps {{[0-9]+}}(%esp)127; GISEL-X86-NEXT:    fldcw {{[0-9]+}}(%esp)128; GISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax129; GISEL-X86-NEXT:    # kill: def $al killed $al killed $ax130; GISEL-X86-NEXT:    addl $8, %esp131; GISEL-X86-NEXT:    retl132entry:133    %conv = fptosi x86_fp80 %input to i8134    ret i8 %conv135}136 137define i16 @test_float_to_int16(float %input) nounwind {138; X64-LABEL: test_float_to_int16:139; X64:       # %bb.0: # %entry140; X64-NEXT:    flds {{[0-9]+}}(%rsp)141; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)142; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax143; X64-NEXT:    orl $3072, %eax # imm = 0xC00144; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)145; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)146; X64-NEXT:    fistps -{{[0-9]+}}(%rsp)147; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)148; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax149; X64-NEXT:    retq150;151; X86-LABEL: test_float_to_int16:152; X86:       # %bb.0: # %entry153; X86-NEXT:    subl $8, %esp154; X86-NEXT:    flds {{[0-9]+}}(%esp)155; X86-NEXT:    fnstcw {{[0-9]+}}(%esp)156; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax157; X86-NEXT:    orl $3072, %eax # imm = 0xC00158; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)159; X86-NEXT:    fldcw {{[0-9]+}}(%esp)160; X86-NEXT:    fistps {{[0-9]+}}(%esp)161; X86-NEXT:    fldcw {{[0-9]+}}(%esp)162; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax163; X86-NEXT:    addl $8, %esp164; X86-NEXT:    retl165entry:166    %conv = fptosi float %input to i16167    ret i16 %conv168}169 170define i16 @test_longdouble_to_int16(x86_fp80 %input) nounwind {171; X64-LABEL: test_longdouble_to_int16:172; X64:       # %bb.0: # %entry173; X64-NEXT:    fldt {{[0-9]+}}(%rsp)174; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)175; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax176; X64-NEXT:    orl $3072, %eax # imm = 0xC00177; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)178; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)179; X64-NEXT:    fistps -{{[0-9]+}}(%rsp)180; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)181; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax182; X64-NEXT:    retq183;184; X86-LABEL: test_longdouble_to_int16:185; X86:       # %bb.0: # %entry186; X86-NEXT:    subl $8, %esp187; X86-NEXT:    fldt {{[0-9]+}}(%esp)188; X86-NEXT:    fnstcw {{[0-9]+}}(%esp)189; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax190; X86-NEXT:    orl $3072, %eax # imm = 0xC00191; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)192; X86-NEXT:    fldcw {{[0-9]+}}(%esp)193; X86-NEXT:    fistps {{[0-9]+}}(%esp)194; X86-NEXT:    fldcw {{[0-9]+}}(%esp)195; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax196; X86-NEXT:    addl $8, %esp197; X86-NEXT:    retl198entry:199    %conv = fptosi x86_fp80 %input to i16200    ret i16 %conv201}202 203define i32 @test_float_to_int32(float %input) nounwind {204; X64-LABEL: test_float_to_int32:205; X64:       # %bb.0: # %entry206; X64-NEXT:    flds {{[0-9]+}}(%rsp)207; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)208; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax209; X64-NEXT:    orl $3072, %eax # imm = 0xC00210; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)211; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)212; X64-NEXT:    fistpl -{{[0-9]+}}(%rsp)213; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)214; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax215; X64-NEXT:    retq216;217; X86-LABEL: test_float_to_int32:218; X86:       # %bb.0: # %entry219; X86-NEXT:    subl $8, %esp220; X86-NEXT:    flds {{[0-9]+}}(%esp)221; X86-NEXT:    fnstcw (%esp)222; X86-NEXT:    movzwl (%esp), %eax223; X86-NEXT:    orl $3072, %eax # imm = 0xC00224; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)225; X86-NEXT:    fldcw {{[0-9]+}}(%esp)226; X86-NEXT:    fistpl {{[0-9]+}}(%esp)227; X86-NEXT:    fldcw (%esp)228; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax229; X86-NEXT:    addl $8, %esp230; X86-NEXT:    retl231entry:232    %conv = fptosi float %input to i32233    ret i32 %conv234}235 236define i32 @test_longdouble_to_int32(x86_fp80 %input) nounwind {237; X64-LABEL: test_longdouble_to_int32:238; X64:       # %bb.0: # %entry239; X64-NEXT:    fldt {{[0-9]+}}(%rsp)240; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)241; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax242; X64-NEXT:    orl $3072, %eax # imm = 0xC00243; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)244; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)245; X64-NEXT:    fistpl -{{[0-9]+}}(%rsp)246; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)247; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax248; X64-NEXT:    retq249;250; X86-LABEL: test_longdouble_to_int32:251; X86:       # %bb.0: # %entry252; X86-NEXT:    subl $8, %esp253; X86-NEXT:    fldt {{[0-9]+}}(%esp)254; X86-NEXT:    fnstcw (%esp)255; X86-NEXT:    movzwl (%esp), %eax256; X86-NEXT:    orl $3072, %eax # imm = 0xC00257; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)258; X86-NEXT:    fldcw {{[0-9]+}}(%esp)259; X86-NEXT:    fistpl {{[0-9]+}}(%esp)260; X86-NEXT:    fldcw (%esp)261; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax262; X86-NEXT:    addl $8, %esp263; X86-NEXT:    retl264entry:265    %conv = fptosi x86_fp80 %input to i32266    ret i32 %conv267}268 269define i64 @test_float_to_int64(float %input) nounwind {270; X64-LABEL: test_float_to_int64:271; X64:       # %bb.0: # %entry272; X64-NEXT:    flds {{[0-9]+}}(%rsp)273; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)274; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax275; X64-NEXT:    orl $3072, %eax # imm = 0xC00276; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)277; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)278; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)279; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)280; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax281; X64-NEXT:    retq282;283; X86-LABEL: test_float_to_int64:284; X86:       # %bb.0: # %entry285; X86-NEXT:    pushl %ebp286; X86-NEXT:    movl %esp, %ebp287; X86-NEXT:    andl $-8, %esp288; X86-NEXT:    subl $16, %esp289; X86-NEXT:    flds 8(%ebp)290; X86-NEXT:    fnstcw {{[0-9]+}}(%esp)291; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax292; X86-NEXT:    orl $3072, %eax # imm = 0xC00293; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)294; X86-NEXT:    fldcw {{[0-9]+}}(%esp)295; X86-NEXT:    fistpll {{[0-9]+}}(%esp)296; X86-NEXT:    fldcw {{[0-9]+}}(%esp)297; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax298; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx299; X86-NEXT:    movl %ebp, %esp300; X86-NEXT:    popl %ebp301; X86-NEXT:    retl302entry:303    %conv = fptosi float %input to i64304    ret i64 %conv305}306 307define i64 @test_longdouble_to_int64(x86_fp80 %input) nounwind {308; X64-LABEL: test_longdouble_to_int64:309; X64:       # %bb.0: # %entry310; X64-NEXT:    fldt {{[0-9]+}}(%rsp)311; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)312; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax313; X64-NEXT:    orl $3072, %eax # imm = 0xC00314; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)315; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)316; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)317; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)318; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax319; X64-NEXT:    retq320;321; X86-LABEL: test_longdouble_to_int64:322; X86:       # %bb.0: # %entry323; X86-NEXT:    pushl %ebp324; X86-NEXT:    movl %esp, %ebp325; X86-NEXT:    andl $-8, %esp326; X86-NEXT:    subl $16, %esp327; X86-NEXT:    fldt 8(%ebp)328; X86-NEXT:    fnstcw {{[0-9]+}}(%esp)329; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax330; X86-NEXT:    orl $3072, %eax # imm = 0xC00331; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)332; X86-NEXT:    fldcw {{[0-9]+}}(%esp)333; X86-NEXT:    fistpll {{[0-9]+}}(%esp)334; X86-NEXT:    fldcw {{[0-9]+}}(%esp)335; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax336; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx337; X86-NEXT:    movl %ebp, %esp338; X86-NEXT:    popl %ebp339; X86-NEXT:    retl340entry:341    %conv = fptosi x86_fp80 %input to i64342    ret i64 %conv343}344 345define i8 @test_double_to_int8(double %input) nounwind {346; SDAG-X64-LABEL: test_double_to_int8:347; SDAG-X64:       # %bb.0: # %entry348; SDAG-X64-NEXT:    fldl {{[0-9]+}}(%rsp)349; SDAG-X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)350; SDAG-X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax351; SDAG-X64-NEXT:    orl $3072, %eax # imm = 0xC00352; SDAG-X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)353; SDAG-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)354; SDAG-X64-NEXT:    fistps -{{[0-9]+}}(%rsp)355; SDAG-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)356; SDAG-X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax357; SDAG-X64-NEXT:    retq358;359; GISEL-X64-LABEL: test_double_to_int8:360; GISEL-X64:       # %bb.0: # %entry361; GISEL-X64-NEXT:    fldl {{[0-9]+}}(%rsp)362; GISEL-X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)363; GISEL-X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax364; GISEL-X64-NEXT:    orl $3072, %eax # imm = 0xC00365; GISEL-X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)366; GISEL-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)367; GISEL-X64-NEXT:    fistps -{{[0-9]+}}(%rsp)368; GISEL-X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)369; GISEL-X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax370; GISEL-X64-NEXT:    # kill: def $al killed $al killed $ax371; GISEL-X64-NEXT:    retq372;373; X86-LABEL: test_double_to_int8:374; X86:       # %bb.0: # %entry375; X86-NEXT:    subl $8, %esp376; X86-NEXT:    fldl {{[0-9]+}}(%esp)377; X86-NEXT:    fnstcw {{[0-9]+}}(%esp)378; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax379; X86-NEXT:    orl $3072, %eax # imm = 0xC00380; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)381; X86-NEXT:    fldcw {{[0-9]+}}(%esp)382; X86-NEXT:    fistps {{[0-9]+}}(%esp)383; X86-NEXT:    fldcw {{[0-9]+}}(%esp)384; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax385; X86-NEXT:    addl $8, %esp386; X86-NEXT:    retl387entry:388    %conv = fptosi double %input to i8389    ret i8 %conv390}391 392define i16 @test_double_to_int16(double %input) nounwind {393; X64-LABEL: test_double_to_int16:394; X64:       # %bb.0: # %entry395; X64-NEXT:    fldl {{[0-9]+}}(%rsp)396; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)397; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax398; X64-NEXT:    orl $3072, %eax # imm = 0xC00399; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)400; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)401; X64-NEXT:    fistps -{{[0-9]+}}(%rsp)402; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)403; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax404; X64-NEXT:    retq405;406; X86-LABEL: test_double_to_int16:407; X86:       # %bb.0: # %entry408; X86-NEXT:    subl $8, %esp409; X86-NEXT:    fldl {{[0-9]+}}(%esp)410; X86-NEXT:    fnstcw {{[0-9]+}}(%esp)411; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax412; X86-NEXT:    orl $3072, %eax # imm = 0xC00413; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)414; X86-NEXT:    fldcw {{[0-9]+}}(%esp)415; X86-NEXT:    fistps {{[0-9]+}}(%esp)416; X86-NEXT:    fldcw {{[0-9]+}}(%esp)417; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax418; X86-NEXT:    addl $8, %esp419; X86-NEXT:    retl420entry:421    %conv = fptosi double %input to i16422    ret i16 %conv423}424 425define i32 @test_double_to_int32(double %input) nounwind {426; X64-LABEL: test_double_to_int32:427; X64:       # %bb.0: # %entry428; X64-NEXT:    fldl {{[0-9]+}}(%rsp)429; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)430; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax431; X64-NEXT:    orl $3072, %eax # imm = 0xC00432; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)433; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)434; X64-NEXT:    fistpl -{{[0-9]+}}(%rsp)435; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)436; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax437; X64-NEXT:    retq438;439; X86-LABEL: test_double_to_int32:440; X86:       # %bb.0: # %entry441; X86-NEXT:    subl $8, %esp442; X86-NEXT:    fldl {{[0-9]+}}(%esp)443; X86-NEXT:    fnstcw (%esp)444; X86-NEXT:    movzwl (%esp), %eax445; X86-NEXT:    orl $3072, %eax # imm = 0xC00446; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)447; X86-NEXT:    fldcw {{[0-9]+}}(%esp)448; X86-NEXT:    fistpl {{[0-9]+}}(%esp)449; X86-NEXT:    fldcw (%esp)450; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax451; X86-NEXT:    addl $8, %esp452; X86-NEXT:    retl453entry:454    %conv = fptosi double %input to i32455    ret i32 %conv456}457 458define i64 @test_double_to_int64(double %input) nounwind {459; X64-LABEL: test_double_to_int64:460; X64:       # %bb.0: # %entry461; X64-NEXT:    fldl {{[0-9]+}}(%rsp)462; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)463; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax464; X64-NEXT:    orl $3072, %eax # imm = 0xC00465; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)466; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)467; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)468; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)469; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax470; X64-NEXT:    retq471;472; X86-LABEL: test_double_to_int64:473; X86:       # %bb.0: # %entry474; X86-NEXT:    pushl %ebp475; X86-NEXT:    movl %esp, %ebp476; X86-NEXT:    andl $-8, %esp477; X86-NEXT:    subl $16, %esp478; X86-NEXT:    fldl 8(%ebp)479; X86-NEXT:    fnstcw {{[0-9]+}}(%esp)480; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax481; X86-NEXT:    orl $3072, %eax # imm = 0xC00482; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)483; X86-NEXT:    fldcw {{[0-9]+}}(%esp)484; X86-NEXT:    fistpll {{[0-9]+}}(%esp)485; X86-NEXT:    fldcw {{[0-9]+}}(%esp)486; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax487; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx488; X86-NEXT:    movl %ebp, %esp489; X86-NEXT:    popl %ebp490; X86-NEXT:    retl491entry:492    %conv = fptosi double %input to i64493    ret i64 %conv494}495 496