133 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,DAG-X643; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X644; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X865; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X866; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X647; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X868 9define float @trunc_f32(float %a) nounwind readnone {10; DAG-X64-LABEL: trunc_f32:11; DAG-X64: # %bb.0:12; DAG-X64-NEXT: jmp truncf@PLT # TAILCALL13;14; FASTISEL-X64-LABEL: trunc_f32:15; FASTISEL-X64: # %bb.0:16; FASTISEL-X64-NEXT: pushq %rax17; FASTISEL-X64-NEXT: callq truncf@PLT18; FASTISEL-X64-NEXT: popq %rax19; FASTISEL-X64-NEXT: retq20;21; X86-LABEL: trunc_f32:22; X86: # %bb.0:23; X86-NEXT: subl $12, %esp24; X86-NEXT: flds {{[0-9]+}}(%esp)25; X86-NEXT: fstps (%esp)26; X86-NEXT: calll truncf27; X86-NEXT: addl $12, %esp28; X86-NEXT: retl29;30; GISEL-X64-LABEL: trunc_f32:31; GISEL-X64: # %bb.0:32; GISEL-X64-NEXT: pushq %rax33; GISEL-X64-NEXT: callq truncf34; GISEL-X64-NEXT: popq %rax35; GISEL-X64-NEXT: retq36;37; GISEL-X86-LABEL: trunc_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 truncf43; GISEL-X86-NEXT: addl $12, %esp44; GISEL-X86-NEXT: retl45 %c = call float @llvm.trunc.f32(float %a)46 ret float %c47}48 49define double @trunc_f64(double %a) nounwind readnone {50; DAG-X64-LABEL: trunc_f64:51; DAG-X64: # %bb.0:52; DAG-X64-NEXT: jmp trunc@PLT # TAILCALL53;54; FASTISEL-X64-LABEL: trunc_f64:55; FASTISEL-X64: # %bb.0:56; FASTISEL-X64-NEXT: pushq %rax57; FASTISEL-X64-NEXT: callq trunc@PLT58; FASTISEL-X64-NEXT: popq %rax59; FASTISEL-X64-NEXT: retq60;61; X86-LABEL: trunc_f64:62; X86: # %bb.0:63; X86-NEXT: subl $12, %esp64; X86-NEXT: fldl {{[0-9]+}}(%esp)65; X86-NEXT: fstpl (%esp)66; X86-NEXT: calll trunc67; X86-NEXT: addl $12, %esp68; X86-NEXT: retl69;70; GISEL-X64-LABEL: trunc_f64:71; GISEL-X64: # %bb.0:72; GISEL-X64-NEXT: pushq %rax73; GISEL-X64-NEXT: callq trunc74; GISEL-X64-NEXT: popq %rax75; GISEL-X64-NEXT: retq76;77; GISEL-X86-LABEL: trunc_f64:78; GISEL-X86: # %bb.0:79; GISEL-X86-NEXT: subl $12, %esp80; GISEL-X86-NEXT: leal {{[0-9]+}}(%esp), %eax81; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx82; GISEL-X86-NEXT: movl 4(%eax), %eax83; GISEL-X86-NEXT: xorl %edx, %edx84; GISEL-X86-NEXT: addl %esp, %edx85; GISEL-X86-NEXT: movl %ecx, (%esp)86; GISEL-X86-NEXT: movl %eax, 4(%edx)87; GISEL-X86-NEXT: calll trunc88; GISEL-X86-NEXT: addl $12, %esp89; GISEL-X86-NEXT: retl90 %c = call double @llvm.trunc.f64(double %a)91 ret double %c92}93 94define x86_fp80 @trunc_f80(x86_fp80 %a) nounwind readnone {95; X64-LABEL: trunc_f80:96; X64: # %bb.0:97; X64-NEXT: subq $24, %rsp98; X64-NEXT: fldt {{[0-9]+}}(%rsp)99; X64-NEXT: fstpt (%rsp)100; X64-NEXT: callq truncl@PLT101; X64-NEXT: addq $24, %rsp102; X64-NEXT: retq103;104; X86-LABEL: trunc_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 truncl110; X86-NEXT: addl $12, %esp111; X86-NEXT: retl112;113; GISEL-X64-LABEL: trunc_f80:114; GISEL-X64: # %bb.0:115; GISEL-X64-NEXT: subq $24, %rsp116; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)117; GISEL-X64-NEXT: fstpt (%rsp)118; GISEL-X64-NEXT: callq truncl119; GISEL-X64-NEXT: addq $24, %rsp120; GISEL-X64-NEXT: retq121;122; GISEL-X86-LABEL: trunc_f80:123; GISEL-X86: # %bb.0:124; GISEL-X86-NEXT: subl $12, %esp125; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)126; GISEL-X86-NEXT: fstpt (%esp)127; GISEL-X86-NEXT: calll truncl128; GISEL-X86-NEXT: addl $12, %esp129; GISEL-X86-NEXT: retl130 %c = call x86_fp80 @llvm.trunc.f80(x86_fp80 %a)131 ret x86_fp80 %c132}133