brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.8 KiB · 5f38645 Raw
393 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=i686-unknown -mattr=avx | FileCheck %s --check-prefixes=X86,X86-AVX5; RUN: llc < %s -mtriple=i686-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X86,X86-AVX6; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefixes=X64,X64-SSE7; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx | FileCheck %s --check-prefixes=X64,X64-AVX8; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X64,X64-AVX9 10; FIXME: crash11; define i64 @test_llrint_i64_f16(half %x) nounwind {12; entry:13;   %0 = tail call i64 @llvm.llrint.i64.f16(half %x)14;   ret i64 %015; }16 17define i64 @test_llrint_i64_f32(float %x) nounwind {18; X86-NOSSE-LABEL: test_llrint_i64_f32:19; X86-NOSSE:       # %bb.0: # %entry20; X86-NOSSE-NEXT:    pushl %ebp21; X86-NOSSE-NEXT:    movl %esp, %ebp22; X86-NOSSE-NEXT:    andl $-8, %esp23; X86-NOSSE-NEXT:    subl $8, %esp24; X86-NOSSE-NEXT:    flds 8(%ebp)25; X86-NOSSE-NEXT:    fistpll (%esp)26; X86-NOSSE-NEXT:    movl (%esp), %eax27; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edx28; X86-NOSSE-NEXT:    movl %ebp, %esp29; X86-NOSSE-NEXT:    popl %ebp30; X86-NOSSE-NEXT:    retl31;32; X86-SSE2-LABEL: test_llrint_i64_f32:33; X86-SSE2:       # %bb.0: # %entry34; X86-SSE2-NEXT:    pushl %ebp35; X86-SSE2-NEXT:    movl %esp, %ebp36; X86-SSE2-NEXT:    andl $-8, %esp37; X86-SSE2-NEXT:    subl $8, %esp38; X86-SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero39; X86-SSE2-NEXT:    movss %xmm0, (%esp)40; X86-SSE2-NEXT:    flds (%esp)41; X86-SSE2-NEXT:    fistpll (%esp)42; X86-SSE2-NEXT:    movl (%esp), %eax43; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %edx44; X86-SSE2-NEXT:    movl %ebp, %esp45; X86-SSE2-NEXT:    popl %ebp46; X86-SSE2-NEXT:    retl47;48; X86-AVX-LABEL: test_llrint_i64_f32:49; X86-AVX:       # %bb.0: # %entry50; X86-AVX-NEXT:    pushl %ebp51; X86-AVX-NEXT:    movl %esp, %ebp52; X86-AVX-NEXT:    andl $-8, %esp53; X86-AVX-NEXT:    subl $8, %esp54; X86-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero55; X86-AVX-NEXT:    vmovss %xmm0, (%esp)56; X86-AVX-NEXT:    flds (%esp)57; X86-AVX-NEXT:    fistpll (%esp)58; X86-AVX-NEXT:    movl (%esp), %eax59; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %edx60; X86-AVX-NEXT:    movl %ebp, %esp61; X86-AVX-NEXT:    popl %ebp62; X86-AVX-NEXT:    retl63;64; X64-SSE-LABEL: test_llrint_i64_f32:65; X64-SSE:       # %bb.0: # %entry66; X64-SSE-NEXT:    cvtss2si %xmm0, %rax67; X64-SSE-NEXT:    retq68;69; X64-AVX-LABEL: test_llrint_i64_f32:70; X64-AVX:       # %bb.0: # %entry71; X64-AVX-NEXT:    vcvtss2si %xmm0, %rax72; X64-AVX-NEXT:    retq73entry:74  %0 = tail call i64 @llvm.llrint.i64.f32(float %x)75  ret i64 %076}77 78define i64 @test_llrint_i64_f64(double %x) nounwind {79; X86-NOSSE-LABEL: test_llrint_i64_f64:80; X86-NOSSE:       # %bb.0: # %entry81; X86-NOSSE-NEXT:    pushl %ebp82; X86-NOSSE-NEXT:    movl %esp, %ebp83; X86-NOSSE-NEXT:    andl $-8, %esp84; X86-NOSSE-NEXT:    subl $8, %esp85; X86-NOSSE-NEXT:    fldl 8(%ebp)86; X86-NOSSE-NEXT:    fistpll (%esp)87; X86-NOSSE-NEXT:    movl (%esp), %eax88; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edx89; X86-NOSSE-NEXT:    movl %ebp, %esp90; X86-NOSSE-NEXT:    popl %ebp91; X86-NOSSE-NEXT:    retl92;93; X86-SSE2-LABEL: test_llrint_i64_f64:94; X86-SSE2:       # %bb.0: # %entry95; X86-SSE2-NEXT:    pushl %ebp96; X86-SSE2-NEXT:    movl %esp, %ebp97; X86-SSE2-NEXT:    andl $-8, %esp98; X86-SSE2-NEXT:    subl $8, %esp99; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero100; X86-SSE2-NEXT:    movsd %xmm0, (%esp)101; X86-SSE2-NEXT:    fldl (%esp)102; X86-SSE2-NEXT:    fistpll (%esp)103; X86-SSE2-NEXT:    movl (%esp), %eax104; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %edx105; X86-SSE2-NEXT:    movl %ebp, %esp106; X86-SSE2-NEXT:    popl %ebp107; X86-SSE2-NEXT:    retl108;109; X86-AVX-LABEL: test_llrint_i64_f64:110; X86-AVX:       # %bb.0: # %entry111; X86-AVX-NEXT:    pushl %ebp112; X86-AVX-NEXT:    movl %esp, %ebp113; X86-AVX-NEXT:    andl $-8, %esp114; X86-AVX-NEXT:    subl $8, %esp115; X86-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero116; X86-AVX-NEXT:    vmovsd %xmm0, (%esp)117; X86-AVX-NEXT:    fldl (%esp)118; X86-AVX-NEXT:    fistpll (%esp)119; X86-AVX-NEXT:    movl (%esp), %eax120; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %edx121; X86-AVX-NEXT:    movl %ebp, %esp122; X86-AVX-NEXT:    popl %ebp123; X86-AVX-NEXT:    retl124;125; X64-SSE-LABEL: test_llrint_i64_f64:126; X64-SSE:       # %bb.0: # %entry127; X64-SSE-NEXT:    cvtsd2si %xmm0, %rax128; X64-SSE-NEXT:    retq129;130; X64-AVX-LABEL: test_llrint_i64_f64:131; X64-AVX:       # %bb.0: # %entry132; X64-AVX-NEXT:    vcvtsd2si %xmm0, %rax133; X64-AVX-NEXT:    retq134entry:135  %0 = tail call i64 @llvm.llrint.i64.f64(double %x)136  ret i64 %0137}138 139define i64 @test_llrint_i64_f80(x86_fp80 %x) nounwind {140; X86-LABEL: test_llrint_i64_f80:141; X86:       # %bb.0: # %entry142; X86-NEXT:    pushl %ebp143; X86-NEXT:    movl %esp, %ebp144; X86-NEXT:    andl $-8, %esp145; X86-NEXT:    subl $8, %esp146; X86-NEXT:    fldt 8(%ebp)147; X86-NEXT:    fistpll (%esp)148; X86-NEXT:    movl (%esp), %eax149; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx150; X86-NEXT:    movl %ebp, %esp151; X86-NEXT:    popl %ebp152; X86-NEXT:    retl153;154; X64-LABEL: test_llrint_i64_f80:155; X64:       # %bb.0: # %entry156; X64-NEXT:    fldt {{[0-9]+}}(%rsp)157; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)158; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax159; X64-NEXT:    retq160entry:161  %0 = tail call i64 @llvm.llrint.i64.f80(x86_fp80 %x)162  ret i64 %0163}164 165; FIXME(#44744): incorrect libcall166define i64 @test_llrint_i64_f128(fp128 %x) nounwind {167; X86-NOSSE-LABEL: test_llrint_i64_f128:168; X86-NOSSE:       # %bb.0: # %entry169; X86-NOSSE-NEXT:    pushl %ebp170; X86-NOSSE-NEXT:    movl %esp, %ebp171; X86-NOSSE-NEXT:    andl $-16, %esp172; X86-NOSSE-NEXT:    subl $16, %esp173; X86-NOSSE-NEXT:    pushl 20(%ebp)174; X86-NOSSE-NEXT:    pushl 16(%ebp)175; X86-NOSSE-NEXT:    pushl 12(%ebp)176; X86-NOSSE-NEXT:    pushl 8(%ebp)177; X86-NOSSE-NEXT:    calll llrintl178; X86-NOSSE-NEXT:    addl $16, %esp179; X86-NOSSE-NEXT:    movl %ebp, %esp180; X86-NOSSE-NEXT:    popl %ebp181; X86-NOSSE-NEXT:    retl182;183; X86-SSE2-LABEL: test_llrint_i64_f128:184; X86-SSE2:       # %bb.0: # %entry185; X86-SSE2-NEXT:    pushl %ebp186; X86-SSE2-NEXT:    movl %esp, %ebp187; X86-SSE2-NEXT:    andl $-16, %esp188; X86-SSE2-NEXT:    subl $16, %esp189; X86-SSE2-NEXT:    pushl 20(%ebp)190; X86-SSE2-NEXT:    pushl 16(%ebp)191; X86-SSE2-NEXT:    pushl 12(%ebp)192; X86-SSE2-NEXT:    pushl 8(%ebp)193; X86-SSE2-NEXT:    calll llrintl194; X86-SSE2-NEXT:    addl $16, %esp195; X86-SSE2-NEXT:    movl %ebp, %esp196; X86-SSE2-NEXT:    popl %ebp197; X86-SSE2-NEXT:    retl198;199; X86-AVX-LABEL: test_llrint_i64_f128:200; X86-AVX:       # %bb.0: # %entry201; X86-AVX-NEXT:    pushl %ebp202; X86-AVX-NEXT:    movl %esp, %ebp203; X86-AVX-NEXT:    andl $-16, %esp204; X86-AVX-NEXT:    subl $32, %esp205; X86-AVX-NEXT:    vmovups 8(%ebp), %xmm0206; X86-AVX-NEXT:    vmovups %xmm0, (%esp)207; X86-AVX-NEXT:    calll llrintl208; X86-AVX-NEXT:    movl %ebp, %esp209; X86-AVX-NEXT:    popl %ebp210; X86-AVX-NEXT:    retl211;212; X64-LABEL: test_llrint_i64_f128:213; X64:       # %bb.0: # %entry214; X64-NEXT:    jmp llrintl@PLT # TAILCALL215entry:216  %0 = tail call i64 @llvm.llrint.i64.f128(fp128 %x)217  ret i64 %0218}219 220; FIXME: crash221; define i64 @test_llrint_i64_f16_strict(half %x) nounwind strictfp {222; entry:223;   %0 = tail call i64 @llvm.experimental.constrained.llrint.i64.f16(half %x, metadata!"round.dynamic", metadata!"fpexcept.strict")224;   ret i64 %0225; }226 227define i64 @test_llrint_i64_f32_strict(float %x) nounwind strictfp {228; X86-NOSSE-LABEL: test_llrint_i64_f32_strict:229; X86-NOSSE:       # %bb.0: # %entry230; X86-NOSSE-NEXT:    pushl %eax231; X86-NOSSE-NEXT:    flds {{[0-9]+}}(%esp)232; X86-NOSSE-NEXT:    fstps (%esp)233; X86-NOSSE-NEXT:    wait234; X86-NOSSE-NEXT:    calll llrintf235; X86-NOSSE-NEXT:    popl %ecx236; X86-NOSSE-NEXT:    retl237;238; X86-SSE2-LABEL: test_llrint_i64_f32_strict:239; X86-SSE2:       # %bb.0: # %entry240; X86-SSE2-NEXT:    pushl %eax241; X86-SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero242; X86-SSE2-NEXT:    movss %xmm0, (%esp)243; X86-SSE2-NEXT:    calll llrintf244; X86-SSE2-NEXT:    popl %ecx245; X86-SSE2-NEXT:    retl246;247; X86-AVX-LABEL: test_llrint_i64_f32_strict:248; X86-AVX:       # %bb.0: # %entry249; X86-AVX-NEXT:    pushl %eax250; X86-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero251; X86-AVX-NEXT:    vmovss %xmm0, (%esp)252; X86-AVX-NEXT:    calll llrintf253; X86-AVX-NEXT:    popl %ecx254; X86-AVX-NEXT:    retl255;256; X64-LABEL: test_llrint_i64_f32_strict:257; X64:       # %bb.0: # %entry258; X64-NEXT:    pushq %rax259; X64-NEXT:    callq llrintf@PLT260; X64-NEXT:    popq %rcx261; X64-NEXT:    retq262entry:263  %0 = tail call i64 @llvm.experimental.constrained.llrint.i64.f32(float %x, metadata!"round.dynamic", metadata!"fpexcept.strict")264  ret i64 %0265}266 267define i64 @test_llrint_i64_f64_strict(double %x) nounwind strictfp {268; X86-NOSSE-LABEL: test_llrint_i64_f64_strict:269; X86-NOSSE:       # %bb.0: # %entry270; X86-NOSSE-NEXT:    subl $8, %esp271; X86-NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)272; X86-NOSSE-NEXT:    fstpl (%esp)273; X86-NOSSE-NEXT:    wait274; X86-NOSSE-NEXT:    calll llrint275; X86-NOSSE-NEXT:    addl $8, %esp276; X86-NOSSE-NEXT:    retl277;278; X86-SSE2-LABEL: test_llrint_i64_f64_strict:279; X86-SSE2:       # %bb.0: # %entry280; X86-SSE2-NEXT:    subl $8, %esp281; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero282; X86-SSE2-NEXT:    movsd %xmm0, (%esp)283; X86-SSE2-NEXT:    calll llrint284; X86-SSE2-NEXT:    addl $8, %esp285; X86-SSE2-NEXT:    retl286;287; X86-AVX-LABEL: test_llrint_i64_f64_strict:288; X86-AVX:       # %bb.0: # %entry289; X86-AVX-NEXT:    subl $8, %esp290; X86-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero291; X86-AVX-NEXT:    vmovsd %xmm0, (%esp)292; X86-AVX-NEXT:    calll llrint293; X86-AVX-NEXT:    addl $8, %esp294; X86-AVX-NEXT:    retl295;296; X64-LABEL: test_llrint_i64_f64_strict:297; X64:       # %bb.0: # %entry298; X64-NEXT:    pushq %rax299; X64-NEXT:    callq llrint@PLT300; X64-NEXT:    popq %rcx301; X64-NEXT:    retq302entry:303  %0 = tail call i64 @llvm.experimental.constrained.llrint.i64.f64(double %x, metadata!"round.dynamic", metadata!"fpexcept.strict")304  ret i64 %0305}306 307define i64 @test_llrint_i64_f80_strict(x86_fp80 %x) nounwind strictfp {308; X86-LABEL: test_llrint_i64_f80_strict:309; X86:       # %bb.0: # %entry310; X86-NEXT:    subl $12, %esp311; X86-NEXT:    fldt {{[0-9]+}}(%esp)312; X86-NEXT:    fstpt (%esp)313; X86-NEXT:    wait314; X86-NEXT:    calll llrintl315; X86-NEXT:    addl $12, %esp316; X86-NEXT:    retl317;318; X64-LABEL: test_llrint_i64_f80_strict:319; X64:       # %bb.0: # %entry320; X64-NEXT:    subq $24, %rsp321; X64-NEXT:    fldt {{[0-9]+}}(%rsp)322; X64-NEXT:    fstpt (%rsp)323; X64-NEXT:    wait324; X64-NEXT:    callq llrintl@PLT325; X64-NEXT:    addq $24, %rsp326; X64-NEXT:    retq327entry:328  %0 = tail call i64 @llvm.experimental.constrained.llrint.i64.f80(x86_fp80 %x, metadata!"round.dynamic", metadata!"fpexcept.strict")329  ret i64 %0330}331 332; FIXME(#44744): incorrect libcall333define i64 @test_llrint_i64_f128_strict(fp128 %x) nounwind strictfp {334; X86-NOSSE-LABEL: test_llrint_i64_f128_strict:335; X86-NOSSE:       # %bb.0: # %entry336; X86-NOSSE-NEXT:    pushl %ebp337; X86-NOSSE-NEXT:    movl %esp, %ebp338; X86-NOSSE-NEXT:    andl $-16, %esp339; X86-NOSSE-NEXT:    subl $16, %esp340; X86-NOSSE-NEXT:    pushl 20(%ebp)341; X86-NOSSE-NEXT:    pushl 16(%ebp)342; X86-NOSSE-NEXT:    pushl 12(%ebp)343; X86-NOSSE-NEXT:    pushl 8(%ebp)344; X86-NOSSE-NEXT:    calll llrintl345; X86-NOSSE-NEXT:    addl $16, %esp346; X86-NOSSE-NEXT:    movl %ebp, %esp347; X86-NOSSE-NEXT:    popl %ebp348; X86-NOSSE-NEXT:    retl349;350; X86-SSE2-LABEL: test_llrint_i64_f128_strict:351; X86-SSE2:       # %bb.0: # %entry352; X86-SSE2-NEXT:    pushl %ebp353; X86-SSE2-NEXT:    movl %esp, %ebp354; X86-SSE2-NEXT:    andl $-16, %esp355; X86-SSE2-NEXT:    subl $16, %esp356; X86-SSE2-NEXT:    pushl 20(%ebp)357; X86-SSE2-NEXT:    pushl 16(%ebp)358; X86-SSE2-NEXT:    pushl 12(%ebp)359; X86-SSE2-NEXT:    pushl 8(%ebp)360; X86-SSE2-NEXT:    calll llrintl361; X86-SSE2-NEXT:    addl $16, %esp362; X86-SSE2-NEXT:    movl %ebp, %esp363; X86-SSE2-NEXT:    popl %ebp364; X86-SSE2-NEXT:    retl365;366; X86-AVX-LABEL: test_llrint_i64_f128_strict:367; X86-AVX:       # %bb.0: # %entry368; X86-AVX-NEXT:    pushl %ebp369; X86-AVX-NEXT:    movl %esp, %ebp370; X86-AVX-NEXT:    andl $-16, %esp371; X86-AVX-NEXT:    subl $32, %esp372; X86-AVX-NEXT:    vmovups 8(%ebp), %xmm0373; X86-AVX-NEXT:    vmovups %xmm0, (%esp)374; X86-AVX-NEXT:    calll llrintl375; X86-AVX-NEXT:    movl %ebp, %esp376; X86-AVX-NEXT:    popl %ebp377; X86-AVX-NEXT:    retl378;379; X64-LABEL: test_llrint_i64_f128_strict:380; X64:       # %bb.0: # %entry381; X64-NEXT:    pushq %rax382; X64-NEXT:    callq llrintl@PLT383; X64-NEXT:    popq %rcx384; X64-NEXT:    retq385entry:386  %0 = tail call i64 @llvm.experimental.constrained.llrint.i64.f128(fp128 %x, metadata!"round.dynamic", metadata!"fpexcept.strict")387  ret i64 %0388}389 390declare i64 @llvm.llrint.i64.f32(float) nounwind readnone391declare i64 @llvm.llrint.i64.f64(double) nounwind readnone392declare i64 @llvm.llrint.i64.f80(x86_fp80) nounwind readnone393