brintos

brintos / llvm-project-archived public Read only

0
0
Text · 152.8 KiB · 0806e49 Raw
3753 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE415; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-SLOW7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST,AVX2-FAST-ALL8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST,AVX2-FAST-PERLANE9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX512,AVX512F10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512VL11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512VL12; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BW13; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BW14; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BWVL15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BWVL16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefixes=SKX17 18;19; Unsigned saturation truncation to vXi3220;21 22define <2 x i32> @trunc_usat_v2i64_v2i32(<2 x i64> %a0) {23; SSE2-SSSE3-LABEL: trunc_usat_v2i64_v2i32:24; SSE2-SSSE3:       # %bb.0:25; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]26; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm127; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]28; SSE2-SSSE3-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm229; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,2,2]30; SSE2-SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm131; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm132; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm233; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm234; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm135; SSE2-SSSE3-NEXT:    por %xmm2, %xmm136; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]37; SSE2-SSSE3-NEXT:    retq38;39; SSE41-LABEL: trunc_usat_v2i64_v2i32:40; SSE41:       # %bb.0:41; SSE41-NEXT:    movdqa %xmm0, %xmm142; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [4294967295,4294967295]43; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]44; SSE41-NEXT:    pxor %xmm0, %xmm345; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]46; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm347; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm048; SSE41-NEXT:    pandn %xmm3, %xmm049; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm250; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]51; SSE41-NEXT:    retq52;53; AVX-LABEL: trunc_usat_v2i64_v2i32:54; AVX:       # %bb.0:55; AVX-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm156; AVX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm157; AVX-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm058; AVX-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]59; AVX-NEXT:    retq60;61; AVX512F-LABEL: trunc_usat_v2i64_v2i32:62; AVX512F:       # %bb.0:63; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm064; AVX512F-NEXT:    vpmovusqd %zmm0, %ymm065; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm066; AVX512F-NEXT:    vzeroupper67; AVX512F-NEXT:    retq68;69; AVX512VL-LABEL: trunc_usat_v2i64_v2i32:70; AVX512VL:       # %bb.0:71; AVX512VL-NEXT:    vpmovusqd %xmm0, %xmm072; AVX512VL-NEXT:    retq73;74; AVX512BW-LABEL: trunc_usat_v2i64_v2i32:75; AVX512BW:       # %bb.0:76; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm077; AVX512BW-NEXT:    vpmovusqd %zmm0, %ymm078; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm079; AVX512BW-NEXT:    vzeroupper80; AVX512BW-NEXT:    retq81;82; AVX512BWVL-LABEL: trunc_usat_v2i64_v2i32:83; AVX512BWVL:       # %bb.0:84; AVX512BWVL-NEXT:    vpmovusqd %xmm0, %xmm085; AVX512BWVL-NEXT:    retq86;87; SKX-LABEL: trunc_usat_v2i64_v2i32:88; SKX:       # %bb.0:89; SKX-NEXT:    vpmovusqd %xmm0, %xmm090; SKX-NEXT:    retq91  %1 = icmp ult <2 x i64> %a0, <i64 4294967295, i64 4294967295>92  %2 = select <2 x i1> %1, <2 x i64> %a0, <2 x i64> <i64 4294967295, i64 4294967295>93  %3 = trunc <2 x i64> %2 to <2 x i32>94  ret <2 x i32> %395}96 97define void @trunc_usat_v2i64_v2i32_store(<2 x i64> %a0, ptr %p1) {98; SSE2-SSSE3-LABEL: trunc_usat_v2i64_v2i32_store:99; SSE2-SSSE3:       # %bb.0:100; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]101; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm1102; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]103; SSE2-SSSE3-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2104; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,2,2]105; SSE2-SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1106; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm1107; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm2108; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm2109; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1110; SSE2-SSSE3-NEXT:    por %xmm2, %xmm1111; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]112; SSE2-SSSE3-NEXT:    movq %xmm0, (%rdi)113; SSE2-SSSE3-NEXT:    retq114;115; SSE41-LABEL: trunc_usat_v2i64_v2i32_store:116; SSE41:       # %bb.0:117; SSE41-NEXT:    movdqa %xmm0, %xmm1118; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [4294967295,4294967295]119; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]120; SSE41-NEXT:    pxor %xmm0, %xmm3121; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]122; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3123; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0124; SSE41-NEXT:    pandn %xmm3, %xmm0125; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm2126; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]127; SSE41-NEXT:    movq %xmm0, (%rdi)128; SSE41-NEXT:    retq129;130; AVX-LABEL: trunc_usat_v2i64_v2i32_store:131; AVX:       # %bb.0:132; AVX-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1133; AVX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1134; AVX-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0135; AVX-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]136; AVX-NEXT:    vmovlpd %xmm0, (%rdi)137; AVX-NEXT:    retq138;139; AVX512F-LABEL: trunc_usat_v2i64_v2i32_store:140; AVX512F:       # %bb.0:141; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0142; AVX512F-NEXT:    vpmovusqd %zmm0, %ymm0143; AVX512F-NEXT:    vmovq %xmm0, (%rdi)144; AVX512F-NEXT:    vzeroupper145; AVX512F-NEXT:    retq146;147; AVX512VL-LABEL: trunc_usat_v2i64_v2i32_store:148; AVX512VL:       # %bb.0:149; AVX512VL-NEXT:    vpmovusqd %xmm0, (%rdi)150; AVX512VL-NEXT:    retq151;152; AVX512BW-LABEL: trunc_usat_v2i64_v2i32_store:153; AVX512BW:       # %bb.0:154; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0155; AVX512BW-NEXT:    vpmovusqd %zmm0, %ymm0156; AVX512BW-NEXT:    vmovq %xmm0, (%rdi)157; AVX512BW-NEXT:    vzeroupper158; AVX512BW-NEXT:    retq159;160; AVX512BWVL-LABEL: trunc_usat_v2i64_v2i32_store:161; AVX512BWVL:       # %bb.0:162; AVX512BWVL-NEXT:    vpmovusqd %xmm0, (%rdi)163; AVX512BWVL-NEXT:    retq164;165; SKX-LABEL: trunc_usat_v2i64_v2i32_store:166; SKX:       # %bb.0:167; SKX-NEXT:    vpmovusqd %xmm0, (%rdi)168; SKX-NEXT:    retq169  %1 = icmp ult <2 x i64> %a0, <i64 4294967295, i64 4294967295>170  %2 = select <2 x i1> %1, <2 x i64> %a0, <2 x i64> <i64 4294967295, i64 4294967295>171  %3 = trunc <2 x i64> %2 to <2 x i32>172  store <2 x i32> %3, ptr %p1173  ret void174}175 176define <4 x i32> @trunc_usat_v4i64_v4i32(<4 x i64> %a0) {177; SSE2-SSSE3-LABEL: trunc_usat_v4i64_v4i32:178; SSE2-SSSE3:       # %bb.0:179; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]180; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm3181; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm3182; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]183; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [2147483647,2147483647,2147483647,2147483647]184; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm6185; SSE2-SSSE3-NEXT:    pcmpgtd %xmm4, %xmm6186; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]187; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm3188; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm3189; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm4190; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm4191; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]192; SSE2-SSSE3-NEXT:    pcmpgtd %xmm6, %xmm5193; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]194; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm4195; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm4196; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm1197; SSE2-SSSE3-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4198; SSE2-SSSE3-NEXT:    por %xmm1, %xmm4199; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm1200; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm1201; SSE2-SSSE3-NEXT:    pand %xmm3, %xmm0202; SSE2-SSSE3-NEXT:    por %xmm1, %xmm0203; SSE2-SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm4[0,2]204; SSE2-SSSE3-NEXT:    retq205;206; SSE41-LABEL: trunc_usat_v4i64_v4i32:207; SSE41:       # %bb.0:208; SSE41-NEXT:    movdqa %xmm0, %xmm2209; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]210; SSE41-NEXT:    movdqa %xmm0, %xmm5211; SSE41-NEXT:    pxor %xmm4, %xmm5212; SSE41-NEXT:    movdqa {{.*#+}} xmm6 = [9223372039002259455,9223372039002259455]213; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]214; SSE41-NEXT:    pcmpeqd %xmm6, %xmm5215; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483647,2147483647,2147483647,2147483647]216; SSE41-NEXT:    movdqa %xmm0, %xmm3217; SSE41-NEXT:    pcmpgtd %xmm7, %xmm3218; SSE41-NEXT:    pand %xmm5, %xmm3219; SSE41-NEXT:    pxor %xmm1, %xmm4220; SSE41-NEXT:    pcmpeqd %xmm4, %xmm6221; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,2,2]222; SSE41-NEXT:    pcmpgtd %xmm4, %xmm0223; SSE41-NEXT:    pand %xmm6, %xmm0224; SSE41-NEXT:    movapd {{.*#+}} xmm4 = [4294967295,4294967295]225; SSE41-NEXT:    movapd {{.*#+}} xmm5 = [4294967295,429496729]226; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm5227; SSE41-NEXT:    movdqa %xmm3, %xmm0228; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm4229; SSE41-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,2],xmm5[0,2]230; SSE41-NEXT:    movaps %xmm4, %xmm0231; SSE41-NEXT:    retq232;233; AVX1-LABEL: trunc_usat_v4i64_v4i32:234; AVX1:       # %bb.0:235; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]236; AVX1-NEXT:    # xmm1 = mem[0,0]237; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm2238; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372041149743103,9223372041149743103]239; AVX1-NEXT:    # xmm3 = mem[0,0]240; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2241; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4242; AVX1-NEXT:    vpxor %xmm1, %xmm4, %xmm1243; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm1244; AVX1-NEXT:    vmovapd {{.*#+}} xmm3 = [4294967295,429496729]245; AVX1-NEXT:    vblendvpd %xmm1, %xmm4, %xmm3, %xmm1246; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [4294967295,4294967295]247; AVX1-NEXT:    # xmm3 = mem[0,0]248; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm3, %xmm0249; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]250; AVX1-NEXT:    vzeroupper251; AVX1-NEXT:    retq252;253; AVX2-SLOW-LABEL: trunc_usat_v4i64_v4i32:254; AVX2-SLOW:       # %bb.0:255; AVX2-SLOW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]256; AVX2-SLOW-NEXT:    vpxor %ymm1, %ymm0, %ymm1257; AVX2-SLOW-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372041149743102,9223372041149743102,9223372041149743102,9223372041149743102]258; AVX2-SLOW-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm1259; AVX2-SLOW-NEXT:    vblendvpd %ymm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0260; AVX2-SLOW-NEXT:    vextractf128 $1, %ymm0, %xmm1261; AVX2-SLOW-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]262; AVX2-SLOW-NEXT:    vzeroupper263; AVX2-SLOW-NEXT:    retq264;265; AVX2-FAST-ALL-LABEL: trunc_usat_v4i64_v4i32:266; AVX2-FAST-ALL:       # %bb.0:267; AVX2-FAST-ALL-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]268; AVX2-FAST-ALL-NEXT:    vpxor %ymm1, %ymm0, %ymm1269; AVX2-FAST-ALL-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372041149743102,9223372041149743102,9223372041149743102,9223372041149743102]270; AVX2-FAST-ALL-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm1271; AVX2-FAST-ALL-NEXT:    vblendvpd %ymm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0272; AVX2-FAST-ALL-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]273; AVX2-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]274; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0275; AVX2-FAST-ALL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0276; AVX2-FAST-ALL-NEXT:    vzeroupper277; AVX2-FAST-ALL-NEXT:    retq278;279; AVX2-FAST-PERLANE-LABEL: trunc_usat_v4i64_v4i32:280; AVX2-FAST-PERLANE:       # %bb.0:281; AVX2-FAST-PERLANE-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]282; AVX2-FAST-PERLANE-NEXT:    vpxor %ymm1, %ymm0, %ymm1283; AVX2-FAST-PERLANE-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372041149743102,9223372041149743102,9223372041149743102,9223372041149743102]284; AVX2-FAST-PERLANE-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm1285; AVX2-FAST-PERLANE-NEXT:    vblendvpd %ymm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0286; AVX2-FAST-PERLANE-NEXT:    vextractf128 $1, %ymm0, %xmm1287; AVX2-FAST-PERLANE-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]288; AVX2-FAST-PERLANE-NEXT:    vzeroupper289; AVX2-FAST-PERLANE-NEXT:    retq290;291; AVX512F-LABEL: trunc_usat_v4i64_v4i32:292; AVX512F:       # %bb.0:293; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0294; AVX512F-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k1295; AVX512F-NEXT:    vpmovzxdq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,429496729]296; AVX512F-NEXT:    vmovdqa64 %zmm0, %zmm1 {%k1}297; AVX512F-NEXT:    vpmovqd %zmm1, %ymm0298; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0299; AVX512F-NEXT:    vzeroupper300; AVX512F-NEXT:    retq301;302; AVX512VL-LABEL: trunc_usat_v4i64_v4i32:303; AVX512VL:       # %bb.0:304; AVX512VL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1305; AVX512VL-NEXT:    vpmovzxdq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,429496729]306; AVX512VL-NEXT:    vmovdqa64 %ymm0, %ymm1 {%k1}307; AVX512VL-NEXT:    vpmovqd %ymm1, %xmm0308; AVX512VL-NEXT:    vzeroupper309; AVX512VL-NEXT:    retq310;311; AVX512BW-LABEL: trunc_usat_v4i64_v4i32:312; AVX512BW:       # %bb.0:313; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0314; AVX512BW-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k1315; AVX512BW-NEXT:    vpmovzxdq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,429496729]316; AVX512BW-NEXT:    vmovdqa64 %zmm0, %zmm1 {%k1}317; AVX512BW-NEXT:    vpmovqd %zmm1, %ymm0318; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0319; AVX512BW-NEXT:    vzeroupper320; AVX512BW-NEXT:    retq321;322; AVX512BWVL-LABEL: trunc_usat_v4i64_v4i32:323; AVX512BWVL:       # %bb.0:324; AVX512BWVL-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1325; AVX512BWVL-NEXT:    vpmovzxdq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,429496729]326; AVX512BWVL-NEXT:    vmovdqa64 %ymm0, %ymm1 {%k1}327; AVX512BWVL-NEXT:    vpmovqd %ymm1, %xmm0328; AVX512BWVL-NEXT:    vzeroupper329; AVX512BWVL-NEXT:    retq330;331; SKX-LABEL: trunc_usat_v4i64_v4i32:332; SKX:       # %bb.0:333; SKX-NEXT:    vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1334; SKX-NEXT:    vmovdqa {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,429496729]335; SKX-NEXT:    vmovdqa64 %ymm0, %ymm1 {%k1}336; SKX-NEXT:    vpmovqd %ymm1, %xmm0337; SKX-NEXT:    vzeroupper338; SKX-NEXT:    retq339  %1 = icmp ult <4 x i64> %a0, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>340  %2 = select <4 x i1> %1, <4 x i64> %a0, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 429496729>341  %3 = trunc <4 x i64> %2 to <4 x i32>342  ret <4 x i32> %3343}344 345define <8 x i32> @trunc_usat_v8i64_v8i32(ptr %p0) {346; SSE2-SSSE3-LABEL: trunc_usat_v8i64_v8i32:347; SSE2-SSSE3:       # %bb.0:348; SSE2-SSSE3-NEXT:    movdqa (%rdi), %xmm2349; SSE2-SSSE3-NEXT:    movdqa 16(%rdi), %xmm0350; SSE2-SSSE3-NEXT:    movdqa 32(%rdi), %xmm6351; SSE2-SSSE3-NEXT:    movdqa 48(%rdi), %xmm1352; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]353; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm5354; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm5355; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]356; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [2147483647,2147483647,2147483647,2147483647]357; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm8358; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm8359; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[1,1,3,3]360; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm7361; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm7362; SSE2-SSSE3-NEXT:    pcmpeqd %xmm5, %xmm5363; SSE2-SSSE3-NEXT:    pand %xmm7, %xmm1364; SSE2-SSSE3-NEXT:    pxor %xmm5, %xmm7365; SSE2-SSSE3-NEXT:    por %xmm1, %xmm7366; SSE2-SSSE3-NEXT:    movdqa %xmm6, %xmm1367; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm1368; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm1[0,0,2,2]369; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm9370; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm9371; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]372; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm1373; SSE2-SSSE3-NEXT:    pand %xmm9, %xmm1374; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm6375; SSE2-SSSE3-NEXT:    pxor %xmm5, %xmm1376; SSE2-SSSE3-NEXT:    por %xmm6, %xmm1377; SSE2-SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm7[0,2]378; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm6379; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm6380; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]381; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm8382; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm8383; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]384; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm6385; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm6386; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm0387; SSE2-SSSE3-NEXT:    pxor %xmm5, %xmm6388; SSE2-SSSE3-NEXT:    por %xmm0, %xmm6389; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm0390; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm0391; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[0,0,2,2]392; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm4393; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]394; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm0395; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm0396; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm5397; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm0398; SSE2-SSSE3-NEXT:    por %xmm5, %xmm0399; SSE2-SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm6[0,2]400; SSE2-SSSE3-NEXT:    retq401;402; SSE41-LABEL: trunc_usat_v8i64_v8i32:403; SSE41:       # %bb.0:404; SSE41-NEXT:    movdqa (%rdi), %xmm4405; SSE41-NEXT:    movdqa 16(%rdi), %xmm7406; SSE41-NEXT:    movdqa 32(%rdi), %xmm8407; SSE41-NEXT:    movdqa 48(%rdi), %xmm1408; SSE41-NEXT:    movapd {{.*#+}} xmm3 = [4294967295,4294967295]409; SSE41-NEXT:    movdqa {{.*#+}} xmm6 = [9223372039002259456,9223372039002259456]410; SSE41-NEXT:    movdqa %xmm1, %xmm9411; SSE41-NEXT:    pxor %xmm6, %xmm9412; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259455,9223372039002259455]413; SSE41-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]414; SSE41-NEXT:    pcmpeqd %xmm5, %xmm9415; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483647,2147483647,2147483647,2147483647]416; SSE41-NEXT:    movdqa %xmm2, %xmm0417; SSE41-NEXT:    pcmpgtd %xmm10, %xmm0418; SSE41-NEXT:    pand %xmm9, %xmm0419; SSE41-NEXT:    movapd %xmm3, %xmm9420; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm9421; SSE41-NEXT:    movdqa %xmm8, %xmm1422; SSE41-NEXT:    pxor %xmm6, %xmm1423; SSE41-NEXT:    pshufd {{.*#+}} xmm10 = xmm1[0,0,2,2]424; SSE41-NEXT:    pcmpeqd %xmm5, %xmm1425; SSE41-NEXT:    movdqa %xmm2, %xmm0426; SSE41-NEXT:    pcmpgtd %xmm10, %xmm0427; SSE41-NEXT:    pand %xmm1, %xmm0428; SSE41-NEXT:    movapd %xmm3, %xmm1429; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm1430; SSE41-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm9[0,2]431; SSE41-NEXT:    movdqa %xmm7, %xmm8432; SSE41-NEXT:    pxor %xmm6, %xmm8433; SSE41-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]434; SSE41-NEXT:    pcmpeqd %xmm5, %xmm8435; SSE41-NEXT:    movdqa %xmm2, %xmm0436; SSE41-NEXT:    pcmpgtd %xmm9, %xmm0437; SSE41-NEXT:    pand %xmm8, %xmm0438; SSE41-NEXT:    movapd %xmm3, %xmm8439; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm8440; SSE41-NEXT:    pxor %xmm4, %xmm6441; SSE41-NEXT:    pcmpeqd %xmm6, %xmm5442; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]443; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2444; SSE41-NEXT:    pand %xmm5, %xmm2445; SSE41-NEXT:    movdqa %xmm2, %xmm0446; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm3447; SSE41-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,2],xmm8[0,2]448; SSE41-NEXT:    movaps %xmm3, %xmm0449; SSE41-NEXT:    retq450;451; AVX1-LABEL: trunc_usat_v8i64_v8i32:452; AVX1:       # %bb.0:453; AVX1-NEXT:    vmovdqa (%rdi), %xmm0454; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm1455; AVX1-NEXT:    vmovdqa 32(%rdi), %xmm2456; AVX1-NEXT:    vmovdqa 48(%rdi), %xmm3457; AVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]458; AVX1-NEXT:    # xmm4 = mem[0,0]459; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm5460; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [9223372041149743103,9223372041149743103]461; AVX1-NEXT:    # xmm6 = mem[0,0]462; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5463; AVX1-NEXT:    vmovddup {{.*#+}} xmm7 = [4294967295,4294967295]464; AVX1-NEXT:    # xmm7 = mem[0,0]465; AVX1-NEXT:    vblendvpd %xmm5, %xmm1, %xmm7, %xmm1466; AVX1-NEXT:    vpxor %xmm4, %xmm0, %xmm5467; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5468; AVX1-NEXT:    vblendvpd %xmm5, %xmm0, %xmm7, %xmm0469; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]470; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm1471; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm6, %xmm1472; AVX1-NEXT:    vblendvpd %xmm1, %xmm3, %xmm7, %xmm1473; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm3474; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm3475; AVX1-NEXT:    vblendvpd %xmm3, %xmm2, %xmm7, %xmm2476; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm2[0,2],xmm1[0,2]477; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0478; AVX1-NEXT:    retq479;480; AVX2-LABEL: trunc_usat_v8i64_v8i32:481; AVX2:       # %bb.0:482; AVX2-NEXT:    vmovdqa (%rdi), %ymm0483; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm1484; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]485; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]486; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm4487; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [9223372041149743103,9223372041149743103,9223372041149743103,9223372041149743103]488; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm5, %ymm4489; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm1490; AVX2-NEXT:    vpxor %ymm3, %ymm0, %ymm3491; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm5, %ymm3492; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0493; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6]494; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]495; AVX2-NEXT:    retq496;497; AVX512-LABEL: trunc_usat_v8i64_v8i32:498; AVX512:       # %bb.0:499; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm0500; AVX512-NEXT:    vpmovusqd %zmm0, %ymm0501; AVX512-NEXT:    retq502;503; SKX-LABEL: trunc_usat_v8i64_v8i32:504; SKX:       # %bb.0:505; SKX-NEXT:    vmovdqa64 (%rdi), %zmm0506; SKX-NEXT:    vpmovusqd %zmm0, %ymm0507; SKX-NEXT:    retq508  %a0 = load <8 x i64>, ptr %p0509  %1 = icmp ult <8 x i64> %a0, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>510  %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>511  %3 = trunc <8 x i64> %2 to <8 x i32>512  ret <8 x i32> %3513}514 515;516; Unsigned saturation truncation to vXi16517;518 519define <2 x i16> @trunc_usat_v2i64_v2i16(<2 x i64> %a0) {520; SSE2-SSSE3-LABEL: trunc_usat_v2i64_v2i16:521; SSE2-SSSE3:       # %bb.0:522; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]523; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm1524; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]525; SSE2-SSSE3-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2526; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,2,2]527; SSE2-SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1528; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm1529; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm2530; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm2531; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1532; SSE2-SSSE3-NEXT:    por %xmm2, %xmm1533; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]534; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]535; SSE2-SSSE3-NEXT:    retq536;537; SSE41-LABEL: trunc_usat_v2i64_v2i16:538; SSE41:       # %bb.0:539; SSE41-NEXT:    movdqa %xmm0, %xmm1540; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [65535,65535]541; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]542; SSE41-NEXT:    pxor %xmm0, %xmm3543; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]544; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3545; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0546; SSE41-NEXT:    pandn %xmm3, %xmm0547; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm2548; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]549; SSE41-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]550; SSE41-NEXT:    retq551;552; AVX1-LABEL: trunc_usat_v2i64_v2i16:553; AVX1:       # %bb.0:554; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1555; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1556; AVX1-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0557; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]558; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]559; AVX1-NEXT:    retq560;561; AVX2-SLOW-LABEL: trunc_usat_v2i64_v2i16:562; AVX2-SLOW:       # %bb.0:563; AVX2-SLOW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1564; AVX2-SLOW-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1565; AVX2-SLOW-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0566; AVX2-SLOW-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]567; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]568; AVX2-SLOW-NEXT:    retq569;570; AVX2-FAST-LABEL: trunc_usat_v2i64_v2i16:571; AVX2-FAST:       # %bb.0:572; AVX2-FAST-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1573; AVX2-FAST-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1574; AVX2-FAST-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0575; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,10,11,8,9,10,11,12,13,14,15]576; AVX2-FAST-NEXT:    retq577;578; AVX512F-LABEL: trunc_usat_v2i64_v2i16:579; AVX512F:       # %bb.0:580; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0581; AVX512F-NEXT:    vpmovusqw %zmm0, %xmm0582; AVX512F-NEXT:    vzeroupper583; AVX512F-NEXT:    retq584;585; AVX512VL-LABEL: trunc_usat_v2i64_v2i16:586; AVX512VL:       # %bb.0:587; AVX512VL-NEXT:    vpmovusqw %xmm0, %xmm0588; AVX512VL-NEXT:    retq589;590; AVX512BW-LABEL: trunc_usat_v2i64_v2i16:591; AVX512BW:       # %bb.0:592; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0593; AVX512BW-NEXT:    vpmovusqw %zmm0, %xmm0594; AVX512BW-NEXT:    vzeroupper595; AVX512BW-NEXT:    retq596;597; AVX512BWVL-LABEL: trunc_usat_v2i64_v2i16:598; AVX512BWVL:       # %bb.0:599; AVX512BWVL-NEXT:    vpmovusqw %xmm0, %xmm0600; AVX512BWVL-NEXT:    retq601;602; SKX-LABEL: trunc_usat_v2i64_v2i16:603; SKX:       # %bb.0:604; SKX-NEXT:    vpmovusqw %xmm0, %xmm0605; SKX-NEXT:    retq606  %1 = icmp ult <2 x i64> %a0, <i64 65535, i64 65535>607  %2 = select <2 x i1> %1, <2 x i64> %a0, <2 x i64> <i64 65535, i64 65535>608  %3 = trunc <2 x i64> %2 to <2 x i16>609  ret <2 x i16> %3610}611 612define void @trunc_usat_v2i64_v2i16_store(<2 x i64> %a0, ptr %p1) {613; SSE2-SSSE3-LABEL: trunc_usat_v2i64_v2i16_store:614; SSE2-SSSE3:       # %bb.0:615; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]616; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm1617; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]618; SSE2-SSSE3-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2619; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,2,2]620; SSE2-SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1621; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm1622; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm2623; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm2624; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1625; SSE2-SSSE3-NEXT:    por %xmm2, %xmm1626; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]627; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]628; SSE2-SSSE3-NEXT:    movd %xmm0, (%rdi)629; SSE2-SSSE3-NEXT:    retq630;631; SSE41-LABEL: trunc_usat_v2i64_v2i16_store:632; SSE41:       # %bb.0:633; SSE41-NEXT:    movdqa %xmm0, %xmm1634; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [65535,65535]635; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]636; SSE41-NEXT:    pxor %xmm0, %xmm3637; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]638; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3639; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0640; SSE41-NEXT:    pandn %xmm3, %xmm0641; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm2642; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]643; SSE41-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]644; SSE41-NEXT:    movd %xmm0, (%rdi)645; SSE41-NEXT:    retq646;647; AVX1-LABEL: trunc_usat_v2i64_v2i16_store:648; AVX1:       # %bb.0:649; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1650; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1651; AVX1-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0652; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]653; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]654; AVX1-NEXT:    vmovd %xmm0, (%rdi)655; AVX1-NEXT:    retq656;657; AVX2-SLOW-LABEL: trunc_usat_v2i64_v2i16_store:658; AVX2-SLOW:       # %bb.0:659; AVX2-SLOW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1660; AVX2-SLOW-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1661; AVX2-SLOW-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0662; AVX2-SLOW-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]663; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]664; AVX2-SLOW-NEXT:    vmovd %xmm0, (%rdi)665; AVX2-SLOW-NEXT:    retq666;667; AVX2-FAST-LABEL: trunc_usat_v2i64_v2i16_store:668; AVX2-FAST:       # %bb.0:669; AVX2-FAST-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1670; AVX2-FAST-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1671; AVX2-FAST-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0672; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,u,u,u,u,u,u,u,u,u,u,u,u]673; AVX2-FAST-NEXT:    vmovd %xmm0, (%rdi)674; AVX2-FAST-NEXT:    retq675;676; AVX512F-LABEL: trunc_usat_v2i64_v2i16_store:677; AVX512F:       # %bb.0:678; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0679; AVX512F-NEXT:    vpmovusqw %zmm0, %xmm0680; AVX512F-NEXT:    vmovd %xmm0, (%rdi)681; AVX512F-NEXT:    vzeroupper682; AVX512F-NEXT:    retq683;684; AVX512VL-LABEL: trunc_usat_v2i64_v2i16_store:685; AVX512VL:       # %bb.0:686; AVX512VL-NEXT:    vpmovusqw %xmm0, (%rdi)687; AVX512VL-NEXT:    retq688;689; AVX512BW-LABEL: trunc_usat_v2i64_v2i16_store:690; AVX512BW:       # %bb.0:691; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0692; AVX512BW-NEXT:    vpmovusqw %zmm0, %xmm0693; AVX512BW-NEXT:    vmovd %xmm0, (%rdi)694; AVX512BW-NEXT:    vzeroupper695; AVX512BW-NEXT:    retq696;697; AVX512BWVL-LABEL: trunc_usat_v2i64_v2i16_store:698; AVX512BWVL:       # %bb.0:699; AVX512BWVL-NEXT:    vpmovusqw %xmm0, (%rdi)700; AVX512BWVL-NEXT:    retq701;702; SKX-LABEL: trunc_usat_v2i64_v2i16_store:703; SKX:       # %bb.0:704; SKX-NEXT:    vpmovusqw %xmm0, (%rdi)705; SKX-NEXT:    retq706  %1 = icmp ult <2 x i64> %a0, <i64 65535, i64 65535>707  %2 = select <2 x i1> %1, <2 x i64> %a0, <2 x i64> <i64 65535, i64 65535>708  %3 = trunc <2 x i64> %2 to <2 x i16>709  store <2 x i16> %3, ptr %p1710  ret void711}712 713define <4 x i16> @trunc_usat_v4i64_v4i16(<4 x i64> %a0) {714; SSE2-SSSE3-LABEL: trunc_usat_v4i64_v4i16:715; SSE2-SSSE3:       # %bb.0:716; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]717; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm3718; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm3719; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]720; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [2147549183,2147549183,2147549183,2147549183]721; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm6722; SSE2-SSSE3-NEXT:    pcmpgtd %xmm4, %xmm6723; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]724; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm3725; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm3726; SSE2-SSSE3-NEXT:    pcmpeqd %xmm4, %xmm4727; SSE2-SSSE3-NEXT:    pand %xmm3, %xmm1728; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm3729; SSE2-SSSE3-NEXT:    por %xmm1, %xmm3730; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm1731; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm1732; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]733; SSE2-SSSE3-NEXT:    pcmpgtd %xmm6, %xmm5734; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]735; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm1736; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm1737; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm4738; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm0739; SSE2-SSSE3-NEXT:    por %xmm4, %xmm0740; SSE2-SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]741; SSE2-SSSE3-NEXT:    pslld $16, %xmm0742; SSE2-SSSE3-NEXT:    psrad $16, %xmm0743; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm1744; SSE2-SSSE3-NEXT:    packssdw %xmm1, %xmm0745; SSE2-SSSE3-NEXT:    retq746;747; SSE41-LABEL: trunc_usat_v4i64_v4i16:748; SSE41:       # %bb.0:749; SSE41-NEXT:    movdqa %xmm0, %xmm3750; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [65535,65535]751; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]752; SSE41-NEXT:    movdqa %xmm1, %xmm6753; SSE41-NEXT:    pxor %xmm5, %xmm6754; SSE41-NEXT:    movdqa {{.*#+}} xmm7 = [9223372039002324991,9223372039002324991]755; SSE41-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]756; SSE41-NEXT:    pcmpeqd %xmm7, %xmm6757; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [2147549183,2147549183,2147549183,2147549183]758; SSE41-NEXT:    movdqa %xmm4, %xmm0759; SSE41-NEXT:    pcmpgtd %xmm8, %xmm0760; SSE41-NEXT:    pand %xmm6, %xmm0761; SSE41-NEXT:    movapd %xmm2, %xmm6762; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm6763; SSE41-NEXT:    pxor %xmm3, %xmm5764; SSE41-NEXT:    pcmpeqd %xmm5, %xmm7765; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]766; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4767; SSE41-NEXT:    pand %xmm7, %xmm4768; SSE41-NEXT:    movdqa %xmm4, %xmm0769; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm2770; SSE41-NEXT:    packusdw %xmm6, %xmm2771; SSE41-NEXT:    packusdw %xmm2, %xmm2772; SSE41-NEXT:    movdqa %xmm2, %xmm0773; SSE41-NEXT:    retq774;775; AVX1-LABEL: trunc_usat_v4i64_v4i16:776; AVX1:       # %bb.0:777; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]778; AVX1-NEXT:    # xmm1 = mem[0,0]779; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm2780; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854841343,9223372036854841343]781; AVX1-NEXT:    # xmm3 = mem[0,0]782; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2783; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4784; AVX1-NEXT:    vpxor %xmm1, %xmm4, %xmm1785; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm1786; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [65535,65535]787; AVX1-NEXT:    # xmm3 = mem[0,0]788; AVX1-NEXT:    vblendvpd %xmm1, %xmm4, %xmm3, %xmm1789; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm3, %xmm0790; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0791; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0792; AVX1-NEXT:    vzeroupper793; AVX1-NEXT:    retq794;795; AVX2-LABEL: trunc_usat_v4i64_v4i16:796; AVX2:       # %bb.0:797; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [65535,65535,65535,65535]798; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]799; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2800; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854841342,9223372036854841342,9223372036854841342,9223372036854841342]801; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2802; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0803; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1804; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0805; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0806; AVX2-NEXT:    vzeroupper807; AVX2-NEXT:    retq808;809; AVX512F-LABEL: trunc_usat_v4i64_v4i16:810; AVX512F:       # %bb.0:811; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0812; AVX512F-NEXT:    vpmovusqw %zmm0, %xmm0813; AVX512F-NEXT:    vzeroupper814; AVX512F-NEXT:    retq815;816; AVX512VL-LABEL: trunc_usat_v4i64_v4i16:817; AVX512VL:       # %bb.0:818; AVX512VL-NEXT:    vpmovusqw %ymm0, %xmm0819; AVX512VL-NEXT:    vzeroupper820; AVX512VL-NEXT:    retq821;822; AVX512BW-LABEL: trunc_usat_v4i64_v4i16:823; AVX512BW:       # %bb.0:824; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0825; AVX512BW-NEXT:    vpmovusqw %zmm0, %xmm0826; AVX512BW-NEXT:    vzeroupper827; AVX512BW-NEXT:    retq828;829; AVX512BWVL-LABEL: trunc_usat_v4i64_v4i16:830; AVX512BWVL:       # %bb.0:831; AVX512BWVL-NEXT:    vpmovusqw %ymm0, %xmm0832; AVX512BWVL-NEXT:    vzeroupper833; AVX512BWVL-NEXT:    retq834;835; SKX-LABEL: trunc_usat_v4i64_v4i16:836; SKX:       # %bb.0:837; SKX-NEXT:    vpmovusqw %ymm0, %xmm0838; SKX-NEXT:    vzeroupper839; SKX-NEXT:    retq840  %1 = icmp ult <4 x i64> %a0, <i64 65535, i64 65535, i64 65535, i64 65535>841  %2 = select <4 x i1> %1, <4 x i64> %a0, <4 x i64> <i64 65535, i64 65535, i64 65535, i64 65535>842  %3 = trunc <4 x i64> %2 to <4 x i16>843  ret <4 x i16> %3844}845 846define void @trunc_usat_v4i64_v4i16_store(<4 x i64> %a0, ptr%p1) {847; SSE2-SSSE3-LABEL: trunc_usat_v4i64_v4i16_store:848; SSE2-SSSE3:       # %bb.0:849; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]850; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm3851; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm3852; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]853; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [2147549183,2147549183,2147549183,2147549183]854; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm6855; SSE2-SSSE3-NEXT:    pcmpgtd %xmm4, %xmm6856; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]857; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm3858; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm3859; SSE2-SSSE3-NEXT:    pcmpeqd %xmm4, %xmm4860; SSE2-SSSE3-NEXT:    pand %xmm3, %xmm1861; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm3862; SSE2-SSSE3-NEXT:    por %xmm1, %xmm3863; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm1864; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm1865; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]866; SSE2-SSSE3-NEXT:    pcmpgtd %xmm6, %xmm5867; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]868; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm1869; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm1870; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm4871; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1872; SSE2-SSSE3-NEXT:    por %xmm4, %xmm1873; SSE2-SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]874; SSE2-SSSE3-NEXT:    pslld $16, %xmm1875; SSE2-SSSE3-NEXT:    psrad $16, %xmm1876; SSE2-SSSE3-NEXT:    packssdw %xmm1, %xmm1877; SSE2-SSSE3-NEXT:    movq %xmm1, (%rdi)878; SSE2-SSSE3-NEXT:    retq879;880; SSE41-LABEL: trunc_usat_v4i64_v4i16_store:881; SSE41:       # %bb.0:882; SSE41-NEXT:    movdqa %xmm0, %xmm2883; SSE41-NEXT:    movapd {{.*#+}} xmm4 = [65535,65535]884; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]885; SSE41-NEXT:    movdqa %xmm1, %xmm6886; SSE41-NEXT:    pxor %xmm5, %xmm6887; SSE41-NEXT:    movdqa {{.*#+}} xmm7 = [9223372039002324991,9223372039002324991]888; SSE41-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]889; SSE41-NEXT:    pcmpeqd %xmm7, %xmm6890; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [2147549183,2147549183,2147549183,2147549183]891; SSE41-NEXT:    movdqa %xmm3, %xmm0892; SSE41-NEXT:    pcmpgtd %xmm8, %xmm0893; SSE41-NEXT:    pand %xmm6, %xmm0894; SSE41-NEXT:    movapd %xmm4, %xmm6895; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm6896; SSE41-NEXT:    pxor %xmm2, %xmm5897; SSE41-NEXT:    pcmpeqd %xmm5, %xmm7898; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]899; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3900; SSE41-NEXT:    pand %xmm7, %xmm3901; SSE41-NEXT:    movdqa %xmm3, %xmm0902; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm4903; SSE41-NEXT:    packusdw %xmm6, %xmm4904; SSE41-NEXT:    packusdw %xmm4, %xmm4905; SSE41-NEXT:    movq %xmm4, (%rdi)906; SSE41-NEXT:    retq907;908; AVX1-LABEL: trunc_usat_v4i64_v4i16_store:909; AVX1:       # %bb.0:910; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]911; AVX1-NEXT:    # xmm1 = mem[0,0]912; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm2913; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854841343,9223372036854841343]914; AVX1-NEXT:    # xmm3 = mem[0,0]915; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2916; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4917; AVX1-NEXT:    vpxor %xmm1, %xmm4, %xmm1918; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm1919; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [65535,65535]920; AVX1-NEXT:    # xmm3 = mem[0,0]921; AVX1-NEXT:    vblendvpd %xmm1, %xmm4, %xmm3, %xmm1922; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm3, %xmm0923; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0924; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0925; AVX1-NEXT:    vmovq %xmm0, (%rdi)926; AVX1-NEXT:    vzeroupper927; AVX1-NEXT:    retq928;929; AVX2-LABEL: trunc_usat_v4i64_v4i16_store:930; AVX2:       # %bb.0:931; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [65535,65535,65535,65535]932; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]933; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2934; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854841342,9223372036854841342,9223372036854841342,9223372036854841342]935; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2936; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0937; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1938; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0939; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0940; AVX2-NEXT:    vmovq %xmm0, (%rdi)941; AVX2-NEXT:    vzeroupper942; AVX2-NEXT:    retq943;944; AVX512F-LABEL: trunc_usat_v4i64_v4i16_store:945; AVX512F:       # %bb.0:946; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0947; AVX512F-NEXT:    vpmovusqw %zmm0, %xmm0948; AVX512F-NEXT:    vmovq %xmm0, (%rdi)949; AVX512F-NEXT:    vzeroupper950; AVX512F-NEXT:    retq951;952; AVX512VL-LABEL: trunc_usat_v4i64_v4i16_store:953; AVX512VL:       # %bb.0:954; AVX512VL-NEXT:    vpmovusqw %ymm0, (%rdi)955; AVX512VL-NEXT:    vzeroupper956; AVX512VL-NEXT:    retq957;958; AVX512BW-LABEL: trunc_usat_v4i64_v4i16_store:959; AVX512BW:       # %bb.0:960; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0961; AVX512BW-NEXT:    vpmovusqw %zmm0, %xmm0962; AVX512BW-NEXT:    vmovq %xmm0, (%rdi)963; AVX512BW-NEXT:    vzeroupper964; AVX512BW-NEXT:    retq965;966; AVX512BWVL-LABEL: trunc_usat_v4i64_v4i16_store:967; AVX512BWVL:       # %bb.0:968; AVX512BWVL-NEXT:    vpmovusqw %ymm0, (%rdi)969; AVX512BWVL-NEXT:    vzeroupper970; AVX512BWVL-NEXT:    retq971;972; SKX-LABEL: trunc_usat_v4i64_v4i16_store:973; SKX:       # %bb.0:974; SKX-NEXT:    vpmovusqw %ymm0, (%rdi)975; SKX-NEXT:    vzeroupper976; SKX-NEXT:    retq977  %1 = icmp ult <4 x i64> %a0, <i64 65535, i64 65535, i64 65535, i64 65535>978  %2 = select <4 x i1> %1, <4 x i64> %a0, <4 x i64> <i64 65535, i64 65535, i64 65535, i64 65535>979  %3 = trunc <4 x i64> %2 to <4 x i16>980  store <4 x i16> %3, ptr%p1981  ret void982}983 984define <8 x i16> @trunc_usat_v8i64_v8i16(ptr %p0) {985; SSE2-SSSE3-LABEL: trunc_usat_v8i64_v8i16:986; SSE2-SSSE3:       # %bb.0:987; SSE2-SSSE3-NEXT:    movdqa (%rdi), %xmm6988; SSE2-SSSE3-NEXT:    movdqa 16(%rdi), %xmm0989; SSE2-SSSE3-NEXT:    movdqa 32(%rdi), %xmm1990; SSE2-SSSE3-NEXT:    movdqa 48(%rdi), %xmm5991; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]992; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm4993; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm4994; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]995; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [2147549183,2147549183,2147549183,2147549183]996; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm8997; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm8998; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[1,1,3,3]999; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm71000; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm71001; SSE2-SSSE3-NEXT:    pcmpeqd %xmm4, %xmm41002; SSE2-SSSE3-NEXT:    pand %xmm7, %xmm01003; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm71004; SSE2-SSSE3-NEXT:    por %xmm0, %xmm71005; SSE2-SSSE3-NEXT:    movdqa %xmm6, %xmm01006; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm01007; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[0,0,2,2]1008; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm91009; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm91010; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]1011; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm01012; SSE2-SSSE3-NEXT:    pand %xmm9, %xmm01013; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm61014; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm01015; SSE2-SSSE3-NEXT:    por %xmm6, %xmm01016; SSE2-SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm7[0,2]1017; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm61018; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm61019; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]1020; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm81021; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm81022; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]1023; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm61024; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm61025; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm51026; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm61027; SSE2-SSSE3-NEXT:    por %xmm5, %xmm61028; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm51029; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm51030; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]1031; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm31032; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]1033; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm51034; SSE2-SSSE3-NEXT:    pand %xmm3, %xmm51035; SSE2-SSSE3-NEXT:    pxor %xmm5, %xmm41036; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm51037; SSE2-SSSE3-NEXT:    por %xmm4, %xmm51038; SSE2-SSSE3-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm6[0,2]1039; SSE2-SSSE3-NEXT:    pslld $16, %xmm51040; SSE2-SSSE3-NEXT:    psrad $16, %xmm51041; SSE2-SSSE3-NEXT:    pslld $16, %xmm01042; SSE2-SSSE3-NEXT:    psrad $16, %xmm01043; SSE2-SSSE3-NEXT:    packssdw %xmm5, %xmm01044; SSE2-SSSE3-NEXT:    retq1045;1046; SSE41-LABEL: trunc_usat_v8i64_v8i16:1047; SSE41:       # %bb.0:1048; SSE41-NEXT:    movdqa (%rdi), %xmm81049; SSE41-NEXT:    movdqa 16(%rdi), %xmm21050; SSE41-NEXT:    movdqa 32(%rdi), %xmm41051; SSE41-NEXT:    movdqa 48(%rdi), %xmm71052; SSE41-NEXT:    movapd {{.*#+}} xmm3 = [65535,65535]1053; SSE41-NEXT:    movdqa {{.*#+}} xmm6 = [9223372039002259456,9223372039002259456]1054; SSE41-NEXT:    movdqa %xmm2, %xmm91055; SSE41-NEXT:    pxor %xmm6, %xmm91056; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002324991,9223372039002324991]1057; SSE41-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]1058; SSE41-NEXT:    pcmpeqd %xmm5, %xmm91059; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [2147549183,2147549183,2147549183,2147549183]1060; SSE41-NEXT:    movdqa %xmm1, %xmm01061; SSE41-NEXT:    pcmpgtd %xmm10, %xmm01062; SSE41-NEXT:    pand %xmm9, %xmm01063; SSE41-NEXT:    movapd %xmm3, %xmm91064; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm91065; SSE41-NEXT:    movdqa %xmm8, %xmm21066; SSE41-NEXT:    pxor %xmm6, %xmm21067; SSE41-NEXT:    pshufd {{.*#+}} xmm10 = xmm2[0,0,2,2]1068; SSE41-NEXT:    pcmpeqd %xmm5, %xmm21069; SSE41-NEXT:    movdqa %xmm1, %xmm01070; SSE41-NEXT:    pcmpgtd %xmm10, %xmm01071; SSE41-NEXT:    pand %xmm2, %xmm01072; SSE41-NEXT:    movapd %xmm3, %xmm21073; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm21074; SSE41-NEXT:    packusdw %xmm9, %xmm21075; SSE41-NEXT:    movdqa %xmm7, %xmm81076; SSE41-NEXT:    pxor %xmm6, %xmm81077; SSE41-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]1078; SSE41-NEXT:    pcmpeqd %xmm5, %xmm81079; SSE41-NEXT:    movdqa %xmm1, %xmm01080; SSE41-NEXT:    pcmpgtd %xmm9, %xmm01081; SSE41-NEXT:    pand %xmm8, %xmm01082; SSE41-NEXT:    movapd %xmm3, %xmm81083; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm81084; SSE41-NEXT:    pxor %xmm4, %xmm61085; SSE41-NEXT:    pcmpeqd %xmm6, %xmm51086; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]1087; SSE41-NEXT:    pcmpgtd %xmm0, %xmm11088; SSE41-NEXT:    pand %xmm5, %xmm11089; SSE41-NEXT:    movdqa %xmm1, %xmm01090; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm31091; SSE41-NEXT:    packusdw %xmm8, %xmm31092; SSE41-NEXT:    packusdw %xmm3, %xmm21093; SSE41-NEXT:    movdqa %xmm2, %xmm01094; SSE41-NEXT:    retq1095;1096; AVX1-LABEL: trunc_usat_v8i64_v8i16:1097; AVX1:       # %bb.0:1098; AVX1-NEXT:    vmovdqa (%rdi), %xmm01099; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm11100; AVX1-NEXT:    vmovdqa 32(%rdi), %xmm21101; AVX1-NEXT:    vmovdqa 48(%rdi), %xmm31102; AVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]1103; AVX1-NEXT:    # xmm4 = mem[0,0]1104; AVX1-NEXT:    vpxor %xmm4, %xmm0, %xmm51105; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [9223372036854841343,9223372036854841343]1106; AVX1-NEXT:    # xmm6 = mem[0,0]1107; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm51108; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm71109; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm71110; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm81111; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm6, %xmm81112; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm41113; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm41114; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [65535,65535]1115; AVX1-NEXT:    # xmm6 = mem[0,0]1116; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm31117; AVX1-NEXT:    vblendvpd %xmm8, %xmm2, %xmm6, %xmm21118; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm21119; AVX1-NEXT:    vblendvpd %xmm7, %xmm1, %xmm6, %xmm11120; AVX1-NEXT:    vblendvpd %xmm5, %xmm0, %xmm6, %xmm01121; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm01122; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm01123; AVX1-NEXT:    retq1124;1125; AVX2-LABEL: trunc_usat_v8i64_v8i16:1126; AVX2:       # %bb.0:1127; AVX2-NEXT:    vmovdqa (%rdi), %ymm01128; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm11129; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [65535,65535,65535,65535]1130; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1131; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm41132; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [9223372036854841343,9223372036854841343,9223372036854841343,9223372036854841343]1133; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm5, %ymm41134; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm11135; AVX2-NEXT:    vpxor %ymm3, %ymm0, %ymm31136; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm5, %ymm31137; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm01138; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm01139; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11140; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm01141; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]1142; AVX2-NEXT:    vzeroupper1143; AVX2-NEXT:    retq1144;1145; AVX512-LABEL: trunc_usat_v8i64_v8i16:1146; AVX512:       # %bb.0:1147; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm01148; AVX512-NEXT:    vpmovusqw %zmm0, %xmm01149; AVX512-NEXT:    vzeroupper1150; AVX512-NEXT:    retq1151;1152; SKX-LABEL: trunc_usat_v8i64_v8i16:1153; SKX:       # %bb.0:1154; SKX-NEXT:    vmovdqa64 (%rdi), %zmm01155; SKX-NEXT:    vpmovusqw %zmm0, %xmm01156; SKX-NEXT:    vzeroupper1157; SKX-NEXT:    retq1158  %a0 = load <8 x i64>, ptr %p01159  %1 = icmp ult <8 x i64> %a0, <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>1160  %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>1161  %3 = trunc <8 x i64> %2 to <8 x i16>1162  ret <8 x i16> %31163}1164 1165define <4 x i16> @trunc_usat_v4i32_v4i16(<4 x i32> %a0) {1166; SSE2-LABEL: trunc_usat_v4i32_v4i16:1167; SSE2:       # %bb.0:1168; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]1169; SSE2-NEXT:    pxor %xmm0, %xmm11170; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11171; SSE2-NEXT:    movdqa %xmm1, %xmm21172; SSE2-NEXT:    pandn %xmm0, %xmm21173; SSE2-NEXT:    psrld $16, %xmm11174; SSE2-NEXT:    por %xmm2, %xmm11175; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]1176; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]1177; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1178; SSE2-NEXT:    retq1179;1180; SSSE3-LABEL: trunc_usat_v4i32_v4i16:1181; SSSE3:       # %bb.0:1182; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]1183; SSSE3-NEXT:    pxor %xmm0, %xmm11184; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11185; SSSE3-NEXT:    movdqa %xmm1, %xmm21186; SSSE3-NEXT:    pandn %xmm0, %xmm21187; SSSE3-NEXT:    psrld $16, %xmm11188; SSSE3-NEXT:    por %xmm2, %xmm11189; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]1190; SSSE3-NEXT:    movdqa %xmm1, %xmm01191; SSSE3-NEXT:    retq1192;1193; SSE41-LABEL: trunc_usat_v4i32_v4i16:1194; SSE41:       # %bb.0:1195; SSE41-NEXT:    pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01196; SSE41-NEXT:    packusdw %xmm0, %xmm01197; SSE41-NEXT:    retq1198;1199; AVX1-LABEL: trunc_usat_v4i32_v4i16:1200; AVX1:       # %bb.0:1201; AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01202; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm01203; AVX1-NEXT:    retq1204;1205; AVX2-LABEL: trunc_usat_v4i32_v4i16:1206; AVX2:       # %bb.0:1207; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [65535,65535,65535,65535]1208; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01209; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm01210; AVX2-NEXT:    retq1211;1212; AVX512F-LABEL: trunc_usat_v4i32_v4i16:1213; AVX512F:       # %bb.0:1214; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01215; AVX512F-NEXT:    vpmovusdw %zmm0, %ymm01216; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01217; AVX512F-NEXT:    vzeroupper1218; AVX512F-NEXT:    retq1219;1220; AVX512VL-LABEL: trunc_usat_v4i32_v4i16:1221; AVX512VL:       # %bb.0:1222; AVX512VL-NEXT:    vpmovusdw %xmm0, %xmm01223; AVX512VL-NEXT:    retq1224;1225; AVX512BW-LABEL: trunc_usat_v4i32_v4i16:1226; AVX512BW:       # %bb.0:1227; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01228; AVX512BW-NEXT:    vpmovusdw %zmm0, %ymm01229; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01230; AVX512BW-NEXT:    vzeroupper1231; AVX512BW-NEXT:    retq1232;1233; AVX512BWVL-LABEL: trunc_usat_v4i32_v4i16:1234; AVX512BWVL:       # %bb.0:1235; AVX512BWVL-NEXT:    vpmovusdw %xmm0, %xmm01236; AVX512BWVL-NEXT:    retq1237;1238; SKX-LABEL: trunc_usat_v4i32_v4i16:1239; SKX:       # %bb.0:1240; SKX-NEXT:    vpmovusdw %xmm0, %xmm01241; SKX-NEXT:    retq1242  %1 = icmp ult <4 x i32> %a0, <i32 65535, i32 65535, i32 65535, i32 65535>1243  %2 = select <4 x i1> %1, <4 x i32> %a0, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>1244  %3 = trunc <4 x i32> %2 to <4 x i16>1245  ret <4 x i16> %31246}1247 1248define void @trunc_usat_v4i32_v4i16_store(<4 x i32> %a0, ptr%p1) {1249; SSE2-LABEL: trunc_usat_v4i32_v4i16_store:1250; SSE2:       # %bb.0:1251; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]1252; SSE2-NEXT:    pxor %xmm0, %xmm11253; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11254; SSE2-NEXT:    movdqa %xmm1, %xmm21255; SSE2-NEXT:    pandn %xmm0, %xmm21256; SSE2-NEXT:    psrld $16, %xmm11257; SSE2-NEXT:    por %xmm2, %xmm11258; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]1259; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]1260; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1261; SSE2-NEXT:    movq %xmm0, (%rdi)1262; SSE2-NEXT:    retq1263;1264; SSSE3-LABEL: trunc_usat_v4i32_v4i16_store:1265; SSSE3:       # %bb.0:1266; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]1267; SSSE3-NEXT:    pxor %xmm0, %xmm11268; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11269; SSSE3-NEXT:    movdqa %xmm1, %xmm21270; SSSE3-NEXT:    pandn %xmm0, %xmm21271; SSSE3-NEXT:    psrld $16, %xmm11272; SSSE3-NEXT:    por %xmm2, %xmm11273; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u]1274; SSSE3-NEXT:    movq %xmm1, (%rdi)1275; SSSE3-NEXT:    retq1276;1277; SSE41-LABEL: trunc_usat_v4i32_v4i16_store:1278; SSE41:       # %bb.0:1279; SSE41-NEXT:    pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01280; SSE41-NEXT:    packusdw %xmm0, %xmm01281; SSE41-NEXT:    movq %xmm0, (%rdi)1282; SSE41-NEXT:    retq1283;1284; AVX1-LABEL: trunc_usat_v4i32_v4i16_store:1285; AVX1:       # %bb.0:1286; AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01287; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm01288; AVX1-NEXT:    vmovq %xmm0, (%rdi)1289; AVX1-NEXT:    retq1290;1291; AVX2-LABEL: trunc_usat_v4i32_v4i16_store:1292; AVX2:       # %bb.0:1293; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [65535,65535,65535,65535]1294; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01295; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm01296; AVX2-NEXT:    vmovq %xmm0, (%rdi)1297; AVX2-NEXT:    retq1298;1299; AVX512F-LABEL: trunc_usat_v4i32_v4i16_store:1300; AVX512F:       # %bb.0:1301; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01302; AVX512F-NEXT:    vpmovusdw %zmm0, %ymm01303; AVX512F-NEXT:    vmovq %xmm0, (%rdi)1304; AVX512F-NEXT:    vzeroupper1305; AVX512F-NEXT:    retq1306;1307; AVX512VL-LABEL: trunc_usat_v4i32_v4i16_store:1308; AVX512VL:       # %bb.0:1309; AVX512VL-NEXT:    vpmovusdw %xmm0, (%rdi)1310; AVX512VL-NEXT:    retq1311;1312; AVX512BW-LABEL: trunc_usat_v4i32_v4i16_store:1313; AVX512BW:       # %bb.0:1314; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01315; AVX512BW-NEXT:    vpmovusdw %zmm0, %ymm01316; AVX512BW-NEXT:    vmovq %xmm0, (%rdi)1317; AVX512BW-NEXT:    vzeroupper1318; AVX512BW-NEXT:    retq1319;1320; AVX512BWVL-LABEL: trunc_usat_v4i32_v4i16_store:1321; AVX512BWVL:       # %bb.0:1322; AVX512BWVL-NEXT:    vpmovusdw %xmm0, (%rdi)1323; AVX512BWVL-NEXT:    retq1324;1325; SKX-LABEL: trunc_usat_v4i32_v4i16_store:1326; SKX:       # %bb.0:1327; SKX-NEXT:    vpmovusdw %xmm0, (%rdi)1328; SKX-NEXT:    retq1329  %1 = icmp ult <4 x i32> %a0, <i32 65535, i32 65535, i32 65535, i32 65535>1330  %2 = select <4 x i1> %1, <4 x i32> %a0, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>1331  %3 = trunc <4 x i32> %2 to <4 x i16>1332  store <4 x i16> %3, ptr%p11333  ret void1334}1335 1336define <8 x i16> @trunc_usat_v8i32_v8i16(<8 x i32> %a0) {1337; SSE2-LABEL: trunc_usat_v8i32_v8i16:1338; SSE2:       # %bb.0:1339; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]1340; SSE2-NEXT:    movdqa %xmm0, %xmm31341; SSE2-NEXT:    pxor %xmm2, %xmm31342; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147549183,2147549183,2147549183,2147549183]1343; SSE2-NEXT:    movdqa %xmm4, %xmm51344; SSE2-NEXT:    pcmpgtd %xmm3, %xmm51345; SSE2-NEXT:    pcmpeqd %xmm3, %xmm31346; SSE2-NEXT:    pand %xmm5, %xmm01347; SSE2-NEXT:    pxor %xmm3, %xmm51348; SSE2-NEXT:    por %xmm5, %xmm01349; SSE2-NEXT:    pxor %xmm1, %xmm21350; SSE2-NEXT:    pcmpgtd %xmm2, %xmm41351; SSE2-NEXT:    pxor %xmm4, %xmm31352; SSE2-NEXT:    pand %xmm1, %xmm41353; SSE2-NEXT:    por %xmm3, %xmm41354; SSE2-NEXT:    pslld $16, %xmm41355; SSE2-NEXT:    psrad $16, %xmm41356; SSE2-NEXT:    pslld $16, %xmm01357; SSE2-NEXT:    psrad $16, %xmm01358; SSE2-NEXT:    packssdw %xmm4, %xmm01359; SSE2-NEXT:    retq1360;1361; SSSE3-LABEL: trunc_usat_v8i32_v8i16:1362; SSSE3:       # %bb.0:1363; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]1364; SSSE3-NEXT:    movdqa %xmm0, %xmm31365; SSSE3-NEXT:    pxor %xmm2, %xmm31366; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [2147549183,2147549183,2147549183,2147549183]1367; SSSE3-NEXT:    movdqa %xmm4, %xmm51368; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm51369; SSSE3-NEXT:    pcmpeqd %xmm3, %xmm31370; SSSE3-NEXT:    pand %xmm5, %xmm01371; SSSE3-NEXT:    pxor %xmm3, %xmm51372; SSSE3-NEXT:    por %xmm5, %xmm01373; SSSE3-NEXT:    pxor %xmm1, %xmm21374; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm41375; SSSE3-NEXT:    pxor %xmm4, %xmm31376; SSSE3-NEXT:    pand %xmm1, %xmm41377; SSSE3-NEXT:    por %xmm3, %xmm41378; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]1379; SSSE3-NEXT:    pshufb %xmm1, %xmm41380; SSSE3-NEXT:    pshufb %xmm1, %xmm01381; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]1382; SSSE3-NEXT:    retq1383;1384; SSE41-LABEL: trunc_usat_v8i32_v8i16:1385; SSE41:       # %bb.0:1386; SSE41-NEXT:    pmovsxbw {{.*#+}} xmm2 = [65535,0,65535,0,65535,0,65535,0]1387; SSE41-NEXT:    pminud %xmm2, %xmm11388; SSE41-NEXT:    pminud %xmm2, %xmm01389; SSE41-NEXT:    packusdw %xmm1, %xmm01390; SSE41-NEXT:    retq1391;1392; AVX1-LABEL: trunc_usat_v8i32_v8i16:1393; AVX1:       # %bb.0:1394; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11395; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [65535,65535,65535,65535]1396; AVX1-NEXT:    vpminud %xmm2, %xmm1, %xmm11397; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm01398; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm01399; AVX1-NEXT:    vzeroupper1400; AVX1-NEXT:    retq1401;1402; AVX2-LABEL: trunc_usat_v8i32_v8i16:1403; AVX2:       # %bb.0:1404; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [65535,65535,65535,65535,65535,65535,65535,65535]1405; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm01406; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11407; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm01408; AVX2-NEXT:    vzeroupper1409; AVX2-NEXT:    retq1410;1411; AVX512F-LABEL: trunc_usat_v8i32_v8i16:1412; AVX512F:       # %bb.0:1413; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01414; AVX512F-NEXT:    vpmovusdw %zmm0, %ymm01415; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01416; AVX512F-NEXT:    vzeroupper1417; AVX512F-NEXT:    retq1418;1419; AVX512VL-LABEL: trunc_usat_v8i32_v8i16:1420; AVX512VL:       # %bb.0:1421; AVX512VL-NEXT:    vpmovusdw %ymm0, %xmm01422; AVX512VL-NEXT:    vzeroupper1423; AVX512VL-NEXT:    retq1424;1425; AVX512BW-LABEL: trunc_usat_v8i32_v8i16:1426; AVX512BW:       # %bb.0:1427; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01428; AVX512BW-NEXT:    vpmovusdw %zmm0, %ymm01429; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01430; AVX512BW-NEXT:    vzeroupper1431; AVX512BW-NEXT:    retq1432;1433; AVX512BWVL-LABEL: trunc_usat_v8i32_v8i16:1434; AVX512BWVL:       # %bb.0:1435; AVX512BWVL-NEXT:    vpmovusdw %ymm0, %xmm01436; AVX512BWVL-NEXT:    vzeroupper1437; AVX512BWVL-NEXT:    retq1438;1439; SKX-LABEL: trunc_usat_v8i32_v8i16:1440; SKX:       # %bb.0:1441; SKX-NEXT:    vpmovusdw %ymm0, %xmm01442; SKX-NEXT:    vzeroupper1443; SKX-NEXT:    retq1444  %1 = icmp ult <8 x i32> %a0, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>1445  %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>1446  %3 = trunc <8 x i32> %2 to <8 x i16>1447  ret <8 x i16> %31448}1449 1450define <16 x i16> @trunc_usat_v16i32_v16i16(ptr %p0) {1451; SSE2-LABEL: trunc_usat_v16i32_v16i16:1452; SSE2:       # %bb.0:1453; SSE2-NEXT:    movdqa (%rdi), %xmm51454; SSE2-NEXT:    movdqa 16(%rdi), %xmm41455; SSE2-NEXT:    movdqa 32(%rdi), %xmm01456; SSE2-NEXT:    movdqa 48(%rdi), %xmm81457; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]1458; SSE2-NEXT:    movdqa %xmm0, %xmm31459; SSE2-NEXT:    pxor %xmm6, %xmm31460; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147549183,2147549183,2147549183,2147549183]1461; SSE2-NEXT:    movdqa %xmm2, %xmm11462; SSE2-NEXT:    pcmpgtd %xmm3, %xmm11463; SSE2-NEXT:    pcmpeqd %xmm7, %xmm71464; SSE2-NEXT:    pand %xmm1, %xmm01465; SSE2-NEXT:    pxor %xmm7, %xmm11466; SSE2-NEXT:    por %xmm0, %xmm11467; SSE2-NEXT:    movdqa %xmm8, %xmm01468; SSE2-NEXT:    pxor %xmm6, %xmm01469; SSE2-NEXT:    movdqa %xmm2, %xmm31470; SSE2-NEXT:    pcmpgtd %xmm0, %xmm31471; SSE2-NEXT:    pand %xmm3, %xmm81472; SSE2-NEXT:    pxor %xmm7, %xmm31473; SSE2-NEXT:    por %xmm8, %xmm31474; SSE2-NEXT:    movdqa %xmm5, %xmm81475; SSE2-NEXT:    pxor %xmm6, %xmm81476; SSE2-NEXT:    movdqa %xmm2, %xmm01477; SSE2-NEXT:    pcmpgtd %xmm8, %xmm01478; SSE2-NEXT:    pand %xmm0, %xmm51479; SSE2-NEXT:    pxor %xmm7, %xmm01480; SSE2-NEXT:    por %xmm5, %xmm01481; SSE2-NEXT:    pxor %xmm4, %xmm61482; SSE2-NEXT:    pcmpgtd %xmm6, %xmm21483; SSE2-NEXT:    pxor %xmm2, %xmm71484; SSE2-NEXT:    pand %xmm4, %xmm21485; SSE2-NEXT:    por %xmm7, %xmm21486; SSE2-NEXT:    pslld $16, %xmm21487; SSE2-NEXT:    psrad $16, %xmm21488; SSE2-NEXT:    pslld $16, %xmm01489; SSE2-NEXT:    psrad $16, %xmm01490; SSE2-NEXT:    packssdw %xmm2, %xmm01491; SSE2-NEXT:    pslld $16, %xmm31492; SSE2-NEXT:    psrad $16, %xmm31493; SSE2-NEXT:    pslld $16, %xmm11494; SSE2-NEXT:    psrad $16, %xmm11495; SSE2-NEXT:    packssdw %xmm3, %xmm11496; SSE2-NEXT:    retq1497;1498; SSSE3-LABEL: trunc_usat_v16i32_v16i16:1499; SSSE3:       # %bb.0:1500; SSSE3-NEXT:    movdqa (%rdi), %xmm51501; SSSE3-NEXT:    movdqa 16(%rdi), %xmm31502; SSSE3-NEXT:    movdqa 32(%rdi), %xmm01503; SSSE3-NEXT:    movdqa 48(%rdi), %xmm81504; SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]1505; SSSE3-NEXT:    movdqa %xmm0, %xmm41506; SSSE3-NEXT:    pxor %xmm6, %xmm41507; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [2147549183,2147549183,2147549183,2147549183]1508; SSSE3-NEXT:    movdqa %xmm2, %xmm11509; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm11510; SSSE3-NEXT:    pcmpeqd %xmm7, %xmm71511; SSSE3-NEXT:    pand %xmm1, %xmm01512; SSSE3-NEXT:    pxor %xmm7, %xmm11513; SSSE3-NEXT:    por %xmm0, %xmm11514; SSSE3-NEXT:    movdqa %xmm8, %xmm01515; SSSE3-NEXT:    pxor %xmm6, %xmm01516; SSSE3-NEXT:    movdqa %xmm2, %xmm41517; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm41518; SSSE3-NEXT:    pand %xmm4, %xmm81519; SSSE3-NEXT:    pxor %xmm7, %xmm41520; SSSE3-NEXT:    por %xmm8, %xmm41521; SSSE3-NEXT:    movdqa %xmm5, %xmm81522; SSSE3-NEXT:    pxor %xmm6, %xmm81523; SSSE3-NEXT:    movdqa %xmm2, %xmm01524; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm01525; SSSE3-NEXT:    pand %xmm0, %xmm51526; SSSE3-NEXT:    pxor %xmm7, %xmm01527; SSSE3-NEXT:    por %xmm5, %xmm01528; SSSE3-NEXT:    pxor %xmm3, %xmm61529; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm21530; SSSE3-NEXT:    pxor %xmm2, %xmm71531; SSSE3-NEXT:    pand %xmm3, %xmm21532; SSSE3-NEXT:    por %xmm7, %xmm21533; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]1534; SSSE3-NEXT:    pshufb %xmm3, %xmm21535; SSSE3-NEXT:    pshufb %xmm3, %xmm01536; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]1537; SSSE3-NEXT:    pshufb %xmm3, %xmm41538; SSSE3-NEXT:    pshufb %xmm3, %xmm11539; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]1540; SSSE3-NEXT:    retq1541;1542; SSE41-LABEL: trunc_usat_v16i32_v16i16:1543; SSE41:       # %bb.0:1544; SSE41-NEXT:    pmovsxbw {{.*#+}} xmm0 = [65535,0,65535,0,65535,0,65535,0]1545; SSE41-NEXT:    movdqa 48(%rdi), %xmm21546; SSE41-NEXT:    pminud %xmm0, %xmm21547; SSE41-NEXT:    movdqa 32(%rdi), %xmm11548; SSE41-NEXT:    pminud %xmm0, %xmm11549; SSE41-NEXT:    packusdw %xmm2, %xmm11550; SSE41-NEXT:    movdqa 16(%rdi), %xmm21551; SSE41-NEXT:    pminud %xmm0, %xmm21552; SSE41-NEXT:    pminud (%rdi), %xmm01553; SSE41-NEXT:    packusdw %xmm2, %xmm01554; SSE41-NEXT:    retq1555;1556; AVX1-LABEL: trunc_usat_v16i32_v16i16:1557; AVX1:       # %bb.0:1558; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm0 = [65535,65535,65535,65535]1559; AVX1-NEXT:    vpminud 16(%rdi), %xmm0, %xmm11560; AVX1-NEXT:    vpminud (%rdi), %xmm0, %xmm21561; AVX1-NEXT:    vpackusdw %xmm1, %xmm2, %xmm11562; AVX1-NEXT:    vpminud 48(%rdi), %xmm0, %xmm21563; AVX1-NEXT:    vpminud 32(%rdi), %xmm0, %xmm01564; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm01565; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01566; AVX1-NEXT:    retq1567;1568; AVX2-LABEL: trunc_usat_v16i32_v16i16:1569; AVX2:       # %bb.0:1570; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm0 = [65535,65535,65535,65535,65535,65535,65535,65535]1571; AVX2-NEXT:    vpminud 32(%rdi), %ymm0, %ymm11572; AVX2-NEXT:    vpminud (%rdi), %ymm0, %ymm01573; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm01574; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1575; AVX2-NEXT:    retq1576;1577; AVX512-LABEL: trunc_usat_v16i32_v16i16:1578; AVX512:       # %bb.0:1579; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm01580; AVX512-NEXT:    vpmovusdw %zmm0, %ymm01581; AVX512-NEXT:    retq1582;1583; SKX-LABEL: trunc_usat_v16i32_v16i16:1584; SKX:       # %bb.0:1585; SKX-NEXT:    vmovdqa64 (%rdi), %zmm01586; SKX-NEXT:    vpmovusdw %zmm0, %ymm01587; SKX-NEXT:    retq1588  %a0 = load <16 x i32>, ptr %p01589  %1 = icmp ult <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>1590  %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>1591  %3 = trunc <16 x i32> %2 to <16 x i16>1592  ret <16 x i16> %31593}1594 1595;1596; Unsigned saturation truncation to vXi81597;1598 1599define <2 x i8> @trunc_usat_v2i64_v2i8(<2 x i64> %a0) {1600; SSE2-LABEL: trunc_usat_v2i64_v2i8:1601; SSE2:       # %bb.0:1602; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]1603; SSE2-NEXT:    pxor %xmm0, %xmm11604; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]1605; SSE2-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21606; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,2,2]1607; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11608; SSE2-NEXT:    pandn %xmm2, %xmm11609; SSE2-NEXT:    pand %xmm1, %xmm01610; SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11611; SSE2-NEXT:    por %xmm1, %xmm01612; SSE2-NEXT:    packuswb %xmm0, %xmm01613; SSE2-NEXT:    packuswb %xmm0, %xmm01614; SSE2-NEXT:    packuswb %xmm0, %xmm01615; SSE2-NEXT:    retq1616;1617; SSSE3-LABEL: trunc_usat_v2i64_v2i8:1618; SSSE3:       # %bb.0:1619; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]1620; SSSE3-NEXT:    pxor %xmm0, %xmm11621; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]1622; SSSE3-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21623; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,2,2]1624; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11625; SSSE3-NEXT:    pandn %xmm2, %xmm11626; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm21627; SSSE3-NEXT:    pxor %xmm1, %xmm21628; SSSE3-NEXT:    pand %xmm1, %xmm01629; SSSE3-NEXT:    por %xmm2, %xmm01630; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]1631; SSSE3-NEXT:    retq1632;1633; SSE41-LABEL: trunc_usat_v2i64_v2i8:1634; SSE41:       # %bb.0:1635; SSE41-NEXT:    movdqa %xmm0, %xmm11636; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [255,255]1637; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]1638; SSE41-NEXT:    pxor %xmm0, %xmm31639; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]1640; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm31641; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01642; SSE41-NEXT:    pandn %xmm3, %xmm01643; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm21644; SSE41-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]1645; SSE41-NEXT:    movdqa %xmm2, %xmm01646; SSE41-NEXT:    retq1647;1648; AVX-LABEL: trunc_usat_v2i64_v2i8:1649; AVX:       # %bb.0:1650; AVX-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11651; AVX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11652; AVX-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01653; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]1654; AVX-NEXT:    retq1655;1656; AVX512F-LABEL: trunc_usat_v2i64_v2i8:1657; AVX512F:       # %bb.0:1658; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01659; AVX512F-NEXT:    vpmovusqb %zmm0, %xmm01660; AVX512F-NEXT:    vzeroupper1661; AVX512F-NEXT:    retq1662;1663; AVX512VL-LABEL: trunc_usat_v2i64_v2i8:1664; AVX512VL:       # %bb.0:1665; AVX512VL-NEXT:    vpmovusqb %xmm0, %xmm01666; AVX512VL-NEXT:    retq1667;1668; AVX512BW-LABEL: trunc_usat_v2i64_v2i8:1669; AVX512BW:       # %bb.0:1670; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01671; AVX512BW-NEXT:    vpmovusqb %zmm0, %xmm01672; AVX512BW-NEXT:    vzeroupper1673; AVX512BW-NEXT:    retq1674;1675; AVX512BWVL-LABEL: trunc_usat_v2i64_v2i8:1676; AVX512BWVL:       # %bb.0:1677; AVX512BWVL-NEXT:    vpmovusqb %xmm0, %xmm01678; AVX512BWVL-NEXT:    retq1679;1680; SKX-LABEL: trunc_usat_v2i64_v2i8:1681; SKX:       # %bb.0:1682; SKX-NEXT:    vpmovusqb %xmm0, %xmm01683; SKX-NEXT:    retq1684  %1 = icmp ult <2 x i64> %a0, <i64 255, i64 255>1685  %2 = select <2 x i1> %1, <2 x i64> %a0, <2 x i64> <i64 255, i64 255>1686  %3 = trunc <2 x i64> %2 to <2 x i8>1687  ret <2 x i8> %31688}1689 1690define void @trunc_usat_v2i64_v2i8_store(<2 x i64> %a0, ptr %p1) {1691; SSE2-LABEL: trunc_usat_v2i64_v2i8_store:1692; SSE2:       # %bb.0:1693; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]1694; SSE2-NEXT:    pxor %xmm0, %xmm11695; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]1696; SSE2-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21697; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,2,2]1698; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11699; SSE2-NEXT:    pandn %xmm2, %xmm11700; SSE2-NEXT:    pand %xmm1, %xmm01701; SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11702; SSE2-NEXT:    por %xmm0, %xmm11703; SSE2-NEXT:    packuswb %xmm1, %xmm11704; SSE2-NEXT:    packuswb %xmm1, %xmm11705; SSE2-NEXT:    packuswb %xmm1, %xmm11706; SSE2-NEXT:    movd %xmm1, %eax1707; SSE2-NEXT:    movw %ax, (%rdi)1708; SSE2-NEXT:    retq1709;1710; SSSE3-LABEL: trunc_usat_v2i64_v2i8_store:1711; SSSE3:       # %bb.0:1712; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]1713; SSSE3-NEXT:    pxor %xmm0, %xmm11714; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]1715; SSSE3-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21716; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,2,2]1717; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11718; SSSE3-NEXT:    pandn %xmm2, %xmm11719; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm21720; SSSE3-NEXT:    pxor %xmm1, %xmm21721; SSSE3-NEXT:    pand %xmm0, %xmm11722; SSSE3-NEXT:    por %xmm2, %xmm11723; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]1724; SSSE3-NEXT:    movd %xmm1, %eax1725; SSSE3-NEXT:    movw %ax, (%rdi)1726; SSSE3-NEXT:    retq1727;1728; SSE41-LABEL: trunc_usat_v2i64_v2i8_store:1729; SSE41:       # %bb.0:1730; SSE41-NEXT:    movdqa %xmm0, %xmm11731; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [255,255]1732; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]1733; SSE41-NEXT:    pxor %xmm0, %xmm31734; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]1735; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm31736; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01737; SSE41-NEXT:    pandn %xmm3, %xmm01738; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm21739; SSE41-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]1740; SSE41-NEXT:    pextrw $0, %xmm2, (%rdi)1741; SSE41-NEXT:    retq1742;1743; AVX-LABEL: trunc_usat_v2i64_v2i8_store:1744; AVX:       # %bb.0:1745; AVX-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11746; AVX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11747; AVX-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01748; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]1749; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)1750; AVX-NEXT:    retq1751;1752; AVX512F-LABEL: trunc_usat_v2i64_v2i8_store:1753; AVX512F:       # %bb.0:1754; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01755; AVX512F-NEXT:    vpmovusqb %zmm0, %xmm01756; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)1757; AVX512F-NEXT:    vzeroupper1758; AVX512F-NEXT:    retq1759;1760; AVX512VL-LABEL: trunc_usat_v2i64_v2i8_store:1761; AVX512VL:       # %bb.0:1762; AVX512VL-NEXT:    vpmovusqb %xmm0, (%rdi)1763; AVX512VL-NEXT:    retq1764;1765; AVX512BW-LABEL: trunc_usat_v2i64_v2i8_store:1766; AVX512BW:       # %bb.0:1767; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01768; AVX512BW-NEXT:    vpmovusqb %zmm0, %xmm01769; AVX512BW-NEXT:    vpextrw $0, %xmm0, (%rdi)1770; AVX512BW-NEXT:    vzeroupper1771; AVX512BW-NEXT:    retq1772;1773; AVX512BWVL-LABEL: trunc_usat_v2i64_v2i8_store:1774; AVX512BWVL:       # %bb.0:1775; AVX512BWVL-NEXT:    vpmovusqb %xmm0, (%rdi)1776; AVX512BWVL-NEXT:    retq1777;1778; SKX-LABEL: trunc_usat_v2i64_v2i8_store:1779; SKX:       # %bb.0:1780; SKX-NEXT:    vpmovusqb %xmm0, (%rdi)1781; SKX-NEXT:    retq1782  %1 = icmp ult <2 x i64> %a0, <i64 255, i64 255>1783  %2 = select <2 x i1> %1, <2 x i64> %a0, <2 x i64> <i64 255, i64 255>1784  %3 = trunc <2 x i64> %2 to <2 x i8>1785  store <2 x i8> %3, ptr %p11786  ret void1787}1788 1789define <4 x i8> @trunc_usat_v4i64_v4i8(<4 x i64> %a0) {1790; SSE2-SSSE3-LABEL: trunc_usat_v4i64_v4i8:1791; SSE2-SSSE3:       # %bb.0:1792; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255]1793; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]1794; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm41795; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm41796; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1797; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [2147483903,2147483903,2147483903,2147483903]1798; SSE2-SSSE3-NEXT:    movdqa %xmm6, %xmm71799; SSE2-SSSE3-NEXT:    pcmpgtd %xmm5, %xmm71800; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]1801; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm41802; SSE2-SSSE3-NEXT:    pand %xmm7, %xmm41803; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm11804; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm41805; SSE2-SSSE3-NEXT:    por %xmm1, %xmm41806; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm11807; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm11808; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]1809; SSE2-SSSE3-NEXT:    pcmpgtd %xmm5, %xmm61810; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1811; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm11812; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm11813; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm01814; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm11815; SSE2-SSSE3-NEXT:    por %xmm1, %xmm01816; SSE2-SSSE3-NEXT:    packuswb %xmm4, %xmm01817; SSE2-SSSE3-NEXT:    packuswb %xmm0, %xmm01818; SSE2-SSSE3-NEXT:    packuswb %xmm0, %xmm01819; SSE2-SSSE3-NEXT:    retq1820;1821; SSE41-LABEL: trunc_usat_v4i64_v4i8:1822; SSE41:       # %bb.0:1823; SSE41-NEXT:    movdqa %xmm0, %xmm31824; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [255,255]1825; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]1826; SSE41-NEXT:    movdqa %xmm1, %xmm61827; SSE41-NEXT:    pxor %xmm5, %xmm61828; SSE41-NEXT:    movdqa {{.*#+}} xmm7 = [9223372039002259711,9223372039002259711]1829; SSE41-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]1830; SSE41-NEXT:    pcmpeqd %xmm7, %xmm61831; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [2147483903,2147483903,2147483903,2147483903]1832; SSE41-NEXT:    movdqa %xmm4, %xmm01833; SSE41-NEXT:    pcmpgtd %xmm8, %xmm01834; SSE41-NEXT:    pand %xmm6, %xmm01835; SSE41-NEXT:    movapd %xmm2, %xmm61836; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm61837; SSE41-NEXT:    pxor %xmm3, %xmm51838; SSE41-NEXT:    pcmpeqd %xmm5, %xmm71839; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]1840; SSE41-NEXT:    pcmpgtd %xmm0, %xmm41841; SSE41-NEXT:    pand %xmm7, %xmm41842; SSE41-NEXT:    movdqa %xmm4, %xmm01843; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm21844; SSE41-NEXT:    packusdw %xmm6, %xmm21845; SSE41-NEXT:    packusdw %xmm2, %xmm21846; SSE41-NEXT:    packuswb %xmm2, %xmm21847; SSE41-NEXT:    movdqa %xmm2, %xmm01848; SSE41-NEXT:    retq1849;1850; AVX1-LABEL: trunc_usat_v4i64_v4i8:1851; AVX1:       # %bb.0:1852; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]1853; AVX1-NEXT:    # xmm1 = mem[0,0]1854; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm21855; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854776063,9223372036854776063]1856; AVX1-NEXT:    # xmm3 = mem[0,0]1857; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm21858; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm41859; AVX1-NEXT:    vpxor %xmm1, %xmm4, %xmm11860; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm11861; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [255,255]1862; AVX1-NEXT:    # xmm3 = mem[0,0]1863; AVX1-NEXT:    vblendvpd %xmm1, %xmm4, %xmm3, %xmm11864; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm3, %xmm01865; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm01866; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm01867; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm01868; AVX1-NEXT:    vzeroupper1869; AVX1-NEXT:    retq1870;1871; AVX2-LABEL: trunc_usat_v4i64_v4i8:1872; AVX2:       # %bb.0:1873; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [255,255,255,255]1874; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1875; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm21876; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854776062,9223372036854776062,9223372036854776062,9223372036854776062]1877; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm21878; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm01879; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm11880; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm01881; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm01882; AVX2-NEXT:    vpackuswb %xmm0, %xmm0, %xmm01883; AVX2-NEXT:    vzeroupper1884; AVX2-NEXT:    retq1885;1886; AVX512F-LABEL: trunc_usat_v4i64_v4i8:1887; AVX512F:       # %bb.0:1888; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01889; AVX512F-NEXT:    vpmovusqb %zmm0, %xmm01890; AVX512F-NEXT:    vzeroupper1891; AVX512F-NEXT:    retq1892;1893; AVX512VL-LABEL: trunc_usat_v4i64_v4i8:1894; AVX512VL:       # %bb.0:1895; AVX512VL-NEXT:    vpmovusqb %ymm0, %xmm01896; AVX512VL-NEXT:    vzeroupper1897; AVX512VL-NEXT:    retq1898;1899; AVX512BW-LABEL: trunc_usat_v4i64_v4i8:1900; AVX512BW:       # %bb.0:1901; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01902; AVX512BW-NEXT:    vpmovusqb %zmm0, %xmm01903; AVX512BW-NEXT:    vzeroupper1904; AVX512BW-NEXT:    retq1905;1906; AVX512BWVL-LABEL: trunc_usat_v4i64_v4i8:1907; AVX512BWVL:       # %bb.0:1908; AVX512BWVL-NEXT:    vpmovusqb %ymm0, %xmm01909; AVX512BWVL-NEXT:    vzeroupper1910; AVX512BWVL-NEXT:    retq1911;1912; SKX-LABEL: trunc_usat_v4i64_v4i8:1913; SKX:       # %bb.0:1914; SKX-NEXT:    vpmovusqb %ymm0, %xmm01915; SKX-NEXT:    vzeroupper1916; SKX-NEXT:    retq1917  %1 = icmp ult <4 x i64> %a0, <i64 255, i64 255, i64 255, i64 255>1918  %2 = select <4 x i1> %1, <4 x i64> %a0, <4 x i64> <i64 255, i64 255, i64 255, i64 255>1919  %3 = trunc <4 x i64> %2 to <4 x i8>1920  ret <4 x i8> %31921}1922 1923define void @trunc_usat_v4i64_v4i8_store(<4 x i64> %a0, ptr%p1) {1924; SSE2-SSSE3-LABEL: trunc_usat_v4i64_v4i8_store:1925; SSE2-SSSE3:       # %bb.0:1926; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255]1927; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]1928; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm41929; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm41930; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1931; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [2147483903,2147483903,2147483903,2147483903]1932; SSE2-SSSE3-NEXT:    movdqa %xmm6, %xmm71933; SSE2-SSSE3-NEXT:    pcmpgtd %xmm5, %xmm71934; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]1935; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm41936; SSE2-SSSE3-NEXT:    pand %xmm7, %xmm41937; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm11938; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm41939; SSE2-SSSE3-NEXT:    por %xmm1, %xmm41940; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm11941; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm11942; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]1943; SSE2-SSSE3-NEXT:    pcmpgtd %xmm5, %xmm61944; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1945; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm11946; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm11947; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm01948; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm11949; SSE2-SSSE3-NEXT:    por %xmm0, %xmm11950; SSE2-SSSE3-NEXT:    packuswb %xmm4, %xmm11951; SSE2-SSSE3-NEXT:    packuswb %xmm1, %xmm11952; SSE2-SSSE3-NEXT:    packuswb %xmm1, %xmm11953; SSE2-SSSE3-NEXT:    movd %xmm1, (%rdi)1954; SSE2-SSSE3-NEXT:    retq1955;1956; SSE41-LABEL: trunc_usat_v4i64_v4i8_store:1957; SSE41:       # %bb.0:1958; SSE41-NEXT:    movdqa %xmm0, %xmm21959; SSE41-NEXT:    movapd {{.*#+}} xmm4 = [255,255]1960; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]1961; SSE41-NEXT:    movdqa %xmm1, %xmm61962; SSE41-NEXT:    pxor %xmm5, %xmm61963; SSE41-NEXT:    movdqa {{.*#+}} xmm7 = [9223372039002259711,9223372039002259711]1964; SSE41-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]1965; SSE41-NEXT:    pcmpeqd %xmm7, %xmm61966; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [2147483903,2147483903,2147483903,2147483903]1967; SSE41-NEXT:    movdqa %xmm3, %xmm01968; SSE41-NEXT:    pcmpgtd %xmm8, %xmm01969; SSE41-NEXT:    pand %xmm6, %xmm01970; SSE41-NEXT:    movapd %xmm4, %xmm61971; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm61972; SSE41-NEXT:    pxor %xmm2, %xmm51973; SSE41-NEXT:    pcmpeqd %xmm5, %xmm71974; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]1975; SSE41-NEXT:    pcmpgtd %xmm0, %xmm31976; SSE41-NEXT:    pand %xmm7, %xmm31977; SSE41-NEXT:    movdqa %xmm3, %xmm01978; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm41979; SSE41-NEXT:    packusdw %xmm6, %xmm41980; SSE41-NEXT:    packusdw %xmm4, %xmm41981; SSE41-NEXT:    packuswb %xmm4, %xmm41982; SSE41-NEXT:    movd %xmm4, (%rdi)1983; SSE41-NEXT:    retq1984;1985; AVX1-LABEL: trunc_usat_v4i64_v4i8_store:1986; AVX1:       # %bb.0:1987; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]1988; AVX1-NEXT:    # xmm1 = mem[0,0]1989; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm21990; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854776063,9223372036854776063]1991; AVX1-NEXT:    # xmm3 = mem[0,0]1992; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm21993; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm41994; AVX1-NEXT:    vpxor %xmm1, %xmm4, %xmm11995; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm11996; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [255,255]1997; AVX1-NEXT:    # xmm3 = mem[0,0]1998; AVX1-NEXT:    vblendvpd %xmm1, %xmm4, %xmm3, %xmm11999; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm3, %xmm02000; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm02001; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02002; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02003; AVX1-NEXT:    vmovd %xmm0, (%rdi)2004; AVX1-NEXT:    vzeroupper2005; AVX1-NEXT:    retq2006;2007; AVX2-LABEL: trunc_usat_v4i64_v4i8_store:2008; AVX2:       # %bb.0:2009; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [255,255,255,255]2010; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]2011; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm22012; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854776062,9223372036854776062,9223372036854776062,9223372036854776062]2013; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm22014; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm02015; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm12016; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm02017; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02018; AVX2-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02019; AVX2-NEXT:    vmovd %xmm0, (%rdi)2020; AVX2-NEXT:    vzeroupper2021; AVX2-NEXT:    retq2022;2023; AVX512F-LABEL: trunc_usat_v4i64_v4i8_store:2024; AVX512F:       # %bb.0:2025; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02026; AVX512F-NEXT:    vpmovusqb %zmm0, %xmm02027; AVX512F-NEXT:    vmovd %xmm0, (%rdi)2028; AVX512F-NEXT:    vzeroupper2029; AVX512F-NEXT:    retq2030;2031; AVX512VL-LABEL: trunc_usat_v4i64_v4i8_store:2032; AVX512VL:       # %bb.0:2033; AVX512VL-NEXT:    vpmovusqb %ymm0, (%rdi)2034; AVX512VL-NEXT:    vzeroupper2035; AVX512VL-NEXT:    retq2036;2037; AVX512BW-LABEL: trunc_usat_v4i64_v4i8_store:2038; AVX512BW:       # %bb.0:2039; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02040; AVX512BW-NEXT:    vpmovusqb %zmm0, %xmm02041; AVX512BW-NEXT:    vmovd %xmm0, (%rdi)2042; AVX512BW-NEXT:    vzeroupper2043; AVX512BW-NEXT:    retq2044;2045; AVX512BWVL-LABEL: trunc_usat_v4i64_v4i8_store:2046; AVX512BWVL:       # %bb.0:2047; AVX512BWVL-NEXT:    vpmovusqb %ymm0, (%rdi)2048; AVX512BWVL-NEXT:    vzeroupper2049; AVX512BWVL-NEXT:    retq2050;2051; SKX-LABEL: trunc_usat_v4i64_v4i8_store:2052; SKX:       # %bb.0:2053; SKX-NEXT:    vpmovusqb %ymm0, (%rdi)2054; SKX-NEXT:    vzeroupper2055; SKX-NEXT:    retq2056  %1 = icmp ult <4 x i64> %a0, <i64 255, i64 255, i64 255, i64 255>2057  %2 = select <4 x i1> %1, <4 x i64> %a0, <4 x i64> <i64 255, i64 255, i64 255, i64 255>2058  %3 = trunc <4 x i64> %2 to <4 x i8>2059  store <4 x i8> %3, ptr%p12060  ret void2061}2062 2063define <8 x i8> @trunc_usat_v8i64_v8i8(ptr %p0) {2064; SSE2-SSSE3-LABEL: trunc_usat_v8i64_v8i8:2065; SSE2-SSSE3:       # %bb.0:2066; SSE2-SSSE3-NEXT:    movdqa (%rdi), %xmm62067; SSE2-SSSE3-NEXT:    movdqa 16(%rdi), %xmm02068; SSE2-SSSE3-NEXT:    movdqa 32(%rdi), %xmm12069; SSE2-SSSE3-NEXT:    movdqa 48(%rdi), %xmm52070; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255]2071; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]2072; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm72073; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm72074; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]2075; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [2147483903,2147483903,2147483903,2147483903]2076; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm92077; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm92078; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]2079; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm72080; SSE2-SSSE3-NEXT:    pand %xmm9, %xmm72081; SSE2-SSSE3-NEXT:    pand %xmm7, %xmm02082; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm72083; SSE2-SSSE3-NEXT:    por %xmm0, %xmm72084; SSE2-SSSE3-NEXT:    movdqa %xmm6, %xmm02085; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm02086; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[0,0,2,2]2087; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm92088; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm92089; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]2090; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm02091; SSE2-SSSE3-NEXT:    pand %xmm9, %xmm02092; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm62093; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm02094; SSE2-SSSE3-NEXT:    por %xmm6, %xmm02095; SSE2-SSSE3-NEXT:    packuswb %xmm7, %xmm02096; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm62097; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm62098; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]2099; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm82100; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm82101; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2102; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm62103; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm62104; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm52105; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm62106; SSE2-SSSE3-NEXT:    por %xmm5, %xmm62107; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm52108; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm52109; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]2110; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm42111; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]2112; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm52113; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm52114; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm12115; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm52116; SSE2-SSSE3-NEXT:    por %xmm1, %xmm52117; SSE2-SSSE3-NEXT:    packuswb %xmm6, %xmm52118; SSE2-SSSE3-NEXT:    packuswb %xmm5, %xmm02119; SSE2-SSSE3-NEXT:    packuswb %xmm0, %xmm02120; SSE2-SSSE3-NEXT:    retq2121;2122; SSE41-LABEL: trunc_usat_v8i64_v8i8:2123; SSE41:       # %bb.0:2124; SSE41-NEXT:    movdqa (%rdi), %xmm82125; SSE41-NEXT:    movdqa 16(%rdi), %xmm22126; SSE41-NEXT:    movdqa 32(%rdi), %xmm42127; SSE41-NEXT:    movdqa 48(%rdi), %xmm72128; SSE41-NEXT:    movapd {{.*#+}} xmm3 = [255,255]2129; SSE41-NEXT:    movdqa {{.*#+}} xmm6 = [9223372039002259456,9223372039002259456]2130; SSE41-NEXT:    movdqa %xmm2, %xmm92131; SSE41-NEXT:    pxor %xmm6, %xmm92132; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259711,9223372039002259711]2133; SSE41-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]2134; SSE41-NEXT:    pcmpeqd %xmm5, %xmm92135; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [2147483903,2147483903,2147483903,2147483903]2136; SSE41-NEXT:    movdqa %xmm1, %xmm02137; SSE41-NEXT:    pcmpgtd %xmm10, %xmm02138; SSE41-NEXT:    pand %xmm9, %xmm02139; SSE41-NEXT:    movapd %xmm3, %xmm92140; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm92141; SSE41-NEXT:    movdqa %xmm8, %xmm22142; SSE41-NEXT:    pxor %xmm6, %xmm22143; SSE41-NEXT:    pshufd {{.*#+}} xmm10 = xmm2[0,0,2,2]2144; SSE41-NEXT:    pcmpeqd %xmm5, %xmm22145; SSE41-NEXT:    movdqa %xmm1, %xmm02146; SSE41-NEXT:    pcmpgtd %xmm10, %xmm02147; SSE41-NEXT:    pand %xmm2, %xmm02148; SSE41-NEXT:    movapd %xmm3, %xmm22149; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm22150; SSE41-NEXT:    packusdw %xmm9, %xmm22151; SSE41-NEXT:    movdqa %xmm7, %xmm82152; SSE41-NEXT:    pxor %xmm6, %xmm82153; SSE41-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]2154; SSE41-NEXT:    pcmpeqd %xmm5, %xmm82155; SSE41-NEXT:    movdqa %xmm1, %xmm02156; SSE41-NEXT:    pcmpgtd %xmm9, %xmm02157; SSE41-NEXT:    pand %xmm8, %xmm02158; SSE41-NEXT:    movapd %xmm3, %xmm82159; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm82160; SSE41-NEXT:    pxor %xmm4, %xmm62161; SSE41-NEXT:    pcmpeqd %xmm6, %xmm52162; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]2163; SSE41-NEXT:    pcmpgtd %xmm0, %xmm12164; SSE41-NEXT:    pand %xmm5, %xmm12165; SSE41-NEXT:    movdqa %xmm1, %xmm02166; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm32167; SSE41-NEXT:    packusdw %xmm8, %xmm32168; SSE41-NEXT:    packusdw %xmm3, %xmm22169; SSE41-NEXT:    packuswb %xmm2, %xmm22170; SSE41-NEXT:    movdqa %xmm2, %xmm02171; SSE41-NEXT:    retq2172;2173; AVX1-LABEL: trunc_usat_v8i64_v8i8:2174; AVX1:       # %bb.0:2175; AVX1-NEXT:    vmovdqa (%rdi), %xmm02176; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm12177; AVX1-NEXT:    vmovdqa 32(%rdi), %xmm22178; AVX1-NEXT:    vmovdqa 48(%rdi), %xmm32179; AVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]2180; AVX1-NEXT:    # xmm4 = mem[0,0]2181; AVX1-NEXT:    vpxor %xmm4, %xmm0, %xmm52182; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [9223372036854776063,9223372036854776063]2183; AVX1-NEXT:    # xmm6 = mem[0,0]2184; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm52185; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm72186; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm72187; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm82188; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm6, %xmm82189; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm42190; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm42191; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [255,255]2192; AVX1-NEXT:    # xmm6 = mem[0,0]2193; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm32194; AVX1-NEXT:    vblendvpd %xmm8, %xmm2, %xmm6, %xmm22195; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm22196; AVX1-NEXT:    vblendvpd %xmm7, %xmm1, %xmm6, %xmm12197; AVX1-NEXT:    vblendvpd %xmm5, %xmm0, %xmm6, %xmm02198; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm02199; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm02200; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02201; AVX1-NEXT:    retq2202;2203; AVX2-LABEL: trunc_usat_v8i64_v8i8:2204; AVX2:       # %bb.0:2205; AVX2-NEXT:    vmovdqa (%rdi), %ymm02206; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm12207; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [255,255,255,255]2208; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]2209; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm42210; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [9223372036854776063,9223372036854776063,9223372036854776063,9223372036854776063]2211; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm5, %ymm42212; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm12213; AVX2-NEXT:    vpxor %ymm3, %ymm0, %ymm32214; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm5, %ymm32215; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm02216; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm02217; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm12218; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm02219; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]2220; AVX2-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02221; AVX2-NEXT:    vzeroupper2222; AVX2-NEXT:    retq2223;2224; AVX512-LABEL: trunc_usat_v8i64_v8i8:2225; AVX512:       # %bb.0:2226; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm02227; AVX512-NEXT:    vpmovusqb %zmm0, %xmm02228; AVX512-NEXT:    vzeroupper2229; AVX512-NEXT:    retq2230;2231; SKX-LABEL: trunc_usat_v8i64_v8i8:2232; SKX:       # %bb.0:2233; SKX-NEXT:    vmovdqa64 (%rdi), %zmm02234; SKX-NEXT:    vpmovusqb %zmm0, %xmm02235; SKX-NEXT:    vzeroupper2236; SKX-NEXT:    retq2237  %a0 = load <8 x i64>, ptr %p02238  %1 = icmp ult <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>2239  %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>2240  %3 = trunc <8 x i64> %2 to <8 x i8>2241  ret <8 x i8> %32242}2243 2244define void @trunc_usat_v8i64_v8i8_store(ptr %p0, ptr%p1) {2245; SSE2-SSSE3-LABEL: trunc_usat_v8i64_v8i8_store:2246; SSE2-SSSE3:       # %bb.0:2247; SSE2-SSSE3-NEXT:    movdqa (%rdi), %xmm62248; SSE2-SSSE3-NEXT:    movdqa 16(%rdi), %xmm52249; SSE2-SSSE3-NEXT:    movdqa 32(%rdi), %xmm02250; SSE2-SSSE3-NEXT:    movdqa 48(%rdi), %xmm42251; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [255,255]2252; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]2253; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm72254; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm72255; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]2256; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [2147483903,2147483903,2147483903,2147483903]2257; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm92258; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm92259; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]2260; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm72261; SSE2-SSSE3-NEXT:    pand %xmm9, %xmm72262; SSE2-SSSE3-NEXT:    pand %xmm7, %xmm52263; SSE2-SSSE3-NEXT:    pandn %xmm1, %xmm72264; SSE2-SSSE3-NEXT:    por %xmm5, %xmm72265; SSE2-SSSE3-NEXT:    movdqa %xmm6, %xmm52266; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm52267; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm5[0,0,2,2]2268; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm92269; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm92270; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]2271; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm52272; SSE2-SSSE3-NEXT:    pand %xmm9, %xmm52273; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm62274; SSE2-SSSE3-NEXT:    pandn %xmm1, %xmm52275; SSE2-SSSE3-NEXT:    por %xmm6, %xmm52276; SSE2-SSSE3-NEXT:    packuswb %xmm7, %xmm52277; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm62278; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm62279; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]2280; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm82281; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm82282; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2283; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm62284; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm62285; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm42286; SSE2-SSSE3-NEXT:    pandn %xmm1, %xmm62287; SSE2-SSSE3-NEXT:    por %xmm4, %xmm62288; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm42289; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm42290; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]2291; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm32292; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]2293; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm42294; SSE2-SSSE3-NEXT:    pand %xmm3, %xmm42295; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm02296; SSE2-SSSE3-NEXT:    pandn %xmm1, %xmm42297; SSE2-SSSE3-NEXT:    por %xmm0, %xmm42298; SSE2-SSSE3-NEXT:    packuswb %xmm6, %xmm42299; SSE2-SSSE3-NEXT:    packuswb %xmm4, %xmm52300; SSE2-SSSE3-NEXT:    packuswb %xmm5, %xmm52301; SSE2-SSSE3-NEXT:    movq %xmm5, (%rsi)2302; SSE2-SSSE3-NEXT:    retq2303;2304; SSE41-LABEL: trunc_usat_v8i64_v8i8_store:2305; SSE41:       # %bb.0:2306; SSE41-NEXT:    movdqa (%rdi), %xmm82307; SSE41-NEXT:    movdqa 16(%rdi), %xmm72308; SSE41-NEXT:    movdqa 32(%rdi), %xmm32309; SSE41-NEXT:    movdqa 48(%rdi), %xmm62310; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [255,255]2311; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]2312; SSE41-NEXT:    movdqa %xmm7, %xmm92313; SSE41-NEXT:    pxor %xmm5, %xmm92314; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259711,9223372039002259711]2315; SSE41-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]2316; SSE41-NEXT:    pcmpeqd %xmm4, %xmm92317; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [2147483903,2147483903,2147483903,2147483903]2318; SSE41-NEXT:    movdqa %xmm1, %xmm02319; SSE41-NEXT:    pcmpgtd %xmm10, %xmm02320; SSE41-NEXT:    pand %xmm9, %xmm02321; SSE41-NEXT:    movapd %xmm2, %xmm92322; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm92323; SSE41-NEXT:    movdqa %xmm8, %xmm72324; SSE41-NEXT:    pxor %xmm5, %xmm72325; SSE41-NEXT:    pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2]2326; SSE41-NEXT:    pcmpeqd %xmm4, %xmm72327; SSE41-NEXT:    movdqa %xmm1, %xmm02328; SSE41-NEXT:    pcmpgtd %xmm10, %xmm02329; SSE41-NEXT:    pand %xmm7, %xmm02330; SSE41-NEXT:    movapd %xmm2, %xmm72331; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm72332; SSE41-NEXT:    packusdw %xmm9, %xmm72333; SSE41-NEXT:    movdqa %xmm6, %xmm82334; SSE41-NEXT:    pxor %xmm5, %xmm82335; SSE41-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]2336; SSE41-NEXT:    pcmpeqd %xmm4, %xmm82337; SSE41-NEXT:    movdqa %xmm1, %xmm02338; SSE41-NEXT:    pcmpgtd %xmm9, %xmm02339; SSE41-NEXT:    pand %xmm8, %xmm02340; SSE41-NEXT:    movapd %xmm2, %xmm82341; SSE41-NEXT:    blendvpd %xmm0, %xmm6, %xmm82342; SSE41-NEXT:    pxor %xmm3, %xmm52343; SSE41-NEXT:    pcmpeqd %xmm5, %xmm42344; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]2345; SSE41-NEXT:    pcmpgtd %xmm0, %xmm12346; SSE41-NEXT:    pand %xmm4, %xmm12347; SSE41-NEXT:    movdqa %xmm1, %xmm02348; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm22349; SSE41-NEXT:    packusdw %xmm8, %xmm22350; SSE41-NEXT:    packusdw %xmm2, %xmm72351; SSE41-NEXT:    packuswb %xmm7, %xmm72352; SSE41-NEXT:    movq %xmm7, (%rsi)2353; SSE41-NEXT:    retq2354;2355; AVX1-LABEL: trunc_usat_v8i64_v8i8_store:2356; AVX1:       # %bb.0:2357; AVX1-NEXT:    vmovdqa (%rdi), %xmm02358; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm12359; AVX1-NEXT:    vmovdqa 32(%rdi), %xmm22360; AVX1-NEXT:    vmovdqa 48(%rdi), %xmm32361; AVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]2362; AVX1-NEXT:    # xmm4 = mem[0,0]2363; AVX1-NEXT:    vpxor %xmm4, %xmm0, %xmm52364; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [9223372036854776063,9223372036854776063]2365; AVX1-NEXT:    # xmm6 = mem[0,0]2366; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm52367; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm72368; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm72369; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm82370; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm6, %xmm82371; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm42372; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm42373; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [255,255]2374; AVX1-NEXT:    # xmm6 = mem[0,0]2375; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm32376; AVX1-NEXT:    vblendvpd %xmm8, %xmm2, %xmm6, %xmm22377; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm22378; AVX1-NEXT:    vblendvpd %xmm7, %xmm1, %xmm6, %xmm12379; AVX1-NEXT:    vblendvpd %xmm5, %xmm0, %xmm6, %xmm02380; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm02381; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm02382; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02383; AVX1-NEXT:    vmovq %xmm0, (%rsi)2384; AVX1-NEXT:    retq2385;2386; AVX2-LABEL: trunc_usat_v8i64_v8i8_store:2387; AVX2:       # %bb.0:2388; AVX2-NEXT:    vmovdqa (%rdi), %ymm02389; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm12390; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [255,255,255,255]2391; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]2392; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm42393; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [9223372036854776063,9223372036854776063,9223372036854776063,9223372036854776063]2394; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm5, %ymm42395; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm12396; AVX2-NEXT:    vpxor %ymm3, %ymm0, %ymm32397; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm5, %ymm32398; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm02399; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm02400; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm12401; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm02402; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]2403; AVX2-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02404; AVX2-NEXT:    vmovq %xmm0, (%rsi)2405; AVX2-NEXT:    vzeroupper2406; AVX2-NEXT:    retq2407;2408; AVX512-LABEL: trunc_usat_v8i64_v8i8_store:2409; AVX512:       # %bb.0:2410; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm02411; AVX512-NEXT:    vpmovusqb %zmm0, (%rsi)2412; AVX512-NEXT:    vzeroupper2413; AVX512-NEXT:    retq2414;2415; SKX-LABEL: trunc_usat_v8i64_v8i8_store:2416; SKX:       # %bb.0:2417; SKX-NEXT:    vmovdqa64 (%rdi), %zmm02418; SKX-NEXT:    vpmovusqb %zmm0, (%rsi)2419; SKX-NEXT:    vzeroupper2420; SKX-NEXT:    retq2421  %a0 = load <8 x i64>, ptr %p02422  %1 = icmp ult <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>2423  %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>2424  %3 = trunc <8 x i64> %2 to <8 x i8>2425  store <8 x i8> %3, ptr%p12426  ret void2427}2428 2429define <16 x i8> @trunc_usat_v16i64_v16i8(ptr %p0) {2430; SSE2-SSSE3-LABEL: trunc_usat_v16i64_v16i8:2431; SSE2-SSSE3:       # %bb.0:2432; SSE2-SSSE3-NEXT:    movdqa 96(%rdi), %xmm12433; SSE2-SSSE3-NEXT:    movdqa 112(%rdi), %xmm42434; SSE2-SSSE3-NEXT:    movdqa 64(%rdi), %xmm62435; SSE2-SSSE3-NEXT:    movdqa 80(%rdi), %xmm72436; SSE2-SSSE3-NEXT:    movdqa (%rdi), %xmm102437; SSE2-SSSE3-NEXT:    movdqa 16(%rdi), %xmm02438; SSE2-SSSE3-NEXT:    movdqa 32(%rdi), %xmm82439; SSE2-SSSE3-NEXT:    movdqa 48(%rdi), %xmm92440; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255]2441; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]2442; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm112443; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm112444; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]2445; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [2147483903,2147483903,2147483903,2147483903]2446; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm132447; SSE2-SSSE3-NEXT:    pcmpgtd %xmm12, %xmm132448; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]2449; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm112450; SSE2-SSSE3-NEXT:    pand %xmm13, %xmm112451; SSE2-SSSE3-NEXT:    pand %xmm11, %xmm02452; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm112453; SSE2-SSSE3-NEXT:    por %xmm0, %xmm112454; SSE2-SSSE3-NEXT:    movdqa %xmm10, %xmm02455; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm02456; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm12 = xmm0[0,0,2,2]2457; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm132458; SSE2-SSSE3-NEXT:    pcmpgtd %xmm12, %xmm132459; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]2460; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm02461; SSE2-SSSE3-NEXT:    pand %xmm13, %xmm02462; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm102463; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm02464; SSE2-SSSE3-NEXT:    por %xmm10, %xmm02465; SSE2-SSSE3-NEXT:    packuswb %xmm11, %xmm02466; SSE2-SSSE3-NEXT:    movdqa %xmm9, %xmm102467; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm102468; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]2469; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm122470; SSE2-SSSE3-NEXT:    pcmpgtd %xmm11, %xmm122471; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]2472; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm102473; SSE2-SSSE3-NEXT:    pand %xmm12, %xmm102474; SSE2-SSSE3-NEXT:    pand %xmm10, %xmm92475; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm102476; SSE2-SSSE3-NEXT:    por %xmm9, %xmm102477; SSE2-SSSE3-NEXT:    movdqa %xmm8, %xmm92478; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm92479; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm11 = xmm9[0,0,2,2]2480; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm122481; SSE2-SSSE3-NEXT:    pcmpgtd %xmm11, %xmm122482; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]2483; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm92484; SSE2-SSSE3-NEXT:    pand %xmm12, %xmm92485; SSE2-SSSE3-NEXT:    pand %xmm9, %xmm82486; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm92487; SSE2-SSSE3-NEXT:    por %xmm8, %xmm92488; SSE2-SSSE3-NEXT:    packuswb %xmm10, %xmm92489; SSE2-SSSE3-NEXT:    packuswb %xmm9, %xmm02490; SSE2-SSSE3-NEXT:    movdqa %xmm7, %xmm82491; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm82492; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]2493; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm102494; SSE2-SSSE3-NEXT:    pcmpgtd %xmm9, %xmm102495; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]2496; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm82497; SSE2-SSSE3-NEXT:    pand %xmm10, %xmm82498; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm72499; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm82500; SSE2-SSSE3-NEXT:    por %xmm7, %xmm82501; SSE2-SSSE3-NEXT:    movdqa %xmm6, %xmm72502; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm72503; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,0,2,2]2504; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm102505; SSE2-SSSE3-NEXT:    pcmpgtd %xmm9, %xmm102506; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]2507; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm72508; SSE2-SSSE3-NEXT:    pand %xmm10, %xmm72509; SSE2-SSSE3-NEXT:    pand %xmm7, %xmm62510; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm72511; SSE2-SSSE3-NEXT:    por %xmm6, %xmm72512; SSE2-SSSE3-NEXT:    packuswb %xmm8, %xmm72513; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm62514; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm62515; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]2516; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm92517; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm92518; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2519; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm62520; SSE2-SSSE3-NEXT:    pand %xmm9, %xmm62521; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm42522; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm62523; SSE2-SSSE3-NEXT:    por %xmm4, %xmm62524; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm42525; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm42526; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm4[0,0,2,2]2527; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm52528; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]2529; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm42530; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm42531; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm12532; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm42533; SSE2-SSSE3-NEXT:    por %xmm1, %xmm42534; SSE2-SSSE3-NEXT:    packuswb %xmm6, %xmm42535; SSE2-SSSE3-NEXT:    packuswb %xmm4, %xmm72536; SSE2-SSSE3-NEXT:    packuswb %xmm7, %xmm02537; SSE2-SSSE3-NEXT:    retq2538;2539; SSE41-LABEL: trunc_usat_v16i64_v16i8:2540; SSE41:       # %bb.0:2541; SSE41-NEXT:    movdqa 96(%rdi), %xmm32542; SSE41-NEXT:    movdqa 112(%rdi), %xmm52543; SSE41-NEXT:    movdqa 64(%rdi), %xmm82544; SSE41-NEXT:    movdqa 80(%rdi), %xmm92545; SSE41-NEXT:    movdqa (%rdi), %xmm122546; SSE41-NEXT:    movdqa 16(%rdi), %xmm22547; SSE41-NEXT:    movdqa 32(%rdi), %xmm102548; SSE41-NEXT:    movdqa 48(%rdi), %xmm112549; SSE41-NEXT:    movapd {{.*#+}} xmm4 = [255,255]2550; SSE41-NEXT:    movdqa {{.*#+}} xmm7 = [9223372039002259456,9223372039002259456]2551; SSE41-NEXT:    movdqa %xmm2, %xmm132552; SSE41-NEXT:    pxor %xmm7, %xmm132553; SSE41-NEXT:    movdqa {{.*#+}} xmm6 = [9223372039002259711,9223372039002259711]2554; SSE41-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]2555; SSE41-NEXT:    pcmpeqd %xmm6, %xmm132556; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [2147483903,2147483903,2147483903,2147483903]2557; SSE41-NEXT:    movdqa %xmm1, %xmm02558; SSE41-NEXT:    pcmpgtd %xmm14, %xmm02559; SSE41-NEXT:    pand %xmm13, %xmm02560; SSE41-NEXT:    movapd %xmm4, %xmm132561; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm132562; SSE41-NEXT:    movdqa %xmm12, %xmm22563; SSE41-NEXT:    pxor %xmm7, %xmm22564; SSE41-NEXT:    pshufd {{.*#+}} xmm14 = xmm2[0,0,2,2]2565; SSE41-NEXT:    pcmpeqd %xmm6, %xmm22566; SSE41-NEXT:    movdqa %xmm1, %xmm02567; SSE41-NEXT:    pcmpgtd %xmm14, %xmm02568; SSE41-NEXT:    pand %xmm2, %xmm02569; SSE41-NEXT:    movapd %xmm4, %xmm22570; SSE41-NEXT:    blendvpd %xmm0, %xmm12, %xmm22571; SSE41-NEXT:    packusdw %xmm13, %xmm22572; SSE41-NEXT:    movdqa %xmm11, %xmm122573; SSE41-NEXT:    pxor %xmm7, %xmm122574; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]2575; SSE41-NEXT:    pcmpeqd %xmm6, %xmm122576; SSE41-NEXT:    movdqa %xmm1, %xmm02577; SSE41-NEXT:    pcmpgtd %xmm13, %xmm02578; SSE41-NEXT:    pand %xmm12, %xmm02579; SSE41-NEXT:    movapd %xmm4, %xmm122580; SSE41-NEXT:    blendvpd %xmm0, %xmm11, %xmm122581; SSE41-NEXT:    movdqa %xmm10, %xmm112582; SSE41-NEXT:    pxor %xmm7, %xmm112583; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm11[0,0,2,2]2584; SSE41-NEXT:    pcmpeqd %xmm6, %xmm112585; SSE41-NEXT:    movdqa %xmm1, %xmm02586; SSE41-NEXT:    pcmpgtd %xmm13, %xmm02587; SSE41-NEXT:    pand %xmm11, %xmm02588; SSE41-NEXT:    movapd %xmm4, %xmm112589; SSE41-NEXT:    blendvpd %xmm0, %xmm10, %xmm112590; SSE41-NEXT:    packusdw %xmm12, %xmm112591; SSE41-NEXT:    packusdw %xmm11, %xmm22592; SSE41-NEXT:    movdqa %xmm9, %xmm102593; SSE41-NEXT:    pxor %xmm7, %xmm102594; SSE41-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]2595; SSE41-NEXT:    pcmpeqd %xmm6, %xmm102596; SSE41-NEXT:    movdqa %xmm1, %xmm02597; SSE41-NEXT:    pcmpgtd %xmm11, %xmm02598; SSE41-NEXT:    pand %xmm10, %xmm02599; SSE41-NEXT:    movapd %xmm4, %xmm102600; SSE41-NEXT:    blendvpd %xmm0, %xmm9, %xmm102601; SSE41-NEXT:    movdqa %xmm8, %xmm92602; SSE41-NEXT:    pxor %xmm7, %xmm92603; SSE41-NEXT:    pshufd {{.*#+}} xmm11 = xmm9[0,0,2,2]2604; SSE41-NEXT:    pcmpeqd %xmm6, %xmm92605; SSE41-NEXT:    movdqa %xmm1, %xmm02606; SSE41-NEXT:    pcmpgtd %xmm11, %xmm02607; SSE41-NEXT:    pand %xmm9, %xmm02608; SSE41-NEXT:    movapd %xmm4, %xmm92609; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm92610; SSE41-NEXT:    packusdw %xmm10, %xmm92611; SSE41-NEXT:    movdqa %xmm5, %xmm82612; SSE41-NEXT:    pxor %xmm7, %xmm82613; SSE41-NEXT:    pshufd {{.*#+}} xmm10 = xmm8[0,0,2,2]2614; SSE41-NEXT:    pcmpeqd %xmm6, %xmm82615; SSE41-NEXT:    movdqa %xmm1, %xmm02616; SSE41-NEXT:    pcmpgtd %xmm10, %xmm02617; SSE41-NEXT:    pand %xmm8, %xmm02618; SSE41-NEXT:    movapd %xmm4, %xmm82619; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm82620; SSE41-NEXT:    pxor %xmm3, %xmm72621; SSE41-NEXT:    pcmpeqd %xmm7, %xmm62622; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[0,0,2,2]2623; SSE41-NEXT:    pcmpgtd %xmm0, %xmm12624; SSE41-NEXT:    pand %xmm6, %xmm12625; SSE41-NEXT:    movdqa %xmm1, %xmm02626; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm42627; SSE41-NEXT:    packusdw %xmm8, %xmm42628; SSE41-NEXT:    packusdw %xmm4, %xmm92629; SSE41-NEXT:    packuswb %xmm9, %xmm22630; SSE41-NEXT:    movdqa %xmm2, %xmm02631; SSE41-NEXT:    retq2632;2633; AVX1-LABEL: trunc_usat_v16i64_v16i8:2634; AVX1:       # %bb.0:2635; AVX1-NEXT:    vmovdqa (%rdi), %xmm02636; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2637; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm12638; AVX1-NEXT:    vmovdqa 32(%rdi), %xmm22639; AVX1-NEXT:    vmovdqa 48(%rdi), %xmm32640; AVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]2641; AVX1-NEXT:    # xmm4 = mem[0,0]2642; AVX1-NEXT:    vpxor %xmm4, %xmm0, %xmm52643; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [9223372036854776063,9223372036854776063]2644; AVX1-NEXT:    # xmm6 = mem[0,0]2645; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm52646; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm72647; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm72648; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm82649; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm6, %xmm82650; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm92651; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm6, %xmm92652; AVX1-NEXT:    vmovdqa 64(%rdi), %xmm102653; AVX1-NEXT:    vpxor %xmm4, %xmm10, %xmm112654; AVX1-NEXT:    vpcmpgtq %xmm11, %xmm6, %xmm112655; AVX1-NEXT:    vmovdqa 80(%rdi), %xmm122656; AVX1-NEXT:    vpxor %xmm4, %xmm12, %xmm132657; AVX1-NEXT:    vpcmpgtq %xmm13, %xmm6, %xmm132658; AVX1-NEXT:    vmovdqa 96(%rdi), %xmm142659; AVX1-NEXT:    vpxor %xmm4, %xmm14, %xmm152660; AVX1-NEXT:    vpcmpgtq %xmm15, %xmm6, %xmm152661; AVX1-NEXT:    vmovdqa 112(%rdi), %xmm02662; AVX1-NEXT:    vpxor %xmm4, %xmm0, %xmm42663; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm42664; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [255,255]2665; AVX1-NEXT:    # xmm6 = mem[0,0]2666; AVX1-NEXT:    vblendvpd %xmm4, %xmm0, %xmm6, %xmm02667; AVX1-NEXT:    vblendvpd %xmm15, %xmm14, %xmm6, %xmm42668; AVX1-NEXT:    vblendvpd %xmm13, %xmm12, %xmm6, %xmm122669; AVX1-NEXT:    vblendvpd %xmm11, %xmm10, %xmm6, %xmm102670; AVX1-NEXT:    vblendvpd %xmm9, %xmm3, %xmm6, %xmm32671; AVX1-NEXT:    vblendvpd %xmm8, %xmm2, %xmm6, %xmm22672; AVX1-NEXT:    vblendvpd %xmm7, %xmm1, %xmm6, %xmm12673; AVX1-NEXT:    vblendvpd %xmm5, {{[-0-9]+}}(%r{{[sb]}}p), %xmm6, %xmm5 # 16-byte Folded Reload2674; AVX1-NEXT:    vpackusdw %xmm0, %xmm4, %xmm02675; AVX1-NEXT:    vpackusdw %xmm12, %xmm10, %xmm42676; AVX1-NEXT:    vpackusdw %xmm0, %xmm4, %xmm02677; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm22678; AVX1-NEXT:    vpackusdw %xmm1, %xmm5, %xmm12679; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm12680; AVX1-NEXT:    vpackuswb %xmm0, %xmm1, %xmm02681; AVX1-NEXT:    retq2682;2683; AVX2-LABEL: trunc_usat_v16i64_v16i8:2684; AVX2:       # %bb.0:2685; AVX2-NEXT:    vmovdqa (%rdi), %ymm02686; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm12687; AVX2-NEXT:    vmovdqa 64(%rdi), %ymm22688; AVX2-NEXT:    vmovdqa 96(%rdi), %ymm32689; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm4 = [255,255,255,255]2690; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]2691; AVX2-NEXT:    vpxor %ymm5, %ymm1, %ymm62692; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm7 = [9223372036854776063,9223372036854776063,9223372036854776063,9223372036854776063]2693; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm7, %ymm62694; AVX2-NEXT:    vblendvpd %ymm6, %ymm1, %ymm4, %ymm12695; AVX2-NEXT:    vpxor %ymm5, %ymm0, %ymm62696; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm7, %ymm62697; AVX2-NEXT:    vblendvpd %ymm6, %ymm0, %ymm4, %ymm02698; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm02699; AVX2-NEXT:    vpxor %ymm5, %ymm3, %ymm12700; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm7, %ymm12701; AVX2-NEXT:    vblendvpd %ymm1, %ymm3, %ymm4, %ymm12702; AVX2-NEXT:    vpxor %ymm5, %ymm2, %ymm32703; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm7, %ymm32704; AVX2-NEXT:    vblendvpd %ymm3, %ymm2, %ymm4, %ymm22705; AVX2-NEXT:    vpackusdw %ymm1, %ymm2, %ymm12706; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]2707; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2708; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm02709; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm12710; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm02711; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]2712; AVX2-NEXT:    vzeroupper2713; AVX2-NEXT:    retq2714;2715; AVX512-LABEL: trunc_usat_v16i64_v16i8:2716; AVX512:       # %bb.0:2717; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm02718; AVX512-NEXT:    vmovdqa64 64(%rdi), %zmm12719; AVX512-NEXT:    vpmovusqb %zmm1, %xmm12720; AVX512-NEXT:    vpmovusqb %zmm0, %xmm02721; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2722; AVX512-NEXT:    vzeroupper2723; AVX512-NEXT:    retq2724;2725; SKX-LABEL: trunc_usat_v16i64_v16i8:2726; SKX:       # %bb.0:2727; SKX-NEXT:    vmovdqa64 (%rdi), %zmm02728; SKX-NEXT:    vmovdqa64 64(%rdi), %zmm12729; SKX-NEXT:    vpmovusqb %zmm1, %xmm12730; SKX-NEXT:    vpmovusqb %zmm0, %xmm02731; SKX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2732; SKX-NEXT:    vzeroupper2733; SKX-NEXT:    retq2734  %a0 = load <16 x i64>, ptr %p02735  %1 = icmp ult <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>2736  %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>2737  %3 = trunc <16 x i64> %2 to <16 x i8>2738  ret <16 x i8> %32739}2740 2741define <4 x i8> @trunc_usat_v4i32_v4i8(<4 x i32> %a0) {2742; SSE2-SSSE3-LABEL: trunc_usat_v4i32_v4i8:2743; SSE2-SSSE3:       # %bb.0:2744; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]2745; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm12746; SSE2-SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12747; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm22748; SSE2-SSSE3-NEXT:    pandn %xmm0, %xmm22749; SSE2-SSSE3-NEXT:    psrld $24, %xmm12750; SSE2-SSSE3-NEXT:    por %xmm2, %xmm12751; SSE2-SSSE3-NEXT:    packuswb %xmm1, %xmm12752; SSE2-SSSE3-NEXT:    packuswb %xmm1, %xmm12753; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm02754; SSE2-SSSE3-NEXT:    retq2755;2756; SSE41-LABEL: trunc_usat_v4i32_v4i8:2757; SSE41:       # %bb.0:2758; SSE41-NEXT:    pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02759; SSE41-NEXT:    packusdw %xmm0, %xmm02760; SSE41-NEXT:    packuswb %xmm0, %xmm02761; SSE41-NEXT:    retq2762;2763; AVX1-LABEL: trunc_usat_v4i32_v4i8:2764; AVX1:       # %bb.0:2765; AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02766; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02767; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02768; AVX1-NEXT:    retq2769;2770; AVX2-SLOW-LABEL: trunc_usat_v4i32_v4i8:2771; AVX2-SLOW:       # %bb.0:2772; AVX2-SLOW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [255,255,255,255]2773; AVX2-SLOW-NEXT:    vpminud %xmm1, %xmm0, %xmm02774; AVX2-SLOW-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02775; AVX2-SLOW-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02776; AVX2-SLOW-NEXT:    retq2777;2778; AVX2-FAST-LABEL: trunc_usat_v4i32_v4i8:2779; AVX2-FAST:       # %bb.0:2780; AVX2-FAST-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [255,255,255,255]2781; AVX2-FAST-NEXT:    vpminud %xmm1, %xmm0, %xmm02782; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]2783; AVX2-FAST-NEXT:    retq2784;2785; AVX512F-LABEL: trunc_usat_v4i32_v4i8:2786; AVX512F:       # %bb.0:2787; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02788; AVX512F-NEXT:    vpmovusdb %zmm0, %xmm02789; AVX512F-NEXT:    vzeroupper2790; AVX512F-NEXT:    retq2791;2792; AVX512VL-LABEL: trunc_usat_v4i32_v4i8:2793; AVX512VL:       # %bb.0:2794; AVX512VL-NEXT:    vpmovusdb %xmm0, %xmm02795; AVX512VL-NEXT:    retq2796;2797; AVX512BW-LABEL: trunc_usat_v4i32_v4i8:2798; AVX512BW:       # %bb.0:2799; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02800; AVX512BW-NEXT:    vpmovusdb %zmm0, %xmm02801; AVX512BW-NEXT:    vzeroupper2802; AVX512BW-NEXT:    retq2803;2804; AVX512BWVL-LABEL: trunc_usat_v4i32_v4i8:2805; AVX512BWVL:       # %bb.0:2806; AVX512BWVL-NEXT:    vpmovusdb %xmm0, %xmm02807; AVX512BWVL-NEXT:    retq2808;2809; SKX-LABEL: trunc_usat_v4i32_v4i8:2810; SKX:       # %bb.0:2811; SKX-NEXT:    vpmovusdb %xmm0, %xmm02812; SKX-NEXT:    retq2813  %1 = icmp ult <4 x i32> %a0, <i32 255, i32 255, i32 255, i32 255>2814  %2 = select <4 x i1> %1, <4 x i32> %a0, <4 x i32> <i32 255, i32 255, i32 255, i32 255>2815  %3 = trunc <4 x i32> %2 to <4 x i8>2816  ret <4 x i8> %32817}2818 2819define void @trunc_usat_v4i32_v4i8_store(<4 x i32> %a0, ptr%p1) {2820; SSE2-SSSE3-LABEL: trunc_usat_v4i32_v4i8_store:2821; SSE2-SSSE3:       # %bb.0:2822; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]2823; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm12824; SSE2-SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12825; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm22826; SSE2-SSSE3-NEXT:    pandn %xmm0, %xmm22827; SSE2-SSSE3-NEXT:    psrld $24, %xmm12828; SSE2-SSSE3-NEXT:    por %xmm2, %xmm12829; SSE2-SSSE3-NEXT:    packuswb %xmm1, %xmm12830; SSE2-SSSE3-NEXT:    packuswb %xmm1, %xmm12831; SSE2-SSSE3-NEXT:    movd %xmm1, (%rdi)2832; SSE2-SSSE3-NEXT:    retq2833;2834; SSE41-LABEL: trunc_usat_v4i32_v4i8_store:2835; SSE41:       # %bb.0:2836; SSE41-NEXT:    pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02837; SSE41-NEXT:    packusdw %xmm0, %xmm02838; SSE41-NEXT:    packuswb %xmm0, %xmm02839; SSE41-NEXT:    movd %xmm0, (%rdi)2840; SSE41-NEXT:    retq2841;2842; AVX1-LABEL: trunc_usat_v4i32_v4i8_store:2843; AVX1:       # %bb.0:2844; AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02845; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02846; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02847; AVX1-NEXT:    vmovd %xmm0, (%rdi)2848; AVX1-NEXT:    retq2849;2850; AVX2-SLOW-LABEL: trunc_usat_v4i32_v4i8_store:2851; AVX2-SLOW:       # %bb.0:2852; AVX2-SLOW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [255,255,255,255]2853; AVX2-SLOW-NEXT:    vpminud %xmm1, %xmm0, %xmm02854; AVX2-SLOW-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02855; AVX2-SLOW-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02856; AVX2-SLOW-NEXT:    vmovd %xmm0, (%rdi)2857; AVX2-SLOW-NEXT:    retq2858;2859; AVX2-FAST-LABEL: trunc_usat_v4i32_v4i8_store:2860; AVX2-FAST:       # %bb.0:2861; AVX2-FAST-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [255,255,255,255]2862; AVX2-FAST-NEXT:    vpminud %xmm1, %xmm0, %xmm02863; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]2864; AVX2-FAST-NEXT:    vmovd %xmm0, (%rdi)2865; AVX2-FAST-NEXT:    retq2866;2867; AVX512F-LABEL: trunc_usat_v4i32_v4i8_store:2868; AVX512F:       # %bb.0:2869; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02870; AVX512F-NEXT:    vpmovusdb %zmm0, %xmm02871; AVX512F-NEXT:    vmovd %xmm0, (%rdi)2872; AVX512F-NEXT:    vzeroupper2873; AVX512F-NEXT:    retq2874;2875; AVX512VL-LABEL: trunc_usat_v4i32_v4i8_store:2876; AVX512VL:       # %bb.0:2877; AVX512VL-NEXT:    vpmovusdb %xmm0, (%rdi)2878; AVX512VL-NEXT:    retq2879;2880; AVX512BW-LABEL: trunc_usat_v4i32_v4i8_store:2881; AVX512BW:       # %bb.0:2882; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02883; AVX512BW-NEXT:    vpmovusdb %zmm0, %xmm02884; AVX512BW-NEXT:    vmovd %xmm0, (%rdi)2885; AVX512BW-NEXT:    vzeroupper2886; AVX512BW-NEXT:    retq2887;2888; AVX512BWVL-LABEL: trunc_usat_v4i32_v4i8_store:2889; AVX512BWVL:       # %bb.0:2890; AVX512BWVL-NEXT:    vpmovusdb %xmm0, (%rdi)2891; AVX512BWVL-NEXT:    retq2892;2893; SKX-LABEL: trunc_usat_v4i32_v4i8_store:2894; SKX:       # %bb.0:2895; SKX-NEXT:    vpmovusdb %xmm0, (%rdi)2896; SKX-NEXT:    retq2897  %1 = icmp ult <4 x i32> %a0, <i32 255, i32 255, i32 255, i32 255>2898  %2 = select <4 x i1> %1, <4 x i32> %a0, <4 x i32> <i32 255, i32 255, i32 255, i32 255>2899  %3 = trunc <4 x i32> %2 to <4 x i8>2900  store <4 x i8> %3, ptr%p12901  ret void2902}2903 2904define <8 x i8> @trunc_usat_v8i32_v8i8(<8 x i32> %a0) {2905; SSE2-SSSE3-LABEL: trunc_usat_v8i32_v8i8:2906; SSE2-SSSE3:       # %bb.0:2907; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255]2908; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]2909; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm42910; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm42911; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [2147483903,2147483903,2147483903,2147483903]2912; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm62913; SSE2-SSSE3-NEXT:    pcmpgtd %xmm4, %xmm62914; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm12915; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm62916; SSE2-SSSE3-NEXT:    por %xmm1, %xmm62917; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm32918; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm52919; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm02920; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm52921; SSE2-SSSE3-NEXT:    por %xmm5, %xmm02922; SSE2-SSSE3-NEXT:    packuswb %xmm6, %xmm02923; SSE2-SSSE3-NEXT:    packuswb %xmm0, %xmm02924; SSE2-SSSE3-NEXT:    retq2925;2926; SSE41-LABEL: trunc_usat_v8i32_v8i8:2927; SSE41:       # %bb.0:2928; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm2 = [255,255,255,255]2929; SSE41-NEXT:    pminud %xmm2, %xmm12930; SSE41-NEXT:    pminud %xmm2, %xmm02931; SSE41-NEXT:    packusdw %xmm1, %xmm02932; SSE41-NEXT:    packuswb %xmm0, %xmm02933; SSE41-NEXT:    retq2934;2935; AVX1-LABEL: trunc_usat_v8i32_v8i8:2936; AVX1:       # %bb.0:2937; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm12938; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [255,255,255,255]2939; AVX1-NEXT:    vpminud %xmm2, %xmm1, %xmm12940; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm02941; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm02942; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02943; AVX1-NEXT:    vzeroupper2944; AVX1-NEXT:    retq2945;2946; AVX2-LABEL: trunc_usat_v8i32_v8i8:2947; AVX2:       # %bb.0:2948; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]2949; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm02950; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm12951; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm02952; AVX2-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02953; AVX2-NEXT:    vzeroupper2954; AVX2-NEXT:    retq2955;2956; AVX512F-LABEL: trunc_usat_v8i32_v8i8:2957; AVX512F:       # %bb.0:2958; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02959; AVX512F-NEXT:    vpmovusdb %zmm0, %xmm02960; AVX512F-NEXT:    vzeroupper2961; AVX512F-NEXT:    retq2962;2963; AVX512VL-LABEL: trunc_usat_v8i32_v8i8:2964; AVX512VL:       # %bb.0:2965; AVX512VL-NEXT:    vpmovusdb %ymm0, %xmm02966; AVX512VL-NEXT:    vzeroupper2967; AVX512VL-NEXT:    retq2968;2969; AVX512BW-LABEL: trunc_usat_v8i32_v8i8:2970; AVX512BW:       # %bb.0:2971; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02972; AVX512BW-NEXT:    vpmovusdb %zmm0, %xmm02973; AVX512BW-NEXT:    vzeroupper2974; AVX512BW-NEXT:    retq2975;2976; AVX512BWVL-LABEL: trunc_usat_v8i32_v8i8:2977; AVX512BWVL:       # %bb.0:2978; AVX512BWVL-NEXT:    vpmovusdb %ymm0, %xmm02979; AVX512BWVL-NEXT:    vzeroupper2980; AVX512BWVL-NEXT:    retq2981;2982; SKX-LABEL: trunc_usat_v8i32_v8i8:2983; SKX:       # %bb.0:2984; SKX-NEXT:    vpmovusdb %ymm0, %xmm02985; SKX-NEXT:    vzeroupper2986; SKX-NEXT:    retq2987  %1 = icmp ult <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>2988  %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>2989  %3 = trunc <8 x i32> %2 to <8 x i8>2990  ret <8 x i8> %32991}2992 2993define void @trunc_usat_v8i32_v8i8_store(<8 x i32> %a0, ptr%p1) {2994; SSE2-SSSE3-LABEL: trunc_usat_v8i32_v8i8_store:2995; SSE2-SSSE3:       # %bb.0:2996; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255]2997; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]2998; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm42999; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm43000; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [2147483903,2147483903,2147483903,2147483903]3001; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm63002; SSE2-SSSE3-NEXT:    pcmpgtd %xmm4, %xmm63003; SSE2-SSSE3-NEXT:    pand %xmm6, %xmm13004; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm63005; SSE2-SSSE3-NEXT:    por %xmm1, %xmm63006; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm33007; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm53008; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm03009; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm53010; SSE2-SSSE3-NEXT:    por %xmm0, %xmm53011; SSE2-SSSE3-NEXT:    packuswb %xmm6, %xmm53012; SSE2-SSSE3-NEXT:    packuswb %xmm5, %xmm53013; SSE2-SSSE3-NEXT:    movq %xmm5, (%rdi)3014; SSE2-SSSE3-NEXT:    retq3015;3016; SSE41-LABEL: trunc_usat_v8i32_v8i8_store:3017; SSE41:       # %bb.0:3018; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm2 = [255,255,255,255]3019; SSE41-NEXT:    pminud %xmm2, %xmm13020; SSE41-NEXT:    pminud %xmm2, %xmm03021; SSE41-NEXT:    packusdw %xmm1, %xmm03022; SSE41-NEXT:    packuswb %xmm0, %xmm03023; SSE41-NEXT:    movq %xmm0, (%rdi)3024; SSE41-NEXT:    retq3025;3026; AVX1-LABEL: trunc_usat_v8i32_v8i8_store:3027; AVX1:       # %bb.0:3028; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13029; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [255,255,255,255]3030; AVX1-NEXT:    vpminud %xmm2, %xmm1, %xmm13031; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm03032; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm03033; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm03034; AVX1-NEXT:    vmovq %xmm0, (%rdi)3035; AVX1-NEXT:    vzeroupper3036; AVX1-NEXT:    retq3037;3038; AVX2-LABEL: trunc_usat_v8i32_v8i8_store:3039; AVX2:       # %bb.0:3040; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]3041; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm03042; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm13043; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm03044; AVX2-NEXT:    vpackuswb %xmm0, %xmm0, %xmm03045; AVX2-NEXT:    vmovq %xmm0, (%rdi)3046; AVX2-NEXT:    vzeroupper3047; AVX2-NEXT:    retq3048;3049; AVX512F-LABEL: trunc_usat_v8i32_v8i8_store:3050; AVX512F:       # %bb.0:3051; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm03052; AVX512F-NEXT:    vpmovusdb %zmm0, %xmm03053; AVX512F-NEXT:    vmovq %xmm0, (%rdi)3054; AVX512F-NEXT:    vzeroupper3055; AVX512F-NEXT:    retq3056;3057; AVX512VL-LABEL: trunc_usat_v8i32_v8i8_store:3058; AVX512VL:       # %bb.0:3059; AVX512VL-NEXT:    vpmovusdb %ymm0, (%rdi)3060; AVX512VL-NEXT:    vzeroupper3061; AVX512VL-NEXT:    retq3062;3063; AVX512BW-LABEL: trunc_usat_v8i32_v8i8_store:3064; AVX512BW:       # %bb.0:3065; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm03066; AVX512BW-NEXT:    vpmovusdb %zmm0, %xmm03067; AVX512BW-NEXT:    vmovq %xmm0, (%rdi)3068; AVX512BW-NEXT:    vzeroupper3069; AVX512BW-NEXT:    retq3070;3071; AVX512BWVL-LABEL: trunc_usat_v8i32_v8i8_store:3072; AVX512BWVL:       # %bb.0:3073; AVX512BWVL-NEXT:    vpmovusdb %ymm0, (%rdi)3074; AVX512BWVL-NEXT:    vzeroupper3075; AVX512BWVL-NEXT:    retq3076;3077; SKX-LABEL: trunc_usat_v8i32_v8i8_store:3078; SKX:       # %bb.0:3079; SKX-NEXT:    vpmovusdb %ymm0, (%rdi)3080; SKX-NEXT:    vzeroupper3081; SKX-NEXT:    retq3082  %1 = icmp ult <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>3083  %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>3084  %3 = trunc <8 x i32> %2 to <8 x i8>3085  store <8 x i8> %3, ptr%p13086  ret void3087}3088 3089define <16 x i8> @trunc_usat_v16i32_v16i8(ptr %p0) {3090; SSE2-SSSE3-LABEL: trunc_usat_v16i32_v16i8:3091; SSE2-SSSE3:       # %bb.0:3092; SSE2-SSSE3-NEXT:    movdqa (%rdi), %xmm63093; SSE2-SSSE3-NEXT:    movdqa 16(%rdi), %xmm03094; SSE2-SSSE3-NEXT:    movdqa 32(%rdi), %xmm13095; SSE2-SSSE3-NEXT:    movdqa 48(%rdi), %xmm53096; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255]3097; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]3098; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm73099; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm73100; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [2147483903,2147483903,2147483903,2147483903]3101; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm83102; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm83103; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm03104; SSE2-SSSE3-NEXT:    pandn %xmm3, %xmm83105; SSE2-SSSE3-NEXT:    por %xmm0, %xmm83106; SSE2-SSSE3-NEXT:    movdqa %xmm6, %xmm73107; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm73108; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm03109; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm03110; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm63111; SSE2-SSSE3-NEXT:    pandn %xmm3, %xmm03112; SSE2-SSSE3-NEXT:    por %xmm6, %xmm03113; SSE2-SSSE3-NEXT:    packuswb %xmm8, %xmm03114; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm63115; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm63116; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm73117; SSE2-SSSE3-NEXT:    pcmpgtd %xmm6, %xmm73118; SSE2-SSSE3-NEXT:    pand %xmm7, %xmm53119; SSE2-SSSE3-NEXT:    pandn %xmm3, %xmm73120; SSE2-SSSE3-NEXT:    por %xmm5, %xmm73121; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm43122; SSE2-SSSE3-NEXT:    pcmpgtd %xmm4, %xmm23123; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm13124; SSE2-SSSE3-NEXT:    pandn %xmm3, %xmm23125; SSE2-SSSE3-NEXT:    por %xmm1, %xmm23126; SSE2-SSSE3-NEXT:    packuswb %xmm7, %xmm23127; SSE2-SSSE3-NEXT:    packuswb %xmm2, %xmm03128; SSE2-SSSE3-NEXT:    retq3129;3130; SSE41-LABEL: trunc_usat_v16i32_v16i8:3131; SSE41:       # %bb.0:3132; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = [255,255,255,255]3133; SSE41-NEXT:    movdqa 16(%rdi), %xmm23134; SSE41-NEXT:    pminud %xmm1, %xmm23135; SSE41-NEXT:    movdqa (%rdi), %xmm03136; SSE41-NEXT:    pminud %xmm1, %xmm03137; SSE41-NEXT:    packusdw %xmm2, %xmm03138; SSE41-NEXT:    movdqa 48(%rdi), %xmm23139; SSE41-NEXT:    pminud %xmm1, %xmm23140; SSE41-NEXT:    pminud 32(%rdi), %xmm13141; SSE41-NEXT:    packusdw %xmm2, %xmm13142; SSE41-NEXT:    packuswb %xmm1, %xmm03143; SSE41-NEXT:    retq3144;3145; AVX1-LABEL: trunc_usat_v16i32_v16i8:3146; AVX1:       # %bb.0:3147; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm0 = [255,255,255,255]3148; AVX1-NEXT:    vpminud 16(%rdi), %xmm0, %xmm13149; AVX1-NEXT:    vpminud (%rdi), %xmm0, %xmm23150; AVX1-NEXT:    vpackusdw %xmm1, %xmm2, %xmm13151; AVX1-NEXT:    vpminud 48(%rdi), %xmm0, %xmm23152; AVX1-NEXT:    vpminud 32(%rdi), %xmm0, %xmm03153; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm03154; AVX1-NEXT:    vpackuswb %xmm0, %xmm1, %xmm03155; AVX1-NEXT:    retq3156;3157; AVX2-LABEL: trunc_usat_v16i32_v16i8:3158; AVX2:       # %bb.0:3159; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255]3160; AVX2-NEXT:    vpminud 32(%rdi), %ymm0, %ymm13161; AVX2-NEXT:    vpminud (%rdi), %ymm0, %ymm03162; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm03163; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm13164; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm03165; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]3166; AVX2-NEXT:    vzeroupper3167; AVX2-NEXT:    retq3168;3169; AVX512-LABEL: trunc_usat_v16i32_v16i8:3170; AVX512:       # %bb.0:3171; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm03172; AVX512-NEXT:    vpmovusdb %zmm0, %xmm03173; AVX512-NEXT:    vzeroupper3174; AVX512-NEXT:    retq3175;3176; SKX-LABEL: trunc_usat_v16i32_v16i8:3177; SKX:       # %bb.0:3178; SKX-NEXT:    vmovdqa64 (%rdi), %zmm03179; SKX-NEXT:    vpmovusdb %zmm0, %xmm03180; SKX-NEXT:    vzeroupper3181; SKX-NEXT:    retq3182  %a0 = load <16 x i32>, ptr %p03183  %1 = icmp ult <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>3184  %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>3185  %3 = trunc <16 x i32> %2 to <16 x i8>3186  ret <16 x i8> %33187}3188 3189define void @trunc_usat_v16i32_v16i8_store(ptr %p0, ptr %p1) {3190; SSE2-SSSE3-LABEL: trunc_usat_v16i32_v16i8_store:3191; SSE2-SSSE3:       # %bb.0:3192; SSE2-SSSE3-NEXT:    movdqa (%rdi), %xmm63193; SSE2-SSSE3-NEXT:    movdqa 16(%rdi), %xmm53194; SSE2-SSSE3-NEXT:    movdqa 32(%rdi), %xmm03195; SSE2-SSSE3-NEXT:    movdqa 48(%rdi), %xmm43196; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255]3197; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]3198; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm73199; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm73200; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [2147483903,2147483903,2147483903,2147483903]3201; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm83202; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm83203; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm53204; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm83205; SSE2-SSSE3-NEXT:    por %xmm5, %xmm83206; SSE2-SSSE3-NEXT:    movdqa %xmm6, %xmm73207; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm73208; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm53209; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm53210; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm63211; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm53212; SSE2-SSSE3-NEXT:    por %xmm6, %xmm53213; SSE2-SSSE3-NEXT:    packuswb %xmm8, %xmm53214; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm63215; SSE2-SSSE3-NEXT:    pxor %xmm3, %xmm63216; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm73217; SSE2-SSSE3-NEXT:    pcmpgtd %xmm6, %xmm73218; SSE2-SSSE3-NEXT:    pand %xmm7, %xmm43219; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm73220; SSE2-SSSE3-NEXT:    por %xmm4, %xmm73221; SSE2-SSSE3-NEXT:    pxor %xmm0, %xmm33222; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm13223; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm03224; SSE2-SSSE3-NEXT:    pandn %xmm2, %xmm13225; SSE2-SSSE3-NEXT:    por %xmm0, %xmm13226; SSE2-SSSE3-NEXT:    packuswb %xmm7, %xmm13227; SSE2-SSSE3-NEXT:    packuswb %xmm1, %xmm53228; SSE2-SSSE3-NEXT:    movdqa %xmm5, (%rsi)3229; SSE2-SSSE3-NEXT:    retq3230;3231; SSE41-LABEL: trunc_usat_v16i32_v16i8_store:3232; SSE41:       # %bb.0:3233; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = [255,255,255,255]3234; SSE41-NEXT:    movdqa 16(%rdi), %xmm13235; SSE41-NEXT:    pminud %xmm0, %xmm13236; SSE41-NEXT:    movdqa (%rdi), %xmm23237; SSE41-NEXT:    pminud %xmm0, %xmm23238; SSE41-NEXT:    packusdw %xmm1, %xmm23239; SSE41-NEXT:    movdqa 48(%rdi), %xmm13240; SSE41-NEXT:    pminud %xmm0, %xmm13241; SSE41-NEXT:    pminud 32(%rdi), %xmm03242; SSE41-NEXT:    packusdw %xmm1, %xmm03243; SSE41-NEXT:    packuswb %xmm0, %xmm23244; SSE41-NEXT:    movdqa %xmm2, (%rsi)3245; SSE41-NEXT:    retq3246;3247; AVX1-LABEL: trunc_usat_v16i32_v16i8_store:3248; AVX1:       # %bb.0:3249; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm0 = [255,255,255,255]3250; AVX1-NEXT:    vpminud 16(%rdi), %xmm0, %xmm13251; AVX1-NEXT:    vpminud (%rdi), %xmm0, %xmm23252; AVX1-NEXT:    vpackusdw %xmm1, %xmm2, %xmm13253; AVX1-NEXT:    vpminud 48(%rdi), %xmm0, %xmm23254; AVX1-NEXT:    vpminud 32(%rdi), %xmm0, %xmm03255; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm03256; AVX1-NEXT:    vpackuswb %xmm0, %xmm1, %xmm03257; AVX1-NEXT:    vmovdqa %xmm0, (%rsi)3258; AVX1-NEXT:    retq3259;3260; AVX2-LABEL: trunc_usat_v16i32_v16i8_store:3261; AVX2:       # %bb.0:3262; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255]3263; AVX2-NEXT:    vpminud 32(%rdi), %ymm0, %ymm13264; AVX2-NEXT:    vpminud (%rdi), %ymm0, %ymm03265; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm03266; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm13267; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm03268; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]3269; AVX2-NEXT:    vmovdqa %xmm0, (%rsi)3270; AVX2-NEXT:    vzeroupper3271; AVX2-NEXT:    retq3272;3273; AVX512-LABEL: trunc_usat_v16i32_v16i8_store:3274; AVX512:       # %bb.0:3275; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm03276; AVX512-NEXT:    vpmovusdb %zmm0, (%rsi)3277; AVX512-NEXT:    vzeroupper3278; AVX512-NEXT:    retq3279;3280; SKX-LABEL: trunc_usat_v16i32_v16i8_store:3281; SKX:       # %bb.0:3282; SKX-NEXT:    vmovdqa64 (%rdi), %zmm03283; SKX-NEXT:    vpmovusdb %zmm0, (%rsi)3284; SKX-NEXT:    vzeroupper3285; SKX-NEXT:    retq3286  %a0 = load <16 x i32>, ptr %p03287  %1 = icmp ult <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>3288  %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>3289  %3 = trunc <16 x i32> %2 to <16 x i8>3290  store <16 x i8> %3, ptr %p13291  ret void3292}3293 3294define <8 x i8> @trunc_usat_v8i16_v8i8(<8 x i16> %a0) {3295; SSE2-SSSE3-LABEL: trunc_usat_v8i16_v8i8:3296; SSE2-SSSE3:       # %bb.0:3297; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm13298; SSE2-SSSE3-NEXT:    psubusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13299; SSE2-SSSE3-NEXT:    psubw %xmm1, %xmm03300; SSE2-SSSE3-NEXT:    packuswb %xmm0, %xmm03301; SSE2-SSSE3-NEXT:    retq3302;3303; SSE41-LABEL: trunc_usat_v8i16_v8i8:3304; SSE41:       # %bb.0:3305; SSE41-NEXT:    pminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03306; SSE41-NEXT:    packuswb %xmm0, %xmm03307; SSE41-NEXT:    retq3308;3309; AVX-LABEL: trunc_usat_v8i16_v8i8:3310; AVX:       # %bb.0:3311; AVX-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03312; AVX-NEXT:    vpackuswb %xmm0, %xmm0, %xmm03313; AVX-NEXT:    retq3314;3315; AVX512F-LABEL: trunc_usat_v8i16_v8i8:3316; AVX512F:       # %bb.0:3317; AVX512F-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03318; AVX512F-NEXT:    vpackuswb %xmm0, %xmm0, %xmm03319; AVX512F-NEXT:    retq3320;3321; AVX512VL-LABEL: trunc_usat_v8i16_v8i8:3322; AVX512VL:       # %bb.0:3323; AVX512VL-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03324; AVX512VL-NEXT:    vpackuswb %xmm0, %xmm0, %xmm03325; AVX512VL-NEXT:    retq3326;3327; AVX512BW-LABEL: trunc_usat_v8i16_v8i8:3328; AVX512BW:       # %bb.0:3329; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm03330; AVX512BW-NEXT:    vpmovuswb %zmm0, %ymm03331; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03332; AVX512BW-NEXT:    vzeroupper3333; AVX512BW-NEXT:    retq3334;3335; AVX512BWVL-LABEL: trunc_usat_v8i16_v8i8:3336; AVX512BWVL:       # %bb.0:3337; AVX512BWVL-NEXT:    vpmovuswb %xmm0, %xmm03338; AVX512BWVL-NEXT:    retq3339;3340; SKX-LABEL: trunc_usat_v8i16_v8i8:3341; SKX:       # %bb.0:3342; SKX-NEXT:    vpmovuswb %xmm0, %xmm03343; SKX-NEXT:    retq3344  %1 = icmp ult <8 x i16> %a0, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>3345  %2 = select <8 x i1> %1, <8 x i16> %a0, <8 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>3346  %3 = trunc <8 x i16> %2 to <8 x i8>3347  ret <8 x i8> %33348}3349 3350define void @trunc_usat_v8i16_v8i8_store(<8 x i16> %a0, ptr%p1) {3351; SSE2-SSSE3-LABEL: trunc_usat_v8i16_v8i8_store:3352; SSE2-SSSE3:       # %bb.0:3353; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm13354; SSE2-SSSE3-NEXT:    psubusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13355; SSE2-SSSE3-NEXT:    psubw %xmm1, %xmm03356; SSE2-SSSE3-NEXT:    packuswb %xmm0, %xmm03357; SSE2-SSSE3-NEXT:    movq %xmm0, (%rdi)3358; SSE2-SSSE3-NEXT:    retq3359;3360; SSE41-LABEL: trunc_usat_v8i16_v8i8_store:3361; SSE41:       # %bb.0:3362; SSE41-NEXT:    pminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03363; SSE41-NEXT:    packuswb %xmm0, %xmm03364; SSE41-NEXT:    movq %xmm0, (%rdi)3365; SSE41-NEXT:    retq3366;3367; AVX-LABEL: trunc_usat_v8i16_v8i8_store:3368; AVX:       # %bb.0:3369; AVX-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03370; AVX-NEXT:    vpackuswb %xmm0, %xmm0, %xmm03371; AVX-NEXT:    vmovq %xmm0, (%rdi)3372; AVX-NEXT:    retq3373;3374; AVX512F-LABEL: trunc_usat_v8i16_v8i8_store:3375; AVX512F:       # %bb.0:3376; AVX512F-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03377; AVX512F-NEXT:    vpackuswb %xmm0, %xmm0, %xmm03378; AVX512F-NEXT:    vmovq %xmm0, (%rdi)3379; AVX512F-NEXT:    retq3380;3381; AVX512VL-LABEL: trunc_usat_v8i16_v8i8_store:3382; AVX512VL:       # %bb.0:3383; AVX512VL-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03384; AVX512VL-NEXT:    vpackuswb %xmm0, %xmm0, %xmm03385; AVX512VL-NEXT:    vmovq %xmm0, (%rdi)3386; AVX512VL-NEXT:    retq3387;3388; AVX512BW-LABEL: trunc_usat_v8i16_v8i8_store:3389; AVX512BW:       # %bb.0:3390; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm03391; AVX512BW-NEXT:    vpmovuswb %zmm0, %ymm03392; AVX512BW-NEXT:    vmovq %xmm0, (%rdi)3393; AVX512BW-NEXT:    vzeroupper3394; AVX512BW-NEXT:    retq3395;3396; AVX512BWVL-LABEL: trunc_usat_v8i16_v8i8_store:3397; AVX512BWVL:       # %bb.0:3398; AVX512BWVL-NEXT:    vpmovuswb %xmm0, (%rdi)3399; AVX512BWVL-NEXT:    retq3400;3401; SKX-LABEL: trunc_usat_v8i16_v8i8_store:3402; SKX:       # %bb.0:3403; SKX-NEXT:    vpmovuswb %xmm0, (%rdi)3404; SKX-NEXT:    retq3405  %1 = icmp ult <8 x i16> %a0, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>3406  %2 = select <8 x i1> %1, <8 x i16> %a0, <8 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>3407  %3 = trunc <8 x i16> %2 to <8 x i8>3408  store <8 x i8> %3, ptr%p13409  ret void3410}3411 3412define <16 x i8> @trunc_usat_v16i16_v16i8(<16 x i16> %a0) {3413; SSE2-SSSE3-LABEL: trunc_usat_v16i16_v16i8:3414; SSE2-SSSE3:       # %bb.0:3415; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]3416; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm33417; SSE2-SSSE3-NEXT:    psubusw %xmm2, %xmm33418; SSE2-SSSE3-NEXT:    psubw %xmm3, %xmm13419; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm33420; SSE2-SSSE3-NEXT:    psubusw %xmm2, %xmm33421; SSE2-SSSE3-NEXT:    psubw %xmm3, %xmm03422; SSE2-SSSE3-NEXT:    packuswb %xmm1, %xmm03423; SSE2-SSSE3-NEXT:    retq3424;3425; SSE41-LABEL: trunc_usat_v16i16_v16i8:3426; SSE41:       # %bb.0:3427; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]3428; SSE41-NEXT:    pminuw %xmm2, %xmm13429; SSE41-NEXT:    pminuw %xmm2, %xmm03430; SSE41-NEXT:    packuswb %xmm1, %xmm03431; SSE41-NEXT:    retq3432;3433; AVX1-LABEL: trunc_usat_v16i16_v16i8:3434; AVX1:       # %bb.0:3435; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13436; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]3437; AVX1-NEXT:    vpminuw %xmm2, %xmm1, %xmm13438; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm03439; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm03440; AVX1-NEXT:    vzeroupper3441; AVX1-NEXT:    retq3442;3443; AVX2-LABEL: trunc_usat_v16i16_v16i8:3444; AVX2:       # %bb.0:3445; AVX2-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03446; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm13447; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm03448; AVX2-NEXT:    vzeroupper3449; AVX2-NEXT:    retq3450;3451; AVX512F-LABEL: trunc_usat_v16i16_v16i8:3452; AVX512F:       # %bb.0:3453; AVX512F-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03454; 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],zero3455; AVX512F-NEXT:    vpmovdb %zmm0, %xmm03456; AVX512F-NEXT:    vzeroupper3457; AVX512F-NEXT:    retq3458;3459; AVX512VL-LABEL: trunc_usat_v16i16_v16i8:3460; AVX512VL:       # %bb.0:3461; AVX512VL-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03462; 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],zero3463; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm03464; AVX512VL-NEXT:    vzeroupper3465; AVX512VL-NEXT:    retq3466;3467; AVX512BW-LABEL: trunc_usat_v16i16_v16i8:3468; AVX512BW:       # %bb.0:3469; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm03470; AVX512BW-NEXT:    vpmovuswb %zmm0, %ymm03471; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03472; AVX512BW-NEXT:    vzeroupper3473; AVX512BW-NEXT:    retq3474;3475; AVX512BWVL-LABEL: trunc_usat_v16i16_v16i8:3476; AVX512BWVL:       # %bb.0:3477; AVX512BWVL-NEXT:    vpmovuswb %ymm0, %xmm03478; AVX512BWVL-NEXT:    vzeroupper3479; AVX512BWVL-NEXT:    retq3480;3481; SKX-LABEL: trunc_usat_v16i16_v16i8:3482; SKX:       # %bb.0:3483; SKX-NEXT:    vpmovuswb %ymm0, %xmm03484; SKX-NEXT:    vzeroupper3485; SKX-NEXT:    retq3486  %1 = icmp ult <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>3487  %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>3488  %3 = trunc <16 x i16> %2 to <16 x i8>3489  ret <16 x i8> %33490}3491 3492define <32 x i8> @trunc_usat_v32i16_v32i8(ptr %p0) {3493; SSE2-SSSE3-LABEL: trunc_usat_v32i16_v32i8:3494; SSE2-SSSE3:       # %bb.0:3495; SSE2-SSSE3-NEXT:    movdqa (%rdi), %xmm03496; SSE2-SSSE3-NEXT:    movdqa 16(%rdi), %xmm23497; SSE2-SSSE3-NEXT:    movdqa 32(%rdi), %xmm13498; SSE2-SSSE3-NEXT:    movdqa 48(%rdi), %xmm33499; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]3500; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm53501; SSE2-SSSE3-NEXT:    psubusw %xmm4, %xmm53502; SSE2-SSSE3-NEXT:    psubw %xmm5, %xmm33503; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm53504; SSE2-SSSE3-NEXT:    psubusw %xmm4, %xmm53505; SSE2-SSSE3-NEXT:    psubw %xmm5, %xmm13506; SSE2-SSSE3-NEXT:    packuswb %xmm3, %xmm13507; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm33508; SSE2-SSSE3-NEXT:    psubusw %xmm4, %xmm33509; SSE2-SSSE3-NEXT:    psubw %xmm3, %xmm23510; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm33511; SSE2-SSSE3-NEXT:    psubusw %xmm4, %xmm33512; SSE2-SSSE3-NEXT:    psubw %xmm3, %xmm03513; SSE2-SSSE3-NEXT:    packuswb %xmm2, %xmm03514; SSE2-SSSE3-NEXT:    retq3515;3516; SSE41-LABEL: trunc_usat_v32i16_v32i8:3517; SSE41:       # %bb.0:3518; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]3519; SSE41-NEXT:    movdqa 48(%rdi), %xmm23520; SSE41-NEXT:    pminuw %xmm0, %xmm23521; SSE41-NEXT:    movdqa 32(%rdi), %xmm13522; SSE41-NEXT:    pminuw %xmm0, %xmm13523; SSE41-NEXT:    packuswb %xmm2, %xmm13524; SSE41-NEXT:    movdqa 16(%rdi), %xmm23525; SSE41-NEXT:    pminuw %xmm0, %xmm23526; SSE41-NEXT:    pminuw (%rdi), %xmm03527; SSE41-NEXT:    packuswb %xmm2, %xmm03528; SSE41-NEXT:    retq3529;3530; AVX1-LABEL: trunc_usat_v32i16_v32i8:3531; AVX1:       # %bb.0:3532; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]3533; AVX1-NEXT:    vpminuw 16(%rdi), %xmm0, %xmm13534; AVX1-NEXT:    vpminuw (%rdi), %xmm0, %xmm23535; AVX1-NEXT:    vpackuswb %xmm1, %xmm2, %xmm13536; AVX1-NEXT:    vpminuw 48(%rdi), %xmm0, %xmm23537; AVX1-NEXT:    vpminuw 32(%rdi), %xmm0, %xmm03538; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm03539; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03540; AVX1-NEXT:    retq3541;3542; AVX2-LABEL: trunc_usat_v32i16_v32i8:3543; AVX2:       # %bb.0:3544; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]3545; AVX2-NEXT:    vpminuw 32(%rdi), %ymm0, %ymm13546; AVX2-NEXT:    vpminuw (%rdi), %ymm0, %ymm03547; AVX2-NEXT:    vpackuswb %ymm1, %ymm0, %ymm03548; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]3549; AVX2-NEXT:    retq3550;3551; AVX512F-LABEL: trunc_usat_v32i16_v32i8:3552; AVX512F:       # %bb.0:3553; AVX512F-NEXT:    vpbroadcastw {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]3554; AVX512F-NEXT:    vpminuw 32(%rdi), %ymm0, %ymm13555; AVX512F-NEXT:    vpminuw (%rdi), %ymm0, %ymm03556; AVX512F-NEXT:    vpackuswb %ymm1, %ymm0, %ymm03557; AVX512F-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]3558; AVX512F-NEXT:    retq3559;3560; AVX512VL-LABEL: trunc_usat_v32i16_v32i8:3561; AVX512VL:       # %bb.0:3562; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]3563; AVX512VL-NEXT:    vpminuw 32(%rdi), %ymm0, %ymm13564; AVX512VL-NEXT:    vpminuw (%rdi), %ymm0, %ymm03565; AVX512VL-NEXT:    vpackuswb %ymm1, %ymm0, %ymm03566; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]3567; AVX512VL-NEXT:    retq3568;3569; AVX512BW-LABEL: trunc_usat_v32i16_v32i8:3570; AVX512BW:       # %bb.0:3571; AVX512BW-NEXT:    vmovdqa64 (%rdi), %zmm03572; AVX512BW-NEXT:    vpmovuswb %zmm0, %ymm03573; AVX512BW-NEXT:    retq3574;3575; AVX512BWVL-LABEL: trunc_usat_v32i16_v32i8:3576; AVX512BWVL:       # %bb.0:3577; AVX512BWVL-NEXT:    vmovdqa64 (%rdi), %zmm03578; AVX512BWVL-NEXT:    vpmovuswb %zmm0, %ymm03579; AVX512BWVL-NEXT:    retq3580;3581; SKX-LABEL: trunc_usat_v32i16_v32i8:3582; SKX:       # %bb.0:3583; SKX-NEXT:    vmovdqa64 (%rdi), %zmm03584; SKX-NEXT:    vpmovuswb %zmm0, %ymm03585; SKX-NEXT:    retq3586  %a0 = load <32 x i16>, ptr %p03587  %1 = icmp ult <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>3588  %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>3589  %3 = trunc <32 x i16> %2 to <32 x i8>3590  ret <32 x i8> %33591}3592 3593define <32 x i8> @trunc_usat_v32i32_v32i8(ptr %p0) {3594; SSE2-SSSE3-LABEL: trunc_usat_v32i32_v32i8:3595; SSE2-SSSE3:       # %bb.0:3596; SSE2-SSSE3-NEXT:    movdqa (%rdi), %xmm73597; SSE2-SSSE3-NEXT:    movdqa 16(%rdi), %xmm03598; SSE2-SSSE3-NEXT:    movdqa 32(%rdi), %xmm23599; SSE2-SSSE3-NEXT:    movdqa 48(%rdi), %xmm53600; SSE2-SSSE3-NEXT:    movdqa 96(%rdi), %xmm83601; SSE2-SSSE3-NEXT:    movdqa 112(%rdi), %xmm93602; SSE2-SSSE3-NEXT:    movdqa 64(%rdi), %xmm103603; SSE2-SSSE3-NEXT:    movdqa 80(%rdi), %xmm13604; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255]3605; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]3606; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm113607; SSE2-SSSE3-NEXT:    pxor %xmm6, %xmm113608; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [2147483903,2147483903,2147483903,2147483903]3609; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm123610; SSE2-SSSE3-NEXT:    pcmpgtd %xmm11, %xmm123611; SSE2-SSSE3-NEXT:    pand %xmm12, %xmm13612; SSE2-SSSE3-NEXT:    pandn %xmm4, %xmm123613; SSE2-SSSE3-NEXT:    por %xmm1, %xmm123614; SSE2-SSSE3-NEXT:    movdqa %xmm10, %xmm113615; SSE2-SSSE3-NEXT:    pxor %xmm6, %xmm113616; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm13617; SSE2-SSSE3-NEXT:    pcmpgtd %xmm11, %xmm13618; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm103619; SSE2-SSSE3-NEXT:    pandn %xmm4, %xmm13620; SSE2-SSSE3-NEXT:    por %xmm10, %xmm13621; SSE2-SSSE3-NEXT:    packuswb %xmm12, %xmm13622; SSE2-SSSE3-NEXT:    movdqa %xmm9, %xmm103623; SSE2-SSSE3-NEXT:    pxor %xmm6, %xmm103624; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm113625; SSE2-SSSE3-NEXT:    pcmpgtd %xmm10, %xmm113626; SSE2-SSSE3-NEXT:    pand %xmm11, %xmm93627; SSE2-SSSE3-NEXT:    pandn %xmm4, %xmm113628; SSE2-SSSE3-NEXT:    por %xmm9, %xmm113629; SSE2-SSSE3-NEXT:    movdqa %xmm8, %xmm93630; SSE2-SSSE3-NEXT:    pxor %xmm6, %xmm93631; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm103632; SSE2-SSSE3-NEXT:    pcmpgtd %xmm9, %xmm103633; SSE2-SSSE3-NEXT:    pand %xmm10, %xmm83634; SSE2-SSSE3-NEXT:    pandn %xmm4, %xmm103635; SSE2-SSSE3-NEXT:    por %xmm8, %xmm103636; SSE2-SSSE3-NEXT:    packuswb %xmm11, %xmm103637; SSE2-SSSE3-NEXT:    packuswb %xmm10, %xmm13638; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm83639; SSE2-SSSE3-NEXT:    pxor %xmm6, %xmm83640; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm93641; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm93642; SSE2-SSSE3-NEXT:    pand %xmm9, %xmm03643; SSE2-SSSE3-NEXT:    pandn %xmm4, %xmm93644; SSE2-SSSE3-NEXT:    por %xmm0, %xmm93645; SSE2-SSSE3-NEXT:    movdqa %xmm7, %xmm83646; SSE2-SSSE3-NEXT:    pxor %xmm6, %xmm83647; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm03648; SSE2-SSSE3-NEXT:    pcmpgtd %xmm8, %xmm03649; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm73650; SSE2-SSSE3-NEXT:    pandn %xmm4, %xmm03651; SSE2-SSSE3-NEXT:    por %xmm7, %xmm03652; SSE2-SSSE3-NEXT:    packuswb %xmm9, %xmm03653; SSE2-SSSE3-NEXT:    movdqa %xmm5, %xmm73654; SSE2-SSSE3-NEXT:    pxor %xmm6, %xmm73655; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm83656; SSE2-SSSE3-NEXT:    pcmpgtd %xmm7, %xmm83657; SSE2-SSSE3-NEXT:    pand %xmm8, %xmm53658; SSE2-SSSE3-NEXT:    pandn %xmm4, %xmm83659; SSE2-SSSE3-NEXT:    por %xmm5, %xmm83660; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm63661; SSE2-SSSE3-NEXT:    pcmpgtd %xmm6, %xmm33662; SSE2-SSSE3-NEXT:    pand %xmm3, %xmm23663; SSE2-SSSE3-NEXT:    pandn %xmm4, %xmm33664; SSE2-SSSE3-NEXT:    por %xmm2, %xmm33665; SSE2-SSSE3-NEXT:    packuswb %xmm8, %xmm33666; SSE2-SSSE3-NEXT:    packuswb %xmm3, %xmm03667; SSE2-SSSE3-NEXT:    retq3668;3669; SSE41-LABEL: trunc_usat_v32i32_v32i8:3670; SSE41:       # %bb.0:3671; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm2 = [255,255,255,255]3672; SSE41-NEXT:    movdqa 80(%rdi), %xmm03673; SSE41-NEXT:    pminud %xmm2, %xmm03674; SSE41-NEXT:    movdqa 64(%rdi), %xmm13675; SSE41-NEXT:    pminud %xmm2, %xmm13676; SSE41-NEXT:    packusdw %xmm0, %xmm13677; SSE41-NEXT:    movdqa 112(%rdi), %xmm03678; SSE41-NEXT:    pminud %xmm2, %xmm03679; SSE41-NEXT:    movdqa 96(%rdi), %xmm33680; SSE41-NEXT:    pminud %xmm2, %xmm33681; SSE41-NEXT:    packusdw %xmm0, %xmm33682; SSE41-NEXT:    packuswb %xmm3, %xmm13683; SSE41-NEXT:    movdqa 16(%rdi), %xmm33684; SSE41-NEXT:    pminud %xmm2, %xmm33685; SSE41-NEXT:    movdqa (%rdi), %xmm03686; SSE41-NEXT:    pminud %xmm2, %xmm03687; SSE41-NEXT:    packusdw %xmm3, %xmm03688; SSE41-NEXT:    movdqa 48(%rdi), %xmm33689; SSE41-NEXT:    pminud %xmm2, %xmm33690; SSE41-NEXT:    pminud 32(%rdi), %xmm23691; SSE41-NEXT:    packusdw %xmm3, %xmm23692; SSE41-NEXT:    packuswb %xmm2, %xmm03693; SSE41-NEXT:    retq3694;3695; AVX1-LABEL: trunc_usat_v32i32_v32i8:3696; AVX1:       # %bb.0:3697; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm0 = [255,255,255,255]3698; AVX1-NEXT:    vpminud 16(%rdi), %xmm0, %xmm13699; AVX1-NEXT:    vpminud (%rdi), %xmm0, %xmm23700; AVX1-NEXT:    vpackusdw %xmm1, %xmm2, %xmm13701; AVX1-NEXT:    vpminud 48(%rdi), %xmm0, %xmm23702; AVX1-NEXT:    vpminud 32(%rdi), %xmm0, %xmm33703; AVX1-NEXT:    vpackusdw %xmm2, %xmm3, %xmm23704; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm13705; AVX1-NEXT:    vpminud 80(%rdi), %xmm0, %xmm23706; AVX1-NEXT:    vpminud 64(%rdi), %xmm0, %xmm33707; AVX1-NEXT:    vpackusdw %xmm2, %xmm3, %xmm23708; AVX1-NEXT:    vpminud 112(%rdi), %xmm0, %xmm33709; AVX1-NEXT:    vpminud 96(%rdi), %xmm0, %xmm03710; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm03711; AVX1-NEXT:    vpackuswb %xmm0, %xmm2, %xmm03712; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03713; AVX1-NEXT:    retq3714;3715; AVX2-LABEL: trunc_usat_v32i32_v32i8:3716; AVX2:       # %bb.0:3717; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255]3718; AVX2-NEXT:    vpminud 32(%rdi), %ymm0, %ymm13719; AVX2-NEXT:    vpminud (%rdi), %ymm0, %ymm23720; AVX2-NEXT:    vpackusdw %ymm1, %ymm2, %ymm13721; AVX2-NEXT:    vpminud 96(%rdi), %ymm0, %ymm23722; AVX2-NEXT:    vpminud 64(%rdi), %ymm0, %ymm03723; AVX2-NEXT:    vpackusdw %ymm2, %ymm0, %ymm03724; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]3725; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]3726; AVX2-NEXT:    vpackuswb %ymm0, %ymm1, %ymm03727; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]3728; AVX2-NEXT:    retq3729;3730; AVX512-LABEL: trunc_usat_v32i32_v32i8:3731; AVX512:       # %bb.0:3732; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm03733; AVX512-NEXT:    vmovdqa64 64(%rdi), %zmm13734; AVX512-NEXT:    vpmovusdb %zmm0, %xmm03735; AVX512-NEXT:    vpmovusdb %zmm1, %xmm13736; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm03737; AVX512-NEXT:    retq3738;3739; SKX-LABEL: trunc_usat_v32i32_v32i8:3740; SKX:       # %bb.0:3741; SKX-NEXT:    vmovdqa64 (%rdi), %zmm03742; SKX-NEXT:    vmovdqa64 64(%rdi), %zmm13743; SKX-NEXT:    vpmovusdb %zmm0, %xmm03744; SKX-NEXT:    vpmovusdb %zmm1, %xmm13745; SKX-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm03746; SKX-NEXT:    retq3747  %a0 = load <32 x i32>, ptr %p03748  %1 = icmp ult <32 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, 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>3749  %2 = select <32 x i1> %1, <32 x i32> %a0, <32 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, 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>3750  %3 = trunc <32 x i32> %2 to <32 x i8>3751  ret <32 x i8> %33752}3753