715 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=CHECK,NODQ-323; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=CHECK,NODQ-644; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=avx512f,avx512dq -O3 | FileCheck %s --check-prefixes=CHECK,DQ,DQ-325; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f,avx512dq -O3 | FileCheck %s --check-prefixes=CHECK,DQ,DQ-646 7declare <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i1(<16 x i1>, metadata, metadata)8declare <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i1(<16 x i1>, metadata, metadata)9declare <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i8(<16 x i8>, metadata, metadata)10declare <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i8(<16 x i8>, metadata, metadata)11declare <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i16(<16 x i16>, metadata, metadata)12declare <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i16(<16 x i16>, metadata, metadata)13declare <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i32(<16 x i32>, metadata, metadata)14declare <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i32(<16 x i32>, metadata, metadata)15declare <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i1(<8 x i1>, metadata, metadata)16declare <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i1(<8 x i1>, metadata, metadata)17declare <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i8(<8 x i8>, metadata, metadata)18declare <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i8(<8 x i8>, metadata, metadata)19declare <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i16(<8 x i16>, metadata, metadata)20declare <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i16(<8 x i16>, metadata, metadata)21declare <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i32(<8 x i32>, metadata, metadata)22declare <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i32(<8 x i32>, metadata, metadata)23declare <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i64(<8 x i64>, metadata, metadata)24declare <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i64(<8 x i64>, metadata, metadata)25declare <8 x float> @llvm.experimental.constrained.sitofp.v8f32.v8i64(<8 x i64>, metadata, metadata)26declare <8 x float> @llvm.experimental.constrained.uitofp.v8f32.v8i64(<8 x i64>, metadata, metadata)27 28define <16 x float> @sitofp_v16i1_v16f32(<16 x i1> %x) #0 {29; CHECK-LABEL: sitofp_v16i1_v16f32:30; CHECK: # %bb.0:31; CHECK-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero32; CHECK-NEXT: vpslld $31, %zmm0, %zmm033; CHECK-NEXT: vpsrad $31, %zmm0, %zmm034; CHECK-NEXT: vcvtdq2ps %zmm0, %zmm035; CHECK-NEXT: ret{{[l|q]}}36 %result = call <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i1(<16 x i1> %x,37 metadata !"round.dynamic",38 metadata !"fpexcept.strict") #039 ret <16 x float> %result40}41 42define <16 x float> @uitofp_v16i1_v16f32(<16 x i1> %x) #0 {43; NODQ-32-LABEL: uitofp_v16i1_v16f32:44; NODQ-32: # %bb.0:45; NODQ-32-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm046; NODQ-32-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero47; NODQ-32-NEXT: vcvtdq2ps %zmm0, %zmm048; NODQ-32-NEXT: retl49;50; NODQ-64-LABEL: uitofp_v16i1_v16f32:51; NODQ-64: # %bb.0:52; NODQ-64-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm053; NODQ-64-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero54; NODQ-64-NEXT: vcvtdq2ps %zmm0, %zmm055; NODQ-64-NEXT: retq56;57; DQ-32-LABEL: uitofp_v16i1_v16f32:58; DQ-32: # %bb.0:59; DQ-32-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm060; DQ-32-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero61; DQ-32-NEXT: vcvtdq2ps %zmm0, %zmm062; DQ-32-NEXT: retl63;64; DQ-64-LABEL: uitofp_v16i1_v16f32:65; DQ-64: # %bb.0:66; DQ-64-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm067; DQ-64-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero68; DQ-64-NEXT: vcvtdq2ps %zmm0, %zmm069; DQ-64-NEXT: retq70 %result = call <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i1(<16 x i1> %x,71 metadata !"round.dynamic",72 metadata !"fpexcept.strict") #073 ret <16 x float> %result74}75 76define <16 x float> @sitofp_v16i8_v16f32(<16 x i8> %x) #0 {77; CHECK-LABEL: sitofp_v16i8_v16f32:78; CHECK: # %bb.0:79; CHECK-NEXT: vpmovsxbd %xmm0, %zmm080; CHECK-NEXT: vcvtdq2ps %zmm0, %zmm081; CHECK-NEXT: ret{{[l|q]}}82 %result = call <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i8(<16 x i8> %x,83 metadata !"round.dynamic",84 metadata !"fpexcept.strict") #085 ret <16 x float> %result86}87 88define <16 x float> @uitofp_v16i8_v16f32(<16 x i8> %x) #0 {89; CHECK-LABEL: uitofp_v16i8_v16f32:90; CHECK: # %bb.0:91; CHECK-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero92; CHECK-NEXT: vcvtdq2ps %zmm0, %zmm093; CHECK-NEXT: ret{{[l|q]}}94 %result = call <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i8(<16 x i8> %x,95 metadata !"round.dynamic",96 metadata !"fpexcept.strict") #097 ret <16 x float> %result98}99 100define <16 x float> @sitofp_v16i16_v16f32(<16 x i16> %x) #0 {101; CHECK-LABEL: sitofp_v16i16_v16f32:102; CHECK: # %bb.0:103; CHECK-NEXT: vpmovsxwd %ymm0, %zmm0104; CHECK-NEXT: vcvtdq2ps %zmm0, %zmm0105; CHECK-NEXT: ret{{[l|q]}}106 %result = call <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i16(<16 x i16> %x,107 metadata !"round.dynamic",108 metadata !"fpexcept.strict") #0109 ret <16 x float> %result110}111 112define <16 x float> @uitofp_v16i16_v16f32(<16 x i16> %x) #0 {113; CHECK-LABEL: uitofp_v16i16_v16f32:114; CHECK: # %bb.0:115; CHECK-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero116; CHECK-NEXT: vcvtdq2ps %zmm0, %zmm0117; CHECK-NEXT: ret{{[l|q]}}118 %result = call <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i16(<16 x i16> %x,119 metadata !"round.dynamic",120 metadata !"fpexcept.strict") #0121 ret <16 x float> %result122}123 124define <16 x float> @sitofp_v16i32_v16f32(<16 x i32> %x) #0 {125; CHECK-LABEL: sitofp_v16i32_v16f32:126; CHECK: # %bb.0:127; CHECK-NEXT: vcvtdq2ps %zmm0, %zmm0128; CHECK-NEXT: ret{{[l|q]}}129 %result = call <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i32(<16 x i32> %x,130 metadata !"round.dynamic",131 metadata !"fpexcept.strict") #0132 ret <16 x float> %result133}134 135define <16 x float> @uitofp_v16i32_v16f32(<16 x i32> %x) #0 {136; CHECK-LABEL: uitofp_v16i32_v16f32:137; CHECK: # %bb.0:138; CHECK-NEXT: vcvtudq2ps %zmm0, %zmm0139; CHECK-NEXT: ret{{[l|q]}}140 %result = call <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i32(<16 x i32> %x,141 metadata !"round.dynamic",142 metadata !"fpexcept.strict") #0143 ret <16 x float> %result144}145 146define <8 x double> @sitofp_v8i1_v8f64(<8 x i1> %x) #0 {147; CHECK-LABEL: sitofp_v8i1_v8f64:148; CHECK: # %bb.0:149; CHECK-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero150; CHECK-NEXT: vpslld $31, %ymm0, %ymm0151; CHECK-NEXT: vpsrad $31, %ymm0, %ymm0152; CHECK-NEXT: vcvtdq2pd %ymm0, %zmm0153; CHECK-NEXT: ret{{[l|q]}}154 %result = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i1(<8 x i1> %x,155 metadata !"round.dynamic",156 metadata !"fpexcept.strict") #0157 ret <8 x double> %result158}159 160define <8 x double> @uitofp_v8i1_v8f64(<8 x i1> %x) #0 {161; NODQ-32-LABEL: uitofp_v8i1_v8f64:162; NODQ-32: # %bb.0:163; NODQ-32-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0164; NODQ-32-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero165; NODQ-32-NEXT: vcvtdq2pd %ymm0, %zmm0166; NODQ-32-NEXT: retl167;168; NODQ-64-LABEL: uitofp_v8i1_v8f64:169; NODQ-64: # %bb.0:170; NODQ-64-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0171; NODQ-64-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero172; NODQ-64-NEXT: vcvtdq2pd %ymm0, %zmm0173; NODQ-64-NEXT: retq174;175; DQ-32-LABEL: uitofp_v8i1_v8f64:176; DQ-32: # %bb.0:177; DQ-32-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0178; DQ-32-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero179; DQ-32-NEXT: vcvtdq2pd %ymm0, %zmm0180; DQ-32-NEXT: retl181;182; DQ-64-LABEL: uitofp_v8i1_v8f64:183; DQ-64: # %bb.0:184; DQ-64-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0185; DQ-64-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero186; DQ-64-NEXT: vcvtdq2pd %ymm0, %zmm0187; DQ-64-NEXT: retq188 %result = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i1(<8 x i1> %x,189 metadata !"round.dynamic",190 metadata !"fpexcept.strict") #0191 ret <8 x double> %result192}193 194define <8 x double> @sitofp_v8i8_v8f64(<8 x i8> %x) #0 {195; CHECK-LABEL: sitofp_v8i8_v8f64:196; CHECK: # %bb.0:197; CHECK-NEXT: vpmovsxbd %xmm0, %ymm0198; CHECK-NEXT: vcvtdq2pd %ymm0, %zmm0199; CHECK-NEXT: ret{{[l|q]}}200 %result = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i8(<8 x i8> %x,201 metadata !"round.dynamic",202 metadata !"fpexcept.strict") #0203 ret <8 x double> %result204}205 206define <8 x double> @uitofp_v8i8_v8f64(<8 x i8> %x) #0 {207; CHECK-LABEL: uitofp_v8i8_v8f64:208; CHECK: # %bb.0:209; CHECK-NEXT: vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero210; CHECK-NEXT: vcvtdq2pd %ymm0, %zmm0211; CHECK-NEXT: ret{{[l|q]}}212 %result = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i8(<8 x i8> %x,213 metadata !"round.dynamic",214 metadata !"fpexcept.strict") #0215 ret <8 x double> %result216}217 218define <8 x double> @sitofp_v8i16_v8f64(<8 x i16> %x) #0 {219; CHECK-LABEL: sitofp_v8i16_v8f64:220; CHECK: # %bb.0:221; CHECK-NEXT: vpmovsxwd %xmm0, %ymm0222; CHECK-NEXT: vcvtdq2pd %ymm0, %zmm0223; CHECK-NEXT: ret{{[l|q]}}224 %result = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i16(<8 x i16> %x,225 metadata !"round.dynamic",226 metadata !"fpexcept.strict") #0227 ret <8 x double> %result228}229 230define <8 x double> @uitofp_v8i16_v8f64(<8 x i16> %x) #0 {231; CHECK-LABEL: uitofp_v8i16_v8f64:232; CHECK: # %bb.0:233; CHECK-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero234; CHECK-NEXT: vcvtdq2pd %ymm0, %zmm0235; CHECK-NEXT: ret{{[l|q]}}236 %result = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i16(<8 x i16> %x,237 metadata !"round.dynamic",238 metadata !"fpexcept.strict") #0239 ret <8 x double> %result240}241 242define <8 x double> @sitofp_v8i32_v8f64(<8 x i32> %x) #0 {243; CHECK-LABEL: sitofp_v8i32_v8f64:244; CHECK: # %bb.0:245; CHECK-NEXT: vcvtdq2pd %ymm0, %zmm0246; CHECK-NEXT: ret{{[l|q]}}247 %result = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i32(<8 x i32> %x,248 metadata !"round.dynamic",249 metadata !"fpexcept.strict") #0250 ret <8 x double> %result251}252 253define <8 x double> @uitofp_v8i32_v8f64(<8 x i32> %x) #0 {254; CHECK-LABEL: uitofp_v8i32_v8f64:255; CHECK: # %bb.0:256; CHECK-NEXT: vcvtudq2pd %ymm0, %zmm0257; CHECK-NEXT: ret{{[l|q]}}258 %result = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i32(<8 x i32> %x,259 metadata !"round.dynamic",260 metadata !"fpexcept.strict") #0261 ret <8 x double> %result262}263 264define <8 x double> @sitofp_v8i64_v8f64(<8 x i64> %x) #0 {265; NODQ-32-LABEL: sitofp_v8i64_v8f64:266; NODQ-32: # %bb.0:267; NODQ-32-NEXT: pushl %ebp268; NODQ-32-NEXT: .cfi_def_cfa_offset 8269; NODQ-32-NEXT: .cfi_offset %ebp, -8270; NODQ-32-NEXT: movl %esp, %ebp271; NODQ-32-NEXT: .cfi_def_cfa_register %ebp272; NODQ-32-NEXT: andl $-8, %esp273; NODQ-32-NEXT: subl $128, %esp274; NODQ-32-NEXT: vextractf32x4 $2, %zmm0, %xmm1275; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)276; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm1[2,3,2,3]277; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)278; NODQ-32-NEXT: vextractf32x4 $3, %zmm0, %xmm1279; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)280; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm1[2,3,2,3]281; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)282; NODQ-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)283; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]284; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)285; NODQ-32-NEXT: vextractf128 $1, %ymm0, %xmm0286; NODQ-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)287; NODQ-32-NEXT: vshufps {{.*#+}} xmm0 = xmm0[2,3,2,3]288; NODQ-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)289; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)290; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)291; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)292; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)293; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)294; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)295; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)296; NODQ-32-NEXT: fstpl (%esp)297; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)298; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)299; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)300; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)301; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)302; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)303; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)304; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)305; NODQ-32-NEXT: wait306; NODQ-32-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero307; NODQ-32-NEXT: vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]308; NODQ-32-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero309; NODQ-32-NEXT: vmovhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]310; NODQ-32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0311; NODQ-32-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero312; NODQ-32-NEXT: vmovhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]313; NODQ-32-NEXT: vmovsd {{.*#+}} xmm2 = mem[0],zero314; NODQ-32-NEXT: vmovhps {{.*#+}} xmm2 = xmm2[0,1],mem[0,1]315; NODQ-32-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1316; NODQ-32-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0317; NODQ-32-NEXT: movl %ebp, %esp318; NODQ-32-NEXT: popl %ebp319; NODQ-32-NEXT: .cfi_def_cfa %esp, 4320; NODQ-32-NEXT: retl321;322; NODQ-64-LABEL: sitofp_v8i64_v8f64:323; NODQ-64: # %bb.0:324; NODQ-64-NEXT: vextracti32x4 $3, %zmm0, %xmm1325; NODQ-64-NEXT: vpextrq $1, %xmm1, %rax326; NODQ-64-NEXT: vcvtsi2sd %rax, %xmm15, %xmm2327; NODQ-64-NEXT: vmovq %xmm1, %rax328; NODQ-64-NEXT: vcvtsi2sd %rax, %xmm15, %xmm1329; NODQ-64-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]330; NODQ-64-NEXT: vextracti32x4 $2, %zmm0, %xmm2331; NODQ-64-NEXT: vpextrq $1, %xmm2, %rax332; NODQ-64-NEXT: vcvtsi2sd %rax, %xmm15, %xmm3333; NODQ-64-NEXT: vmovq %xmm2, %rax334; NODQ-64-NEXT: vcvtsi2sd %rax, %xmm15, %xmm2335; NODQ-64-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]336; NODQ-64-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1337; NODQ-64-NEXT: vextracti128 $1, %ymm0, %xmm2338; NODQ-64-NEXT: vpextrq $1, %xmm2, %rax339; NODQ-64-NEXT: vcvtsi2sd %rax, %xmm15, %xmm3340; NODQ-64-NEXT: vmovq %xmm2, %rax341; NODQ-64-NEXT: vcvtsi2sd %rax, %xmm15, %xmm2342; NODQ-64-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]343; NODQ-64-NEXT: vpextrq $1, %xmm0, %rax344; NODQ-64-NEXT: vcvtsi2sd %rax, %xmm15, %xmm3345; NODQ-64-NEXT: vmovq %xmm0, %rax346; NODQ-64-NEXT: vcvtsi2sd %rax, %xmm15, %xmm0347; NODQ-64-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm3[0]348; NODQ-64-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0349; NODQ-64-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0350; NODQ-64-NEXT: retq351;352; DQ-LABEL: sitofp_v8i64_v8f64:353; DQ: # %bb.0:354; DQ-NEXT: vcvtqq2pd %zmm0, %zmm0355; DQ-NEXT: ret{{[l|q]}}356 %result = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i64(<8 x i64> %x,357 metadata !"round.dynamic",358 metadata !"fpexcept.strict") #0359 ret <8 x double> %result360}361 362define <8 x double> @uitofp_v8i64_v8f64(<8 x i64> %x) #0 {363; NODQ-32-LABEL: uitofp_v8i64_v8f64:364; NODQ-32: # %bb.0:365; NODQ-32-NEXT: pushl %ebp366; NODQ-32-NEXT: .cfi_def_cfa_offset 8367; NODQ-32-NEXT: .cfi_offset %ebp, -8368; NODQ-32-NEXT: movl %esp, %ebp369; NODQ-32-NEXT: .cfi_def_cfa_register %ebp370; NODQ-32-NEXT: andl $-8, %esp371; NODQ-32-NEXT: subl $128, %esp372; NODQ-32-NEXT: vextractf32x4 $2, %zmm0, %xmm3373; NODQ-32-NEXT: vmovlps %xmm3, {{[0-9]+}}(%esp)374; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm3[2,3,2,3]375; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)376; NODQ-32-NEXT: vextractf32x4 $3, %zmm0, %xmm2377; NODQ-32-NEXT: vmovlps %xmm2, {{[0-9]+}}(%esp)378; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm2[2,3,2,3]379; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)380; NODQ-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)381; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]382; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)383; NODQ-32-NEXT: vextractf128 $1, %ymm0, %xmm1384; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)385; NODQ-32-NEXT: vshufps {{.*#+}} xmm4 = xmm1[2,3,2,3]386; NODQ-32-NEXT: vmovlps %xmm4, {{[0-9]+}}(%esp)387; NODQ-32-NEXT: vextractps $1, %xmm3, %eax388; NODQ-32-NEXT: shrl $31, %eax389; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)390; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)391; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)392; NODQ-32-NEXT: wait393; NODQ-32-NEXT: vextractps $3, %xmm3, %eax394; NODQ-32-NEXT: shrl $31, %eax395; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)396; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)397; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)398; NODQ-32-NEXT: wait399; NODQ-32-NEXT: vextractps $1, %xmm2, %eax400; NODQ-32-NEXT: shrl $31, %eax401; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)402; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)403; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)404; NODQ-32-NEXT: wait405; NODQ-32-NEXT: vextractps $3, %xmm2, %eax406; NODQ-32-NEXT: shrl $31, %eax407; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)408; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)409; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)410; NODQ-32-NEXT: wait411; NODQ-32-NEXT: vextractps $1, %xmm0, %eax412; NODQ-32-NEXT: shrl $31, %eax413; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)414; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)415; NODQ-32-NEXT: fstpl (%esp)416; NODQ-32-NEXT: wait417; NODQ-32-NEXT: vextractps $3, %xmm0, %eax418; NODQ-32-NEXT: shrl $31, %eax419; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)420; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)421; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)422; NODQ-32-NEXT: wait423; NODQ-32-NEXT: vextractps $1, %xmm1, %eax424; NODQ-32-NEXT: shrl $31, %eax425; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)426; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)427; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)428; NODQ-32-NEXT: wait429; NODQ-32-NEXT: vextractps $3, %xmm1, %eax430; NODQ-32-NEXT: shrl $31, %eax431; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)432; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)433; NODQ-32-NEXT: fstpl {{[0-9]+}}(%esp)434; NODQ-32-NEXT: wait435; NODQ-32-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero436; NODQ-32-NEXT: vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]437; NODQ-32-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero438; NODQ-32-NEXT: vmovhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]439; NODQ-32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0440; NODQ-32-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero441; NODQ-32-NEXT: vmovhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]442; NODQ-32-NEXT: vmovsd {{.*#+}} xmm2 = mem[0],zero443; NODQ-32-NEXT: vmovhps {{.*#+}} xmm2 = xmm2[0,1],mem[0,1]444; NODQ-32-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1445; NODQ-32-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0446; NODQ-32-NEXT: movl %ebp, %esp447; NODQ-32-NEXT: popl %ebp448; NODQ-32-NEXT: .cfi_def_cfa %esp, 4449; NODQ-32-NEXT: retl450;451; NODQ-64-LABEL: uitofp_v8i64_v8f64:452; NODQ-64: # %bb.0:453; NODQ-64-NEXT: vextracti32x4 $3, %zmm0, %xmm1454; NODQ-64-NEXT: vpextrq $1, %xmm1, %rax455; NODQ-64-NEXT: vcvtusi2sd %rax, %xmm15, %xmm2456; NODQ-64-NEXT: vmovq %xmm1, %rax457; NODQ-64-NEXT: vcvtusi2sd %rax, %xmm15, %xmm1458; NODQ-64-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]459; NODQ-64-NEXT: vextracti32x4 $2, %zmm0, %xmm2460; NODQ-64-NEXT: vpextrq $1, %xmm2, %rax461; NODQ-64-NEXT: vcvtusi2sd %rax, %xmm15, %xmm3462; NODQ-64-NEXT: vmovq %xmm2, %rax463; NODQ-64-NEXT: vcvtusi2sd %rax, %xmm15, %xmm2464; NODQ-64-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]465; NODQ-64-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1466; NODQ-64-NEXT: vextracti128 $1, %ymm0, %xmm2467; NODQ-64-NEXT: vpextrq $1, %xmm2, %rax468; NODQ-64-NEXT: vcvtusi2sd %rax, %xmm15, %xmm3469; NODQ-64-NEXT: vmovq %xmm2, %rax470; NODQ-64-NEXT: vcvtusi2sd %rax, %xmm15, %xmm2471; NODQ-64-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]472; NODQ-64-NEXT: vpextrq $1, %xmm0, %rax473; NODQ-64-NEXT: vcvtusi2sd %rax, %xmm15, %xmm3474; NODQ-64-NEXT: vmovq %xmm0, %rax475; NODQ-64-NEXT: vcvtusi2sd %rax, %xmm15, %xmm0476; NODQ-64-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm3[0]477; NODQ-64-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0478; NODQ-64-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0479; NODQ-64-NEXT: retq480;481; DQ-LABEL: uitofp_v8i64_v8f64:482; DQ: # %bb.0:483; DQ-NEXT: vcvtuqq2pd %zmm0, %zmm0484; DQ-NEXT: ret{{[l|q]}}485 %result = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i64(<8 x i64> %x,486 metadata !"round.dynamic",487 metadata !"fpexcept.strict") #0488 ret <8 x double> %result489}490 491define <8 x float> @sitofp_v8i64_v8f32(<8 x i64> %x) #0 {492; NODQ-32-LABEL: sitofp_v8i64_v8f32:493; NODQ-32: # %bb.0:494; NODQ-32-NEXT: pushl %ebp495; NODQ-32-NEXT: .cfi_def_cfa_offset 8496; NODQ-32-NEXT: .cfi_offset %ebp, -8497; NODQ-32-NEXT: movl %esp, %ebp498; NODQ-32-NEXT: .cfi_def_cfa_register %ebp499; NODQ-32-NEXT: andl $-8, %esp500; NODQ-32-NEXT: subl $96, %esp501; NODQ-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)502; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]503; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)504; NODQ-32-NEXT: vextractf128 $1, %ymm0, %xmm1505; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)506; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm1[2,3,2,3]507; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)508; NODQ-32-NEXT: vextractf32x4 $2, %zmm0, %xmm1509; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)510; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm1[2,3,2,3]511; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)512; NODQ-32-NEXT: vextractf32x4 $3, %zmm0, %xmm0513; NODQ-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)514; NODQ-32-NEXT: vshufps {{.*#+}} xmm0 = xmm0[2,3,2,3]515; NODQ-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)516; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)517; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)518; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)519; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)520; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)521; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)522; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)523; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)524; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)525; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)526; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)527; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)528; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)529; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)530; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)531; NODQ-32-NEXT: fstps (%esp)532; NODQ-32-NEXT: wait533; NODQ-32-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero534; NODQ-32-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]535; NODQ-32-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]536; NODQ-32-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]537; NODQ-32-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero538; NODQ-32-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]539; NODQ-32-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]540; NODQ-32-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]541; NODQ-32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0542; NODQ-32-NEXT: movl %ebp, %esp543; NODQ-32-NEXT: popl %ebp544; NODQ-32-NEXT: .cfi_def_cfa %esp, 4545; NODQ-32-NEXT: retl546;547; NODQ-64-LABEL: sitofp_v8i64_v8f32:548; NODQ-64: # %bb.0:549; NODQ-64-NEXT: vextracti32x4 $2, %zmm0, %xmm1550; NODQ-64-NEXT: vpextrq $1, %xmm1, %rax551; NODQ-64-NEXT: vcvtsi2ss %rax, %xmm15, %xmm2552; NODQ-64-NEXT: vmovq %xmm1, %rax553; NODQ-64-NEXT: vcvtsi2ss %rax, %xmm15, %xmm1554; NODQ-64-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[2,3]555; NODQ-64-NEXT: vextracti32x4 $3, %zmm0, %xmm2556; NODQ-64-NEXT: vmovq %xmm2, %rax557; NODQ-64-NEXT: vcvtsi2ss %rax, %xmm15, %xmm3558; NODQ-64-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm3[0],xmm1[3]559; NODQ-64-NEXT: vpextrq $1, %xmm2, %rax560; NODQ-64-NEXT: vcvtsi2ss %rax, %xmm15, %xmm2561; NODQ-64-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]562; NODQ-64-NEXT: vpextrq $1, %xmm0, %rax563; NODQ-64-NEXT: vcvtsi2ss %rax, %xmm15, %xmm2564; NODQ-64-NEXT: vmovq %xmm0, %rax565; NODQ-64-NEXT: vcvtsi2ss %rax, %xmm15, %xmm3566; NODQ-64-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]567; NODQ-64-NEXT: vextracti128 $1, %ymm0, %xmm0568; NODQ-64-NEXT: vmovq %xmm0, %rax569; NODQ-64-NEXT: vcvtsi2ss %rax, %xmm15, %xmm3570; NODQ-64-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0],xmm2[3]571; NODQ-64-NEXT: vpextrq $1, %xmm0, %rax572; NODQ-64-NEXT: vcvtsi2ss %rax, %xmm15, %xmm0573; NODQ-64-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[0]574; NODQ-64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0575; NODQ-64-NEXT: retq576;577; DQ-LABEL: sitofp_v8i64_v8f32:578; DQ: # %bb.0:579; DQ-NEXT: vcvtqq2ps %zmm0, %ymm0580; DQ-NEXT: ret{{[l|q]}}581 %result = call <8 x float> @llvm.experimental.constrained.sitofp.v8f32.v8i64(<8 x i64> %x,582 metadata !"round.dynamic",583 metadata !"fpexcept.strict") #0584 ret <8 x float> %result585}586 587define <8 x float> @uitofp_v8i64_v8f32(<8 x i64> %x) #0 {588; NODQ-32-LABEL: uitofp_v8i64_v8f32:589; NODQ-32: # %bb.0:590; NODQ-32-NEXT: pushl %ebp591; NODQ-32-NEXT: .cfi_def_cfa_offset 8592; NODQ-32-NEXT: .cfi_offset %ebp, -8593; NODQ-32-NEXT: movl %esp, %ebp594; NODQ-32-NEXT: .cfi_def_cfa_register %ebp595; NODQ-32-NEXT: andl $-8, %esp596; NODQ-32-NEXT: subl $96, %esp597; NODQ-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)598; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]599; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)600; NODQ-32-NEXT: vextractf128 $1, %ymm0, %xmm3601; NODQ-32-NEXT: vmovlps %xmm3, {{[0-9]+}}(%esp)602; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm3[2,3,2,3]603; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)604; NODQ-32-NEXT: vextractf32x4 $2, %zmm0, %xmm2605; NODQ-32-NEXT: vmovlps %xmm2, {{[0-9]+}}(%esp)606; NODQ-32-NEXT: vshufps {{.*#+}} xmm1 = xmm2[2,3,2,3]607; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)608; NODQ-32-NEXT: vextractf32x4 $3, %zmm0, %xmm1609; NODQ-32-NEXT: vmovlps %xmm1, {{[0-9]+}}(%esp)610; NODQ-32-NEXT: vshufps {{.*#+}} xmm4 = xmm1[2,3,2,3]611; NODQ-32-NEXT: vmovlps %xmm4, {{[0-9]+}}(%esp)612; NODQ-32-NEXT: vextractps $1, %xmm0, %eax613; NODQ-32-NEXT: shrl $31, %eax614; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)615; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)616; NODQ-32-NEXT: fstps (%esp)617; NODQ-32-NEXT: wait618; NODQ-32-NEXT: vextractps $3, %xmm0, %eax619; NODQ-32-NEXT: shrl $31, %eax620; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)621; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)622; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)623; NODQ-32-NEXT: wait624; NODQ-32-NEXT: vextractps $1, %xmm3, %eax625; NODQ-32-NEXT: shrl $31, %eax626; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)627; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)628; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)629; NODQ-32-NEXT: wait630; NODQ-32-NEXT: vextractps $3, %xmm3, %eax631; NODQ-32-NEXT: shrl $31, %eax632; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)633; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)634; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)635; NODQ-32-NEXT: wait636; NODQ-32-NEXT: vextractps $1, %xmm2, %eax637; NODQ-32-NEXT: shrl $31, %eax638; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)639; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)640; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)641; NODQ-32-NEXT: wait642; NODQ-32-NEXT: vextractps $3, %xmm2, %eax643; NODQ-32-NEXT: shrl $31, %eax644; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)645; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)646; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)647; NODQ-32-NEXT: wait648; NODQ-32-NEXT: vextractps $1, %xmm1, %eax649; NODQ-32-NEXT: shrl $31, %eax650; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)651; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)652; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)653; NODQ-32-NEXT: wait654; NODQ-32-NEXT: vextractps $3, %xmm1, %eax655; NODQ-32-NEXT: shrl $31, %eax656; NODQ-32-NEXT: fildll {{[0-9]+}}(%esp)657; NODQ-32-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)658; NODQ-32-NEXT: fstps {{[0-9]+}}(%esp)659; NODQ-32-NEXT: wait660; NODQ-32-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero661; NODQ-32-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]662; NODQ-32-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]663; NODQ-32-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]664; NODQ-32-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero665; NODQ-32-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]666; NODQ-32-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]667; NODQ-32-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]668; NODQ-32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0669; NODQ-32-NEXT: movl %ebp, %esp670; NODQ-32-NEXT: popl %ebp671; NODQ-32-NEXT: .cfi_def_cfa %esp, 4672; NODQ-32-NEXT: retl673;674; NODQ-64-LABEL: uitofp_v8i64_v8f32:675; NODQ-64: # %bb.0:676; NODQ-64-NEXT: vextracti32x4 $2, %zmm0, %xmm1677; NODQ-64-NEXT: vpextrq $1, %xmm1, %rax678; NODQ-64-NEXT: vcvtusi2ss %rax, %xmm15, %xmm2679; NODQ-64-NEXT: vmovq %xmm1, %rax680; NODQ-64-NEXT: vcvtusi2ss %rax, %xmm15, %xmm1681; NODQ-64-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[2,3]682; NODQ-64-NEXT: vextracti32x4 $3, %zmm0, %xmm2683; NODQ-64-NEXT: vmovq %xmm2, %rax684; NODQ-64-NEXT: vcvtusi2ss %rax, %xmm15, %xmm3685; NODQ-64-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm3[0],xmm1[3]686; NODQ-64-NEXT: vpextrq $1, %xmm2, %rax687; NODQ-64-NEXT: vcvtusi2ss %rax, %xmm15, %xmm2688; NODQ-64-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]689; NODQ-64-NEXT: vpextrq $1, %xmm0, %rax690; NODQ-64-NEXT: vcvtusi2ss %rax, %xmm15, %xmm2691; NODQ-64-NEXT: vmovq %xmm0, %rax692; NODQ-64-NEXT: vcvtusi2ss %rax, %xmm15, %xmm3693; NODQ-64-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]694; NODQ-64-NEXT: vextracti128 $1, %ymm0, %xmm0695; NODQ-64-NEXT: vmovq %xmm0, %rax696; NODQ-64-NEXT: vcvtusi2ss %rax, %xmm15, %xmm3697; NODQ-64-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0],xmm2[3]698; NODQ-64-NEXT: vpextrq $1, %xmm0, %rax699; NODQ-64-NEXT: vcvtusi2ss %rax, %xmm15, %xmm0700; NODQ-64-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[0]701; NODQ-64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0702; NODQ-64-NEXT: retq703;704; DQ-LABEL: uitofp_v8i64_v8f32:705; DQ: # %bb.0:706; DQ-NEXT: vcvtuqq2ps %zmm0, %ymm0707; DQ-NEXT: ret{{[l|q]}}708 %result = call <8 x float> @llvm.experimental.constrained.uitofp.v8f32.v8i64(<8 x i64> %x,709 metadata !"round.dynamic",710 metadata !"fpexcept.strict") #0711 ret <8 x float> %result712}713 714attributes #0 = { strictfp }715