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