2164 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: sed 's/iXLen/i16/g' %s | llc -mtriple=i686-unknown -mattr=avx2,f16c | FileCheck %s --check-prefixes=X86-AVX-I163; RUN: sed 's/iXLen/i16/g' %s | llc -mtriple=i686-unknown -mattr=avx512fp16,avx512vl | FileCheck %s --check-prefixes=X86-FP16-I164; RUN: sed 's/iXLen/i16/g' %s | llc -mtriple=x86_64-unknown -mattr=avx2,f16c | FileCheck %s --check-prefixes=X64-AVX-I165; RUN: sed 's/iXLen/i16/g' %s | llc -mtriple=x86_64-unknown -mattr=avx512fp16,avx512vl | FileCheck %s --check-prefixes=X64-FP16-I166; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=avx2,f16c | FileCheck %s --check-prefixes=X86-AVX-I327; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=avx512fp16,avx512vl | FileCheck %s --check-prefixes=X86-FP16-I328; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=x86_64-unknown -mattr=avx2,f16c | FileCheck %s --check-prefixes=X64-AVX-I329; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=x86_64-unknown -mattr=avx512fp16,avx512vl | FileCheck %s --check-prefixes=X64-FP16-I3210 11define <1 x iXLen> @lrint_v1f16(<1 x half> %x) nounwind {12; X86-AVX-I16-LABEL: lrint_v1f16:13; X86-AVX-I16: # %bb.0:14; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm015; X86-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm016; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm017; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm018; X86-AVX-I16-NEXT: vcvttss2si %xmm0, %eax19; X86-AVX-I16-NEXT: # kill: def $ax killed $ax killed $eax20; X86-AVX-I16-NEXT: retl21;22; X86-FP16-I16-LABEL: lrint_v1f16:23; X86-FP16-I16: # %bb.0:24; X86-FP16-I16-NEXT: vcvttsh2si %xmm0, %eax25; X86-FP16-I16-NEXT: # kill: def $ax killed $ax killed $eax26; X86-FP16-I16-NEXT: retl27;28; X64-AVX-I16-LABEL: lrint_v1f16:29; X64-AVX-I16: # %bb.0:30; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm031; X64-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm032; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm033; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm034; X64-AVX-I16-NEXT: vcvttss2si %xmm0, %eax35; X64-AVX-I16-NEXT: # kill: def $ax killed $ax killed $eax36; X64-AVX-I16-NEXT: retq37;38; X64-FP16-I16-LABEL: lrint_v1f16:39; X64-FP16-I16: # %bb.0:40; X64-FP16-I16-NEXT: vcvttsh2si %xmm0, %eax41; X64-FP16-I16-NEXT: # kill: def $ax killed $ax killed $eax42; X64-FP16-I16-NEXT: retq43;44; X86-AVX-I32-LABEL: lrint_v1f16:45; X86-AVX-I32: # %bb.0:46; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm047; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm048; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm049; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm050; X86-AVX-I32-NEXT: vcvttss2si %xmm0, %eax51; X86-AVX-I32-NEXT: retl52;53; X86-FP16-I32-LABEL: lrint_v1f16:54; X86-FP16-I32: # %bb.0:55; X86-FP16-I32-NEXT: vcvttsh2si %xmm0, %eax56; X86-FP16-I32-NEXT: retl57;58; X64-AVX-I32-LABEL: lrint_v1f16:59; X64-AVX-I32: # %bb.0:60; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm061; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm062; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm063; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm064; X64-AVX-I32-NEXT: vcvttss2si %xmm0, %eax65; X64-AVX-I32-NEXT: retq66;67; X64-FP16-I32-LABEL: lrint_v1f16:68; X64-FP16-I32: # %bb.0:69; X64-FP16-I32-NEXT: vcvttsh2si %xmm0, %eax70; X64-FP16-I32-NEXT: retq71 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f16(<1 x half> %x)72 ret <1 x iXLen> %a73}74declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f16(<1 x half>)75 76define <2 x iXLen> @lrint_v2f16(<2 x half> %x) nounwind {77; X86-AVX-I16-LABEL: lrint_v2f16:78; X86-AVX-I16: # %bb.0:79; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm180; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm181; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm182; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm183; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm184; X86-AVX-I16-NEXT: vcvttss2si %xmm1, %eax85; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm186; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm187; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm188; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm189; X86-AVX-I16-NEXT: vcvttss2si %xmm1, %ecx90; X86-AVX-I16-NEXT: vmovd %ecx, %xmm191; X86-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm1, %xmm192; X86-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]93; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm294; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm295; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm296; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm297; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax98; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm199; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2100; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2101; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2102; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2103; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2104; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax105; X86-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm1, %xmm1106; X86-AVX-I16-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]107; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2108; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2109; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2110; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2111; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax112; X86-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm1, %xmm1113; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero114; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2115; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2116; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2117; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2118; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax119; X86-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm1, %xmm1120; X86-AVX-I16-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]121; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2122; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2123; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2124; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2125; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax126; X86-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm1, %xmm1127; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero128; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0129; X86-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0130; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm0131; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0132; X86-AVX-I16-NEXT: vcvttss2si %xmm0, %eax133; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0134; X86-AVX-I16-NEXT: retl135;136; X86-FP16-I16-LABEL: lrint_v2f16:137; X86-FP16-I16: # %bb.0:138; X86-FP16-I16-NEXT: vcvtph2w %xmm0, %xmm0139; X86-FP16-I16-NEXT: retl140;141; X64-AVX-I16-LABEL: lrint_v2f16:142; X64-AVX-I16: # %bb.0:143; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1144; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1145; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1146; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1147; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1148; X64-AVX-I16-NEXT: vcvttss2si %xmm1, %eax149; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm1150; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1151; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1152; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1153; X64-AVX-I16-NEXT: vcvttss2si %xmm1, %ecx154; X64-AVX-I16-NEXT: vmovd %ecx, %xmm1155; X64-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm1, %xmm1156; X64-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]157; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2158; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2159; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2160; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2161; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax162; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1163; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2164; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2165; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2166; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2167; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2168; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax169; X64-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm1, %xmm1170; X64-AVX-I16-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]171; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2172; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2173; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2174; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2175; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax176; X64-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm1, %xmm1177; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero178; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2179; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2180; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2181; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2182; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax183; X64-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm1, %xmm1184; X64-AVX-I16-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]185; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2186; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2187; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2188; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2189; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax190; X64-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm1, %xmm1191; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero192; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0193; X64-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0194; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm0195; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0196; X64-AVX-I16-NEXT: vcvttss2si %xmm0, %eax197; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0198; X64-AVX-I16-NEXT: retq199;200; X64-FP16-I16-LABEL: lrint_v2f16:201; X64-FP16-I16: # %bb.0:202; X64-FP16-I16-NEXT: vcvtph2w %xmm0, %xmm0203; X64-FP16-I16-NEXT: retq204;205; X86-AVX-I32-LABEL: lrint_v2f16:206; X86-AVX-I32: # %bb.0:207; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm1208; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1209; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1210; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1211; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1212; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %eax213; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0214; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0215; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0216; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0217; X86-AVX-I32-NEXT: vcvttss2si %xmm0, %ecx218; X86-AVX-I32-NEXT: vmovd %ecx, %xmm0219; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0220; X86-AVX-I32-NEXT: retl221;222; X86-FP16-I32-LABEL: lrint_v2f16:223; X86-FP16-I32: # %bb.0:224; X86-FP16-I32-NEXT: vcvtph2dq %xmm0, %xmm0225; X86-FP16-I32-NEXT: retl226;227; X64-AVX-I32-LABEL: lrint_v2f16:228; X64-AVX-I32: # %bb.0:229; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm1230; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1231; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1232; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1233; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1234; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %eax235; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0236; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0237; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0238; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0239; X64-AVX-I32-NEXT: vcvttss2si %xmm0, %ecx240; X64-AVX-I32-NEXT: vmovd %ecx, %xmm0241; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0242; X64-AVX-I32-NEXT: retq243;244; X64-FP16-I32-LABEL: lrint_v2f16:245; X64-FP16-I32: # %bb.0:246; X64-FP16-I32-NEXT: vcvtph2dq %xmm0, %xmm0247; X64-FP16-I32-NEXT: retq248 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f16(<2 x half> %x)249 ret <2 x iXLen> %a250}251declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f16(<2 x half>)252 253define <4 x iXLen> @lrint_v4f16(<4 x half> %x) nounwind {254; X86-AVX-I16-LABEL: lrint_v4f16:255; X86-AVX-I16: # %bb.0:256; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1257; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1258; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1259; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1260; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1261; X86-AVX-I16-NEXT: vcvttss2si %xmm1, %eax262; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm1263; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1264; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1265; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1266; X86-AVX-I16-NEXT: vcvttss2si %xmm1, %ecx267; X86-AVX-I16-NEXT: vmovd %ecx, %xmm1268; X86-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm1, %xmm1269; X86-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]270; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2271; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2272; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2273; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2274; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax275; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1276; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2277; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2278; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2279; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2280; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2281; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax282; X86-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm1, %xmm1283; X86-AVX-I16-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]284; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2285; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2286; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2287; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2288; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax289; X86-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm1, %xmm1290; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero291; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2292; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2293; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2294; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2295; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax296; X86-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm1, %xmm1297; X86-AVX-I16-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]298; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2299; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2300; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2301; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2302; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax303; X86-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm1, %xmm1304; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero305; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0306; X86-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0307; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm0308; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0309; X86-AVX-I16-NEXT: vcvttss2si %xmm0, %eax310; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0311; X86-AVX-I16-NEXT: retl312;313; X86-FP16-I16-LABEL: lrint_v4f16:314; X86-FP16-I16: # %bb.0:315; X86-FP16-I16-NEXT: vcvtph2w %xmm0, %xmm0316; X86-FP16-I16-NEXT: retl317;318; X64-AVX-I16-LABEL: lrint_v4f16:319; X64-AVX-I16: # %bb.0:320; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1321; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1322; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1323; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1324; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1325; X64-AVX-I16-NEXT: vcvttss2si %xmm1, %eax326; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm1327; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1328; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1329; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1330; X64-AVX-I16-NEXT: vcvttss2si %xmm1, %ecx331; X64-AVX-I16-NEXT: vmovd %ecx, %xmm1332; X64-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm1, %xmm1333; X64-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]334; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2335; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2336; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2337; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2338; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax339; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1340; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2341; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2342; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2343; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2344; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2345; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax346; X64-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm1, %xmm1347; X64-AVX-I16-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]348; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2349; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2350; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2351; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2352; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax353; X64-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm1, %xmm1354; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero355; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2356; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2357; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2358; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2359; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax360; X64-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm1, %xmm1361; X64-AVX-I16-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]362; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2363; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2364; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2365; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2366; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax367; X64-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm1, %xmm1368; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero369; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0370; X64-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0371; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm0372; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0373; X64-AVX-I16-NEXT: vcvttss2si %xmm0, %eax374; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0375; X64-AVX-I16-NEXT: retq376;377; X64-FP16-I16-LABEL: lrint_v4f16:378; X64-FP16-I16: # %bb.0:379; X64-FP16-I16-NEXT: vcvtph2w %xmm0, %xmm0380; X64-FP16-I16-NEXT: retq381;382; X86-AVX-I32-LABEL: lrint_v4f16:383; X86-AVX-I32: # %bb.0:384; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm1385; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1386; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1387; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1388; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1389; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %eax390; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm1391; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1392; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1393; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1394; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %ecx395; X86-AVX-I32-NEXT: vmovd %ecx, %xmm1396; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1397; X86-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]398; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2399; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2400; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2401; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2402; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax403; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm1404; X86-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0405; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0406; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0407; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0408; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0409; X86-AVX-I32-NEXT: vcvttss2si %xmm0, %eax410; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm0411; X86-AVX-I32-NEXT: retl412;413; X86-FP16-I32-LABEL: lrint_v4f16:414; X86-FP16-I32: # %bb.0:415; X86-FP16-I32-NEXT: vcvtph2dq %xmm0, %xmm0416; X86-FP16-I32-NEXT: retl417;418; X64-AVX-I32-LABEL: lrint_v4f16:419; X64-AVX-I32: # %bb.0:420; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm1421; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1422; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1423; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1424; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1425; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %eax426; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm1427; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1428; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1429; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1430; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %ecx431; X64-AVX-I32-NEXT: vmovd %ecx, %xmm1432; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1433; X64-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]434; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2435; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2436; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2437; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2438; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax439; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm1440; X64-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0441; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0442; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0443; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0444; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0445; X64-AVX-I32-NEXT: vcvttss2si %xmm0, %eax446; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm0447; X64-AVX-I32-NEXT: retq448;449; X64-FP16-I32-LABEL: lrint_v4f16:450; X64-FP16-I32: # %bb.0:451; X64-FP16-I32-NEXT: vcvtph2dq %xmm0, %xmm0452; X64-FP16-I32-NEXT: retq453 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f16(<4 x half> %x)454 ret <4 x iXLen> %a455}456declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f16(<4 x half>)457 458define <8 x iXLen> @lrint_v8f16(<8 x half> %x) nounwind {459; X86-AVX-I16-LABEL: lrint_v8f16:460; X86-AVX-I16: # %bb.0:461; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1462; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1463; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1464; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1465; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1466; X86-AVX-I16-NEXT: vcvttss2si %xmm1, %eax467; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm1468; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1469; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1470; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1471; X86-AVX-I16-NEXT: vcvttss2si %xmm1, %ecx472; X86-AVX-I16-NEXT: vmovd %ecx, %xmm1473; X86-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm1, %xmm1474; X86-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]475; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2476; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2477; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2478; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2479; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax480; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1481; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2482; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2483; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2484; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2485; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2486; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax487; X86-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm1, %xmm1488; X86-AVX-I16-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]489; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2490; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2491; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2492; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2493; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax494; X86-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm1, %xmm1495; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero496; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2497; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2498; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2499; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2500; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax501; X86-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm1, %xmm1502; X86-AVX-I16-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]503; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2504; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2505; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2506; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2507; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax508; X86-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm1, %xmm1509; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero510; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0511; X86-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0512; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm0513; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0514; X86-AVX-I16-NEXT: vcvttss2si %xmm0, %eax515; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0516; X86-AVX-I16-NEXT: retl517;518; X86-FP16-I16-LABEL: lrint_v8f16:519; X86-FP16-I16: # %bb.0:520; X86-FP16-I16-NEXT: vcvtph2w %xmm0, %xmm0521; X86-FP16-I16-NEXT: retl522;523; X64-AVX-I16-LABEL: lrint_v8f16:524; X64-AVX-I16: # %bb.0:525; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1526; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1527; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1528; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1529; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1530; X64-AVX-I16-NEXT: vcvttss2si %xmm1, %eax531; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm1532; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1533; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1534; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1535; X64-AVX-I16-NEXT: vcvttss2si %xmm1, %ecx536; X64-AVX-I16-NEXT: vmovd %ecx, %xmm1537; X64-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm1, %xmm1538; X64-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]539; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2540; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2541; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2542; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2543; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax544; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1545; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2546; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2547; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2548; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2549; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2550; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax551; X64-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm1, %xmm1552; X64-AVX-I16-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]553; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2554; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2555; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2556; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2557; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax558; X64-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm1, %xmm1559; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero560; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2561; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2562; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2563; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2564; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax565; X64-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm1, %xmm1566; X64-AVX-I16-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]567; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2568; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2569; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2570; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2571; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax572; X64-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm1, %xmm1573; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero574; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0575; X64-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0576; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm0577; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0578; X64-AVX-I16-NEXT: vcvttss2si %xmm0, %eax579; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0580; X64-AVX-I16-NEXT: retq581;582; X64-FP16-I16-LABEL: lrint_v8f16:583; X64-FP16-I16: # %bb.0:584; X64-FP16-I16-NEXT: vcvtph2w %xmm0, %xmm0585; X64-FP16-I16-NEXT: retq586;587; X86-AVX-I32-LABEL: lrint_v8f16:588; X86-AVX-I32: # %bb.0:589; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero590; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1591; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1592; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1593; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1594; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %eax595; X86-AVX-I32-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]596; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1597; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1598; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1599; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1600; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %ecx601; X86-AVX-I32-NEXT: vmovd %ecx, %xmm1602; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1603; X86-AVX-I32-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]604; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2605; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2606; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2607; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2608; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax609; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm1610; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero611; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2612; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2613; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2614; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2615; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax616; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1617; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm2618; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2619; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2620; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2621; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2622; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax623; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm2624; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2625; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2626; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2627; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %ecx628; X86-AVX-I32-NEXT: vmovd %ecx, %xmm2629; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm2, %xmm2630; X86-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]631; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3632; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3633; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3634; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3635; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax636; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2637; X86-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0638; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0639; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0640; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0641; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0642; X86-AVX-I32-NEXT: vcvttss2si %xmm0, %eax643; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm2, %xmm0644; X86-AVX-I32-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0645; X86-AVX-I32-NEXT: retl646;647; X86-FP16-I32-LABEL: lrint_v8f16:648; X86-FP16-I32: # %bb.0:649; X86-FP16-I32-NEXT: vcvtph2dq %xmm0, %ymm0650; X86-FP16-I32-NEXT: retl651;652; X64-AVX-I32-LABEL: lrint_v8f16:653; X64-AVX-I32: # %bb.0:654; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero655; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1656; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1657; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1658; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1659; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %eax660; X64-AVX-I32-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]661; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1662; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1663; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1664; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1665; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %ecx666; X64-AVX-I32-NEXT: vmovd %ecx, %xmm1667; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1668; X64-AVX-I32-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]669; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2670; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2671; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2672; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2673; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax674; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm1675; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero676; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2677; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2678; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2679; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2680; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax681; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1682; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm2683; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2684; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2685; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2686; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2687; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax688; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm2689; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2690; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2691; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2692; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %ecx693; X64-AVX-I32-NEXT: vmovd %ecx, %xmm2694; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm2, %xmm2695; X64-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]696; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3697; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3698; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3699; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3700; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax701; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2702; X64-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0703; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0704; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0705; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0706; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0707; X64-AVX-I32-NEXT: vcvttss2si %xmm0, %eax708; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm2, %xmm0709; X64-AVX-I32-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0710; X64-AVX-I32-NEXT: retq711;712; X64-FP16-I32-LABEL: lrint_v8f16:713; X64-FP16-I32: # %bb.0:714; X64-FP16-I32-NEXT: vcvtph2dq %xmm0, %ymm0715; X64-FP16-I32-NEXT: retq716 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f16(<8 x half> %x)717 ret <8 x iXLen> %a718}719declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f16(<8 x half>)720 721define <16 x iXLen> @lrint_v16f16(<16 x half> %x) nounwind {722; X86-AVX-I16-LABEL: lrint_v16f16:723; X86-AVX-I16: # %bb.0:724; X86-AVX-I16-NEXT: vextracti128 $1, %ymm0, %xmm1725; X86-AVX-I16-NEXT: vpsrld $16, %xmm1, %xmm2726; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2727; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2728; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2729; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2730; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax731; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm2732; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2733; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2734; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2735; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %ecx736; X86-AVX-I16-NEXT: vmovd %ecx, %xmm2737; X86-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm2, %xmm2738; X86-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm3 = xmm1[1,1,3,3]739; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3740; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3741; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3742; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3743; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax744; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm2, %xmm2745; X86-AVX-I16-NEXT: vpsrlq $48, %xmm1, %xmm3746; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3747; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3748; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3749; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3750; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax751; X86-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm2, %xmm2752; X86-AVX-I16-NEXT: vshufpd {{.*#+}} xmm3 = xmm1[1,0]753; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3754; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3755; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3756; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3757; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax758; X86-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm2, %xmm2759; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm3 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero760; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3761; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3762; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3763; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3764; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax765; X86-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm2, %xmm2766; X86-AVX-I16-NEXT: vshufps {{.*#+}} xmm3 = xmm1[3,3,3,3]767; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3768; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3769; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3770; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3771; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax772; X86-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm2, %xmm2773; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero774; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1775; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1776; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1777; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1778; X86-AVX-I16-NEXT: vcvttss2si %xmm1, %eax779; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm2, %xmm1780; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm2781; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2782; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2783; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2784; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2785; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax786; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm2787; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2788; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2789; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2790; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %ecx791; X86-AVX-I16-NEXT: vmovd %ecx, %xmm2792; X86-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm2, %xmm2793; X86-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]794; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3795; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3796; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3797; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3798; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax799; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm2, %xmm2800; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm3801; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3802; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3803; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3804; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3805; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax806; X86-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm2, %xmm2807; X86-AVX-I16-NEXT: vshufpd {{.*#+}} xmm3 = xmm0[1,0]808; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3809; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3810; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3811; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3812; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax813; X86-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm2, %xmm2814; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm3 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero815; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3816; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3817; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3818; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3819; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax820; X86-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm2, %xmm2821; X86-AVX-I16-NEXT: vshufps {{.*#+}} xmm3 = xmm0[3,3,3,3]822; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3823; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3824; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3825; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3826; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax827; X86-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm2, %xmm2828; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero829; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0830; X86-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0831; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm0832; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0833; X86-AVX-I16-NEXT: vcvttss2si %xmm0, %eax834; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm2, %xmm0835; X86-AVX-I16-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0836; X86-AVX-I16-NEXT: retl837;838; X86-FP16-I16-LABEL: lrint_v16f16:839; X86-FP16-I16: # %bb.0:840; X86-FP16-I16-NEXT: vcvtph2w %ymm0, %ymm0841; X86-FP16-I16-NEXT: retl842;843; X64-AVX-I16-LABEL: lrint_v16f16:844; X64-AVX-I16: # %bb.0:845; X64-AVX-I16-NEXT: vextracti128 $1, %ymm0, %xmm1846; X64-AVX-I16-NEXT: vpsrld $16, %xmm1, %xmm2847; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2848; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2849; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2850; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2851; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax852; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm2853; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2854; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2855; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2856; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %ecx857; X64-AVX-I16-NEXT: vmovd %ecx, %xmm2858; X64-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm2, %xmm2859; X64-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm3 = xmm1[1,1,3,3]860; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3861; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3862; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3863; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3864; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax865; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm2, %xmm2866; X64-AVX-I16-NEXT: vpsrlq $48, %xmm1, %xmm3867; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3868; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3869; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3870; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3871; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax872; X64-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm2, %xmm2873; X64-AVX-I16-NEXT: vshufpd {{.*#+}} xmm3 = xmm1[1,0]874; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3875; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3876; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3877; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3878; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax879; X64-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm2, %xmm2880; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm3 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero881; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3882; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3883; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3884; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3885; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax886; X64-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm2, %xmm2887; X64-AVX-I16-NEXT: vshufps {{.*#+}} xmm3 = xmm1[3,3,3,3]888; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3889; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3890; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3891; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3892; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax893; X64-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm2, %xmm2894; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero895; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1896; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1897; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1898; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1899; X64-AVX-I16-NEXT: vcvttss2si %xmm1, %eax900; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm2, %xmm1901; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm2902; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2903; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2904; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2905; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2906; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax907; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm2908; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2909; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2910; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2911; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %ecx912; X64-AVX-I16-NEXT: vmovd %ecx, %xmm2913; X64-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm2, %xmm2914; X64-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]915; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3916; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3917; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3918; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3919; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax920; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm2, %xmm2921; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm3922; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3923; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3924; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3925; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3926; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax927; X64-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm2, %xmm2928; X64-AVX-I16-NEXT: vshufpd {{.*#+}} xmm3 = xmm0[1,0]929; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3930; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3931; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3932; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3933; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax934; X64-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm2, %xmm2935; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm3 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero936; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3937; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3938; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3939; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3940; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax941; X64-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm2, %xmm2942; X64-AVX-I16-NEXT: vshufps {{.*#+}} xmm3 = xmm0[3,3,3,3]943; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3944; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3945; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3946; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3947; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax948; X64-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm2, %xmm2949; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero950; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0951; X64-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0952; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm0953; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm0954; X64-AVX-I16-NEXT: vcvttss2si %xmm0, %eax955; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm2, %xmm0956; X64-AVX-I16-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0957; X64-AVX-I16-NEXT: retq958;959; X64-FP16-I16-LABEL: lrint_v16f16:960; X64-FP16-I16: # %bb.0:961; X64-FP16-I16-NEXT: vcvtph2w %ymm0, %ymm0962; X64-FP16-I16-NEXT: retq963;964; X86-AVX-I32-LABEL: lrint_v16f16:965; X86-AVX-I32: # %bb.0:966; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero967; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1968; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1969; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1970; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1971; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %eax972; X86-AVX-I32-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]973; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1974; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1975; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1976; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1977; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %ecx978; X86-AVX-I32-NEXT: vmovd %ecx, %xmm1979; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1980; X86-AVX-I32-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]981; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2982; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2983; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2984; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2985; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax986; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm1987; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero988; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2989; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2990; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2991; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2992; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax993; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1994; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm2995; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2996; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2997; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2998; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2999; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax1000; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm21001; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21002; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm21003; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21004; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %ecx1005; X86-AVX-I32-NEXT: vmovd %ecx, %xmm21006; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm2, %xmm21007; X86-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]1008; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31009; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31010; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31011; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31012; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1013; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm21014; X86-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm31015; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31016; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31017; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31018; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31019; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1020; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm2, %xmm21021; X86-AVX-I32-NEXT: vinserti128 $1, %xmm1, %ymm2, %ymm21022; X86-AVX-I32-NEXT: vextracti128 $1, %ymm0, %xmm01023; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1024; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11025; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm11026; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm11027; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11028; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %eax1029; X86-AVX-I32-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]1030; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11031; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm11032; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm11033; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11034; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %ecx1035; X86-AVX-I32-NEXT: vmovd %ecx, %xmm11036; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm1, %xmm11037; X86-AVX-I32-NEXT: vshufps {{.*#+}} xmm3 = xmm0[3,3,3,3]1038; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31039; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31040; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31041; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31042; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1043; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm11044; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1045; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31046; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31047; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31048; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31049; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1050; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm11051; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm31052; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31053; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31054; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31055; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31056; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1057; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm31058; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31059; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31060; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31061; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx1062; X86-AVX-I32-NEXT: vmovd %ecx, %xmm31063; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm31064; X86-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]1065; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41066; X86-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41067; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41068; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41069; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %eax1070; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm31071; X86-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm01072; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01073; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm01074; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm01075; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01076; X86-AVX-I32-NEXT: vcvttss2si %xmm0, %eax1077; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm01078; X86-AVX-I32-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm11079; X86-AVX-I32-NEXT: vmovdqa %ymm2, %ymm01080; X86-AVX-I32-NEXT: retl1081;1082; X86-FP16-I32-LABEL: lrint_v16f16:1083; X86-FP16-I32: # %bb.0:1084; X86-FP16-I32-NEXT: vcvtph2dq %ymm0, %zmm01085; X86-FP16-I32-NEXT: retl1086;1087; X64-AVX-I32-LABEL: lrint_v16f16:1088; X64-AVX-I32: # %bb.0:1089; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1090; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11091; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm11092; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm11093; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11094; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %eax1095; X64-AVX-I32-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]1096; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11097; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm11098; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm11099; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11100; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %ecx1101; X64-AVX-I32-NEXT: vmovd %ecx, %xmm11102; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm1, %xmm11103; X64-AVX-I32-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]1104; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21105; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21106; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm21107; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21108; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax1109; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm11110; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1111; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21112; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21113; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm21114; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21115; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax1116; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm11117; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm21118; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21119; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21120; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm21121; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21122; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax1123; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm21124; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21125; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm21126; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21127; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %ecx1128; X64-AVX-I32-NEXT: vmovd %ecx, %xmm21129; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm2, %xmm21130; X64-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]1131; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31132; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31133; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31134; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31135; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1136; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm21137; X64-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm31138; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31139; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31140; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31141; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31142; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1143; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm2, %xmm21144; X64-AVX-I32-NEXT: vinserti128 $1, %xmm1, %ymm2, %ymm21145; X64-AVX-I32-NEXT: vextracti128 $1, %ymm0, %xmm01146; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1147; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11148; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm11149; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm11150; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11151; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %eax1152; X64-AVX-I32-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]1153; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11154; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm11155; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm11156; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11157; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %ecx1158; X64-AVX-I32-NEXT: vmovd %ecx, %xmm11159; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm1, %xmm11160; X64-AVX-I32-NEXT: vshufps {{.*#+}} xmm3 = xmm0[3,3,3,3]1161; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31162; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31163; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31164; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31165; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1166; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm11167; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1168; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31169; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31170; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31171; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31172; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1173; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm11174; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm31175; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31176; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31177; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31178; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31179; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1180; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm31181; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31182; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31183; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31184; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx1185; X64-AVX-I32-NEXT: vmovd %ecx, %xmm31186; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm31187; X64-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]1188; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41189; X64-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41190; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41191; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41192; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %eax1193; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm31194; X64-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm01195; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01196; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm01197; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm01198; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01199; X64-AVX-I32-NEXT: vcvttss2si %xmm0, %eax1200; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm01201; X64-AVX-I32-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm11202; X64-AVX-I32-NEXT: vmovdqa %ymm2, %ymm01203; X64-AVX-I32-NEXT: retq1204;1205; X64-FP16-I32-LABEL: lrint_v16f16:1206; X64-FP16-I32: # %bb.0:1207; X64-FP16-I32-NEXT: vcvtph2dq %ymm0, %zmm01208; X64-FP16-I32-NEXT: retq1209 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f16(<16 x half> %x)1210 ret <16 x iXLen> %a1211}1212declare <16 x iXLen> @llvm.lrint.v16iXLen.v16f16(<16 x half>)1213 1214define <32 x iXLen> @lrint_v32f32(<32 x half> %x) nounwind {1215; X86-AVX-I16-LABEL: lrint_v32f32:1216; X86-AVX-I16: # %bb.0:1217; X86-AVX-I16-NEXT: vextracti128 $1, %ymm0, %xmm21218; X86-AVX-I16-NEXT: vpsrld $16, %xmm2, %xmm31219; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31220; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31221; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31222; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31223; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax1224; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm31225; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31226; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31227; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31228; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %ecx1229; X86-AVX-I16-NEXT: vmovd %ecx, %xmm31230; X86-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm3, %xmm31231; X86-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]1232; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41233; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41234; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41235; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41236; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1237; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm31238; X86-AVX-I16-NEXT: vpsrlq $48, %xmm2, %xmm41239; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41240; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41241; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41242; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41243; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1244; X86-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm3, %xmm31245; X86-AVX-I16-NEXT: vshufpd {{.*#+}} xmm4 = xmm2[1,0]1246; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41247; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41248; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41249; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41250; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1251; X86-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm3, %xmm31252; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm4 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1253; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41254; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41255; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41256; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41257; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1258; X86-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm3, %xmm31259; X86-AVX-I16-NEXT: vshufps {{.*#+}} xmm4 = xmm2[3,3,3,3]1260; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41261; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41262; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41263; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41264; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1265; X86-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm3, %xmm31266; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1267; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm21268; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21269; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm21270; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm21271; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax1272; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm21273; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm31274; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31275; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31276; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31277; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31278; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax1279; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm31280; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31281; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31282; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31283; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %ecx1284; X86-AVX-I16-NEXT: vmovd %ecx, %xmm31285; X86-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm3, %xmm31286; X86-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]1287; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41288; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41289; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41290; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41291; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1292; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm31293; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm41294; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41295; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41296; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41297; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41298; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1299; X86-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm3, %xmm31300; X86-AVX-I16-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]1301; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41302; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41303; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41304; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41305; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1306; X86-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm3, %xmm31307; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm4 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1308; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41309; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41310; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41311; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41312; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1313; X86-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm3, %xmm31314; X86-AVX-I16-NEXT: vshufps {{.*#+}} xmm4 = xmm0[3,3,3,3]1315; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41316; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41317; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41318; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41319; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1320; X86-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm3, %xmm31321; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1322; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm01323; X86-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm01324; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm01325; X86-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm01326; X86-AVX-I16-NEXT: vcvttss2si %xmm0, %eax1327; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm01328; X86-AVX-I16-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm01329; X86-AVX-I16-NEXT: vextracti128 $1, %ymm1, %xmm21330; X86-AVX-I16-NEXT: vpsrld $16, %xmm2, %xmm31331; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31332; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31333; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31334; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31335; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax1336; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm31337; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31338; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31339; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31340; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %ecx1341; X86-AVX-I16-NEXT: vmovd %ecx, %xmm31342; X86-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm3, %xmm31343; X86-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]1344; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41345; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41346; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41347; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41348; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1349; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm31350; X86-AVX-I16-NEXT: vpsrlq $48, %xmm2, %xmm41351; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41352; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41353; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41354; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41355; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1356; X86-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm3, %xmm31357; X86-AVX-I16-NEXT: vshufpd {{.*#+}} xmm4 = xmm2[1,0]1358; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41359; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41360; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41361; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41362; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1363; X86-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm3, %xmm31364; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm4 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1365; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41366; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41367; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41368; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41369; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1370; X86-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm3, %xmm31371; X86-AVX-I16-NEXT: vshufps {{.*#+}} xmm4 = xmm2[3,3,3,3]1372; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41373; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41374; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41375; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41376; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1377; X86-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm3, %xmm31378; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1379; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm21380; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21381; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm21382; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm21383; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax1384; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm21385; X86-AVX-I16-NEXT: vpsrld $16, %xmm1, %xmm31386; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31387; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31388; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31389; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31390; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax1391; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm31392; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31393; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31394; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31395; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %ecx1396; X86-AVX-I16-NEXT: vmovd %ecx, %xmm31397; X86-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm3, %xmm31398; X86-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm4 = xmm1[1,1,3,3]1399; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41400; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41401; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41402; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41403; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1404; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm31405; X86-AVX-I16-NEXT: vpsrlq $48, %xmm1, %xmm41406; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41407; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41408; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41409; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41410; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1411; X86-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm3, %xmm31412; X86-AVX-I16-NEXT: vshufpd {{.*#+}} xmm4 = xmm1[1,0]1413; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41414; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41415; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41416; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41417; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1418; X86-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm3, %xmm31419; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm4 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1420; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41421; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41422; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41423; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41424; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1425; X86-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm3, %xmm31426; X86-AVX-I16-NEXT: vshufps {{.*#+}} xmm4 = xmm1[3,3,3,3]1427; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41428; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41429; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41430; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41431; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1432; X86-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm3, %xmm31433; X86-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1434; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm11435; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm11436; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm11437; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm11438; X86-AVX-I16-NEXT: vcvttss2si %xmm1, %eax1439; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm11440; X86-AVX-I16-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm11441; X86-AVX-I16-NEXT: retl1442;1443; X86-FP16-I16-LABEL: lrint_v32f32:1444; X86-FP16-I16: # %bb.0:1445; X86-FP16-I16-NEXT: vcvtph2w %zmm0, %zmm01446; X86-FP16-I16-NEXT: retl1447;1448; X64-AVX-I16-LABEL: lrint_v32f32:1449; X64-AVX-I16: # %bb.0:1450; X64-AVX-I16-NEXT: vextracti128 $1, %ymm0, %xmm21451; X64-AVX-I16-NEXT: vpsrld $16, %xmm2, %xmm31452; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31453; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31454; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31455; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31456; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax1457; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm31458; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31459; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31460; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31461; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %ecx1462; X64-AVX-I16-NEXT: vmovd %ecx, %xmm31463; X64-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm3, %xmm31464; X64-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]1465; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41466; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41467; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41468; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41469; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1470; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm31471; X64-AVX-I16-NEXT: vpsrlq $48, %xmm2, %xmm41472; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41473; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41474; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41475; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41476; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1477; X64-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm3, %xmm31478; X64-AVX-I16-NEXT: vshufpd {{.*#+}} xmm4 = xmm2[1,0]1479; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41480; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41481; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41482; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41483; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1484; X64-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm3, %xmm31485; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm4 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1486; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41487; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41488; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41489; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41490; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1491; X64-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm3, %xmm31492; X64-AVX-I16-NEXT: vshufps {{.*#+}} xmm4 = xmm2[3,3,3,3]1493; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41494; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41495; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41496; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41497; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1498; X64-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm3, %xmm31499; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1500; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm21501; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21502; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm21503; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm21504; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax1505; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm21506; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm31507; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31508; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31509; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31510; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31511; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax1512; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm31513; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31514; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31515; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31516; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %ecx1517; X64-AVX-I16-NEXT: vmovd %ecx, %xmm31518; X64-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm3, %xmm31519; X64-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]1520; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41521; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41522; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41523; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41524; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1525; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm31526; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm41527; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41528; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41529; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41530; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41531; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1532; X64-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm3, %xmm31533; X64-AVX-I16-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]1534; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41535; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41536; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41537; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41538; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1539; X64-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm3, %xmm31540; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm4 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1541; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41542; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41543; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41544; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41545; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1546; X64-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm3, %xmm31547; X64-AVX-I16-NEXT: vshufps {{.*#+}} xmm4 = xmm0[3,3,3,3]1548; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41549; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41550; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41551; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41552; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1553; X64-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm3, %xmm31554; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1555; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm01556; X64-AVX-I16-NEXT: vroundss $4, %xmm0, %xmm0, %xmm01557; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm0, %xmm01558; X64-AVX-I16-NEXT: vcvtph2ps %xmm0, %xmm01559; X64-AVX-I16-NEXT: vcvttss2si %xmm0, %eax1560; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm01561; X64-AVX-I16-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm01562; X64-AVX-I16-NEXT: vextracti128 $1, %ymm1, %xmm21563; X64-AVX-I16-NEXT: vpsrld $16, %xmm2, %xmm31564; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31565; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31566; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31567; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31568; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax1569; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm31570; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31571; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31572; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31573; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %ecx1574; X64-AVX-I16-NEXT: vmovd %ecx, %xmm31575; X64-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm3, %xmm31576; X64-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]1577; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41578; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41579; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41580; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41581; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1582; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm31583; X64-AVX-I16-NEXT: vpsrlq $48, %xmm2, %xmm41584; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41585; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41586; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41587; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41588; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1589; X64-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm3, %xmm31590; X64-AVX-I16-NEXT: vshufpd {{.*#+}} xmm4 = xmm2[1,0]1591; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41592; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41593; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41594; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41595; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1596; X64-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm3, %xmm31597; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm4 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1598; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41599; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41600; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41601; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41602; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1603; X64-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm3, %xmm31604; X64-AVX-I16-NEXT: vshufps {{.*#+}} xmm4 = xmm2[3,3,3,3]1605; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41606; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41607; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41608; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41609; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1610; X64-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm3, %xmm31611; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm2 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1612; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm21613; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21614; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm21615; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm21616; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax1617; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm21618; X64-AVX-I16-NEXT: vpsrld $16, %xmm1, %xmm31619; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31620; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31621; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31622; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31623; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax1624; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm31625; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31626; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm31627; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm31628; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %ecx1629; X64-AVX-I16-NEXT: vmovd %ecx, %xmm31630; X64-AVX-I16-NEXT: vpinsrw $1, %eax, %xmm3, %xmm31631; X64-AVX-I16-NEXT: vmovshdup {{.*#+}} xmm4 = xmm1[1,1,3,3]1632; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41633; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41634; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41635; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41636; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1637; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm31638; X64-AVX-I16-NEXT: vpsrlq $48, %xmm1, %xmm41639; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41640; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41641; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41642; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41643; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1644; X64-AVX-I16-NEXT: vpinsrw $3, %eax, %xmm3, %xmm31645; X64-AVX-I16-NEXT: vshufpd {{.*#+}} xmm4 = xmm1[1,0]1646; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41647; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41648; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41649; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41650; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1651; X64-AVX-I16-NEXT: vpinsrw $4, %eax, %xmm3, %xmm31652; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm4 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1653; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41654; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41655; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41656; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41657; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1658; X64-AVX-I16-NEXT: vpinsrw $5, %eax, %xmm3, %xmm31659; X64-AVX-I16-NEXT: vshufps {{.*#+}} xmm4 = xmm1[3,3,3,3]1660; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41661; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41662; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm41663; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm41664; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax1665; X64-AVX-I16-NEXT: vpinsrw $6, %eax, %xmm3, %xmm31666; X64-AVX-I16-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1667; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm11668; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm11669; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm11670; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm11671; X64-AVX-I16-NEXT: vcvttss2si %xmm1, %eax1672; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm11673; X64-AVX-I16-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm11674; X64-AVX-I16-NEXT: retq1675;1676; X64-FP16-I16-LABEL: lrint_v32f32:1677; X64-FP16-I16: # %bb.0:1678; X64-FP16-I16-NEXT: vcvtph2w %zmm0, %zmm01679; X64-FP16-I16-NEXT: retq1680;1681; X86-AVX-I32-LABEL: lrint_v32f32:1682; X86-AVX-I32: # %bb.0:1683; X86-AVX-I32-NEXT: vmovdqa %ymm0, %ymm21684; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm0 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1685; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01686; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm01687; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm01688; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01689; X86-AVX-I32-NEXT: vcvttss2si %xmm0, %eax1690; X86-AVX-I32-NEXT: vshufpd {{.*#+}} xmm0 = xmm2[1,0]1691; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01692; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm01693; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm01694; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01695; X86-AVX-I32-NEXT: vcvttss2si %xmm0, %ecx1696; X86-AVX-I32-NEXT: vmovd %ecx, %xmm01697; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm0, %xmm01698; X86-AVX-I32-NEXT: vshufps {{.*#+}} xmm3 = xmm2[3,3,3,3]1699; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31700; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31701; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31702; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31703; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1704; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm0, %xmm01705; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1706; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31707; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31708; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31709; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31710; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1711; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm0, %xmm01712; X86-AVX-I32-NEXT: vpsrld $16, %xmm2, %xmm31713; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31714; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31715; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31716; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31717; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1718; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm31719; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31720; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31721; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31722; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx1723; X86-AVX-I32-NEXT: vmovd %ecx, %xmm31724; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm31725; X86-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]1726; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41727; X86-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41728; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41729; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41730; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %eax1731; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm31732; X86-AVX-I32-NEXT: vpsrlq $48, %xmm2, %xmm41733; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41734; X86-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41735; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41736; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41737; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %eax1738; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm31739; X86-AVX-I32-NEXT: vinserti128 $1, %xmm0, %ymm3, %ymm01740; X86-AVX-I32-NEXT: vextracti128 $1, %ymm2, %xmm21741; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1742; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31743; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31744; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31745; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31746; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1747; X86-AVX-I32-NEXT: vshufpd {{.*#+}} xmm3 = xmm2[1,0]1748; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31749; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31750; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31751; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31752; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx1753; X86-AVX-I32-NEXT: vmovd %ecx, %xmm31754; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm31755; X86-AVX-I32-NEXT: vshufps {{.*#+}} xmm4 = xmm2[3,3,3,3]1756; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41757; X86-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41758; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41759; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41760; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %eax1761; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm31762; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm4 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1763; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41764; X86-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41765; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41766; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41767; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %eax1768; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm31769; X86-AVX-I32-NEXT: vpsrld $16, %xmm2, %xmm41770; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41771; X86-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41772; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41773; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41774; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %eax1775; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm41776; X86-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41777; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41778; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41779; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %ecx1780; X86-AVX-I32-NEXT: vmovd %ecx, %xmm41781; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm4, %xmm41782; X86-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]1783; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51784; X86-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm51785; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm51786; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51787; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %eax1788; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm4, %xmm41789; X86-AVX-I32-NEXT: vpsrlq $48, %xmm2, %xmm21790; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21791; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21792; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm21793; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21794; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax1795; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm4, %xmm21796; X86-AVX-I32-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm41797; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm2 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1798; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21799; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21800; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm21801; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21802; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax1803; X86-AVX-I32-NEXT: vshufpd {{.*#+}} xmm2 = xmm1[1,0]1804; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21805; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm21806; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm21807; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm21808; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %ecx1809; X86-AVX-I32-NEXT: vmovd %ecx, %xmm21810; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm2, %xmm21811; X86-AVX-I32-NEXT: vshufps {{.*#+}} xmm3 = xmm1[3,3,3,3]1812; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31813; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31814; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31815; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31816; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1817; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm21818; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1819; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31820; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31821; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31822; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31823; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1824; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm2, %xmm21825; X86-AVX-I32-NEXT: vpsrld $16, %xmm1, %xmm31826; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31827; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31828; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31829; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31830; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1831; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm31832; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31833; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31834; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31835; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx1836; X86-AVX-I32-NEXT: vmovd %ecx, %xmm31837; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm31838; X86-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]1839; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51840; X86-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm51841; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm51842; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51843; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %eax1844; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm31845; X86-AVX-I32-NEXT: vpsrlq $48, %xmm1, %xmm51846; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51847; X86-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm51848; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm51849; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51850; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %eax1851; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm31852; X86-AVX-I32-NEXT: vinserti128 $1, %xmm2, %ymm3, %ymm21853; X86-AVX-I32-NEXT: vextracti128 $1, %ymm1, %xmm11854; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1855; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31856; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31857; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31858; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31859; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1860; X86-AVX-I32-NEXT: vshufpd {{.*#+}} xmm3 = xmm1[1,0]1861; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31862; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31863; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31864; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31865; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx1866; X86-AVX-I32-NEXT: vmovd %ecx, %xmm31867; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm31868; X86-AVX-I32-NEXT: vshufps {{.*#+}} xmm5 = xmm1[3,3,3,3]1869; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51870; X86-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm51871; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm51872; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51873; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %eax1874; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm31875; X86-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm5 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1876; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51877; X86-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm51878; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm51879; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51880; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %eax1881; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm31882; X86-AVX-I32-NEXT: vpsrld $16, %xmm1, %xmm51883; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51884; X86-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm51885; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm51886; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51887; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %eax1888; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm51889; X86-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm51890; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm51891; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm51892; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %ecx1893; X86-AVX-I32-NEXT: vmovd %ecx, %xmm51894; X86-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm5, %xmm51895; X86-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm6 = xmm1[1,1,3,3]1896; X86-AVX-I32-NEXT: vcvtph2ps %xmm6, %xmm61897; X86-AVX-I32-NEXT: vroundss $4, %xmm6, %xmm6, %xmm61898; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm6, %xmm61899; X86-AVX-I32-NEXT: vcvtph2ps %xmm6, %xmm61900; X86-AVX-I32-NEXT: vcvttss2si %xmm6, %eax1901; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm5, %xmm51902; X86-AVX-I32-NEXT: vpsrlq $48, %xmm1, %xmm11903; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11904; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm11905; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm11906; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm11907; X86-AVX-I32-NEXT: vcvttss2si %xmm1, %eax1908; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm5, %xmm11909; X86-AVX-I32-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm31910; X86-AVX-I32-NEXT: vmovdqa %ymm4, %ymm11911; X86-AVX-I32-NEXT: retl1912;1913; X86-FP16-I32-LABEL: lrint_v32f32:1914; X86-FP16-I32: # %bb.0:1915; X86-FP16-I32-NEXT: vcvtph2dq %ymm0, %zmm21916; X86-FP16-I32-NEXT: vextractf64x4 $1, %zmm0, %ymm01917; X86-FP16-I32-NEXT: vcvtph2dq %ymm0, %zmm11918; X86-FP16-I32-NEXT: vmovaps %zmm2, %zmm01919; X86-FP16-I32-NEXT: retl1920;1921; X64-AVX-I32-LABEL: lrint_v32f32:1922; X64-AVX-I32: # %bb.0:1923; X64-AVX-I32-NEXT: vmovdqa %ymm0, %ymm21924; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm0 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1925; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01926; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm01927; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm01928; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01929; X64-AVX-I32-NEXT: vcvttss2si %xmm0, %eax1930; X64-AVX-I32-NEXT: vshufpd {{.*#+}} xmm0 = xmm2[1,0]1931; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01932; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm01933; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm01934; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm01935; X64-AVX-I32-NEXT: vcvttss2si %xmm0, %ecx1936; X64-AVX-I32-NEXT: vmovd %ecx, %xmm01937; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm0, %xmm01938; X64-AVX-I32-NEXT: vshufps {{.*#+}} xmm3 = xmm2[3,3,3,3]1939; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31940; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31941; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31942; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31943; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1944; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm0, %xmm01945; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1946; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31947; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31948; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31949; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31950; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1951; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm0, %xmm01952; X64-AVX-I32-NEXT: vpsrld $16, %xmm2, %xmm31953; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31954; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31955; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31956; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31957; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1958; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm31959; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31960; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31961; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31962; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx1963; X64-AVX-I32-NEXT: vmovd %ecx, %xmm31964; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm31965; X64-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]1966; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41967; X64-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41968; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41969; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41970; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %eax1971; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm31972; X64-AVX-I32-NEXT: vpsrlq $48, %xmm2, %xmm41973; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41974; X64-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41975; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41976; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41977; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %eax1978; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm31979; X64-AVX-I32-NEXT: vinserti128 $1, %xmm0, %ymm3, %ymm01980; X64-AVX-I32-NEXT: vextracti128 $1, %ymm2, %xmm21981; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1982; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31983; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31984; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31985; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31986; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax1987; X64-AVX-I32-NEXT: vshufpd {{.*#+}} xmm3 = xmm2[1,0]1988; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31989; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm31990; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm31991; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm31992; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx1993; X64-AVX-I32-NEXT: vmovd %ecx, %xmm31994; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm31995; X64-AVX-I32-NEXT: vshufps {{.*#+}} xmm4 = xmm2[3,3,3,3]1996; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm41997; X64-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm41998; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm41999; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm42000; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %eax2001; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm32002; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm4 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2003; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm42004; X64-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm42005; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm42006; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm42007; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %eax2008; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm32009; X64-AVX-I32-NEXT: vpsrld $16, %xmm2, %xmm42010; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm42011; X64-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm42012; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm42013; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm42014; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %eax2015; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm42016; X64-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm42017; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm42018; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm42019; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %ecx2020; X64-AVX-I32-NEXT: vmovd %ecx, %xmm42021; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm4, %xmm42022; X64-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]2023; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52024; X64-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm52025; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm52026; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52027; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %eax2028; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm4, %xmm42029; X64-AVX-I32-NEXT: vpsrlq $48, %xmm2, %xmm22030; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm22031; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm22032; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm22033; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm22034; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax2035; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm4, %xmm22036; X64-AVX-I32-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm42037; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm2 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2038; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm22039; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm22040; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm22041; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm22042; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax2043; X64-AVX-I32-NEXT: vshufpd {{.*#+}} xmm2 = xmm1[1,0]2044; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm22045; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm22046; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm22047; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm22048; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %ecx2049; X64-AVX-I32-NEXT: vmovd %ecx, %xmm22050; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm2, %xmm22051; X64-AVX-I32-NEXT: vshufps {{.*#+}} xmm3 = xmm1[3,3,3,3]2052; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32053; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm32054; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm32055; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32056; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax2057; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm22058; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2059; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32060; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm32061; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm32062; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32063; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax2064; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm2, %xmm22065; X64-AVX-I32-NEXT: vpsrld $16, %xmm1, %xmm32066; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32067; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm32068; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm32069; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32070; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax2071; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm32072; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm32073; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm32074; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32075; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx2076; X64-AVX-I32-NEXT: vmovd %ecx, %xmm32077; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm32078; X64-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]2079; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52080; X64-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm52081; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm52082; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52083; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %eax2084; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm32085; X64-AVX-I32-NEXT: vpsrlq $48, %xmm1, %xmm52086; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52087; X64-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm52088; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm52089; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52090; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %eax2091; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm32092; X64-AVX-I32-NEXT: vinserti128 $1, %xmm2, %ymm3, %ymm22093; X64-AVX-I32-NEXT: vextracti128 $1, %ymm1, %xmm12094; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm3 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2095; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32096; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm32097; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm32098; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32099; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax2100; X64-AVX-I32-NEXT: vshufpd {{.*#+}} xmm3 = xmm1[1,0]2101; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32102; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm32103; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm32104; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm32105; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %ecx2106; X64-AVX-I32-NEXT: vmovd %ecx, %xmm32107; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm3, %xmm32108; X64-AVX-I32-NEXT: vshufps {{.*#+}} xmm5 = xmm1[3,3,3,3]2109; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52110; X64-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm52111; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm52112; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52113; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %eax2114; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm32115; X64-AVX-I32-NEXT: vpsrldq {{.*#+}} xmm5 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2116; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52117; X64-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm52118; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm52119; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52120; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %eax2121; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm32122; X64-AVX-I32-NEXT: vpsrld $16, %xmm1, %xmm52123; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52124; X64-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm52125; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm52126; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52127; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %eax2128; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm52129; X64-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm52130; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm52131; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm52132; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %ecx2133; X64-AVX-I32-NEXT: vmovd %ecx, %xmm52134; X64-AVX-I32-NEXT: vpinsrd $1, %eax, %xmm5, %xmm52135; X64-AVX-I32-NEXT: vmovshdup {{.*#+}} xmm6 = xmm1[1,1,3,3]2136; X64-AVX-I32-NEXT: vcvtph2ps %xmm6, %xmm62137; X64-AVX-I32-NEXT: vroundss $4, %xmm6, %xmm6, %xmm62138; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm6, %xmm62139; X64-AVX-I32-NEXT: vcvtph2ps %xmm6, %xmm62140; X64-AVX-I32-NEXT: vcvttss2si %xmm6, %eax2141; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm5, %xmm52142; X64-AVX-I32-NEXT: vpsrlq $48, %xmm1, %xmm12143; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm12144; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm12145; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm12146; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm12147; X64-AVX-I32-NEXT: vcvttss2si %xmm1, %eax2148; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm5, %xmm12149; X64-AVX-I32-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm32150; X64-AVX-I32-NEXT: vmovdqa %ymm4, %ymm12151; X64-AVX-I32-NEXT: retq2152;2153; X64-FP16-I32-LABEL: lrint_v32f32:2154; X64-FP16-I32: # %bb.0:2155; X64-FP16-I32-NEXT: vcvtph2dq %ymm0, %zmm22156; X64-FP16-I32-NEXT: vextractf64x4 $1, %zmm0, %ymm02157; X64-FP16-I32-NEXT: vcvtph2dq %ymm0, %zmm12158; X64-FP16-I32-NEXT: vmovaps %zmm2, %zmm02159; X64-FP16-I32-NEXT: retq2160 %a = call <32 x iXLen> @llvm.lrint.v32iXLen.v32f32(<32 x half> %x)2161 ret <32 x iXLen> %a2162}2163declare <32 x iXLen> @llvm.lrint.v32iXLen.v32f32(<32 x half>)2164