386 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X86-SSE3; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx | FileCheck %s --check-prefix=X86-AVX4; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefix=X86-AVX512F5; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefix=X86-AVX512DQ6; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X64-SSE7; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=X64-AVX8; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefix=X64-AVX512F9; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefix=X64-AVX512DQ10 11;PR2907812 13define <2 x double> @mask_sitofp_2i64_2f64(<2 x i64> %a) nounwind {14; X86-SSE-LABEL: mask_sitofp_2i64_2f64:15; X86-SSE: # %bb.0:16; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]17; X86-SSE-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm018; X86-SSE-NEXT: cvtdq2pd %xmm0, %xmm019; X86-SSE-NEXT: retl20;21; X86-AVX-LABEL: mask_sitofp_2i64_2f64:22; X86-AVX: # %bb.0:23; X86-AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[8,9],zero,zero,xmm0[u,u,u,u,u,u,u,u]24; X86-AVX-NEXT: vcvtdq2pd %xmm0, %xmm025; X86-AVX-NEXT: retl26;27; X86-AVX512F-LABEL: mask_sitofp_2i64_2f64:28; X86-AVX512F: # %bb.0:29; X86-AVX512F-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[8,9],zero,zero,xmm0[u,u,u,u,u,u,u,u]30; X86-AVX512F-NEXT: vcvtdq2pd %xmm0, %xmm031; X86-AVX512F-NEXT: retl32;33; X86-AVX512DQ-LABEL: mask_sitofp_2i64_2f64:34; X86-AVX512DQ: # %bb.0:35; X86-AVX512DQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm036; X86-AVX512DQ-NEXT: vcvtqq2pd %xmm0, %xmm037; X86-AVX512DQ-NEXT: retl38;39; X64-SSE-LABEL: mask_sitofp_2i64_2f64:40; X64-SSE: # %bb.0:41; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]42; X64-SSE-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm043; X64-SSE-NEXT: cvtdq2pd %xmm0, %xmm044; X64-SSE-NEXT: retq45;46; X64-AVX-LABEL: mask_sitofp_2i64_2f64:47; X64-AVX: # %bb.0:48; X64-AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[8,9],zero,zero,xmm0[u,u,u,u,u,u,u,u]49; X64-AVX-NEXT: vcvtdq2pd %xmm0, %xmm050; X64-AVX-NEXT: retq51;52; X64-AVX512F-LABEL: mask_sitofp_2i64_2f64:53; X64-AVX512F: # %bb.0:54; X64-AVX512F-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[8,9],zero,zero,xmm0[u,u,u,u,u,u,u,u]55; X64-AVX512F-NEXT: vcvtdq2pd %xmm0, %xmm056; X64-AVX512F-NEXT: retq57;58; X64-AVX512DQ-LABEL: mask_sitofp_2i64_2f64:59; X64-AVX512DQ: # %bb.0:60; X64-AVX512DQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm061; X64-AVX512DQ-NEXT: vcvtqq2pd %xmm0, %xmm062; X64-AVX512DQ-NEXT: retq63 %and = and <2 x i64> %a, <i64 255, i64 65535>64 %cvt = sitofp <2 x i64> %and to <2 x double>65 ret <2 x double> %cvt66}67 68define <2 x double> @mask_uitofp_2i64_2f64(<2 x i64> %a) nounwind {69; X86-SSE-LABEL: mask_uitofp_2i64_2f64:70; X86-SSE: # %bb.0:71; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]72; X86-SSE-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm073; X86-SSE-NEXT: cvtdq2pd %xmm0, %xmm074; X86-SSE-NEXT: retl75;76; X86-AVX-LABEL: mask_uitofp_2i64_2f64:77; X86-AVX: # %bb.0:78; X86-AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[8,9],zero,zero,xmm0[u,u,u,u,u,u,u,u]79; X86-AVX-NEXT: vcvtdq2pd %xmm0, %xmm080; X86-AVX-NEXT: retl81;82; X86-AVX512F-LABEL: mask_uitofp_2i64_2f64:83; X86-AVX512F: # %bb.0:84; X86-AVX512F-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[8,9],zero,zero,xmm0[u,u,u,u,u,u,u,u]85; X86-AVX512F-NEXT: vcvtdq2pd %xmm0, %xmm086; X86-AVX512F-NEXT: retl87;88; X86-AVX512DQ-LABEL: mask_uitofp_2i64_2f64:89; X86-AVX512DQ: # %bb.0:90; X86-AVX512DQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm091; X86-AVX512DQ-NEXT: vcvtqq2pd %xmm0, %xmm092; X86-AVX512DQ-NEXT: retl93;94; X64-SSE-LABEL: mask_uitofp_2i64_2f64:95; X64-SSE: # %bb.0:96; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]97; X64-SSE-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm098; X64-SSE-NEXT: cvtdq2pd %xmm0, %xmm099; X64-SSE-NEXT: retq100;101; X64-AVX-LABEL: mask_uitofp_2i64_2f64:102; X64-AVX: # %bb.0:103; X64-AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[8,9],zero,zero,xmm0[u,u,u,u,u,u,u,u]104; X64-AVX-NEXT: vcvtdq2pd %xmm0, %xmm0105; X64-AVX-NEXT: retq106;107; X64-AVX512F-LABEL: mask_uitofp_2i64_2f64:108; X64-AVX512F: # %bb.0:109; X64-AVX512F-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[8,9],zero,zero,xmm0[u,u,u,u,u,u,u,u]110; X64-AVX512F-NEXT: vcvtdq2pd %xmm0, %xmm0111; X64-AVX512F-NEXT: retq112;113; X64-AVX512DQ-LABEL: mask_uitofp_2i64_2f64:114; X64-AVX512DQ: # %bb.0:115; X64-AVX512DQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0116; X64-AVX512DQ-NEXT: vcvtqq2pd %xmm0, %xmm0117; X64-AVX512DQ-NEXT: retq118 %and = and <2 x i64> %a, <i64 255, i64 65535>119 %cvt = uitofp <2 x i64> %and to <2 x double>120 ret <2 x double> %cvt121}122 123define <4 x float> @mask_sitofp_4i64_4f32(<4 x i64> %a) nounwind {124; X86-SSE-LABEL: mask_sitofp_4i64_4f32:125; X86-SSE: # %bb.0:126; X86-SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]127; X86-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0128; X86-SSE-NEXT: cvtdq2ps %xmm0, %xmm0129; X86-SSE-NEXT: retl130;131; X86-AVX-LABEL: mask_sitofp_4i64_4f32:132; X86-AVX: # %bb.0:133; X86-AVX-NEXT: vextractf128 $1, %ymm0, %xmm1134; X86-AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]135; X86-AVX-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0136; X86-AVX-NEXT: vcvtdq2ps %xmm0, %xmm0137; X86-AVX-NEXT: vzeroupper138; X86-AVX-NEXT: retl139;140; X86-AVX512F-LABEL: mask_sitofp_4i64_4f32:141; X86-AVX512F: # %bb.0:142; X86-AVX512F-NEXT: vpmovqd %ymm0, %xmm0143; X86-AVX512F-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0144; X86-AVX512F-NEXT: vcvtdq2ps %xmm0, %xmm0145; X86-AVX512F-NEXT: vzeroupper146; X86-AVX512F-NEXT: retl147;148; X86-AVX512DQ-LABEL: mask_sitofp_4i64_4f32:149; X86-AVX512DQ: # %bb.0:150; X86-AVX512DQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0151; X86-AVX512DQ-NEXT: vcvtqq2ps %ymm0, %xmm0152; X86-AVX512DQ-NEXT: vzeroupper153; X86-AVX512DQ-NEXT: retl154;155; X64-SSE-LABEL: mask_sitofp_4i64_4f32:156; X64-SSE: # %bb.0:157; X64-SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]158; X64-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0159; X64-SSE-NEXT: cvtdq2ps %xmm0, %xmm0160; X64-SSE-NEXT: retq161;162; X64-AVX-LABEL: mask_sitofp_4i64_4f32:163; X64-AVX: # %bb.0:164; X64-AVX-NEXT: vextractf128 $1, %ymm0, %xmm1165; X64-AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]166; X64-AVX-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0167; X64-AVX-NEXT: vcvtdq2ps %xmm0, %xmm0168; X64-AVX-NEXT: vzeroupper169; X64-AVX-NEXT: retq170;171; X64-AVX512F-LABEL: mask_sitofp_4i64_4f32:172; X64-AVX512F: # %bb.0:173; X64-AVX512F-NEXT: vpmovqd %ymm0, %xmm0174; X64-AVX512F-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0175; X64-AVX512F-NEXT: vcvtdq2ps %xmm0, %xmm0176; X64-AVX512F-NEXT: vzeroupper177; X64-AVX512F-NEXT: retq178;179; X64-AVX512DQ-LABEL: mask_sitofp_4i64_4f32:180; X64-AVX512DQ: # %bb.0:181; X64-AVX512DQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0182; X64-AVX512DQ-NEXT: vcvtqq2ps %ymm0, %xmm0183; X64-AVX512DQ-NEXT: vzeroupper184; X64-AVX512DQ-NEXT: retq185 %and = and <4 x i64> %a, <i64 127, i64 255, i64 4095, i64 65535>186 %cvt = sitofp <4 x i64> %and to <4 x float>187 ret <4 x float> %cvt188}189 190define <4 x float> @mask_uitofp_4i64_4f32(<4 x i64> %a) nounwind {191; X86-SSE-LABEL: mask_uitofp_4i64_4f32:192; X86-SSE: # %bb.0:193; X86-SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]194; X86-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0195; X86-SSE-NEXT: cvtdq2ps %xmm0, %xmm0196; X86-SSE-NEXT: retl197;198; X86-AVX-LABEL: mask_uitofp_4i64_4f32:199; X86-AVX: # %bb.0:200; X86-AVX-NEXT: vextractf128 $1, %ymm0, %xmm1201; X86-AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]202; X86-AVX-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0203; X86-AVX-NEXT: vcvtdq2ps %xmm0, %xmm0204; X86-AVX-NEXT: vzeroupper205; X86-AVX-NEXT: retl206;207; X86-AVX512F-LABEL: mask_uitofp_4i64_4f32:208; X86-AVX512F: # %bb.0:209; X86-AVX512F-NEXT: vpmovqd %ymm0, %xmm0210; X86-AVX512F-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0211; X86-AVX512F-NEXT: vcvtdq2ps %xmm0, %xmm0212; X86-AVX512F-NEXT: vzeroupper213; X86-AVX512F-NEXT: retl214;215; X86-AVX512DQ-LABEL: mask_uitofp_4i64_4f32:216; X86-AVX512DQ: # %bb.0:217; X86-AVX512DQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0218; X86-AVX512DQ-NEXT: vcvtqq2ps %ymm0, %xmm0219; X86-AVX512DQ-NEXT: vzeroupper220; X86-AVX512DQ-NEXT: retl221;222; X64-SSE-LABEL: mask_uitofp_4i64_4f32:223; X64-SSE: # %bb.0:224; X64-SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]225; X64-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0226; X64-SSE-NEXT: cvtdq2ps %xmm0, %xmm0227; X64-SSE-NEXT: retq228;229; X64-AVX-LABEL: mask_uitofp_4i64_4f32:230; X64-AVX: # %bb.0:231; X64-AVX-NEXT: vextractf128 $1, %ymm0, %xmm1232; X64-AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]233; X64-AVX-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0234; X64-AVX-NEXT: vcvtdq2ps %xmm0, %xmm0235; X64-AVX-NEXT: vzeroupper236; X64-AVX-NEXT: retq237;238; X64-AVX512F-LABEL: mask_uitofp_4i64_4f32:239; X64-AVX512F: # %bb.0:240; X64-AVX512F-NEXT: vpmovqd %ymm0, %xmm0241; X64-AVX512F-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0242; X64-AVX512F-NEXT: vcvtdq2ps %xmm0, %xmm0243; X64-AVX512F-NEXT: vzeroupper244; X64-AVX512F-NEXT: retq245;246; X64-AVX512DQ-LABEL: mask_uitofp_4i64_4f32:247; X64-AVX512DQ: # %bb.0:248; X64-AVX512DQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0249; X64-AVX512DQ-NEXT: vcvtqq2ps %ymm0, %xmm0250; X64-AVX512DQ-NEXT: vzeroupper251; X64-AVX512DQ-NEXT: retq252 %and = and <4 x i64> %a, <i64 127, i64 255, i64 4095, i64 65535>253 %cvt = uitofp <4 x i64> %and to <4 x float>254 ret <4 x float> %cvt255}256 257define <2 x double> @clamp_sitofp_2i64_2f64(<2 x i64> %a) nounwind {258; X86-SSE-LABEL: clamp_sitofp_2i64_2f64:259; X86-SSE: # %bb.0:260; X86-SSE-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]261; X86-SSE-NEXT: movdqa %xmm0, %xmm1262; X86-SSE-NEXT: pxor %xmm2, %xmm1263; X86-SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3]264; X86-SSE-NEXT: pcmpeqd %xmm4, %xmm4265; X86-SSE-NEXT: pcmpeqd %xmm3, %xmm4266; X86-SSE-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1267; X86-SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]268; X86-SSE-NEXT: pand %xmm4, %xmm3269; X86-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]270; X86-SSE-NEXT: por %xmm3, %xmm1271; X86-SSE-NEXT: pand %xmm1, %xmm0272; X86-SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1273; X86-SSE-NEXT: por %xmm0, %xmm1274; X86-SSE-NEXT: pxor %xmm1, %xmm2275; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]276; X86-SSE-NEXT: pxor %xmm3, %xmm3277; X86-SSE-NEXT: pcmpeqd %xmm0, %xmm3278; X86-SSE-NEXT: movdqa {{.*#+}} xmm0 = [2147483903,0,2147483903,0]279; X86-SSE-NEXT: pcmpgtd %xmm2, %xmm0280; X86-SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,0,2,2]281; X86-SSE-NEXT: pand %xmm3, %xmm2282; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]283; X86-SSE-NEXT: por %xmm2, %xmm0284; X86-SSE-NEXT: pand %xmm0, %xmm1285; X86-SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0286; X86-SSE-NEXT: por %xmm1, %xmm0287; X86-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]288; X86-SSE-NEXT: cvtdq2pd %xmm0, %xmm0289; X86-SSE-NEXT: retl290;291; X86-AVX-LABEL: clamp_sitofp_2i64_2f64:292; X86-AVX: # %bb.0:293; X86-AVX-NEXT: vmovddup {{.*#+}} xmm1 = [4294967041,4294967295,4294967041,4294967295]294; X86-AVX-NEXT: # xmm1 = mem[0,0]295; X86-AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2296; X86-AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0297; X86-AVX-NEXT: vmovddup {{.*#+}} xmm1 = [255,0,255,0]298; X86-AVX-NEXT: # xmm1 = mem[0,0]299; X86-AVX-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2300; X86-AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0301; X86-AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]302; X86-AVX-NEXT: vcvtdq2pd %xmm0, %xmm0303; X86-AVX-NEXT: retl304;305; X86-AVX512F-LABEL: clamp_sitofp_2i64_2f64:306; X86-AVX512F: # %bb.0:307; X86-AVX512F-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0308; X86-AVX512F-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0309; X86-AVX512F-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]310; X86-AVX512F-NEXT: vcvtdq2pd %xmm0, %xmm0311; X86-AVX512F-NEXT: retl312;313; X86-AVX512DQ-LABEL: clamp_sitofp_2i64_2f64:314; X86-AVX512DQ: # %bb.0:315; X86-AVX512DQ-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0316; X86-AVX512DQ-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0317; X86-AVX512DQ-NEXT: vcvtqq2pd %xmm0, %xmm0318; X86-AVX512DQ-NEXT: retl319;320; X64-SSE-LABEL: clamp_sitofp_2i64_2f64:321; X64-SSE: # %bb.0:322; X64-SSE-NEXT: movdqa {{.*#+}} xmm1 = [2147483648,2147483648]323; X64-SSE-NEXT: movdqa %xmm0, %xmm2324; X64-SSE-NEXT: pxor %xmm1, %xmm2325; X64-SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]326; X64-SSE-NEXT: pcmpeqd %xmm4, %xmm4327; X64-SSE-NEXT: pcmpeqd %xmm3, %xmm4328; X64-SSE-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2329; X64-SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]330; X64-SSE-NEXT: pand %xmm4, %xmm3331; X64-SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]332; X64-SSE-NEXT: por %xmm3, %xmm2333; X64-SSE-NEXT: pand %xmm2, %xmm0334; X64-SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2335; X64-SSE-NEXT: por %xmm0, %xmm2336; X64-SSE-NEXT: pxor %xmm2, %xmm1337; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]338; X64-SSE-NEXT: pxor %xmm3, %xmm3339; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm3340; X64-SSE-NEXT: movdqa {{.*#+}} xmm0 = [2147483903,2147483903]341; X64-SSE-NEXT: pcmpgtd %xmm1, %xmm0342; X64-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]343; X64-SSE-NEXT: pand %xmm3, %xmm1344; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]345; X64-SSE-NEXT: por %xmm1, %xmm0346; X64-SSE-NEXT: pand %xmm0, %xmm2347; X64-SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0348; X64-SSE-NEXT: por %xmm2, %xmm0349; X64-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]350; X64-SSE-NEXT: cvtdq2pd %xmm0, %xmm0351; X64-SSE-NEXT: retq352;353; X64-AVX-LABEL: clamp_sitofp_2i64_2f64:354; X64-AVX: # %bb.0:355; X64-AVX-NEXT: vpmovsxwq {{.*#+}} xmm1 = [18446744073709551361,18446744073709551361]356; X64-AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2357; X64-AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0358; X64-AVX-NEXT: vpmovzxbq {{.*#+}} xmm1 = [255,255]359; X64-AVX-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2360; X64-AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0361; X64-AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]362; X64-AVX-NEXT: vcvtdq2pd %xmm0, %xmm0363; X64-AVX-NEXT: retq364;365; X64-AVX512F-LABEL: clamp_sitofp_2i64_2f64:366; X64-AVX512F: # %bb.0:367; X64-AVX512F-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0368; X64-AVX512F-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0369; X64-AVX512F-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]370; X64-AVX512F-NEXT: vcvtdq2pd %xmm0, %xmm0371; X64-AVX512F-NEXT: retq372;373; X64-AVX512DQ-LABEL: clamp_sitofp_2i64_2f64:374; X64-AVX512DQ: # %bb.0:375; X64-AVX512DQ-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0376; X64-AVX512DQ-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0377; X64-AVX512DQ-NEXT: vcvtqq2pd %xmm0, %xmm0378; X64-AVX512DQ-NEXT: retq379 %clo = icmp slt <2 x i64> %a, <i64 -255, i64 -255>380 %lo = select <2 x i1> %clo, <2 x i64> <i64 -255, i64 -255>, <2 x i64> %a381 %chi = icmp sgt <2 x i64> %lo, <i64 255, i64 255>382 %hi = select <2 x i1> %chi, <2 x i64> <i64 255, i64 255>, <2 x i64> %lo383 %cvt = sitofp <2 x i64> %hi to <2 x double>384 ret <2 x double> %cvt385}386