1390 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefixes=SSE-X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefixes=SSE-X644; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=AVX-X86,AVX1-X865; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=AVX-X64,AVX1-X646; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=AVX-X86,AVX512-X867; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=AVX-X64,AVX512-X648; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=-sse -O3 | FileCheck %s --check-prefixes=X879 10declare float @llvm.experimental.constrained.sitofp.f32.i1(i1, metadata, metadata)11declare float @llvm.experimental.constrained.sitofp.f32.i8(i8, metadata, metadata)12declare float @llvm.experimental.constrained.sitofp.f32.i16(i16, metadata, metadata)13declare float @llvm.experimental.constrained.sitofp.f32.i32(i32, metadata, metadata)14declare float @llvm.experimental.constrained.sitofp.f32.i64(i64, metadata, metadata)15declare float @llvm.experimental.constrained.uitofp.f32.i1(i1, metadata, metadata)16declare float @llvm.experimental.constrained.uitofp.f32.i8(i8, metadata, metadata)17declare float @llvm.experimental.constrained.uitofp.f32.i16(i16, metadata, metadata)18declare float @llvm.experimental.constrained.uitofp.f32.i32(i32, metadata, metadata)19declare float @llvm.experimental.constrained.uitofp.f32.i64(i64, metadata, metadata)20 21declare double @llvm.experimental.constrained.sitofp.f64.i1(i1, metadata, metadata)22declare double @llvm.experimental.constrained.sitofp.f64.i8(i8, metadata, metadata)23declare double @llvm.experimental.constrained.sitofp.f64.i16(i16, metadata, metadata)24declare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)25declare double @llvm.experimental.constrained.sitofp.f64.i64(i64, metadata, metadata)26declare double @llvm.experimental.constrained.uitofp.f64.i1(i1, metadata, metadata)27declare double @llvm.experimental.constrained.uitofp.f64.i8(i8, metadata, metadata)28declare double @llvm.experimental.constrained.uitofp.f64.i16(i16, metadata, metadata)29declare double @llvm.experimental.constrained.uitofp.f64.i32(i32, metadata, metadata)30declare double @llvm.experimental.constrained.uitofp.f64.i64(i64, metadata, metadata)31 32define float @sitofp_i1tof32(i1 %x) #0 {33; SSE-X86-LABEL: sitofp_i1tof32:34; SSE-X86: # %bb.0:35; SSE-X86-NEXT: pushl %eax36; SSE-X86-NEXT: .cfi_def_cfa_offset 837; SSE-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax38; SSE-X86-NEXT: andb $1, %al39; SSE-X86-NEXT: negb %al40; SSE-X86-NEXT: movsbl %al, %eax41; SSE-X86-NEXT: cvtsi2ss %eax, %xmm042; SSE-X86-NEXT: movss %xmm0, (%esp)43; SSE-X86-NEXT: flds (%esp)44; SSE-X86-NEXT: wait45; SSE-X86-NEXT: popl %eax46; SSE-X86-NEXT: .cfi_def_cfa_offset 447; SSE-X86-NEXT: retl48;49; SSE-X64-LABEL: sitofp_i1tof32:50; SSE-X64: # %bb.0:51; SSE-X64-NEXT: andb $1, %dil52; SSE-X64-NEXT: negb %dil53; SSE-X64-NEXT: movsbl %dil, %eax54; SSE-X64-NEXT: cvtsi2ss %eax, %xmm055; SSE-X64-NEXT: retq56;57; AVX-X86-LABEL: sitofp_i1tof32:58; AVX-X86: # %bb.0:59; AVX-X86-NEXT: pushl %eax60; AVX-X86-NEXT: .cfi_def_cfa_offset 861; AVX-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax62; AVX-X86-NEXT: andb $1, %al63; AVX-X86-NEXT: negb %al64; AVX-X86-NEXT: movsbl %al, %eax65; AVX-X86-NEXT: vcvtsi2ss %eax, %xmm7, %xmm066; AVX-X86-NEXT: vmovss %xmm0, (%esp)67; AVX-X86-NEXT: flds (%esp)68; AVX-X86-NEXT: wait69; AVX-X86-NEXT: popl %eax70; AVX-X86-NEXT: .cfi_def_cfa_offset 471; AVX-X86-NEXT: retl72;73; AVX-X64-LABEL: sitofp_i1tof32:74; AVX-X64: # %bb.0:75; AVX-X64-NEXT: andb $1, %dil76; AVX-X64-NEXT: negb %dil77; AVX-X64-NEXT: movsbl %dil, %eax78; AVX-X64-NEXT: vcvtsi2ss %eax, %xmm15, %xmm079; AVX-X64-NEXT: retq80;81; X87-LABEL: sitofp_i1tof32:82; X87: # %bb.0:83; X87-NEXT: pushl %eax84; X87-NEXT: .cfi_def_cfa_offset 885; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax86; X87-NEXT: andb $1, %al87; X87-NEXT: negb %al88; X87-NEXT: movsbl %al, %eax89; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)90; X87-NEXT: filds {{[0-9]+}}(%esp)91; X87-NEXT: wait92; X87-NEXT: popl %eax93; X87-NEXT: .cfi_def_cfa_offset 494; X87-NEXT: retl95 %result = call float @llvm.experimental.constrained.sitofp.f32.i1(i1 %x,96 metadata !"round.dynamic",97 metadata !"fpexcept.strict") #098 ret float %result99}100 101define float @sitofp_i8tof32(i8 %x) #0 {102; SSE-X86-LABEL: sitofp_i8tof32:103; SSE-X86: # %bb.0:104; SSE-X86-NEXT: pushl %eax105; SSE-X86-NEXT: .cfi_def_cfa_offset 8106; SSE-X86-NEXT: movsbl {{[0-9]+}}(%esp), %eax107; SSE-X86-NEXT: cvtsi2ss %eax, %xmm0108; SSE-X86-NEXT: movss %xmm0, (%esp)109; SSE-X86-NEXT: flds (%esp)110; SSE-X86-NEXT: wait111; SSE-X86-NEXT: popl %eax112; SSE-X86-NEXT: .cfi_def_cfa_offset 4113; SSE-X86-NEXT: retl114;115; SSE-X64-LABEL: sitofp_i8tof32:116; SSE-X64: # %bb.0:117; SSE-X64-NEXT: movsbl %dil, %eax118; SSE-X64-NEXT: cvtsi2ss %eax, %xmm0119; SSE-X64-NEXT: retq120;121; AVX-X86-LABEL: sitofp_i8tof32:122; AVX-X86: # %bb.0:123; AVX-X86-NEXT: pushl %eax124; AVX-X86-NEXT: .cfi_def_cfa_offset 8125; AVX-X86-NEXT: movsbl {{[0-9]+}}(%esp), %eax126; AVX-X86-NEXT: vcvtsi2ss %eax, %xmm7, %xmm0127; AVX-X86-NEXT: vmovss %xmm0, (%esp)128; AVX-X86-NEXT: flds (%esp)129; AVX-X86-NEXT: wait130; AVX-X86-NEXT: popl %eax131; AVX-X86-NEXT: .cfi_def_cfa_offset 4132; AVX-X86-NEXT: retl133;134; AVX-X64-LABEL: sitofp_i8tof32:135; AVX-X64: # %bb.0:136; AVX-X64-NEXT: movsbl %dil, %eax137; AVX-X64-NEXT: vcvtsi2ss %eax, %xmm15, %xmm0138; AVX-X64-NEXT: retq139;140; X87-LABEL: sitofp_i8tof32:141; X87: # %bb.0:142; X87-NEXT: pushl %eax143; X87-NEXT: .cfi_def_cfa_offset 8144; X87-NEXT: movsbl {{[0-9]+}}(%esp), %eax145; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)146; X87-NEXT: filds {{[0-9]+}}(%esp)147; X87-NEXT: wait148; X87-NEXT: popl %eax149; X87-NEXT: .cfi_def_cfa_offset 4150; X87-NEXT: retl151 %result = call float @llvm.experimental.constrained.sitofp.f32.i8(i8 %x,152 metadata !"round.dynamic",153 metadata !"fpexcept.strict") #0154 ret float %result155}156 157define float @sitofp_i16tof32(i16 %x) #0 {158; SSE-X86-LABEL: sitofp_i16tof32:159; SSE-X86: # %bb.0:160; SSE-X86-NEXT: pushl %eax161; SSE-X86-NEXT: .cfi_def_cfa_offset 8162; SSE-X86-NEXT: movswl {{[0-9]+}}(%esp), %eax163; SSE-X86-NEXT: cvtsi2ss %eax, %xmm0164; SSE-X86-NEXT: movss %xmm0, (%esp)165; SSE-X86-NEXT: flds (%esp)166; SSE-X86-NEXT: wait167; SSE-X86-NEXT: popl %eax168; SSE-X86-NEXT: .cfi_def_cfa_offset 4169; SSE-X86-NEXT: retl170;171; SSE-X64-LABEL: sitofp_i16tof32:172; SSE-X64: # %bb.0:173; SSE-X64-NEXT: movswl %di, %eax174; SSE-X64-NEXT: cvtsi2ss %eax, %xmm0175; SSE-X64-NEXT: retq176;177; AVX-X86-LABEL: sitofp_i16tof32:178; AVX-X86: # %bb.0:179; AVX-X86-NEXT: pushl %eax180; AVX-X86-NEXT: .cfi_def_cfa_offset 8181; AVX-X86-NEXT: movswl {{[0-9]+}}(%esp), %eax182; AVX-X86-NEXT: vcvtsi2ss %eax, %xmm7, %xmm0183; AVX-X86-NEXT: vmovss %xmm0, (%esp)184; AVX-X86-NEXT: flds (%esp)185; AVX-X86-NEXT: wait186; AVX-X86-NEXT: popl %eax187; AVX-X86-NEXT: .cfi_def_cfa_offset 4188; AVX-X86-NEXT: retl189;190; AVX-X64-LABEL: sitofp_i16tof32:191; AVX-X64: # %bb.0:192; AVX-X64-NEXT: movswl %di, %eax193; AVX-X64-NEXT: vcvtsi2ss %eax, %xmm15, %xmm0194; AVX-X64-NEXT: retq195;196; X87-LABEL: sitofp_i16tof32:197; X87: # %bb.0:198; X87-NEXT: pushl %eax199; X87-NEXT: .cfi_def_cfa_offset 8200; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax201; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)202; X87-NEXT: filds {{[0-9]+}}(%esp)203; X87-NEXT: wait204; X87-NEXT: popl %eax205; X87-NEXT: .cfi_def_cfa_offset 4206; X87-NEXT: retl207 %result = call float @llvm.experimental.constrained.sitofp.f32.i16(i16 %x,208 metadata !"round.dynamic",209 metadata !"fpexcept.strict") #0210 ret float %result211}212 213define float @sitofp_i32tof32(i32 %x) #0 {214; SSE-X86-LABEL: sitofp_i32tof32:215; SSE-X86: # %bb.0:216; SSE-X86-NEXT: pushl %eax217; SSE-X86-NEXT: .cfi_def_cfa_offset 8218; SSE-X86-NEXT: cvtsi2ssl {{[0-9]+}}(%esp), %xmm0219; SSE-X86-NEXT: movss %xmm0, (%esp)220; SSE-X86-NEXT: flds (%esp)221; SSE-X86-NEXT: wait222; SSE-X86-NEXT: popl %eax223; SSE-X86-NEXT: .cfi_def_cfa_offset 4224; SSE-X86-NEXT: retl225;226; SSE-X64-LABEL: sitofp_i32tof32:227; SSE-X64: # %bb.0:228; SSE-X64-NEXT: cvtsi2ss %edi, %xmm0229; SSE-X64-NEXT: retq230;231; AVX-X86-LABEL: sitofp_i32tof32:232; AVX-X86: # %bb.0:233; AVX-X86-NEXT: pushl %eax234; AVX-X86-NEXT: .cfi_def_cfa_offset 8235; AVX-X86-NEXT: vcvtsi2ssl {{[0-9]+}}(%esp), %xmm7, %xmm0236; AVX-X86-NEXT: vmovss %xmm0, (%esp)237; AVX-X86-NEXT: flds (%esp)238; AVX-X86-NEXT: wait239; AVX-X86-NEXT: popl %eax240; AVX-X86-NEXT: .cfi_def_cfa_offset 4241; AVX-X86-NEXT: retl242;243; AVX-X64-LABEL: sitofp_i32tof32:244; AVX-X64: # %bb.0:245; AVX-X64-NEXT: vcvtsi2ss %edi, %xmm15, %xmm0246; AVX-X64-NEXT: retq247;248; X87-LABEL: sitofp_i32tof32:249; X87: # %bb.0:250; X87-NEXT: pushl %eax251; X87-NEXT: .cfi_def_cfa_offset 8252; X87-NEXT: movl {{[0-9]+}}(%esp), %eax253; X87-NEXT: movl %eax, (%esp)254; X87-NEXT: fildl (%esp)255; X87-NEXT: wait256; X87-NEXT: popl %eax257; X87-NEXT: .cfi_def_cfa_offset 4258; X87-NEXT: retl259 %result = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %x,260 metadata !"round.dynamic",261 metadata !"fpexcept.strict") #0262 ret float %result263}264 265define float @sitofp_i64tof32(i64 %x) #0 {266; SSE-X86-LABEL: sitofp_i64tof32:267; SSE-X86: # %bb.0:268; SSE-X86-NEXT: pushl %eax269; SSE-X86-NEXT: .cfi_def_cfa_offset 8270; SSE-X86-NEXT: fildll {{[0-9]+}}(%esp)271; SSE-X86-NEXT: fstps (%esp)272; SSE-X86-NEXT: flds (%esp)273; SSE-X86-NEXT: wait274; SSE-X86-NEXT: popl %eax275; SSE-X86-NEXT: .cfi_def_cfa_offset 4276; SSE-X86-NEXT: retl277;278; SSE-X64-LABEL: sitofp_i64tof32:279; SSE-X64: # %bb.0:280; SSE-X64-NEXT: cvtsi2ss %rdi, %xmm0281; SSE-X64-NEXT: retq282;283; AVX-X86-LABEL: sitofp_i64tof32:284; AVX-X86: # %bb.0:285; AVX-X86-NEXT: pushl %eax286; AVX-X86-NEXT: .cfi_def_cfa_offset 8287; AVX-X86-NEXT: fildll {{[0-9]+}}(%esp)288; AVX-X86-NEXT: fstps (%esp)289; AVX-X86-NEXT: flds (%esp)290; AVX-X86-NEXT: wait291; AVX-X86-NEXT: popl %eax292; AVX-X86-NEXT: .cfi_def_cfa_offset 4293; AVX-X86-NEXT: retl294;295; AVX-X64-LABEL: sitofp_i64tof32:296; AVX-X64: # %bb.0:297; AVX-X64-NEXT: vcvtsi2ss %rdi, %xmm15, %xmm0298; AVX-X64-NEXT: retq299;300; X87-LABEL: sitofp_i64tof32:301; X87: # %bb.0:302; X87-NEXT: fildll {{[0-9]+}}(%esp)303; X87-NEXT: wait304; X87-NEXT: retl305 %result = call float @llvm.experimental.constrained.sitofp.f32.i64(i64 %x,306 metadata !"round.dynamic",307 metadata !"fpexcept.strict") #0308 ret float %result309}310 311define float @uitofp_i1tof32(i1 %x) #0 {312; SSE-X86-LABEL: uitofp_i1tof32:313; SSE-X86: # %bb.0:314; SSE-X86-NEXT: pushl %eax315; SSE-X86-NEXT: .cfi_def_cfa_offset 8316; SSE-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax317; SSE-X86-NEXT: andb $1, %al318; SSE-X86-NEXT: movzbl %al, %eax319; SSE-X86-NEXT: cvtsi2ss %eax, %xmm0320; SSE-X86-NEXT: movss %xmm0, (%esp)321; SSE-X86-NEXT: flds (%esp)322; SSE-X86-NEXT: wait323; SSE-X86-NEXT: popl %eax324; SSE-X86-NEXT: .cfi_def_cfa_offset 4325; SSE-X86-NEXT: retl326;327; SSE-X64-LABEL: uitofp_i1tof32:328; SSE-X64: # %bb.0:329; SSE-X64-NEXT: andl $1, %edi330; SSE-X64-NEXT: cvtsi2ss %edi, %xmm0331; SSE-X64-NEXT: retq332;333; AVX-X86-LABEL: uitofp_i1tof32:334; AVX-X86: # %bb.0:335; AVX-X86-NEXT: pushl %eax336; AVX-X86-NEXT: .cfi_def_cfa_offset 8337; AVX-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax338; AVX-X86-NEXT: andb $1, %al339; AVX-X86-NEXT: movzbl %al, %eax340; AVX-X86-NEXT: vcvtsi2ss %eax, %xmm7, %xmm0341; AVX-X86-NEXT: vmovss %xmm0, (%esp)342; AVX-X86-NEXT: flds (%esp)343; AVX-X86-NEXT: wait344; AVX-X86-NEXT: popl %eax345; AVX-X86-NEXT: .cfi_def_cfa_offset 4346; AVX-X86-NEXT: retl347;348; AVX-X64-LABEL: uitofp_i1tof32:349; AVX-X64: # %bb.0:350; AVX-X64-NEXT: andl $1, %edi351; AVX-X64-NEXT: vcvtsi2ss %edi, %xmm15, %xmm0352; AVX-X64-NEXT: retq353;354; X87-LABEL: uitofp_i1tof32:355; X87: # %bb.0:356; X87-NEXT: pushl %eax357; X87-NEXT: .cfi_def_cfa_offset 8358; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax359; X87-NEXT: andb $1, %al360; X87-NEXT: movzbl %al, %eax361; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)362; X87-NEXT: filds {{[0-9]+}}(%esp)363; X87-NEXT: wait364; X87-NEXT: popl %eax365; X87-NEXT: .cfi_def_cfa_offset 4366; X87-NEXT: retl367 %result = call float @llvm.experimental.constrained.uitofp.f32.i1(i1 %x,368 metadata !"round.dynamic",369 metadata !"fpexcept.strict") #0370 ret float %result371}372 373define float @uitofp_i8tof32(i8 %x) #0 {374; SSE-X86-LABEL: uitofp_i8tof32:375; SSE-X86: # %bb.0:376; SSE-X86-NEXT: pushl %eax377; SSE-X86-NEXT: .cfi_def_cfa_offset 8378; SSE-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax379; SSE-X86-NEXT: cvtsi2ss %eax, %xmm0380; SSE-X86-NEXT: movss %xmm0, (%esp)381; SSE-X86-NEXT: flds (%esp)382; SSE-X86-NEXT: wait383; SSE-X86-NEXT: popl %eax384; SSE-X86-NEXT: .cfi_def_cfa_offset 4385; SSE-X86-NEXT: retl386;387; SSE-X64-LABEL: uitofp_i8tof32:388; SSE-X64: # %bb.0:389; SSE-X64-NEXT: movzbl %dil, %eax390; SSE-X64-NEXT: cvtsi2ss %eax, %xmm0391; SSE-X64-NEXT: retq392;393; AVX-X86-LABEL: uitofp_i8tof32:394; AVX-X86: # %bb.0:395; AVX-X86-NEXT: pushl %eax396; AVX-X86-NEXT: .cfi_def_cfa_offset 8397; AVX-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax398; AVX-X86-NEXT: vcvtsi2ss %eax, %xmm7, %xmm0399; AVX-X86-NEXT: vmovss %xmm0, (%esp)400; AVX-X86-NEXT: flds (%esp)401; AVX-X86-NEXT: wait402; AVX-X86-NEXT: popl %eax403; AVX-X86-NEXT: .cfi_def_cfa_offset 4404; AVX-X86-NEXT: retl405;406; AVX-X64-LABEL: uitofp_i8tof32:407; AVX-X64: # %bb.0:408; AVX-X64-NEXT: movzbl %dil, %eax409; AVX-X64-NEXT: vcvtsi2ss %eax, %xmm15, %xmm0410; AVX-X64-NEXT: retq411;412; X87-LABEL: uitofp_i8tof32:413; X87: # %bb.0:414; X87-NEXT: pushl %eax415; X87-NEXT: .cfi_def_cfa_offset 8416; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax417; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)418; X87-NEXT: filds {{[0-9]+}}(%esp)419; X87-NEXT: wait420; X87-NEXT: popl %eax421; X87-NEXT: .cfi_def_cfa_offset 4422; X87-NEXT: retl423 %result = call float @llvm.experimental.constrained.uitofp.f32.i8(i8 %x,424 metadata !"round.dynamic",425 metadata !"fpexcept.strict") #0426 ret float %result427}428 429define float @uitofp_i16tof32(i16 %x) #0 {430; SSE-X86-LABEL: uitofp_i16tof32:431; SSE-X86: # %bb.0:432; SSE-X86-NEXT: pushl %eax433; SSE-X86-NEXT: .cfi_def_cfa_offset 8434; SSE-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax435; SSE-X86-NEXT: cvtsi2ss %eax, %xmm0436; SSE-X86-NEXT: movss %xmm0, (%esp)437; SSE-X86-NEXT: flds (%esp)438; SSE-X86-NEXT: wait439; SSE-X86-NEXT: popl %eax440; SSE-X86-NEXT: .cfi_def_cfa_offset 4441; SSE-X86-NEXT: retl442;443; SSE-X64-LABEL: uitofp_i16tof32:444; SSE-X64: # %bb.0:445; SSE-X64-NEXT: movzwl %di, %eax446; SSE-X64-NEXT: cvtsi2ss %eax, %xmm0447; SSE-X64-NEXT: retq448;449; AVX-X86-LABEL: uitofp_i16tof32:450; AVX-X86: # %bb.0:451; AVX-X86-NEXT: pushl %eax452; AVX-X86-NEXT: .cfi_def_cfa_offset 8453; AVX-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax454; AVX-X86-NEXT: vcvtsi2ss %eax, %xmm7, %xmm0455; AVX-X86-NEXT: vmovss %xmm0, (%esp)456; AVX-X86-NEXT: flds (%esp)457; AVX-X86-NEXT: wait458; AVX-X86-NEXT: popl %eax459; AVX-X86-NEXT: .cfi_def_cfa_offset 4460; AVX-X86-NEXT: retl461;462; AVX-X64-LABEL: uitofp_i16tof32:463; AVX-X64: # %bb.0:464; AVX-X64-NEXT: movzwl %di, %eax465; AVX-X64-NEXT: vcvtsi2ss %eax, %xmm15, %xmm0466; AVX-X64-NEXT: retq467;468; X87-LABEL: uitofp_i16tof32:469; X87: # %bb.0:470; X87-NEXT: pushl %eax471; X87-NEXT: .cfi_def_cfa_offset 8472; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax473; X87-NEXT: movl %eax, (%esp)474; X87-NEXT: fildl (%esp)475; X87-NEXT: wait476; X87-NEXT: popl %eax477; X87-NEXT: .cfi_def_cfa_offset 4478; X87-NEXT: retl479 %result = call float @llvm.experimental.constrained.uitofp.f32.i16(i16 %x,480 metadata !"round.dynamic",481 metadata !"fpexcept.strict") #0482 ret float %result483}484 485define float @uitofp_i32tof32(i32 %x) #0 {486; SSE-X86-LABEL: uitofp_i32tof32:487; SSE-X86: # %bb.0:488; SSE-X86-NEXT: pushl %ebp489; SSE-X86-NEXT: .cfi_def_cfa_offset 8490; SSE-X86-NEXT: .cfi_offset %ebp, -8491; SSE-X86-NEXT: movl %esp, %ebp492; SSE-X86-NEXT: .cfi_def_cfa_register %ebp493; SSE-X86-NEXT: andl $-8, %esp494; SSE-X86-NEXT: subl $16, %esp495; SSE-X86-NEXT: movl 8(%ebp), %eax496; SSE-X86-NEXT: movl %eax, {{[0-9]+}}(%esp)497; SSE-X86-NEXT: movl $0, {{[0-9]+}}(%esp)498; SSE-X86-NEXT: fildll {{[0-9]+}}(%esp)499; SSE-X86-NEXT: fstps {{[0-9]+}}(%esp)500; SSE-X86-NEXT: flds {{[0-9]+}}(%esp)501; SSE-X86-NEXT: wait502; SSE-X86-NEXT: movl %ebp, %esp503; SSE-X86-NEXT: popl %ebp504; SSE-X86-NEXT: .cfi_def_cfa %esp, 4505; SSE-X86-NEXT: retl506;507; SSE-X64-LABEL: uitofp_i32tof32:508; SSE-X64: # %bb.0:509; SSE-X64-NEXT: movl %edi, %eax510; SSE-X64-NEXT: cvtsi2ss %rax, %xmm0511; SSE-X64-NEXT: retq512;513; AVX1-X86-LABEL: uitofp_i32tof32:514; AVX1-X86: # %bb.0:515; AVX1-X86-NEXT: pushl %ebp516; AVX1-X86-NEXT: .cfi_def_cfa_offset 8517; AVX1-X86-NEXT: .cfi_offset %ebp, -8518; AVX1-X86-NEXT: movl %esp, %ebp519; AVX1-X86-NEXT: .cfi_def_cfa_register %ebp520; AVX1-X86-NEXT: andl $-8, %esp521; AVX1-X86-NEXT: subl $16, %esp522; AVX1-X86-NEXT: movl 8(%ebp), %eax523; AVX1-X86-NEXT: movl %eax, {{[0-9]+}}(%esp)524; AVX1-X86-NEXT: movl $0, {{[0-9]+}}(%esp)525; AVX1-X86-NEXT: fildll {{[0-9]+}}(%esp)526; AVX1-X86-NEXT: fstps {{[0-9]+}}(%esp)527; AVX1-X86-NEXT: flds {{[0-9]+}}(%esp)528; AVX1-X86-NEXT: wait529; AVX1-X86-NEXT: movl %ebp, %esp530; AVX1-X86-NEXT: popl %ebp531; AVX1-X86-NEXT: .cfi_def_cfa %esp, 4532; AVX1-X86-NEXT: retl533;534; AVX1-X64-LABEL: uitofp_i32tof32:535; AVX1-X64: # %bb.0:536; AVX1-X64-NEXT: movl %edi, %eax537; AVX1-X64-NEXT: vcvtsi2ss %rax, %xmm15, %xmm0538; AVX1-X64-NEXT: retq539;540; AVX512-X86-LABEL: uitofp_i32tof32:541; AVX512-X86: # %bb.0:542; AVX512-X86-NEXT: pushl %eax543; AVX512-X86-NEXT: .cfi_def_cfa_offset 8544; AVX512-X86-NEXT: vcvtusi2ssl {{[0-9]+}}(%esp), %xmm7, %xmm0545; AVX512-X86-NEXT: vmovss %xmm0, (%esp)546; AVX512-X86-NEXT: flds (%esp)547; AVX512-X86-NEXT: wait548; AVX512-X86-NEXT: popl %eax549; AVX512-X86-NEXT: .cfi_def_cfa_offset 4550; AVX512-X86-NEXT: retl551;552; AVX512-X64-LABEL: uitofp_i32tof32:553; AVX512-X64: # %bb.0:554; AVX512-X64-NEXT: vcvtusi2ss %edi, %xmm15, %xmm0555; AVX512-X64-NEXT: retq556;557; X87-LABEL: uitofp_i32tof32:558; X87: # %bb.0:559; X87-NEXT: pushl %ebp560; X87-NEXT: .cfi_def_cfa_offset 8561; X87-NEXT: .cfi_offset %ebp, -8562; X87-NEXT: movl %esp, %ebp563; X87-NEXT: .cfi_def_cfa_register %ebp564; X87-NEXT: andl $-8, %esp565; X87-NEXT: subl $8, %esp566; X87-NEXT: movl 8(%ebp), %eax567; X87-NEXT: movl %eax, (%esp)568; X87-NEXT: movl $0, {{[0-9]+}}(%esp)569; X87-NEXT: fildll (%esp)570; X87-NEXT: wait571; X87-NEXT: movl %ebp, %esp572; X87-NEXT: popl %ebp573; X87-NEXT: .cfi_def_cfa %esp, 4574; X87-NEXT: retl575 %result = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %x,576 metadata !"round.dynamic",577 metadata !"fpexcept.strict") #0578 ret float %result579}580 581define float @uitofp_i64tof32(i64 %x) #0 {582; SSE-X86-LABEL: uitofp_i64tof32:583; SSE-X86: # %bb.0:584; SSE-X86-NEXT: pushl %ebp585; SSE-X86-NEXT: .cfi_def_cfa_offset 8586; SSE-X86-NEXT: .cfi_offset %ebp, -8587; SSE-X86-NEXT: movl %esp, %ebp588; SSE-X86-NEXT: .cfi_def_cfa_register %ebp589; SSE-X86-NEXT: andl $-8, %esp590; SSE-X86-NEXT: subl $16, %esp591; SSE-X86-NEXT: movl 12(%ebp), %eax592; SSE-X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero593; SSE-X86-NEXT: movlps %xmm0, {{[0-9]+}}(%esp)594; SSE-X86-NEXT: shrl $31, %eax595; SSE-X86-NEXT: fildll {{[0-9]+}}(%esp)596; SSE-X86-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)597; SSE-X86-NEXT: fstps {{[0-9]+}}(%esp)598; SSE-X86-NEXT: wait599; SSE-X86-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero600; SSE-X86-NEXT: movss %xmm0, (%esp)601; SSE-X86-NEXT: flds (%esp)602; SSE-X86-NEXT: wait603; SSE-X86-NEXT: movl %ebp, %esp604; SSE-X86-NEXT: popl %ebp605; SSE-X86-NEXT: .cfi_def_cfa %esp, 4606; SSE-X86-NEXT: retl607;608; SSE-X64-LABEL: uitofp_i64tof32:609; SSE-X64: # %bb.0:610; SSE-X64-NEXT: movq %rdi, %rax611; SSE-X64-NEXT: shrq %rax612; SSE-X64-NEXT: movl %edi, %ecx613; SSE-X64-NEXT: andl $1, %ecx614; SSE-X64-NEXT: orq %rax, %rcx615; SSE-X64-NEXT: testq %rdi, %rdi616; SSE-X64-NEXT: cmovnsq %rdi, %rcx617; SSE-X64-NEXT: cvtsi2ss %rcx, %xmm0618; SSE-X64-NEXT: jns .LBB9_2619; SSE-X64-NEXT: # %bb.1:620; SSE-X64-NEXT: addss %xmm0, %xmm0621; SSE-X64-NEXT: .LBB9_2:622; SSE-X64-NEXT: retq623;624; AVX-X86-LABEL: uitofp_i64tof32:625; AVX-X86: # %bb.0:626; AVX-X86-NEXT: pushl %ebp627; AVX-X86-NEXT: .cfi_def_cfa_offset 8628; AVX-X86-NEXT: .cfi_offset %ebp, -8629; AVX-X86-NEXT: movl %esp, %ebp630; AVX-X86-NEXT: .cfi_def_cfa_register %ebp631; AVX-X86-NEXT: andl $-8, %esp632; AVX-X86-NEXT: subl $16, %esp633; AVX-X86-NEXT: movl 12(%ebp), %eax634; AVX-X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero635; AVX-X86-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)636; AVX-X86-NEXT: shrl $31, %eax637; AVX-X86-NEXT: fildll {{[0-9]+}}(%esp)638; AVX-X86-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)639; AVX-X86-NEXT: fstps {{[0-9]+}}(%esp)640; AVX-X86-NEXT: wait641; AVX-X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero642; AVX-X86-NEXT: vmovss %xmm0, (%esp)643; AVX-X86-NEXT: flds (%esp)644; AVX-X86-NEXT: wait645; AVX-X86-NEXT: movl %ebp, %esp646; AVX-X86-NEXT: popl %ebp647; AVX-X86-NEXT: .cfi_def_cfa %esp, 4648; AVX-X86-NEXT: retl649;650; AVX1-X64-LABEL: uitofp_i64tof32:651; AVX1-X64: # %bb.0:652; AVX1-X64-NEXT: movq %rdi, %rax653; AVX1-X64-NEXT: shrq %rax654; AVX1-X64-NEXT: movl %edi, %ecx655; AVX1-X64-NEXT: andl $1, %ecx656; AVX1-X64-NEXT: orq %rax, %rcx657; AVX1-X64-NEXT: testq %rdi, %rdi658; AVX1-X64-NEXT: cmovnsq %rdi, %rcx659; AVX1-X64-NEXT: vcvtsi2ss %rcx, %xmm15, %xmm0660; AVX1-X64-NEXT: jns .LBB9_2661; AVX1-X64-NEXT: # %bb.1:662; AVX1-X64-NEXT: vaddss %xmm0, %xmm0, %xmm0663; AVX1-X64-NEXT: .LBB9_2:664; AVX1-X64-NEXT: retq665;666; AVX512-X64-LABEL: uitofp_i64tof32:667; AVX512-X64: # %bb.0:668; AVX512-X64-NEXT: vcvtusi2ss %rdi, %xmm15, %xmm0669; AVX512-X64-NEXT: retq670;671; X87-LABEL: uitofp_i64tof32:672; X87: # %bb.0:673; X87-NEXT: pushl %ebp674; X87-NEXT: .cfi_def_cfa_offset 8675; X87-NEXT: .cfi_offset %ebp, -8676; X87-NEXT: movl %esp, %ebp677; X87-NEXT: .cfi_def_cfa_register %ebp678; X87-NEXT: andl $-8, %esp679; X87-NEXT: subl $16, %esp680; X87-NEXT: movl 8(%ebp), %eax681; X87-NEXT: movl 12(%ebp), %ecx682; X87-NEXT: movl %ecx, {{[0-9]+}}(%esp)683; X87-NEXT: movl %eax, {{[0-9]+}}(%esp)684; X87-NEXT: shrl $31, %ecx685; X87-NEXT: fildll {{[0-9]+}}(%esp)686; X87-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%ecx,4)687; X87-NEXT: fstps {{[0-9]+}}(%esp)688; X87-NEXT: flds {{[0-9]+}}(%esp)689; X87-NEXT: wait690; X87-NEXT: movl %ebp, %esp691; X87-NEXT: popl %ebp692; X87-NEXT: .cfi_def_cfa %esp, 4693; X87-NEXT: retl694 %result = call float @llvm.experimental.constrained.uitofp.f32.i64(i64 %x,695 metadata !"round.dynamic",696 metadata !"fpexcept.strict") #0697 ret float %result698}699 700define double @sitofp_i8tof64(i8 %x) #0 {701; SSE-X86-LABEL: sitofp_i8tof64:702; SSE-X86: # %bb.0:703; SSE-X86-NEXT: pushl %ebp704; SSE-X86-NEXT: .cfi_def_cfa_offset 8705; SSE-X86-NEXT: .cfi_offset %ebp, -8706; SSE-X86-NEXT: movl %esp, %ebp707; SSE-X86-NEXT: .cfi_def_cfa_register %ebp708; SSE-X86-NEXT: andl $-8, %esp709; SSE-X86-NEXT: subl $8, %esp710; SSE-X86-NEXT: movsbl 8(%ebp), %eax711; SSE-X86-NEXT: cvtsi2sd %eax, %xmm0712; SSE-X86-NEXT: movsd %xmm0, (%esp)713; SSE-X86-NEXT: fldl (%esp)714; SSE-X86-NEXT: wait715; SSE-X86-NEXT: movl %ebp, %esp716; SSE-X86-NEXT: popl %ebp717; SSE-X86-NEXT: .cfi_def_cfa %esp, 4718; SSE-X86-NEXT: retl719;720; SSE-X64-LABEL: sitofp_i8tof64:721; SSE-X64: # %bb.0:722; SSE-X64-NEXT: movsbl %dil, %eax723; SSE-X64-NEXT: cvtsi2sd %eax, %xmm0724; SSE-X64-NEXT: retq725;726; AVX-X86-LABEL: sitofp_i8tof64:727; AVX-X86: # %bb.0:728; AVX-X86-NEXT: pushl %ebp729; AVX-X86-NEXT: .cfi_def_cfa_offset 8730; AVX-X86-NEXT: .cfi_offset %ebp, -8731; AVX-X86-NEXT: movl %esp, %ebp732; AVX-X86-NEXT: .cfi_def_cfa_register %ebp733; AVX-X86-NEXT: andl $-8, %esp734; AVX-X86-NEXT: subl $8, %esp735; AVX-X86-NEXT: movsbl 8(%ebp), %eax736; AVX-X86-NEXT: vcvtsi2sd %eax, %xmm7, %xmm0737; AVX-X86-NEXT: vmovsd %xmm0, (%esp)738; AVX-X86-NEXT: fldl (%esp)739; AVX-X86-NEXT: wait740; AVX-X86-NEXT: movl %ebp, %esp741; AVX-X86-NEXT: popl %ebp742; AVX-X86-NEXT: .cfi_def_cfa %esp, 4743; AVX-X86-NEXT: retl744;745; AVX-X64-LABEL: sitofp_i8tof64:746; AVX-X64: # %bb.0:747; AVX-X64-NEXT: movsbl %dil, %eax748; AVX-X64-NEXT: vcvtsi2sd %eax, %xmm15, %xmm0749; AVX-X64-NEXT: retq750;751; X87-LABEL: sitofp_i8tof64:752; X87: # %bb.0:753; X87-NEXT: pushl %eax754; X87-NEXT: .cfi_def_cfa_offset 8755; X87-NEXT: movsbl {{[0-9]+}}(%esp), %eax756; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)757; X87-NEXT: filds {{[0-9]+}}(%esp)758; X87-NEXT: wait759; X87-NEXT: popl %eax760; X87-NEXT: .cfi_def_cfa_offset 4761; X87-NEXT: retl762 %result = call double @llvm.experimental.constrained.sitofp.f64.i8(i8 %x,763 metadata !"round.dynamic",764 metadata !"fpexcept.strict") #0765 ret double %result766}767 768define double @sitofp_i16tof64(i16 %x) #0 {769; SSE-X86-LABEL: sitofp_i16tof64:770; SSE-X86: # %bb.0:771; SSE-X86-NEXT: pushl %ebp772; SSE-X86-NEXT: .cfi_def_cfa_offset 8773; SSE-X86-NEXT: .cfi_offset %ebp, -8774; SSE-X86-NEXT: movl %esp, %ebp775; SSE-X86-NEXT: .cfi_def_cfa_register %ebp776; SSE-X86-NEXT: andl $-8, %esp777; SSE-X86-NEXT: subl $8, %esp778; SSE-X86-NEXT: movswl 8(%ebp), %eax779; SSE-X86-NEXT: cvtsi2sd %eax, %xmm0780; SSE-X86-NEXT: movsd %xmm0, (%esp)781; SSE-X86-NEXT: fldl (%esp)782; SSE-X86-NEXT: wait783; SSE-X86-NEXT: movl %ebp, %esp784; SSE-X86-NEXT: popl %ebp785; SSE-X86-NEXT: .cfi_def_cfa %esp, 4786; SSE-X86-NEXT: retl787;788; SSE-X64-LABEL: sitofp_i16tof64:789; SSE-X64: # %bb.0:790; SSE-X64-NEXT: movswl %di, %eax791; SSE-X64-NEXT: cvtsi2sd %eax, %xmm0792; SSE-X64-NEXT: retq793;794; AVX-X86-LABEL: sitofp_i16tof64:795; AVX-X86: # %bb.0:796; AVX-X86-NEXT: pushl %ebp797; AVX-X86-NEXT: .cfi_def_cfa_offset 8798; AVX-X86-NEXT: .cfi_offset %ebp, -8799; AVX-X86-NEXT: movl %esp, %ebp800; AVX-X86-NEXT: .cfi_def_cfa_register %ebp801; AVX-X86-NEXT: andl $-8, %esp802; AVX-X86-NEXT: subl $8, %esp803; AVX-X86-NEXT: movswl 8(%ebp), %eax804; AVX-X86-NEXT: vcvtsi2sd %eax, %xmm7, %xmm0805; AVX-X86-NEXT: vmovsd %xmm0, (%esp)806; AVX-X86-NEXT: fldl (%esp)807; AVX-X86-NEXT: wait808; AVX-X86-NEXT: movl %ebp, %esp809; AVX-X86-NEXT: popl %ebp810; AVX-X86-NEXT: .cfi_def_cfa %esp, 4811; AVX-X86-NEXT: retl812;813; AVX-X64-LABEL: sitofp_i16tof64:814; AVX-X64: # %bb.0:815; AVX-X64-NEXT: movswl %di, %eax816; AVX-X64-NEXT: vcvtsi2sd %eax, %xmm15, %xmm0817; AVX-X64-NEXT: retq818;819; X87-LABEL: sitofp_i16tof64:820; X87: # %bb.0:821; X87-NEXT: pushl %eax822; X87-NEXT: .cfi_def_cfa_offset 8823; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax824; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)825; X87-NEXT: filds {{[0-9]+}}(%esp)826; X87-NEXT: wait827; X87-NEXT: popl %eax828; X87-NEXT: .cfi_def_cfa_offset 4829; X87-NEXT: retl830 %result = call double @llvm.experimental.constrained.sitofp.f64.i16(i16 %x,831 metadata !"round.dynamic",832 metadata !"fpexcept.strict") #0833 ret double %result834}835 836define double @sitofp_i32tof64(i32 %x) #0 {837; SSE-X86-LABEL: sitofp_i32tof64:838; SSE-X86: # %bb.0:839; SSE-X86-NEXT: pushl %ebp840; SSE-X86-NEXT: .cfi_def_cfa_offset 8841; SSE-X86-NEXT: .cfi_offset %ebp, -8842; SSE-X86-NEXT: movl %esp, %ebp843; SSE-X86-NEXT: .cfi_def_cfa_register %ebp844; SSE-X86-NEXT: andl $-8, %esp845; SSE-X86-NEXT: subl $8, %esp846; SSE-X86-NEXT: cvtsi2sdl 8(%ebp), %xmm0847; SSE-X86-NEXT: movsd %xmm0, (%esp)848; SSE-X86-NEXT: fldl (%esp)849; SSE-X86-NEXT: wait850; SSE-X86-NEXT: movl %ebp, %esp851; SSE-X86-NEXT: popl %ebp852; SSE-X86-NEXT: .cfi_def_cfa %esp, 4853; SSE-X86-NEXT: retl854;855; SSE-X64-LABEL: sitofp_i32tof64:856; SSE-X64: # %bb.0:857; SSE-X64-NEXT: cvtsi2sd %edi, %xmm0858; SSE-X64-NEXT: retq859;860; AVX-X86-LABEL: sitofp_i32tof64:861; AVX-X86: # %bb.0:862; AVX-X86-NEXT: pushl %ebp863; AVX-X86-NEXT: .cfi_def_cfa_offset 8864; AVX-X86-NEXT: .cfi_offset %ebp, -8865; AVX-X86-NEXT: movl %esp, %ebp866; AVX-X86-NEXT: .cfi_def_cfa_register %ebp867; AVX-X86-NEXT: andl $-8, %esp868; AVX-X86-NEXT: subl $8, %esp869; AVX-X86-NEXT: vcvtsi2sdl 8(%ebp), %xmm7, %xmm0870; AVX-X86-NEXT: vmovsd %xmm0, (%esp)871; AVX-X86-NEXT: fldl (%esp)872; AVX-X86-NEXT: wait873; AVX-X86-NEXT: movl %ebp, %esp874; AVX-X86-NEXT: popl %ebp875; AVX-X86-NEXT: .cfi_def_cfa %esp, 4876; AVX-X86-NEXT: retl877;878; AVX-X64-LABEL: sitofp_i32tof64:879; AVX-X64: # %bb.0:880; AVX-X64-NEXT: vcvtsi2sd %edi, %xmm15, %xmm0881; AVX-X64-NEXT: retq882;883; X87-LABEL: sitofp_i32tof64:884; X87: # %bb.0:885; X87-NEXT: pushl %eax886; X87-NEXT: .cfi_def_cfa_offset 8887; X87-NEXT: movl {{[0-9]+}}(%esp), %eax888; X87-NEXT: movl %eax, (%esp)889; X87-NEXT: fildl (%esp)890; X87-NEXT: wait891; X87-NEXT: popl %eax892; X87-NEXT: .cfi_def_cfa_offset 4893; X87-NEXT: retl894 %result = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %x,895 metadata !"round.dynamic",896 metadata !"fpexcept.strict") #0897 ret double %result898}899 900define double @sitofp_i64tof64(i64 %x) #0 {901; SSE-X86-LABEL: sitofp_i64tof64:902; SSE-X86: # %bb.0:903; SSE-X86-NEXT: pushl %ebp904; SSE-X86-NEXT: .cfi_def_cfa_offset 8905; SSE-X86-NEXT: .cfi_offset %ebp, -8906; SSE-X86-NEXT: movl %esp, %ebp907; SSE-X86-NEXT: .cfi_def_cfa_register %ebp908; SSE-X86-NEXT: andl $-8, %esp909; SSE-X86-NEXT: subl $8, %esp910; SSE-X86-NEXT: fildll 8(%ebp)911; SSE-X86-NEXT: fstpl (%esp)912; SSE-X86-NEXT: fldl (%esp)913; SSE-X86-NEXT: wait914; SSE-X86-NEXT: movl %ebp, %esp915; SSE-X86-NEXT: popl %ebp916; SSE-X86-NEXT: .cfi_def_cfa %esp, 4917; SSE-X86-NEXT: retl918;919; SSE-X64-LABEL: sitofp_i64tof64:920; SSE-X64: # %bb.0:921; SSE-X64-NEXT: cvtsi2sd %rdi, %xmm0922; SSE-X64-NEXT: retq923;924; AVX-X86-LABEL: sitofp_i64tof64:925; AVX-X86: # %bb.0:926; AVX-X86-NEXT: pushl %ebp927; AVX-X86-NEXT: .cfi_def_cfa_offset 8928; AVX-X86-NEXT: .cfi_offset %ebp, -8929; AVX-X86-NEXT: movl %esp, %ebp930; AVX-X86-NEXT: .cfi_def_cfa_register %ebp931; AVX-X86-NEXT: andl $-8, %esp932; AVX-X86-NEXT: subl $8, %esp933; AVX-X86-NEXT: fildll 8(%ebp)934; AVX-X86-NEXT: fstpl (%esp)935; AVX-X86-NEXT: fldl (%esp)936; AVX-X86-NEXT: wait937; AVX-X86-NEXT: movl %ebp, %esp938; AVX-X86-NEXT: popl %ebp939; AVX-X86-NEXT: .cfi_def_cfa %esp, 4940; AVX-X86-NEXT: retl941;942; AVX-X64-LABEL: sitofp_i64tof64:943; AVX-X64: # %bb.0:944; AVX-X64-NEXT: vcvtsi2sd %rdi, %xmm15, %xmm0945; AVX-X64-NEXT: retq946;947; X87-LABEL: sitofp_i64tof64:948; X87: # %bb.0:949; X87-NEXT: fildll {{[0-9]+}}(%esp)950; X87-NEXT: wait951; X87-NEXT: retl952 %result = call double @llvm.experimental.constrained.sitofp.f64.i64(i64 %x,953 metadata !"round.dynamic",954 metadata !"fpexcept.strict") #0955 ret double %result956}957 958define double @uitofp_i1tof64(i1 %x) #0 {959; SSE-X86-LABEL: uitofp_i1tof64:960; SSE-X86: # %bb.0:961; SSE-X86-NEXT: pushl %ebp962; SSE-X86-NEXT: .cfi_def_cfa_offset 8963; SSE-X86-NEXT: .cfi_offset %ebp, -8964; SSE-X86-NEXT: movl %esp, %ebp965; SSE-X86-NEXT: .cfi_def_cfa_register %ebp966; SSE-X86-NEXT: andl $-8, %esp967; SSE-X86-NEXT: subl $8, %esp968; SSE-X86-NEXT: movzbl 8(%ebp), %eax969; SSE-X86-NEXT: andb $1, %al970; SSE-X86-NEXT: movzbl %al, %eax971; SSE-X86-NEXT: cvtsi2sd %eax, %xmm0972; SSE-X86-NEXT: movsd %xmm0, (%esp)973; SSE-X86-NEXT: fldl (%esp)974; SSE-X86-NEXT: wait975; SSE-X86-NEXT: movl %ebp, %esp976; SSE-X86-NEXT: popl %ebp977; SSE-X86-NEXT: .cfi_def_cfa %esp, 4978; SSE-X86-NEXT: retl979;980; SSE-X64-LABEL: uitofp_i1tof64:981; SSE-X64: # %bb.0:982; SSE-X64-NEXT: andl $1, %edi983; SSE-X64-NEXT: cvtsi2sd %edi, %xmm0984; SSE-X64-NEXT: retq985;986; AVX-X86-LABEL: uitofp_i1tof64:987; AVX-X86: # %bb.0:988; AVX-X86-NEXT: pushl %ebp989; AVX-X86-NEXT: .cfi_def_cfa_offset 8990; AVX-X86-NEXT: .cfi_offset %ebp, -8991; AVX-X86-NEXT: movl %esp, %ebp992; AVX-X86-NEXT: .cfi_def_cfa_register %ebp993; AVX-X86-NEXT: andl $-8, %esp994; AVX-X86-NEXT: subl $8, %esp995; AVX-X86-NEXT: movzbl 8(%ebp), %eax996; AVX-X86-NEXT: andb $1, %al997; AVX-X86-NEXT: movzbl %al, %eax998; AVX-X86-NEXT: vcvtsi2sd %eax, %xmm7, %xmm0999; AVX-X86-NEXT: vmovsd %xmm0, (%esp)1000; AVX-X86-NEXT: fldl (%esp)1001; AVX-X86-NEXT: wait1002; AVX-X86-NEXT: movl %ebp, %esp1003; AVX-X86-NEXT: popl %ebp1004; AVX-X86-NEXT: .cfi_def_cfa %esp, 41005; AVX-X86-NEXT: retl1006;1007; AVX-X64-LABEL: uitofp_i1tof64:1008; AVX-X64: # %bb.0:1009; AVX-X64-NEXT: andl $1, %edi1010; AVX-X64-NEXT: vcvtsi2sd %edi, %xmm15, %xmm01011; AVX-X64-NEXT: retq1012;1013; X87-LABEL: uitofp_i1tof64:1014; X87: # %bb.0:1015; X87-NEXT: pushl %eax1016; X87-NEXT: .cfi_def_cfa_offset 81017; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax1018; X87-NEXT: andb $1, %al1019; X87-NEXT: movzbl %al, %eax1020; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1021; X87-NEXT: filds {{[0-9]+}}(%esp)1022; X87-NEXT: wait1023; X87-NEXT: popl %eax1024; X87-NEXT: .cfi_def_cfa_offset 41025; X87-NEXT: retl1026 %result = call double @llvm.experimental.constrained.uitofp.f64.i1(i1 %x,1027 metadata !"round.dynamic",1028 metadata !"fpexcept.strict") #01029 ret double %result1030}1031 1032define double @uitofp_i8tof64(i8 %x) #0 {1033; SSE-X86-LABEL: uitofp_i8tof64:1034; SSE-X86: # %bb.0:1035; SSE-X86-NEXT: pushl %ebp1036; SSE-X86-NEXT: .cfi_def_cfa_offset 81037; SSE-X86-NEXT: .cfi_offset %ebp, -81038; SSE-X86-NEXT: movl %esp, %ebp1039; SSE-X86-NEXT: .cfi_def_cfa_register %ebp1040; SSE-X86-NEXT: andl $-8, %esp1041; SSE-X86-NEXT: subl $8, %esp1042; SSE-X86-NEXT: movzbl 8(%ebp), %eax1043; SSE-X86-NEXT: cvtsi2sd %eax, %xmm01044; SSE-X86-NEXT: movsd %xmm0, (%esp)1045; SSE-X86-NEXT: fldl (%esp)1046; SSE-X86-NEXT: wait1047; SSE-X86-NEXT: movl %ebp, %esp1048; SSE-X86-NEXT: popl %ebp1049; SSE-X86-NEXT: .cfi_def_cfa %esp, 41050; SSE-X86-NEXT: retl1051;1052; SSE-X64-LABEL: uitofp_i8tof64:1053; SSE-X64: # %bb.0:1054; SSE-X64-NEXT: movzbl %dil, %eax1055; SSE-X64-NEXT: cvtsi2sd %eax, %xmm01056; SSE-X64-NEXT: retq1057;1058; AVX-X86-LABEL: uitofp_i8tof64:1059; AVX-X86: # %bb.0:1060; AVX-X86-NEXT: pushl %ebp1061; AVX-X86-NEXT: .cfi_def_cfa_offset 81062; AVX-X86-NEXT: .cfi_offset %ebp, -81063; AVX-X86-NEXT: movl %esp, %ebp1064; AVX-X86-NEXT: .cfi_def_cfa_register %ebp1065; AVX-X86-NEXT: andl $-8, %esp1066; AVX-X86-NEXT: subl $8, %esp1067; AVX-X86-NEXT: movzbl 8(%ebp), %eax1068; AVX-X86-NEXT: vcvtsi2sd %eax, %xmm7, %xmm01069; AVX-X86-NEXT: vmovsd %xmm0, (%esp)1070; AVX-X86-NEXT: fldl (%esp)1071; AVX-X86-NEXT: wait1072; AVX-X86-NEXT: movl %ebp, %esp1073; AVX-X86-NEXT: popl %ebp1074; AVX-X86-NEXT: .cfi_def_cfa %esp, 41075; AVX-X86-NEXT: retl1076;1077; AVX-X64-LABEL: uitofp_i8tof64:1078; AVX-X64: # %bb.0:1079; AVX-X64-NEXT: movzbl %dil, %eax1080; AVX-X64-NEXT: vcvtsi2sd %eax, %xmm15, %xmm01081; AVX-X64-NEXT: retq1082;1083; X87-LABEL: uitofp_i8tof64:1084; X87: # %bb.0:1085; X87-NEXT: pushl %eax1086; X87-NEXT: .cfi_def_cfa_offset 81087; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax1088; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1089; X87-NEXT: filds {{[0-9]+}}(%esp)1090; X87-NEXT: wait1091; X87-NEXT: popl %eax1092; X87-NEXT: .cfi_def_cfa_offset 41093; X87-NEXT: retl1094 %result = call double @llvm.experimental.constrained.uitofp.f64.i8(i8 %x,1095 metadata !"round.dynamic",1096 metadata !"fpexcept.strict") #01097 ret double %result1098}1099 1100define double @uitofp_i16tof64(i16 %x) #0 {1101; SSE-X86-LABEL: uitofp_i16tof64:1102; SSE-X86: # %bb.0:1103; SSE-X86-NEXT: pushl %ebp1104; SSE-X86-NEXT: .cfi_def_cfa_offset 81105; SSE-X86-NEXT: .cfi_offset %ebp, -81106; SSE-X86-NEXT: movl %esp, %ebp1107; SSE-X86-NEXT: .cfi_def_cfa_register %ebp1108; SSE-X86-NEXT: andl $-8, %esp1109; SSE-X86-NEXT: subl $8, %esp1110; SSE-X86-NEXT: movzwl 8(%ebp), %eax1111; SSE-X86-NEXT: cvtsi2sd %eax, %xmm01112; SSE-X86-NEXT: movsd %xmm0, (%esp)1113; SSE-X86-NEXT: fldl (%esp)1114; SSE-X86-NEXT: wait1115; SSE-X86-NEXT: movl %ebp, %esp1116; SSE-X86-NEXT: popl %ebp1117; SSE-X86-NEXT: .cfi_def_cfa %esp, 41118; SSE-X86-NEXT: retl1119;1120; SSE-X64-LABEL: uitofp_i16tof64:1121; SSE-X64: # %bb.0:1122; SSE-X64-NEXT: movzwl %di, %eax1123; SSE-X64-NEXT: cvtsi2sd %eax, %xmm01124; SSE-X64-NEXT: retq1125;1126; AVX-X86-LABEL: uitofp_i16tof64:1127; AVX-X86: # %bb.0:1128; AVX-X86-NEXT: pushl %ebp1129; AVX-X86-NEXT: .cfi_def_cfa_offset 81130; AVX-X86-NEXT: .cfi_offset %ebp, -81131; AVX-X86-NEXT: movl %esp, %ebp1132; AVX-X86-NEXT: .cfi_def_cfa_register %ebp1133; AVX-X86-NEXT: andl $-8, %esp1134; AVX-X86-NEXT: subl $8, %esp1135; AVX-X86-NEXT: movzwl 8(%ebp), %eax1136; AVX-X86-NEXT: vcvtsi2sd %eax, %xmm7, %xmm01137; AVX-X86-NEXT: vmovsd %xmm0, (%esp)1138; AVX-X86-NEXT: fldl (%esp)1139; AVX-X86-NEXT: wait1140; AVX-X86-NEXT: movl %ebp, %esp1141; AVX-X86-NEXT: popl %ebp1142; AVX-X86-NEXT: .cfi_def_cfa %esp, 41143; AVX-X86-NEXT: retl1144;1145; AVX-X64-LABEL: uitofp_i16tof64:1146; AVX-X64: # %bb.0:1147; AVX-X64-NEXT: movzwl %di, %eax1148; AVX-X64-NEXT: vcvtsi2sd %eax, %xmm15, %xmm01149; AVX-X64-NEXT: retq1150;1151; X87-LABEL: uitofp_i16tof64:1152; X87: # %bb.0:1153; X87-NEXT: pushl %eax1154; X87-NEXT: .cfi_def_cfa_offset 81155; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1156; X87-NEXT: movl %eax, (%esp)1157; X87-NEXT: fildl (%esp)1158; X87-NEXT: wait1159; X87-NEXT: popl %eax1160; X87-NEXT: .cfi_def_cfa_offset 41161; X87-NEXT: retl1162 %result = call double @llvm.experimental.constrained.uitofp.f64.i16(i16 %x,1163 metadata !"round.dynamic",1164 metadata !"fpexcept.strict") #01165 ret double %result1166}1167 1168define double @uitofp_i32tof64(i32 %x) #0 {1169; SSE-X86-LABEL: uitofp_i32tof64:1170; SSE-X86: # %bb.0:1171; SSE-X86-NEXT: pushl %ebp1172; SSE-X86-NEXT: .cfi_def_cfa_offset 81173; SSE-X86-NEXT: .cfi_offset %ebp, -81174; SSE-X86-NEXT: movl %esp, %ebp1175; SSE-X86-NEXT: .cfi_def_cfa_register %ebp1176; SSE-X86-NEXT: andl $-8, %esp1177; SSE-X86-NEXT: subl $16, %esp1178; SSE-X86-NEXT: movl 8(%ebp), %eax1179; SSE-X86-NEXT: movl %eax, (%esp)1180; SSE-X86-NEXT: movl $0, {{[0-9]+}}(%esp)1181; SSE-X86-NEXT: fildll (%esp)1182; SSE-X86-NEXT: fstpl {{[0-9]+}}(%esp)1183; SSE-X86-NEXT: fldl {{[0-9]+}}(%esp)1184; SSE-X86-NEXT: wait1185; SSE-X86-NEXT: movl %ebp, %esp1186; SSE-X86-NEXT: popl %ebp1187; SSE-X86-NEXT: .cfi_def_cfa %esp, 41188; SSE-X86-NEXT: retl1189;1190; SSE-X64-LABEL: uitofp_i32tof64:1191; SSE-X64: # %bb.0:1192; SSE-X64-NEXT: movl %edi, %eax1193; SSE-X64-NEXT: cvtsi2sd %rax, %xmm01194; SSE-X64-NEXT: retq1195;1196; AVX1-X86-LABEL: uitofp_i32tof64:1197; AVX1-X86: # %bb.0:1198; AVX1-X86-NEXT: pushl %ebp1199; AVX1-X86-NEXT: .cfi_def_cfa_offset 81200; AVX1-X86-NEXT: .cfi_offset %ebp, -81201; AVX1-X86-NEXT: movl %esp, %ebp1202; AVX1-X86-NEXT: .cfi_def_cfa_register %ebp1203; AVX1-X86-NEXT: andl $-8, %esp1204; AVX1-X86-NEXT: subl $16, %esp1205; AVX1-X86-NEXT: movl 8(%ebp), %eax1206; AVX1-X86-NEXT: movl %eax, (%esp)1207; AVX1-X86-NEXT: movl $0, {{[0-9]+}}(%esp)1208; AVX1-X86-NEXT: fildll (%esp)1209; AVX1-X86-NEXT: fstpl {{[0-9]+}}(%esp)1210; AVX1-X86-NEXT: fldl {{[0-9]+}}(%esp)1211; AVX1-X86-NEXT: wait1212; AVX1-X86-NEXT: movl %ebp, %esp1213; AVX1-X86-NEXT: popl %ebp1214; AVX1-X86-NEXT: .cfi_def_cfa %esp, 41215; AVX1-X86-NEXT: retl1216;1217; AVX1-X64-LABEL: uitofp_i32tof64:1218; AVX1-X64: # %bb.0:1219; AVX1-X64-NEXT: movl %edi, %eax1220; AVX1-X64-NEXT: vcvtsi2sd %rax, %xmm15, %xmm01221; AVX1-X64-NEXT: retq1222;1223; AVX512-X86-LABEL: uitofp_i32tof64:1224; AVX512-X86: # %bb.0:1225; AVX512-X86-NEXT: pushl %ebp1226; AVX512-X86-NEXT: .cfi_def_cfa_offset 81227; AVX512-X86-NEXT: .cfi_offset %ebp, -81228; AVX512-X86-NEXT: movl %esp, %ebp1229; AVX512-X86-NEXT: .cfi_def_cfa_register %ebp1230; AVX512-X86-NEXT: andl $-8, %esp1231; AVX512-X86-NEXT: subl $8, %esp1232; AVX512-X86-NEXT: vcvtusi2sdl 8(%ebp), %xmm7, %xmm01233; AVX512-X86-NEXT: vmovsd %xmm0, (%esp)1234; AVX512-X86-NEXT: fldl (%esp)1235; AVX512-X86-NEXT: wait1236; AVX512-X86-NEXT: movl %ebp, %esp1237; AVX512-X86-NEXT: popl %ebp1238; AVX512-X86-NEXT: .cfi_def_cfa %esp, 41239; AVX512-X86-NEXT: retl1240;1241; AVX512-X64-LABEL: uitofp_i32tof64:1242; AVX512-X64: # %bb.0:1243; AVX512-X64-NEXT: vcvtusi2sd %edi, %xmm15, %xmm01244; AVX512-X64-NEXT: retq1245;1246; X87-LABEL: uitofp_i32tof64:1247; X87: # %bb.0:1248; X87-NEXT: pushl %ebp1249; X87-NEXT: .cfi_def_cfa_offset 81250; X87-NEXT: .cfi_offset %ebp, -81251; X87-NEXT: movl %esp, %ebp1252; X87-NEXT: .cfi_def_cfa_register %ebp1253; X87-NEXT: andl $-8, %esp1254; X87-NEXT: subl $8, %esp1255; X87-NEXT: movl 8(%ebp), %eax1256; X87-NEXT: movl %eax, (%esp)1257; X87-NEXT: movl $0, {{[0-9]+}}(%esp)1258; X87-NEXT: fildll (%esp)1259; X87-NEXT: wait1260; X87-NEXT: movl %ebp, %esp1261; X87-NEXT: popl %ebp1262; X87-NEXT: .cfi_def_cfa %esp, 41263; X87-NEXT: retl1264 %result = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %x,1265 metadata !"round.dynamic",1266 metadata !"fpexcept.strict") #01267 ret double %result1268}1269 1270define double @uitofp_i64tof64(i64 %x) #0 {1271; SSE-X86-LABEL: uitofp_i64tof64:1272; SSE-X86: # %bb.0:1273; SSE-X86-NEXT: pushl %ebp1274; SSE-X86-NEXT: .cfi_def_cfa_offset 81275; SSE-X86-NEXT: .cfi_offset %ebp, -81276; SSE-X86-NEXT: movl %esp, %ebp1277; SSE-X86-NEXT: .cfi_def_cfa_register %ebp1278; SSE-X86-NEXT: andl $-8, %esp1279; SSE-X86-NEXT: subl $24, %esp1280; SSE-X86-NEXT: movl 12(%ebp), %eax1281; SSE-X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1282; SSE-X86-NEXT: movlps %xmm0, {{[0-9]+}}(%esp)1283; SSE-X86-NEXT: shrl $31, %eax1284; SSE-X86-NEXT: fildll {{[0-9]+}}(%esp)1285; SSE-X86-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)1286; SSE-X86-NEXT: fstpl {{[0-9]+}}(%esp)1287; SSE-X86-NEXT: wait1288; SSE-X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1289; SSE-X86-NEXT: movsd %xmm0, (%esp)1290; SSE-X86-NEXT: fldl (%esp)1291; SSE-X86-NEXT: wait1292; SSE-X86-NEXT: movl %ebp, %esp1293; SSE-X86-NEXT: popl %ebp1294; SSE-X86-NEXT: .cfi_def_cfa %esp, 41295; SSE-X86-NEXT: retl1296;1297; SSE-X64-LABEL: uitofp_i64tof64:1298; SSE-X64: # %bb.0:1299; SSE-X64-NEXT: movq %rdi, %rax1300; SSE-X64-NEXT: shrq %rax1301; SSE-X64-NEXT: movl %edi, %ecx1302; SSE-X64-NEXT: andl $1, %ecx1303; SSE-X64-NEXT: orq %rax, %rcx1304; SSE-X64-NEXT: testq %rdi, %rdi1305; SSE-X64-NEXT: cmovnsq %rdi, %rcx1306; SSE-X64-NEXT: cvtsi2sd %rcx, %xmm01307; SSE-X64-NEXT: jns .LBB18_21308; SSE-X64-NEXT: # %bb.1:1309; SSE-X64-NEXT: addsd %xmm0, %xmm01310; SSE-X64-NEXT: .LBB18_2:1311; SSE-X64-NEXT: retq1312;1313; AVX-X86-LABEL: uitofp_i64tof64:1314; AVX-X86: # %bb.0:1315; AVX-X86-NEXT: pushl %ebp1316; AVX-X86-NEXT: .cfi_def_cfa_offset 81317; AVX-X86-NEXT: .cfi_offset %ebp, -81318; AVX-X86-NEXT: movl %esp, %ebp1319; AVX-X86-NEXT: .cfi_def_cfa_register %ebp1320; AVX-X86-NEXT: andl $-8, %esp1321; AVX-X86-NEXT: subl $24, %esp1322; AVX-X86-NEXT: movl 12(%ebp), %eax1323; AVX-X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero1324; AVX-X86-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)1325; AVX-X86-NEXT: shrl $31, %eax1326; AVX-X86-NEXT: fildll {{[0-9]+}}(%esp)1327; AVX-X86-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)1328; AVX-X86-NEXT: fstpl {{[0-9]+}}(%esp)1329; AVX-X86-NEXT: wait1330; AVX-X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero1331; AVX-X86-NEXT: vmovsd %xmm0, (%esp)1332; AVX-X86-NEXT: fldl (%esp)1333; AVX-X86-NEXT: wait1334; AVX-X86-NEXT: movl %ebp, %esp1335; AVX-X86-NEXT: popl %ebp1336; AVX-X86-NEXT: .cfi_def_cfa %esp, 41337; AVX-X86-NEXT: retl1338;1339; AVX1-X64-LABEL: uitofp_i64tof64:1340; AVX1-X64: # %bb.0:1341; AVX1-X64-NEXT: movq %rdi, %rax1342; AVX1-X64-NEXT: shrq %rax1343; AVX1-X64-NEXT: movl %edi, %ecx1344; AVX1-X64-NEXT: andl $1, %ecx1345; AVX1-X64-NEXT: orq %rax, %rcx1346; AVX1-X64-NEXT: testq %rdi, %rdi1347; AVX1-X64-NEXT: cmovnsq %rdi, %rcx1348; AVX1-X64-NEXT: vcvtsi2sd %rcx, %xmm15, %xmm01349; AVX1-X64-NEXT: jns .LBB18_21350; AVX1-X64-NEXT: # %bb.1:1351; AVX1-X64-NEXT: vaddsd %xmm0, %xmm0, %xmm01352; AVX1-X64-NEXT: .LBB18_2:1353; AVX1-X64-NEXT: retq1354;1355; AVX512-X64-LABEL: uitofp_i64tof64:1356; AVX512-X64: # %bb.0:1357; AVX512-X64-NEXT: vcvtusi2sd %rdi, %xmm15, %xmm01358; AVX512-X64-NEXT: retq1359;1360; X87-LABEL: uitofp_i64tof64:1361; X87: # %bb.0:1362; X87-NEXT: pushl %ebp1363; X87-NEXT: .cfi_def_cfa_offset 81364; X87-NEXT: .cfi_offset %ebp, -81365; X87-NEXT: movl %esp, %ebp1366; X87-NEXT: .cfi_def_cfa_register %ebp1367; X87-NEXT: andl $-8, %esp1368; X87-NEXT: subl $16, %esp1369; X87-NEXT: movl 8(%ebp), %eax1370; X87-NEXT: movl 12(%ebp), %ecx1371; X87-NEXT: movl %ecx, {{[0-9]+}}(%esp)1372; X87-NEXT: movl %eax, (%esp)1373; X87-NEXT: shrl $31, %ecx1374; X87-NEXT: fildll (%esp)1375; X87-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%ecx,4)1376; X87-NEXT: fstpl {{[0-9]+}}(%esp)1377; X87-NEXT: fldl {{[0-9]+}}(%esp)1378; X87-NEXT: wait1379; X87-NEXT: movl %ebp, %esp1380; X87-NEXT: popl %ebp1381; X87-NEXT: .cfi_def_cfa %esp, 41382; X87-NEXT: retl1383 %result = call double @llvm.experimental.constrained.uitofp.f64.i64(i64 %x,1384 metadata !"round.dynamic",1385 metadata !"fpexcept.strict") #01386 ret double %result1387}1388 1389attributes #0 = { strictfp }1390