1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3 4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41 5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-SLOW 7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST 8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F 9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512VL 10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BW 11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BWVL 12 13; 14; PACKUS saturation truncation to vXi32 15; 16 17define <4 x i32> @trunc_packus_v4i64_v4i32(<4 x i64> %a0) { 18; SSE2-LABEL: trunc_packus_v4i64_v4i32: 19; SSE2: # %bb.0: 20; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [4294967295,4294967295] 21; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 22; SSE2-NEXT: movdqa %xmm0, %xmm3 23; SSE2-NEXT: pxor %xmm2, %xmm3 24; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483647,2147483647] 25; SSE2-NEXT: movdqa %xmm5, %xmm6 26; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 27; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 28; SSE2-NEXT: pcmpeqd %xmm5, %xmm3 29; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3] 30; SSE2-NEXT: pand %xmm7, %xmm4 31; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 32; SSE2-NEXT: por %xmm4, %xmm3 33; SSE2-NEXT: pand %xmm3, %xmm0 34; SSE2-NEXT: pandn %xmm8, %xmm3 35; SSE2-NEXT: por %xmm0, %xmm3 36; SSE2-NEXT: movdqa %xmm1, %xmm0 37; SSE2-NEXT: pxor %xmm2, %xmm0 38; SSE2-NEXT: movdqa %xmm5, %xmm4 39; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 40; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 41; SSE2-NEXT: pcmpeqd %xmm5, %xmm0 42; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 43; SSE2-NEXT: pand %xmm6, %xmm0 44; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 45; SSE2-NEXT: por %xmm0, %xmm4 46; SSE2-NEXT: pand %xmm4, %xmm1 47; SSE2-NEXT: pandn %xmm8, %xmm4 48; SSE2-NEXT: por %xmm1, %xmm4 49; SSE2-NEXT: movdqa %xmm4, %xmm0 50; SSE2-NEXT: pxor %xmm2, %xmm0 51; SSE2-NEXT: movdqa %xmm0, %xmm1 52; SSE2-NEXT: pcmpgtd %xmm2, %xmm1 53; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2] 54; SSE2-NEXT: pcmpeqd %xmm2, %xmm0 55; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 56; SSE2-NEXT: pand %xmm5, %xmm0 57; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 58; SSE2-NEXT: por %xmm0, %xmm1 59; SSE2-NEXT: pand %xmm4, %xmm1 60; SSE2-NEXT: movdqa %xmm3, %xmm0 61; SSE2-NEXT: pxor %xmm2, %xmm0 62; SSE2-NEXT: movdqa %xmm0, %xmm4 63; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 64; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 65; SSE2-NEXT: pcmpeqd %xmm2, %xmm0 66; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3] 67; SSE2-NEXT: pand %xmm5, %xmm2 68; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 69; SSE2-NEXT: por %xmm2, %xmm0 70; SSE2-NEXT: pand %xmm3, %xmm0 71; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] 72; SSE2-NEXT: retq 73; 74; SSSE3-LABEL: trunc_packus_v4i64_v4i32: 75; SSSE3: # %bb.0: 76; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [4294967295,4294967295] 77; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 78; SSSE3-NEXT: movdqa %xmm0, %xmm3 79; SSSE3-NEXT: pxor %xmm2, %xmm3 80; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [2147483647,2147483647] 81; SSSE3-NEXT: movdqa %xmm5, %xmm6 82; SSSE3-NEXT: pcmpgtd %xmm3, %xmm6 83; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 84; SSSE3-NEXT: pcmpeqd %xmm5, %xmm3 85; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3] 86; SSSE3-NEXT: pand %xmm7, %xmm4 87; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 88; SSSE3-NEXT: por %xmm4, %xmm3 89; SSSE3-NEXT: pand %xmm3, %xmm0 90; SSSE3-NEXT: pandn %xmm8, %xmm3 91; SSSE3-NEXT: por %xmm0, %xmm3 92; SSSE3-NEXT: movdqa %xmm1, %xmm0 93; SSSE3-NEXT: pxor %xmm2, %xmm0 94; SSSE3-NEXT: movdqa %xmm5, %xmm4 95; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4 96; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 97; SSSE3-NEXT: pcmpeqd %xmm5, %xmm0 98; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 99; SSSE3-NEXT: pand %xmm6, %xmm0 100; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 101; SSSE3-NEXT: por %xmm0, %xmm4 102; SSSE3-NEXT: pand %xmm4, %xmm1 103; SSSE3-NEXT: pandn %xmm8, %xmm4 104; SSSE3-NEXT: por %xmm1, %xmm4 105; SSSE3-NEXT: movdqa %xmm4, %xmm0 106; SSSE3-NEXT: pxor %xmm2, %xmm0 107; SSSE3-NEXT: movdqa %xmm0, %xmm1 108; SSSE3-NEXT: pcmpgtd %xmm2, %xmm1 109; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2] 110; SSSE3-NEXT: pcmpeqd %xmm2, %xmm0 111; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 112; SSSE3-NEXT: pand %xmm5, %xmm0 113; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 114; SSSE3-NEXT: por %xmm0, %xmm1 115; SSSE3-NEXT: pand %xmm4, %xmm1 116; SSSE3-NEXT: movdqa %xmm3, %xmm0 117; SSSE3-NEXT: pxor %xmm2, %xmm0 118; SSSE3-NEXT: movdqa %xmm0, %xmm4 119; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4 120; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 121; SSSE3-NEXT: pcmpeqd %xmm2, %xmm0 122; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3] 123; SSSE3-NEXT: pand %xmm5, %xmm2 124; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 125; SSSE3-NEXT: por %xmm2, %xmm0 126; SSSE3-NEXT: pand %xmm3, %xmm0 127; SSSE3-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] 128; SSSE3-NEXT: retq 129; 130; SSE41-LABEL: trunc_packus_v4i64_v4i32: 131; SSE41: # %bb.0: 132; SSE41-NEXT: movdqa %xmm0, %xmm2 133; SSE41-NEXT: movapd {{.*#+}} xmm4 = [4294967295,4294967295] 134; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648] 135; SSE41-NEXT: pxor %xmm3, %xmm0 136; SSE41-NEXT: movdqa {{.*#+}} xmm6 = [2147483647,2147483647] 137; SSE41-NEXT: movdqa %xmm6, %xmm5 138; SSE41-NEXT: pcmpgtd %xmm0, %xmm5 139; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2] 140; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 141; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 142; SSE41-NEXT: pand %xmm7, %xmm0 143; SSE41-NEXT: por %xmm5, %xmm0 144; SSE41-NEXT: movapd %xmm4, %xmm5 145; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm5 146; SSE41-NEXT: movdqa %xmm1, %xmm0 147; SSE41-NEXT: pxor %xmm3, %xmm0 148; SSE41-NEXT: movdqa %xmm6, %xmm2 149; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 150; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm2[0,0,2,2] 151; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 152; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 153; SSE41-NEXT: pand %xmm7, %xmm0 154; SSE41-NEXT: por %xmm2, %xmm0 155; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm4 156; SSE41-NEXT: xorpd %xmm1, %xmm1 157; SSE41-NEXT: movapd %xmm4, %xmm0 158; SSE41-NEXT: xorpd %xmm3, %xmm0 159; SSE41-NEXT: movapd %xmm0, %xmm2 160; SSE41-NEXT: pcmpgtd %xmm3, %xmm2 161; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2] 162; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 163; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 164; SSE41-NEXT: pand %xmm6, %xmm0 165; SSE41-NEXT: por %xmm2, %xmm0 166; SSE41-NEXT: pxor %xmm2, %xmm2 167; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2 168; SSE41-NEXT: movapd %xmm5, %xmm0 169; SSE41-NEXT: xorpd %xmm3, %xmm0 170; SSE41-NEXT: movapd %xmm0, %xmm4 171; SSE41-NEXT: pcmpgtd %xmm3, %xmm4 172; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 173; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 174; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 175; SSE41-NEXT: pand %xmm6, %xmm0 176; SSE41-NEXT: por %xmm4, %xmm0 177; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm1 178; SSE41-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2] 179; SSE41-NEXT: movaps %xmm1, %xmm0 180; SSE41-NEXT: retq 181; 182; AVX1-LABEL: trunc_packus_v4i64_v4i32: 183; AVX1: # %bb.0: 184; AVX1-NEXT: vmovapd {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295] 185; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 186; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [4294967295,4294967295] 187; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 188; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm3 189; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 190; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 191; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 192; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 193; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 194; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm1 195; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 196; AVX1-NEXT: vpand %xmm0, %xmm2, %xmm0 197; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] 198; AVX1-NEXT: vzeroupper 199; AVX1-NEXT: retq 200; 201; AVX2-SLOW-LABEL: trunc_packus_v4i64_v4i32: 202; AVX2-SLOW: # %bb.0: 203; AVX2-SLOW-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295] 204; AVX2-SLOW-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 205; AVX2-SLOW-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 206; AVX2-SLOW-NEXT: vpxor %xmm1, %xmm1, %xmm1 207; AVX2-SLOW-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm1 208; AVX2-SLOW-NEXT: vpand %ymm0, %ymm1, %ymm0 209; AVX2-SLOW-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,2,3,4,6,6,7] 210; AVX2-SLOW-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 211; AVX2-SLOW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 212; AVX2-SLOW-NEXT: vzeroupper 213; AVX2-SLOW-NEXT: retq 214; 215; AVX2-FAST-LABEL: trunc_packus_v4i64_v4i32: 216; AVX2-FAST: # %bb.0: 217; AVX2-FAST-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295] 218; AVX2-FAST-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 219; AVX2-FAST-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 220; AVX2-FAST-NEXT: vpxor %xmm1, %xmm1, %xmm1 221; AVX2-FAST-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm1 222; AVX2-FAST-NEXT: vpand %ymm0, %ymm1, %ymm0 223; AVX2-FAST-NEXT: vmovdqa {{.*#+}} ymm1 = [0,2,4,6,4,6,6,7] 224; AVX2-FAST-NEXT: vpermd %ymm0, %ymm1, %ymm0 225; AVX2-FAST-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 226; AVX2-FAST-NEXT: vzeroupper 227; AVX2-FAST-NEXT: retq 228; 229; AVX512F-LABEL: trunc_packus_v4i64_v4i32: 230; AVX512F: # %bb.0: 231; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 232; AVX512F-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295] 233; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 234; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1 235; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 236; AVX512F-NEXT: vpmovqd %zmm0, %ymm0 237; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 238; AVX512F-NEXT: vzeroupper 239; AVX512F-NEXT: retq 240; 241; AVX512VL-LABEL: trunc_packus_v4i64_v4i32: 242; AVX512VL: # %bb.0: 243; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1 244; AVX512VL-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 245; AVX512VL-NEXT: vpmovusqd %ymm0, %xmm0 246; AVX512VL-NEXT: vzeroupper 247; AVX512VL-NEXT: retq 248; 249; AVX512BW-LABEL: trunc_packus_v4i64_v4i32: 250; AVX512BW: # %bb.0: 251; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 252; AVX512BW-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295] 253; AVX512BW-NEXT: vpminsq %zmm1, %zmm0, %zmm0 254; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1 255; AVX512BW-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 256; AVX512BW-NEXT: vpmovqd %zmm0, %ymm0 257; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 258; AVX512BW-NEXT: vzeroupper 259; AVX512BW-NEXT: retq 260; 261; AVX512BWVL-LABEL: trunc_packus_v4i64_v4i32: 262; AVX512BWVL: # %bb.0: 263; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 264; AVX512BWVL-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 265; AVX512BWVL-NEXT: vpmovusqd %ymm0, %xmm0 266; AVX512BWVL-NEXT: vzeroupper 267; AVX512BWVL-NEXT: retq 268 %1 = icmp slt <4 x i64> %a0, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295> 269 %2 = select <4 x i1> %1, <4 x i64> %a0, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295> 270 %3 = icmp sgt <4 x i64> %2, zeroinitializer 271 %4 = select <4 x i1> %3, <4 x i64> %2, <4 x i64> zeroinitializer 272 %5 = trunc <4 x i64> %4 to <4 x i32> 273 ret <4 x i32> %5 274} 275 276 277define <8 x i32> @trunc_packus_v8i64_v8i32(<8 x i64> %a0) { 278; SSE2-LABEL: trunc_packus_v8i64_v8i32: 279; SSE2: # %bb.0: 280; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [4294967295,4294967295] 281; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 282; SSE2-NEXT: movdqa %xmm0, %xmm5 283; SSE2-NEXT: pxor %xmm10, %xmm5 284; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483647,2147483647] 285; SSE2-NEXT: movdqa %xmm9, %xmm6 286; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 287; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 288; SSE2-NEXT: pcmpeqd %xmm9, %xmm5 289; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 290; SSE2-NEXT: pand %xmm7, %xmm4 291; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 292; SSE2-NEXT: por %xmm4, %xmm5 293; SSE2-NEXT: pand %xmm5, %xmm0 294; SSE2-NEXT: pandn %xmm8, %xmm5 295; SSE2-NEXT: por %xmm0, %xmm5 296; SSE2-NEXT: movdqa %xmm1, %xmm0 297; SSE2-NEXT: pxor %xmm10, %xmm0 298; SSE2-NEXT: movdqa %xmm9, %xmm4 299; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 300; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 301; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 302; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 303; SSE2-NEXT: pand %xmm6, %xmm7 304; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 305; SSE2-NEXT: por %xmm7, %xmm0 306; SSE2-NEXT: pand %xmm0, %xmm1 307; SSE2-NEXT: pandn %xmm8, %xmm0 308; SSE2-NEXT: por %xmm1, %xmm0 309; SSE2-NEXT: movdqa %xmm2, %xmm1 310; SSE2-NEXT: pxor %xmm10, %xmm1 311; SSE2-NEXT: movdqa %xmm9, %xmm4 312; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 313; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 314; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 315; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 316; SSE2-NEXT: pand %xmm6, %xmm1 317; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3] 318; SSE2-NEXT: por %xmm1, %xmm6 319; SSE2-NEXT: pand %xmm6, %xmm2 320; SSE2-NEXT: pandn %xmm8, %xmm6 321; SSE2-NEXT: por %xmm2, %xmm6 322; SSE2-NEXT: movdqa %xmm3, %xmm1 323; SSE2-NEXT: pxor %xmm10, %xmm1 324; SSE2-NEXT: movdqa %xmm9, %xmm2 325; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 326; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 327; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 328; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 329; SSE2-NEXT: pand %xmm4, %xmm1 330; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 331; SSE2-NEXT: por %xmm1, %xmm2 332; SSE2-NEXT: pand %xmm2, %xmm3 333; SSE2-NEXT: pandn %xmm8, %xmm2 334; SSE2-NEXT: por %xmm3, %xmm2 335; SSE2-NEXT: movdqa %xmm2, %xmm1 336; SSE2-NEXT: pxor %xmm10, %xmm1 337; SSE2-NEXT: movdqa %xmm1, %xmm3 338; SSE2-NEXT: pcmpgtd %xmm10, %xmm3 339; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 340; SSE2-NEXT: pcmpeqd %xmm10, %xmm1 341; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 342; SSE2-NEXT: pand %xmm4, %xmm1 343; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 344; SSE2-NEXT: por %xmm1, %xmm3 345; SSE2-NEXT: pand %xmm2, %xmm3 346; SSE2-NEXT: movdqa %xmm6, %xmm1 347; SSE2-NEXT: pxor %xmm10, %xmm1 348; SSE2-NEXT: movdqa %xmm1, %xmm2 349; SSE2-NEXT: pcmpgtd %xmm10, %xmm2 350; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 351; SSE2-NEXT: pcmpeqd %xmm10, %xmm1 352; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3] 353; SSE2-NEXT: pand %xmm4, %xmm7 354; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3] 355; SSE2-NEXT: por %xmm7, %xmm1 356; SSE2-NEXT: pand %xmm6, %xmm1 357; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2] 358; SSE2-NEXT: movdqa %xmm0, %xmm2 359; SSE2-NEXT: pxor %xmm10, %xmm2 360; SSE2-NEXT: movdqa %xmm2, %xmm3 361; SSE2-NEXT: pcmpgtd %xmm10, %xmm3 362; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 363; SSE2-NEXT: pcmpeqd %xmm10, %xmm2 364; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 365; SSE2-NEXT: pand %xmm4, %xmm2 366; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 367; SSE2-NEXT: por %xmm2, %xmm3 368; SSE2-NEXT: pand %xmm0, %xmm3 369; SSE2-NEXT: movdqa %xmm5, %xmm0 370; SSE2-NEXT: pxor %xmm10, %xmm0 371; SSE2-NEXT: movdqa %xmm0, %xmm2 372; SSE2-NEXT: pcmpgtd %xmm10, %xmm2 373; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 374; SSE2-NEXT: pcmpeqd %xmm10, %xmm0 375; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 376; SSE2-NEXT: pand %xmm4, %xmm6 377; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 378; SSE2-NEXT: por %xmm6, %xmm0 379; SSE2-NEXT: pand %xmm5, %xmm0 380; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2] 381; SSE2-NEXT: retq 382; 383; SSSE3-LABEL: trunc_packus_v8i64_v8i32: 384; SSSE3: # %bb.0: 385; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [4294967295,4294967295] 386; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 387; SSSE3-NEXT: movdqa %xmm0, %xmm5 388; SSSE3-NEXT: pxor %xmm10, %xmm5 389; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483647,2147483647] 390; SSSE3-NEXT: movdqa %xmm9, %xmm6 391; SSSE3-NEXT: pcmpgtd %xmm5, %xmm6 392; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 393; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5 394; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 395; SSSE3-NEXT: pand %xmm7, %xmm4 396; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 397; SSSE3-NEXT: por %xmm4, %xmm5 398; SSSE3-NEXT: pand %xmm5, %xmm0 399; SSSE3-NEXT: pandn %xmm8, %xmm5 400; SSSE3-NEXT: por %xmm0, %xmm5 401; SSSE3-NEXT: movdqa %xmm1, %xmm0 402; SSSE3-NEXT: pxor %xmm10, %xmm0 403; SSSE3-NEXT: movdqa %xmm9, %xmm4 404; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4 405; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 406; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 407; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 408; SSSE3-NEXT: pand %xmm6, %xmm7 409; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 410; SSSE3-NEXT: por %xmm7, %xmm0 411; SSSE3-NEXT: pand %xmm0, %xmm1 412; SSSE3-NEXT: pandn %xmm8, %xmm0 413; SSSE3-NEXT: por %xmm1, %xmm0 414; SSSE3-NEXT: movdqa %xmm2, %xmm1 415; SSSE3-NEXT: pxor %xmm10, %xmm1 416; SSSE3-NEXT: movdqa %xmm9, %xmm4 417; SSSE3-NEXT: pcmpgtd %xmm1, %xmm4 418; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 419; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 420; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 421; SSSE3-NEXT: pand %xmm6, %xmm1 422; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3] 423; SSSE3-NEXT: por %xmm1, %xmm6 424; SSSE3-NEXT: pand %xmm6, %xmm2 425; SSSE3-NEXT: pandn %xmm8, %xmm6 426; SSSE3-NEXT: por %xmm2, %xmm6 427; SSSE3-NEXT: movdqa %xmm3, %xmm1 428; SSSE3-NEXT: pxor %xmm10, %xmm1 429; SSSE3-NEXT: movdqa %xmm9, %xmm2 430; SSSE3-NEXT: pcmpgtd %xmm1, %xmm2 431; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 432; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 433; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 434; SSSE3-NEXT: pand %xmm4, %xmm1 435; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 436; SSSE3-NEXT: por %xmm1, %xmm2 437; SSSE3-NEXT: pand %xmm2, %xmm3 438; SSSE3-NEXT: pandn %xmm8, %xmm2 439; SSSE3-NEXT: por %xmm3, %xmm2 440; SSSE3-NEXT: movdqa %xmm2, %xmm1 441; SSSE3-NEXT: pxor %xmm10, %xmm1 442; SSSE3-NEXT: movdqa %xmm1, %xmm3 443; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3 444; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 445; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1 446; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 447; SSSE3-NEXT: pand %xmm4, %xmm1 448; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 449; SSSE3-NEXT: por %xmm1, %xmm3 450; SSSE3-NEXT: pand %xmm2, %xmm3 451; SSSE3-NEXT: movdqa %xmm6, %xmm1 452; SSSE3-NEXT: pxor %xmm10, %xmm1 453; SSSE3-NEXT: movdqa %xmm1, %xmm2 454; SSSE3-NEXT: pcmpgtd %xmm10, %xmm2 455; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 456; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1 457; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3] 458; SSSE3-NEXT: pand %xmm4, %xmm7 459; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3] 460; SSSE3-NEXT: por %xmm7, %xmm1 461; SSSE3-NEXT: pand %xmm6, %xmm1 462; SSSE3-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2] 463; SSSE3-NEXT: movdqa %xmm0, %xmm2 464; SSSE3-NEXT: pxor %xmm10, %xmm2 465; SSSE3-NEXT: movdqa %xmm2, %xmm3 466; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3 467; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 468; SSSE3-NEXT: pcmpeqd %xmm10, %xmm2 469; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 470; SSSE3-NEXT: pand %xmm4, %xmm2 471; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 472; SSSE3-NEXT: por %xmm2, %xmm3 473; SSSE3-NEXT: pand %xmm0, %xmm3 474; SSSE3-NEXT: movdqa %xmm5, %xmm0 475; SSSE3-NEXT: pxor %xmm10, %xmm0 476; SSSE3-NEXT: movdqa %xmm0, %xmm2 477; SSSE3-NEXT: pcmpgtd %xmm10, %xmm2 478; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 479; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0 480; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 481; SSSE3-NEXT: pand %xmm4, %xmm6 482; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 483; SSSE3-NEXT: por %xmm6, %xmm0 484; SSSE3-NEXT: pand %xmm5, %xmm0 485; SSSE3-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2] 486; SSSE3-NEXT: retq 487; 488; SSE41-LABEL: trunc_packus_v8i64_v8i32: 489; SSE41: # %bb.0: 490; SSE41-NEXT: movdqa %xmm0, %xmm4 491; SSE41-NEXT: movapd {{.*#+}} xmm7 = [4294967295,4294967295] 492; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 493; SSE41-NEXT: pxor %xmm10, %xmm0 494; SSE41-NEXT: movdqa {{.*#+}} xmm11 = [2147483647,2147483647] 495; SSE41-NEXT: movdqa %xmm11, %xmm6 496; SSE41-NEXT: pcmpgtd %xmm0, %xmm6 497; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm6[0,0,2,2] 498; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 499; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 500; SSE41-NEXT: pand %xmm5, %xmm0 501; SSE41-NEXT: por %xmm6, %xmm0 502; SSE41-NEXT: movapd %xmm7, %xmm8 503; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm8 504; SSE41-NEXT: movdqa %xmm1, %xmm0 505; SSE41-NEXT: pxor %xmm10, %xmm0 506; SSE41-NEXT: movdqa %xmm11, %xmm4 507; SSE41-NEXT: pcmpgtd %xmm0, %xmm4 508; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 509; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 510; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 511; SSE41-NEXT: pand %xmm5, %xmm0 512; SSE41-NEXT: por %xmm4, %xmm0 513; SSE41-NEXT: movapd %xmm7, %xmm9 514; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm9 515; SSE41-NEXT: movdqa %xmm2, %xmm0 516; SSE41-NEXT: pxor %xmm10, %xmm0 517; SSE41-NEXT: movdqa %xmm11, %xmm1 518; SSE41-NEXT: pcmpgtd %xmm0, %xmm1 519; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2] 520; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 521; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 522; SSE41-NEXT: pand %xmm4, %xmm0 523; SSE41-NEXT: por %xmm1, %xmm0 524; SSE41-NEXT: movapd %xmm7, %xmm4 525; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm4 526; SSE41-NEXT: movdqa %xmm3, %xmm0 527; SSE41-NEXT: pxor %xmm10, %xmm0 528; SSE41-NEXT: movdqa %xmm11, %xmm1 529; SSE41-NEXT: pcmpgtd %xmm0, %xmm1 530; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 531; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 532; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 533; SSE41-NEXT: pand %xmm2, %xmm0 534; SSE41-NEXT: por %xmm1, %xmm0 535; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm7 536; SSE41-NEXT: pxor %xmm2, %xmm2 537; SSE41-NEXT: movapd %xmm7, %xmm0 538; SSE41-NEXT: xorpd %xmm10, %xmm0 539; SSE41-NEXT: movapd %xmm0, %xmm1 540; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 541; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2] 542; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 543; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 544; SSE41-NEXT: pand %xmm3, %xmm0 545; SSE41-NEXT: por %xmm1, %xmm0 546; SSE41-NEXT: pxor %xmm3, %xmm3 547; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm3 548; SSE41-NEXT: movapd %xmm4, %xmm0 549; SSE41-NEXT: xorpd %xmm10, %xmm0 550; SSE41-NEXT: movapd %xmm0, %xmm1 551; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 552; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2] 553; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 554; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 555; SSE41-NEXT: pand %xmm5, %xmm0 556; SSE41-NEXT: por %xmm1, %xmm0 557; SSE41-NEXT: pxor %xmm1, %xmm1 558; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm1 559; SSE41-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2] 560; SSE41-NEXT: movapd %xmm9, %xmm0 561; SSE41-NEXT: xorpd %xmm10, %xmm0 562; SSE41-NEXT: movapd %xmm0, %xmm3 563; SSE41-NEXT: pcmpgtd %xmm10, %xmm3 564; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 565; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 566; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 567; SSE41-NEXT: pand %xmm4, %xmm0 568; SSE41-NEXT: por %xmm3, %xmm0 569; SSE41-NEXT: pxor %xmm3, %xmm3 570; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm3 571; SSE41-NEXT: movapd %xmm8, %xmm0 572; SSE41-NEXT: xorpd %xmm10, %xmm0 573; SSE41-NEXT: movapd %xmm0, %xmm4 574; SSE41-NEXT: pcmpgtd %xmm10, %xmm4 575; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 576; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 577; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 578; SSE41-NEXT: pand %xmm5, %xmm0 579; SSE41-NEXT: por %xmm4, %xmm0 580; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm2 581; SSE41-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2] 582; SSE41-NEXT: movaps %xmm2, %xmm0 583; SSE41-NEXT: retq 584; 585; AVX1-LABEL: trunc_packus_v8i64_v8i32: 586; AVX1: # %bb.0: 587; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295] 588; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 589; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [4294967295,4294967295] 590; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 591; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5 592; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 593; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 594; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 595; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 596; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4 597; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 598; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 599; AVX1-NEXT: vxorpd %xmm2, %xmm2, %xmm2 600; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm3 601; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 602; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm5 603; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm6 604; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7 605; AVX1-NEXT: vpcmpgtq %xmm2, %xmm7, %xmm2 606; AVX1-NEXT: vpand %xmm7, %xmm2, %xmm2 607; AVX1-NEXT: vpand %xmm1, %xmm6, %xmm1 608; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2] 609; AVX1-NEXT: vpand %xmm4, %xmm5, %xmm2 610; AVX1-NEXT: vpand %xmm0, %xmm3, %xmm0 611; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2] 612; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 613; AVX1-NEXT: retq 614; 615; AVX2-SLOW-LABEL: trunc_packus_v8i64_v8i32: 616; AVX2-SLOW: # %bb.0: 617; AVX2-SLOW-NEXT: vpbroadcastq {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295] 618; AVX2-SLOW-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 619; AVX2-SLOW-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 620; AVX2-SLOW-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 621; AVX2-SLOW-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 622; AVX2-SLOW-NEXT: vpxor %xmm2, %xmm2, %xmm2 623; AVX2-SLOW-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3 624; AVX2-SLOW-NEXT: vpand %ymm1, %ymm3, %ymm1 625; AVX2-SLOW-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm2 626; AVX2-SLOW-NEXT: vpand %ymm0, %ymm2, %ymm0 627; AVX2-SLOW-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,2,3,4,6,6,7] 628; AVX2-SLOW-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 629; AVX2-SLOW-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,2,3,4,6,6,7] 630; AVX2-SLOW-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 631; AVX2-SLOW-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 632; AVX2-SLOW-NEXT: retq 633; 634; AVX2-FAST-LABEL: trunc_packus_v8i64_v8i32: 635; AVX2-FAST: # %bb.0: 636; AVX2-FAST-NEXT: vpbroadcastq {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295] 637; AVX2-FAST-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 638; AVX2-FAST-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 639; AVX2-FAST-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 640; AVX2-FAST-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 641; AVX2-FAST-NEXT: vpxor %xmm2, %xmm2, %xmm2 642; AVX2-FAST-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3 643; AVX2-FAST-NEXT: vpand %ymm1, %ymm3, %ymm1 644; AVX2-FAST-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm2 645; AVX2-FAST-NEXT: vpand %ymm0, %ymm2, %ymm0 646; AVX2-FAST-NEXT: vmovdqa {{.*#+}} ymm2 = [0,2,4,6,4,6,6,7] 647; AVX2-FAST-NEXT: vpermd %ymm0, %ymm2, %ymm0 648; AVX2-FAST-NEXT: vpermd %ymm1, %ymm2, %ymm1 649; AVX2-FAST-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 650; AVX2-FAST-NEXT: retq 651; 652; AVX512-LABEL: trunc_packus_v8i64_v8i32: 653; AVX512: # %bb.0: 654; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1 655; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 656; AVX512-NEXT: vpmovusqd %zmm0, %ymm0 657; AVX512-NEXT: retq 658 %1 = icmp slt <8 x i64> %a0, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295> 659 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295> 660 %3 = icmp sgt <8 x i64> %2, zeroinitializer 661 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer 662 %5 = trunc <8 x i64> %4 to <8 x i32> 663 ret <8 x i32> %5 664} 665 666; 667; PACKUS saturation truncation to vXi16 668; 669 670define <8 x i16> @trunc_packus_v8i64_v8i16(<8 x i64> %a0) { 671; SSE2-LABEL: trunc_packus_v8i64_v8i16: 672; SSE2: # %bb.0: 673; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [65535,65535] 674; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 675; SSE2-NEXT: movdqa %xmm1, %xmm5 676; SSE2-NEXT: pxor %xmm10, %xmm5 677; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147549183,2147549183] 678; SSE2-NEXT: movdqa %xmm9, %xmm6 679; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 680; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 681; SSE2-NEXT: pcmpeqd %xmm9, %xmm5 682; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 683; SSE2-NEXT: pand %xmm7, %xmm4 684; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 685; SSE2-NEXT: por %xmm4, %xmm5 686; SSE2-NEXT: pand %xmm5, %xmm1 687; SSE2-NEXT: pandn %xmm8, %xmm5 688; SSE2-NEXT: por %xmm1, %xmm5 689; SSE2-NEXT: movdqa %xmm0, %xmm1 690; SSE2-NEXT: pxor %xmm10, %xmm1 691; SSE2-NEXT: movdqa %xmm9, %xmm4 692; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 693; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 694; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 695; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3] 696; SSE2-NEXT: pand %xmm6, %xmm7 697; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3] 698; SSE2-NEXT: por %xmm7, %xmm1 699; SSE2-NEXT: pand %xmm1, %xmm0 700; SSE2-NEXT: pandn %xmm8, %xmm1 701; SSE2-NEXT: por %xmm0, %xmm1 702; SSE2-NEXT: movdqa %xmm3, %xmm0 703; SSE2-NEXT: pxor %xmm10, %xmm0 704; SSE2-NEXT: movdqa %xmm9, %xmm4 705; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 706; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 707; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 708; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 709; SSE2-NEXT: pand %xmm6, %xmm0 710; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3] 711; SSE2-NEXT: por %xmm0, %xmm6 712; SSE2-NEXT: pand %xmm6, %xmm3 713; SSE2-NEXT: pandn %xmm8, %xmm6 714; SSE2-NEXT: por %xmm3, %xmm6 715; SSE2-NEXT: movdqa %xmm2, %xmm0 716; SSE2-NEXT: pxor %xmm10, %xmm0 717; SSE2-NEXT: movdqa %xmm9, %xmm3 718; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 719; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 720; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 721; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 722; SSE2-NEXT: pand %xmm4, %xmm0 723; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 724; SSE2-NEXT: por %xmm0, %xmm3 725; SSE2-NEXT: pand %xmm3, %xmm2 726; SSE2-NEXT: pandn %xmm8, %xmm3 727; SSE2-NEXT: por %xmm2, %xmm3 728; SSE2-NEXT: movdqa %xmm3, %xmm0 729; SSE2-NEXT: pxor %xmm10, %xmm0 730; SSE2-NEXT: movdqa %xmm0, %xmm2 731; SSE2-NEXT: pcmpgtd %xmm10, %xmm2 732; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 733; SSE2-NEXT: pcmpeqd %xmm10, %xmm0 734; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 735; SSE2-NEXT: pand %xmm4, %xmm7 736; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 737; SSE2-NEXT: por %xmm7, %xmm0 738; SSE2-NEXT: pand %xmm3, %xmm0 739; SSE2-NEXT: movdqa %xmm6, %xmm2 740; SSE2-NEXT: pxor %xmm10, %xmm2 741; SSE2-NEXT: movdqa %xmm2, %xmm3 742; SSE2-NEXT: pcmpgtd %xmm10, %xmm3 743; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 744; SSE2-NEXT: pcmpeqd %xmm10, %xmm2 745; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 746; SSE2-NEXT: pand %xmm4, %xmm7 747; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3] 748; SSE2-NEXT: por %xmm7, %xmm2 749; SSE2-NEXT: pand %xmm6, %xmm2 750; SSE2-NEXT: movdqa %xmm1, %xmm3 751; SSE2-NEXT: pxor %xmm10, %xmm3 752; SSE2-NEXT: movdqa %xmm3, %xmm4 753; SSE2-NEXT: pcmpgtd %xmm10, %xmm4 754; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 755; SSE2-NEXT: pcmpeqd %xmm10, %xmm3 756; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 757; SSE2-NEXT: pand %xmm6, %xmm3 758; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 759; SSE2-NEXT: por %xmm3, %xmm4 760; SSE2-NEXT: pand %xmm1, %xmm4 761; SSE2-NEXT: movdqa %xmm5, %xmm1 762; SSE2-NEXT: pxor %xmm10, %xmm1 763; SSE2-NEXT: movdqa %xmm1, %xmm3 764; SSE2-NEXT: pcmpgtd %xmm10, %xmm3 765; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2] 766; SSE2-NEXT: pcmpeqd %xmm10, %xmm1 767; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 768; SSE2-NEXT: pand %xmm6, %xmm1 769; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 770; SSE2-NEXT: por %xmm1, %xmm3 771; SSE2-NEXT: pand %xmm5, %xmm3 772; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3] 773; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7] 774; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3] 775; SSE2-NEXT: pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7] 776; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1] 777; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 778; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,1,0,2,4,5,6,7] 779; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 780; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,1,0,2,4,5,6,7] 781; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 782; SSE2-NEXT: movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1] 783; SSE2-NEXT: retq 784; 785; SSSE3-LABEL: trunc_packus_v8i64_v8i16: 786; SSSE3: # %bb.0: 787; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [65535,65535] 788; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 789; SSSE3-NEXT: movdqa %xmm1, %xmm5 790; SSSE3-NEXT: pxor %xmm10, %xmm5 791; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147549183,2147549183] 792; SSSE3-NEXT: movdqa %xmm9, %xmm6 793; SSSE3-NEXT: pcmpgtd %xmm5, %xmm6 794; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 795; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5 796; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 797; SSSE3-NEXT: pand %xmm7, %xmm4 798; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 799; SSSE3-NEXT: por %xmm4, %xmm5 800; SSSE3-NEXT: pand %xmm5, %xmm1 801; SSSE3-NEXT: pandn %xmm8, %xmm5 802; SSSE3-NEXT: por %xmm1, %xmm5 803; SSSE3-NEXT: movdqa %xmm0, %xmm1 804; SSSE3-NEXT: pxor %xmm10, %xmm1 805; SSSE3-NEXT: movdqa %xmm9, %xmm4 806; SSSE3-NEXT: pcmpgtd %xmm1, %xmm4 807; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 808; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 809; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3] 810; SSSE3-NEXT: pand %xmm6, %xmm7 811; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3] 812; SSSE3-NEXT: por %xmm7, %xmm1 813; SSSE3-NEXT: pand %xmm1, %xmm0 814; SSSE3-NEXT: pandn %xmm8, %xmm1 815; SSSE3-NEXT: por %xmm0, %xmm1 816; SSSE3-NEXT: movdqa %xmm3, %xmm0 817; SSSE3-NEXT: pxor %xmm10, %xmm0 818; SSSE3-NEXT: movdqa %xmm9, %xmm4 819; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4 820; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 821; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 822; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 823; SSSE3-NEXT: pand %xmm6, %xmm0 824; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3] 825; SSSE3-NEXT: por %xmm0, %xmm6 826; SSSE3-NEXT: pand %xmm6, %xmm3 827; SSSE3-NEXT: pandn %xmm8, %xmm6 828; SSSE3-NEXT: por %xmm3, %xmm6 829; SSSE3-NEXT: movdqa %xmm2, %xmm0 830; SSSE3-NEXT: pxor %xmm10, %xmm0 831; SSSE3-NEXT: movdqa %xmm9, %xmm3 832; SSSE3-NEXT: pcmpgtd %xmm0, %xmm3 833; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 834; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 835; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 836; SSSE3-NEXT: pand %xmm4, %xmm0 837; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 838; SSSE3-NEXT: por %xmm0, %xmm3 839; SSSE3-NEXT: pand %xmm3, %xmm2 840; SSSE3-NEXT: pandn %xmm8, %xmm3 841; SSSE3-NEXT: por %xmm2, %xmm3 842; SSSE3-NEXT: movdqa %xmm3, %xmm0 843; SSSE3-NEXT: pxor %xmm10, %xmm0 844; SSSE3-NEXT: movdqa %xmm0, %xmm2 845; SSSE3-NEXT: pcmpgtd %xmm10, %xmm2 846; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 847; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0 848; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 849; SSSE3-NEXT: pand %xmm4, %xmm7 850; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 851; SSSE3-NEXT: por %xmm7, %xmm0 852; SSSE3-NEXT: pand %xmm3, %xmm0 853; SSSE3-NEXT: movdqa %xmm6, %xmm2 854; SSSE3-NEXT: pxor %xmm10, %xmm2 855; SSSE3-NEXT: movdqa %xmm2, %xmm3 856; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3 857; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 858; SSSE3-NEXT: pcmpeqd %xmm10, %xmm2 859; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 860; SSSE3-NEXT: pand %xmm4, %xmm7 861; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3] 862; SSSE3-NEXT: por %xmm7, %xmm2 863; SSSE3-NEXT: pand %xmm6, %xmm2 864; SSSE3-NEXT: movdqa %xmm1, %xmm3 865; SSSE3-NEXT: pxor %xmm10, %xmm3 866; SSSE3-NEXT: movdqa %xmm3, %xmm4 867; SSSE3-NEXT: pcmpgtd %xmm10, %xmm4 868; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 869; SSSE3-NEXT: pcmpeqd %xmm10, %xmm3 870; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 871; SSSE3-NEXT: pand %xmm6, %xmm3 872; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 873; SSSE3-NEXT: por %xmm3, %xmm4 874; SSSE3-NEXT: pand %xmm1, %xmm4 875; SSSE3-NEXT: movdqa %xmm5, %xmm1 876; SSSE3-NEXT: pxor %xmm10, %xmm1 877; SSSE3-NEXT: movdqa %xmm1, %xmm3 878; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3 879; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2] 880; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1 881; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 882; SSSE3-NEXT: pand %xmm6, %xmm1 883; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 884; SSSE3-NEXT: por %xmm1, %xmm3 885; SSSE3-NEXT: pand %xmm5, %xmm3 886; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3] 887; SSSE3-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7] 888; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3] 889; SSSE3-NEXT: pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7] 890; SSSE3-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1] 891; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 892; SSSE3-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,1,0,2,4,5,6,7] 893; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 894; SSSE3-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,1,0,2,4,5,6,7] 895; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 896; SSSE3-NEXT: movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1] 897; SSSE3-NEXT: retq 898; 899; SSE41-LABEL: trunc_packus_v8i64_v8i16: 900; SSE41: # %bb.0: 901; SSE41-NEXT: movdqa %xmm0, %xmm9 902; SSE41-NEXT: movapd {{.*#+}} xmm7 = [65535,65535] 903; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 904; SSE41-NEXT: movdqa %xmm2, %xmm0 905; SSE41-NEXT: pxor %xmm10, %xmm0 906; SSE41-NEXT: movdqa {{.*#+}} xmm6 = [2147549183,2147549183] 907; SSE41-NEXT: movdqa %xmm6, %xmm4 908; SSE41-NEXT: pcmpgtd %xmm0, %xmm4 909; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 910; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 911; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 912; SSE41-NEXT: pand %xmm5, %xmm0 913; SSE41-NEXT: por %xmm4, %xmm0 914; SSE41-NEXT: movapd %xmm7, %xmm8 915; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm8 916; SSE41-NEXT: movdqa %xmm3, %xmm0 917; SSE41-NEXT: pxor %xmm10, %xmm0 918; SSE41-NEXT: movdqa %xmm6, %xmm2 919; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 920; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 921; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 922; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 923; SSE41-NEXT: pand %xmm4, %xmm0 924; SSE41-NEXT: por %xmm2, %xmm0 925; SSE41-NEXT: movapd %xmm7, %xmm2 926; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm2 927; SSE41-NEXT: movdqa %xmm9, %xmm0 928; SSE41-NEXT: pxor %xmm10, %xmm0 929; SSE41-NEXT: movdqa %xmm6, %xmm3 930; SSE41-NEXT: pcmpgtd %xmm0, %xmm3 931; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 932; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 933; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 934; SSE41-NEXT: pand %xmm4, %xmm0 935; SSE41-NEXT: por %xmm3, %xmm0 936; SSE41-NEXT: movapd %xmm7, %xmm4 937; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm4 938; SSE41-NEXT: movdqa %xmm1, %xmm0 939; SSE41-NEXT: pxor %xmm10, %xmm0 940; SSE41-NEXT: movdqa %xmm6, %xmm3 941; SSE41-NEXT: pcmpgtd %xmm0, %xmm3 942; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2] 943; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 944; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 945; SSE41-NEXT: pand %xmm5, %xmm0 946; SSE41-NEXT: por %xmm3, %xmm0 947; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm7 948; SSE41-NEXT: pxor %xmm3, %xmm3 949; SSE41-NEXT: movapd %xmm7, %xmm0 950; SSE41-NEXT: xorpd %xmm10, %xmm0 951; SSE41-NEXT: movapd %xmm0, %xmm1 952; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 953; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2] 954; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 955; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 956; SSE41-NEXT: pand %xmm5, %xmm0 957; SSE41-NEXT: por %xmm1, %xmm0 958; SSE41-NEXT: pxor %xmm5, %xmm5 959; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm5 960; SSE41-NEXT: movapd %xmm4, %xmm0 961; SSE41-NEXT: xorpd %xmm10, %xmm0 962; SSE41-NEXT: movapd %xmm0, %xmm1 963; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 964; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 965; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 966; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 967; SSE41-NEXT: pand %xmm6, %xmm0 968; SSE41-NEXT: por %xmm1, %xmm0 969; SSE41-NEXT: pxor %xmm1, %xmm1 970; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm1 971; SSE41-NEXT: packusdw %xmm5, %xmm1 972; SSE41-NEXT: movapd %xmm2, %xmm0 973; SSE41-NEXT: xorpd %xmm10, %xmm0 974; SSE41-NEXT: movapd %xmm0, %xmm4 975; SSE41-NEXT: pcmpgtd %xmm10, %xmm4 976; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 977; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 978; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 979; SSE41-NEXT: pand %xmm5, %xmm0 980; SSE41-NEXT: por %xmm4, %xmm0 981; SSE41-NEXT: pxor %xmm4, %xmm4 982; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm4 983; SSE41-NEXT: movapd %xmm8, %xmm0 984; SSE41-NEXT: xorpd %xmm10, %xmm0 985; SSE41-NEXT: movapd %xmm0, %xmm2 986; SSE41-NEXT: pcmpgtd %xmm10, %xmm2 987; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2] 988; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 989; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 990; SSE41-NEXT: pand %xmm5, %xmm0 991; SSE41-NEXT: por %xmm2, %xmm0 992; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm3 993; SSE41-NEXT: packusdw %xmm4, %xmm3 994; SSE41-NEXT: packusdw %xmm3, %xmm1 995; SSE41-NEXT: movdqa %xmm1, %xmm0 996; SSE41-NEXT: retq 997; 998; AVX1-LABEL: trunc_packus_v8i64_v8i16: 999; AVX1: # %bb.0: 1000; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [65535,65535,65535,65535] 1001; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 1002; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [65535,65535] 1003; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1004; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5 1005; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 1006; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1007; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1008; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1009; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4 1010; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 1011; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1012; AVX1-NEXT: vxorpd %xmm2, %xmm2, %xmm2 1013; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm3 1014; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 1015; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm5 1016; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm6 1017; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7 1018; AVX1-NEXT: vpcmpgtq %xmm2, %xmm7, %xmm2 1019; AVX1-NEXT: vpand %xmm7, %xmm2, %xmm2 1020; AVX1-NEXT: vpand %xmm1, %xmm6, %xmm1 1021; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 1022; AVX1-NEXT: vpand %xmm4, %xmm5, %xmm2 1023; AVX1-NEXT: vpand %xmm0, %xmm3, %xmm0 1024; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 1025; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 1026; AVX1-NEXT: vzeroupper 1027; AVX1-NEXT: retq 1028; 1029; AVX2-LABEL: trunc_packus_v8i64_v8i16: 1030; AVX2: # %bb.0: 1031; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [65535,65535,65535,65535] 1032; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 1033; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1034; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 1035; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1036; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 1037; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3 1038; AVX2-NEXT: vpand %ymm1, %ymm3, %ymm1 1039; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm2 1040; AVX2-NEXT: vpand %ymm0, %ymm2, %ymm0 1041; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0 1042; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 1043; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 1044; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 1045; AVX2-NEXT: vzeroupper 1046; AVX2-NEXT: retq 1047; 1048; AVX512-LABEL: trunc_packus_v8i64_v8i16: 1049; AVX512: # %bb.0: 1050; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1 1051; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 1052; AVX512-NEXT: vpmovusqw %zmm0, %xmm0 1053; AVX512-NEXT: vzeroupper 1054; AVX512-NEXT: retq 1055 %1 = icmp slt <8 x i64> %a0, <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535> 1056 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535> 1057 %3 = icmp sgt <8 x i64> %2, zeroinitializer 1058 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer 1059 %5 = trunc <8 x i64> %4 to <8 x i16> 1060 ret <8 x i16> %5 1061} 1062 1063define <8 x i16> @trunc_packus_v8i32_v8i16(<8 x i32> %a0) { 1064; SSE2-LABEL: trunc_packus_v8i32_v8i16: 1065; SSE2: # %bb.0: 1066; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535] 1067; SSE2-NEXT: movdqa %xmm2, %xmm3 1068; SSE2-NEXT: pcmpgtd %xmm1, %xmm3 1069; SSE2-NEXT: pand %xmm3, %xmm1 1070; SSE2-NEXT: pandn %xmm2, %xmm3 1071; SSE2-NEXT: por %xmm1, %xmm3 1072; SSE2-NEXT: movdqa %xmm2, %xmm1 1073; SSE2-NEXT: pcmpgtd %xmm0, %xmm1 1074; SSE2-NEXT: pand %xmm1, %xmm0 1075; SSE2-NEXT: pandn %xmm2, %xmm1 1076; SSE2-NEXT: por %xmm0, %xmm1 1077; SSE2-NEXT: pxor %xmm2, %xmm2 1078; SSE2-NEXT: movdqa %xmm1, %xmm0 1079; SSE2-NEXT: pcmpgtd %xmm2, %xmm0 1080; SSE2-NEXT: pand %xmm1, %xmm0 1081; SSE2-NEXT: movdqa %xmm3, %xmm1 1082; SSE2-NEXT: pcmpgtd %xmm2, %xmm1 1083; SSE2-NEXT: pand %xmm3, %xmm1 1084; SSE2-NEXT: pslld $16, %xmm1 1085; SSE2-NEXT: psrad $16, %xmm1 1086; SSE2-NEXT: pslld $16, %xmm0 1087; SSE2-NEXT: psrad $16, %xmm0 1088; SSE2-NEXT: packssdw %xmm1, %xmm0 1089; SSE2-NEXT: retq 1090; 1091; SSSE3-LABEL: trunc_packus_v8i32_v8i16: 1092; SSSE3: # %bb.0: 1093; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535] 1094; SSSE3-NEXT: movdqa %xmm2, %xmm3 1095; SSSE3-NEXT: pcmpgtd %xmm1, %xmm3 1096; SSSE3-NEXT: pand %xmm3, %xmm1 1097; SSSE3-NEXT: pandn %xmm2, %xmm3 1098; SSSE3-NEXT: por %xmm1, %xmm3 1099; SSSE3-NEXT: movdqa %xmm2, %xmm1 1100; SSSE3-NEXT: pcmpgtd %xmm0, %xmm1 1101; SSSE3-NEXT: pand %xmm1, %xmm0 1102; SSSE3-NEXT: pandn %xmm2, %xmm1 1103; SSSE3-NEXT: por %xmm0, %xmm1 1104; SSSE3-NEXT: pxor %xmm2, %xmm2 1105; SSSE3-NEXT: movdqa %xmm1, %xmm0 1106; SSSE3-NEXT: pcmpgtd %xmm2, %xmm0 1107; SSSE3-NEXT: pand %xmm1, %xmm0 1108; SSSE3-NEXT: movdqa %xmm3, %xmm1 1109; SSSE3-NEXT: pcmpgtd %xmm2, %xmm1 1110; SSSE3-NEXT: pand %xmm3, %xmm1 1111; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 1112; SSSE3-NEXT: pshufb %xmm2, %xmm1 1113; SSSE3-NEXT: pshufb %xmm2, %xmm0 1114; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1115; SSSE3-NEXT: retq 1116; 1117; SSE41-LABEL: trunc_packus_v8i32_v8i16: 1118; SSE41: # %bb.0: 1119; SSE41-NEXT: packusdw %xmm1, %xmm0 1120; SSE41-NEXT: retq 1121; 1122; AVX1-LABEL: trunc_packus_v8i32_v8i16: 1123; AVX1: # %bb.0: 1124; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 1125; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 1126; AVX1-NEXT: vzeroupper 1127; AVX1-NEXT: retq 1128; 1129; AVX2-LABEL: trunc_packus_v8i32_v8i16: 1130; AVX2: # %bb.0: 1131; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 1132; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 1133; AVX2-NEXT: vzeroupper 1134; AVX2-NEXT: retq 1135; 1136; AVX512F-LABEL: trunc_packus_v8i32_v8i16: 1137; AVX512F: # %bb.0: 1138; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [65535,65535,65535,65535,65535,65535,65535,65535] 1139; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1140; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1 1141; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1142; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 1143; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 1144; AVX512F-NEXT: vzeroupper 1145; AVX512F-NEXT: retq 1146; 1147; AVX512VL-LABEL: trunc_packus_v8i32_v8i16: 1148; AVX512VL: # %bb.0: 1149; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1 1150; AVX512VL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1151; AVX512VL-NEXT: vpmovusdw %ymm0, %xmm0 1152; AVX512VL-NEXT: vzeroupper 1153; AVX512VL-NEXT: retq 1154; 1155; AVX512BW-LABEL: trunc_packus_v8i32_v8i16: 1156; AVX512BW: # %bb.0: 1157; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [65535,65535,65535,65535,65535,65535,65535,65535] 1158; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1159; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1 1160; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1161; AVX512BW-NEXT: vpmovdw %zmm0, %ymm0 1162; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 1163; AVX512BW-NEXT: vzeroupper 1164; AVX512BW-NEXT: retq 1165; 1166; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i16: 1167; AVX512BWVL: # %bb.0: 1168; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 1169; AVX512BWVL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1170; AVX512BWVL-NEXT: vpmovusdw %ymm0, %xmm0 1171; AVX512BWVL-NEXT: vzeroupper 1172; AVX512BWVL-NEXT: retq 1173 %1 = icmp slt <8 x i32> %a0, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535> 1174 %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535> 1175 %3 = icmp sgt <8 x i32> %2, zeroinitializer 1176 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer 1177 %5 = trunc <8 x i32> %4 to <8 x i16> 1178 ret <8 x i16> %5 1179} 1180 1181define <16 x i16> @trunc_packus_v16i32_v16i16(<16 x i32> %a0) { 1182; SSE2-LABEL: trunc_packus_v16i32_v16i16: 1183; SSE2: # %bb.0: 1184; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [65535,65535,65535,65535] 1185; SSE2-NEXT: movdqa %xmm6, %xmm4 1186; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 1187; SSE2-NEXT: pand %xmm4, %xmm1 1188; SSE2-NEXT: pandn %xmm6, %xmm4 1189; SSE2-NEXT: por %xmm1, %xmm4 1190; SSE2-NEXT: movdqa %xmm6, %xmm5 1191; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1192; SSE2-NEXT: pand %xmm5, %xmm0 1193; SSE2-NEXT: pandn %xmm6, %xmm5 1194; SSE2-NEXT: por %xmm0, %xmm5 1195; SSE2-NEXT: movdqa %xmm6, %xmm0 1196; SSE2-NEXT: pcmpgtd %xmm3, %xmm0 1197; SSE2-NEXT: pand %xmm0, %xmm3 1198; SSE2-NEXT: pandn %xmm6, %xmm0 1199; SSE2-NEXT: por %xmm3, %xmm0 1200; SSE2-NEXT: movdqa %xmm6, %xmm3 1201; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 1202; SSE2-NEXT: pand %xmm3, %xmm2 1203; SSE2-NEXT: pandn %xmm6, %xmm3 1204; SSE2-NEXT: por %xmm2, %xmm3 1205; SSE2-NEXT: pxor %xmm2, %xmm2 1206; SSE2-NEXT: movdqa %xmm3, %xmm1 1207; SSE2-NEXT: pcmpgtd %xmm2, %xmm1 1208; SSE2-NEXT: pand %xmm3, %xmm1 1209; SSE2-NEXT: movdqa %xmm0, %xmm3 1210; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 1211; SSE2-NEXT: pand %xmm0, %xmm3 1212; SSE2-NEXT: movdqa %xmm5, %xmm0 1213; SSE2-NEXT: pcmpgtd %xmm2, %xmm0 1214; SSE2-NEXT: pand %xmm5, %xmm0 1215; SSE2-NEXT: movdqa %xmm4, %xmm5 1216; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 1217; SSE2-NEXT: pand %xmm4, %xmm5 1218; SSE2-NEXT: pslld $16, %xmm5 1219; SSE2-NEXT: psrad $16, %xmm5 1220; SSE2-NEXT: pslld $16, %xmm0 1221; SSE2-NEXT: psrad $16, %xmm0 1222; SSE2-NEXT: packssdw %xmm5, %xmm0 1223; SSE2-NEXT: pslld $16, %xmm3 1224; SSE2-NEXT: psrad $16, %xmm3 1225; SSE2-NEXT: pslld $16, %xmm1 1226; SSE2-NEXT: psrad $16, %xmm1 1227; SSE2-NEXT: packssdw %xmm3, %xmm1 1228; SSE2-NEXT: retq 1229; 1230; SSSE3-LABEL: trunc_packus_v16i32_v16i16: 1231; SSSE3: # %bb.0: 1232; SSSE3-NEXT: movdqa {{.*#+}} xmm6 = [65535,65535,65535,65535] 1233; SSSE3-NEXT: movdqa %xmm6, %xmm4 1234; SSSE3-NEXT: pcmpgtd %xmm1, %xmm4 1235; SSSE3-NEXT: pand %xmm4, %xmm1 1236; SSSE3-NEXT: pandn %xmm6, %xmm4 1237; SSSE3-NEXT: por %xmm1, %xmm4 1238; SSSE3-NEXT: movdqa %xmm6, %xmm5 1239; SSSE3-NEXT: pcmpgtd %xmm0, %xmm5 1240; SSSE3-NEXT: pand %xmm5, %xmm0 1241; SSSE3-NEXT: pandn %xmm6, %xmm5 1242; SSSE3-NEXT: por %xmm0, %xmm5 1243; SSSE3-NEXT: movdqa %xmm6, %xmm0 1244; SSSE3-NEXT: pcmpgtd %xmm3, %xmm0 1245; SSSE3-NEXT: pand %xmm0, %xmm3 1246; SSSE3-NEXT: pandn %xmm6, %xmm0 1247; SSSE3-NEXT: por %xmm3, %xmm0 1248; SSSE3-NEXT: movdqa %xmm6, %xmm3 1249; SSSE3-NEXT: pcmpgtd %xmm2, %xmm3 1250; SSSE3-NEXT: pand %xmm3, %xmm2 1251; SSSE3-NEXT: pandn %xmm6, %xmm3 1252; SSSE3-NEXT: por %xmm2, %xmm3 1253; SSSE3-NEXT: pxor %xmm2, %xmm2 1254; SSSE3-NEXT: movdqa %xmm3, %xmm1 1255; SSSE3-NEXT: pcmpgtd %xmm2, %xmm1 1256; SSSE3-NEXT: pand %xmm3, %xmm1 1257; SSSE3-NEXT: movdqa %xmm0, %xmm3 1258; SSSE3-NEXT: pcmpgtd %xmm2, %xmm3 1259; SSSE3-NEXT: pand %xmm0, %xmm3 1260; SSSE3-NEXT: movdqa %xmm5, %xmm0 1261; SSSE3-NEXT: pcmpgtd %xmm2, %xmm0 1262; SSSE3-NEXT: pand %xmm5, %xmm0 1263; SSSE3-NEXT: movdqa %xmm4, %xmm5 1264; SSSE3-NEXT: pcmpgtd %xmm2, %xmm5 1265; SSSE3-NEXT: pand %xmm4, %xmm5 1266; SSSE3-NEXT: pslld $16, %xmm5 1267; SSSE3-NEXT: psrad $16, %xmm5 1268; SSSE3-NEXT: pslld $16, %xmm0 1269; SSSE3-NEXT: psrad $16, %xmm0 1270; SSSE3-NEXT: packssdw %xmm5, %xmm0 1271; SSSE3-NEXT: pslld $16, %xmm3 1272; SSSE3-NEXT: psrad $16, %xmm3 1273; SSSE3-NEXT: pslld $16, %xmm1 1274; SSSE3-NEXT: psrad $16, %xmm1 1275; SSSE3-NEXT: packssdw %xmm3, %xmm1 1276; SSSE3-NEXT: retq 1277; 1278; SSE41-LABEL: trunc_packus_v16i32_v16i16: 1279; SSE41: # %bb.0: 1280; SSE41-NEXT: packusdw %xmm1, %xmm0 1281; SSE41-NEXT: packusdw %xmm3, %xmm2 1282; SSE41-NEXT: movdqa %xmm2, %xmm1 1283; SSE41-NEXT: retq 1284; 1285; AVX1-LABEL: trunc_packus_v16i32_v16i16: 1286; AVX1: # %bb.0: 1287; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1288; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 1289; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1290; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 1291; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1292; AVX1-NEXT: retq 1293; 1294; AVX2-LABEL: trunc_packus_v16i32_v16i16: 1295; AVX2: # %bb.0: 1296; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0 1297; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 1298; AVX2-NEXT: retq 1299; 1300; AVX512-LABEL: trunc_packus_v16i32_v16i16: 1301; AVX512: # %bb.0: 1302; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1 1303; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 1304; AVX512-NEXT: vpmovusdw %zmm0, %ymm0 1305; AVX512-NEXT: retq 1306 %1 = icmp slt <16 x i32> %a0, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535> 1307 %2 = select <16 x i1> %1, <16 x i32> %a0, <16 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535> 1308 %3 = icmp sgt <16 x i32> %2, zeroinitializer 1309 %4 = select <16 x i1> %3, <16 x i32> %2, <16 x i32> zeroinitializer 1310 %5 = trunc <16 x i32> %4 to <16 x i16> 1311 ret <16 x i16> %5 1312} 1313 1314; 1315; PACKUS saturation truncation to v16i8 1316; 1317 1318define <8 x i8> @trunc_packus_v8i64_v8i8(<8 x i64> %a0) { 1319; SSE2-LABEL: trunc_packus_v8i64_v8i8: 1320; SSE2: # %bb.0: 1321; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [255,255] 1322; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 1323; SSE2-NEXT: movdqa %xmm2, %xmm5 1324; SSE2-NEXT: pxor %xmm10, %xmm5 1325; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903] 1326; SSE2-NEXT: movdqa %xmm9, %xmm7 1327; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 1328; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2] 1329; SSE2-NEXT: pcmpeqd %xmm9, %xmm5 1330; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 1331; SSE2-NEXT: pand %xmm6, %xmm4 1332; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 1333; SSE2-NEXT: por %xmm4, %xmm5 1334; SSE2-NEXT: pand %xmm5, %xmm2 1335; SSE2-NEXT: pandn %xmm8, %xmm5 1336; SSE2-NEXT: por %xmm2, %xmm5 1337; SSE2-NEXT: movdqa %xmm3, %xmm2 1338; SSE2-NEXT: pxor %xmm10, %xmm2 1339; SSE2-NEXT: movdqa %xmm9, %xmm4 1340; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1341; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 1342; SSE2-NEXT: pcmpeqd %xmm9, %xmm2 1343; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 1344; SSE2-NEXT: pand %xmm6, %xmm7 1345; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 1346; SSE2-NEXT: por %xmm7, %xmm2 1347; SSE2-NEXT: pand %xmm2, %xmm3 1348; SSE2-NEXT: pandn %xmm8, %xmm2 1349; SSE2-NEXT: por %xmm3, %xmm2 1350; SSE2-NEXT: movdqa %xmm0, %xmm3 1351; SSE2-NEXT: pxor %xmm10, %xmm3 1352; SSE2-NEXT: movdqa %xmm9, %xmm4 1353; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 1354; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 1355; SSE2-NEXT: pcmpeqd %xmm9, %xmm3 1356; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 1357; SSE2-NEXT: pand %xmm6, %xmm7 1358; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 1359; SSE2-NEXT: por %xmm7, %xmm3 1360; SSE2-NEXT: pand %xmm3, %xmm0 1361; SSE2-NEXT: pandn %xmm8, %xmm3 1362; SSE2-NEXT: por %xmm0, %xmm3 1363; SSE2-NEXT: movdqa %xmm1, %xmm0 1364; SSE2-NEXT: pxor %xmm10, %xmm0 1365; SSE2-NEXT: movdqa %xmm9, %xmm4 1366; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 1367; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 1368; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 1369; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1370; SSE2-NEXT: pand %xmm6, %xmm0 1371; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1372; SSE2-NEXT: por %xmm0, %xmm4 1373; SSE2-NEXT: pand %xmm4, %xmm1 1374; SSE2-NEXT: pandn %xmm8, %xmm4 1375; SSE2-NEXT: por %xmm1, %xmm4 1376; SSE2-NEXT: movdqa %xmm4, %xmm0 1377; SSE2-NEXT: pxor %xmm10, %xmm0 1378; SSE2-NEXT: movdqa %xmm0, %xmm1 1379; SSE2-NEXT: pcmpgtd %xmm10, %xmm1 1380; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 1381; SSE2-NEXT: pcmpeqd %xmm10, %xmm0 1382; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1383; SSE2-NEXT: pand %xmm6, %xmm0 1384; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1385; SSE2-NEXT: por %xmm0, %xmm1 1386; SSE2-NEXT: pand %xmm4, %xmm1 1387; SSE2-NEXT: movdqa %xmm3, %xmm0 1388; SSE2-NEXT: pxor %xmm10, %xmm0 1389; SSE2-NEXT: movdqa %xmm0, %xmm4 1390; SSE2-NEXT: pcmpgtd %xmm10, %xmm4 1391; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 1392; SSE2-NEXT: pcmpeqd %xmm10, %xmm0 1393; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 1394; SSE2-NEXT: pand %xmm6, %xmm7 1395; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 1396; SSE2-NEXT: por %xmm7, %xmm0 1397; SSE2-NEXT: pand %xmm3, %xmm0 1398; SSE2-NEXT: packuswb %xmm1, %xmm0 1399; SSE2-NEXT: movdqa %xmm2, %xmm1 1400; SSE2-NEXT: pxor %xmm10, %xmm1 1401; SSE2-NEXT: movdqa %xmm1, %xmm3 1402; SSE2-NEXT: pcmpgtd %xmm10, %xmm3 1403; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 1404; SSE2-NEXT: pcmpeqd %xmm10, %xmm1 1405; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1406; SSE2-NEXT: pand %xmm4, %xmm1 1407; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 1408; SSE2-NEXT: por %xmm1, %xmm3 1409; SSE2-NEXT: pand %xmm2, %xmm3 1410; SSE2-NEXT: movdqa %xmm5, %xmm1 1411; SSE2-NEXT: pxor %xmm10, %xmm1 1412; SSE2-NEXT: movdqa %xmm1, %xmm2 1413; SSE2-NEXT: pcmpgtd %xmm10, %xmm2 1414; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 1415; SSE2-NEXT: pcmpeqd %xmm10, %xmm1 1416; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1417; SSE2-NEXT: pand %xmm4, %xmm1 1418; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 1419; SSE2-NEXT: por %xmm1, %xmm2 1420; SSE2-NEXT: pand %xmm5, %xmm2 1421; SSE2-NEXT: packuswb %xmm3, %xmm2 1422; SSE2-NEXT: packuswb %xmm2, %xmm0 1423; SSE2-NEXT: retq 1424; 1425; SSSE3-LABEL: trunc_packus_v8i64_v8i8: 1426; SSSE3: # %bb.0: 1427; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [255,255] 1428; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 1429; SSSE3-NEXT: movdqa %xmm2, %xmm5 1430; SSSE3-NEXT: pxor %xmm10, %xmm5 1431; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903] 1432; SSSE3-NEXT: movdqa %xmm9, %xmm7 1433; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7 1434; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2] 1435; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5 1436; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 1437; SSSE3-NEXT: pand %xmm6, %xmm4 1438; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 1439; SSSE3-NEXT: por %xmm4, %xmm5 1440; SSSE3-NEXT: pand %xmm5, %xmm2 1441; SSSE3-NEXT: pandn %xmm8, %xmm5 1442; SSSE3-NEXT: por %xmm2, %xmm5 1443; SSSE3-NEXT: movdqa %xmm3, %xmm2 1444; SSSE3-NEXT: pxor %xmm10, %xmm2 1445; SSSE3-NEXT: movdqa %xmm9, %xmm4 1446; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4 1447; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 1448; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2 1449; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 1450; SSSE3-NEXT: pand %xmm6, %xmm7 1451; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 1452; SSSE3-NEXT: por %xmm7, %xmm2 1453; SSSE3-NEXT: pand %xmm2, %xmm3 1454; SSSE3-NEXT: pandn %xmm8, %xmm2 1455; SSSE3-NEXT: por %xmm3, %xmm2 1456; SSSE3-NEXT: movdqa %xmm0, %xmm3 1457; SSSE3-NEXT: pxor %xmm10, %xmm3 1458; SSSE3-NEXT: movdqa %xmm9, %xmm4 1459; SSSE3-NEXT: pcmpgtd %xmm3, %xmm4 1460; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 1461; SSSE3-NEXT: pcmpeqd %xmm9, %xmm3 1462; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 1463; SSSE3-NEXT: pand %xmm6, %xmm7 1464; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 1465; SSSE3-NEXT: por %xmm7, %xmm3 1466; SSSE3-NEXT: pand %xmm3, %xmm0 1467; SSSE3-NEXT: pandn %xmm8, %xmm3 1468; SSSE3-NEXT: por %xmm0, %xmm3 1469; SSSE3-NEXT: movdqa %xmm1, %xmm0 1470; SSSE3-NEXT: pxor %xmm10, %xmm0 1471; SSSE3-NEXT: movdqa %xmm9, %xmm4 1472; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4 1473; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 1474; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 1475; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1476; SSSE3-NEXT: pand %xmm6, %xmm0 1477; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1478; SSSE3-NEXT: por %xmm0, %xmm4 1479; SSSE3-NEXT: pand %xmm4, %xmm1 1480; SSSE3-NEXT: pandn %xmm8, %xmm4 1481; SSSE3-NEXT: por %xmm1, %xmm4 1482; SSSE3-NEXT: movdqa %xmm4, %xmm0 1483; SSSE3-NEXT: pxor %xmm10, %xmm0 1484; SSSE3-NEXT: movdqa %xmm0, %xmm1 1485; SSSE3-NEXT: pcmpgtd %xmm10, %xmm1 1486; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 1487; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0 1488; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1489; SSSE3-NEXT: pand %xmm6, %xmm0 1490; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1491; SSSE3-NEXT: por %xmm0, %xmm1 1492; SSSE3-NEXT: pand %xmm4, %xmm1 1493; SSSE3-NEXT: movdqa %xmm3, %xmm0 1494; SSSE3-NEXT: pxor %xmm10, %xmm0 1495; SSSE3-NEXT: movdqa %xmm0, %xmm4 1496; SSSE3-NEXT: pcmpgtd %xmm10, %xmm4 1497; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 1498; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0 1499; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 1500; SSSE3-NEXT: pand %xmm6, %xmm7 1501; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 1502; SSSE3-NEXT: por %xmm7, %xmm0 1503; SSSE3-NEXT: pand %xmm3, %xmm0 1504; SSSE3-NEXT: packuswb %xmm1, %xmm0 1505; SSSE3-NEXT: movdqa %xmm2, %xmm1 1506; SSSE3-NEXT: pxor %xmm10, %xmm1 1507; SSSE3-NEXT: movdqa %xmm1, %xmm3 1508; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3 1509; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 1510; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1 1511; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1512; SSSE3-NEXT: pand %xmm4, %xmm1 1513; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 1514; SSSE3-NEXT: por %xmm1, %xmm3 1515; SSSE3-NEXT: pand %xmm2, %xmm3 1516; SSSE3-NEXT: movdqa %xmm5, %xmm1 1517; SSSE3-NEXT: pxor %xmm10, %xmm1 1518; SSSE3-NEXT: movdqa %xmm1, %xmm2 1519; SSSE3-NEXT: pcmpgtd %xmm10, %xmm2 1520; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 1521; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1 1522; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1523; SSSE3-NEXT: pand %xmm4, %xmm1 1524; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 1525; SSSE3-NEXT: por %xmm1, %xmm2 1526; SSSE3-NEXT: pand %xmm5, %xmm2 1527; SSSE3-NEXT: packuswb %xmm3, %xmm2 1528; SSSE3-NEXT: packuswb %xmm2, %xmm0 1529; SSSE3-NEXT: retq 1530; 1531; SSE41-LABEL: trunc_packus_v8i64_v8i8: 1532; SSE41: # %bb.0: 1533; SSE41-NEXT: movdqa %xmm0, %xmm9 1534; SSE41-NEXT: movapd {{.*#+}} xmm7 = [255,255] 1535; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 1536; SSE41-NEXT: movdqa %xmm2, %xmm0 1537; SSE41-NEXT: pxor %xmm10, %xmm0 1538; SSE41-NEXT: movdqa {{.*#+}} xmm6 = [2147483903,2147483903] 1539; SSE41-NEXT: movdqa %xmm6, %xmm4 1540; SSE41-NEXT: pcmpgtd %xmm0, %xmm4 1541; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1542; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 1543; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1544; SSE41-NEXT: pand %xmm5, %xmm0 1545; SSE41-NEXT: por %xmm4, %xmm0 1546; SSE41-NEXT: movapd %xmm7, %xmm8 1547; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm8 1548; SSE41-NEXT: movdqa %xmm3, %xmm0 1549; SSE41-NEXT: pxor %xmm10, %xmm0 1550; SSE41-NEXT: movdqa %xmm6, %xmm2 1551; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 1552; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 1553; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 1554; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1555; SSE41-NEXT: pand %xmm4, %xmm0 1556; SSE41-NEXT: por %xmm2, %xmm0 1557; SSE41-NEXT: movapd %xmm7, %xmm2 1558; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm2 1559; SSE41-NEXT: movdqa %xmm9, %xmm0 1560; SSE41-NEXT: pxor %xmm10, %xmm0 1561; SSE41-NEXT: movdqa %xmm6, %xmm3 1562; SSE41-NEXT: pcmpgtd %xmm0, %xmm3 1563; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 1564; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 1565; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1566; SSE41-NEXT: pand %xmm4, %xmm0 1567; SSE41-NEXT: por %xmm3, %xmm0 1568; SSE41-NEXT: movapd %xmm7, %xmm4 1569; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm4 1570; SSE41-NEXT: movdqa %xmm1, %xmm0 1571; SSE41-NEXT: pxor %xmm10, %xmm0 1572; SSE41-NEXT: movdqa %xmm6, %xmm3 1573; SSE41-NEXT: pcmpgtd %xmm0, %xmm3 1574; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2] 1575; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 1576; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1577; SSE41-NEXT: pand %xmm5, %xmm0 1578; SSE41-NEXT: por %xmm3, %xmm0 1579; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm7 1580; SSE41-NEXT: pxor %xmm3, %xmm3 1581; SSE41-NEXT: movapd %xmm7, %xmm0 1582; SSE41-NEXT: xorpd %xmm10, %xmm0 1583; SSE41-NEXT: movapd %xmm0, %xmm1 1584; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 1585; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2] 1586; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1587; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1588; SSE41-NEXT: pand %xmm5, %xmm0 1589; SSE41-NEXT: por %xmm1, %xmm0 1590; SSE41-NEXT: pxor %xmm5, %xmm5 1591; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm5 1592; SSE41-NEXT: movapd %xmm4, %xmm0 1593; SSE41-NEXT: xorpd %xmm10, %xmm0 1594; SSE41-NEXT: movapd %xmm0, %xmm1 1595; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 1596; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 1597; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1598; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1599; SSE41-NEXT: pand %xmm6, %xmm0 1600; SSE41-NEXT: por %xmm1, %xmm0 1601; SSE41-NEXT: pxor %xmm1, %xmm1 1602; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm1 1603; SSE41-NEXT: packusdw %xmm5, %xmm1 1604; SSE41-NEXT: movapd %xmm2, %xmm0 1605; SSE41-NEXT: xorpd %xmm10, %xmm0 1606; SSE41-NEXT: movapd %xmm0, %xmm4 1607; SSE41-NEXT: pcmpgtd %xmm10, %xmm4 1608; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1609; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1610; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1611; SSE41-NEXT: pand %xmm5, %xmm0 1612; SSE41-NEXT: por %xmm4, %xmm0 1613; SSE41-NEXT: pxor %xmm4, %xmm4 1614; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm4 1615; SSE41-NEXT: movapd %xmm8, %xmm0 1616; SSE41-NEXT: xorpd %xmm10, %xmm0 1617; SSE41-NEXT: movapd %xmm0, %xmm2 1618; SSE41-NEXT: pcmpgtd %xmm10, %xmm2 1619; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2] 1620; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1621; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1622; SSE41-NEXT: pand %xmm5, %xmm0 1623; SSE41-NEXT: por %xmm2, %xmm0 1624; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm3 1625; SSE41-NEXT: packusdw %xmm4, %xmm3 1626; SSE41-NEXT: packusdw %xmm3, %xmm1 1627; SSE41-NEXT: movdqa %xmm1, %xmm0 1628; SSE41-NEXT: retq 1629; 1630; AVX1-LABEL: trunc_packus_v8i64_v8i8: 1631; AVX1: # %bb.0: 1632; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [255,255,255,255] 1633; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 1634; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,255] 1635; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1636; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5 1637; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 1638; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1639; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1640; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1641; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4 1642; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 1643; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1644; AVX1-NEXT: vxorpd %xmm2, %xmm2, %xmm2 1645; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm3 1646; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 1647; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm5 1648; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm6 1649; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7 1650; AVX1-NEXT: vpcmpgtq %xmm2, %xmm7, %xmm2 1651; AVX1-NEXT: vpand %xmm7, %xmm2, %xmm2 1652; AVX1-NEXT: vpand %xmm1, %xmm6, %xmm1 1653; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 1654; AVX1-NEXT: vpand %xmm4, %xmm5, %xmm2 1655; AVX1-NEXT: vpand %xmm0, %xmm3, %xmm0 1656; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 1657; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 1658; AVX1-NEXT: vzeroupper 1659; AVX1-NEXT: retq 1660; 1661; AVX2-LABEL: trunc_packus_v8i64_v8i8: 1662; AVX2: # %bb.0: 1663; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [255,255,255,255] 1664; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 1665; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1666; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 1667; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1668; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 1669; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3 1670; AVX2-NEXT: vpand %ymm1, %ymm3, %ymm1 1671; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm2 1672; AVX2-NEXT: vpand %ymm0, %ymm2, %ymm0 1673; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0 1674; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 1675; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 1676; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 1677; AVX2-NEXT: vzeroupper 1678; AVX2-NEXT: retq 1679; 1680; AVX512-LABEL: trunc_packus_v8i64_v8i8: 1681; AVX512: # %bb.0: 1682; AVX512-NEXT: vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0 1683; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1 1684; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 1685; AVX512-NEXT: vpmovqw %zmm0, %xmm0 1686; AVX512-NEXT: vzeroupper 1687; AVX512-NEXT: retq 1688 %1 = icmp slt <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255> 1689 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255> 1690 %3 = icmp sgt <8 x i64> %2, zeroinitializer 1691 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer 1692 %5 = trunc <8 x i64> %4 to <8 x i8> 1693 ret <8 x i8> %5 1694} 1695 1696define void @trunc_packus_v8i64_v8i8_store(<8 x i64> %a0, <8 x i8> *%p1) { 1697; SSE2-LABEL: trunc_packus_v8i64_v8i8_store: 1698; SSE2: # %bb.0: 1699; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [255,255] 1700; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 1701; SSE2-NEXT: movdqa %xmm3, %xmm4 1702; SSE2-NEXT: pxor %xmm10, %xmm4 1703; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903] 1704; SSE2-NEXT: movdqa %xmm9, %xmm6 1705; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 1706; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 1707; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 1708; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1709; SSE2-NEXT: pand %xmm7, %xmm4 1710; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm6[1,1,3,3] 1711; SSE2-NEXT: por %xmm4, %xmm11 1712; SSE2-NEXT: pand %xmm11, %xmm3 1713; SSE2-NEXT: pandn %xmm8, %xmm11 1714; SSE2-NEXT: por %xmm3, %xmm11 1715; SSE2-NEXT: movdqa %xmm2, %xmm3 1716; SSE2-NEXT: pxor %xmm10, %xmm3 1717; SSE2-NEXT: movdqa %xmm9, %xmm4 1718; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 1719; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2] 1720; SSE2-NEXT: pcmpeqd %xmm9, %xmm3 1721; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3] 1722; SSE2-NEXT: pand %xmm7, %xmm5 1723; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 1724; SSE2-NEXT: por %xmm5, %xmm3 1725; SSE2-NEXT: pand %xmm3, %xmm2 1726; SSE2-NEXT: pandn %xmm8, %xmm3 1727; SSE2-NEXT: por %xmm2, %xmm3 1728; SSE2-NEXT: movdqa %xmm1, %xmm2 1729; SSE2-NEXT: pxor %xmm10, %xmm2 1730; SSE2-NEXT: movdqa %xmm9, %xmm4 1731; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1732; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1733; SSE2-NEXT: pcmpeqd %xmm9, %xmm2 1734; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 1735; SSE2-NEXT: pand %xmm5, %xmm7 1736; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 1737; SSE2-NEXT: por %xmm7, %xmm2 1738; SSE2-NEXT: pand %xmm2, %xmm1 1739; SSE2-NEXT: pandn %xmm8, %xmm2 1740; SSE2-NEXT: por %xmm1, %xmm2 1741; SSE2-NEXT: movdqa %xmm0, %xmm1 1742; SSE2-NEXT: pxor %xmm10, %xmm1 1743; SSE2-NEXT: movdqa %xmm9, %xmm4 1744; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 1745; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1746; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 1747; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3] 1748; SSE2-NEXT: pand %xmm5, %xmm7 1749; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3] 1750; SSE2-NEXT: por %xmm7, %xmm1 1751; SSE2-NEXT: pand %xmm1, %xmm0 1752; SSE2-NEXT: pandn %xmm8, %xmm1 1753; SSE2-NEXT: por %xmm0, %xmm1 1754; SSE2-NEXT: movdqa %xmm1, %xmm0 1755; SSE2-NEXT: pxor %xmm10, %xmm0 1756; SSE2-NEXT: movdqa %xmm0, %xmm4 1757; SSE2-NEXT: pcmpgtd %xmm10, %xmm4 1758; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1759; SSE2-NEXT: pcmpeqd %xmm10, %xmm0 1760; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 1761; SSE2-NEXT: pand %xmm5, %xmm7 1762; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 1763; SSE2-NEXT: por %xmm7, %xmm0 1764; SSE2-NEXT: movdqa %xmm2, %xmm4 1765; SSE2-NEXT: pxor %xmm10, %xmm4 1766; SSE2-NEXT: movdqa %xmm4, %xmm5 1767; SSE2-NEXT: pcmpgtd %xmm10, %xmm5 1768; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2] 1769; SSE2-NEXT: pcmpeqd %xmm10, %xmm4 1770; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1771; SSE2-NEXT: pand %xmm7, %xmm4 1772; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm5[1,1,3,3] 1773; SSE2-NEXT: por %xmm4, %xmm7 1774; SSE2-NEXT: movdqa %xmm3, %xmm4 1775; SSE2-NEXT: pxor %xmm10, %xmm4 1776; SSE2-NEXT: movdqa %xmm4, %xmm5 1777; SSE2-NEXT: pcmpgtd %xmm10, %xmm5 1778; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm5[0,0,2,2] 1779; SSE2-NEXT: pcmpeqd %xmm10, %xmm4 1780; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3] 1781; SSE2-NEXT: pand %xmm9, %xmm6 1782; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 1783; SSE2-NEXT: por %xmm6, %xmm4 1784; SSE2-NEXT: movdqa %xmm11, %xmm5 1785; SSE2-NEXT: pxor %xmm10, %xmm5 1786; SSE2-NEXT: movdqa %xmm5, %xmm6 1787; SSE2-NEXT: pcmpgtd %xmm10, %xmm6 1788; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2] 1789; SSE2-NEXT: pcmpeqd %xmm10, %xmm5 1790; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 1791; SSE2-NEXT: pand %xmm9, %xmm5 1792; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 1793; SSE2-NEXT: por %xmm5, %xmm6 1794; SSE2-NEXT: pand %xmm8, %xmm6 1795; SSE2-NEXT: pand %xmm11, %xmm6 1796; SSE2-NEXT: pand %xmm8, %xmm4 1797; SSE2-NEXT: pand %xmm3, %xmm4 1798; SSE2-NEXT: packuswb %xmm6, %xmm4 1799; SSE2-NEXT: pand %xmm8, %xmm7 1800; SSE2-NEXT: pand %xmm2, %xmm7 1801; SSE2-NEXT: pand %xmm8, %xmm0 1802; SSE2-NEXT: pand %xmm1, %xmm0 1803; SSE2-NEXT: packuswb %xmm7, %xmm0 1804; SSE2-NEXT: packuswb %xmm4, %xmm0 1805; SSE2-NEXT: packuswb %xmm0, %xmm0 1806; SSE2-NEXT: movq %xmm0, (%rdi) 1807; SSE2-NEXT: retq 1808; 1809; SSSE3-LABEL: trunc_packus_v8i64_v8i8_store: 1810; SSSE3: # %bb.0: 1811; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [255,255] 1812; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648] 1813; SSSE3-NEXT: movdqa %xmm3, %xmm4 1814; SSSE3-NEXT: pxor %xmm10, %xmm4 1815; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903] 1816; SSSE3-NEXT: movdqa %xmm9, %xmm6 1817; SSSE3-NEXT: pcmpgtd %xmm4, %xmm6 1818; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 1819; SSSE3-NEXT: pcmpeqd %xmm9, %xmm4 1820; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1821; SSSE3-NEXT: pand %xmm7, %xmm4 1822; SSSE3-NEXT: pshufd {{.*#+}} xmm11 = xmm6[1,1,3,3] 1823; SSSE3-NEXT: por %xmm4, %xmm11 1824; SSSE3-NEXT: pand %xmm11, %xmm3 1825; SSSE3-NEXT: pandn %xmm8, %xmm11 1826; SSSE3-NEXT: por %xmm3, %xmm11 1827; SSSE3-NEXT: movdqa %xmm2, %xmm3 1828; SSSE3-NEXT: pxor %xmm10, %xmm3 1829; SSSE3-NEXT: movdqa %xmm9, %xmm4 1830; SSSE3-NEXT: pcmpgtd %xmm3, %xmm4 1831; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2] 1832; SSSE3-NEXT: pcmpeqd %xmm9, %xmm3 1833; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3] 1834; SSSE3-NEXT: pand %xmm7, %xmm5 1835; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 1836; SSSE3-NEXT: por %xmm5, %xmm3 1837; SSSE3-NEXT: pand %xmm3, %xmm2 1838; SSSE3-NEXT: pandn %xmm8, %xmm3 1839; SSSE3-NEXT: por %xmm2, %xmm3 1840; SSSE3-NEXT: movdqa %xmm1, %xmm2 1841; SSSE3-NEXT: pxor %xmm10, %xmm2 1842; SSSE3-NEXT: movdqa %xmm9, %xmm4 1843; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4 1844; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1845; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2 1846; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 1847; SSSE3-NEXT: pand %xmm5, %xmm7 1848; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 1849; SSSE3-NEXT: por %xmm7, %xmm2 1850; SSSE3-NEXT: pand %xmm2, %xmm1 1851; SSSE3-NEXT: pandn %xmm8, %xmm2 1852; SSSE3-NEXT: por %xmm1, %xmm2 1853; SSSE3-NEXT: movdqa %xmm0, %xmm1 1854; SSSE3-NEXT: pxor %xmm10, %xmm1 1855; SSSE3-NEXT: movdqa %xmm9, %xmm4 1856; SSSE3-NEXT: pcmpgtd %xmm1, %xmm4 1857; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1858; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 1859; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3] 1860; SSSE3-NEXT: pand %xmm5, %xmm7 1861; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3] 1862; SSSE3-NEXT: por %xmm7, %xmm1 1863; SSSE3-NEXT: pand %xmm1, %xmm0 1864; SSSE3-NEXT: pandn %xmm8, %xmm1 1865; SSSE3-NEXT: por %xmm0, %xmm1 1866; SSSE3-NEXT: movdqa %xmm1, %xmm0 1867; SSSE3-NEXT: pxor %xmm10, %xmm0 1868; SSSE3-NEXT: movdqa %xmm0, %xmm4 1869; SSSE3-NEXT: pcmpgtd %xmm10, %xmm4 1870; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1871; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0 1872; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 1873; SSSE3-NEXT: pand %xmm5, %xmm7 1874; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 1875; SSSE3-NEXT: por %xmm7, %xmm0 1876; SSSE3-NEXT: movdqa %xmm2, %xmm4 1877; SSSE3-NEXT: pxor %xmm10, %xmm4 1878; SSSE3-NEXT: movdqa %xmm4, %xmm5 1879; SSSE3-NEXT: pcmpgtd %xmm10, %xmm5 1880; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2] 1881; SSSE3-NEXT: pcmpeqd %xmm10, %xmm4 1882; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1883; SSSE3-NEXT: pand %xmm7, %xmm4 1884; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm5[1,1,3,3] 1885; SSSE3-NEXT: por %xmm4, %xmm7 1886; SSSE3-NEXT: movdqa %xmm3, %xmm4 1887; SSSE3-NEXT: pxor %xmm10, %xmm4 1888; SSSE3-NEXT: movdqa %xmm4, %xmm5 1889; SSSE3-NEXT: pcmpgtd %xmm10, %xmm5 1890; SSSE3-NEXT: pshufd {{.*#+}} xmm9 = xmm5[0,0,2,2] 1891; SSSE3-NEXT: pcmpeqd %xmm10, %xmm4 1892; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3] 1893; SSSE3-NEXT: pand %xmm9, %xmm6 1894; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 1895; SSSE3-NEXT: por %xmm6, %xmm4 1896; SSSE3-NEXT: movdqa %xmm11, %xmm5 1897; SSSE3-NEXT: pxor %xmm10, %xmm5 1898; SSSE3-NEXT: movdqa %xmm5, %xmm6 1899; SSSE3-NEXT: pcmpgtd %xmm10, %xmm6 1900; SSSE3-NEXT: pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2] 1901; SSSE3-NEXT: pcmpeqd %xmm10, %xmm5 1902; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 1903; SSSE3-NEXT: pand %xmm9, %xmm5 1904; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 1905; SSSE3-NEXT: por %xmm5, %xmm6 1906; SSSE3-NEXT: pand %xmm8, %xmm6 1907; SSSE3-NEXT: pand %xmm11, %xmm6 1908; SSSE3-NEXT: pand %xmm8, %xmm4 1909; SSSE3-NEXT: pand %xmm3, %xmm4 1910; SSSE3-NEXT: packuswb %xmm6, %xmm4 1911; SSSE3-NEXT: pand %xmm8, %xmm7 1912; SSSE3-NEXT: pand %xmm2, %xmm7 1913; SSSE3-NEXT: pand %xmm8, %xmm0 1914; SSSE3-NEXT: pand %xmm1, %xmm0 1915; SSSE3-NEXT: packuswb %xmm7, %xmm0 1916; SSSE3-NEXT: packuswb %xmm4, %xmm0 1917; SSSE3-NEXT: packuswb %xmm0, %xmm0 1918; SSSE3-NEXT: movq %xmm0, (%rdi) 1919; SSSE3-NEXT: retq 1920; 1921; SSE41-LABEL: trunc_packus_v8i64_v8i8_store: 1922; SSE41: # %bb.0: 1923; SSE41-NEXT: movdqa %xmm0, %xmm9 1924; SSE41-NEXT: movapd {{.*#+}} xmm8 = [255,255] 1925; SSE41-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648] 1926; SSE41-NEXT: movdqa %xmm3, %xmm0 1927; SSE41-NEXT: pxor %xmm6, %xmm0 1928; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [2147483903,2147483903] 1929; SSE41-NEXT: movdqa %xmm5, %xmm4 1930; SSE41-NEXT: pcmpgtd %xmm0, %xmm4 1931; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2] 1932; SSE41-NEXT: pcmpeqd %xmm5, %xmm0 1933; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1934; SSE41-NEXT: pand %xmm7, %xmm0 1935; SSE41-NEXT: por %xmm4, %xmm0 1936; SSE41-NEXT: movapd %xmm8, %xmm10 1937; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm10 1938; SSE41-NEXT: movdqa %xmm2, %xmm0 1939; SSE41-NEXT: pxor %xmm6, %xmm0 1940; SSE41-NEXT: movdqa %xmm5, %xmm3 1941; SSE41-NEXT: pcmpgtd %xmm0, %xmm3 1942; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 1943; SSE41-NEXT: pcmpeqd %xmm5, %xmm0 1944; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1945; SSE41-NEXT: pand %xmm4, %xmm0 1946; SSE41-NEXT: por %xmm3, %xmm0 1947; SSE41-NEXT: movapd %xmm8, %xmm3 1948; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm3 1949; SSE41-NEXT: movdqa %xmm1, %xmm0 1950; SSE41-NEXT: pxor %xmm6, %xmm0 1951; SSE41-NEXT: movdqa %xmm5, %xmm2 1952; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 1953; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 1954; SSE41-NEXT: pcmpeqd %xmm5, %xmm0 1955; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1956; SSE41-NEXT: pand %xmm4, %xmm0 1957; SSE41-NEXT: por %xmm2, %xmm0 1958; SSE41-NEXT: movapd %xmm8, %xmm4 1959; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm4 1960; SSE41-NEXT: movdqa %xmm9, %xmm0 1961; SSE41-NEXT: pxor %xmm6, %xmm0 1962; SSE41-NEXT: movdqa %xmm5, %xmm1 1963; SSE41-NEXT: pcmpgtd %xmm0, %xmm1 1964; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 1965; SSE41-NEXT: pcmpeqd %xmm5, %xmm0 1966; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1967; SSE41-NEXT: pand %xmm2, %xmm0 1968; SSE41-NEXT: por %xmm1, %xmm0 1969; SSE41-NEXT: movapd %xmm8, %xmm5 1970; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm5 1971; SSE41-NEXT: movapd %xmm5, %xmm0 1972; SSE41-NEXT: xorpd %xmm6, %xmm0 1973; SSE41-NEXT: movapd %xmm0, %xmm1 1974; SSE41-NEXT: pcmpgtd %xmm6, %xmm1 1975; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 1976; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 1977; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1978; SSE41-NEXT: pand %xmm2, %xmm0 1979; SSE41-NEXT: por %xmm1, %xmm0 1980; SSE41-NEXT: pxor %xmm2, %xmm2 1981; SSE41-NEXT: pxor %xmm1, %xmm1 1982; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm1 1983; SSE41-NEXT: movapd %xmm4, %xmm0 1984; SSE41-NEXT: xorpd %xmm6, %xmm0 1985; SSE41-NEXT: movapd %xmm0, %xmm5 1986; SSE41-NEXT: pcmpgtd %xmm6, %xmm5 1987; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2] 1988; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 1989; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1990; SSE41-NEXT: pand %xmm7, %xmm0 1991; SSE41-NEXT: por %xmm5, %xmm0 1992; SSE41-NEXT: pxor %xmm5, %xmm5 1993; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm5 1994; SSE41-NEXT: movapd %xmm3, %xmm0 1995; SSE41-NEXT: xorpd %xmm6, %xmm0 1996; SSE41-NEXT: movapd %xmm0, %xmm4 1997; SSE41-NEXT: pcmpgtd %xmm6, %xmm4 1998; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2] 1999; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 2000; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2001; SSE41-NEXT: pand %xmm7, %xmm0 2002; SSE41-NEXT: por %xmm4, %xmm0 2003; SSE41-NEXT: pxor %xmm4, %xmm4 2004; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm4 2005; SSE41-NEXT: movapd %xmm10, %xmm0 2006; SSE41-NEXT: xorpd %xmm6, %xmm0 2007; SSE41-NEXT: movapd %xmm0, %xmm3 2008; SSE41-NEXT: pcmpgtd %xmm6, %xmm3 2009; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm3[0,0,2,2] 2010; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 2011; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2012; SSE41-NEXT: pand %xmm7, %xmm0 2013; SSE41-NEXT: por %xmm3, %xmm0 2014; SSE41-NEXT: blendvpd %xmm0, %xmm10, %xmm2 2015; SSE41-NEXT: andpd %xmm8, %xmm2 2016; SSE41-NEXT: andpd %xmm8, %xmm4 2017; SSE41-NEXT: packusdw %xmm2, %xmm4 2018; SSE41-NEXT: andpd %xmm8, %xmm5 2019; SSE41-NEXT: andpd %xmm8, %xmm1 2020; SSE41-NEXT: packusdw %xmm5, %xmm1 2021; SSE41-NEXT: packusdw %xmm4, %xmm1 2022; SSE41-NEXT: packuswb %xmm1, %xmm1 2023; SSE41-NEXT: movq %xmm1, (%rdi) 2024; SSE41-NEXT: retq 2025; 2026; AVX1-LABEL: trunc_packus_v8i64_v8i8_store: 2027; AVX1: # %bb.0: 2028; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [255,255,255,255] 2029; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 2030; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,255] 2031; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 2032; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5 2033; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 2034; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 2035; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2036; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 2037; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4 2038; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 2039; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 2040; AVX1-NEXT: vxorpd %xmm2, %xmm2, %xmm2 2041; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm8 2042; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 2043; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm5 2044; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm6 2045; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7 2046; AVX1-NEXT: vpcmpgtq %xmm2, %xmm7, %xmm2 2047; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [1.2598673968951787E-321,1.2598673968951787E-321] 2048; AVX1-NEXT: # xmm3 = mem[0,0] 2049; AVX1-NEXT: vpand %xmm3, %xmm7, %xmm7 2050; AVX1-NEXT: vpand %xmm7, %xmm2, %xmm2 2051; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 2052; AVX1-NEXT: vpand %xmm1, %xmm6, %xmm1 2053; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 2054; AVX1-NEXT: vpand %xmm3, %xmm4, %xmm2 2055; AVX1-NEXT: vpand %xmm2, %xmm5, %xmm2 2056; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 2057; AVX1-NEXT: vpand %xmm0, %xmm8, %xmm0 2058; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 2059; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 2060; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0 2061; AVX1-NEXT: vmovq %xmm0, (%rdi) 2062; AVX1-NEXT: vzeroupper 2063; AVX1-NEXT: retq 2064; 2065; AVX2-LABEL: trunc_packus_v8i64_v8i8_store: 2066; AVX2: # %bb.0: 2067; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [255,255,255,255] 2068; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 2069; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 2070; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 2071; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 2072; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 2073; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3 2074; AVX2-NEXT: vpand %ymm0, %ymm3, %ymm0 2075; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm2 2076; AVX2-NEXT: vpand %ymm1, %ymm2, %ymm1 2077; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 2078; AVX2-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 2079; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 2080; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 2081; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3 2082; AVX2-NEXT: vpackusdw %xmm3, %xmm0, %xmm0 2083; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 2084; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 2085; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 2086; AVX2-NEXT: vmovq %xmm0, (%rdi) 2087; AVX2-NEXT: vzeroupper 2088; AVX2-NEXT: retq 2089; 2090; AVX512-LABEL: trunc_packus_v8i64_v8i8_store: 2091; AVX512: # %bb.0: 2092; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1 2093; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 2094; AVX512-NEXT: vpmovusqb %zmm0, (%rdi) 2095; AVX512-NEXT: vzeroupper 2096; AVX512-NEXT: retq 2097 %1 = icmp slt <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255> 2098 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255> 2099 %3 = icmp sgt <8 x i64> %2, zeroinitializer 2100 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer 2101 %5 = trunc <8 x i64> %4 to <8 x i8> 2102 store <8 x i8> %5, <8 x i8> *%p1 2103 ret void 2104} 2105 2106define <16 x i8> @trunc_packus_v16i64_v16i8(<16 x i64> %a0) { 2107; SSE2-LABEL: trunc_packus_v16i64_v16i8: 2108; SSE2: # %bb.0: 2109; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [255,255] 2110; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 2111; SSE2-NEXT: movdqa %xmm6, %xmm9 2112; SSE2-NEXT: pxor %xmm8, %xmm9 2113; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483903,2147483903] 2114; SSE2-NEXT: movdqa %xmm11, %xmm12 2115; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 2116; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 2117; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 2118; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3] 2119; SSE2-NEXT: pand %xmm13, %xmm14 2120; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 2121; SSE2-NEXT: por %xmm14, %xmm9 2122; SSE2-NEXT: pand %xmm9, %xmm6 2123; SSE2-NEXT: pandn %xmm10, %xmm9 2124; SSE2-NEXT: por %xmm6, %xmm9 2125; SSE2-NEXT: movdqa %xmm7, %xmm6 2126; SSE2-NEXT: pxor %xmm8, %xmm6 2127; SSE2-NEXT: movdqa %xmm11, %xmm12 2128; SSE2-NEXT: pcmpgtd %xmm6, %xmm12 2129; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 2130; SSE2-NEXT: pcmpeqd %xmm11, %xmm6 2131; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 2132; SSE2-NEXT: pand %xmm13, %xmm6 2133; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 2134; SSE2-NEXT: por %xmm6, %xmm12 2135; SSE2-NEXT: pand %xmm12, %xmm7 2136; SSE2-NEXT: pandn %xmm10, %xmm12 2137; SSE2-NEXT: por %xmm7, %xmm12 2138; SSE2-NEXT: movdqa %xmm4, %xmm6 2139; SSE2-NEXT: pxor %xmm8, %xmm6 2140; SSE2-NEXT: movdqa %xmm11, %xmm7 2141; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 2142; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2] 2143; SSE2-NEXT: pcmpeqd %xmm11, %xmm6 2144; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 2145; SSE2-NEXT: pand %xmm13, %xmm6 2146; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3] 2147; SSE2-NEXT: por %xmm6, %xmm13 2148; SSE2-NEXT: pand %xmm13, %xmm4 2149; SSE2-NEXT: pandn %xmm10, %xmm13 2150; SSE2-NEXT: por %xmm4, %xmm13 2151; SSE2-NEXT: movdqa %xmm5, %xmm4 2152; SSE2-NEXT: pxor %xmm8, %xmm4 2153; SSE2-NEXT: movdqa %xmm11, %xmm6 2154; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 2155; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 2156; SSE2-NEXT: pcmpeqd %xmm11, %xmm4 2157; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2158; SSE2-NEXT: pand %xmm7, %xmm4 2159; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3] 2160; SSE2-NEXT: por %xmm4, %xmm14 2161; SSE2-NEXT: pand %xmm14, %xmm5 2162; SSE2-NEXT: pandn %xmm10, %xmm14 2163; SSE2-NEXT: por %xmm5, %xmm14 2164; SSE2-NEXT: movdqa %xmm2, %xmm4 2165; SSE2-NEXT: pxor %xmm8, %xmm4 2166; SSE2-NEXT: movdqa %xmm11, %xmm5 2167; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 2168; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2] 2169; SSE2-NEXT: pcmpeqd %xmm11, %xmm4 2170; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2171; SSE2-NEXT: pand %xmm7, %xmm4 2172; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 2173; SSE2-NEXT: por %xmm4, %xmm5 2174; SSE2-NEXT: pand %xmm5, %xmm2 2175; SSE2-NEXT: pandn %xmm10, %xmm5 2176; SSE2-NEXT: por %xmm2, %xmm5 2177; SSE2-NEXT: movdqa %xmm3, %xmm2 2178; SSE2-NEXT: pxor %xmm8, %xmm2 2179; SSE2-NEXT: movdqa %xmm11, %xmm4 2180; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2181; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2] 2182; SSE2-NEXT: pcmpeqd %xmm11, %xmm2 2183; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3] 2184; SSE2-NEXT: pand %xmm7, %xmm6 2185; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 2186; SSE2-NEXT: por %xmm6, %xmm2 2187; SSE2-NEXT: pand %xmm2, %xmm3 2188; SSE2-NEXT: pandn %xmm10, %xmm2 2189; SSE2-NEXT: por %xmm3, %xmm2 2190; SSE2-NEXT: movdqa %xmm0, %xmm3 2191; SSE2-NEXT: pxor %xmm8, %xmm3 2192; SSE2-NEXT: movdqa %xmm11, %xmm4 2193; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 2194; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2195; SSE2-NEXT: pcmpeqd %xmm11, %xmm3 2196; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 2197; SSE2-NEXT: pand %xmm6, %xmm7 2198; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 2199; SSE2-NEXT: por %xmm7, %xmm3 2200; SSE2-NEXT: pand %xmm3, %xmm0 2201; SSE2-NEXT: pandn %xmm10, %xmm3 2202; SSE2-NEXT: por %xmm0, %xmm3 2203; SSE2-NEXT: movdqa %xmm1, %xmm0 2204; SSE2-NEXT: pxor %xmm8, %xmm0 2205; SSE2-NEXT: movdqa %xmm11, %xmm4 2206; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 2207; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2208; SSE2-NEXT: pcmpeqd %xmm11, %xmm0 2209; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2210; SSE2-NEXT: pand %xmm6, %xmm0 2211; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2212; SSE2-NEXT: por %xmm0, %xmm4 2213; SSE2-NEXT: pand %xmm4, %xmm1 2214; SSE2-NEXT: pandn %xmm10, %xmm4 2215; SSE2-NEXT: por %xmm1, %xmm4 2216; SSE2-NEXT: movdqa %xmm4, %xmm0 2217; SSE2-NEXT: pxor %xmm8, %xmm0 2218; SSE2-NEXT: movdqa %xmm0, %xmm1 2219; SSE2-NEXT: pcmpgtd %xmm8, %xmm1 2220; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 2221; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 2222; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2223; SSE2-NEXT: pand %xmm6, %xmm0 2224; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2225; SSE2-NEXT: por %xmm0, %xmm1 2226; SSE2-NEXT: pand %xmm4, %xmm1 2227; SSE2-NEXT: movdqa %xmm3, %xmm0 2228; SSE2-NEXT: pxor %xmm8, %xmm0 2229; SSE2-NEXT: movdqa %xmm0, %xmm4 2230; SSE2-NEXT: pcmpgtd %xmm8, %xmm4 2231; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2232; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 2233; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2234; SSE2-NEXT: pand %xmm6, %xmm7 2235; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 2236; SSE2-NEXT: por %xmm7, %xmm0 2237; SSE2-NEXT: pand %xmm3, %xmm0 2238; SSE2-NEXT: packuswb %xmm1, %xmm0 2239; SSE2-NEXT: movdqa %xmm2, %xmm1 2240; SSE2-NEXT: pxor %xmm8, %xmm1 2241; SSE2-NEXT: movdqa %xmm1, %xmm3 2242; SSE2-NEXT: pcmpgtd %xmm8, %xmm3 2243; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2244; SSE2-NEXT: pcmpeqd %xmm8, %xmm1 2245; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2246; SSE2-NEXT: pand %xmm4, %xmm1 2247; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2248; SSE2-NEXT: por %xmm1, %xmm3 2249; SSE2-NEXT: pand %xmm2, %xmm3 2250; SSE2-NEXT: movdqa %xmm5, %xmm1 2251; SSE2-NEXT: pxor %xmm8, %xmm1 2252; SSE2-NEXT: movdqa %xmm1, %xmm2 2253; SSE2-NEXT: pcmpgtd %xmm8, %xmm2 2254; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 2255; SSE2-NEXT: pcmpeqd %xmm8, %xmm1 2256; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2257; SSE2-NEXT: pand %xmm4, %xmm1 2258; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2259; SSE2-NEXT: por %xmm1, %xmm2 2260; SSE2-NEXT: pand %xmm5, %xmm2 2261; SSE2-NEXT: packuswb %xmm3, %xmm2 2262; SSE2-NEXT: packuswb %xmm2, %xmm0 2263; SSE2-NEXT: movdqa %xmm14, %xmm1 2264; SSE2-NEXT: pxor %xmm8, %xmm1 2265; SSE2-NEXT: movdqa %xmm1, %xmm2 2266; SSE2-NEXT: pcmpgtd %xmm8, %xmm2 2267; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 2268; SSE2-NEXT: pcmpeqd %xmm8, %xmm1 2269; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2270; SSE2-NEXT: pand %xmm3, %xmm1 2271; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2272; SSE2-NEXT: por %xmm1, %xmm2 2273; SSE2-NEXT: pand %xmm14, %xmm2 2274; SSE2-NEXT: movdqa %xmm13, %xmm1 2275; SSE2-NEXT: pxor %xmm8, %xmm1 2276; SSE2-NEXT: movdqa %xmm1, %xmm3 2277; SSE2-NEXT: pcmpgtd %xmm8, %xmm3 2278; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2279; SSE2-NEXT: pcmpeqd %xmm8, %xmm1 2280; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3] 2281; SSE2-NEXT: pand %xmm4, %xmm5 2282; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3] 2283; SSE2-NEXT: por %xmm5, %xmm1 2284; SSE2-NEXT: pand %xmm13, %xmm1 2285; SSE2-NEXT: packuswb %xmm2, %xmm1 2286; SSE2-NEXT: movdqa %xmm12, %xmm2 2287; SSE2-NEXT: pxor %xmm8, %xmm2 2288; SSE2-NEXT: movdqa %xmm2, %xmm3 2289; SSE2-NEXT: pcmpgtd %xmm8, %xmm3 2290; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2291; SSE2-NEXT: pcmpeqd %xmm8, %xmm2 2292; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2293; SSE2-NEXT: pand %xmm4, %xmm2 2294; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2295; SSE2-NEXT: por %xmm2, %xmm3 2296; SSE2-NEXT: pand %xmm12, %xmm3 2297; SSE2-NEXT: movdqa %xmm9, %xmm2 2298; SSE2-NEXT: pxor %xmm8, %xmm2 2299; SSE2-NEXT: movdqa %xmm2, %xmm4 2300; SSE2-NEXT: pcmpgtd %xmm8, %xmm4 2301; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 2302; SSE2-NEXT: pcmpeqd %xmm8, %xmm2 2303; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2304; SSE2-NEXT: pand %xmm5, %xmm2 2305; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2306; SSE2-NEXT: por %xmm2, %xmm4 2307; SSE2-NEXT: pand %xmm9, %xmm4 2308; SSE2-NEXT: packuswb %xmm3, %xmm4 2309; SSE2-NEXT: packuswb %xmm4, %xmm1 2310; SSE2-NEXT: packuswb %xmm1, %xmm0 2311; SSE2-NEXT: retq 2312; 2313; SSSE3-LABEL: trunc_packus_v16i64_v16i8: 2314; SSSE3: # %bb.0: 2315; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [255,255] 2316; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 2317; SSSE3-NEXT: movdqa %xmm6, %xmm9 2318; SSSE3-NEXT: pxor %xmm8, %xmm9 2319; SSSE3-NEXT: movdqa {{.*#+}} xmm11 = [2147483903,2147483903] 2320; SSSE3-NEXT: movdqa %xmm11, %xmm12 2321; SSSE3-NEXT: pcmpgtd %xmm9, %xmm12 2322; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 2323; SSSE3-NEXT: pcmpeqd %xmm11, %xmm9 2324; SSSE3-NEXT: pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3] 2325; SSSE3-NEXT: pand %xmm13, %xmm14 2326; SSSE3-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 2327; SSSE3-NEXT: por %xmm14, %xmm9 2328; SSSE3-NEXT: pand %xmm9, %xmm6 2329; SSSE3-NEXT: pandn %xmm10, %xmm9 2330; SSSE3-NEXT: por %xmm6, %xmm9 2331; SSSE3-NEXT: movdqa %xmm7, %xmm6 2332; SSSE3-NEXT: pxor %xmm8, %xmm6 2333; SSSE3-NEXT: movdqa %xmm11, %xmm12 2334; SSSE3-NEXT: pcmpgtd %xmm6, %xmm12 2335; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 2336; SSSE3-NEXT: pcmpeqd %xmm11, %xmm6 2337; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 2338; SSSE3-NEXT: pand %xmm13, %xmm6 2339; SSSE3-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 2340; SSSE3-NEXT: por %xmm6, %xmm12 2341; SSSE3-NEXT: pand %xmm12, %xmm7 2342; SSSE3-NEXT: pandn %xmm10, %xmm12 2343; SSSE3-NEXT: por %xmm7, %xmm12 2344; SSSE3-NEXT: movdqa %xmm4, %xmm6 2345; SSSE3-NEXT: pxor %xmm8, %xmm6 2346; SSSE3-NEXT: movdqa %xmm11, %xmm7 2347; SSSE3-NEXT: pcmpgtd %xmm6, %xmm7 2348; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2] 2349; SSSE3-NEXT: pcmpeqd %xmm11, %xmm6 2350; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 2351; SSSE3-NEXT: pand %xmm13, %xmm6 2352; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3] 2353; SSSE3-NEXT: por %xmm6, %xmm13 2354; SSSE3-NEXT: pand %xmm13, %xmm4 2355; SSSE3-NEXT: pandn %xmm10, %xmm13 2356; SSSE3-NEXT: por %xmm4, %xmm13 2357; SSSE3-NEXT: movdqa %xmm5, %xmm4 2358; SSSE3-NEXT: pxor %xmm8, %xmm4 2359; SSSE3-NEXT: movdqa %xmm11, %xmm6 2360; SSSE3-NEXT: pcmpgtd %xmm4, %xmm6 2361; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 2362; SSSE3-NEXT: pcmpeqd %xmm11, %xmm4 2363; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2364; SSSE3-NEXT: pand %xmm7, %xmm4 2365; SSSE3-NEXT: pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3] 2366; SSSE3-NEXT: por %xmm4, %xmm14 2367; SSSE3-NEXT: pand %xmm14, %xmm5 2368; SSSE3-NEXT: pandn %xmm10, %xmm14 2369; SSSE3-NEXT: por %xmm5, %xmm14 2370; SSSE3-NEXT: movdqa %xmm2, %xmm4 2371; SSSE3-NEXT: pxor %xmm8, %xmm4 2372; SSSE3-NEXT: movdqa %xmm11, %xmm5 2373; SSSE3-NEXT: pcmpgtd %xmm4, %xmm5 2374; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2] 2375; SSSE3-NEXT: pcmpeqd %xmm11, %xmm4 2376; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2377; SSSE3-NEXT: pand %xmm7, %xmm4 2378; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 2379; SSSE3-NEXT: por %xmm4, %xmm5 2380; SSSE3-NEXT: pand %xmm5, %xmm2 2381; SSSE3-NEXT: pandn %xmm10, %xmm5 2382; SSSE3-NEXT: por %xmm2, %xmm5 2383; SSSE3-NEXT: movdqa %xmm3, %xmm2 2384; SSSE3-NEXT: pxor %xmm8, %xmm2 2385; SSSE3-NEXT: movdqa %xmm11, %xmm4 2386; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4 2387; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2] 2388; SSSE3-NEXT: pcmpeqd %xmm11, %xmm2 2389; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3] 2390; SSSE3-NEXT: pand %xmm7, %xmm6 2391; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 2392; SSSE3-NEXT: por %xmm6, %xmm2 2393; SSSE3-NEXT: pand %xmm2, %xmm3 2394; SSSE3-NEXT: pandn %xmm10, %xmm2 2395; SSSE3-NEXT: por %xmm3, %xmm2 2396; SSSE3-NEXT: movdqa %xmm0, %xmm3 2397; SSSE3-NEXT: pxor %xmm8, %xmm3 2398; SSSE3-NEXT: movdqa %xmm11, %xmm4 2399; SSSE3-NEXT: pcmpgtd %xmm3, %xmm4 2400; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2401; SSSE3-NEXT: pcmpeqd %xmm11, %xmm3 2402; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 2403; SSSE3-NEXT: pand %xmm6, %xmm7 2404; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 2405; SSSE3-NEXT: por %xmm7, %xmm3 2406; SSSE3-NEXT: pand %xmm3, %xmm0 2407; SSSE3-NEXT: pandn %xmm10, %xmm3 2408; SSSE3-NEXT: por %xmm0, %xmm3 2409; SSSE3-NEXT: movdqa %xmm1, %xmm0 2410; SSSE3-NEXT: pxor %xmm8, %xmm0 2411; SSSE3-NEXT: movdqa %xmm11, %xmm4 2412; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4 2413; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2414; SSSE3-NEXT: pcmpeqd %xmm11, %xmm0 2415; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2416; SSSE3-NEXT: pand %xmm6, %xmm0 2417; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2418; SSSE3-NEXT: por %xmm0, %xmm4 2419; SSSE3-NEXT: pand %xmm4, %xmm1 2420; SSSE3-NEXT: pandn %xmm10, %xmm4 2421; SSSE3-NEXT: por %xmm1, %xmm4 2422; SSSE3-NEXT: movdqa %xmm4, %xmm0 2423; SSSE3-NEXT: pxor %xmm8, %xmm0 2424; SSSE3-NEXT: movdqa %xmm0, %xmm1 2425; SSSE3-NEXT: pcmpgtd %xmm8, %xmm1 2426; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 2427; SSSE3-NEXT: pcmpeqd %xmm8, %xmm0 2428; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2429; SSSE3-NEXT: pand %xmm6, %xmm0 2430; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2431; SSSE3-NEXT: por %xmm0, %xmm1 2432; SSSE3-NEXT: pand %xmm4, %xmm1 2433; SSSE3-NEXT: movdqa %xmm3, %xmm0 2434; SSSE3-NEXT: pxor %xmm8, %xmm0 2435; SSSE3-NEXT: movdqa %xmm0, %xmm4 2436; SSSE3-NEXT: pcmpgtd %xmm8, %xmm4 2437; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2438; SSSE3-NEXT: pcmpeqd %xmm8, %xmm0 2439; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2440; SSSE3-NEXT: pand %xmm6, %xmm7 2441; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 2442; SSSE3-NEXT: por %xmm7, %xmm0 2443; SSSE3-NEXT: pand %xmm3, %xmm0 2444; SSSE3-NEXT: packuswb %xmm1, %xmm0 2445; SSSE3-NEXT: movdqa %xmm2, %xmm1 2446; SSSE3-NEXT: pxor %xmm8, %xmm1 2447; SSSE3-NEXT: movdqa %xmm1, %xmm3 2448; SSSE3-NEXT: pcmpgtd %xmm8, %xmm3 2449; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2450; SSSE3-NEXT: pcmpeqd %xmm8, %xmm1 2451; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2452; SSSE3-NEXT: pand %xmm4, %xmm1 2453; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2454; SSSE3-NEXT: por %xmm1, %xmm3 2455; SSSE3-NEXT: pand %xmm2, %xmm3 2456; SSSE3-NEXT: movdqa %xmm5, %xmm1 2457; SSSE3-NEXT: pxor %xmm8, %xmm1 2458; SSSE3-NEXT: movdqa %xmm1, %xmm2 2459; SSSE3-NEXT: pcmpgtd %xmm8, %xmm2 2460; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 2461; SSSE3-NEXT: pcmpeqd %xmm8, %xmm1 2462; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2463; SSSE3-NEXT: pand %xmm4, %xmm1 2464; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2465; SSSE3-NEXT: por %xmm1, %xmm2 2466; SSSE3-NEXT: pand %xmm5, %xmm2 2467; SSSE3-NEXT: packuswb %xmm3, %xmm2 2468; SSSE3-NEXT: packuswb %xmm2, %xmm0 2469; SSSE3-NEXT: movdqa %xmm14, %xmm1 2470; SSSE3-NEXT: pxor %xmm8, %xmm1 2471; SSSE3-NEXT: movdqa %xmm1, %xmm2 2472; SSSE3-NEXT: pcmpgtd %xmm8, %xmm2 2473; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 2474; SSSE3-NEXT: pcmpeqd %xmm8, %xmm1 2475; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2476; SSSE3-NEXT: pand %xmm3, %xmm1 2477; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2478; SSSE3-NEXT: por %xmm1, %xmm2 2479; SSSE3-NEXT: pand %xmm14, %xmm2 2480; SSSE3-NEXT: movdqa %xmm13, %xmm1 2481; SSSE3-NEXT: pxor %xmm8, %xmm1 2482; SSSE3-NEXT: movdqa %xmm1, %xmm3 2483; SSSE3-NEXT: pcmpgtd %xmm8, %xmm3 2484; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2485; SSSE3-NEXT: pcmpeqd %xmm8, %xmm1 2486; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3] 2487; SSSE3-NEXT: pand %xmm4, %xmm5 2488; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3] 2489; SSSE3-NEXT: por %xmm5, %xmm1 2490; SSSE3-NEXT: pand %xmm13, %xmm1 2491; SSSE3-NEXT: packuswb %xmm2, %xmm1 2492; SSSE3-NEXT: movdqa %xmm12, %xmm2 2493; SSSE3-NEXT: pxor %xmm8, %xmm2 2494; SSSE3-NEXT: movdqa %xmm2, %xmm3 2495; SSSE3-NEXT: pcmpgtd %xmm8, %xmm3 2496; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2497; SSSE3-NEXT: pcmpeqd %xmm8, %xmm2 2498; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2499; SSSE3-NEXT: pand %xmm4, %xmm2 2500; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2501; SSSE3-NEXT: por %xmm2, %xmm3 2502; SSSE3-NEXT: pand %xmm12, %xmm3 2503; SSSE3-NEXT: movdqa %xmm9, %xmm2 2504; SSSE3-NEXT: pxor %xmm8, %xmm2 2505; SSSE3-NEXT: movdqa %xmm2, %xmm4 2506; SSSE3-NEXT: pcmpgtd %xmm8, %xmm4 2507; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 2508; SSSE3-NEXT: pcmpeqd %xmm8, %xmm2 2509; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2510; SSSE3-NEXT: pand %xmm5, %xmm2 2511; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2512; SSSE3-NEXT: por %xmm2, %xmm4 2513; SSSE3-NEXT: pand %xmm9, %xmm4 2514; SSSE3-NEXT: packuswb %xmm3, %xmm4 2515; SSSE3-NEXT: packuswb %xmm4, %xmm1 2516; SSSE3-NEXT: packuswb %xmm1, %xmm0 2517; SSSE3-NEXT: retq 2518; 2519; SSE41-LABEL: trunc_packus_v16i64_v16i8: 2520; SSE41: # %bb.0: 2521; SSE41-NEXT: movdqa %xmm0, %xmm8 2522; SSE41-NEXT: movapd {{.*#+}} xmm11 = [255,255] 2523; SSE41-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648] 2524; SSE41-NEXT: movdqa %xmm6, %xmm0 2525; SSE41-NEXT: pxor %xmm9, %xmm0 2526; SSE41-NEXT: movdqa {{.*#+}} xmm12 = [2147483903,2147483903] 2527; SSE41-NEXT: movdqa %xmm12, %xmm10 2528; SSE41-NEXT: pcmpgtd %xmm0, %xmm10 2529; SSE41-NEXT: pshufd {{.*#+}} xmm13 = xmm10[0,0,2,2] 2530; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2531; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2532; SSE41-NEXT: pand %xmm13, %xmm0 2533; SSE41-NEXT: por %xmm10, %xmm0 2534; SSE41-NEXT: movapd %xmm11, %xmm10 2535; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm10 2536; SSE41-NEXT: movdqa %xmm7, %xmm0 2537; SSE41-NEXT: pxor %xmm9, %xmm0 2538; SSE41-NEXT: movdqa %xmm12, %xmm6 2539; SSE41-NEXT: pcmpgtd %xmm0, %xmm6 2540; SSE41-NEXT: pshufd {{.*#+}} xmm13 = xmm6[0,0,2,2] 2541; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2542; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2543; SSE41-NEXT: pand %xmm13, %xmm0 2544; SSE41-NEXT: por %xmm6, %xmm0 2545; SSE41-NEXT: movapd %xmm11, %xmm13 2546; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm13 2547; SSE41-NEXT: movdqa %xmm4, %xmm0 2548; SSE41-NEXT: pxor %xmm9, %xmm0 2549; SSE41-NEXT: movdqa %xmm12, %xmm6 2550; SSE41-NEXT: pcmpgtd %xmm0, %xmm6 2551; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 2552; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2553; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2554; SSE41-NEXT: pand %xmm7, %xmm0 2555; SSE41-NEXT: por %xmm6, %xmm0 2556; SSE41-NEXT: movapd %xmm11, %xmm14 2557; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm14 2558; SSE41-NEXT: movdqa %xmm5, %xmm0 2559; SSE41-NEXT: pxor %xmm9, %xmm0 2560; SSE41-NEXT: movdqa %xmm12, %xmm4 2561; SSE41-NEXT: pcmpgtd %xmm0, %xmm4 2562; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2563; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2564; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2565; SSE41-NEXT: pand %xmm6, %xmm0 2566; SSE41-NEXT: por %xmm4, %xmm0 2567; SSE41-NEXT: movapd %xmm11, %xmm15 2568; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm15 2569; SSE41-NEXT: movdqa %xmm2, %xmm0 2570; SSE41-NEXT: pxor %xmm9, %xmm0 2571; SSE41-NEXT: movdqa %xmm12, %xmm5 2572; SSE41-NEXT: pcmpgtd %xmm0, %xmm5 2573; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 2574; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2575; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2576; SSE41-NEXT: pand %xmm6, %xmm0 2577; SSE41-NEXT: por %xmm5, %xmm0 2578; SSE41-NEXT: movapd %xmm11, %xmm5 2579; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm5 2580; SSE41-NEXT: movdqa %xmm3, %xmm0 2581; SSE41-NEXT: pxor %xmm9, %xmm0 2582; SSE41-NEXT: movdqa %xmm12, %xmm2 2583; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 2584; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2] 2585; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2586; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2587; SSE41-NEXT: pand %xmm6, %xmm0 2588; SSE41-NEXT: por %xmm2, %xmm0 2589; SSE41-NEXT: movapd %xmm11, %xmm6 2590; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm6 2591; SSE41-NEXT: movdqa %xmm8, %xmm0 2592; SSE41-NEXT: pxor %xmm9, %xmm0 2593; SSE41-NEXT: movdqa %xmm12, %xmm2 2594; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 2595; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 2596; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2597; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2598; SSE41-NEXT: pand %xmm3, %xmm0 2599; SSE41-NEXT: por %xmm2, %xmm0 2600; SSE41-NEXT: movapd %xmm11, %xmm3 2601; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm3 2602; SSE41-NEXT: movdqa %xmm1, %xmm0 2603; SSE41-NEXT: pxor %xmm9, %xmm0 2604; SSE41-NEXT: movdqa %xmm12, %xmm2 2605; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 2606; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm2[0,0,2,2] 2607; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2608; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2609; SSE41-NEXT: pand %xmm7, %xmm0 2610; SSE41-NEXT: por %xmm2, %xmm0 2611; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm11 2612; SSE41-NEXT: pxor %xmm2, %xmm2 2613; SSE41-NEXT: movapd %xmm11, %xmm0 2614; SSE41-NEXT: xorpd %xmm9, %xmm0 2615; SSE41-NEXT: movapd %xmm0, %xmm1 2616; SSE41-NEXT: pcmpgtd %xmm9, %xmm1 2617; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm1[0,0,2,2] 2618; SSE41-NEXT: pcmpeqd %xmm9, %xmm0 2619; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2620; SSE41-NEXT: pand %xmm7, %xmm0 2621; SSE41-NEXT: por %xmm1, %xmm0 2622; SSE41-NEXT: pxor %xmm7, %xmm7 2623; SSE41-NEXT: blendvpd %xmm0, %xmm11, %xmm7 2624; SSE41-NEXT: movapd %xmm3, %xmm0 2625; SSE41-NEXT: xorpd %xmm9, %xmm0 2626; SSE41-NEXT: movapd %xmm0, %xmm1 2627; SSE41-NEXT: pcmpgtd %xmm9, %xmm1 2628; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2] 2629; SSE41-NEXT: pcmpeqd %xmm9, %xmm0 2630; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2631; SSE41-NEXT: pand %xmm4, %xmm0 2632; SSE41-NEXT: por %xmm1, %xmm0 2633; SSE41-NEXT: pxor %xmm1, %xmm1 2634; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm1 2635; SSE41-NEXT: packusdw %xmm7, %xmm1 2636; SSE41-NEXT: movapd %xmm6, %xmm0 2637; SSE41-NEXT: xorpd %xmm9, %xmm0 2638; SSE41-NEXT: movapd %xmm0, %xmm3 2639; SSE41-NEXT: pcmpgtd %xmm9, %xmm3 2640; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2641; SSE41-NEXT: pcmpeqd %xmm9, %xmm0 2642; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2643; SSE41-NEXT: pand %xmm4, %xmm0 2644; SSE41-NEXT: por %xmm3, %xmm0 2645; SSE41-NEXT: pxor %xmm3, %xmm3 2646; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm3 2647; SSE41-NEXT: movapd %xmm5, %xmm0 2648; SSE41-NEXT: xorpd %xmm9, %xmm0 2649; SSE41-NEXT: movapd %xmm0, %xmm4 2650; SSE41-NEXT: pcmpgtd %xmm9, %xmm4 2651; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2652; SSE41-NEXT: pcmpeqd %xmm9, %xmm0 2653; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2654; SSE41-NEXT: pand %xmm6, %xmm0 2655; SSE41-NEXT: por %xmm4, %xmm0 2656; SSE41-NEXT: pxor %xmm4, %xmm4 2657; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm4 2658; SSE41-NEXT: packusdw %xmm3, %xmm4 2659; SSE41-NEXT: packusdw %xmm4, %xmm1 2660; SSE41-NEXT: movapd %xmm15, %xmm0 2661; SSE41-NEXT: xorpd %xmm9, %xmm0 2662; SSE41-NEXT: movapd %xmm0, %xmm3 2663; SSE41-NEXT: pcmpgtd %xmm9, %xmm3 2664; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2665; SSE41-NEXT: pcmpeqd %xmm9, %xmm0 2666; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2667; SSE41-NEXT: pand %xmm4, %xmm0 2668; SSE41-NEXT: por %xmm3, %xmm0 2669; SSE41-NEXT: pxor %xmm4, %xmm4 2670; SSE41-NEXT: blendvpd %xmm0, %xmm15, %xmm4 2671; SSE41-NEXT: movapd %xmm14, %xmm0 2672; SSE41-NEXT: xorpd %xmm9, %xmm0 2673; SSE41-NEXT: movapd %xmm0, %xmm3 2674; SSE41-NEXT: pcmpgtd %xmm9, %xmm3 2675; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2] 2676; SSE41-NEXT: pcmpeqd %xmm9, %xmm0 2677; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2678; SSE41-NEXT: pand %xmm5, %xmm0 2679; SSE41-NEXT: por %xmm3, %xmm0 2680; SSE41-NEXT: pxor %xmm3, %xmm3 2681; SSE41-NEXT: blendvpd %xmm0, %xmm14, %xmm3 2682; SSE41-NEXT: packusdw %xmm4, %xmm3 2683; SSE41-NEXT: movapd %xmm13, %xmm0 2684; SSE41-NEXT: xorpd %xmm9, %xmm0 2685; SSE41-NEXT: movapd %xmm0, %xmm4 2686; SSE41-NEXT: pcmpgtd %xmm9, %xmm4 2687; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 2688; SSE41-NEXT: pcmpeqd %xmm9, %xmm0 2689; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2690; SSE41-NEXT: pand %xmm5, %xmm0 2691; SSE41-NEXT: por %xmm4, %xmm0 2692; SSE41-NEXT: pxor %xmm4, %xmm4 2693; SSE41-NEXT: blendvpd %xmm0, %xmm13, %xmm4 2694; SSE41-NEXT: movapd %xmm10, %xmm0 2695; SSE41-NEXT: xorpd %xmm9, %xmm0 2696; SSE41-NEXT: movapd %xmm0, %xmm5 2697; SSE41-NEXT: pcmpgtd %xmm9, %xmm5 2698; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 2699; SSE41-NEXT: pcmpeqd %xmm9, %xmm0 2700; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2701; SSE41-NEXT: pand %xmm6, %xmm0 2702; SSE41-NEXT: por %xmm5, %xmm0 2703; SSE41-NEXT: blendvpd %xmm0, %xmm10, %xmm2 2704; SSE41-NEXT: packusdw %xmm4, %xmm2 2705; SSE41-NEXT: packusdw %xmm2, %xmm3 2706; SSE41-NEXT: packuswb %xmm3, %xmm1 2707; SSE41-NEXT: movdqa %xmm1, %xmm0 2708; SSE41-NEXT: retq 2709; 2710; AVX1-LABEL: trunc_packus_v16i64_v16i8: 2711; AVX1: # %bb.0: 2712; AVX1-NEXT: vmovapd {{.*#+}} ymm4 = [255,255,255,255] 2713; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 2714; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [255,255] 2715; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 2716; AVX1-NEXT: vpcmpgtq %xmm3, %xmm6, %xmm7 2717; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5 2718; AVX1-NEXT: vblendvpd %ymm5, %ymm3, %ymm4, %ymm15 2719; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 2720; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 2721; AVX1-NEXT: vpcmpgtq %xmm2, %xmm6, %xmm7 2722; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5 2723; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm4, %ymm2 2724; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 2725; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 2726; AVX1-NEXT: vpcmpgtq %xmm1, %xmm6, %xmm7 2727; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5 2728; AVX1-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1 2729; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 2730; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 2731; AVX1-NEXT: vpcmpgtq %xmm0, %xmm6, %xmm6 2732; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 2733; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0 2734; AVX1-NEXT: vxorpd %xmm4, %xmm4, %xmm4 2735; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm8 2736; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14 2737; AVX1-NEXT: vpcmpgtq %xmm4, %xmm14, %xmm9 2738; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm10 2739; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7 2740; AVX1-NEXT: vpcmpgtq %xmm4, %xmm7, %xmm11 2741; AVX1-NEXT: vpcmpgtq %xmm4, %xmm2, %xmm12 2742; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 2743; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm13 2744; AVX1-NEXT: vpcmpgtq %xmm4, %xmm15, %xmm6 2745; AVX1-NEXT: vextractf128 $1, %ymm15, %xmm3 2746; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm4 2747; AVX1-NEXT: vpand %xmm3, %xmm4, %xmm3 2748; AVX1-NEXT: vpand %xmm15, %xmm6, %xmm4 2749; AVX1-NEXT: vpackusdw %xmm3, %xmm4, %xmm3 2750; AVX1-NEXT: vpand %xmm5, %xmm13, %xmm4 2751; AVX1-NEXT: vpand %xmm2, %xmm12, %xmm2 2752; AVX1-NEXT: vpackusdw %xmm4, %xmm2, %xmm2 2753; AVX1-NEXT: vpackusdw %xmm3, %xmm2, %xmm2 2754; AVX1-NEXT: vpand %xmm7, %xmm11, %xmm3 2755; AVX1-NEXT: vpand %xmm1, %xmm10, %xmm1 2756; AVX1-NEXT: vpackusdw %xmm3, %xmm1, %xmm1 2757; AVX1-NEXT: vpand %xmm14, %xmm9, %xmm3 2758; AVX1-NEXT: vpand %xmm0, %xmm8, %xmm0 2759; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm0 2760; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 2761; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 2762; AVX1-NEXT: vzeroupper 2763; AVX1-NEXT: retq 2764; 2765; AVX2-LABEL: trunc_packus_v16i64_v16i8: 2766; AVX2: # %bb.0: 2767; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255] 2768; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm5 2769; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm4, %ymm2 2770; AVX2-NEXT: vpcmpgtq %ymm3, %ymm4, %ymm5 2771; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm4, %ymm3 2772; AVX2-NEXT: vpcmpgtq %ymm0, %ymm4, %ymm5 2773; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0 2774; AVX2-NEXT: vpcmpgtq %ymm1, %ymm4, %ymm5 2775; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1 2776; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 2777; AVX2-NEXT: vpcmpgtq %ymm4, %ymm1, %ymm5 2778; AVX2-NEXT: vpand %ymm1, %ymm5, %ymm1 2779; AVX2-NEXT: vpcmpgtq %ymm4, %ymm0, %ymm5 2780; AVX2-NEXT: vpand %ymm0, %ymm5, %ymm0 2781; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0 2782; AVX2-NEXT: vpcmpgtq %ymm4, %ymm3, %ymm1 2783; AVX2-NEXT: vpand %ymm3, %ymm1, %ymm1 2784; AVX2-NEXT: vpcmpgtq %ymm4, %ymm2, %ymm3 2785; AVX2-NEXT: vpand %ymm2, %ymm3, %ymm2 2786; AVX2-NEXT: vpackusdw %ymm1, %ymm2, %ymm1 2787; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3] 2788; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2789; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0 2790; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2791; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2792; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 2793; AVX2-NEXT: vzeroupper 2794; AVX2-NEXT: retq 2795; 2796; AVX512-LABEL: trunc_packus_v16i64_v16i8: 2797; AVX512: # %bb.0: 2798; AVX512-NEXT: vpbroadcastq {{.*#+}} zmm2 = [255,255,255,255,255,255,255,255] 2799; AVX512-NEXT: vpminsq %zmm2, %zmm0, %zmm0 2800; AVX512-NEXT: vpminsq %zmm2, %zmm1, %zmm1 2801; AVX512-NEXT: vpxor %xmm2, %xmm2, %xmm2 2802; AVX512-NEXT: vpmaxsq %zmm2, %zmm1, %zmm1 2803; AVX512-NEXT: vpmaxsq %zmm2, %zmm0, %zmm0 2804; AVX512-NEXT: vpmovqd %zmm0, %ymm0 2805; AVX512-NEXT: vpmovqd %zmm1, %ymm1 2806; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 2807; AVX512-NEXT: vpmovdb %zmm0, %xmm0 2808; AVX512-NEXT: vzeroupper 2809; AVX512-NEXT: retq 2810 %1 = icmp slt <16 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255> 2811 %2 = select <16 x i1> %1, <16 x i64> %a0, <16 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255> 2812 %3 = icmp sgt <16 x i64> %2, zeroinitializer 2813 %4 = select <16 x i1> %3, <16 x i64> %2, <16 x i64> zeroinitializer 2814 %5 = trunc <16 x i64> %4 to <16 x i8> 2815 ret <16 x i8> %5 2816} 2817 2818define <8 x i8> @trunc_packus_v8i32_v8i8(<8 x i32> %a0) { 2819; SSE2-LABEL: trunc_packus_v8i32_v8i8: 2820; SSE2: # %bb.0: 2821; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255] 2822; SSE2-NEXT: movdqa %xmm2, %xmm3 2823; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 2824; SSE2-NEXT: pand %xmm3, %xmm0 2825; SSE2-NEXT: pandn %xmm2, %xmm3 2826; SSE2-NEXT: por %xmm0, %xmm3 2827; SSE2-NEXT: movdqa %xmm2, %xmm0 2828; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 2829; SSE2-NEXT: pand %xmm0, %xmm1 2830; SSE2-NEXT: pandn %xmm2, %xmm0 2831; SSE2-NEXT: por %xmm1, %xmm0 2832; SSE2-NEXT: pxor %xmm1, %xmm1 2833; SSE2-NEXT: movdqa %xmm0, %xmm2 2834; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2835; SSE2-NEXT: pand %xmm0, %xmm2 2836; SSE2-NEXT: movdqa %xmm3, %xmm0 2837; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 2838; SSE2-NEXT: pand %xmm3, %xmm0 2839; SSE2-NEXT: packuswb %xmm2, %xmm0 2840; SSE2-NEXT: retq 2841; 2842; SSSE3-LABEL: trunc_packus_v8i32_v8i8: 2843; SSSE3: # %bb.0: 2844; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255] 2845; SSSE3-NEXT: movdqa %xmm2, %xmm3 2846; SSSE3-NEXT: pcmpgtd %xmm0, %xmm3 2847; SSSE3-NEXT: pand %xmm3, %xmm0 2848; SSSE3-NEXT: pandn %xmm2, %xmm3 2849; SSSE3-NEXT: por %xmm0, %xmm3 2850; SSSE3-NEXT: movdqa %xmm2, %xmm0 2851; SSSE3-NEXT: pcmpgtd %xmm1, %xmm0 2852; SSSE3-NEXT: pand %xmm0, %xmm1 2853; SSSE3-NEXT: pandn %xmm2, %xmm0 2854; SSSE3-NEXT: por %xmm1, %xmm0 2855; SSSE3-NEXT: pxor %xmm1, %xmm1 2856; SSSE3-NEXT: movdqa %xmm0, %xmm2 2857; SSSE3-NEXT: pcmpgtd %xmm1, %xmm2 2858; SSSE3-NEXT: pand %xmm0, %xmm2 2859; SSSE3-NEXT: movdqa %xmm3, %xmm0 2860; SSSE3-NEXT: pcmpgtd %xmm1, %xmm0 2861; SSSE3-NEXT: pand %xmm3, %xmm0 2862; SSSE3-NEXT: packuswb %xmm2, %xmm0 2863; SSSE3-NEXT: retq 2864; 2865; SSE41-LABEL: trunc_packus_v8i32_v8i8: 2866; SSE41: # %bb.0: 2867; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255] 2868; SSE41-NEXT: pminsd %xmm2, %xmm0 2869; SSE41-NEXT: pminsd %xmm2, %xmm1 2870; SSE41-NEXT: pxor %xmm2, %xmm2 2871; SSE41-NEXT: pmaxsd %xmm2, %xmm1 2872; SSE41-NEXT: pmaxsd %xmm2, %xmm0 2873; SSE41-NEXT: packusdw %xmm1, %xmm0 2874; SSE41-NEXT: retq 2875; 2876; AVX1-LABEL: trunc_packus_v8i32_v8i8: 2877; AVX1: # %bb.0: 2878; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [255,255,255,255] 2879; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm2 2880; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2881; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2882; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 2883; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2884; AVX1-NEXT: vpmaxsd %xmm1, %xmm2, %xmm1 2885; AVX1-NEXT: vpackusdw %xmm0, %xmm1, %xmm0 2886; AVX1-NEXT: vzeroupper 2887; AVX1-NEXT: retq 2888; 2889; AVX2-LABEL: trunc_packus_v8i32_v8i8: 2890; AVX2: # %bb.0: 2891; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255] 2892; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2893; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 2894; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2895; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2896; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 2897; AVX2-NEXT: vzeroupper 2898; AVX2-NEXT: retq 2899; 2900; AVX512F-LABEL: trunc_packus_v8i32_v8i8: 2901; AVX512F: # %bb.0: 2902; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255] 2903; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2904; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1 2905; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2906; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 2907; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 2908; AVX512F-NEXT: vzeroupper 2909; AVX512F-NEXT: retq 2910; 2911; AVX512VL-LABEL: trunc_packus_v8i32_v8i8: 2912; AVX512VL: # %bb.0: 2913; AVX512VL-NEXT: vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0 2914; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1 2915; AVX512VL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2916; AVX512VL-NEXT: vpmovdw %ymm0, %xmm0 2917; AVX512VL-NEXT: vzeroupper 2918; AVX512VL-NEXT: retq 2919; 2920; AVX512BW-LABEL: trunc_packus_v8i32_v8i8: 2921; AVX512BW: # %bb.0: 2922; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255] 2923; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2924; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1 2925; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2926; AVX512BW-NEXT: vpmovdw %zmm0, %ymm0 2927; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 2928; AVX512BW-NEXT: vzeroupper 2929; AVX512BW-NEXT: retq 2930; 2931; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i8: 2932; AVX512BWVL: # %bb.0: 2933; AVX512BWVL-NEXT: vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0 2934; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 2935; AVX512BWVL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2936; AVX512BWVL-NEXT: vpmovdw %ymm0, %xmm0 2937; AVX512BWVL-NEXT: vzeroupper 2938; AVX512BWVL-NEXT: retq 2939 %1 = icmp slt <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255> 2940 %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255> 2941 %3 = icmp sgt <8 x i32> %2, zeroinitializer 2942 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer 2943 %5 = trunc <8 x i32> %4 to <8 x i8> 2944 ret <8 x i8> %5 2945} 2946 2947define void @trunc_packus_v8i32_v8i8_store(<8 x i32> %a0, <8 x i8> *%p1) { 2948; SSE-LABEL: trunc_packus_v8i32_v8i8_store: 2949; SSE: # %bb.0: 2950; SSE-NEXT: packssdw %xmm1, %xmm0 2951; SSE-NEXT: packuswb %xmm0, %xmm0 2952; SSE-NEXT: movq %xmm0, (%rdi) 2953; SSE-NEXT: retq 2954; 2955; AVX1-LABEL: trunc_packus_v8i32_v8i8_store: 2956; AVX1: # %bb.0: 2957; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 2958; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 2959; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0 2960; AVX1-NEXT: vmovq %xmm0, (%rdi) 2961; AVX1-NEXT: vzeroupper 2962; AVX1-NEXT: retq 2963; 2964; AVX2-LABEL: trunc_packus_v8i32_v8i8_store: 2965; AVX2: # %bb.0: 2966; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2967; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 2968; AVX2-NEXT: vpackuswb %xmm0, %xmm0, %xmm0 2969; AVX2-NEXT: vmovq %xmm0, (%rdi) 2970; AVX2-NEXT: vzeroupper 2971; AVX2-NEXT: retq 2972; 2973; AVX512F-LABEL: trunc_packus_v8i32_v8i8_store: 2974; AVX512F: # %bb.0: 2975; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255] 2976; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2977; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1 2978; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2979; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 2980; AVX512F-NEXT: vpackuswb %xmm0, %xmm0, %xmm0 2981; AVX512F-NEXT: vmovq %xmm0, (%rdi) 2982; AVX512F-NEXT: vzeroupper 2983; AVX512F-NEXT: retq 2984; 2985; AVX512VL-LABEL: trunc_packus_v8i32_v8i8_store: 2986; AVX512VL: # %bb.0: 2987; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1 2988; AVX512VL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2989; AVX512VL-NEXT: vpmovusdb %ymm0, (%rdi) 2990; AVX512VL-NEXT: vzeroupper 2991; AVX512VL-NEXT: retq 2992; 2993; AVX512BW-LABEL: trunc_packus_v8i32_v8i8_store: 2994; AVX512BW: # %bb.0: 2995; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255] 2996; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2997; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1 2998; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2999; AVX512BW-NEXT: vpmovdw %zmm0, %ymm0 3000; AVX512BW-NEXT: vpackuswb %xmm0, %xmm0, %xmm0 3001; AVX512BW-NEXT: vmovq %xmm0, (%rdi) 3002; AVX512BW-NEXT: vzeroupper 3003; AVX512BW-NEXT: retq 3004; 3005; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i8_store: 3006; AVX512BWVL: # %bb.0: 3007; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 3008; AVX512BWVL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 3009; AVX512BWVL-NEXT: vpmovusdb %ymm0, (%rdi) 3010; AVX512BWVL-NEXT: vzeroupper 3011; AVX512BWVL-NEXT: retq 3012 %1 = icmp slt <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255> 3013 %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255> 3014 %3 = icmp sgt <8 x i32> %2, zeroinitializer 3015 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer 3016 %5 = trunc <8 x i32> %4 to <8 x i8> 3017 store <8 x i8> %5, <8 x i8> *%p1 3018 ret void 3019} 3020 3021define <16 x i8> @trunc_packus_v16i32_v16i8(<16 x i32> %a0) { 3022; SSE-LABEL: trunc_packus_v16i32_v16i8: 3023; SSE: # %bb.0: 3024; SSE-NEXT: packssdw %xmm3, %xmm2 3025; SSE-NEXT: packssdw %xmm1, %xmm0 3026; SSE-NEXT: packuswb %xmm2, %xmm0 3027; SSE-NEXT: retq 3028; 3029; AVX1-LABEL: trunc_packus_v16i32_v16i8: 3030; AVX1: # %bb.0: 3031; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3032; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1 3033; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3034; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0 3035; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3036; AVX1-NEXT: vzeroupper 3037; AVX1-NEXT: retq 3038; 3039; AVX2-LABEL: trunc_packus_v16i32_v16i8: 3040; AVX2: # %bb.0: 3041; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 3042; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 3043; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 3044; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3045; AVX2-NEXT: vzeroupper 3046; AVX2-NEXT: retq 3047; 3048; AVX512-LABEL: trunc_packus_v16i32_v16i8: 3049; AVX512: # %bb.0: 3050; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1 3051; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 3052; AVX512-NEXT: vpmovusdb %zmm0, %xmm0 3053; AVX512-NEXT: vzeroupper 3054; AVX512-NEXT: retq 3055 %1 = icmp slt <16 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255> 3056 %2 = select <16 x i1> %1, <16 x i32> %a0, <16 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255> 3057 %3 = icmp sgt <16 x i32> %2, zeroinitializer 3058 %4 = select <16 x i1> %3, <16 x i32> %2, <16 x i32> zeroinitializer 3059 %5 = trunc <16 x i32> %4 to <16 x i8> 3060 ret <16 x i8> %5 3061} 3062 3063define <16 x i8> @trunc_packus_v16i16_v16i8(<16 x i16> %a0) { 3064; SSE-LABEL: trunc_packus_v16i16_v16i8: 3065; SSE: # %bb.0: 3066; SSE-NEXT: packuswb %xmm1, %xmm0 3067; SSE-NEXT: retq 3068; 3069; AVX1-LABEL: trunc_packus_v16i16_v16i8: 3070; AVX1: # %bb.0: 3071; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3072; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3073; AVX1-NEXT: vzeroupper 3074; AVX1-NEXT: retq 3075; 3076; AVX2-LABEL: trunc_packus_v16i16_v16i8: 3077; AVX2: # %bb.0: 3078; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 3079; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3080; AVX2-NEXT: vzeroupper 3081; AVX2-NEXT: retq 3082; 3083; AVX512F-LABEL: trunc_packus_v16i16_v16i8: 3084; AVX512F: # %bb.0: 3085; AVX512F-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0 3086; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1 3087; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 3088; AVX512F-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero 3089; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 3090; AVX512F-NEXT: vzeroupper 3091; AVX512F-NEXT: retq 3092; 3093; AVX512VL-LABEL: trunc_packus_v16i16_v16i8: 3094; AVX512VL: # %bb.0: 3095; AVX512VL-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0 3096; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1 3097; AVX512VL-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 3098; AVX512VL-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero 3099; AVX512VL-NEXT: vpmovdb %zmm0, %xmm0 3100; AVX512VL-NEXT: vzeroupper 3101; AVX512VL-NEXT: retq 3102; 3103; AVX512BW-LABEL: trunc_packus_v16i16_v16i8: 3104; AVX512BW: # %bb.0: 3105; AVX512BW-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0 3106; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1 3107; AVX512BW-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 3108; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 3109; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 3110; AVX512BW-NEXT: vzeroupper 3111; AVX512BW-NEXT: retq 3112; 3113; AVX512BWVL-LABEL: trunc_packus_v16i16_v16i8: 3114; AVX512BWVL: # %bb.0: 3115; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 3116; AVX512BWVL-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 3117; AVX512BWVL-NEXT: vpmovuswb %ymm0, %xmm0 3118; AVX512BWVL-NEXT: vzeroupper 3119; AVX512BWVL-NEXT: retq 3120 %1 = icmp slt <16 x i16> %a0, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255> 3121 %2 = select <16 x i1> %1, <16 x i16> %a0, <16 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255> 3122 %3 = icmp sgt <16 x i16> %2, zeroinitializer 3123 %4 = select <16 x i1> %3, <16 x i16> %2, <16 x i16> zeroinitializer 3124 %5 = trunc <16 x i16> %4 to <16 x i8> 3125 ret <16 x i8> %5 3126} 3127 3128define <32 x i8> @trunc_packus_v32i16_v32i8(<32 x i16> %a0) { 3129; SSE-LABEL: trunc_packus_v32i16_v32i8: 3130; SSE: # %bb.0: 3131; SSE-NEXT: packuswb %xmm1, %xmm0 3132; SSE-NEXT: packuswb %xmm3, %xmm2 3133; SSE-NEXT: movdqa %xmm2, %xmm1 3134; SSE-NEXT: retq 3135; 3136; AVX1-LABEL: trunc_packus_v32i16_v32i8: 3137; AVX1: # %bb.0: 3138; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3139; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 3140; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3141; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 3142; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3143; AVX1-NEXT: retq 3144; 3145; AVX2-LABEL: trunc_packus_v32i16_v32i8: 3146; AVX2: # %bb.0: 3147; AVX2-NEXT: vpackuswb %ymm1, %ymm0, %ymm0 3148; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 3149; AVX2-NEXT: retq 3150; 3151; AVX512F-LABEL: trunc_packus_v32i16_v32i8: 3152; AVX512F: # %bb.0: 3153; AVX512F-NEXT: vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255] 3154; AVX512F-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3155; AVX512F-NEXT: vpminsw %ymm2, %ymm1, %ymm1 3156; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2 3157; AVX512F-NEXT: vpmaxsw %ymm2, %ymm1, %ymm1 3158; AVX512F-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3159; AVX512F-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero 3160; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 3161; AVX512F-NEXT: vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero 3162; AVX512F-NEXT: vpmovdb %zmm1, %xmm1 3163; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3164; AVX512F-NEXT: retq 3165; 3166; AVX512VL-LABEL: trunc_packus_v32i16_v32i8: 3167; AVX512VL: # %bb.0: 3168; AVX512VL-NEXT: vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255] 3169; AVX512VL-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3170; AVX512VL-NEXT: vpminsw %ymm2, %ymm1, %ymm1 3171; AVX512VL-NEXT: vpxor %xmm2, %xmm2, %xmm2 3172; AVX512VL-NEXT: vpmaxsw %ymm2, %ymm1, %ymm1 3173; AVX512VL-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3174; AVX512VL-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero 3175; AVX512VL-NEXT: vpmovdb %zmm0, %xmm0 3176; AVX512VL-NEXT: vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero 3177; AVX512VL-NEXT: vpmovdb %zmm1, %xmm1 3178; AVX512VL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3179; AVX512VL-NEXT: retq 3180; 3181; AVX512BW-LABEL: trunc_packus_v32i16_v32i8: 3182; AVX512BW: # %bb.0: 3183; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1 3184; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3185; AVX512BW-NEXT: vpmovuswb %zmm0, %ymm0 3186; AVX512BW-NEXT: retq 3187; 3188; AVX512BWVL-LABEL: trunc_packus_v32i16_v32i8: 3189; AVX512BWVL: # %bb.0: 3190; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 3191; AVX512BWVL-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3192; AVX512BWVL-NEXT: vpmovuswb %zmm0, %ymm0 3193; AVX512BWVL-NEXT: retq 3194 %1 = icmp slt <32 x i16> %a0, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255> 3195 %2 = select <32 x i1> %1, <32 x i16> %a0, <32 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255> 3196 %3 = icmp sgt <32 x i16> %2, zeroinitializer 3197 %4 = select <32 x i1> %3, <32 x i16> %2, <32 x i16> zeroinitializer 3198 %5 = trunc <32 x i16> %4 to <32 x i8> 3199 ret <32 x i8> %5 3200} 3201