157 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mcpu=generic -mattr=+avx512f -fast-isel --fast-isel-abort=1 < %s | FileCheck %s --check-prefix=AVX3; RUN: llc -verify-machineinstrs -mtriple=i686-unknown-unknown -mcpu=generic -mattr=+avx512f -fast-isel --fast-isel-abort=1 < %s | FileCheck %s --check-prefix=AVX_X864 5 6define double @int_to_double_rr(i32 %a) {7; AVX-LABEL: int_to_double_rr:8; AVX: # %bb.0: # %entry9; AVX-NEXT: vcvtusi2sd %edi, %xmm15, %xmm010; AVX-NEXT: retq11;12; AVX_X86-LABEL: int_to_double_rr:13; AVX_X86: # %bb.0: # %entry14; AVX_X86-NEXT: pushl %ebp15; AVX_X86-NEXT: .cfi_def_cfa_offset 816; AVX_X86-NEXT: .cfi_offset %ebp, -817; AVX_X86-NEXT: movl %esp, %ebp18; AVX_X86-NEXT: .cfi_def_cfa_register %ebp19; AVX_X86-NEXT: andl $-8, %esp20; AVX_X86-NEXT: subl $8, %esp21; AVX_X86-NEXT: vcvtusi2sdl 8(%ebp), %xmm7, %xmm022; AVX_X86-NEXT: vmovsd %xmm0, (%esp)23; AVX_X86-NEXT: fldl (%esp)24; AVX_X86-NEXT: movl %ebp, %esp25; AVX_X86-NEXT: popl %ebp26; AVX_X86-NEXT: .cfi_def_cfa %esp, 427; AVX_X86-NEXT: retl28entry:29 %0 = uitofp i32 %a to double30 ret double %031}32 33define double @int_to_double_rm(ptr %a) {34; AVX-LABEL: int_to_double_rm:35; AVX: # %bb.0: # %entry36; AVX-NEXT: vcvtusi2sdl (%rdi), %xmm15, %xmm037; AVX-NEXT: retq38;39; AVX_X86-LABEL: int_to_double_rm:40; AVX_X86: # %bb.0: # %entry41; AVX_X86-NEXT: pushl %ebp42; AVX_X86-NEXT: .cfi_def_cfa_offset 843; AVX_X86-NEXT: .cfi_offset %ebp, -844; AVX_X86-NEXT: movl %esp, %ebp45; AVX_X86-NEXT: .cfi_def_cfa_register %ebp46; AVX_X86-NEXT: andl $-8, %esp47; AVX_X86-NEXT: subl $8, %esp48; AVX_X86-NEXT: movl 8(%ebp), %eax49; AVX_X86-NEXT: vcvtusi2sdl (%eax), %xmm7, %xmm050; AVX_X86-NEXT: vmovsd %xmm0, (%esp)51; AVX_X86-NEXT: fldl (%esp)52; AVX_X86-NEXT: movl %ebp, %esp53; AVX_X86-NEXT: popl %ebp54; AVX_X86-NEXT: .cfi_def_cfa %esp, 455; AVX_X86-NEXT: retl56entry:57 %0 = load i32, ptr %a58 %1 = uitofp i32 %0 to double59 ret double %160}61 62define double @int_to_double_rm_optsize(ptr %a) optsize {63; AVX-LABEL: int_to_double_rm_optsize:64; AVX: # %bb.0: # %entry65; AVX-NEXT: vcvtusi2sdl (%rdi), %xmm15, %xmm066; AVX-NEXT: retq67;68; AVX_X86-LABEL: int_to_double_rm_optsize:69; AVX_X86: # %bb.0: # %entry70; AVX_X86-NEXT: pushl %ebp71; AVX_X86-NEXT: .cfi_def_cfa_offset 872; AVX_X86-NEXT: .cfi_offset %ebp, -873; AVX_X86-NEXT: movl %esp, %ebp74; AVX_X86-NEXT: .cfi_def_cfa_register %ebp75; AVX_X86-NEXT: andl $-8, %esp76; AVX_X86-NEXT: subl $8, %esp77; AVX_X86-NEXT: movl 8(%ebp), %eax78; AVX_X86-NEXT: vcvtusi2sdl (%eax), %xmm7, %xmm079; AVX_X86-NEXT: vmovsd %xmm0, (%esp)80; AVX_X86-NEXT: fldl (%esp)81; AVX_X86-NEXT: movl %ebp, %esp82; AVX_X86-NEXT: popl %ebp83; AVX_X86-NEXT: .cfi_def_cfa %esp, 484; AVX_X86-NEXT: retl85entry:86 %0 = load i32, ptr %a87 %1 = uitofp i32 %0 to double88 ret double %189}90 91define float @int_to_float_rr(i32 %a) {92; AVX-LABEL: int_to_float_rr:93; AVX: # %bb.0: # %entry94; AVX-NEXT: vcvtusi2ss %edi, %xmm15, %xmm095; AVX-NEXT: retq96;97; AVX_X86-LABEL: int_to_float_rr:98; AVX_X86: # %bb.0: # %entry99; AVX_X86-NEXT: pushl %eax100; AVX_X86-NEXT: .cfi_def_cfa_offset 8101; AVX_X86-NEXT: vcvtusi2ssl {{[0-9]+}}(%esp), %xmm7, %xmm0102; AVX_X86-NEXT: vmovss %xmm0, (%esp)103; AVX_X86-NEXT: flds (%esp)104; AVX_X86-NEXT: popl %eax105; AVX_X86-NEXT: .cfi_def_cfa_offset 4106; AVX_X86-NEXT: retl107entry:108 %0 = uitofp i32 %a to float109 ret float %0110}111 112define float @int_to_float_rm(ptr %a) {113; AVX-LABEL: int_to_float_rm:114; AVX: # %bb.0: # %entry115; AVX-NEXT: vcvtusi2ssl (%rdi), %xmm15, %xmm0116; AVX-NEXT: retq117;118; AVX_X86-LABEL: int_to_float_rm:119; AVX_X86: # %bb.0: # %entry120; AVX_X86-NEXT: pushl %eax121; AVX_X86-NEXT: .cfi_def_cfa_offset 8122; AVX_X86-NEXT: movl {{[0-9]+}}(%esp), %eax123; AVX_X86-NEXT: vcvtusi2ssl (%eax), %xmm7, %xmm0124; AVX_X86-NEXT: vmovss %xmm0, (%esp)125; AVX_X86-NEXT: flds (%esp)126; AVX_X86-NEXT: popl %eax127; AVX_X86-NEXT: .cfi_def_cfa_offset 4128; AVX_X86-NEXT: retl129entry:130 %0 = load i32, ptr %a131 %1 = uitofp i32 %0 to float132 ret float %1133}134 135define float @int_to_float_rm_optsize(ptr %a) optsize {136; AVX-LABEL: int_to_float_rm_optsize:137; AVX: # %bb.0: # %entry138; AVX-NEXT: vcvtusi2ssl (%rdi), %xmm15, %xmm0139; AVX-NEXT: retq140;141; AVX_X86-LABEL: int_to_float_rm_optsize:142; AVX_X86: # %bb.0: # %entry143; AVX_X86-NEXT: pushl %eax144; AVX_X86-NEXT: .cfi_def_cfa_offset 8145; AVX_X86-NEXT: movl {{[0-9]+}}(%esp), %eax146; AVX_X86-NEXT: vcvtusi2ssl (%eax), %xmm7, %xmm0147; AVX_X86-NEXT: vmovss %xmm0, (%esp)148; AVX_X86-NEXT: flds (%esp)149; AVX_X86-NEXT: popl %eax150; AVX_X86-NEXT: .cfi_def_cfa_offset 4151; AVX_X86-NEXT: retl152entry:153 %0 = load i32, ptr %a154 %1 = uitofp i32 %0 to float155 ret float %1156}157