brintos

brintos / llvm-project-archived public Read only

0
0
Text · 45.1 KiB · 0e9e95a Raw
1077 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=KNL3; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f,+avx512vl,+avx512bw,+avx512dq,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,SKX4; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f,+avx512vl,+avx512bw,+avx512dq,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,SKX5 6 attributes #0 = { nounwind }7 8define <16 x i8> @trunc_16x32_to_16x8(<16 x i32> %i) #0 {9; ALL-LABEL: trunc_16x32_to_16x8:10; ALL:       ## %bb.0:11; ALL-NEXT:    vpmovdb %zmm0, %xmm012; ALL-NEXT:    vzeroupper13; ALL-NEXT:    retq14  %x = trunc <16 x i32> %i to <16 x i8>15  ret <16 x i8> %x16}17 18define <8 x i16> @trunc_8x64_to_8x16(<8 x i64> %i) #0 {19; ALL-LABEL: trunc_8x64_to_8x16:20; ALL:       ## %bb.0:21; ALL-NEXT:    vpmovqw %zmm0, %xmm022; ALL-NEXT:    vzeroupper23; ALL-NEXT:    retq24  %x = trunc <8 x i64> %i to <8 x i16>25  ret <8 x i16> %x26}27 28define <16 x i16> @trunc_v16i32_to_v16i16(<16 x i32> %x) #0 {29; ALL-LABEL: trunc_v16i32_to_v16i16:30; ALL:       ## %bb.0:31; ALL-NEXT:    vpmovdw %zmm0, %ymm032; ALL-NEXT:    retq33  %1 = trunc <16 x i32> %x to <16 x i16>34  ret <16 x i16> %135}36 37define <8 x i8> @trunc_qb_512(<8 x i64> %i) #0 {38; ALL-LABEL: trunc_qb_512:39; ALL:       ## %bb.0:40; ALL-NEXT:    vpmovqb %zmm0, %xmm041; ALL-NEXT:    vzeroupper42; ALL-NEXT:    retq43  %x = trunc <8 x i64> %i to <8 x i8>44  ret <8 x i8> %x45}46 47define void @trunc_qb_512_mem(<8 x i64> %i, ptr %res) #0 {48; ALL-LABEL: trunc_qb_512_mem:49; ALL:       ## %bb.0:50; ALL-NEXT:    vpmovqb %zmm0, (%rdi)51; ALL-NEXT:    vzeroupper52; ALL-NEXT:    retq53    %x = trunc <8 x i64> %i to <8 x i8>54    store <8 x i8> %x, ptr %res55    ret void56}57 58define <4 x i8> @trunc_qb_256(<4 x i64> %i) #0 {59; KNL-LABEL: trunc_qb_256:60; KNL:       ## %bb.0:61; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm062; KNL-NEXT:    vpmovqb %zmm0, %xmm063; KNL-NEXT:    vzeroupper64; KNL-NEXT:    retq65;66; SKX-LABEL: trunc_qb_256:67; SKX:       ## %bb.0:68; SKX-NEXT:    vpmovqb %ymm0, %xmm069; SKX-NEXT:    vzeroupper70; SKX-NEXT:    retq71  %x = trunc <4 x i64> %i to <4 x i8>72  ret <4 x i8> %x73}74 75define void @trunc_qb_256_mem(<4 x i64> %i, ptr %res) #0 {76; KNL-LABEL: trunc_qb_256_mem:77; KNL:       ## %bb.0:78; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm079; KNL-NEXT:    vpmovqb %zmm0, %xmm080; KNL-NEXT:    vmovd %xmm0, (%rdi)81; KNL-NEXT:    vzeroupper82; KNL-NEXT:    retq83;84; SKX-LABEL: trunc_qb_256_mem:85; SKX:       ## %bb.0:86; SKX-NEXT:    vpmovqb %ymm0, (%rdi)87; SKX-NEXT:    vzeroupper88; SKX-NEXT:    retq89    %x = trunc <4 x i64> %i to <4 x i8>90    store <4 x i8> %x, ptr %res91    ret void92}93 94define <2 x i8> @trunc_qb_128(<2 x i64> %i) #0 {95; KNL-LABEL: trunc_qb_128:96; KNL:       ## %bb.0:97; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]98; KNL-NEXT:    retq99;100; SKX-LABEL: trunc_qb_128:101; SKX:       ## %bb.0:102; SKX-NEXT:    vpmovqb %xmm0, %xmm0103; SKX-NEXT:    retq104  %x = trunc <2 x i64> %i to <2 x i8>105  ret <2 x i8> %x106}107 108define void @trunc_qb_128_mem(<2 x i64> %i, ptr %res) #0 {109; KNL-LABEL: trunc_qb_128_mem:110; KNL:       ## %bb.0:111; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]112; KNL-NEXT:    vpextrw $0, %xmm0, (%rdi)113; KNL-NEXT:    retq114;115; SKX-LABEL: trunc_qb_128_mem:116; SKX:       ## %bb.0:117; SKX-NEXT:    vpmovqb %xmm0, (%rdi)118; SKX-NEXT:    retq119    %x = trunc <2 x i64> %i to <2 x i8>120    store <2 x i8> %x, ptr %res121    ret void122}123 124define <8 x i16> @trunc_qw_512(<8 x i64> %i) #0 {125; ALL-LABEL: trunc_qw_512:126; ALL:       ## %bb.0:127; ALL-NEXT:    vpmovqw %zmm0, %xmm0128; ALL-NEXT:    vzeroupper129; ALL-NEXT:    retq130  %x = trunc <8 x i64> %i to <8 x i16>131  ret <8 x i16> %x132}133 134define void @trunc_qw_512_mem(<8 x i64> %i, ptr %res) #0 {135; ALL-LABEL: trunc_qw_512_mem:136; ALL:       ## %bb.0:137; ALL-NEXT:    vpmovqw %zmm0, (%rdi)138; ALL-NEXT:    vzeroupper139; ALL-NEXT:    retq140    %x = trunc <8 x i64> %i to <8 x i16>141    store <8 x i16> %x, ptr %res142    ret void143}144 145define <4 x i16> @trunc_qw_256(<4 x i64> %i) #0 {146; KNL-LABEL: trunc_qw_256:147; KNL:       ## %bb.0:148; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0149; KNL-NEXT:    vpmovqw %zmm0, %xmm0150; KNL-NEXT:    vzeroupper151; KNL-NEXT:    retq152;153; SKX-LABEL: trunc_qw_256:154; SKX:       ## %bb.0:155; SKX-NEXT:    vpmovqw %ymm0, %xmm0156; SKX-NEXT:    vzeroupper157; SKX-NEXT:    retq158  %x = trunc <4 x i64> %i to <4 x i16>159  ret <4 x i16> %x160}161 162define void @trunc_qw_256_mem(<4 x i64> %i, ptr %res) #0 {163; KNL-LABEL: trunc_qw_256_mem:164; KNL:       ## %bb.0:165; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0166; KNL-NEXT:    vpmovqw %zmm0, %xmm0167; KNL-NEXT:    vmovq %xmm0, (%rdi)168; KNL-NEXT:    vzeroupper169; KNL-NEXT:    retq170;171; SKX-LABEL: trunc_qw_256_mem:172; SKX:       ## %bb.0:173; SKX-NEXT:    vpmovqw %ymm0, (%rdi)174; SKX-NEXT:    vzeroupper175; SKX-NEXT:    retq176    %x = trunc <4 x i64> %i to <4 x i16>177    store <4 x i16> %x, ptr %res178    ret void179}180 181define <2 x i16> @trunc_qw_128(<2 x i64> %i) #0 {182; KNL-LABEL: trunc_qw_128:183; KNL:       ## %bb.0:184; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]185; KNL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]186; KNL-NEXT:    retq187;188; SKX-LABEL: trunc_qw_128:189; SKX:       ## %bb.0:190; SKX-NEXT:    vpmovqw %xmm0, %xmm0191; SKX-NEXT:    retq192  %x = trunc <2 x i64> %i to <2 x i16>193  ret <2 x i16> %x194}195 196define void @trunc_qw_128_mem(<2 x i64> %i, ptr %res) #0 {197; KNL-LABEL: trunc_qw_128_mem:198; KNL:       ## %bb.0:199; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]200; KNL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]201; KNL-NEXT:    vmovd %xmm0, (%rdi)202; KNL-NEXT:    retq203;204; SKX-LABEL: trunc_qw_128_mem:205; SKX:       ## %bb.0:206; SKX-NEXT:    vpmovqw %xmm0, (%rdi)207; SKX-NEXT:    retq208    %x = trunc <2 x i64> %i to <2 x i16>209    store <2 x i16> %x, ptr %res210    ret void211}212 213define <8 x i32> @trunc_qd_512(<8 x i64> %i) #0 {214; ALL-LABEL: trunc_qd_512:215; ALL:       ## %bb.0:216; ALL-NEXT:    vpmovqd %zmm0, %ymm0217; ALL-NEXT:    retq218  %x = trunc <8 x i64> %i to <8 x i32>219  ret <8 x i32> %x220}221 222define void @trunc_qd_512_mem(<8 x i64> %i, ptr %res) #0 {223; ALL-LABEL: trunc_qd_512_mem:224; ALL:       ## %bb.0:225; ALL-NEXT:    vpmovqd %zmm0, (%rdi)226; ALL-NEXT:    vzeroupper227; ALL-NEXT:    retq228    %x = trunc <8 x i64> %i to <8 x i32>229    store <8 x i32> %x, ptr %res230    ret void231}232 233define <4 x i32> @trunc_qd_256(<4 x i64> %i) #0 {234; KNL-LABEL: trunc_qd_256:235; KNL:       ## %bb.0:236; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0237; KNL-NEXT:    vpmovqd %zmm0, %ymm0238; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0239; KNL-NEXT:    vzeroupper240; KNL-NEXT:    retq241;242; SKX-LABEL: trunc_qd_256:243; SKX:       ## %bb.0:244; SKX-NEXT:    vpmovqd %ymm0, %xmm0245; SKX-NEXT:    vzeroupper246; SKX-NEXT:    retq247  %x = trunc <4 x i64> %i to <4 x i32>248  ret <4 x i32> %x249}250 251define void @trunc_qd_256_mem(<4 x i64> %i, ptr %res) #0 {252; KNL-LABEL: trunc_qd_256_mem:253; KNL:       ## %bb.0:254; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0255; KNL-NEXT:    vpmovqd %zmm0, %ymm0256; KNL-NEXT:    vmovdqa %xmm0, (%rdi)257; KNL-NEXT:    vzeroupper258; KNL-NEXT:    retq259;260; SKX-LABEL: trunc_qd_256_mem:261; SKX:       ## %bb.0:262; SKX-NEXT:    vpmovqd %ymm0, (%rdi)263; SKX-NEXT:    vzeroupper264; SKX-NEXT:    retq265    %x = trunc <4 x i64> %i to <4 x i32>266    store <4 x i32> %x, ptr %res267    ret void268}269 270define <2 x i32> @trunc_qd_128(<2 x i64> %i) #0 {271; ALL-LABEL: trunc_qd_128:272; ALL:       ## %bb.0:273; ALL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]274; ALL-NEXT:    retq275  %x = trunc <2 x i64> %i to <2 x i32>276  ret <2 x i32> %x277}278 279define void @trunc_qd_128_mem(<2 x i64> %i, ptr %res) #0 {280; KNL-LABEL: trunc_qd_128_mem:281; KNL:       ## %bb.0:282; KNL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]283; KNL-NEXT:    vmovlps %xmm0, (%rdi)284; KNL-NEXT:    retq285;286; SKX-LABEL: trunc_qd_128_mem:287; SKX:       ## %bb.0:288; SKX-NEXT:    vpmovqd %xmm0, (%rdi)289; SKX-NEXT:    retq290    %x = trunc <2 x i64> %i to <2 x i32>291    store <2 x i32> %x, ptr %res292    ret void293}294 295define <16 x i8> @trunc_db_512(<16 x i32> %i) #0 {296; ALL-LABEL: trunc_db_512:297; ALL:       ## %bb.0:298; ALL-NEXT:    vpmovdb %zmm0, %xmm0299; ALL-NEXT:    vzeroupper300; ALL-NEXT:    retq301  %x = trunc <16 x i32> %i to <16 x i8>302  ret <16 x i8> %x303}304 305define void @trunc_db_512_mem(<16 x i32> %i, ptr %res) #0 {306; ALL-LABEL: trunc_db_512_mem:307; ALL:       ## %bb.0:308; ALL-NEXT:    vpmovdb %zmm0, (%rdi)309; ALL-NEXT:    vzeroupper310; ALL-NEXT:    retq311    %x = trunc <16 x i32> %i to <16 x i8>312    store <16 x i8> %x, ptr %res313    ret void314}315 316define <8 x i8> @trunc_db_256(<8 x i32> %i) #0 {317; KNL-LABEL: trunc_db_256:318; KNL:       ## %bb.0:319; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0320; KNL-NEXT:    vpmovdb %zmm0, %xmm0321; KNL-NEXT:    vzeroupper322; KNL-NEXT:    retq323;324; SKX-LABEL: trunc_db_256:325; SKX:       ## %bb.0:326; SKX-NEXT:    vpmovdb %ymm0, %xmm0327; SKX-NEXT:    vzeroupper328; SKX-NEXT:    retq329  %x = trunc <8 x i32> %i to <8 x i8>330  ret <8 x i8> %x331}332 333define void @trunc_db_256_mem(<8 x i32> %i, ptr %res) #0 {334; KNL-LABEL: trunc_db_256_mem:335; KNL:       ## %bb.0:336; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0337; KNL-NEXT:    vpmovdb %zmm0, %xmm0338; KNL-NEXT:    vmovq %xmm0, (%rdi)339; KNL-NEXT:    vzeroupper340; KNL-NEXT:    retq341;342; SKX-LABEL: trunc_db_256_mem:343; SKX:       ## %bb.0:344; SKX-NEXT:    vpmovdb %ymm0, (%rdi)345; SKX-NEXT:    vzeroupper346; SKX-NEXT:    retq347    %x = trunc <8 x i32> %i to <8 x i8>348    store <8 x i8> %x, ptr %res349    ret void350}351 352define <4 x i8> @trunc_db_128(<4 x i32> %i) #0 {353; KNL-LABEL: trunc_db_128:354; KNL:       ## %bb.0:355; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]356; KNL-NEXT:    retq357;358; SKX-LABEL: trunc_db_128:359; SKX:       ## %bb.0:360; SKX-NEXT:    vpmovdb %xmm0, %xmm0361; SKX-NEXT:    retq362  %x = trunc <4 x i32> %i to <4 x i8>363  ret <4 x i8> %x364}365 366define void @trunc_db_128_mem(<4 x i32> %i, ptr %res) #0 {367; KNL-LABEL: trunc_db_128_mem:368; KNL:       ## %bb.0:369; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]370; KNL-NEXT:    vmovd %xmm0, (%rdi)371; KNL-NEXT:    retq372;373; SKX-LABEL: trunc_db_128_mem:374; SKX:       ## %bb.0:375; SKX-NEXT:    vpmovdb %xmm0, (%rdi)376; SKX-NEXT:    retq377    %x = trunc <4 x i32> %i to <4 x i8>378    store <4 x i8> %x, ptr %res379    ret void380}381 382define <16 x i16> @trunc_dw_512(<16 x i32> %i) #0 {383; ALL-LABEL: trunc_dw_512:384; ALL:       ## %bb.0:385; ALL-NEXT:    vpmovdw %zmm0, %ymm0386; ALL-NEXT:    retq387  %x = trunc <16 x i32> %i to <16 x i16>388  ret <16 x i16> %x389}390 391define void @trunc_dw_512_mem(<16 x i32> %i, ptr %res) #0 {392; ALL-LABEL: trunc_dw_512_mem:393; ALL:       ## %bb.0:394; ALL-NEXT:    vpmovdw %zmm0, (%rdi)395; ALL-NEXT:    vzeroupper396; ALL-NEXT:    retq397    %x = trunc <16 x i32> %i to <16 x i16>398    store <16 x i16> %x, ptr %res399    ret void400}401 402define <8 x i16> @trunc_dw_256(<8 x i32> %i) #0 {403; KNL-LABEL: trunc_dw_256:404; KNL:       ## %bb.0:405; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0406; KNL-NEXT:    vpmovdw %zmm0, %ymm0407; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0408; KNL-NEXT:    vzeroupper409; KNL-NEXT:    retq410;411; SKX-LABEL: trunc_dw_256:412; SKX:       ## %bb.0:413; SKX-NEXT:    vpmovdw %ymm0, %xmm0414; SKX-NEXT:    vzeroupper415; SKX-NEXT:    retq416  %x = trunc <8 x i32> %i to <8 x i16>417  ret <8 x i16> %x418}419 420define void @trunc_dw_256_mem(<8 x i32> %i, ptr %res) #0 {421; KNL-LABEL: trunc_dw_256_mem:422; KNL:       ## %bb.0:423; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0424; KNL-NEXT:    vpmovdw %zmm0, %ymm0425; KNL-NEXT:    vmovdqa %xmm0, (%rdi)426; KNL-NEXT:    vzeroupper427; KNL-NEXT:    retq428;429; SKX-LABEL: trunc_dw_256_mem:430; SKX:       ## %bb.0:431; SKX-NEXT:    vpmovdw %ymm0, (%rdi)432; SKX-NEXT:    vzeroupper433; SKX-NEXT:    retq434    %x = trunc <8 x i32> %i to <8 x i16>435    store <8 x i16> %x, ptr %res436    ret void437}438 439define void @trunc_dw_128_mem(<4 x i32> %i, ptr %res) #0 {440; KNL-LABEL: trunc_dw_128_mem:441; KNL:       ## %bb.0:442; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u]443; KNL-NEXT:    vmovq %xmm0, (%rdi)444; KNL-NEXT:    retq445;446; SKX-LABEL: trunc_dw_128_mem:447; SKX:       ## %bb.0:448; SKX-NEXT:    vpmovdw %xmm0, (%rdi)449; SKX-NEXT:    retq450    %x = trunc <4 x i32> %i to <4 x i16>451    store <4 x i16> %x, ptr %res452    ret void453}454 455define <32 x i8> @trunc_wb_512(<32 x i16> %i) #0 {456; KNL-LABEL: trunc_wb_512:457; KNL:       ## %bb.0:458; KNL-NEXT:    vpmovzxwd {{.*#+}} zmm1 = 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],zero459; KNL-NEXT:    vpmovdb %zmm1, %xmm1460; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm0461; KNL-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],zero462; KNL-NEXT:    vpmovdb %zmm0, %xmm0463; KNL-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0464; KNL-NEXT:    retq465;466; SKX-LABEL: trunc_wb_512:467; SKX:       ## %bb.0:468; SKX-NEXT:    vpmovwb %zmm0, %ymm0469; SKX-NEXT:    retq470  %x = trunc <32 x i16> %i to <32 x i8>471  ret <32 x i8> %x472}473 474define void @trunc_wb_512_mem(<32 x i16> %i, ptr %res) #0 {475; KNL-LABEL: trunc_wb_512_mem:476; KNL:       ## %bb.0:477; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1478; KNL-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero479; KNL-NEXT:    vpmovdb %zmm1, 16(%rdi)480; KNL-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],zero481; KNL-NEXT:    vpmovdb %zmm0, (%rdi)482; KNL-NEXT:    vzeroupper483; KNL-NEXT:    retq484;485; SKX-LABEL: trunc_wb_512_mem:486; SKX:       ## %bb.0:487; SKX-NEXT:    vpmovwb %zmm0, (%rdi)488; SKX-NEXT:    vzeroupper489; SKX-NEXT:    retq490    %x = trunc <32 x i16> %i to <32 x i8>491    store <32 x i8> %x, ptr %res492    ret void493}494 495define <16 x i8> @trunc_wb_256(<16 x i16> %i) #0 {496; KNL-LABEL: trunc_wb_256:497; KNL:       ## %bb.0:498; KNL-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],zero499; KNL-NEXT:    vpmovdb %zmm0, %xmm0500; KNL-NEXT:    vzeroupper501; KNL-NEXT:    retq502;503; SKX-LABEL: trunc_wb_256:504; SKX:       ## %bb.0:505; SKX-NEXT:    vpmovwb %ymm0, %xmm0506; SKX-NEXT:    vzeroupper507; SKX-NEXT:    retq508  %x = trunc <16 x i16> %i to <16 x i8>509  ret <16 x i8> %x510}511 512define void @trunc_wb_256_mem(<16 x i16> %i, ptr %res) #0 {513; KNL-LABEL: trunc_wb_256_mem:514; KNL:       ## %bb.0:515; KNL-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],zero516; KNL-NEXT:    vpmovdb %zmm0, (%rdi)517; KNL-NEXT:    vzeroupper518; KNL-NEXT:    retq519;520; SKX-LABEL: trunc_wb_256_mem:521; SKX:       ## %bb.0:522; SKX-NEXT:    vpmovwb %ymm0, (%rdi)523; SKX-NEXT:    vzeroupper524; SKX-NEXT:    retq525    %x = trunc <16 x i16> %i to <16 x i8>526    store <16 x i8> %x, ptr %res527    ret void528}529 530define <16 x i8> @trunc_wb_256_mem_and_ret(<16 x i16> %i, ptr %res) #0 {531; KNL-LABEL: trunc_wb_256_mem_and_ret:532; KNL:       ## %bb.0:533; KNL-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],zero534; KNL-NEXT:    vpmovdb %zmm0, %xmm0535; KNL-NEXT:    vmovdqa %xmm0, (%rdi)536; KNL-NEXT:    vzeroupper537; KNL-NEXT:    retq538;539; SKX-LABEL: trunc_wb_256_mem_and_ret:540; SKX:       ## %bb.0:541; SKX-NEXT:    vpmovwb %ymm0, %xmm0542; SKX-NEXT:    vmovdqa %xmm0, (%rdi)543; SKX-NEXT:    vzeroupper544; SKX-NEXT:    retq545    %x = trunc <16 x i16> %i to <16 x i8>546    store <16 x i8> %x, ptr %res547    ret <16 x i8> %x548}549 550define <8 x i8> @trunc_wb_128(<8 x i16> %i) #0 {551; KNL-LABEL: trunc_wb_128:552; KNL:       ## %bb.0:553; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]554; KNL-NEXT:    retq555;556; SKX-LABEL: trunc_wb_128:557; SKX:       ## %bb.0:558; SKX-NEXT:    vpmovwb %xmm0, %xmm0559; SKX-NEXT:    retq560  %x = trunc <8 x i16> %i to <8 x i8>561  ret <8 x i8> %x562}563 564define void @trunc_wb_128_mem(<8 x i16> %i, ptr %res) #0 {565; KNL-LABEL: trunc_wb_128_mem:566; KNL:       ## %bb.0:567; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]568; KNL-NEXT:    vmovq %xmm0, (%rdi)569; KNL-NEXT:    retq570;571; SKX-LABEL: trunc_wb_128_mem:572; SKX:       ## %bb.0:573; SKX-NEXT:    vpmovwb %xmm0, (%rdi)574; SKX-NEXT:    retq575    %x = trunc <8 x i16> %i to <8 x i8>576    store <8 x i8> %x, ptr %res577    ret void578}579 580 581define void @usat_trunc_wb_256_mem(<16 x i16> %i, ptr %res) {582; KNL-LABEL: usat_trunc_wb_256_mem:583; KNL:       ## %bb.0:584; KNL-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0585; KNL-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],zero586; KNL-NEXT:    vpmovdb %zmm0, (%rdi)587; KNL-NEXT:    vzeroupper588; KNL-NEXT:    retq589;590; SKX-LABEL: usat_trunc_wb_256_mem:591; SKX:       ## %bb.0:592; SKX-NEXT:    vpmovuswb %ymm0, (%rdi)593; SKX-NEXT:    vzeroupper594; SKX-NEXT:    retq595  %x3 = icmp ult <16 x i16> %i, <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>596  %x5 = select <16 x i1> %x3, <16 x i16> %i, <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>597  %x6 = trunc <16 x i16> %x5 to <16 x i8>598  store <16 x i8> %x6, ptr %res, align 1599  ret void600}601 602define <16 x i8> @usat_trunc_wb_256(<16 x i16> %i) {603; KNL-LABEL: usat_trunc_wb_256:604; KNL:       ## %bb.0:605; KNL-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0606; KNL-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],zero607; KNL-NEXT:    vpmovdb %zmm0, %xmm0608; KNL-NEXT:    vzeroupper609; KNL-NEXT:    retq610;611; SKX-LABEL: usat_trunc_wb_256:612; SKX:       ## %bb.0:613; SKX-NEXT:    vpmovuswb %ymm0, %xmm0614; SKX-NEXT:    vzeroupper615; SKX-NEXT:    retq616  %x3 = icmp ult <16 x i16> %i, <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>617  %x5 = select <16 x i1> %x3, <16 x i16> %i, <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>618  %x6 = trunc <16 x i16> %x5 to <16 x i8>619  ret <16 x i8> %x6620}621 622define void @usat_trunc_wb_128_mem(<8 x i16> %i, ptr %res) {623; KNL-LABEL: usat_trunc_wb_128_mem:624; KNL:       ## %bb.0:625; KNL-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0626; KNL-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0627; KNL-NEXT:    vmovq %xmm0, (%rdi)628; KNL-NEXT:    retq629;630; SKX-LABEL: usat_trunc_wb_128_mem:631; SKX:       ## %bb.0:632; SKX-NEXT:    vpmovuswb %xmm0, (%rdi)633; SKX-NEXT:    retq634  %x3 = icmp ult <8 x i16> %i, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>635  %x5 = select <8 x i1> %x3, <8 x i16> %i, <8 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>636  %x6 = trunc <8 x i16> %x5 to <8 x i8>637  store <8 x i8> %x6, ptr %res, align 1638  ret void639}640 641define void @usat_trunc_db_512_mem(<16 x i32> %i, ptr %res) {642; ALL-LABEL: usat_trunc_db_512_mem:643; ALL:       ## %bb.0:644; ALL-NEXT:    vpmovusdb %zmm0, (%rdi)645; ALL-NEXT:    vzeroupper646; ALL-NEXT:    retq647  %x3 = icmp ult <16 x i32> %i, <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>648  %x5 = select <16 x i1> %x3, <16 x i32> %i, <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>649  %x6 = trunc <16 x i32> %x5 to <16 x i8>650  store <16 x i8> %x6, ptr %res, align 1651  ret void652}653 654define void @usat_trunc_qb_512_mem(<8 x i64> %i, ptr %res) {655; ALL-LABEL: usat_trunc_qb_512_mem:656; ALL:       ## %bb.0:657; ALL-NEXT:    vpmovusqb %zmm0, (%rdi)658; ALL-NEXT:    vzeroupper659; ALL-NEXT:    retq660  %x3 = icmp ult <8 x i64> %i, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>661  %x5 = select <8 x i1> %x3, <8 x i64> %i, <8 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>662  %x6 = trunc <8 x i64> %x5 to <8 x i8>663  store <8 x i8> %x6, ptr %res, align 1664  ret void665}666 667define void @usat_trunc_qd_512_mem(<8 x i64> %i, ptr %res) {668; ALL-LABEL: usat_trunc_qd_512_mem:669; ALL:       ## %bb.0:670; ALL-NEXT:    vpmovusqd %zmm0, (%rdi)671; ALL-NEXT:    vzeroupper672; ALL-NEXT:    retq673  %x3 = icmp ult <8 x i64> %i, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>674  %x5 = select <8 x i1> %x3, <8 x i64> %i, <8 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>675  %x6 = trunc <8 x i64> %x5 to <8 x i32>676  store <8 x i32> %x6, ptr %res, align 1677  ret void678}679 680define void @usat_trunc_qw_512_mem(<8 x i64> %i, ptr %res) {681; ALL-LABEL: usat_trunc_qw_512_mem:682; ALL:       ## %bb.0:683; ALL-NEXT:    vpmovusqw %zmm0, (%rdi)684; ALL-NEXT:    vzeroupper685; ALL-NEXT:    retq686  %x3 = icmp ult <8 x i64> %i, <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>687  %x5 = select <8 x i1> %x3, <8 x i64> %i, <8 x i64> <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>688  %x6 = trunc <8 x i64> %x5 to <8 x i16>689  store <8 x i16> %x6, ptr %res, align 1690  ret void691}692 693define <32 x i8> @usat_trunc_db_1024(<32 x i32> %i) {694; ALL-LABEL: usat_trunc_db_1024:695; ALL:       ## %bb.0:696; ALL-NEXT:    vpmovusdb %zmm0, %xmm0697; ALL-NEXT:    vpmovusdb %zmm1, %xmm1698; ALL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0699; ALL-NEXT:    retq700  %x3 = icmp ult <32 x i32> %i, <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>701  %x5 = select <32 x i1> %x3, <32 x i32> %i, <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>702  %x6 = trunc <32 x i32> %x5 to <32 x i8>703  ret <32 x i8> %x6704}705 706define void @usat_trunc_db_1024_mem(<32 x i32> %i, ptr %p) {707; ALL-LABEL: usat_trunc_db_1024_mem:708; ALL:       ## %bb.0:709; ALL-NEXT:    vpmovusdb %zmm1, 16(%rdi)710; ALL-NEXT:    vpmovusdb %zmm0, (%rdi)711; ALL-NEXT:    vzeroupper712; ALL-NEXT:    retq713  %x3 = icmp ult <32 x i32> %i, <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>714  %x5 = select <32 x i1> %x3, <32 x i32> %i, <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>715  %x6 = trunc <32 x i32> %x5 to <32 x i8>716  store <32 x i8>%x6, ptr %p, align 1717  ret void718}719 720define <16 x i16> @usat_trunc_dw_512(<16 x i32> %i) {721; ALL-LABEL: usat_trunc_dw_512:722; ALL:       ## %bb.0:723; ALL-NEXT:    vpmovusdw %zmm0, %ymm0724; ALL-NEXT:    retq725  %x3 = icmp ult <16 x i32> %i, <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>726  %x5 = select <16 x i1> %x3, <16 x i32> %i, <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>727  %x6 = trunc <16 x i32> %x5 to <16 x i16>728  ret <16 x i16> %x6729}730 731define <8 x i8> @usat_trunc_wb_128(<8 x i16> %i) {732; KNL-LABEL: usat_trunc_wb_128:733; KNL:       ## %bb.0:734; KNL-NEXT:    vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0735; KNL-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0736; KNL-NEXT:    retq737;738; SKX-LABEL: usat_trunc_wb_128:739; SKX:       ## %bb.0:740; SKX-NEXT:    vpmovuswb %xmm0, %xmm0741; SKX-NEXT:    retq742  %x3 = icmp ult <8 x i16> %i, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>743  %x5 = select <8 x i1> %x3, <8 x i16> %i, <8 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>744  %x6 = trunc <8 x i16> %x5 to <8 x i8>745  ret <8 x i8>%x6746}747 748define <16 x i16> @usat_trunc_qw_1024(<16 x i64> %i) {749; ALL-LABEL: usat_trunc_qw_1024:750; ALL:       ## %bb.0:751; ALL-NEXT:    vpmovusqw %zmm0, %xmm0752; ALL-NEXT:    vpmovusqw %zmm1, %xmm1753; ALL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0754; ALL-NEXT:    retq755  %x3 = icmp ult <16 x i64> %i, <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>756  %x5 = select <16 x i1> %x3, <16 x i64> %i, <16 x i64> <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>757  %x6 = trunc <16 x i64> %x5 to <16 x i16>758  ret <16 x i16> %x6759}760 761define <16 x i8> @usat_trunc_db_256(<8 x i32> %x) {762; KNL-LABEL: usat_trunc_db_256:763; KNL:       ## %bb.0:764; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0765; KNL-NEXT:    vpmovusdb %zmm0, %xmm0766; KNL-NEXT:    vzeroupper767; KNL-NEXT:    retq768;769; SKX-LABEL: usat_trunc_db_256:770; SKX:       ## %bb.0:771; SKX-NEXT:    vpmovusdb %ymm0, %xmm0772; SKX-NEXT:    vzeroupper773; SKX-NEXT:    retq774  %tmp1 = icmp ult <8 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>775  %tmp2 = select <8 x i1> %tmp1, <8 x i32> %x, <8 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>776  %tmp3 = trunc <8 x i32> %tmp2 to <8 x i8>777  %tmp4 = shufflevector <8 x i8> %tmp3, <8 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>778  ret <16 x i8> %tmp4779}780 781 782 783; Tests for the following unsigned saturation pattern:784 785; %a = icmp sgt %x, C1786; %b = select %a, %x, C2787; %c = icmp slt %b, C2788; %d = select %c, %b, C2789; %res = trunc %d790 791 792define void @smax_usat_trunc_wb_256_mem1(<16 x i16> %i, ptr %res) {793; KNL-LABEL: smax_usat_trunc_wb_256_mem1:794; KNL:       ## %bb.0:795; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm1796; KNL-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0797; KNL-NEXT:    vmovdqu %xmm0, (%rdi)798; KNL-NEXT:    vzeroupper799; KNL-NEXT:    retq800;801; SKX-LABEL: smax_usat_trunc_wb_256_mem1:802; SKX:       ## %bb.0:803; SKX-NEXT:    vpxor %xmm1, %xmm1, %xmm1804; SKX-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0805; SKX-NEXT:    vpmovuswb %ymm0, (%rdi)806; SKX-NEXT:    vzeroupper807; SKX-NEXT:    retq808  %x1 = icmp sgt <16 x i16> %i, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>809  %x2 = select <16 x i1> %x1, <16 x i16> %i, <16 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>810  %x3 = icmp slt <16 x i16> %x2, <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>811  %x5 = select <16 x i1> %x3, <16 x i16> %x2, <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>812  %x6 = trunc <16 x i16> %x5 to <16 x i8>813  store <16 x i8> %x6, ptr %res, align 1814  ret void815}816 817; Test for smax(smin(x, C2), C1).818define void @smax_usat_trunc_wb_256_mem2(<16 x i16> %i, ptr %res) {819; KNL-LABEL: smax_usat_trunc_wb_256_mem2:820; KNL:       ## %bb.0:821; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm1822; KNL-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0823; KNL-NEXT:    vmovdqu %xmm0, (%rdi)824; KNL-NEXT:    vzeroupper825; KNL-NEXT:    retq826;827; SKX-LABEL: smax_usat_trunc_wb_256_mem2:828; SKX:       ## %bb.0:829; SKX-NEXT:    vpxor %xmm1, %xmm1, %xmm1830; SKX-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0831; SKX-NEXT:    vpmovuswb %ymm0, (%rdi)832; SKX-NEXT:    vzeroupper833; SKX-NEXT:    retq834  %x1 = icmp slt <16 x i16> %i, <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>835  %x2 = select <16 x i1> %x1, <16 x i16> %i, <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>836  %x3 = icmp sgt <16 x i16> %x2, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>837  %x5 = select <16 x i1> %x3, <16 x i16> %x2, <16 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>838  %x6 = trunc <16 x i16> %x5 to <16 x i8>839  store <16 x i8> %x6, ptr %res, align 1840  ret void841}842 843define <16 x i8> @smax_usat_trunc_wb_256(<16 x i16> %i) {844; KNL-LABEL: smax_usat_trunc_wb_256:845; KNL:       ## %bb.0:846; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm1847; KNL-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0848; KNL-NEXT:    vzeroupper849; KNL-NEXT:    retq850;851; SKX-LABEL: smax_usat_trunc_wb_256:852; SKX:       ## %bb.0:853; SKX-NEXT:    vpxor %xmm1, %xmm1, %xmm1854; SKX-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0855; SKX-NEXT:    vpmovuswb %ymm0, %xmm0856; SKX-NEXT:    vzeroupper857; SKX-NEXT:    retq858  %x1 = icmp sgt <16 x i16> %i, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>859  %x2 = select <16 x i1> %x1, <16 x i16> %i, <16 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>860  %x3 = icmp slt <16 x i16> %x2, <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>861  %x5 = select <16 x i1> %x3, <16 x i16> %x2, <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>862  %x6 = trunc <16 x i16> %x5 to <16 x i8>863  ret <16 x i8> %x6864  }865 866define void @smax_usat_trunc_wb_128_mem(<8 x i16> %i, ptr %res) {867; KNL-LABEL: smax_usat_trunc_wb_128_mem:868; KNL:       ## %bb.0:869; KNL-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0870; KNL-NEXT:    vmovq %xmm0, (%rdi)871; KNL-NEXT:    retq872;873; SKX-LABEL: smax_usat_trunc_wb_128_mem:874; SKX:       ## %bb.0:875; SKX-NEXT:    vpxor %xmm1, %xmm1, %xmm1876; SKX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0877; SKX-NEXT:    vpmovuswb %xmm0, (%rdi)878; SKX-NEXT:    retq879  %x1 = icmp sgt <8 x i16> %i, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>880  %x2 = select <8 x i1> %x1, <8 x i16> %i, <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>881  %x3 = icmp slt <8 x i16> %x2, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>882  %x5 = select <8 x i1> %x3, <8 x i16> %x2, <8 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>883  %x6 = trunc <8 x i16> %x5 to <8 x i8>884  store <8 x i8> %x6, ptr %res, align 1885  ret void886}887 888define void @smax_usat_trunc_db_512_mem(<16 x i32> %i, ptr %res) {889; ALL-LABEL: smax_usat_trunc_db_512_mem:890; ALL:       ## %bb.0:891; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1892; ALL-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0893; ALL-NEXT:    vpmovusdb %zmm0, (%rdi)894; ALL-NEXT:    vzeroupper895; ALL-NEXT:    retq896  %x1 = icmp sgt <16 x i32> %i, <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>897  %x2 = select <16 x i1> %x1, <16 x i32> %i, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>898  %x3 = icmp slt <16 x i32> %x2, <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>899  %x5 = select <16 x i1> %x3, <16 x i32> %x2, <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>900  %x6 = trunc <16 x i32> %x5 to <16 x i8>901  store <16 x i8> %x6, ptr %res, align 1902  ret void903}904 905define void @smax_usat_trunc_qb_512_mem(<8 x i64> %i, ptr %res) {906; ALL-LABEL: smax_usat_trunc_qb_512_mem:907; ALL:       ## %bb.0:908; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1909; ALL-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0910; ALL-NEXT:    vpmovusqb %zmm0, (%rdi)911; ALL-NEXT:    vzeroupper912; ALL-NEXT:    retq913  %x1 = icmp sgt <8 x i64> %i, <i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0>914  %x2 = select <8 x i1> %x1, <8 x i64> %i, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0>915  %x3 = icmp slt <8 x i64> %x2, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>916  %x5 = select <8 x i1> %x3, <8 x i64> %x2, <8 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>917  %x6 = trunc <8 x i64> %x5 to <8 x i8>918  store <8 x i8> %x6, ptr %res, align 1919  ret void920}921 922define void @smax_usat_trunc_qd_512_mem(<8 x i64> %i, ptr %res) {923; ALL-LABEL: smax_usat_trunc_qd_512_mem:924; ALL:       ## %bb.0:925; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1926; ALL-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0927; ALL-NEXT:    vpmovusqd %zmm0, (%rdi)928; ALL-NEXT:    vzeroupper929; ALL-NEXT:    retq930  %x1 = icmp sgt <8 x i64> %i, <i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0>931  %x2 = select <8 x i1> %x1, <8 x i64> %i, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0>932  %x3 = icmp slt <8 x i64> %x2, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>933  %x5 = select <8 x i1> %x3, <8 x i64> %x2, <8 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>934  %x6 = trunc <8 x i64> %x5 to <8 x i32>935  store <8 x i32> %x6, ptr %res, align 1936  ret void937}938 939define void @smax_usat_trunc_qw_512_mem(<8 x i64> %i, ptr %res) {940; ALL-LABEL: smax_usat_trunc_qw_512_mem:941; ALL:       ## %bb.0:942; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1943; ALL-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0944; ALL-NEXT:    vpmovusqw %zmm0, (%rdi)945; ALL-NEXT:    vzeroupper946; ALL-NEXT:    retq947  %x1 = icmp sgt <8 x i64> %i, <i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0>948  %x2 = select <8 x i1> %x1, <8 x i64> %i, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0>949  %x3 = icmp slt <8 x i64> %x2, <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>950  %x5 = select <8 x i1> %x3, <8 x i64> %x2, <8 x i64> <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>951  %x6 = trunc <8 x i64> %x5 to <8 x i16>952  store <8 x i16> %x6, ptr %res, align 1953  ret void954}955 956define <32 x i8> @smax_usat_trunc_db_1024(<32 x i32> %i) {957; ALL-LABEL: smax_usat_trunc_db_1024:958; ALL:       ## %bb.0:959; ALL-NEXT:    vpxor %xmm2, %xmm2, %xmm2960; ALL-NEXT:    vpmaxsd %zmm2, %zmm1, %zmm1961; ALL-NEXT:    vpmaxsd %zmm2, %zmm0, %zmm0962; ALL-NEXT:    vpmovusdb %zmm0, %xmm0963; ALL-NEXT:    vpmovusdb %zmm1, %xmm1964; ALL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0965; ALL-NEXT:    retq966  %x1 = icmp sgt <32 x i32> %i, <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>967  %x2 = select <32 x i1> %x1, <32 x i32> %i, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>968  %x3 = icmp slt <32 x i32> %x2, <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>969  %x5 = select <32 x i1> %x3, <32 x i32> %x2, <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>970  %x6 = trunc <32 x i32> %x5 to <32 x i8>971  ret <32 x i8> %x6972}973 974define void @smax_usat_trunc_db_1024_mem(<32 x i32> %i, ptr %p) {975; ALL-LABEL: smax_usat_trunc_db_1024_mem:976; ALL:       ## %bb.0:977; ALL-NEXT:    vpxor %xmm2, %xmm2, %xmm2978; ALL-NEXT:    vpmaxsd %zmm2, %zmm0, %zmm0979; ALL-NEXT:    vpmaxsd %zmm2, %zmm1, %zmm1980; ALL-NEXT:    vpmovusdb %zmm1, 16(%rdi)981; ALL-NEXT:    vpmovusdb %zmm0, (%rdi)982; ALL-NEXT:    vzeroupper983; ALL-NEXT:    retq984  %x1 = icmp sgt <32 x i32> %i, <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>985  %x2 = select <32 x i1> %x1, <32 x i32> %i, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>986  %x3 = icmp slt <32 x i32> %x2, <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>987  %x5 = select <32 x i1> %x3, <32 x i32> %x2, <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>988  %x6 = trunc <32 x i32> %x5 to <32 x i8>989  store <32 x i8>%x6, ptr %p, align 1990  ret void991}992 993define <16 x i16> @smax_usat_trunc_dw_512(<16 x i32> %i) {994; ALL-LABEL: smax_usat_trunc_dw_512:995; ALL:       ## %bb.0:996; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1997; ALL-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0998; ALL-NEXT:    vpmovusdw %zmm0, %ymm0999; ALL-NEXT:    retq1000  %x1 = icmp sgt <16 x i32> %i, <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1001  %x2 = select <16 x i1> %x1, <16 x i32> %i, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1002  %x3 = icmp slt <16 x i32> %x2, <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>1003  %x5 = select <16 x i1> %x3, <16 x i32> %x2, <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>1004  %x6 = trunc <16 x i32> %x5 to <16 x i16>1005  ret <16 x i16> %x61006}1007 1008define void @negative_test1_smax_usat_trunc_wb_256_mem(<16 x i16> %i, ptr %res) {1009; KNL-LABEL: negative_test1_smax_usat_trunc_wb_256_mem:1010; KNL:       ## %bb.0:1011; KNL-NEXT:    vpminsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01012; KNL-NEXT:    vpmaxsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01013; KNL-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],zero1014; KNL-NEXT:    vpmovdb %zmm0, (%rdi)1015; KNL-NEXT:    vzeroupper1016; KNL-NEXT:    retq1017;1018; SKX-LABEL: negative_test1_smax_usat_trunc_wb_256_mem:1019; SKX:       ## %bb.0:1020; SKX-NEXT:    vpminsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01021; SKX-NEXT:    vpmaxsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01022; SKX-NEXT:    vpmovwb %ymm0, (%rdi)1023; SKX-NEXT:    vzeroupper1024; SKX-NEXT:    retq1025  %x1 = icmp slt <16 x i16> %i, <i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5>1026  %x2 = select <16 x i1> %x1, <16 x i16> %i, <16 x i16> <i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5>1027  %x3 = icmp sgt <16 x i16> %x2, <i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10>1028  %x5 = select <16 x i1> %x3, <16 x i16> %x2, <16 x i16> <i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10>1029  %x6 = trunc <16 x i16> %x5 to <16 x i8>1030  store <16 x i8> %x6, ptr %res, align 11031  ret void1032}1033 1034define void @negative_test2_smax_usat_trunc_wb_256_mem(<16 x i16> %i, ptr %res) {1035; KNL-LABEL: negative_test2_smax_usat_trunc_wb_256_mem:1036; KNL:       ## %bb.0:1037; KNL-NEXT:    vpmaxsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01038; KNL-NEXT:    vpminsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01039; KNL-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],zero1040; KNL-NEXT:    vpmovdb %zmm0, (%rdi)1041; KNL-NEXT:    vzeroupper1042; KNL-NEXT:    retq1043;1044; SKX-LABEL: negative_test2_smax_usat_trunc_wb_256_mem:1045; SKX:       ## %bb.0:1046; SKX-NEXT:    vpmaxsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01047; SKX-NEXT:    vpminsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01048; SKX-NEXT:    vpmovwb %ymm0, (%rdi)1049; SKX-NEXT:    vzeroupper1050; SKX-NEXT:    retq1051  %x1 = icmp sgt <16 x i16> %i, <i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10>1052  %x2 = select <16 x i1> %x1, <16 x i16> %i, <16 x i16> <i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10, i16 -10>1053  %x3 = icmp slt <16 x i16> %x2, <i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5>1054  %x5 = select <16 x i1> %x3, <16 x i16> %x2, <16 x i16> <i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5, i16 -5>1055  %x6 = trunc <16 x i16> %x5 to <16 x i8>1056  store <16 x i8> %x6, ptr %res, align 11057  ret void1058}1059 1060define void @ssat_trunc_db_1024_mem(<32 x i32> %i, ptr %p) {1061; ALL-LABEL: ssat_trunc_db_1024_mem:1062; ALL:       ## %bb.0:1063; ALL-NEXT:    vpmovsdb %zmm1, 16(%rdi)1064; ALL-NEXT:    vpmovsdb %zmm0, (%rdi)1065; ALL-NEXT:    vzeroupper1066; ALL-NEXT:    retq1067  %x1 = icmp sgt <32 x i32> %i, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i321068-128, i32 -128>1069  %x2 = select <32 x i1> %x1, <32 x i32> %i, <32 x i32> <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>1070  %x3 = icmp slt <32 x i32> %x2, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>1071  %x5 = select <32 x i1> %x3, <32 x i32> %x2, <32 x i32> <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>1072  %x6 = trunc <32 x i32> %x5 to <32 x i8>1073  store <32 x i8>%x6, ptr %p, align 11074  ret void1075}1076 1077