brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.1 KiB · bb5640a Raw
1090 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-linux-android -mattr=+sse | FileCheck %s --check-prefixes=X64,X64-SSE3; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=+sse | FileCheck %s --check-prefixes=X64,X64-SSE4; RUN: llc < %s -mtriple=x86_64-linux-android -mattr=+avx | FileCheck %s --check-prefixes=X64,X64-AVX5; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=+avx | FileCheck %s --check-prefixes=X64,X64-AVX6; RUN: llc < %s -mtriple=x86_64-linux-android -mattr=+avx512fp16 | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX5127; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=+avx512fp16 | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX5128; RUN: llc < %s -mtriple=i686-linux-gnu -mattr=-sse | FileCheck %s --check-prefixes=X869 10; Check soft floating point conversion function calls.11 12@vf16 = common dso_local global half 0.000000e+00, align 213@vf32 = common dso_local global float 0.000000e+00, align 414@vf64 = common dso_local global double 0.000000e+00, align 815@vf80 = common dso_local global x86_fp80 0xK00000000000000000000, align 816@vf128 = common dso_local global fp128 0xL00000000000000000000000000000000, align 1617 18define dso_local void @TestFPExtF16_F128() nounwind strictfp {19; X64-SSE-LABEL: TestFPExtF16_F128:20; X64-SSE:       # %bb.0: # %entry21; X64-SSE-NEXT:    pushq %rax22; X64-SSE-NEXT:    pinsrw $0, vf16(%rip), %xmm023; X64-SSE-NEXT:    callq __extendhftf2@PLT24; X64-SSE-NEXT:    movdqa %xmm0, vf128(%rip)25; X64-SSE-NEXT:    popq %rax26; X64-SSE-NEXT:    retq27;28; X64-AVX512-LABEL: TestFPExtF16_F128:29; X64-AVX512:       # %bb.0: # %entry30; X64-AVX512-NEXT:    pushq %rax31; X64-AVX512-NEXT:    vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero32; X64-AVX512-NEXT:    callq __extendhftf2@PLT33; X64-AVX512-NEXT:    vmovaps %xmm0, vf128(%rip)34; X64-AVX512-NEXT:    popq %rax35; X64-AVX512-NEXT:    retq36;37; X86-LABEL: TestFPExtF16_F128:38; X86:       # %bb.0: # %entry39; X86-NEXT:    pushl %esi40; X86-NEXT:    subl $40, %esp41; X86-NEXT:    movzwl vf16, %eax42; X86-NEXT:    movl %eax, (%esp)43; X86-NEXT:    calll __extendhfsf244; X86-NEXT:    fstps {{[0-9]+}}(%esp)45; X86-NEXT:    wait46; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax47; X86-NEXT:    movl %eax, (%esp)48; X86-NEXT:    calll __extendsftf249; X86-NEXT:    subl $4, %esp50; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax51; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx52; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx53; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi54; X86-NEXT:    movl %esi, vf128+1255; X86-NEXT:    movl %edx, vf128+856; X86-NEXT:    movl %ecx, vf128+457; X86-NEXT:    movl %eax, vf12858; X86-NEXT:    addl $40, %esp59; X86-NEXT:    popl %esi60; X86-NEXT:    retl61entry:62  %0 = load half, ptr @vf16, align 263  %conv = call fp128 @llvm.experimental.constrained.fpext.f128.f16(half %0, metadata !"fpexcept.strict") #064  store fp128 %conv, ptr @vf128, align 1665  ret void66}67 68define dso_local void @TestFPExtF32_F128() nounwind strictfp {69; X64-SSE-LABEL: TestFPExtF32_F128:70; X64-SSE:       # %bb.0: # %entry71; X64-SSE-NEXT:    pushq %rax72; X64-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero73; X64-SSE-NEXT:    callq __extendsftf2@PLT74; X64-SSE-NEXT:    movaps %xmm0, vf128(%rip)75; X64-SSE-NEXT:    popq %rax76; X64-SSE-NEXT:    retq77;78; X64-AVX-LABEL: TestFPExtF32_F128:79; X64-AVX:       # %bb.0: # %entry80; X64-AVX-NEXT:    pushq %rax81; X64-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero82; X64-AVX-NEXT:    callq __extendsftf2@PLT83; X64-AVX-NEXT:    vmovaps %xmm0, vf128(%rip)84; X64-AVX-NEXT:    popq %rax85; X64-AVX-NEXT:    retq86;87; X86-LABEL: TestFPExtF32_F128:88; X86:       # %bb.0: # %entry89; X86-NEXT:    pushl %esi90; X86-NEXT:    subl $40, %esp91; X86-NEXT:    flds vf3292; X86-NEXT:    fstps {{[0-9]+}}(%esp)93; X86-NEXT:    wait94; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax95; X86-NEXT:    movl %eax, (%esp)96; X86-NEXT:    calll __extendsftf297; X86-NEXT:    subl $4, %esp98; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax99; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx100; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx101; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi102; X86-NEXT:    movl %esi, vf128+12103; X86-NEXT:    movl %edx, vf128+8104; X86-NEXT:    movl %ecx, vf128+4105; X86-NEXT:    movl %eax, vf128106; X86-NEXT:    addl $40, %esp107; X86-NEXT:    popl %esi108; X86-NEXT:    retl109entry:110  %0 = load float, ptr @vf32, align 4111  %conv = call fp128 @llvm.experimental.constrained.fpext.f128.f32(float %0, metadata !"fpexcept.strict") #0112  store fp128 %conv, ptr @vf128, align 16113  ret void114}115 116define dso_local void @TestFPExtF64_F128() nounwind strictfp {117; X64-SSE-LABEL: TestFPExtF64_F128:118; X64-SSE:       # %bb.0: # %entry119; X64-SSE-NEXT:    pushq %rax120; X64-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero121; X64-SSE-NEXT:    callq __extenddftf2@PLT122; X64-SSE-NEXT:    movaps %xmm0, vf128(%rip)123; X64-SSE-NEXT:    popq %rax124; X64-SSE-NEXT:    retq125;126; X64-AVX-LABEL: TestFPExtF64_F128:127; X64-AVX:       # %bb.0: # %entry128; X64-AVX-NEXT:    pushq %rax129; X64-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero130; X64-AVX-NEXT:    callq __extenddftf2@PLT131; X64-AVX-NEXT:    vmovaps %xmm0, vf128(%rip)132; X64-AVX-NEXT:    popq %rax133; X64-AVX-NEXT:    retq134;135; X86-LABEL: TestFPExtF64_F128:136; X86:       # %bb.0: # %entry137; X86-NEXT:    pushl %esi138; X86-NEXT:    subl $40, %esp139; X86-NEXT:    fldl vf64140; X86-NEXT:    fstpl {{[0-9]+}}(%esp)141; X86-NEXT:    wait142; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax143; X86-NEXT:    movl %eax, (%esp)144; X86-NEXT:    calll __extenddftf2145; X86-NEXT:    subl $4, %esp146; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax147; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx148; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx149; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi150; X86-NEXT:    movl %esi, vf128+12151; X86-NEXT:    movl %edx, vf128+8152; X86-NEXT:    movl %ecx, vf128+4153; X86-NEXT:    movl %eax, vf128154; X86-NEXT:    addl $40, %esp155; X86-NEXT:    popl %esi156; X86-NEXT:    retl157entry:158  %0 = load double, ptr @vf64, align 8159  %conv = call fp128 @llvm.experimental.constrained.fpext.f128.f64(double %0, metadata !"fpexcept.strict") #0160  store fp128 %conv, ptr @vf128, align 16161  ret void162}163 164define dso_local void @TestFPExtF80_F128() nounwind strictfp {165; X64-SSE-LABEL: TestFPExtF80_F128:166; X64-SSE:       # %bb.0: # %entry167; X64-SSE-NEXT:    subq $24, %rsp168; X64-SSE-NEXT:    fldt vf80(%rip)169; X64-SSE-NEXT:    fstpt (%rsp)170; X64-SSE-NEXT:    wait171; X64-SSE-NEXT:    callq __extendxftf2@PLT172; X64-SSE-NEXT:    movaps %xmm0, vf128(%rip)173; X64-SSE-NEXT:    addq $24, %rsp174; X64-SSE-NEXT:    retq175;176; X64-AVX-LABEL: TestFPExtF80_F128:177; X64-AVX:       # %bb.0: # %entry178; X64-AVX-NEXT:    subq $24, %rsp179; X64-AVX-NEXT:    fldt vf80(%rip)180; X64-AVX-NEXT:    fstpt (%rsp)181; X64-AVX-NEXT:    wait182; X64-AVX-NEXT:    callq __extendxftf2@PLT183; X64-AVX-NEXT:    vmovaps %xmm0, vf128(%rip)184; X64-AVX-NEXT:    addq $24, %rsp185; X64-AVX-NEXT:    retq186;187; X86-LABEL: TestFPExtF80_F128:188; X86:       # %bb.0: # %entry189; X86-NEXT:    pushl %esi190; X86-NEXT:    subl $40, %esp191; X86-NEXT:    fldt vf80192; X86-NEXT:    fstpt {{[0-9]+}}(%esp)193; X86-NEXT:    wait194; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax195; X86-NEXT:    movl %eax, (%esp)196; X86-NEXT:    calll __extendxftf2197; X86-NEXT:    subl $4, %esp198; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax199; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx200; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx201; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi202; X86-NEXT:    movl %esi, vf128+12203; X86-NEXT:    movl %edx, vf128+8204; X86-NEXT:    movl %ecx, vf128+4205; X86-NEXT:    movl %eax, vf128206; X86-NEXT:    addl $40, %esp207; X86-NEXT:    popl %esi208; X86-NEXT:    retl209entry:210  %0 = load x86_fp80, ptr @vf80, align 8211  %conv = call fp128 @llvm.experimental.constrained.fpext.f128.f80(x86_fp80 %0, metadata !"fpexcept.strict") #0212  store fp128 %conv, ptr @vf128, align 16213  ret void214}215 216define dso_local void @TestFPTruncF128_F16() nounwind strictfp {217; X64-SSE-LABEL: TestFPTruncF128_F16:218; X64-SSE:       # %bb.0: # %entry219; X64-SSE-NEXT:    pushq %rax220; X64-SSE-NEXT:    movdqa vf128(%rip), %xmm0221; X64-SSE-NEXT:    callq __trunctfhf2@PLT222; X64-SSE-NEXT:    pextrw $0, %xmm0, %eax223; X64-SSE-NEXT:    movw %ax, vf16(%rip)224; X64-SSE-NEXT:    popq %rax225; X64-SSE-NEXT:    retq226;227; X64-AVX512-LABEL: TestFPTruncF128_F16:228; X64-AVX512:       # %bb.0: # %entry229; X64-AVX512-NEXT:    pushq %rax230; X64-AVX512-NEXT:    vmovaps vf128(%rip), %xmm0231; X64-AVX512-NEXT:    callq __trunctfhf2@PLT232; X64-AVX512-NEXT:    vmovsh %xmm0, vf16(%rip)233; X64-AVX512-NEXT:    popq %rax234; X64-AVX512-NEXT:    retq235;236; X86-LABEL: TestFPTruncF128_F16:237; X86:       # %bb.0: # %entry238; X86-NEXT:    subl $12, %esp239; X86-NEXT:    pushl vf128+12240; X86-NEXT:    pushl vf128+8241; X86-NEXT:    pushl vf128+4242; X86-NEXT:    pushl vf128243; X86-NEXT:    calll __trunctfhf2244; X86-NEXT:    addl $16, %esp245; X86-NEXT:    movw %ax, vf16246; X86-NEXT:    addl $12, %esp247; X86-NEXT:    retl248entry:249  %0 = load fp128, ptr @vf128, align 16250  %conv = call half @llvm.experimental.constrained.fptrunc.f16.f128(fp128 %0, metadata !"round.dynamic", metadata !"fpexcept.strict") #0251  store half %conv, ptr @vf16, align 2252  ret void253}254 255define dso_local void @TestFPTruncF128_F32() nounwind strictfp {256; X64-SSE-LABEL: TestFPTruncF128_F32:257; X64-SSE:       # %bb.0: # %entry258; X64-SSE-NEXT:    pushq %rax259; X64-SSE-NEXT:    movaps vf128(%rip), %xmm0260; X64-SSE-NEXT:    callq __trunctfsf2@PLT261; X64-SSE-NEXT:    movss %xmm0, vf32(%rip)262; X64-SSE-NEXT:    popq %rax263; X64-SSE-NEXT:    retq264;265; X64-AVX-LABEL: TestFPTruncF128_F32:266; X64-AVX:       # %bb.0: # %entry267; X64-AVX-NEXT:    pushq %rax268; X64-AVX-NEXT:    vmovaps vf128(%rip), %xmm0269; X64-AVX-NEXT:    callq __trunctfsf2@PLT270; X64-AVX-NEXT:    vmovss %xmm0, vf32(%rip)271; X64-AVX-NEXT:    popq %rax272; X64-AVX-NEXT:    retq273;274; X86-LABEL: TestFPTruncF128_F32:275; X86:       # %bb.0: # %entry276; X86-NEXT:    subl $12, %esp277; X86-NEXT:    pushl vf128+12278; X86-NEXT:    pushl vf128+8279; X86-NEXT:    pushl vf128+4280; X86-NEXT:    pushl vf128281; X86-NEXT:    calll __trunctfsf2282; X86-NEXT:    addl $16, %esp283; X86-NEXT:    fstps vf32284; X86-NEXT:    wait285; X86-NEXT:    addl $12, %esp286; X86-NEXT:    retl287entry:288  %0 = load fp128, ptr @vf128, align 16289  %conv = call float @llvm.experimental.constrained.fptrunc.f32.f128(fp128 %0, metadata !"round.dynamic", metadata !"fpexcept.strict") #0290  store float %conv, ptr @vf32, align 4291  ret void292}293 294define dso_local void @TestFPTruncF128_F64() nounwind strictfp {295; X64-SSE-LABEL: TestFPTruncF128_F64:296; X64-SSE:       # %bb.0: # %entry297; X64-SSE-NEXT:    pushq %rax298; X64-SSE-NEXT:    movaps vf128(%rip), %xmm0299; X64-SSE-NEXT:    callq __trunctfdf2@PLT300; X64-SSE-NEXT:    movsd %xmm0, vf64(%rip)301; X64-SSE-NEXT:    popq %rax302; X64-SSE-NEXT:    retq303;304; X64-AVX-LABEL: TestFPTruncF128_F64:305; X64-AVX:       # %bb.0: # %entry306; X64-AVX-NEXT:    pushq %rax307; X64-AVX-NEXT:    vmovaps vf128(%rip), %xmm0308; X64-AVX-NEXT:    callq __trunctfdf2@PLT309; X64-AVX-NEXT:    vmovsd %xmm0, vf64(%rip)310; X64-AVX-NEXT:    popq %rax311; X64-AVX-NEXT:    retq312;313; X86-LABEL: TestFPTruncF128_F64:314; X86:       # %bb.0: # %entry315; X86-NEXT:    subl $12, %esp316; X86-NEXT:    pushl vf128+12317; X86-NEXT:    pushl vf128+8318; X86-NEXT:    pushl vf128+4319; X86-NEXT:    pushl vf128320; X86-NEXT:    calll __trunctfdf2321; X86-NEXT:    addl $16, %esp322; X86-NEXT:    fstpl vf64323; X86-NEXT:    wait324; X86-NEXT:    addl $12, %esp325; X86-NEXT:    retl326entry:327  %0 = load fp128, ptr @vf128, align 16328  %conv = call double @llvm.experimental.constrained.fptrunc.f64.f128(fp128 %0, metadata !"round.dynamic", metadata !"fpexcept.strict") #0329  store double %conv, ptr @vf64, align 8330  ret void331}332 333define dso_local void @TestFPTruncF128_F80() nounwind strictfp {334; X64-SSE-LABEL: TestFPTruncF128_F80:335; X64-SSE:       # %bb.0: # %entry336; X64-SSE-NEXT:    pushq %rax337; X64-SSE-NEXT:    movaps vf128(%rip), %xmm0338; X64-SSE-NEXT:    callq __trunctfxf2@PLT339; X64-SSE-NEXT:    fstpt vf80(%rip)340; X64-SSE-NEXT:    wait341; X64-SSE-NEXT:    popq %rax342; X64-SSE-NEXT:    retq343;344; X64-AVX-LABEL: TestFPTruncF128_F80:345; X64-AVX:       # %bb.0: # %entry346; X64-AVX-NEXT:    pushq %rax347; X64-AVX-NEXT:    vmovaps vf128(%rip), %xmm0348; X64-AVX-NEXT:    callq __trunctfxf2@PLT349; X64-AVX-NEXT:    fstpt vf80(%rip)350; X64-AVX-NEXT:    wait351; X64-AVX-NEXT:    popq %rax352; X64-AVX-NEXT:    retq353;354; X86-LABEL: TestFPTruncF128_F80:355; X86:       # %bb.0: # %entry356; X86-NEXT:    subl $12, %esp357; X86-NEXT:    pushl vf128+12358; X86-NEXT:    pushl vf128+8359; X86-NEXT:    pushl vf128+4360; X86-NEXT:    pushl vf128361; X86-NEXT:    calll __trunctfxf2362; X86-NEXT:    addl $16, %esp363; X86-NEXT:    fstpt vf80364; X86-NEXT:    wait365; X86-NEXT:    addl $12, %esp366; X86-NEXT:    retl367entry:368  %0 = load fp128, ptr @vf128, align 16369  %conv = call x86_fp80 @llvm.experimental.constrained.fptrunc.f80.f128(fp128 %0, metadata !"round.dynamic", metadata !"fpexcept.strict") #0370  store x86_fp80 %conv, ptr @vf80, align 8371  ret void372}373 374define dso_local i8 @fptosi_i8(fp128 %x) nounwind strictfp {375; X64-LABEL: fptosi_i8:376; X64:       # %bb.0: # %entry377; X64-NEXT:    pushq %rax378; X64-NEXT:    callq __fixtfsi@PLT379; X64-NEXT:    # kill: def $al killed $al killed $eax380; X64-NEXT:    popq %rcx381; X64-NEXT:    retq382;383; X86-LABEL: fptosi_i8:384; X86:       # %bb.0: # %entry385; X86-NEXT:    subl $12, %esp386; X86-NEXT:    pushl {{[0-9]+}}(%esp)387; X86-NEXT:    pushl {{[0-9]+}}(%esp)388; X86-NEXT:    pushl {{[0-9]+}}(%esp)389; X86-NEXT:    pushl {{[0-9]+}}(%esp)390; X86-NEXT:    calll __fixtfsi391; X86-NEXT:    addl $16, %esp392; X86-NEXT:    # kill: def $al killed $al killed $eax393; X86-NEXT:    addl $12, %esp394; X86-NEXT:    retl395entry:396  %conv = call i8 @llvm.experimental.constrained.fptosi.i8.f128(fp128 %x, metadata !"fpexcept.strict") #0397  ret i8 %conv398}399 400define i16 @fptosi_i16(fp128 %x) nounwind strictfp {401; X64-LABEL: fptosi_i16:402; X64:       # %bb.0: # %entry403; X64-NEXT:    pushq %rax404; X64-NEXT:    callq __fixtfsi@PLT405; X64-NEXT:    # kill: def $ax killed $ax killed $eax406; X64-NEXT:    popq %rcx407; X64-NEXT:    retq408;409; X86-LABEL: fptosi_i16:410; X86:       # %bb.0: # %entry411; X86-NEXT:    subl $12, %esp412; X86-NEXT:    pushl {{[0-9]+}}(%esp)413; X86-NEXT:    pushl {{[0-9]+}}(%esp)414; X86-NEXT:    pushl {{[0-9]+}}(%esp)415; X86-NEXT:    pushl {{[0-9]+}}(%esp)416; X86-NEXT:    calll __fixtfsi417; X86-NEXT:    addl $16, %esp418; X86-NEXT:    # kill: def $ax killed $ax killed $eax419; X86-NEXT:    addl $12, %esp420; X86-NEXT:    retl421entry:422  %conv = call i16 @llvm.experimental.constrained.fptosi.i16.f128(fp128 %x, metadata !"fpexcept.strict") #0423  ret i16 %conv424}425 426define dso_local i32 @fptosi_i32(fp128 %x) nounwind strictfp {427; X64-LABEL: fptosi_i32:428; X64:       # %bb.0: # %entry429; X64-NEXT:    pushq %rax430; X64-NEXT:    callq __fixtfsi@PLT431; X64-NEXT:    popq %rcx432; X64-NEXT:    retq433;434; X86-LABEL: fptosi_i32:435; X86:       # %bb.0: # %entry436; X86-NEXT:    subl $12, %esp437; X86-NEXT:    pushl {{[0-9]+}}(%esp)438; X86-NEXT:    pushl {{[0-9]+}}(%esp)439; X86-NEXT:    pushl {{[0-9]+}}(%esp)440; X86-NEXT:    pushl {{[0-9]+}}(%esp)441; X86-NEXT:    calll __fixtfsi442; X86-NEXT:    addl $28, %esp443; X86-NEXT:    retl444entry:445  %conv = call i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0446  ret i32 %conv447}448 449define i64 @fptosi_i64(fp128 %x) nounwind strictfp {450; X64-LABEL: fptosi_i64:451; X64:       # %bb.0: # %entry452; X64-NEXT:    pushq %rax453; X64-NEXT:    callq __fixtfdi@PLT454; X64-NEXT:    popq %rcx455; X64-NEXT:    retq456;457; X86-LABEL: fptosi_i64:458; X86:       # %bb.0: # %entry459; X86-NEXT:    subl $12, %esp460; X86-NEXT:    pushl {{[0-9]+}}(%esp)461; X86-NEXT:    pushl {{[0-9]+}}(%esp)462; X86-NEXT:    pushl {{[0-9]+}}(%esp)463; X86-NEXT:    pushl {{[0-9]+}}(%esp)464; X86-NEXT:    calll __fixtfdi465; X86-NEXT:    addl $28, %esp466; X86-NEXT:    retl467entry:468  %conv = call i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0469  ret i64 %conv470}471 472define i128 @fptosi_i128(fp128 %x) nounwind strictfp {473; X64-LABEL: fptosi_i128:474; X64:       # %bb.0: # %entry475; X64-NEXT:    pushq %rax476; X64-NEXT:    callq __fixtfti@PLT477; X64-NEXT:    popq %rcx478; X64-NEXT:    retq479;480; X86-LABEL: fptosi_i128:481; X86:       # %bb.0: # %entry482; X86-NEXT:    pushl %edi483; X86-NEXT:    pushl %esi484; X86-NEXT:    subl $52, %esp485; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi486; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax487; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx488; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx489; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi490; X86-NEXT:    movl %edi, {{[0-9]+}}(%esp)491; X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)492; X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)493; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)494; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax495; X86-NEXT:    movl %eax, (%esp)496; X86-NEXT:    calll __fixtfti497; X86-NEXT:    subl $4, %esp498; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax499; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx500; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx501; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi502; X86-NEXT:    movl %edi, 8(%esi)503; X86-NEXT:    movl %edx, 12(%esi)504; X86-NEXT:    movl %eax, (%esi)505; X86-NEXT:    movl %ecx, 4(%esi)506; X86-NEXT:    movl %esi, %eax507; X86-NEXT:    addl $52, %esp508; X86-NEXT:    popl %esi509; X86-NEXT:    popl %edi510; X86-NEXT:    retl $4511entry:512  %conv = call i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128 %x, metadata !"fpexcept.strict") #0513  ret i128 %conv514}515 516define dso_local i8 @fptoui_i8(fp128 %x) nounwind strictfp {517; X64-LABEL: fptoui_i8:518; X64:       # %bb.0: # %entry519; X64-NEXT:    pushq %rax520; X64-NEXT:    callq __fixtfsi@PLT521; X64-NEXT:    # kill: def $al killed $al killed $eax522; X64-NEXT:    popq %rcx523; X64-NEXT:    retq524;525; X86-LABEL: fptoui_i8:526; X86:       # %bb.0: # %entry527; X86-NEXT:    subl $12, %esp528; X86-NEXT:    pushl {{[0-9]+}}(%esp)529; X86-NEXT:    pushl {{[0-9]+}}(%esp)530; X86-NEXT:    pushl {{[0-9]+}}(%esp)531; X86-NEXT:    pushl {{[0-9]+}}(%esp)532; X86-NEXT:    calll __fixunstfsi533; X86-NEXT:    addl $16, %esp534; X86-NEXT:    # kill: def $al killed $al killed $eax535; X86-NEXT:    addl $12, %esp536; X86-NEXT:    retl537entry:538  %conv = call i8 @llvm.experimental.constrained.fptoui.i8.f128(fp128 %x, metadata !"fpexcept.strict") #0539  ret i8 %conv540}541 542define i16 @fptoui_i16(fp128 %x) nounwind strictfp {543; X64-LABEL: fptoui_i16:544; X64:       # %bb.0: # %entry545; X64-NEXT:    pushq %rax546; X64-NEXT:    callq __fixtfsi@PLT547; X64-NEXT:    # kill: def $ax killed $ax killed $eax548; X64-NEXT:    popq %rcx549; X64-NEXT:    retq550;551; X86-LABEL: fptoui_i16:552; X86:       # %bb.0: # %entry553; X86-NEXT:    subl $12, %esp554; X86-NEXT:    pushl {{[0-9]+}}(%esp)555; X86-NEXT:    pushl {{[0-9]+}}(%esp)556; X86-NEXT:    pushl {{[0-9]+}}(%esp)557; X86-NEXT:    pushl {{[0-9]+}}(%esp)558; X86-NEXT:    calll __fixunstfsi559; X86-NEXT:    addl $16, %esp560; X86-NEXT:    # kill: def $ax killed $ax killed $eax561; X86-NEXT:    addl $12, %esp562; X86-NEXT:    retl563entry:564  %conv = call i16 @llvm.experimental.constrained.fptoui.i16.f128(fp128 %x, metadata !"fpexcept.strict") #0565  ret i16 %conv566}567 568define dso_local i32 @fptoui_i32(fp128 %x) nounwind strictfp {569; X64-LABEL: fptoui_i32:570; X64:       # %bb.0: # %entry571; X64-NEXT:    pushq %rax572; X64-NEXT:    callq __fixunstfsi@PLT573; X64-NEXT:    popq %rcx574; X64-NEXT:    retq575;576; X86-LABEL: fptoui_i32:577; X86:       # %bb.0: # %entry578; X86-NEXT:    subl $12, %esp579; X86-NEXT:    pushl {{[0-9]+}}(%esp)580; X86-NEXT:    pushl {{[0-9]+}}(%esp)581; X86-NEXT:    pushl {{[0-9]+}}(%esp)582; X86-NEXT:    pushl {{[0-9]+}}(%esp)583; X86-NEXT:    calll __fixunstfsi584; X86-NEXT:    addl $28, %esp585; X86-NEXT:    retl586entry:587  %conv = call i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0588  ret i32 %conv589}590 591define i64 @fptoui_i64(fp128 %x) nounwind strictfp {592; X64-LABEL: fptoui_i64:593; X64:       # %bb.0: # %entry594; X64-NEXT:    pushq %rax595; X64-NEXT:    callq __fixunstfdi@PLT596; X64-NEXT:    popq %rcx597; X64-NEXT:    retq598;599; X86-LABEL: fptoui_i64:600; X86:       # %bb.0: # %entry601; X86-NEXT:    subl $12, %esp602; X86-NEXT:    pushl {{[0-9]+}}(%esp)603; X86-NEXT:    pushl {{[0-9]+}}(%esp)604; X86-NEXT:    pushl {{[0-9]+}}(%esp)605; X86-NEXT:    pushl {{[0-9]+}}(%esp)606; X86-NEXT:    calll __fixunstfdi607; X86-NEXT:    addl $28, %esp608; X86-NEXT:    retl609entry:610  %conv = call i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0611  ret i64 %conv612}613 614define i128 @fptoui_i128(fp128 %x) nounwind strictfp {615; X64-LABEL: fptoui_i128:616; X64:       # %bb.0: # %entry617; X64-NEXT:    pushq %rax618; X64-NEXT:    callq __fixunstfti@PLT619; X64-NEXT:    popq %rcx620; X64-NEXT:    retq621;622; X86-LABEL: fptoui_i128:623; X86:       # %bb.0: # %entry624; X86-NEXT:    pushl %edi625; X86-NEXT:    pushl %esi626; X86-NEXT:    subl $52, %esp627; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi628; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax629; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx630; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx631; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi632; X86-NEXT:    movl %edi, {{[0-9]+}}(%esp)633; X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)634; X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)635; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)636; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax637; X86-NEXT:    movl %eax, (%esp)638; X86-NEXT:    calll __fixunstfti639; X86-NEXT:    subl $4, %esp640; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax641; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx642; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx643; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi644; X86-NEXT:    movl %edi, 8(%esi)645; X86-NEXT:    movl %edx, 12(%esi)646; X86-NEXT:    movl %eax, (%esi)647; X86-NEXT:    movl %ecx, 4(%esi)648; X86-NEXT:    movl %esi, %eax649; X86-NEXT:    addl $52, %esp650; X86-NEXT:    popl %esi651; X86-NEXT:    popl %edi652; X86-NEXT:    retl $4653entry:654  %conv = call i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128 %x, metadata !"fpexcept.strict") #0655  ret i128 %conv656}657 658define fp128 @sitofp_i8(i8 %x) nounwind strictfp {659; X64-LABEL: sitofp_i8:660; X64:       # %bb.0: # %entry661; X64-NEXT:    pushq %rax662; X64-NEXT:    movsbl %dil, %edi663; X64-NEXT:    callq __floatsitf@PLT664; X64-NEXT:    popq %rax665; X64-NEXT:    retq666;667; X86-LABEL: sitofp_i8:668; X86:       # %bb.0: # %entry669; X86-NEXT:    pushl %edi670; X86-NEXT:    pushl %esi671; X86-NEXT:    subl $20, %esp672; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi673; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %eax674; X86-NEXT:    subl $8, %esp675; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx676; X86-NEXT:    pushl %eax677; X86-NEXT:    pushl %ecx678; X86-NEXT:    calll __floatsitf679; X86-NEXT:    addl $12, %esp680; X86-NEXT:    movl (%esp), %eax681; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx682; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx683; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi684; X86-NEXT:    movl %edi, 8(%esi)685; X86-NEXT:    movl %edx, 12(%esi)686; X86-NEXT:    movl %eax, (%esi)687; X86-NEXT:    movl %ecx, 4(%esi)688; X86-NEXT:    movl %esi, %eax689; X86-NEXT:    addl $20, %esp690; X86-NEXT:    popl %esi691; X86-NEXT:    popl %edi692; X86-NEXT:    retl $4693entry:694  %conv = call fp128 @llvm.experimental.constrained.sitofp.f128.i8(i8 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0695  ret fp128 %conv696}697 698define fp128 @sitofp_i16(i16 %x) nounwind strictfp {699; X64-LABEL: sitofp_i16:700; X64:       # %bb.0: # %entry701; X64-NEXT:    pushq %rax702; X64-NEXT:    movswl %di, %edi703; X64-NEXT:    callq __floatsitf@PLT704; X64-NEXT:    popq %rax705; X64-NEXT:    retq706;707; X86-LABEL: sitofp_i16:708; X86:       # %bb.0: # %entry709; X86-NEXT:    pushl %edi710; X86-NEXT:    pushl %esi711; X86-NEXT:    subl $20, %esp712; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi713; X86-NEXT:    movswl {{[0-9]+}}(%esp), %eax714; X86-NEXT:    subl $8, %esp715; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx716; X86-NEXT:    pushl %eax717; X86-NEXT:    pushl %ecx718; X86-NEXT:    calll __floatsitf719; X86-NEXT:    addl $12, %esp720; X86-NEXT:    movl (%esp), %eax721; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx722; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx723; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi724; X86-NEXT:    movl %edi, 8(%esi)725; X86-NEXT:    movl %edx, 12(%esi)726; X86-NEXT:    movl %eax, (%esi)727; X86-NEXT:    movl %ecx, 4(%esi)728; X86-NEXT:    movl %esi, %eax729; X86-NEXT:    addl $20, %esp730; X86-NEXT:    popl %esi731; X86-NEXT:    popl %edi732; X86-NEXT:    retl $4733entry:734  %conv = call fp128 @llvm.experimental.constrained.sitofp.f128.i16(i16 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0735  ret fp128 %conv736}737 738define fp128 @sitofp_i32(i32 %x) nounwind strictfp {739; X64-LABEL: sitofp_i32:740; X64:       # %bb.0: # %entry741; X64-NEXT:    pushq %rax742; X64-NEXT:    callq __floatsitf@PLT743; X64-NEXT:    popq %rax744; X64-NEXT:    retq745;746; X86-LABEL: sitofp_i32:747; X86:       # %bb.0: # %entry748; X86-NEXT:    pushl %edi749; X86-NEXT:    pushl %esi750; X86-NEXT:    subl $20, %esp751; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi752; X86-NEXT:    subl $8, %esp753; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax754; X86-NEXT:    pushl {{[0-9]+}}(%esp)755; X86-NEXT:    pushl %eax756; X86-NEXT:    calll __floatsitf757; X86-NEXT:    addl $12, %esp758; X86-NEXT:    movl (%esp), %eax759; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx760; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx761; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi762; X86-NEXT:    movl %edi, 8(%esi)763; X86-NEXT:    movl %edx, 12(%esi)764; X86-NEXT:    movl %eax, (%esi)765; X86-NEXT:    movl %ecx, 4(%esi)766; X86-NEXT:    movl %esi, %eax767; X86-NEXT:    addl $20, %esp768; X86-NEXT:    popl %esi769; X86-NEXT:    popl %edi770; X86-NEXT:    retl $4771entry:772  %conv = call fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0773  ret fp128 %conv774}775 776define fp128 @sitofp_i64(i64 %x) nounwind strictfp {777; X64-LABEL: sitofp_i64:778; X64:       # %bb.0: # %entry779; X64-NEXT:    pushq %rax780; X64-NEXT:    callq __floatditf@PLT781; X64-NEXT:    popq %rax782; X64-NEXT:    retq783;784; X86-LABEL: sitofp_i64:785; X86:       # %bb.0: # %entry786; X86-NEXT:    pushl %edi787; X86-NEXT:    pushl %esi788; X86-NEXT:    subl $20, %esp789; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi790; X86-NEXT:    subl $4, %esp791; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax792; X86-NEXT:    pushl {{[0-9]+}}(%esp)793; X86-NEXT:    pushl {{[0-9]+}}(%esp)794; X86-NEXT:    pushl %eax795; X86-NEXT:    calll __floatditf796; X86-NEXT:    addl $12, %esp797; X86-NEXT:    movl (%esp), %eax798; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx799; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx800; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi801; X86-NEXT:    movl %edi, 8(%esi)802; X86-NEXT:    movl %edx, 12(%esi)803; X86-NEXT:    movl %eax, (%esi)804; X86-NEXT:    movl %ecx, 4(%esi)805; X86-NEXT:    movl %esi, %eax806; X86-NEXT:    addl $20, %esp807; X86-NEXT:    popl %esi808; X86-NEXT:    popl %edi809; X86-NEXT:    retl $4810entry:811  %conv = call fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0812  ret fp128 %conv813}814 815define fp128 @sitofp_i128(i128 %x) nounwind strictfp {816; X64-LABEL: sitofp_i128:817; X64:       # %bb.0: # %entry818; X64-NEXT:    pushq %rax819; X64-NEXT:    callq __floattitf@PLT820; X64-NEXT:    popq %rax821; X64-NEXT:    retq822;823; X86-LABEL: sitofp_i128:824; X86:       # %bb.0: # %entry825; X86-NEXT:    pushl %edi826; X86-NEXT:    pushl %esi827; X86-NEXT:    subl $52, %esp828; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi829; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax830; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx831; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx832; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi833; X86-NEXT:    movl %edi, {{[0-9]+}}(%esp)834; X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)835; X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)836; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)837; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax838; X86-NEXT:    movl %eax, (%esp)839; X86-NEXT:    calll __floattitf840; X86-NEXT:    subl $4, %esp841; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax842; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx843; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx844; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi845; X86-NEXT:    movl %edi, 8(%esi)846; X86-NEXT:    movl %edx, 12(%esi)847; X86-NEXT:    movl %eax, (%esi)848; X86-NEXT:    movl %ecx, 4(%esi)849; X86-NEXT:    movl %esi, %eax850; X86-NEXT:    addl $52, %esp851; X86-NEXT:    popl %esi852; X86-NEXT:    popl %edi853; X86-NEXT:    retl $4854entry:855  %conv = call fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0856  ret fp128 %conv857}858 859define fp128 @uitofp_i8(i8 %x) nounwind strictfp {860; X64-LABEL: uitofp_i8:861; X64:       # %bb.0: # %entry862; X64-NEXT:    pushq %rax863; X64-NEXT:    movzbl %dil, %edi864; X64-NEXT:    callq __floatsitf@PLT865; X64-NEXT:    popq %rax866; X64-NEXT:    retq867;868; X86-LABEL: uitofp_i8:869; X86:       # %bb.0: # %entry870; X86-NEXT:    pushl %edi871; X86-NEXT:    pushl %esi872; X86-NEXT:    subl $20, %esp873; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi874; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax875; X86-NEXT:    subl $8, %esp876; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx877; X86-NEXT:    pushl %eax878; X86-NEXT:    pushl %ecx879; X86-NEXT:    calll __floatunsitf880; X86-NEXT:    addl $12, %esp881; X86-NEXT:    movl (%esp), %eax882; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx883; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx884; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi885; X86-NEXT:    movl %edi, 8(%esi)886; X86-NEXT:    movl %edx, 12(%esi)887; X86-NEXT:    movl %eax, (%esi)888; X86-NEXT:    movl %ecx, 4(%esi)889; X86-NEXT:    movl %esi, %eax890; X86-NEXT:    addl $20, %esp891; X86-NEXT:    popl %esi892; X86-NEXT:    popl %edi893; X86-NEXT:    retl $4894entry:895  %conv = call fp128 @llvm.experimental.constrained.uitofp.f128.i8(i8 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0896  ret fp128 %conv897}898 899define fp128 @uitofp_i16(i16 %x) nounwind strictfp {900; X64-LABEL: uitofp_i16:901; X64:       # %bb.0: # %entry902; X64-NEXT:    pushq %rax903; X64-NEXT:    movzwl %di, %edi904; X64-NEXT:    callq __floatsitf@PLT905; X64-NEXT:    popq %rax906; X64-NEXT:    retq907;908; X86-LABEL: uitofp_i16:909; X86:       # %bb.0: # %entry910; X86-NEXT:    pushl %edi911; X86-NEXT:    pushl %esi912; X86-NEXT:    subl $20, %esp913; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi914; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax915; X86-NEXT:    subl $8, %esp916; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx917; X86-NEXT:    pushl %eax918; X86-NEXT:    pushl %ecx919; X86-NEXT:    calll __floatunsitf920; X86-NEXT:    addl $12, %esp921; X86-NEXT:    movl (%esp), %eax922; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx923; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx924; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi925; X86-NEXT:    movl %edi, 8(%esi)926; X86-NEXT:    movl %edx, 12(%esi)927; X86-NEXT:    movl %eax, (%esi)928; X86-NEXT:    movl %ecx, 4(%esi)929; X86-NEXT:    movl %esi, %eax930; X86-NEXT:    addl $20, %esp931; X86-NEXT:    popl %esi932; X86-NEXT:    popl %edi933; X86-NEXT:    retl $4934entry:935  %conv = call fp128 @llvm.experimental.constrained.uitofp.f128.i16(i16 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0936  ret fp128 %conv937}938 939define fp128 @uitofp_i32(i32 %x) nounwind strictfp {940; X64-LABEL: uitofp_i32:941; X64:       # %bb.0: # %entry942; X64-NEXT:    pushq %rax943; X64-NEXT:    callq __floatunsitf@PLT944; X64-NEXT:    popq %rax945; X64-NEXT:    retq946;947; X86-LABEL: uitofp_i32:948; X86:       # %bb.0: # %entry949; X86-NEXT:    pushl %edi950; X86-NEXT:    pushl %esi951; X86-NEXT:    subl $20, %esp952; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi953; X86-NEXT:    subl $8, %esp954; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax955; X86-NEXT:    pushl {{[0-9]+}}(%esp)956; X86-NEXT:    pushl %eax957; X86-NEXT:    calll __floatunsitf958; X86-NEXT:    addl $12, %esp959; X86-NEXT:    movl (%esp), %eax960; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx961; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx962; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi963; X86-NEXT:    movl %edi, 8(%esi)964; X86-NEXT:    movl %edx, 12(%esi)965; X86-NEXT:    movl %eax, (%esi)966; X86-NEXT:    movl %ecx, 4(%esi)967; X86-NEXT:    movl %esi, %eax968; X86-NEXT:    addl $20, %esp969; X86-NEXT:    popl %esi970; X86-NEXT:    popl %edi971; X86-NEXT:    retl $4972entry:973  %conv = call fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0974  ret fp128 %conv975}976 977define fp128 @uitofp_i64(i64 %x) nounwind strictfp {978; X64-LABEL: uitofp_i64:979; X64:       # %bb.0: # %entry980; X64-NEXT:    pushq %rax981; X64-NEXT:    callq __floatunditf@PLT982; X64-NEXT:    popq %rax983; X64-NEXT:    retq984;985; X86-LABEL: uitofp_i64:986; X86:       # %bb.0: # %entry987; X86-NEXT:    pushl %edi988; X86-NEXT:    pushl %esi989; X86-NEXT:    subl $20, %esp990; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi991; X86-NEXT:    subl $4, %esp992; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax993; X86-NEXT:    pushl {{[0-9]+}}(%esp)994; X86-NEXT:    pushl {{[0-9]+}}(%esp)995; X86-NEXT:    pushl %eax996; X86-NEXT:    calll __floatunditf997; X86-NEXT:    addl $12, %esp998; X86-NEXT:    movl (%esp), %eax999; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1000; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1001; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi1002; X86-NEXT:    movl %edi, 8(%esi)1003; X86-NEXT:    movl %edx, 12(%esi)1004; X86-NEXT:    movl %eax, (%esi)1005; X86-NEXT:    movl %ecx, 4(%esi)1006; X86-NEXT:    movl %esi, %eax1007; X86-NEXT:    addl $20, %esp1008; X86-NEXT:    popl %esi1009; X86-NEXT:    popl %edi1010; X86-NEXT:    retl $41011entry:1012  %conv = call fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #01013  ret fp128 %conv1014}1015 1016define fp128 @uitofp_i128(i128 %x) nounwind strictfp {1017; X64-LABEL: uitofp_i128:1018; X64:       # %bb.0: # %entry1019; X64-NEXT:    pushq %rax1020; X64-NEXT:    callq __floatuntitf@PLT1021; X64-NEXT:    popq %rax1022; X64-NEXT:    retq1023;1024; X86-LABEL: uitofp_i128:1025; X86:       # %bb.0: # %entry1026; X86-NEXT:    pushl %edi1027; X86-NEXT:    pushl %esi1028; X86-NEXT:    subl $52, %esp1029; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi1030; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1031; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1032; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1033; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi1034; X86-NEXT:    movl %edi, {{[0-9]+}}(%esp)1035; X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)1036; X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)1037; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)1038; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax1039; X86-NEXT:    movl %eax, (%esp)1040; X86-NEXT:    calll __floatuntitf1041; X86-NEXT:    subl $4, %esp1042; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1043; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1044; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1045; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi1046; X86-NEXT:    movl %edi, 8(%esi)1047; X86-NEXT:    movl %edx, 12(%esi)1048; X86-NEXT:    movl %eax, (%esi)1049; X86-NEXT:    movl %ecx, 4(%esi)1050; X86-NEXT:    movl %esi, %eax1051; X86-NEXT:    addl $52, %esp1052; X86-NEXT:    popl %esi1053; X86-NEXT:    popl %edi1054; X86-NEXT:    retl $41055entry:1056  %conv = call fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #01057  ret fp128 %conv1058}1059 1060attributes #0 = { strictfp }1061 1062declare half @llvm.experimental.constrained.fptrunc.f16.f128(fp128, metadata, metadata)1063declare float @llvm.experimental.constrained.fptrunc.f32.f128(fp128, metadata, metadata)1064declare double @llvm.experimental.constrained.fptrunc.f64.f128(fp128, metadata, metadata)1065declare x86_fp80 @llvm.experimental.constrained.fptrunc.f80.f128(fp128, metadata, metadata)1066declare fp128 @llvm.experimental.constrained.fpext.f128.f16(half, metadata)1067declare fp128 @llvm.experimental.constrained.fpext.f128.f32(float, metadata)1068declare fp128 @llvm.experimental.constrained.fpext.f128.f64(double, metadata)1069declare fp128 @llvm.experimental.constrained.fpext.f128.f80(x86_fp80, metadata)1070declare i8 @llvm.experimental.constrained.fptosi.i8.f128(fp128, metadata)1071declare i16 @llvm.experimental.constrained.fptosi.i16.f128(fp128, metadata)1072declare i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128, metadata)1073declare i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128, metadata)1074declare i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128, metadata)1075declare i8 @llvm.experimental.constrained.fptoui.i8.f128(fp128, metadata)1076declare i16 @llvm.experimental.constrained.fptoui.i16.f128(fp128, metadata)1077declare i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128, metadata)1078declare i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128, metadata)1079declare i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128, metadata)1080declare fp128 @llvm.experimental.constrained.sitofp.f128.i8(i8, metadata, metadata)1081declare fp128 @llvm.experimental.constrained.sitofp.f128.i16(i16, metadata, metadata)1082declare fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32, metadata, metadata)1083declare fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64, metadata, metadata)1084declare fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128, metadata, metadata)1085declare fp128 @llvm.experimental.constrained.uitofp.f128.i8(i8, metadata, metadata)1086declare fp128 @llvm.experimental.constrained.uitofp.f128.i16(i16, metadata, metadata)1087declare fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32, metadata, metadata)1088declare fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64, metadata, metadata)1089declare fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128, metadata, metadata)1090