brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.4 KiB · ef4df82 Raw
392 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown              | FileCheck %s --check-prefixes=X86,X86-NOSSE3; RUN: llc < %s -mtriple=i686-unknown -mattr=sse2  | FileCheck %s --check-prefixes=X86,X86-SSE24; RUN: llc < %s -mtriple=x86_64-unknown            | FileCheck %s --check-prefixes=X645; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X866; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X647 8; FIXME: crash9; define i64 @test_llround_f16(half %x) nounwind {10;   %conv = tail call i64 @llvm.llround.f16(half %x)11;   ret i64 %conv12; }13 14define i64 @test_llround_f32(float %x) nounwind {15; X86-NOSSE-LABEL: test_llround_f32:16; X86-NOSSE:       # %bb.0:17; X86-NOSSE-NEXT:    pushl %eax18; X86-NOSSE-NEXT:    flds {{[0-9]+}}(%esp)19; X86-NOSSE-NEXT:    fstps (%esp)20; X86-NOSSE-NEXT:    calll llroundf21; X86-NOSSE-NEXT:    popl %ecx22; X86-NOSSE-NEXT:    retl23;24; X86-SSE2-LABEL: test_llround_f32:25; X86-SSE2:       # %bb.0:26; X86-SSE2-NEXT:    pushl %eax27; X86-SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero28; X86-SSE2-NEXT:    movss %xmm0, (%esp)29; X86-SSE2-NEXT:    calll llroundf30; X86-SSE2-NEXT:    popl %ecx31; X86-SSE2-NEXT:    retl32;33; X64-LABEL: test_llround_f32:34; X64:       # %bb.0:35; X64-NEXT:    jmp llroundf@PLT # TAILCALL36;37; GISEL-X86-LABEL: test_llround_f32:38; GISEL-X86:       # %bb.0:39; GISEL-X86-NEXT:    subl $12, %esp40; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax41; GISEL-X86-NEXT:    movl %eax, (%esp)42; GISEL-X86-NEXT:    calll llroundf43; GISEL-X86-NEXT:    addl $12, %esp44; GISEL-X86-NEXT:    retl45;46; GISEL-X64-LABEL: test_llround_f32:47; GISEL-X64:       # %bb.0:48; GISEL-X64-NEXT:    pushq %rax49; GISEL-X64-NEXT:    callq llroundf50; GISEL-X64-NEXT:    popq %rcx51; GISEL-X64-NEXT:    retq52  %conv = tail call i64 @llvm.llround.f32(float %x)53  ret i64 %conv54}55 56define i64 @test_llround_f64(double %x) nounwind {57; X86-NOSSE-LABEL: test_llround_f64:58; X86-NOSSE:       # %bb.0:59; X86-NOSSE-NEXT:    subl $8, %esp60; X86-NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)61; X86-NOSSE-NEXT:    fstpl (%esp)62; X86-NOSSE-NEXT:    calll llround63; X86-NOSSE-NEXT:    addl $8, %esp64; X86-NOSSE-NEXT:    retl65;66; X86-SSE2-LABEL: test_llround_f64:67; X86-SSE2:       # %bb.0:68; X86-SSE2-NEXT:    subl $8, %esp69; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero70; X86-SSE2-NEXT:    movsd %xmm0, (%esp)71; X86-SSE2-NEXT:    calll llround72; X86-SSE2-NEXT:    addl $8, %esp73; X86-SSE2-NEXT:    retl74;75; X64-LABEL: test_llround_f64:76; X64:       # %bb.0:77; X64-NEXT:    jmp llround@PLT # TAILCALL78;79; GISEL-X86-LABEL: test_llround_f64:80; GISEL-X86:       # %bb.0:81; GISEL-X86-NEXT:    subl $12, %esp82; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax83; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx84; GISEL-X86-NEXT:    movl 4(%eax), %eax85; GISEL-X86-NEXT:    xorl %edx, %edx86; GISEL-X86-NEXT:    addl %esp, %edx87; GISEL-X86-NEXT:    movl %ecx, (%esp)88; GISEL-X86-NEXT:    movl %eax, 4(%edx)89; GISEL-X86-NEXT:    calll llround90; GISEL-X86-NEXT:    addl $12, %esp91; GISEL-X86-NEXT:    retl92;93; GISEL-X64-LABEL: test_llround_f64:94; GISEL-X64:       # %bb.0:95; GISEL-X64-NEXT:    pushq %rax96; GISEL-X64-NEXT:    callq llround97; GISEL-X64-NEXT:    popq %rcx98; GISEL-X64-NEXT:    retq99  %conv = tail call i64 @llvm.llround.f64(double %x)100  ret i64 %conv101}102 103define i64 @test_llround_f80(x86_fp80 %x) nounwind {104; X86-LABEL: test_llround_f80:105; X86:       # %bb.0:106; X86-NEXT:    subl $12, %esp107; X86-NEXT:    fldt {{[0-9]+}}(%esp)108; X86-NEXT:    fstpt (%esp)109; X86-NEXT:    calll llroundl110; X86-NEXT:    addl $12, %esp111; X86-NEXT:    retl112;113; X64-LABEL: test_llround_f80:114; X64:       # %bb.0:115; X64-NEXT:    jmp llroundl@PLT # TAILCALL116;117; GISEL-X86-LABEL: test_llround_f80:118; GISEL-X86:       # %bb.0:119; GISEL-X86-NEXT:    subl $12, %esp120; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)121; GISEL-X86-NEXT:    fstpt (%esp)122; GISEL-X86-NEXT:    calll llroundl123; GISEL-X86-NEXT:    addl $12, %esp124; GISEL-X86-NEXT:    retl125;126; GISEL-X64-LABEL: test_llround_f80:127; GISEL-X64:       # %bb.0:128; GISEL-X64-NEXT:    subq $24, %rsp129; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)130; GISEL-X64-NEXT:    fstpt (%rsp)131; GISEL-X64-NEXT:    callq llroundl132; GISEL-X64-NEXT:    addq $24, %rsp133; GISEL-X64-NEXT:    retq134  %conv = tail call i64 @llvm.llround.f80(x86_fp80 %x)135  ret i64 %conv136}137 138; FIXME(#44744): incorrect libcall139define i64 @test_llround_f128(fp128 %x) nounwind {140; X86-LABEL: test_llround_f128:141; X86:       # %bb.0:142; X86-NEXT:    pushl %ebp143; X86-NEXT:    movl %esp, %ebp144; X86-NEXT:    andl $-16, %esp145; X86-NEXT:    subl $16, %esp146; X86-NEXT:    pushl 20(%ebp)147; X86-NEXT:    pushl 16(%ebp)148; X86-NEXT:    pushl 12(%ebp)149; X86-NEXT:    pushl 8(%ebp)150; X86-NEXT:    calll llroundl151; X86-NEXT:    addl $16, %esp152; X86-NEXT:    movl %ebp, %esp153; X86-NEXT:    popl %ebp154; X86-NEXT:    retl155;156; X64-LABEL: test_llround_f128:157; X64:       # %bb.0:158; X64-NEXT:    jmp llroundl@PLT # TAILCALL159;160; GISEL-X86-LABEL: test_llround_f128:161; GISEL-X86:       # %bb.0:162; GISEL-X86-NEXT:    pushl %esi163; GISEL-X86-NEXT:    subl $24, %esp164; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax165; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx166; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx167; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi168; GISEL-X86-NEXT:    movl %eax, (%esp)169; GISEL-X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)170; GISEL-X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)171; GISEL-X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)172; GISEL-X86-NEXT:    calll llroundf128173; GISEL-X86-NEXT:    addl $24, %esp174; GISEL-X86-NEXT:    popl %esi175; GISEL-X86-NEXT:    retl176;177; GISEL-X64-LABEL: test_llround_f128:178; GISEL-X64:       # %bb.0:179; GISEL-X64-NEXT:    pushq %rax180; GISEL-X64-NEXT:    callq llroundf128181; GISEL-X64-NEXT:    popq %rcx182; GISEL-X64-NEXT:    retq183  %conv = tail call i64 @llvm.llround.f128(fp128 %x)184  ret i64 %conv185}186 187; FIXME: crash188; define i64 @test_llround_i64_f16(half %x) nounwind {189;   %conv = call i64 @llvm.llround.i64.f16(half %x)190;   ret i64 %conv191; }192 193define i64 @test_llround_i64_f32(float %x) nounwind {194; X86-NOSSE-LABEL: test_llround_i64_f32:195; X86-NOSSE:       # %bb.0:196; X86-NOSSE-NEXT:    pushl %eax197; X86-NOSSE-NEXT:    flds {{[0-9]+}}(%esp)198; X86-NOSSE-NEXT:    fstps (%esp)199; X86-NOSSE-NEXT:    calll llroundf200; X86-NOSSE-NEXT:    popl %ecx201; X86-NOSSE-NEXT:    retl202;203; X86-SSE2-LABEL: test_llround_i64_f32:204; X86-SSE2:       # %bb.0:205; X86-SSE2-NEXT:    pushl %eax206; X86-SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero207; X86-SSE2-NEXT:    movss %xmm0, (%esp)208; X86-SSE2-NEXT:    calll llroundf209; X86-SSE2-NEXT:    popl %ecx210; X86-SSE2-NEXT:    retl211;212; X64-LABEL: test_llround_i64_f32:213; X64:       # %bb.0:214; X64-NEXT:    jmp llroundf@PLT # TAILCALL215;216; GISEL-X86-LABEL: test_llround_i64_f32:217; GISEL-X86:       # %bb.0:218; GISEL-X86-NEXT:    subl $12, %esp219; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax220; GISEL-X86-NEXT:    movl %eax, (%esp)221; GISEL-X86-NEXT:    calll llroundf222; GISEL-X86-NEXT:    addl $12, %esp223; GISEL-X86-NEXT:    retl224;225; GISEL-X64-LABEL: test_llround_i64_f32:226; GISEL-X64:       # %bb.0:227; GISEL-X64-NEXT:    pushq %rax228; GISEL-X64-NEXT:    callq llroundf229; GISEL-X64-NEXT:    popq %rcx230; GISEL-X64-NEXT:    retq231  %conv = call i64 @llvm.llround.i64.f32(float %x)232  ret i64 %conv233}234 235define i64 @test_llround_i64_f64(double %x) nounwind {236; X86-NOSSE-LABEL: test_llround_i64_f64:237; X86-NOSSE:       # %bb.0:238; X86-NOSSE-NEXT:    subl $8, %esp239; X86-NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)240; X86-NOSSE-NEXT:    fstpl (%esp)241; X86-NOSSE-NEXT:    calll llround242; X86-NOSSE-NEXT:    addl $8, %esp243; X86-NOSSE-NEXT:    retl244;245; X86-SSE2-LABEL: test_llround_i64_f64:246; X86-SSE2:       # %bb.0:247; X86-SSE2-NEXT:    subl $8, %esp248; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero249; X86-SSE2-NEXT:    movsd %xmm0, (%esp)250; X86-SSE2-NEXT:    calll llround251; X86-SSE2-NEXT:    addl $8, %esp252; X86-SSE2-NEXT:    retl253;254; X64-LABEL: test_llround_i64_f64:255; X64:       # %bb.0:256; X64-NEXT:    jmp llround@PLT # TAILCALL257;258; GISEL-X86-LABEL: test_llround_i64_f64:259; GISEL-X86:       # %bb.0:260; GISEL-X86-NEXT:    subl $12, %esp261; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax262; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx263; GISEL-X86-NEXT:    movl 4(%eax), %eax264; GISEL-X86-NEXT:    xorl %edx, %edx265; GISEL-X86-NEXT:    addl %esp, %edx266; GISEL-X86-NEXT:    movl %ecx, (%esp)267; GISEL-X86-NEXT:    movl %eax, 4(%edx)268; GISEL-X86-NEXT:    calll llround269; GISEL-X86-NEXT:    addl $12, %esp270; GISEL-X86-NEXT:    retl271;272; GISEL-X64-LABEL: test_llround_i64_f64:273; GISEL-X64:       # %bb.0:274; GISEL-X64-NEXT:    pushq %rax275; GISEL-X64-NEXT:    callq llround276; GISEL-X64-NEXT:    popq %rcx277; GISEL-X64-NEXT:    retq278  %conv = call i64 @llvm.llround.i64.f64(double %x)279  ret i64 %conv280}281 282define i64 @test_llround_i64_f80(x86_fp80 %x) nounwind {283; X86-LABEL: test_llround_i64_f80:284; X86:       # %bb.0:285; X86-NEXT:    subl $12, %esp286; X86-NEXT:    fldt {{[0-9]+}}(%esp)287; X86-NEXT:    fstpt (%esp)288; X86-NEXT:    calll llroundl289; X86-NEXT:    addl $12, %esp290; X86-NEXT:    retl291;292; X64-LABEL: test_llround_i64_f80:293; X64:       # %bb.0:294; X64-NEXT:    jmp llroundl@PLT # TAILCALL295;296; GISEL-X86-LABEL: test_llround_i64_f80:297; GISEL-X86:       # %bb.0:298; GISEL-X86-NEXT:    subl $12, %esp299; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)300; GISEL-X86-NEXT:    fstpt (%esp)301; GISEL-X86-NEXT:    calll llroundl302; GISEL-X86-NEXT:    addl $12, %esp303; GISEL-X86-NEXT:    retl304;305; GISEL-X64-LABEL: test_llround_i64_f80:306; GISEL-X64:       # %bb.0:307; GISEL-X64-NEXT:    subq $24, %rsp308; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)309; GISEL-X64-NEXT:    fstpt (%rsp)310; GISEL-X64-NEXT:    callq llroundl311; GISEL-X64-NEXT:    addq $24, %rsp312; GISEL-X64-NEXT:    retq313  %conv = call i64 @llvm.llround.i64.f80(x86_fp80 %x)314  ret i64 %conv315}316 317; FIXME(#44744): incorrect libcall318define i64 @test_llround_i64_f128(fp128 %x) nounwind {319; X86-LABEL: test_llround_i64_f128:320; X86:       # %bb.0:321; X86-NEXT:    pushl %ebp322; X86-NEXT:    movl %esp, %ebp323; X86-NEXT:    andl $-16, %esp324; X86-NEXT:    subl $16, %esp325; X86-NEXT:    pushl 20(%ebp)326; X86-NEXT:    pushl 16(%ebp)327; X86-NEXT:    pushl 12(%ebp)328; X86-NEXT:    pushl 8(%ebp)329; X86-NEXT:    calll llroundl330; X86-NEXT:    addl $16, %esp331; X86-NEXT:    movl %ebp, %esp332; X86-NEXT:    popl %ebp333; X86-NEXT:    retl334;335; X64-LABEL: test_llround_i64_f128:336; X64:       # %bb.0:337; X64-NEXT:    jmp llroundl@PLT # TAILCALL338;339; GISEL-X86-LABEL: test_llround_i64_f128:340; GISEL-X86:       # %bb.0:341; GISEL-X86-NEXT:    pushl %esi342; GISEL-X86-NEXT:    subl $24, %esp343; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax344; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx345; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx346; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi347; GISEL-X86-NEXT:    movl %eax, (%esp)348; GISEL-X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)349; GISEL-X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)350; GISEL-X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)351; GISEL-X86-NEXT:    calll llroundf128352; GISEL-X86-NEXT:    addl $24, %esp353; GISEL-X86-NEXT:    popl %esi354; GISEL-X86-NEXT:    retl355;356; GISEL-X64-LABEL: test_llround_i64_f128:357; GISEL-X64:       # %bb.0:358; GISEL-X64-NEXT:    pushq %rax359; GISEL-X64-NEXT:    callq llroundf128360; GISEL-X64-NEXT:    popq %rcx361; GISEL-X64-NEXT:    retq362  %conv = call i64 @llvm.llround.i64.f128(fp128 %x)363  ret i64 %conv364}365 366; FIXME: not yet implemented for global isel367; define i64 @test_llround_i64_f16_strict(half %x) nounwind strictfp {368;   %conv = call i64 @llvm.experimental.constrained.llround.i64.f16(half %x, metadata!"round.dynamic", metadata!"fpexcept.strict")369;   ret i64 %conv370; }371 372; define i64 @test_llround_i64_f32_strict(float %x) nounwind strictfp {373;   %conv = call i64 @llvm.experimental.constrained.llround.i64.f32(float %x, metadata!"round.dynamic", metadata!"fpexcept.strict")374;   ret i64 %conv375; }376 377; define i64 @test_llround_i64_f64_strict(double %x) nounwind strictfp {378;   %conv = call i64 @llvm.experimental.constrained.llround.i64.f64(double %x, metadata!"round.dynamic", metadata!"fpexcept.strict")379;   ret i64 %conv380; }381 382; define i64 @test_llround_i64_f80_strict(x86_fp80 %x) nounwind strictfp {383;   %conv = call i64 @llvm.experimental.constrained.llround.i64.f80(x86_fp80 %x, metadata!"round.dynamic", metadata!"fpexcept.strict")384;   ret i64 %conv385; }386 387; ; FIXME(#44744): incorrect libcall388; define i64 @test_llround_i64_f128_strict(fp128 %x) nounwind strictfp {389;   %conv = call i64 @llvm.experimental.constrained.llround.i64.f128(fp128 %x, metadata!"round.dynamic", metadata!"fpexcept.strict")390;   ret i64 %conv391; }392