brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · 389f292 Raw
181 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 i32 @test_lround_i32_f16(half %x) nounwind {10;   %conv = tail call i32 @llvm.lround.i32.f16(half %x)11;   ret i32 %conv12; }13 14define i32 @test_lround_i32_f32(float %x) nounwind {15; X86-LABEL: test_lround_i32_f32:16; X86:       # %bb.0:17; X86-NEXT:    jmp lroundf # TAILCALL18;19; X64-LABEL: test_lround_i32_f32:20; X64:       # %bb.0:21; X64-NEXT:    jmp lroundf@PLT # TAILCALL22;23; GISEL-X86-LABEL: test_lround_i32_f32:24; GISEL-X86:       # %bb.0:25; GISEL-X86-NEXT:    subl $12, %esp26; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax27; GISEL-X86-NEXT:    movl %eax, (%esp)28; GISEL-X86-NEXT:    calll lroundf29; GISEL-X86-NEXT:    addl $12, %esp30; GISEL-X86-NEXT:    retl31;32; GISEL-X64-LABEL: test_lround_i32_f32:33; GISEL-X64:       # %bb.0:34; GISEL-X64-NEXT:    pushq %rax35; GISEL-X64-NEXT:    callq lroundf36; GISEL-X64-NEXT:    popq %rcx37; GISEL-X64-NEXT:    retq38  %conv = tail call i32 @llvm.lround.i32.f32(float %x)39  ret i32 %conv40}41 42define i32 @test_lround_i32_f64(double %x) nounwind {43; X86-LABEL: test_lround_i32_f64:44; X86:       # %bb.0:45; X86-NEXT:    jmp lround # TAILCALL46;47; X64-LABEL: test_lround_i32_f64:48; X64:       # %bb.0:49; X64-NEXT:    jmp lround@PLT # TAILCALL50;51; GISEL-X86-LABEL: test_lround_i32_f64:52; GISEL-X86:       # %bb.0:53; GISEL-X86-NEXT:    subl $12, %esp54; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax55; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx56; GISEL-X86-NEXT:    movl 4(%eax), %eax57; GISEL-X86-NEXT:    xorl %edx, %edx58; GISEL-X86-NEXT:    addl %esp, %edx59; GISEL-X86-NEXT:    movl %ecx, (%esp)60; GISEL-X86-NEXT:    movl %eax, 4(%edx)61; GISEL-X86-NEXT:    calll lround62; GISEL-X86-NEXT:    addl $12, %esp63; GISEL-X86-NEXT:    retl64;65; GISEL-X64-LABEL: test_lround_i32_f64:66; GISEL-X64:       # %bb.0:67; GISEL-X64-NEXT:    pushq %rax68; GISEL-X64-NEXT:    callq lround69; GISEL-X64-NEXT:    popq %rcx70; GISEL-X64-NEXT:    retq71  %conv = tail call i32 @llvm.lround.i32.f64(double %x)72  ret i32 %conv73}74 75define i32 @test_lround_i32_f80(x86_fp80 %x) nounwind {76; X86-LABEL: test_lround_i32_f80:77; X86:       # %bb.0:78; X86-NEXT:    jmp lroundl # TAILCALL79;80; X64-LABEL: test_lround_i32_f80:81; X64:       # %bb.0:82; X64-NEXT:    jmp lroundl@PLT # TAILCALL83;84; GISEL-X86-LABEL: test_lround_i32_f80:85; GISEL-X86:       # %bb.0:86; GISEL-X86-NEXT:    subl $12, %esp87; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)88; GISEL-X86-NEXT:    fstpt (%esp)89; GISEL-X86-NEXT:    calll lroundl90; GISEL-X86-NEXT:    addl $12, %esp91; GISEL-X86-NEXT:    retl92;93; GISEL-X64-LABEL: test_lround_i32_f80:94; GISEL-X64:       # %bb.0:95; GISEL-X64-NEXT:    subq $24, %rsp96; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)97; GISEL-X64-NEXT:    fstpt (%rsp)98; GISEL-X64-NEXT:    callq lroundl99; GISEL-X64-NEXT:    addq $24, %rsp100; GISEL-X64-NEXT:    retq101  %conv = tail call i32 @llvm.lround.i32.f80(x86_fp80 %x)102  ret i32 %conv103}104 105define i32 @test_lround_i32_f128(fp128 %x) nounwind {106; X86-LABEL: test_lround_i32_f128:107; X86:       # %bb.0:108; X86-NEXT:    pushl %ebp109; X86-NEXT:    movl %esp, %ebp110; X86-NEXT:    andl $-16, %esp111; X86-NEXT:    subl $16, %esp112; X86-NEXT:    pushl 20(%ebp)113; X86-NEXT:    pushl 16(%ebp)114; X86-NEXT:    pushl 12(%ebp)115; X86-NEXT:    pushl 8(%ebp)116; X86-NEXT:    calll lroundl117; X86-NEXT:    addl $16, %esp118; X86-NEXT:    movl %ebp, %esp119; X86-NEXT:    popl %ebp120; X86-NEXT:    retl121;122; X64-LABEL: test_lround_i32_f128:123; X64:       # %bb.0:124; X64-NEXT:    jmp lroundl@PLT # TAILCALL125;126; GISEL-X86-LABEL: test_lround_i32_f128:127; GISEL-X86:       # %bb.0:128; GISEL-X86-NEXT:    pushl %esi129; GISEL-X86-NEXT:    subl $24, %esp130; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax131; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx132; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx133; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi134; GISEL-X86-NEXT:    movl %eax, (%esp)135; GISEL-X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)136; GISEL-X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)137; GISEL-X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)138; GISEL-X86-NEXT:    calll lroundf128139; GISEL-X86-NEXT:    addl $24, %esp140; GISEL-X86-NEXT:    popl %esi141; GISEL-X86-NEXT:    retl142;143; GISEL-X64-LABEL: test_lround_i32_f128:144; GISEL-X64:       # %bb.0:145; GISEL-X64-NEXT:    pushq %rax146; GISEL-X64-NEXT:    callq lroundf128147; GISEL-X64-NEXT:    popq %rcx148; GISEL-X64-NEXT:    retq149  %conv = tail call i32 @llvm.lround.i32.f128(fp128 %x)150  ret i32 %conv151}152 153; FIXME: not yet implemented in global isel154; define i32 @test_lround_i32_f16_strict(half %x) nounwind strictfp {155;   %conv = tail call i32 @llvm.experimental.constrained.lround.i32.f16(half %x, metadata!"round.dynamic", metadata!"fpexcept.strict")156;   ret i32 %conv157; }158 159; define i32 @test_lround_i32_f32_strict(float %x) nounwind strictfp {160;   %conv = tail call i32 @llvm.experimental.constrained.lround.i32.f32(float %x, metadata!"round.dynamic", metadata!"fpexcept.strict")161;   ret i32 %conv162; }163 164; define i32 @test_lround_i32_f64_strict(double %x) nounwind strictfp {165;   %conv = tail call i32 @llvm.experimental.constrained.lround.i32.f64(double %x, metadata!"round.dynamic", metadata!"fpexcept.strict")166;   ret i32 %conv167; }168 169; define i32 @test_lround_i32_f80_strict(x86_fp80 %x) nounwind strictfp {170;   %conv = tail call i32 @llvm.experimental.constrained.lround.i32.f80(x86_fp80 %x, metadata!"round.dynamic", metadata!"fpexcept.strict")171;   ret i32 %conv172; }173 174; define i32 @test_lround_i32_f128_strict(fp128 %x) nounwind strictfp {175;   %conv = tail call i32 @llvm.experimental.constrained.lround.i32.f128(fp128 %x, metadata!"round.dynamic", metadata!"fpexcept.strict")176;   ret i32 %conv177; }178;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:179; X86-NOSSE: {{.*}}180; X86-SSE2: {{.*}}181