8328 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse2 | FileCheck %s --check-prefixes=SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse4.2 | FileCheck %s --check-prefixes=SSE44; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s --check-prefixes=AVX,AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx2 | FileCheck %s --check-prefixes=AVX,AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f | FileCheck %s --check-prefixes=AVX512,AVX512F7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512vl | FileCheck %s --check-prefixes=AVX512VL,AVX512FVL8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512bw | FileCheck %s --check-prefixes=AVX512,AVX512BW9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512vl,avx512bw | FileCheck %s --check-prefixes=AVX512VL,AVX512BWVL10 11define void @truncstore_v8i64_v8i32(<8 x i64> %x, ptr %p, <8 x i32> %mask) {12; SSE2-LABEL: truncstore_v8i64_v8i32:13; SSE2: # %bb.0:14; SSE2-NEXT: pxor %xmm8, %xmm815; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [9223372039002259456,9223372039002259456]16; SSE2-NEXT: movdqa %xmm1, %xmm617; SSE2-NEXT: pxor %xmm9, %xmm618; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]19; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483647,2147483647,2147483647,2147483647]20; SSE2-NEXT: movdqa %xmm7, %xmm1121; SSE2-NEXT: pcmpgtd %xmm10, %xmm1122; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[1,1,3,3]23; SSE2-NEXT: pcmpeqd %xmm9, %xmm1024; SSE2-NEXT: pand %xmm11, %xmm1025; SSE2-NEXT: pcmpeqd %xmm6, %xmm626; SSE2-NEXT: pand %xmm10, %xmm127; SSE2-NEXT: pxor %xmm6, %xmm1028; SSE2-NEXT: por %xmm1, %xmm1029; SSE2-NEXT: movdqa %xmm0, %xmm130; SSE2-NEXT: pxor %xmm9, %xmm131; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm1[0,0,2,2]32; SSE2-NEXT: movdqa %xmm7, %xmm1233; SSE2-NEXT: pcmpgtd %xmm11, %xmm1234; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]35; SSE2-NEXT: pcmpeqd %xmm9, %xmm136; SSE2-NEXT: pand %xmm12, %xmm137; SSE2-NEXT: pand %xmm1, %xmm038; SSE2-NEXT: pxor %xmm6, %xmm139; SSE2-NEXT: por %xmm0, %xmm140; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm10[0,2]41; SSE2-NEXT: movdqa %xmm3, %xmm042; SSE2-NEXT: pxor %xmm9, %xmm043; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm0[0,0,2,2]44; SSE2-NEXT: movdqa %xmm7, %xmm1145; SSE2-NEXT: pcmpgtd %xmm10, %xmm1146; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]47; SSE2-NEXT: pcmpeqd %xmm9, %xmm048; SSE2-NEXT: movdqa %xmm2, %xmm1049; SSE2-NEXT: pxor %xmm9, %xmm1050; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]51; SSE2-NEXT: pcmpgtd %xmm12, %xmm752; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]53; SSE2-NEXT: pcmpeqd %xmm9, %xmm1054; SSE2-NEXT: pcmpeqd %xmm8, %xmm555; SSE2-NEXT: pcmpeqd %xmm8, %xmm456; SSE2-NEXT: packssdw %xmm5, %xmm457; SSE2-NEXT: packsswb %xmm4, %xmm458; SSE2-NEXT: pmovmskb %xmm4, %eax59; SSE2-NEXT: notl %eax60; SSE2-NEXT: testb $1, %al61; SSE2-NEXT: je .LBB0_262; SSE2-NEXT: # %bb.1: # %cond.store63; SSE2-NEXT: movss %xmm1, (%rdi)64; SSE2-NEXT: .LBB0_2: # %else65; SSE2-NEXT: pand %xmm11, %xmm066; SSE2-NEXT: pand %xmm7, %xmm1067; SSE2-NEXT: testb $2, %al68; SSE2-NEXT: je .LBB0_469; SSE2-NEXT: # %bb.3: # %cond.store170; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,1,1]71; SSE2-NEXT: movd %xmm4, 4(%rdi)72; SSE2-NEXT: .LBB0_4: # %else273; SSE2-NEXT: pand %xmm0, %xmm374; SSE2-NEXT: pxor %xmm6, %xmm075; SSE2-NEXT: pxor %xmm10, %xmm676; SSE2-NEXT: pand %xmm10, %xmm277; SSE2-NEXT: testb $4, %al78; SSE2-NEXT: je .LBB0_679; SSE2-NEXT: # %bb.5: # %cond.store380; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[2,3,2,3]81; SSE2-NEXT: movd %xmm4, 8(%rdi)82; SSE2-NEXT: .LBB0_6: # %else483; SSE2-NEXT: por %xmm0, %xmm384; SSE2-NEXT: por %xmm6, %xmm285; SSE2-NEXT: testb $8, %al86; SSE2-NEXT: je .LBB0_887; SSE2-NEXT: # %bb.7: # %cond.store588; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[3,3,3,3]89; SSE2-NEXT: movd %xmm0, 12(%rdi)90; SSE2-NEXT: .LBB0_8: # %else691; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]92; SSE2-NEXT: testb $16, %al93; SSE2-NEXT: jne .LBB0_994; SSE2-NEXT: # %bb.10: # %else895; SSE2-NEXT: testb $32, %al96; SSE2-NEXT: jne .LBB0_1197; SSE2-NEXT: .LBB0_12: # %else1098; SSE2-NEXT: testb $64, %al99; SSE2-NEXT: jne .LBB0_13100; SSE2-NEXT: .LBB0_14: # %else12101; SSE2-NEXT: testb $-128, %al102; SSE2-NEXT: jne .LBB0_15103; SSE2-NEXT: .LBB0_16: # %else14104; SSE2-NEXT: retq105; SSE2-NEXT: .LBB0_9: # %cond.store7106; SSE2-NEXT: movss %xmm2, 16(%rdi)107; SSE2-NEXT: testb $32, %al108; SSE2-NEXT: je .LBB0_12109; SSE2-NEXT: .LBB0_11: # %cond.store9110; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]111; SSE2-NEXT: movd %xmm0, 20(%rdi)112; SSE2-NEXT: testb $64, %al113; SSE2-NEXT: je .LBB0_14114; SSE2-NEXT: .LBB0_13: # %cond.store11115; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]116; SSE2-NEXT: movd %xmm0, 24(%rdi)117; SSE2-NEXT: testb $-128, %al118; SSE2-NEXT: je .LBB0_16119; SSE2-NEXT: .LBB0_15: # %cond.store13120; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[3,3,3,3]121; SSE2-NEXT: movd %xmm0, 28(%rdi)122; SSE2-NEXT: retq123;124; SSE4-LABEL: truncstore_v8i64_v8i32:125; SSE4: # %bb.0:126; SSE4-NEXT: movdqa %xmm0, %xmm6127; SSE4-NEXT: pxor %xmm9, %xmm9128; SSE4-NEXT: movapd {{.*#+}} xmm8 = [4294967295,4294967295]129; SSE4-NEXT: movdqa {{.*#+}} xmm10 = [9223372036854775808,9223372036854775808]130; SSE4-NEXT: movdqa %xmm1, %xmm11131; SSE4-NEXT: pxor %xmm10, %xmm11132; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372041149743103,9223372041149743103]133; SSE4-NEXT: movdqa %xmm7, %xmm0134; SSE4-NEXT: pcmpgtq %xmm11, %xmm0135; SSE4-NEXT: movapd %xmm8, %xmm11136; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm11137; SSE4-NEXT: movdqa %xmm6, %xmm1138; SSE4-NEXT: pxor %xmm10, %xmm1139; SSE4-NEXT: movdqa %xmm7, %xmm0140; SSE4-NEXT: pcmpgtq %xmm1, %xmm0141; SSE4-NEXT: movapd %xmm8, %xmm1142; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm1143; SSE4-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm11[0,2]144; SSE4-NEXT: movdqa %xmm3, %xmm6145; SSE4-NEXT: pxor %xmm10, %xmm6146; SSE4-NEXT: movdqa %xmm7, %xmm0147; SSE4-NEXT: pcmpgtq %xmm6, %xmm0148; SSE4-NEXT: movapd %xmm8, %xmm6149; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm6150; SSE4-NEXT: pxor %xmm2, %xmm10151; SSE4-NEXT: pcmpgtq %xmm10, %xmm7152; SSE4-NEXT: movdqa %xmm7, %xmm0153; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm8154; SSE4-NEXT: pcmpeqd %xmm9, %xmm5155; SSE4-NEXT: pcmpeqd %xmm9, %xmm4156; SSE4-NEXT: packssdw %xmm5, %xmm4157; SSE4-NEXT: packsswb %xmm4, %xmm4158; SSE4-NEXT: pmovmskb %xmm4, %eax159; SSE4-NEXT: notl %eax160; SSE4-NEXT: testb $1, %al161; SSE4-NEXT: jne .LBB0_1162; SSE4-NEXT: # %bb.2: # %else163; SSE4-NEXT: testb $2, %al164; SSE4-NEXT: jne .LBB0_3165; SSE4-NEXT: .LBB0_4: # %else2166; SSE4-NEXT: testb $4, %al167; SSE4-NEXT: jne .LBB0_5168; SSE4-NEXT: .LBB0_6: # %else4169; SSE4-NEXT: testb $8, %al170; SSE4-NEXT: je .LBB0_8171; SSE4-NEXT: .LBB0_7: # %cond.store5172; SSE4-NEXT: extractps $3, %xmm1, 12(%rdi)173; SSE4-NEXT: .LBB0_8: # %else6174; SSE4-NEXT: shufps {{.*#+}} xmm8 = xmm8[0,2],xmm6[0,2]175; SSE4-NEXT: testb $16, %al176; SSE4-NEXT: jne .LBB0_9177; SSE4-NEXT: # %bb.10: # %else8178; SSE4-NEXT: testb $32, %al179; SSE4-NEXT: jne .LBB0_11180; SSE4-NEXT: .LBB0_12: # %else10181; SSE4-NEXT: testb $64, %al182; SSE4-NEXT: jne .LBB0_13183; SSE4-NEXT: .LBB0_14: # %else12184; SSE4-NEXT: testb $-128, %al185; SSE4-NEXT: jne .LBB0_15186; SSE4-NEXT: .LBB0_16: # %else14187; SSE4-NEXT: retq188; SSE4-NEXT: .LBB0_1: # %cond.store189; SSE4-NEXT: movss %xmm1, (%rdi)190; SSE4-NEXT: testb $2, %al191; SSE4-NEXT: je .LBB0_4192; SSE4-NEXT: .LBB0_3: # %cond.store1193; SSE4-NEXT: extractps $1, %xmm1, 4(%rdi)194; SSE4-NEXT: testb $4, %al195; SSE4-NEXT: je .LBB0_6196; SSE4-NEXT: .LBB0_5: # %cond.store3197; SSE4-NEXT: extractps $2, %xmm1, 8(%rdi)198; SSE4-NEXT: testb $8, %al199; SSE4-NEXT: jne .LBB0_7200; SSE4-NEXT: jmp .LBB0_8201; SSE4-NEXT: .LBB0_9: # %cond.store7202; SSE4-NEXT: movss %xmm8, 16(%rdi)203; SSE4-NEXT: testb $32, %al204; SSE4-NEXT: je .LBB0_12205; SSE4-NEXT: .LBB0_11: # %cond.store9206; SSE4-NEXT: extractps $1, %xmm8, 20(%rdi)207; SSE4-NEXT: testb $64, %al208; SSE4-NEXT: je .LBB0_14209; SSE4-NEXT: .LBB0_13: # %cond.store11210; SSE4-NEXT: extractps $2, %xmm8, 24(%rdi)211; SSE4-NEXT: testb $-128, %al212; SSE4-NEXT: je .LBB0_16213; SSE4-NEXT: .LBB0_15: # %cond.store13214; SSE4-NEXT: extractps $3, %xmm8, 28(%rdi)215; SSE4-NEXT: retq216;217; AVX1-LABEL: truncstore_v8i64_v8i32:218; AVX1: # %bb.0:219; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3220; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4221; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm3222; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5223; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm3224; AVX1-NEXT: vpcmpeqd %xmm4, %xmm2, %xmm2225; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2226; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2227; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3228; AVX1-NEXT: vmovddup {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]229; AVX1-NEXT: # xmm4 = mem[0,0]230; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm5231; AVX1-NEXT: vmovddup {{.*#+}} xmm6 = [9223372041149743103,9223372041149743103]232; AVX1-NEXT: # xmm6 = mem[0,0]233; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5234; AVX1-NEXT: vmovddup {{.*#+}} xmm7 = [4294967295,4294967295]235; AVX1-NEXT: # xmm7 = mem[0,0]236; AVX1-NEXT: vblendvpd %xmm5, %xmm3, %xmm7, %xmm3237; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm5238; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5239; AVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm7, %xmm0240; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]241; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3242; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm5243; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5244; AVX1-NEXT: vblendvpd %xmm5, %xmm3, %xmm7, %xmm3245; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm4246; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4247; AVX1-NEXT: vblendvpd %xmm4, %xmm1, %xmm7, %xmm1248; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]249; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0250; AVX1-NEXT: vmaskmovps %ymm0, %ymm2, (%rdi)251; AVX1-NEXT: vzeroupper252; AVX1-NEXT: retq253;254; AVX2-LABEL: truncstore_v8i64_v8i32:255; AVX2: # %bb.0:256; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3257; AVX2-NEXT: vpcmpeqd %ymm3, %ymm2, %ymm2258; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3259; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2260; AVX2-NEXT: vbroadcastsd {{.*#+}} ymm3 = [4294967295,4294967295,4294967295,4294967295]261; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]262; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5263; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm6 = [9223372041149743103,9223372041149743103,9223372041149743103,9223372041149743103]264; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5265; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1266; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4267; AVX2-NEXT: vpcmpgtq %ymm4, %ymm6, %ymm4268; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0269; AVX2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6]270; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]271; AVX2-NEXT: vpmaskmovd %ymm0, %ymm2, (%rdi)272; AVX2-NEXT: vzeroupper273; AVX2-NEXT: retq274;275; AVX512-LABEL: truncstore_v8i64_v8i32:276; AVX512: # %bb.0:277; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1278; AVX512-NEXT: vptestmd %zmm1, %zmm1, %k1279; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0280; AVX512-NEXT: vpmovqd %zmm0, (%rdi) {%k1}281; AVX512-NEXT: vzeroupper282; AVX512-NEXT: retq283;284; AVX512VL-LABEL: truncstore_v8i64_v8i32:285; AVX512VL: # %bb.0:286; AVX512VL-NEXT: vptestmd %ymm1, %ymm1, %k1287; AVX512VL-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0288; AVX512VL-NEXT: vpmovqd %zmm0, (%rdi) {%k1}289; AVX512VL-NEXT: vzeroupper290; AVX512VL-NEXT: retq291 %a = icmp ne <8 x i32> %mask, zeroinitializer292 %b = icmp ult <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>293 %c = select <8 x i1> %b, <8 x i64> %x, <8 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>294 %d = trunc <8 x i64> %c to <8 x i32>295 call void @llvm.masked.store.v8i32.p0(<8 x i32> %d, ptr %p, i32 1, <8 x i1> %a)296 ret void297}298 299define void @truncstore_v8i64_v8i16(<8 x i64> %x, ptr %p, <8 x i32> %mask) {300; SSE2-LABEL: truncstore_v8i64_v8i16:301; SSE2: # %bb.0:302; SSE2-NEXT: pxor %xmm6, %xmm6303; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [9223372039002259456,9223372039002259456]304; SSE2-NEXT: movdqa %xmm1, %xmm9305; SSE2-NEXT: pxor %xmm7, %xmm9306; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]307; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147549183,2147549183,2147549183,2147549183]308; SSE2-NEXT: movdqa %xmm8, %xmm11309; SSE2-NEXT: pcmpgtd %xmm10, %xmm11310; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[1,1,3,3]311; SSE2-NEXT: pcmpeqd %xmm7, %xmm10312; SSE2-NEXT: pand %xmm11, %xmm10313; SSE2-NEXT: pcmpeqd %xmm9, %xmm9314; SSE2-NEXT: pand %xmm10, %xmm1315; SSE2-NEXT: pxor %xmm9, %xmm10316; SSE2-NEXT: por %xmm1, %xmm10317; SSE2-NEXT: movdqa %xmm0, %xmm1318; SSE2-NEXT: pxor %xmm7, %xmm1319; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm1[0,0,2,2]320; SSE2-NEXT: movdqa %xmm8, %xmm12321; SSE2-NEXT: pcmpgtd %xmm11, %xmm12322; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]323; SSE2-NEXT: pcmpeqd %xmm7, %xmm1324; SSE2-NEXT: pand %xmm12, %xmm1325; SSE2-NEXT: pand %xmm1, %xmm0326; SSE2-NEXT: pxor %xmm9, %xmm1327; SSE2-NEXT: por %xmm0, %xmm1328; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm10[0,2]329; SSE2-NEXT: movdqa %xmm3, %xmm0330; SSE2-NEXT: pxor %xmm7, %xmm0331; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm0[0,0,2,2]332; SSE2-NEXT: movdqa %xmm8, %xmm11333; SSE2-NEXT: pcmpgtd %xmm10, %xmm11334; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]335; SSE2-NEXT: pcmpeqd %xmm7, %xmm0336; SSE2-NEXT: pand %xmm11, %xmm0337; SSE2-NEXT: pand %xmm0, %xmm3338; SSE2-NEXT: pxor %xmm9, %xmm0339; SSE2-NEXT: por %xmm3, %xmm0340; SSE2-NEXT: movdqa %xmm2, %xmm3341; SSE2-NEXT: pxor %xmm7, %xmm3342; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm3[0,0,2,2]343; SSE2-NEXT: pcmpgtd %xmm10, %xmm8344; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]345; SSE2-NEXT: pcmpeqd %xmm7, %xmm3346; SSE2-NEXT: pand %xmm8, %xmm3347; SSE2-NEXT: pxor %xmm3, %xmm9348; SSE2-NEXT: pand %xmm2, %xmm3349; SSE2-NEXT: por %xmm9, %xmm3350; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[0,2],xmm0[0,2]351; SSE2-NEXT: pslld $16, %xmm3352; SSE2-NEXT: psrad $16, %xmm3353; SSE2-NEXT: pslld $16, %xmm1354; SSE2-NEXT: psrad $16, %xmm1355; SSE2-NEXT: packssdw %xmm3, %xmm1356; SSE2-NEXT: pcmpeqd %xmm6, %xmm5357; SSE2-NEXT: pcmpeqd %xmm6, %xmm4358; SSE2-NEXT: packssdw %xmm5, %xmm4359; SSE2-NEXT: packsswb %xmm4, %xmm4360; SSE2-NEXT: pmovmskb %xmm4, %eax361; SSE2-NEXT: notl %eax362; SSE2-NEXT: testb $1, %al363; SSE2-NEXT: jne .LBB1_1364; SSE2-NEXT: # %bb.2: # %else365; SSE2-NEXT: testb $2, %al366; SSE2-NEXT: jne .LBB1_3367; SSE2-NEXT: .LBB1_4: # %else2368; SSE2-NEXT: testb $4, %al369; SSE2-NEXT: jne .LBB1_5370; SSE2-NEXT: .LBB1_6: # %else4371; SSE2-NEXT: testb $8, %al372; SSE2-NEXT: jne .LBB1_7373; SSE2-NEXT: .LBB1_8: # %else6374; SSE2-NEXT: testb $16, %al375; SSE2-NEXT: jne .LBB1_9376; SSE2-NEXT: .LBB1_10: # %else8377; SSE2-NEXT: testb $32, %al378; SSE2-NEXT: jne .LBB1_11379; SSE2-NEXT: .LBB1_12: # %else10380; SSE2-NEXT: testb $64, %al381; SSE2-NEXT: jne .LBB1_13382; SSE2-NEXT: .LBB1_14: # %else12383; SSE2-NEXT: testb $-128, %al384; SSE2-NEXT: jne .LBB1_15385; SSE2-NEXT: .LBB1_16: # %else14386; SSE2-NEXT: retq387; SSE2-NEXT: .LBB1_1: # %cond.store388; SSE2-NEXT: movd %xmm1, %ecx389; SSE2-NEXT: movw %cx, (%rdi)390; SSE2-NEXT: testb $2, %al391; SSE2-NEXT: je .LBB1_4392; SSE2-NEXT: .LBB1_3: # %cond.store1393; SSE2-NEXT: pextrw $1, %xmm1, %ecx394; SSE2-NEXT: movw %cx, 2(%rdi)395; SSE2-NEXT: testb $4, %al396; SSE2-NEXT: je .LBB1_6397; SSE2-NEXT: .LBB1_5: # %cond.store3398; SSE2-NEXT: pextrw $2, %xmm1, %ecx399; SSE2-NEXT: movw %cx, 4(%rdi)400; SSE2-NEXT: testb $8, %al401; SSE2-NEXT: je .LBB1_8402; SSE2-NEXT: .LBB1_7: # %cond.store5403; SSE2-NEXT: pextrw $3, %xmm1, %ecx404; SSE2-NEXT: movw %cx, 6(%rdi)405; SSE2-NEXT: testb $16, %al406; SSE2-NEXT: je .LBB1_10407; SSE2-NEXT: .LBB1_9: # %cond.store7408; SSE2-NEXT: pextrw $4, %xmm1, %ecx409; SSE2-NEXT: movw %cx, 8(%rdi)410; SSE2-NEXT: testb $32, %al411; SSE2-NEXT: je .LBB1_12412; SSE2-NEXT: .LBB1_11: # %cond.store9413; SSE2-NEXT: pextrw $5, %xmm1, %ecx414; SSE2-NEXT: movw %cx, 10(%rdi)415; SSE2-NEXT: testb $64, %al416; SSE2-NEXT: je .LBB1_14417; SSE2-NEXT: .LBB1_13: # %cond.store11418; SSE2-NEXT: pextrw $6, %xmm1, %ecx419; SSE2-NEXT: movw %cx, 12(%rdi)420; SSE2-NEXT: testb $-128, %al421; SSE2-NEXT: je .LBB1_16422; SSE2-NEXT: .LBB1_15: # %cond.store13423; SSE2-NEXT: pextrw $7, %xmm1, %eax424; SSE2-NEXT: movw %ax, 14(%rdi)425; SSE2-NEXT: retq426;427; SSE4-LABEL: truncstore_v8i64_v8i16:428; SSE4: # %bb.0:429; SSE4-NEXT: movdqa %xmm0, %xmm6430; SSE4-NEXT: pxor %xmm8, %xmm8431; SSE4-NEXT: movapd {{.*#+}} xmm9 = [65535,65535]432; SSE4-NEXT: movdqa {{.*#+}} xmm10 = [9223372036854775808,9223372036854775808]433; SSE4-NEXT: movdqa %xmm1, %xmm11434; SSE4-NEXT: pxor %xmm10, %xmm11435; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854841343,9223372036854841343]436; SSE4-NEXT: movdqa %xmm7, %xmm0437; SSE4-NEXT: pcmpgtq %xmm11, %xmm0438; SSE4-NEXT: movapd %xmm9, %xmm11439; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm11440; SSE4-NEXT: movdqa %xmm6, %xmm1441; SSE4-NEXT: pxor %xmm10, %xmm1442; SSE4-NEXT: movdqa %xmm7, %xmm0443; SSE4-NEXT: pcmpgtq %xmm1, %xmm0444; SSE4-NEXT: movapd %xmm9, %xmm1445; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm1446; SSE4-NEXT: packusdw %xmm11, %xmm1447; SSE4-NEXT: movdqa %xmm3, %xmm6448; SSE4-NEXT: pxor %xmm10, %xmm6449; SSE4-NEXT: movdqa %xmm7, %xmm0450; SSE4-NEXT: pcmpgtq %xmm6, %xmm0451; SSE4-NEXT: movapd %xmm9, %xmm6452; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm6453; SSE4-NEXT: pxor %xmm2, %xmm10454; SSE4-NEXT: pcmpgtq %xmm10, %xmm7455; SSE4-NEXT: movdqa %xmm7, %xmm0456; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9457; SSE4-NEXT: packusdw %xmm6, %xmm9458; SSE4-NEXT: packusdw %xmm9, %xmm1459; SSE4-NEXT: pcmpeqd %xmm8, %xmm5460; SSE4-NEXT: pcmpeqd %xmm8, %xmm4461; SSE4-NEXT: packssdw %xmm5, %xmm4462; SSE4-NEXT: packsswb %xmm4, %xmm4463; SSE4-NEXT: pmovmskb %xmm4, %eax464; SSE4-NEXT: notl %eax465; SSE4-NEXT: testb $1, %al466; SSE4-NEXT: jne .LBB1_1467; SSE4-NEXT: # %bb.2: # %else468; SSE4-NEXT: testb $2, %al469; SSE4-NEXT: jne .LBB1_3470; SSE4-NEXT: .LBB1_4: # %else2471; SSE4-NEXT: testb $4, %al472; SSE4-NEXT: jne .LBB1_5473; SSE4-NEXT: .LBB1_6: # %else4474; SSE4-NEXT: testb $8, %al475; SSE4-NEXT: jne .LBB1_7476; SSE4-NEXT: .LBB1_8: # %else6477; SSE4-NEXT: testb $16, %al478; SSE4-NEXT: jne .LBB1_9479; SSE4-NEXT: .LBB1_10: # %else8480; SSE4-NEXT: testb $32, %al481; SSE4-NEXT: jne .LBB1_11482; SSE4-NEXT: .LBB1_12: # %else10483; SSE4-NEXT: testb $64, %al484; SSE4-NEXT: jne .LBB1_13485; SSE4-NEXT: .LBB1_14: # %else12486; SSE4-NEXT: testb $-128, %al487; SSE4-NEXT: jne .LBB1_15488; SSE4-NEXT: .LBB1_16: # %else14489; SSE4-NEXT: retq490; SSE4-NEXT: .LBB1_1: # %cond.store491; SSE4-NEXT: pextrw $0, %xmm1, (%rdi)492; SSE4-NEXT: testb $2, %al493; SSE4-NEXT: je .LBB1_4494; SSE4-NEXT: .LBB1_3: # %cond.store1495; SSE4-NEXT: pextrw $1, %xmm1, 2(%rdi)496; SSE4-NEXT: testb $4, %al497; SSE4-NEXT: je .LBB1_6498; SSE4-NEXT: .LBB1_5: # %cond.store3499; SSE4-NEXT: pextrw $2, %xmm1, 4(%rdi)500; SSE4-NEXT: testb $8, %al501; SSE4-NEXT: je .LBB1_8502; SSE4-NEXT: .LBB1_7: # %cond.store5503; SSE4-NEXT: pextrw $3, %xmm1, 6(%rdi)504; SSE4-NEXT: testb $16, %al505; SSE4-NEXT: je .LBB1_10506; SSE4-NEXT: .LBB1_9: # %cond.store7507; SSE4-NEXT: pextrw $4, %xmm1, 8(%rdi)508; SSE4-NEXT: testb $32, %al509; SSE4-NEXT: je .LBB1_12510; SSE4-NEXT: .LBB1_11: # %cond.store9511; SSE4-NEXT: pextrw $5, %xmm1, 10(%rdi)512; SSE4-NEXT: testb $64, %al513; SSE4-NEXT: je .LBB1_14514; SSE4-NEXT: .LBB1_13: # %cond.store11515; SSE4-NEXT: pextrw $6, %xmm1, 12(%rdi)516; SSE4-NEXT: testb $-128, %al517; SSE4-NEXT: je .LBB1_16518; SSE4-NEXT: .LBB1_15: # %cond.store13519; SSE4-NEXT: pextrw $7, %xmm1, 14(%rdi)520; SSE4-NEXT: retq521;522; AVX1-LABEL: truncstore_v8i64_v8i16:523; AVX1: # %bb.0:524; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]525; AVX1-NEXT: # xmm3 = mem[0,0]526; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4527; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854841343,9223372036854841343]528; AVX1-NEXT: # xmm5 = mem[0,0]529; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4530; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6531; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm7532; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm7533; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm8534; AVX1-NEXT: vpcmpgtq %xmm8, %xmm5, %xmm8535; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm9536; AVX1-NEXT: vpxor %xmm3, %xmm9, %xmm3537; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3538; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [65535,65535]539; AVX1-NEXT: # xmm5 = mem[0,0]540; AVX1-NEXT: vblendvpd %xmm3, %xmm9, %xmm5, %xmm3541; AVX1-NEXT: vblendvpd %xmm8, %xmm1, %xmm5, %xmm1542; AVX1-NEXT: vpackusdw %xmm3, %xmm1, %xmm1543; AVX1-NEXT: vblendvpd %xmm7, %xmm6, %xmm5, %xmm3544; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm5, %xmm0545; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm0546; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0547; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm1548; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3549; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1550; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm2551; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1552; AVX1-NEXT: vmovmskps %ymm1, %eax553; AVX1-NEXT: notl %eax554; AVX1-NEXT: testb $1, %al555; AVX1-NEXT: jne .LBB1_1556; AVX1-NEXT: # %bb.2: # %else557; AVX1-NEXT: testb $2, %al558; AVX1-NEXT: jne .LBB1_3559; AVX1-NEXT: .LBB1_4: # %else2560; AVX1-NEXT: testb $4, %al561; AVX1-NEXT: jne .LBB1_5562; AVX1-NEXT: .LBB1_6: # %else4563; AVX1-NEXT: testb $8, %al564; AVX1-NEXT: jne .LBB1_7565; AVX1-NEXT: .LBB1_8: # %else6566; AVX1-NEXT: testb $16, %al567; AVX1-NEXT: jne .LBB1_9568; AVX1-NEXT: .LBB1_10: # %else8569; AVX1-NEXT: testb $32, %al570; AVX1-NEXT: jne .LBB1_11571; AVX1-NEXT: .LBB1_12: # %else10572; AVX1-NEXT: testb $64, %al573; AVX1-NEXT: jne .LBB1_13574; AVX1-NEXT: .LBB1_14: # %else12575; AVX1-NEXT: testb $-128, %al576; AVX1-NEXT: jne .LBB1_15577; AVX1-NEXT: .LBB1_16: # %else14578; AVX1-NEXT: vzeroupper579; AVX1-NEXT: retq580; AVX1-NEXT: .LBB1_1: # %cond.store581; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)582; AVX1-NEXT: testb $2, %al583; AVX1-NEXT: je .LBB1_4584; AVX1-NEXT: .LBB1_3: # %cond.store1585; AVX1-NEXT: vpextrw $1, %xmm0, 2(%rdi)586; AVX1-NEXT: testb $4, %al587; AVX1-NEXT: je .LBB1_6588; AVX1-NEXT: .LBB1_5: # %cond.store3589; AVX1-NEXT: vpextrw $2, %xmm0, 4(%rdi)590; AVX1-NEXT: testb $8, %al591; AVX1-NEXT: je .LBB1_8592; AVX1-NEXT: .LBB1_7: # %cond.store5593; AVX1-NEXT: vpextrw $3, %xmm0, 6(%rdi)594; AVX1-NEXT: testb $16, %al595; AVX1-NEXT: je .LBB1_10596; AVX1-NEXT: .LBB1_9: # %cond.store7597; AVX1-NEXT: vpextrw $4, %xmm0, 8(%rdi)598; AVX1-NEXT: testb $32, %al599; AVX1-NEXT: je .LBB1_12600; AVX1-NEXT: .LBB1_11: # %cond.store9601; AVX1-NEXT: vpextrw $5, %xmm0, 10(%rdi)602; AVX1-NEXT: testb $64, %al603; AVX1-NEXT: je .LBB1_14604; AVX1-NEXT: .LBB1_13: # %cond.store11605; AVX1-NEXT: vpextrw $6, %xmm0, 12(%rdi)606; AVX1-NEXT: testb $-128, %al607; AVX1-NEXT: je .LBB1_16608; AVX1-NEXT: .LBB1_15: # %cond.store13609; AVX1-NEXT: vpextrw $7, %xmm0, 14(%rdi)610; AVX1-NEXT: vzeroupper611; AVX1-NEXT: retq612;613; AVX2-LABEL: truncstore_v8i64_v8i16:614; AVX2: # %bb.0:615; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3616; AVX2-NEXT: vbroadcastsd {{.*#+}} ymm4 = [65535,65535,65535,65535]617; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm5 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]618; AVX2-NEXT: vpxor %ymm5, %ymm1, %ymm6619; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm7 = [9223372036854841343,9223372036854841343,9223372036854841343,9223372036854841343]620; AVX2-NEXT: vpcmpgtq %ymm6, %ymm7, %ymm6621; AVX2-NEXT: vblendvpd %ymm6, %ymm1, %ymm4, %ymm1622; AVX2-NEXT: vpxor %ymm5, %ymm0, %ymm5623; AVX2-NEXT: vpcmpgtq %ymm5, %ymm7, %ymm5624; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0625; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0626; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1627; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0628; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]629; AVX2-NEXT: vpcmpeqd %ymm3, %ymm2, %ymm1630; AVX2-NEXT: vmovmskps %ymm1, %eax631; AVX2-NEXT: notl %eax632; AVX2-NEXT: testb $1, %al633; AVX2-NEXT: jne .LBB1_1634; AVX2-NEXT: # %bb.2: # %else635; AVX2-NEXT: testb $2, %al636; AVX2-NEXT: jne .LBB1_3637; AVX2-NEXT: .LBB1_4: # %else2638; AVX2-NEXT: testb $4, %al639; AVX2-NEXT: jne .LBB1_5640; AVX2-NEXT: .LBB1_6: # %else4641; AVX2-NEXT: testb $8, %al642; AVX2-NEXT: jne .LBB1_7643; AVX2-NEXT: .LBB1_8: # %else6644; AVX2-NEXT: testb $16, %al645; AVX2-NEXT: jne .LBB1_9646; AVX2-NEXT: .LBB1_10: # %else8647; AVX2-NEXT: testb $32, %al648; AVX2-NEXT: jne .LBB1_11649; AVX2-NEXT: .LBB1_12: # %else10650; AVX2-NEXT: testb $64, %al651; AVX2-NEXT: jne .LBB1_13652; AVX2-NEXT: .LBB1_14: # %else12653; AVX2-NEXT: testb $-128, %al654; AVX2-NEXT: jne .LBB1_15655; AVX2-NEXT: .LBB1_16: # %else14656; AVX2-NEXT: vzeroupper657; AVX2-NEXT: retq658; AVX2-NEXT: .LBB1_1: # %cond.store659; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)660; AVX2-NEXT: testb $2, %al661; AVX2-NEXT: je .LBB1_4662; AVX2-NEXT: .LBB1_3: # %cond.store1663; AVX2-NEXT: vpextrw $1, %xmm0, 2(%rdi)664; AVX2-NEXT: testb $4, %al665; AVX2-NEXT: je .LBB1_6666; AVX2-NEXT: .LBB1_5: # %cond.store3667; AVX2-NEXT: vpextrw $2, %xmm0, 4(%rdi)668; AVX2-NEXT: testb $8, %al669; AVX2-NEXT: je .LBB1_8670; AVX2-NEXT: .LBB1_7: # %cond.store5671; AVX2-NEXT: vpextrw $3, %xmm0, 6(%rdi)672; AVX2-NEXT: testb $16, %al673; AVX2-NEXT: je .LBB1_10674; AVX2-NEXT: .LBB1_9: # %cond.store7675; AVX2-NEXT: vpextrw $4, %xmm0, 8(%rdi)676; AVX2-NEXT: testb $32, %al677; AVX2-NEXT: je .LBB1_12678; AVX2-NEXT: .LBB1_11: # %cond.store9679; AVX2-NEXT: vpextrw $5, %xmm0, 10(%rdi)680; AVX2-NEXT: testb $64, %al681; AVX2-NEXT: je .LBB1_14682; AVX2-NEXT: .LBB1_13: # %cond.store11683; AVX2-NEXT: vpextrw $6, %xmm0, 12(%rdi)684; AVX2-NEXT: testb $-128, %al685; AVX2-NEXT: je .LBB1_16686; AVX2-NEXT: .LBB1_15: # %cond.store13687; AVX2-NEXT: vpextrw $7, %xmm0, 14(%rdi)688; AVX2-NEXT: vzeroupper689; AVX2-NEXT: retq690;691; AVX512F-LABEL: truncstore_v8i64_v8i16:692; AVX512F: # %bb.0:693; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1694; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0695; AVX512F-NEXT: vpmovusqw %zmm0, %xmm0696; AVX512F-NEXT: kmovw %k0, %eax697; AVX512F-NEXT: testb $1, %al698; AVX512F-NEXT: jne .LBB1_1699; AVX512F-NEXT: # %bb.2: # %else700; AVX512F-NEXT: testb $2, %al701; AVX512F-NEXT: jne .LBB1_3702; AVX512F-NEXT: .LBB1_4: # %else2703; AVX512F-NEXT: testb $4, %al704; AVX512F-NEXT: jne .LBB1_5705; AVX512F-NEXT: .LBB1_6: # %else4706; AVX512F-NEXT: testb $8, %al707; AVX512F-NEXT: jne .LBB1_7708; AVX512F-NEXT: .LBB1_8: # %else6709; AVX512F-NEXT: testb $16, %al710; AVX512F-NEXT: jne .LBB1_9711; AVX512F-NEXT: .LBB1_10: # %else8712; AVX512F-NEXT: testb $32, %al713; AVX512F-NEXT: jne .LBB1_11714; AVX512F-NEXT: .LBB1_12: # %else10715; AVX512F-NEXT: testb $64, %al716; AVX512F-NEXT: jne .LBB1_13717; AVX512F-NEXT: .LBB1_14: # %else12718; AVX512F-NEXT: testb $-128, %al719; AVX512F-NEXT: jne .LBB1_15720; AVX512F-NEXT: .LBB1_16: # %else14721; AVX512F-NEXT: vzeroupper722; AVX512F-NEXT: retq723; AVX512F-NEXT: .LBB1_1: # %cond.store724; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)725; AVX512F-NEXT: testb $2, %al726; AVX512F-NEXT: je .LBB1_4727; AVX512F-NEXT: .LBB1_3: # %cond.store1728; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)729; AVX512F-NEXT: testb $4, %al730; AVX512F-NEXT: je .LBB1_6731; AVX512F-NEXT: .LBB1_5: # %cond.store3732; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)733; AVX512F-NEXT: testb $8, %al734; AVX512F-NEXT: je .LBB1_8735; AVX512F-NEXT: .LBB1_7: # %cond.store5736; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)737; AVX512F-NEXT: testb $16, %al738; AVX512F-NEXT: je .LBB1_10739; AVX512F-NEXT: .LBB1_9: # %cond.store7740; AVX512F-NEXT: vpextrw $4, %xmm0, 8(%rdi)741; AVX512F-NEXT: testb $32, %al742; AVX512F-NEXT: je .LBB1_12743; AVX512F-NEXT: .LBB1_11: # %cond.store9744; AVX512F-NEXT: vpextrw $5, %xmm0, 10(%rdi)745; AVX512F-NEXT: testb $64, %al746; AVX512F-NEXT: je .LBB1_14747; AVX512F-NEXT: .LBB1_13: # %cond.store11748; AVX512F-NEXT: vpextrw $6, %xmm0, 12(%rdi)749; AVX512F-NEXT: testb $-128, %al750; AVX512F-NEXT: je .LBB1_16751; AVX512F-NEXT: .LBB1_15: # %cond.store13752; AVX512F-NEXT: vpextrw $7, %xmm0, 14(%rdi)753; AVX512F-NEXT: vzeroupper754; AVX512F-NEXT: retq755;756; AVX512FVL-LABEL: truncstore_v8i64_v8i16:757; AVX512FVL: # %bb.0:758; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k0759; AVX512FVL-NEXT: vpmovusqw %zmm0, %xmm0760; AVX512FVL-NEXT: kmovw %k0, %eax761; AVX512FVL-NEXT: testb $1, %al762; AVX512FVL-NEXT: jne .LBB1_1763; AVX512FVL-NEXT: # %bb.2: # %else764; AVX512FVL-NEXT: testb $2, %al765; AVX512FVL-NEXT: jne .LBB1_3766; AVX512FVL-NEXT: .LBB1_4: # %else2767; AVX512FVL-NEXT: testb $4, %al768; AVX512FVL-NEXT: jne .LBB1_5769; AVX512FVL-NEXT: .LBB1_6: # %else4770; AVX512FVL-NEXT: testb $8, %al771; AVX512FVL-NEXT: jne .LBB1_7772; AVX512FVL-NEXT: .LBB1_8: # %else6773; AVX512FVL-NEXT: testb $16, %al774; AVX512FVL-NEXT: jne .LBB1_9775; AVX512FVL-NEXT: .LBB1_10: # %else8776; AVX512FVL-NEXT: testb $32, %al777; AVX512FVL-NEXT: jne .LBB1_11778; AVX512FVL-NEXT: .LBB1_12: # %else10779; AVX512FVL-NEXT: testb $64, %al780; AVX512FVL-NEXT: jne .LBB1_13781; AVX512FVL-NEXT: .LBB1_14: # %else12782; AVX512FVL-NEXT: testb $-128, %al783; AVX512FVL-NEXT: jne .LBB1_15784; AVX512FVL-NEXT: .LBB1_16: # %else14785; AVX512FVL-NEXT: vzeroupper786; AVX512FVL-NEXT: retq787; AVX512FVL-NEXT: .LBB1_1: # %cond.store788; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)789; AVX512FVL-NEXT: testb $2, %al790; AVX512FVL-NEXT: je .LBB1_4791; AVX512FVL-NEXT: .LBB1_3: # %cond.store1792; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)793; AVX512FVL-NEXT: testb $4, %al794; AVX512FVL-NEXT: je .LBB1_6795; AVX512FVL-NEXT: .LBB1_5: # %cond.store3796; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)797; AVX512FVL-NEXT: testb $8, %al798; AVX512FVL-NEXT: je .LBB1_8799; AVX512FVL-NEXT: .LBB1_7: # %cond.store5800; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)801; AVX512FVL-NEXT: testb $16, %al802; AVX512FVL-NEXT: je .LBB1_10803; AVX512FVL-NEXT: .LBB1_9: # %cond.store7804; AVX512FVL-NEXT: vpextrw $4, %xmm0, 8(%rdi)805; AVX512FVL-NEXT: testb $32, %al806; AVX512FVL-NEXT: je .LBB1_12807; AVX512FVL-NEXT: .LBB1_11: # %cond.store9808; AVX512FVL-NEXT: vpextrw $5, %xmm0, 10(%rdi)809; AVX512FVL-NEXT: testb $64, %al810; AVX512FVL-NEXT: je .LBB1_14811; AVX512FVL-NEXT: .LBB1_13: # %cond.store11812; AVX512FVL-NEXT: vpextrw $6, %xmm0, 12(%rdi)813; AVX512FVL-NEXT: testb $-128, %al814; AVX512FVL-NEXT: je .LBB1_16815; AVX512FVL-NEXT: .LBB1_15: # %cond.store13816; AVX512FVL-NEXT: vpextrw $7, %xmm0, 14(%rdi)817; AVX512FVL-NEXT: vzeroupper818; AVX512FVL-NEXT: retq819;820; AVX512BW-LABEL: truncstore_v8i64_v8i16:821; AVX512BW: # %bb.0:822; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1823; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k1824; AVX512BW-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0825; AVX512BW-NEXT: vpmovqw %zmm0, (%rdi) {%k1}826; AVX512BW-NEXT: vzeroupper827; AVX512BW-NEXT: retq828;829; AVX512BWVL-LABEL: truncstore_v8i64_v8i16:830; AVX512BWVL: # %bb.0:831; AVX512BWVL-NEXT: vptestmd %ymm1, %ymm1, %k1832; AVX512BWVL-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0833; AVX512BWVL-NEXT: vpmovqw %zmm0, (%rdi) {%k1}834; AVX512BWVL-NEXT: vzeroupper835; AVX512BWVL-NEXT: retq836 %a = icmp ne <8 x i32> %mask, zeroinitializer837 %b = icmp ult <8 x i64> %x, <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>838 %c = select <8 x i1> %b, <8 x i64> %x, <8 x i64> <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>839 %d = trunc <8 x i64> %c to <8 x i16>840 call void @llvm.masked.store.v8i16.p0(<8 x i16> %d, ptr %p, i32 1, <8 x i1> %a)841 ret void842}843 844define void @truncstore_v8i64_v8i8(<8 x i64> %x, ptr %p, <8 x i32> %mask) {845; SSE2-LABEL: truncstore_v8i64_v8i8:846; SSE2: # %bb.0:847; SSE2-NEXT: pxor %xmm6, %xmm6848; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [255,255]849; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]850; SSE2-NEXT: movdqa %xmm1, %xmm10851; SSE2-NEXT: pxor %xmm8, %xmm10852; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]853; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903,2147483903,2147483903]854; SSE2-NEXT: movdqa %xmm9, %xmm12855; SSE2-NEXT: pcmpgtd %xmm11, %xmm12856; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]857; SSE2-NEXT: pcmpeqd %xmm8, %xmm10858; SSE2-NEXT: pand %xmm12, %xmm10859; SSE2-NEXT: pand %xmm10, %xmm1860; SSE2-NEXT: pandn %xmm7, %xmm10861; SSE2-NEXT: por %xmm1, %xmm10862; SSE2-NEXT: movdqa %xmm0, %xmm1863; SSE2-NEXT: pxor %xmm8, %xmm1864; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm1[0,0,2,2]865; SSE2-NEXT: movdqa %xmm9, %xmm12866; SSE2-NEXT: pcmpgtd %xmm11, %xmm12867; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]868; SSE2-NEXT: pcmpeqd %xmm8, %xmm1869; SSE2-NEXT: pand %xmm12, %xmm1870; SSE2-NEXT: pand %xmm1, %xmm0871; SSE2-NEXT: pandn %xmm7, %xmm1872; SSE2-NEXT: por %xmm0, %xmm1873; SSE2-NEXT: packuswb %xmm10, %xmm1874; SSE2-NEXT: movdqa %xmm3, %xmm0875; SSE2-NEXT: pxor %xmm8, %xmm0876; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm0[0,0,2,2]877; SSE2-NEXT: movdqa %xmm9, %xmm11878; SSE2-NEXT: pcmpgtd %xmm10, %xmm11879; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]880; SSE2-NEXT: pcmpeqd %xmm8, %xmm0881; SSE2-NEXT: pand %xmm11, %xmm0882; SSE2-NEXT: pand %xmm0, %xmm3883; SSE2-NEXT: pandn %xmm7, %xmm0884; SSE2-NEXT: por %xmm3, %xmm0885; SSE2-NEXT: movdqa %xmm2, %xmm3886; SSE2-NEXT: pxor %xmm8, %xmm3887; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm3[0,0,2,2]888; SSE2-NEXT: pcmpgtd %xmm10, %xmm9889; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]890; SSE2-NEXT: pcmpeqd %xmm8, %xmm3891; SSE2-NEXT: pand %xmm9, %xmm3892; SSE2-NEXT: pand %xmm3, %xmm2893; SSE2-NEXT: pandn %xmm7, %xmm3894; SSE2-NEXT: por %xmm2, %xmm3895; SSE2-NEXT: packuswb %xmm0, %xmm3896; SSE2-NEXT: packuswb %xmm3, %xmm1897; SSE2-NEXT: packuswb %xmm1, %xmm1898; SSE2-NEXT: pcmpeqd %xmm6, %xmm5899; SSE2-NEXT: pcmpeqd %xmm6, %xmm4900; SSE2-NEXT: packssdw %xmm5, %xmm4901; SSE2-NEXT: packsswb %xmm4, %xmm4902; SSE2-NEXT: pmovmskb %xmm4, %eax903; SSE2-NEXT: notl %eax904; SSE2-NEXT: testb $1, %al905; SSE2-NEXT: movd %xmm1, %ecx906; SSE2-NEXT: jne .LBB2_1907; SSE2-NEXT: # %bb.2: # %else908; SSE2-NEXT: testb $2, %al909; SSE2-NEXT: jne .LBB2_3910; SSE2-NEXT: .LBB2_4: # %else2911; SSE2-NEXT: testb $4, %al912; SSE2-NEXT: jne .LBB2_5913; SSE2-NEXT: .LBB2_6: # %else4914; SSE2-NEXT: testb $8, %al915; SSE2-NEXT: je .LBB2_8916; SSE2-NEXT: .LBB2_7: # %cond.store5917; SSE2-NEXT: shrl $24, %ecx918; SSE2-NEXT: movb %cl, 3(%rdi)919; SSE2-NEXT: .LBB2_8: # %else6920; SSE2-NEXT: testb $16, %al921; SSE2-NEXT: pextrw $2, %xmm1, %ecx922; SSE2-NEXT: je .LBB2_10923; SSE2-NEXT: # %bb.9: # %cond.store7924; SSE2-NEXT: movb %cl, 4(%rdi)925; SSE2-NEXT: .LBB2_10: # %else8926; SSE2-NEXT: testb $32, %al927; SSE2-NEXT: je .LBB2_12928; SSE2-NEXT: # %bb.11: # %cond.store9929; SSE2-NEXT: movb %ch, 5(%rdi)930; SSE2-NEXT: .LBB2_12: # %else10931; SSE2-NEXT: testb $64, %al932; SSE2-NEXT: pextrw $3, %xmm1, %ecx933; SSE2-NEXT: jne .LBB2_13934; SSE2-NEXT: # %bb.14: # %else12935; SSE2-NEXT: testb $-128, %al936; SSE2-NEXT: jne .LBB2_15937; SSE2-NEXT: .LBB2_16: # %else14938; SSE2-NEXT: retq939; SSE2-NEXT: .LBB2_1: # %cond.store940; SSE2-NEXT: movb %cl, (%rdi)941; SSE2-NEXT: testb $2, %al942; SSE2-NEXT: je .LBB2_4943; SSE2-NEXT: .LBB2_3: # %cond.store1944; SSE2-NEXT: movb %ch, 1(%rdi)945; SSE2-NEXT: testb $4, %al946; SSE2-NEXT: je .LBB2_6947; SSE2-NEXT: .LBB2_5: # %cond.store3948; SSE2-NEXT: movl %ecx, %edx949; SSE2-NEXT: shrl $16, %edx950; SSE2-NEXT: movb %dl, 2(%rdi)951; SSE2-NEXT: testb $8, %al952; SSE2-NEXT: jne .LBB2_7953; SSE2-NEXT: jmp .LBB2_8954; SSE2-NEXT: .LBB2_13: # %cond.store11955; SSE2-NEXT: movb %cl, 6(%rdi)956; SSE2-NEXT: testb $-128, %al957; SSE2-NEXT: je .LBB2_16958; SSE2-NEXT: .LBB2_15: # %cond.store13959; SSE2-NEXT: movb %ch, 7(%rdi)960; SSE2-NEXT: retq961;962; SSE4-LABEL: truncstore_v8i64_v8i8:963; SSE4: # %bb.0:964; SSE4-NEXT: movdqa %xmm0, %xmm6965; SSE4-NEXT: pxor %xmm8, %xmm8966; SSE4-NEXT: movapd {{.*#+}} xmm9 = [255,255]967; SSE4-NEXT: movdqa {{.*#+}} xmm10 = [9223372036854775808,9223372036854775808]968; SSE4-NEXT: movdqa %xmm1, %xmm11969; SSE4-NEXT: pxor %xmm10, %xmm11970; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854776063,9223372036854776063]971; SSE4-NEXT: movdqa %xmm7, %xmm0972; SSE4-NEXT: pcmpgtq %xmm11, %xmm0973; SSE4-NEXT: movapd %xmm9, %xmm11974; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm11975; SSE4-NEXT: movdqa %xmm6, %xmm1976; SSE4-NEXT: pxor %xmm10, %xmm1977; SSE4-NEXT: movdqa %xmm7, %xmm0978; SSE4-NEXT: pcmpgtq %xmm1, %xmm0979; SSE4-NEXT: movapd %xmm9, %xmm1980; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm1981; SSE4-NEXT: packusdw %xmm11, %xmm1982; SSE4-NEXT: movdqa %xmm3, %xmm6983; SSE4-NEXT: pxor %xmm10, %xmm6984; SSE4-NEXT: movdqa %xmm7, %xmm0985; SSE4-NEXT: pcmpgtq %xmm6, %xmm0986; SSE4-NEXT: movapd %xmm9, %xmm6987; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm6988; SSE4-NEXT: pxor %xmm2, %xmm10989; SSE4-NEXT: pcmpgtq %xmm10, %xmm7990; SSE4-NEXT: movdqa %xmm7, %xmm0991; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9992; SSE4-NEXT: packusdw %xmm6, %xmm9993; SSE4-NEXT: packusdw %xmm9, %xmm1994; SSE4-NEXT: packuswb %xmm1, %xmm1995; SSE4-NEXT: pcmpeqd %xmm8, %xmm5996; SSE4-NEXT: pcmpeqd %xmm8, %xmm4997; SSE4-NEXT: packssdw %xmm5, %xmm4998; SSE4-NEXT: packsswb %xmm4, %xmm4999; SSE4-NEXT: pmovmskb %xmm4, %eax1000; SSE4-NEXT: notl %eax1001; SSE4-NEXT: testb $1, %al1002; SSE4-NEXT: jne .LBB2_11003; SSE4-NEXT: # %bb.2: # %else1004; SSE4-NEXT: testb $2, %al1005; SSE4-NEXT: jne .LBB2_31006; SSE4-NEXT: .LBB2_4: # %else21007; SSE4-NEXT: testb $4, %al1008; SSE4-NEXT: jne .LBB2_51009; SSE4-NEXT: .LBB2_6: # %else41010; SSE4-NEXT: testb $8, %al1011; SSE4-NEXT: jne .LBB2_71012; SSE4-NEXT: .LBB2_8: # %else61013; SSE4-NEXT: testb $16, %al1014; SSE4-NEXT: jne .LBB2_91015; SSE4-NEXT: .LBB2_10: # %else81016; SSE4-NEXT: testb $32, %al1017; SSE4-NEXT: jne .LBB2_111018; SSE4-NEXT: .LBB2_12: # %else101019; SSE4-NEXT: testb $64, %al1020; SSE4-NEXT: jne .LBB2_131021; SSE4-NEXT: .LBB2_14: # %else121022; SSE4-NEXT: testb $-128, %al1023; SSE4-NEXT: jne .LBB2_151024; SSE4-NEXT: .LBB2_16: # %else141025; SSE4-NEXT: retq1026; SSE4-NEXT: .LBB2_1: # %cond.store1027; SSE4-NEXT: pextrb $0, %xmm1, (%rdi)1028; SSE4-NEXT: testb $2, %al1029; SSE4-NEXT: je .LBB2_41030; SSE4-NEXT: .LBB2_3: # %cond.store11031; SSE4-NEXT: pextrb $1, %xmm1, 1(%rdi)1032; SSE4-NEXT: testb $4, %al1033; SSE4-NEXT: je .LBB2_61034; SSE4-NEXT: .LBB2_5: # %cond.store31035; SSE4-NEXT: pextrb $2, %xmm1, 2(%rdi)1036; SSE4-NEXT: testb $8, %al1037; SSE4-NEXT: je .LBB2_81038; SSE4-NEXT: .LBB2_7: # %cond.store51039; SSE4-NEXT: pextrb $3, %xmm1, 3(%rdi)1040; SSE4-NEXT: testb $16, %al1041; SSE4-NEXT: je .LBB2_101042; SSE4-NEXT: .LBB2_9: # %cond.store71043; SSE4-NEXT: pextrb $4, %xmm1, 4(%rdi)1044; SSE4-NEXT: testb $32, %al1045; SSE4-NEXT: je .LBB2_121046; SSE4-NEXT: .LBB2_11: # %cond.store91047; SSE4-NEXT: pextrb $5, %xmm1, 5(%rdi)1048; SSE4-NEXT: testb $64, %al1049; SSE4-NEXT: je .LBB2_141050; SSE4-NEXT: .LBB2_13: # %cond.store111051; SSE4-NEXT: pextrb $6, %xmm1, 6(%rdi)1052; SSE4-NEXT: testb $-128, %al1053; SSE4-NEXT: je .LBB2_161054; SSE4-NEXT: .LBB2_15: # %cond.store131055; SSE4-NEXT: pextrb $7, %xmm1, 7(%rdi)1056; SSE4-NEXT: retq1057;1058; AVX1-LABEL: truncstore_v8i64_v8i8:1059; AVX1: # %bb.0:1060; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]1061; AVX1-NEXT: # xmm3 = mem[0,0]1062; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm41063; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854776063,9223372036854776063]1064; AVX1-NEXT: # xmm5 = mem[0,0]1065; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm41066; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm61067; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm71068; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm71069; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm81070; AVX1-NEXT: vpcmpgtq %xmm8, %xmm5, %xmm81071; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm91072; AVX1-NEXT: vpxor %xmm3, %xmm9, %xmm31073; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm31074; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [255,255]1075; AVX1-NEXT: # xmm5 = mem[0,0]1076; AVX1-NEXT: vblendvpd %xmm3, %xmm9, %xmm5, %xmm31077; AVX1-NEXT: vblendvpd %xmm8, %xmm1, %xmm5, %xmm11078; AVX1-NEXT: vpackusdw %xmm3, %xmm1, %xmm11079; AVX1-NEXT: vblendvpd %xmm7, %xmm6, %xmm5, %xmm31080; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm5, %xmm01081; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm01082; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm01083; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm01084; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm11085; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm31086; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm11087; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm21088; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm11089; AVX1-NEXT: vmovmskps %ymm1, %eax1090; AVX1-NEXT: notl %eax1091; AVX1-NEXT: testb $1, %al1092; AVX1-NEXT: jne .LBB2_11093; AVX1-NEXT: # %bb.2: # %else1094; AVX1-NEXT: testb $2, %al1095; AVX1-NEXT: jne .LBB2_31096; AVX1-NEXT: .LBB2_4: # %else21097; AVX1-NEXT: testb $4, %al1098; AVX1-NEXT: jne .LBB2_51099; AVX1-NEXT: .LBB2_6: # %else41100; AVX1-NEXT: testb $8, %al1101; AVX1-NEXT: jne .LBB2_71102; AVX1-NEXT: .LBB2_8: # %else61103; AVX1-NEXT: testb $16, %al1104; AVX1-NEXT: jne .LBB2_91105; AVX1-NEXT: .LBB2_10: # %else81106; AVX1-NEXT: testb $32, %al1107; AVX1-NEXT: jne .LBB2_111108; AVX1-NEXT: .LBB2_12: # %else101109; AVX1-NEXT: testb $64, %al1110; AVX1-NEXT: jne .LBB2_131111; AVX1-NEXT: .LBB2_14: # %else121112; AVX1-NEXT: testb $-128, %al1113; AVX1-NEXT: jne .LBB2_151114; AVX1-NEXT: .LBB2_16: # %else141115; AVX1-NEXT: vzeroupper1116; AVX1-NEXT: retq1117; AVX1-NEXT: .LBB2_1: # %cond.store1118; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)1119; AVX1-NEXT: testb $2, %al1120; AVX1-NEXT: je .LBB2_41121; AVX1-NEXT: .LBB2_3: # %cond.store11122; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)1123; AVX1-NEXT: testb $4, %al1124; AVX1-NEXT: je .LBB2_61125; AVX1-NEXT: .LBB2_5: # %cond.store31126; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)1127; AVX1-NEXT: testb $8, %al1128; AVX1-NEXT: je .LBB2_81129; AVX1-NEXT: .LBB2_7: # %cond.store51130; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)1131; AVX1-NEXT: testb $16, %al1132; AVX1-NEXT: je .LBB2_101133; AVX1-NEXT: .LBB2_9: # %cond.store71134; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)1135; AVX1-NEXT: testb $32, %al1136; AVX1-NEXT: je .LBB2_121137; AVX1-NEXT: .LBB2_11: # %cond.store91138; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)1139; AVX1-NEXT: testb $64, %al1140; AVX1-NEXT: je .LBB2_141141; AVX1-NEXT: .LBB2_13: # %cond.store111142; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)1143; AVX1-NEXT: testb $-128, %al1144; AVX1-NEXT: je .LBB2_161145; AVX1-NEXT: .LBB2_15: # %cond.store131146; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)1147; AVX1-NEXT: vzeroupper1148; AVX1-NEXT: retq1149;1150; AVX2-LABEL: truncstore_v8i64_v8i8:1151; AVX2: # %bb.0:1152; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm31153; AVX2-NEXT: vbroadcastsd {{.*#+}} ymm4 = [255,255,255,255]1154; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm5 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1155; AVX2-NEXT: vpxor %ymm5, %ymm1, %ymm61156; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm7 = [9223372036854776063,9223372036854776063,9223372036854776063,9223372036854776063]1157; AVX2-NEXT: vpcmpgtq %ymm6, %ymm7, %ymm61158; AVX2-NEXT: vblendvpd %ymm6, %ymm1, %ymm4, %ymm11159; AVX2-NEXT: vpxor %ymm5, %ymm0, %ymm51160; AVX2-NEXT: vpcmpgtq %ymm5, %ymm7, %ymm51161; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm01162; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm01163; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm11164; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm01165; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]1166; AVX2-NEXT: vpackuswb %xmm0, %xmm0, %xmm01167; AVX2-NEXT: vpcmpeqd %ymm3, %ymm2, %ymm11168; AVX2-NEXT: vmovmskps %ymm1, %eax1169; AVX2-NEXT: notl %eax1170; AVX2-NEXT: testb $1, %al1171; AVX2-NEXT: jne .LBB2_11172; AVX2-NEXT: # %bb.2: # %else1173; AVX2-NEXT: testb $2, %al1174; AVX2-NEXT: jne .LBB2_31175; AVX2-NEXT: .LBB2_4: # %else21176; AVX2-NEXT: testb $4, %al1177; AVX2-NEXT: jne .LBB2_51178; AVX2-NEXT: .LBB2_6: # %else41179; AVX2-NEXT: testb $8, %al1180; AVX2-NEXT: jne .LBB2_71181; AVX2-NEXT: .LBB2_8: # %else61182; AVX2-NEXT: testb $16, %al1183; AVX2-NEXT: jne .LBB2_91184; AVX2-NEXT: .LBB2_10: # %else81185; AVX2-NEXT: testb $32, %al1186; AVX2-NEXT: jne .LBB2_111187; AVX2-NEXT: .LBB2_12: # %else101188; AVX2-NEXT: testb $64, %al1189; AVX2-NEXT: jne .LBB2_131190; AVX2-NEXT: .LBB2_14: # %else121191; AVX2-NEXT: testb $-128, %al1192; AVX2-NEXT: jne .LBB2_151193; AVX2-NEXT: .LBB2_16: # %else141194; AVX2-NEXT: vzeroupper1195; AVX2-NEXT: retq1196; AVX2-NEXT: .LBB2_1: # %cond.store1197; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)1198; AVX2-NEXT: testb $2, %al1199; AVX2-NEXT: je .LBB2_41200; AVX2-NEXT: .LBB2_3: # %cond.store11201; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)1202; AVX2-NEXT: testb $4, %al1203; AVX2-NEXT: je .LBB2_61204; AVX2-NEXT: .LBB2_5: # %cond.store31205; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)1206; AVX2-NEXT: testb $8, %al1207; AVX2-NEXT: je .LBB2_81208; AVX2-NEXT: .LBB2_7: # %cond.store51209; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)1210; AVX2-NEXT: testb $16, %al1211; AVX2-NEXT: je .LBB2_101212; AVX2-NEXT: .LBB2_9: # %cond.store71213; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)1214; AVX2-NEXT: testb $32, %al1215; AVX2-NEXT: je .LBB2_121216; AVX2-NEXT: .LBB2_11: # %cond.store91217; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)1218; AVX2-NEXT: testb $64, %al1219; AVX2-NEXT: je .LBB2_141220; AVX2-NEXT: .LBB2_13: # %cond.store111221; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)1222; AVX2-NEXT: testb $-128, %al1223; AVX2-NEXT: je .LBB2_161224; AVX2-NEXT: .LBB2_15: # %cond.store131225; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)1226; AVX2-NEXT: vzeroupper1227; AVX2-NEXT: retq1228;1229; AVX512F-LABEL: truncstore_v8i64_v8i8:1230; AVX512F: # %bb.0:1231; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm11232; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k01233; AVX512F-NEXT: vpmovusqb %zmm0, %xmm01234; AVX512F-NEXT: kmovw %k0, %eax1235; AVX512F-NEXT: testb $1, %al1236; AVX512F-NEXT: jne .LBB2_11237; AVX512F-NEXT: # %bb.2: # %else1238; AVX512F-NEXT: testb $2, %al1239; AVX512F-NEXT: jne .LBB2_31240; AVX512F-NEXT: .LBB2_4: # %else21241; AVX512F-NEXT: testb $4, %al1242; AVX512F-NEXT: jne .LBB2_51243; AVX512F-NEXT: .LBB2_6: # %else41244; AVX512F-NEXT: testb $8, %al1245; AVX512F-NEXT: jne .LBB2_71246; AVX512F-NEXT: .LBB2_8: # %else61247; AVX512F-NEXT: testb $16, %al1248; AVX512F-NEXT: jne .LBB2_91249; AVX512F-NEXT: .LBB2_10: # %else81250; AVX512F-NEXT: testb $32, %al1251; AVX512F-NEXT: jne .LBB2_111252; AVX512F-NEXT: .LBB2_12: # %else101253; AVX512F-NEXT: testb $64, %al1254; AVX512F-NEXT: jne .LBB2_131255; AVX512F-NEXT: .LBB2_14: # %else121256; AVX512F-NEXT: testb $-128, %al1257; AVX512F-NEXT: jne .LBB2_151258; AVX512F-NEXT: .LBB2_16: # %else141259; AVX512F-NEXT: vzeroupper1260; AVX512F-NEXT: retq1261; AVX512F-NEXT: .LBB2_1: # %cond.store1262; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)1263; AVX512F-NEXT: testb $2, %al1264; AVX512F-NEXT: je .LBB2_41265; AVX512F-NEXT: .LBB2_3: # %cond.store11266; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)1267; AVX512F-NEXT: testb $4, %al1268; AVX512F-NEXT: je .LBB2_61269; AVX512F-NEXT: .LBB2_5: # %cond.store31270; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)1271; AVX512F-NEXT: testb $8, %al1272; AVX512F-NEXT: je .LBB2_81273; AVX512F-NEXT: .LBB2_7: # %cond.store51274; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)1275; AVX512F-NEXT: testb $16, %al1276; AVX512F-NEXT: je .LBB2_101277; AVX512F-NEXT: .LBB2_9: # %cond.store71278; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)1279; AVX512F-NEXT: testb $32, %al1280; AVX512F-NEXT: je .LBB2_121281; AVX512F-NEXT: .LBB2_11: # %cond.store91282; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)1283; AVX512F-NEXT: testb $64, %al1284; AVX512F-NEXT: je .LBB2_141285; AVX512F-NEXT: .LBB2_13: # %cond.store111286; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)1287; AVX512F-NEXT: testb $-128, %al1288; AVX512F-NEXT: je .LBB2_161289; AVX512F-NEXT: .LBB2_15: # %cond.store131290; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)1291; AVX512F-NEXT: vzeroupper1292; AVX512F-NEXT: retq1293;1294; AVX512FVL-LABEL: truncstore_v8i64_v8i8:1295; AVX512FVL: # %bb.0:1296; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k01297; AVX512FVL-NEXT: vpmovusqb %zmm0, %xmm01298; AVX512FVL-NEXT: kmovw %k0, %eax1299; AVX512FVL-NEXT: testb $1, %al1300; AVX512FVL-NEXT: jne .LBB2_11301; AVX512FVL-NEXT: # %bb.2: # %else1302; AVX512FVL-NEXT: testb $2, %al1303; AVX512FVL-NEXT: jne .LBB2_31304; AVX512FVL-NEXT: .LBB2_4: # %else21305; AVX512FVL-NEXT: testb $4, %al1306; AVX512FVL-NEXT: jne .LBB2_51307; AVX512FVL-NEXT: .LBB2_6: # %else41308; AVX512FVL-NEXT: testb $8, %al1309; AVX512FVL-NEXT: jne .LBB2_71310; AVX512FVL-NEXT: .LBB2_8: # %else61311; AVX512FVL-NEXT: testb $16, %al1312; AVX512FVL-NEXT: jne .LBB2_91313; AVX512FVL-NEXT: .LBB2_10: # %else81314; AVX512FVL-NEXT: testb $32, %al1315; AVX512FVL-NEXT: jne .LBB2_111316; AVX512FVL-NEXT: .LBB2_12: # %else101317; AVX512FVL-NEXT: testb $64, %al1318; AVX512FVL-NEXT: jne .LBB2_131319; AVX512FVL-NEXT: .LBB2_14: # %else121320; AVX512FVL-NEXT: testb $-128, %al1321; AVX512FVL-NEXT: jne .LBB2_151322; AVX512FVL-NEXT: .LBB2_16: # %else141323; AVX512FVL-NEXT: vzeroupper1324; AVX512FVL-NEXT: retq1325; AVX512FVL-NEXT: .LBB2_1: # %cond.store1326; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)1327; AVX512FVL-NEXT: testb $2, %al1328; AVX512FVL-NEXT: je .LBB2_41329; AVX512FVL-NEXT: .LBB2_3: # %cond.store11330; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)1331; AVX512FVL-NEXT: testb $4, %al1332; AVX512FVL-NEXT: je .LBB2_61333; AVX512FVL-NEXT: .LBB2_5: # %cond.store31334; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)1335; AVX512FVL-NEXT: testb $8, %al1336; AVX512FVL-NEXT: je .LBB2_81337; AVX512FVL-NEXT: .LBB2_7: # %cond.store51338; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)1339; AVX512FVL-NEXT: testb $16, %al1340; AVX512FVL-NEXT: je .LBB2_101341; AVX512FVL-NEXT: .LBB2_9: # %cond.store71342; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)1343; AVX512FVL-NEXT: testb $32, %al1344; AVX512FVL-NEXT: je .LBB2_121345; AVX512FVL-NEXT: .LBB2_11: # %cond.store91346; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)1347; AVX512FVL-NEXT: testb $64, %al1348; AVX512FVL-NEXT: je .LBB2_141349; AVX512FVL-NEXT: .LBB2_13: # %cond.store111350; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)1351; AVX512FVL-NEXT: testb $-128, %al1352; AVX512FVL-NEXT: je .LBB2_161353; AVX512FVL-NEXT: .LBB2_15: # %cond.store131354; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)1355; AVX512FVL-NEXT: vzeroupper1356; AVX512FVL-NEXT: retq1357;1358; AVX512BW-LABEL: truncstore_v8i64_v8i8:1359; AVX512BW: # %bb.0:1360; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm11361; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k11362; AVX512BW-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm01363; AVX512BW-NEXT: vpmovqb %zmm0, (%rdi) {%k1}1364; AVX512BW-NEXT: vzeroupper1365; AVX512BW-NEXT: retq1366;1367; AVX512BWVL-LABEL: truncstore_v8i64_v8i8:1368; AVX512BWVL: # %bb.0:1369; AVX512BWVL-NEXT: vptestmd %ymm1, %ymm1, %k11370; AVX512BWVL-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm01371; AVX512BWVL-NEXT: vpmovqb %zmm0, (%rdi) {%k1}1372; AVX512BWVL-NEXT: vzeroupper1373; AVX512BWVL-NEXT: retq1374 %a = icmp ne <8 x i32> %mask, zeroinitializer1375 %b = icmp ult <8 x i64> %x, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>1376 %c = select <8 x i1> %b, <8 x i64> %x, <8 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>1377 %d = trunc <8 x i64> %c to <8 x i8>1378 call void @llvm.masked.store.v8i8.p0(<8 x i8> %d, ptr %p, i32 1, <8 x i1> %a)1379 ret void1380}1381 1382define void @truncstore_v4i64_v4i32(<4 x i64> %x, ptr %p, <4 x i32> %mask) {1383; SSE2-LABEL: truncstore_v4i64_v4i32:1384; SSE2: # %bb.0:1385; SSE2-NEXT: pxor %xmm3, %xmm31386; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]1387; SSE2-NEXT: movdqa %xmm1, %xmm51388; SSE2-NEXT: pxor %xmm4, %xmm51389; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]1390; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483647,2147483647,2147483647,2147483647]1391; SSE2-NEXT: movdqa %xmm7, %xmm81392; SSE2-NEXT: pcmpgtd %xmm6, %xmm81393; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]1394; SSE2-NEXT: pcmpeqd %xmm4, %xmm51395; SSE2-NEXT: pand %xmm8, %xmm51396; SSE2-NEXT: pcmpeqd %xmm6, %xmm61397; SSE2-NEXT: pand %xmm5, %xmm11398; SSE2-NEXT: pxor %xmm6, %xmm51399; SSE2-NEXT: por %xmm1, %xmm51400; SSE2-NEXT: movdqa %xmm0, %xmm11401; SSE2-NEXT: pxor %xmm4, %xmm11402; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm1[0,0,2,2]1403; SSE2-NEXT: pcmpgtd %xmm8, %xmm71404; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1405; SSE2-NEXT: pcmpeqd %xmm4, %xmm11406; SSE2-NEXT: pand %xmm7, %xmm11407; SSE2-NEXT: pxor %xmm1, %xmm61408; SSE2-NEXT: pand %xmm0, %xmm11409; SSE2-NEXT: por %xmm6, %xmm11410; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm5[0,2]1411; SSE2-NEXT: pcmpeqd %xmm2, %xmm31412; SSE2-NEXT: movmskps %xmm3, %eax1413; SSE2-NEXT: xorl $15, %eax1414; SSE2-NEXT: testb $1, %al1415; SSE2-NEXT: jne .LBB3_11416; SSE2-NEXT: # %bb.2: # %else1417; SSE2-NEXT: testb $2, %al1418; SSE2-NEXT: jne .LBB3_31419; SSE2-NEXT: .LBB3_4: # %else21420; SSE2-NEXT: testb $4, %al1421; SSE2-NEXT: jne .LBB3_51422; SSE2-NEXT: .LBB3_6: # %else41423; SSE2-NEXT: testb $8, %al1424; SSE2-NEXT: jne .LBB3_71425; SSE2-NEXT: .LBB3_8: # %else61426; SSE2-NEXT: retq1427; SSE2-NEXT: .LBB3_1: # %cond.store1428; SSE2-NEXT: movss %xmm1, (%rdi)1429; SSE2-NEXT: testb $2, %al1430; SSE2-NEXT: je .LBB3_41431; SSE2-NEXT: .LBB3_3: # %cond.store11432; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1433; SSE2-NEXT: movd %xmm0, 4(%rdi)1434; SSE2-NEXT: testb $4, %al1435; SSE2-NEXT: je .LBB3_61436; SSE2-NEXT: .LBB3_5: # %cond.store31437; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1438; SSE2-NEXT: movd %xmm0, 8(%rdi)1439; SSE2-NEXT: testb $8, %al1440; SSE2-NEXT: je .LBB3_81441; SSE2-NEXT: .LBB3_7: # %cond.store51442; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[3,3,3,3]1443; SSE2-NEXT: movd %xmm0, 12(%rdi)1444; SSE2-NEXT: retq1445;1446; SSE4-LABEL: truncstore_v4i64_v4i32:1447; SSE4: # %bb.0:1448; SSE4-NEXT: movdqa %xmm0, %xmm31449; SSE4-NEXT: pxor %xmm6, %xmm61450; SSE4-NEXT: movapd {{.*#+}} xmm5 = [4294967295,4294967295]1451; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]1452; SSE4-NEXT: movdqa %xmm1, %xmm81453; SSE4-NEXT: pxor %xmm7, %xmm81454; SSE4-NEXT: movdqa {{.*#+}} xmm4 = [9223372041149743103,9223372041149743103]1455; SSE4-NEXT: movdqa %xmm4, %xmm01456; SSE4-NEXT: pcmpgtq %xmm8, %xmm01457; SSE4-NEXT: movapd %xmm5, %xmm81458; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm81459; SSE4-NEXT: pxor %xmm3, %xmm71460; SSE4-NEXT: pcmpgtq %xmm7, %xmm41461; SSE4-NEXT: movdqa %xmm4, %xmm01462; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm51463; SSE4-NEXT: shufps {{.*#+}} xmm5 = xmm5[0,2],xmm8[0,2]1464; SSE4-NEXT: pcmpeqd %xmm2, %xmm61465; SSE4-NEXT: movmskps %xmm6, %eax1466; SSE4-NEXT: xorl $15, %eax1467; SSE4-NEXT: testb $1, %al1468; SSE4-NEXT: jne .LBB3_11469; SSE4-NEXT: # %bb.2: # %else1470; SSE4-NEXT: testb $2, %al1471; SSE4-NEXT: jne .LBB3_31472; SSE4-NEXT: .LBB3_4: # %else21473; SSE4-NEXT: testb $4, %al1474; SSE4-NEXT: jne .LBB3_51475; SSE4-NEXT: .LBB3_6: # %else41476; SSE4-NEXT: testb $8, %al1477; SSE4-NEXT: jne .LBB3_71478; SSE4-NEXT: .LBB3_8: # %else61479; SSE4-NEXT: retq1480; SSE4-NEXT: .LBB3_1: # %cond.store1481; SSE4-NEXT: movss %xmm5, (%rdi)1482; SSE4-NEXT: testb $2, %al1483; SSE4-NEXT: je .LBB3_41484; SSE4-NEXT: .LBB3_3: # %cond.store11485; SSE4-NEXT: extractps $1, %xmm5, 4(%rdi)1486; SSE4-NEXT: testb $4, %al1487; SSE4-NEXT: je .LBB3_61488; SSE4-NEXT: .LBB3_5: # %cond.store31489; SSE4-NEXT: extractps $2, %xmm5, 8(%rdi)1490; SSE4-NEXT: testb $8, %al1491; SSE4-NEXT: je .LBB3_81492; SSE4-NEXT: .LBB3_7: # %cond.store51493; SSE4-NEXT: extractps $3, %xmm5, 12(%rdi)1494; SSE4-NEXT: retq1495;1496; AVX1-LABEL: truncstore_v4i64_v4i32:1497; AVX1: # %bb.0:1498; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm21499; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11500; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21501; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm11502; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21503; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]1504; AVX1-NEXT: # xmm3 = mem[0,0]1505; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm41506; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372041149743103,9223372041149743103]1507; AVX1-NEXT: # xmm5 = mem[0,0]1508; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm41509; AVX1-NEXT: vmovddup {{.*#+}} xmm6 = [4294967295,4294967295]1510; AVX1-NEXT: # xmm6 = mem[0,0]1511; AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm6, %xmm21512; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm31513; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm31514; AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm6, %xmm01515; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]1516; AVX1-NEXT: vmaskmovps %xmm0, %xmm1, (%rdi)1517; AVX1-NEXT: vzeroupper1518; AVX1-NEXT: retq1519;1520; AVX2-LABEL: truncstore_v4i64_v4i32:1521; AVX2: # %bb.0:1522; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21523; AVX2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11524; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21525; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm11526; AVX2-NEXT: vbroadcastsd {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]1527; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1528; AVX2-NEXT: vpxor %ymm3, %ymm0, %ymm31529; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372041149743102,9223372041149743102,9223372041149743102,9223372041149743102]1530; AVX2-NEXT: vpcmpgtq %ymm4, %ymm3, %ymm31531; AVX2-NEXT: vblendvpd %ymm3, %ymm2, %ymm0, %ymm01532; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm21533; AVX2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]1534; AVX2-NEXT: vpmaskmovd %xmm0, %xmm1, (%rdi)1535; AVX2-NEXT: vzeroupper1536; AVX2-NEXT: retq1537;1538; AVX512-LABEL: truncstore_v4i64_v4i32:1539; AVX512: # %bb.0:1540; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11541; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01542; AVX512-NEXT: vptestmd %zmm1, %zmm1, %k01543; AVX512-NEXT: kshiftlw $12, %k0, %k01544; AVX512-NEXT: kshiftrw $12, %k0, %k11545; AVX512-NEXT: vpmovusqd %zmm0, %ymm01546; AVX512-NEXT: vmovdqu32 %zmm0, (%rdi) {%k1}1547; AVX512-NEXT: vzeroupper1548; AVX512-NEXT: retq1549;1550; AVX512VL-LABEL: truncstore_v4i64_v4i32:1551; AVX512VL: # %bb.0:1552; AVX512VL-NEXT: vptestmd %xmm1, %xmm1, %k11553; AVX512VL-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm01554; AVX512VL-NEXT: vpmovqd %ymm0, (%rdi) {%k1}1555; AVX512VL-NEXT: vzeroupper1556; AVX512VL-NEXT: retq1557 %a = icmp ne <4 x i32> %mask, zeroinitializer1558 %b = icmp ult <4 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>1559 %c = select <4 x i1> %b, <4 x i64> %x, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>1560 %d = trunc <4 x i64> %c to <4 x i32>1561 call void @llvm.masked.store.v4i32.p0(<4 x i32> %d, ptr %p, i32 1, <4 x i1> %a)1562 ret void1563}1564 1565define void @truncstore_v4i64_v4i16(<4 x i64> %x, ptr %p, <4 x i32> %mask) {1566; SSE2-LABEL: truncstore_v4i64_v4i16:1567; SSE2: # %bb.0:1568; SSE2-NEXT: pxor %xmm3, %xmm31569; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]1570; SSE2-NEXT: movdqa %xmm1, %xmm51571; SSE2-NEXT: pxor %xmm4, %xmm51572; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]1573; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147549183,2147549183,2147549183,2147549183]1574; SSE2-NEXT: movdqa %xmm7, %xmm81575; SSE2-NEXT: pcmpgtd %xmm6, %xmm81576; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]1577; SSE2-NEXT: pcmpeqd %xmm4, %xmm51578; SSE2-NEXT: pand %xmm8, %xmm51579; SSE2-NEXT: pcmpeqd %xmm6, %xmm61580; SSE2-NEXT: pand %xmm5, %xmm11581; SSE2-NEXT: pxor %xmm6, %xmm51582; SSE2-NEXT: por %xmm1, %xmm51583; SSE2-NEXT: movdqa %xmm0, %xmm11584; SSE2-NEXT: pxor %xmm4, %xmm11585; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm1[0,0,2,2]1586; SSE2-NEXT: pcmpgtd %xmm8, %xmm71587; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1588; SSE2-NEXT: pcmpeqd %xmm4, %xmm11589; SSE2-NEXT: pand %xmm7, %xmm11590; SSE2-NEXT: pxor %xmm1, %xmm61591; SSE2-NEXT: pand %xmm0, %xmm11592; SSE2-NEXT: por %xmm6, %xmm11593; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm5[0,2]1594; SSE2-NEXT: pslld $16, %xmm11595; SSE2-NEXT: psrad $16, %xmm11596; SSE2-NEXT: packssdw %xmm3, %xmm11597; SSE2-NEXT: pcmpeqd %xmm3, %xmm21598; SSE2-NEXT: movmskps %xmm2, %eax1599; SSE2-NEXT: xorl $15, %eax1600; SSE2-NEXT: testb $1, %al1601; SSE2-NEXT: jne .LBB4_11602; SSE2-NEXT: # %bb.2: # %else1603; SSE2-NEXT: testb $2, %al1604; SSE2-NEXT: jne .LBB4_31605; SSE2-NEXT: .LBB4_4: # %else21606; SSE2-NEXT: testb $4, %al1607; SSE2-NEXT: jne .LBB4_51608; SSE2-NEXT: .LBB4_6: # %else41609; SSE2-NEXT: testb $8, %al1610; SSE2-NEXT: jne .LBB4_71611; SSE2-NEXT: .LBB4_8: # %else61612; SSE2-NEXT: retq1613; SSE2-NEXT: .LBB4_1: # %cond.store1614; SSE2-NEXT: movd %xmm1, %ecx1615; SSE2-NEXT: movw %cx, (%rdi)1616; SSE2-NEXT: testb $2, %al1617; SSE2-NEXT: je .LBB4_41618; SSE2-NEXT: .LBB4_3: # %cond.store11619; SSE2-NEXT: pextrw $1, %xmm1, %ecx1620; SSE2-NEXT: movw %cx, 2(%rdi)1621; SSE2-NEXT: testb $4, %al1622; SSE2-NEXT: je .LBB4_61623; SSE2-NEXT: .LBB4_5: # %cond.store31624; SSE2-NEXT: pextrw $2, %xmm1, %ecx1625; SSE2-NEXT: movw %cx, 4(%rdi)1626; SSE2-NEXT: testb $8, %al1627; SSE2-NEXT: je .LBB4_81628; SSE2-NEXT: .LBB4_7: # %cond.store51629; SSE2-NEXT: pextrw $3, %xmm1, %eax1630; SSE2-NEXT: movw %ax, 6(%rdi)1631; SSE2-NEXT: retq1632;1633; SSE4-LABEL: truncstore_v4i64_v4i16:1634; SSE4: # %bb.0:1635; SSE4-NEXT: movdqa %xmm0, %xmm31636; SSE4-NEXT: pxor %xmm6, %xmm61637; SSE4-NEXT: movapd {{.*#+}} xmm5 = [65535,65535]1638; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]1639; SSE4-NEXT: movdqa %xmm1, %xmm81640; SSE4-NEXT: pxor %xmm7, %xmm81641; SSE4-NEXT: movdqa {{.*#+}} xmm4 = [9223372036854841343,9223372036854841343]1642; SSE4-NEXT: movdqa %xmm4, %xmm01643; SSE4-NEXT: pcmpgtq %xmm8, %xmm01644; SSE4-NEXT: movapd %xmm5, %xmm81645; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm81646; SSE4-NEXT: pxor %xmm3, %xmm71647; SSE4-NEXT: pcmpgtq %xmm7, %xmm41648; SSE4-NEXT: movdqa %xmm4, %xmm01649; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm51650; SSE4-NEXT: packusdw %xmm8, %xmm51651; SSE4-NEXT: packusdw %xmm5, %xmm51652; SSE4-NEXT: pcmpeqd %xmm2, %xmm61653; SSE4-NEXT: movmskps %xmm6, %eax1654; SSE4-NEXT: xorl $15, %eax1655; SSE4-NEXT: testb $1, %al1656; SSE4-NEXT: jne .LBB4_11657; SSE4-NEXT: # %bb.2: # %else1658; SSE4-NEXT: testb $2, %al1659; SSE4-NEXT: jne .LBB4_31660; SSE4-NEXT: .LBB4_4: # %else21661; SSE4-NEXT: testb $4, %al1662; SSE4-NEXT: jne .LBB4_51663; SSE4-NEXT: .LBB4_6: # %else41664; SSE4-NEXT: testb $8, %al1665; SSE4-NEXT: jne .LBB4_71666; SSE4-NEXT: .LBB4_8: # %else61667; SSE4-NEXT: retq1668; SSE4-NEXT: .LBB4_1: # %cond.store1669; SSE4-NEXT: pextrw $0, %xmm5, (%rdi)1670; SSE4-NEXT: testb $2, %al1671; SSE4-NEXT: je .LBB4_41672; SSE4-NEXT: .LBB4_3: # %cond.store11673; SSE4-NEXT: pextrw $1, %xmm5, 2(%rdi)1674; SSE4-NEXT: testb $4, %al1675; SSE4-NEXT: je .LBB4_61676; SSE4-NEXT: .LBB4_5: # %cond.store31677; SSE4-NEXT: pextrw $2, %xmm5, 4(%rdi)1678; SSE4-NEXT: testb $8, %al1679; SSE4-NEXT: je .LBB4_81680; SSE4-NEXT: .LBB4_7: # %cond.store51681; SSE4-NEXT: pextrw $3, %xmm5, 6(%rdi)1682; SSE4-NEXT: retq1683;1684; AVX1-LABEL: truncstore_v4i64_v4i16:1685; AVX1: # %bb.0:1686; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm21687; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]1688; AVX1-NEXT: # xmm3 = mem[0,0]1689; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm41690; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854841343,9223372036854841343]1691; AVX1-NEXT: # xmm5 = mem[0,0]1692; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm41693; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm61694; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm31695; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm31696; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [65535,65535]1697; AVX1-NEXT: # xmm5 = mem[0,0]1698; AVX1-NEXT: vblendvpd %xmm3, %xmm6, %xmm5, %xmm31699; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm5, %xmm01700; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm01701; AVX1-NEXT: vpackusdw %xmm0, %xmm0, %xmm01702; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11703; AVX1-NEXT: vmovmskps %xmm1, %eax1704; AVX1-NEXT: xorl $15, %eax1705; AVX1-NEXT: testb $1, %al1706; AVX1-NEXT: jne .LBB4_11707; AVX1-NEXT: # %bb.2: # %else1708; AVX1-NEXT: testb $2, %al1709; AVX1-NEXT: jne .LBB4_31710; AVX1-NEXT: .LBB4_4: # %else21711; AVX1-NEXT: testb $4, %al1712; AVX1-NEXT: jne .LBB4_51713; AVX1-NEXT: .LBB4_6: # %else41714; AVX1-NEXT: testb $8, %al1715; AVX1-NEXT: jne .LBB4_71716; AVX1-NEXT: .LBB4_8: # %else61717; AVX1-NEXT: vzeroupper1718; AVX1-NEXT: retq1719; AVX1-NEXT: .LBB4_1: # %cond.store1720; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)1721; AVX1-NEXT: testb $2, %al1722; AVX1-NEXT: je .LBB4_41723; AVX1-NEXT: .LBB4_3: # %cond.store11724; AVX1-NEXT: vpextrw $1, %xmm0, 2(%rdi)1725; AVX1-NEXT: testb $4, %al1726; AVX1-NEXT: je .LBB4_61727; AVX1-NEXT: .LBB4_5: # %cond.store31728; AVX1-NEXT: vpextrw $2, %xmm0, 4(%rdi)1729; AVX1-NEXT: testb $8, %al1730; AVX1-NEXT: je .LBB4_81731; AVX1-NEXT: .LBB4_7: # %cond.store51732; AVX1-NEXT: vpextrw $3, %xmm0, 6(%rdi)1733; AVX1-NEXT: vzeroupper1734; AVX1-NEXT: retq1735;1736; AVX2-LABEL: truncstore_v4i64_v4i16:1737; AVX2: # %bb.0:1738; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21739; AVX2-NEXT: vbroadcastsd {{.*#+}} ymm3 = [65535,65535,65535,65535]1740; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1741; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm41742; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm5 = [9223372036854841342,9223372036854841342,9223372036854841342,9223372036854841342]1743; AVX2-NEXT: vpcmpgtq %ymm5, %ymm4, %ymm41744; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm0, %ymm01745; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm31746; AVX2-NEXT: vpackusdw %xmm3, %xmm0, %xmm01747; AVX2-NEXT: vpackusdw %xmm0, %xmm0, %xmm01748; AVX2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11749; AVX2-NEXT: vmovmskps %xmm1, %eax1750; AVX2-NEXT: xorl $15, %eax1751; AVX2-NEXT: testb $1, %al1752; AVX2-NEXT: jne .LBB4_11753; AVX2-NEXT: # %bb.2: # %else1754; AVX2-NEXT: testb $2, %al1755; AVX2-NEXT: jne .LBB4_31756; AVX2-NEXT: .LBB4_4: # %else21757; AVX2-NEXT: testb $4, %al1758; AVX2-NEXT: jne .LBB4_51759; AVX2-NEXT: .LBB4_6: # %else41760; AVX2-NEXT: testb $8, %al1761; AVX2-NEXT: jne .LBB4_71762; AVX2-NEXT: .LBB4_8: # %else61763; AVX2-NEXT: vzeroupper1764; AVX2-NEXT: retq1765; AVX2-NEXT: .LBB4_1: # %cond.store1766; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)1767; AVX2-NEXT: testb $2, %al1768; AVX2-NEXT: je .LBB4_41769; AVX2-NEXT: .LBB4_3: # %cond.store11770; AVX2-NEXT: vpextrw $1, %xmm0, 2(%rdi)1771; AVX2-NEXT: testb $4, %al1772; AVX2-NEXT: je .LBB4_61773; AVX2-NEXT: .LBB4_5: # %cond.store31774; AVX2-NEXT: vpextrw $2, %xmm0, 4(%rdi)1775; AVX2-NEXT: testb $8, %al1776; AVX2-NEXT: je .LBB4_81777; AVX2-NEXT: .LBB4_7: # %cond.store51778; AVX2-NEXT: vpextrw $3, %xmm0, 6(%rdi)1779; AVX2-NEXT: vzeroupper1780; AVX2-NEXT: retq1781;1782; AVX512F-LABEL: truncstore_v4i64_v4i16:1783; AVX512F: # %bb.0:1784; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11785; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01786; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k01787; AVX512F-NEXT: vpmovusqw %zmm0, %xmm01788; AVX512F-NEXT: kmovw %k0, %eax1789; AVX512F-NEXT: testb $1, %al1790; AVX512F-NEXT: jne .LBB4_11791; AVX512F-NEXT: # %bb.2: # %else1792; AVX512F-NEXT: testb $2, %al1793; AVX512F-NEXT: jne .LBB4_31794; AVX512F-NEXT: .LBB4_4: # %else21795; AVX512F-NEXT: testb $4, %al1796; AVX512F-NEXT: jne .LBB4_51797; AVX512F-NEXT: .LBB4_6: # %else41798; AVX512F-NEXT: testb $8, %al1799; AVX512F-NEXT: jne .LBB4_71800; AVX512F-NEXT: .LBB4_8: # %else61801; AVX512F-NEXT: vzeroupper1802; AVX512F-NEXT: retq1803; AVX512F-NEXT: .LBB4_1: # %cond.store1804; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)1805; AVX512F-NEXT: testb $2, %al1806; AVX512F-NEXT: je .LBB4_41807; AVX512F-NEXT: .LBB4_3: # %cond.store11808; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)1809; AVX512F-NEXT: testb $4, %al1810; AVX512F-NEXT: je .LBB4_61811; AVX512F-NEXT: .LBB4_5: # %cond.store31812; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)1813; AVX512F-NEXT: testb $8, %al1814; AVX512F-NEXT: je .LBB4_81815; AVX512F-NEXT: .LBB4_7: # %cond.store51816; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)1817; AVX512F-NEXT: vzeroupper1818; AVX512F-NEXT: retq1819;1820; AVX512FVL-LABEL: truncstore_v4i64_v4i16:1821; AVX512FVL: # %bb.0:1822; AVX512FVL-NEXT: vptestmd %xmm1, %xmm1, %k01823; AVX512FVL-NEXT: vpmovusqw %ymm0, %xmm01824; AVX512FVL-NEXT: kmovw %k0, %eax1825; AVX512FVL-NEXT: testb $1, %al1826; AVX512FVL-NEXT: jne .LBB4_11827; AVX512FVL-NEXT: # %bb.2: # %else1828; AVX512FVL-NEXT: testb $2, %al1829; AVX512FVL-NEXT: jne .LBB4_31830; AVX512FVL-NEXT: .LBB4_4: # %else21831; AVX512FVL-NEXT: testb $4, %al1832; AVX512FVL-NEXT: jne .LBB4_51833; AVX512FVL-NEXT: .LBB4_6: # %else41834; AVX512FVL-NEXT: testb $8, %al1835; AVX512FVL-NEXT: jne .LBB4_71836; AVX512FVL-NEXT: .LBB4_8: # %else61837; AVX512FVL-NEXT: vzeroupper1838; AVX512FVL-NEXT: retq1839; AVX512FVL-NEXT: .LBB4_1: # %cond.store1840; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)1841; AVX512FVL-NEXT: testb $2, %al1842; AVX512FVL-NEXT: je .LBB4_41843; AVX512FVL-NEXT: .LBB4_3: # %cond.store11844; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)1845; AVX512FVL-NEXT: testb $4, %al1846; AVX512FVL-NEXT: je .LBB4_61847; AVX512FVL-NEXT: .LBB4_5: # %cond.store31848; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)1849; AVX512FVL-NEXT: testb $8, %al1850; AVX512FVL-NEXT: je .LBB4_81851; AVX512FVL-NEXT: .LBB4_7: # %cond.store51852; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)1853; AVX512FVL-NEXT: vzeroupper1854; AVX512FVL-NEXT: retq1855;1856; AVX512BW-LABEL: truncstore_v4i64_v4i16:1857; AVX512BW: # %bb.0:1858; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11859; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01860; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k01861; AVX512BW-NEXT: kshiftld $28, %k0, %k01862; AVX512BW-NEXT: kshiftrd $28, %k0, %k11863; AVX512BW-NEXT: vpmovusqw %zmm0, %xmm01864; AVX512BW-NEXT: vmovdqu16 %zmm0, (%rdi) {%k1}1865; AVX512BW-NEXT: vzeroupper1866; AVX512BW-NEXT: retq1867;1868; AVX512BWVL-LABEL: truncstore_v4i64_v4i16:1869; AVX512BWVL: # %bb.0:1870; AVX512BWVL-NEXT: vptestmd %xmm1, %xmm1, %k11871; AVX512BWVL-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm01872; AVX512BWVL-NEXT: vpmovqw %ymm0, (%rdi) {%k1}1873; AVX512BWVL-NEXT: vzeroupper1874; AVX512BWVL-NEXT: retq1875 %a = icmp ne <4 x i32> %mask, zeroinitializer1876 %b = icmp ult <4 x i64> %x, <i64 65535, i64 65535, i64 65535, i64 65535>1877 %c = select <4 x i1> %b, <4 x i64> %x, <4 x i64> <i64 65535, i64 65535, i64 65535, i64 65535>1878 %d = trunc <4 x i64> %c to <4 x i16>1879 call void @llvm.masked.store.v4i16.p0(<4 x i16> %d, ptr %p, i32 1, <4 x i1> %a)1880 ret void1881}1882 1883define void @truncstore_v4i64_v4i8(<4 x i64> %x, ptr %p, <4 x i32> %mask) {1884; SSE2-LABEL: truncstore_v4i64_v4i8:1885; SSE2: # %bb.0:1886; SSE2-NEXT: pxor %xmm3, %xmm31887; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [255,255]1888; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]1889; SSE2-NEXT: movdqa %xmm1, %xmm61890; SSE2-NEXT: pxor %xmm5, %xmm61891; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]1892; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483903,2147483903,2147483903,2147483903]1893; SSE2-NEXT: movdqa %xmm8, %xmm91894; SSE2-NEXT: pcmpgtd %xmm7, %xmm91895; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]1896; SSE2-NEXT: pcmpeqd %xmm5, %xmm61897; SSE2-NEXT: pand %xmm9, %xmm61898; SSE2-NEXT: pand %xmm6, %xmm11899; SSE2-NEXT: pandn %xmm4, %xmm61900; SSE2-NEXT: por %xmm1, %xmm61901; SSE2-NEXT: movdqa %xmm0, %xmm11902; SSE2-NEXT: pxor %xmm5, %xmm11903; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm1[0,0,2,2]1904; SSE2-NEXT: pcmpgtd %xmm7, %xmm81905; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1906; SSE2-NEXT: pcmpeqd %xmm5, %xmm11907; SSE2-NEXT: pand %xmm8, %xmm11908; SSE2-NEXT: pand %xmm1, %xmm01909; SSE2-NEXT: pandn %xmm4, %xmm11910; SSE2-NEXT: por %xmm0, %xmm11911; SSE2-NEXT: packuswb %xmm6, %xmm11912; SSE2-NEXT: packuswb %xmm1, %xmm11913; SSE2-NEXT: packuswb %xmm1, %xmm11914; SSE2-NEXT: pcmpeqd %xmm2, %xmm31915; SSE2-NEXT: movmskps %xmm3, %ecx1916; SSE2-NEXT: xorl $15, %ecx1917; SSE2-NEXT: testb $1, %cl1918; SSE2-NEXT: movd %xmm1, %eax1919; SSE2-NEXT: jne .LBB5_11920; SSE2-NEXT: # %bb.2: # %else1921; SSE2-NEXT: testb $2, %cl1922; SSE2-NEXT: jne .LBB5_31923; SSE2-NEXT: .LBB5_4: # %else21924; SSE2-NEXT: testb $4, %cl1925; SSE2-NEXT: jne .LBB5_51926; SSE2-NEXT: .LBB5_6: # %else41927; SSE2-NEXT: testb $8, %cl1928; SSE2-NEXT: jne .LBB5_71929; SSE2-NEXT: .LBB5_8: # %else61930; SSE2-NEXT: retq1931; SSE2-NEXT: .LBB5_1: # %cond.store1932; SSE2-NEXT: movb %al, (%rdi)1933; SSE2-NEXT: testb $2, %cl1934; SSE2-NEXT: je .LBB5_41935; SSE2-NEXT: .LBB5_3: # %cond.store11936; SSE2-NEXT: movb %ah, 1(%rdi)1937; SSE2-NEXT: testb $4, %cl1938; SSE2-NEXT: je .LBB5_61939; SSE2-NEXT: .LBB5_5: # %cond.store31940; SSE2-NEXT: movl %eax, %edx1941; SSE2-NEXT: shrl $16, %edx1942; SSE2-NEXT: movb %dl, 2(%rdi)1943; SSE2-NEXT: testb $8, %cl1944; SSE2-NEXT: je .LBB5_81945; SSE2-NEXT: .LBB5_7: # %cond.store51946; SSE2-NEXT: shrl $24, %eax1947; SSE2-NEXT: movb %al, 3(%rdi)1948; SSE2-NEXT: retq1949;1950; SSE4-LABEL: truncstore_v4i64_v4i8:1951; SSE4: # %bb.0:1952; SSE4-NEXT: movdqa %xmm0, %xmm31953; SSE4-NEXT: pxor %xmm6, %xmm61954; SSE4-NEXT: movapd {{.*#+}} xmm5 = [255,255]1955; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]1956; SSE4-NEXT: movdqa %xmm1, %xmm81957; SSE4-NEXT: pxor %xmm7, %xmm81958; SSE4-NEXT: movdqa {{.*#+}} xmm4 = [9223372036854776063,9223372036854776063]1959; SSE4-NEXT: movdqa %xmm4, %xmm01960; SSE4-NEXT: pcmpgtq %xmm8, %xmm01961; SSE4-NEXT: movapd %xmm5, %xmm81962; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm81963; SSE4-NEXT: pxor %xmm3, %xmm71964; SSE4-NEXT: pcmpgtq %xmm7, %xmm41965; SSE4-NEXT: movdqa %xmm4, %xmm01966; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm51967; SSE4-NEXT: packusdw %xmm8, %xmm51968; SSE4-NEXT: packusdw %xmm5, %xmm51969; SSE4-NEXT: packuswb %xmm5, %xmm51970; SSE4-NEXT: pcmpeqd %xmm2, %xmm61971; SSE4-NEXT: movmskps %xmm6, %eax1972; SSE4-NEXT: xorl $15, %eax1973; SSE4-NEXT: testb $1, %al1974; SSE4-NEXT: jne .LBB5_11975; SSE4-NEXT: # %bb.2: # %else1976; SSE4-NEXT: testb $2, %al1977; SSE4-NEXT: jne .LBB5_31978; SSE4-NEXT: .LBB5_4: # %else21979; SSE4-NEXT: testb $4, %al1980; SSE4-NEXT: jne .LBB5_51981; SSE4-NEXT: .LBB5_6: # %else41982; SSE4-NEXT: testb $8, %al1983; SSE4-NEXT: jne .LBB5_71984; SSE4-NEXT: .LBB5_8: # %else61985; SSE4-NEXT: retq1986; SSE4-NEXT: .LBB5_1: # %cond.store1987; SSE4-NEXT: pextrb $0, %xmm5, (%rdi)1988; SSE4-NEXT: testb $2, %al1989; SSE4-NEXT: je .LBB5_41990; SSE4-NEXT: .LBB5_3: # %cond.store11991; SSE4-NEXT: pextrb $1, %xmm5, 1(%rdi)1992; SSE4-NEXT: testb $4, %al1993; SSE4-NEXT: je .LBB5_61994; SSE4-NEXT: .LBB5_5: # %cond.store31995; SSE4-NEXT: pextrb $2, %xmm5, 2(%rdi)1996; SSE4-NEXT: testb $8, %al1997; SSE4-NEXT: je .LBB5_81998; SSE4-NEXT: .LBB5_7: # %cond.store51999; SSE4-NEXT: pextrb $3, %xmm5, 3(%rdi)2000; SSE4-NEXT: retq2001;2002; AVX1-LABEL: truncstore_v4i64_v4i8:2003; AVX1: # %bb.0:2004; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm22005; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]2006; AVX1-NEXT: # xmm3 = mem[0,0]2007; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm42008; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854776063,9223372036854776063]2009; AVX1-NEXT: # xmm5 = mem[0,0]2010; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm42011; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm62012; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm32013; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm32014; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [255,255]2015; AVX1-NEXT: # xmm5 = mem[0,0]2016; AVX1-NEXT: vblendvpd %xmm3, %xmm6, %xmm5, %xmm32017; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm5, %xmm02018; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm02019; AVX1-NEXT: vpackusdw %xmm0, %xmm0, %xmm02020; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm02021; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm12022; AVX1-NEXT: vmovmskps %xmm1, %eax2023; AVX1-NEXT: xorl $15, %eax2024; AVX1-NEXT: testb $1, %al2025; AVX1-NEXT: jne .LBB5_12026; AVX1-NEXT: # %bb.2: # %else2027; AVX1-NEXT: testb $2, %al2028; AVX1-NEXT: jne .LBB5_32029; AVX1-NEXT: .LBB5_4: # %else22030; AVX1-NEXT: testb $4, %al2031; AVX1-NEXT: jne .LBB5_52032; AVX1-NEXT: .LBB5_6: # %else42033; AVX1-NEXT: testb $8, %al2034; AVX1-NEXT: jne .LBB5_72035; AVX1-NEXT: .LBB5_8: # %else62036; AVX1-NEXT: vzeroupper2037; AVX1-NEXT: retq2038; AVX1-NEXT: .LBB5_1: # %cond.store2039; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)2040; AVX1-NEXT: testb $2, %al2041; AVX1-NEXT: je .LBB5_42042; AVX1-NEXT: .LBB5_3: # %cond.store12043; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)2044; AVX1-NEXT: testb $4, %al2045; AVX1-NEXT: je .LBB5_62046; AVX1-NEXT: .LBB5_5: # %cond.store32047; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)2048; AVX1-NEXT: testb $8, %al2049; AVX1-NEXT: je .LBB5_82050; AVX1-NEXT: .LBB5_7: # %cond.store52051; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)2052; AVX1-NEXT: vzeroupper2053; AVX1-NEXT: retq2054;2055; AVX2-LABEL: truncstore_v4i64_v4i8:2056; AVX2: # %bb.0:2057; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm22058; AVX2-NEXT: vbroadcastsd {{.*#+}} ymm3 = [255,255,255,255]2059; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]2060; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm42061; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm5 = [9223372036854776062,9223372036854776062,9223372036854776062,9223372036854776062]2062; AVX2-NEXT: vpcmpgtq %ymm5, %ymm4, %ymm42063; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm0, %ymm02064; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm32065; AVX2-NEXT: vpackusdw %xmm3, %xmm0, %xmm02066; AVX2-NEXT: vpackusdw %xmm0, %xmm0, %xmm02067; AVX2-NEXT: vpackuswb %xmm0, %xmm0, %xmm02068; AVX2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm12069; AVX2-NEXT: vmovmskps %xmm1, %eax2070; AVX2-NEXT: xorl $15, %eax2071; AVX2-NEXT: testb $1, %al2072; AVX2-NEXT: jne .LBB5_12073; AVX2-NEXT: # %bb.2: # %else2074; AVX2-NEXT: testb $2, %al2075; AVX2-NEXT: jne .LBB5_32076; AVX2-NEXT: .LBB5_4: # %else22077; AVX2-NEXT: testb $4, %al2078; AVX2-NEXT: jne .LBB5_52079; AVX2-NEXT: .LBB5_6: # %else42080; AVX2-NEXT: testb $8, %al2081; AVX2-NEXT: jne .LBB5_72082; AVX2-NEXT: .LBB5_8: # %else62083; AVX2-NEXT: vzeroupper2084; AVX2-NEXT: retq2085; AVX2-NEXT: .LBB5_1: # %cond.store2086; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)2087; AVX2-NEXT: testb $2, %al2088; AVX2-NEXT: je .LBB5_42089; AVX2-NEXT: .LBB5_3: # %cond.store12090; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)2091; AVX2-NEXT: testb $4, %al2092; AVX2-NEXT: je .LBB5_62093; AVX2-NEXT: .LBB5_5: # %cond.store32094; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)2095; AVX2-NEXT: testb $8, %al2096; AVX2-NEXT: je .LBB5_82097; AVX2-NEXT: .LBB5_7: # %cond.store52098; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)2099; AVX2-NEXT: vzeroupper2100; AVX2-NEXT: retq2101;2102; AVX512F-LABEL: truncstore_v4i64_v4i8:2103; AVX512F: # %bb.0:2104; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm12105; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02106; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k02107; AVX512F-NEXT: vpmovusqb %zmm0, %xmm02108; AVX512F-NEXT: kmovw %k0, %eax2109; AVX512F-NEXT: testb $1, %al2110; AVX512F-NEXT: jne .LBB5_12111; AVX512F-NEXT: # %bb.2: # %else2112; AVX512F-NEXT: testb $2, %al2113; AVX512F-NEXT: jne .LBB5_32114; AVX512F-NEXT: .LBB5_4: # %else22115; AVX512F-NEXT: testb $4, %al2116; AVX512F-NEXT: jne .LBB5_52117; AVX512F-NEXT: .LBB5_6: # %else42118; AVX512F-NEXT: testb $8, %al2119; AVX512F-NEXT: jne .LBB5_72120; AVX512F-NEXT: .LBB5_8: # %else62121; AVX512F-NEXT: vzeroupper2122; AVX512F-NEXT: retq2123; AVX512F-NEXT: .LBB5_1: # %cond.store2124; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)2125; AVX512F-NEXT: testb $2, %al2126; AVX512F-NEXT: je .LBB5_42127; AVX512F-NEXT: .LBB5_3: # %cond.store12128; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)2129; AVX512F-NEXT: testb $4, %al2130; AVX512F-NEXT: je .LBB5_62131; AVX512F-NEXT: .LBB5_5: # %cond.store32132; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)2133; AVX512F-NEXT: testb $8, %al2134; AVX512F-NEXT: je .LBB5_82135; AVX512F-NEXT: .LBB5_7: # %cond.store52136; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)2137; AVX512F-NEXT: vzeroupper2138; AVX512F-NEXT: retq2139;2140; AVX512FVL-LABEL: truncstore_v4i64_v4i8:2141; AVX512FVL: # %bb.0:2142; AVX512FVL-NEXT: vptestmd %xmm1, %xmm1, %k02143; AVX512FVL-NEXT: vpmovusqb %ymm0, %xmm02144; AVX512FVL-NEXT: kmovw %k0, %eax2145; AVX512FVL-NEXT: testb $1, %al2146; AVX512FVL-NEXT: jne .LBB5_12147; AVX512FVL-NEXT: # %bb.2: # %else2148; AVX512FVL-NEXT: testb $2, %al2149; AVX512FVL-NEXT: jne .LBB5_32150; AVX512FVL-NEXT: .LBB5_4: # %else22151; AVX512FVL-NEXT: testb $4, %al2152; AVX512FVL-NEXT: jne .LBB5_52153; AVX512FVL-NEXT: .LBB5_6: # %else42154; AVX512FVL-NEXT: testb $8, %al2155; AVX512FVL-NEXT: jne .LBB5_72156; AVX512FVL-NEXT: .LBB5_8: # %else62157; AVX512FVL-NEXT: vzeroupper2158; AVX512FVL-NEXT: retq2159; AVX512FVL-NEXT: .LBB5_1: # %cond.store2160; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)2161; AVX512FVL-NEXT: testb $2, %al2162; AVX512FVL-NEXT: je .LBB5_42163; AVX512FVL-NEXT: .LBB5_3: # %cond.store12164; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)2165; AVX512FVL-NEXT: testb $4, %al2166; AVX512FVL-NEXT: je .LBB5_62167; AVX512FVL-NEXT: .LBB5_5: # %cond.store32168; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)2169; AVX512FVL-NEXT: testb $8, %al2170; AVX512FVL-NEXT: je .LBB5_82171; AVX512FVL-NEXT: .LBB5_7: # %cond.store52172; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)2173; AVX512FVL-NEXT: vzeroupper2174; AVX512FVL-NEXT: retq2175;2176; AVX512BW-LABEL: truncstore_v4i64_v4i8:2177; AVX512BW: # %bb.0:2178; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm12179; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02180; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k02181; AVX512BW-NEXT: kshiftlq $60, %k0, %k02182; AVX512BW-NEXT: kshiftrq $60, %k0, %k12183; AVX512BW-NEXT: vpmovusqb %zmm0, %xmm02184; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}2185; AVX512BW-NEXT: vzeroupper2186; AVX512BW-NEXT: retq2187;2188; AVX512BWVL-LABEL: truncstore_v4i64_v4i8:2189; AVX512BWVL: # %bb.0:2190; AVX512BWVL-NEXT: vptestmd %xmm1, %xmm1, %k12191; AVX512BWVL-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm02192; AVX512BWVL-NEXT: vpmovqb %ymm0, (%rdi) {%k1}2193; AVX512BWVL-NEXT: vzeroupper2194; AVX512BWVL-NEXT: retq2195 %a = icmp ne <4 x i32> %mask, zeroinitializer2196 %b = icmp ult <4 x i64> %x, <i64 255, i64 255, i64 255, i64 255>2197 %c = select <4 x i1> %b, <4 x i64> %x, <4 x i64> <i64 255, i64 255, i64 255, i64 255>2198 %d = trunc <4 x i64> %c to <4 x i8>2199 call void @llvm.masked.store.v4i8.p0(<4 x i8> %d, ptr %p, i32 1, <4 x i1> %a)2200 ret void2201}2202 2203define void @truncstore_v2i64_v2i32(<2 x i64> %x, ptr %p, <2 x i64> %mask) {2204; SSE2-LABEL: truncstore_v2i64_v2i32:2205; SSE2: # %bb.0:2206; SSE2-NEXT: pxor %xmm2, %xmm22207; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]2208; SSE2-NEXT: pxor %xmm0, %xmm32209; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]2210; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm42211; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,0,2,2]2212; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32213; SSE2-NEXT: pandn %xmm4, %xmm32214; SSE2-NEXT: pcmpeqd %xmm4, %xmm42215; SSE2-NEXT: pxor %xmm3, %xmm42216; SSE2-NEXT: pand %xmm0, %xmm32217; SSE2-NEXT: por %xmm4, %xmm32218; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]2219; SSE2-NEXT: pcmpeqd %xmm1, %xmm22220; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]2221; SSE2-NEXT: pand %xmm2, %xmm12222; SSE2-NEXT: movmskpd %xmm1, %eax2223; SSE2-NEXT: xorl $3, %eax2224; SSE2-NEXT: testb $1, %al2225; SSE2-NEXT: jne .LBB6_12226; SSE2-NEXT: # %bb.2: # %else2227; SSE2-NEXT: testb $2, %al2228; SSE2-NEXT: jne .LBB6_32229; SSE2-NEXT: .LBB6_4: # %else22230; SSE2-NEXT: retq2231; SSE2-NEXT: .LBB6_1: # %cond.store2232; SSE2-NEXT: movd %xmm0, (%rdi)2233; SSE2-NEXT: testb $2, %al2234; SSE2-NEXT: je .LBB6_42235; SSE2-NEXT: .LBB6_3: # %cond.store12236; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]2237; SSE2-NEXT: movd %xmm0, 4(%rdi)2238; SSE2-NEXT: retq2239;2240; SSE4-LABEL: truncstore_v2i64_v2i32:2241; SSE4: # %bb.0:2242; SSE4-NEXT: movdqa %xmm0, %xmm22243; SSE4-NEXT: pxor %xmm3, %xmm32244; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]2245; SSE4-NEXT: pxor %xmm2, %xmm02246; SSE4-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02247; SSE4-NEXT: blendvpd %xmm0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm22248; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]2249; SSE4-NEXT: pcmpeqq %xmm1, %xmm32250; SSE4-NEXT: movmskpd %xmm3, %eax2251; SSE4-NEXT: xorl $3, %eax2252; SSE4-NEXT: testb $1, %al2253; SSE4-NEXT: jne .LBB6_12254; SSE4-NEXT: # %bb.2: # %else2255; SSE4-NEXT: testb $2, %al2256; SSE4-NEXT: jne .LBB6_32257; SSE4-NEXT: .LBB6_4: # %else22258; SSE4-NEXT: retq2259; SSE4-NEXT: .LBB6_1: # %cond.store2260; SSE4-NEXT: movd %xmm0, (%rdi)2261; SSE4-NEXT: testb $2, %al2262; SSE4-NEXT: je .LBB6_42263; SSE4-NEXT: .LBB6_3: # %cond.store12264; SSE4-NEXT: pextrd $1, %xmm0, 4(%rdi)2265; SSE4-NEXT: retq2266;2267; AVX1-LABEL: truncstore_v2i64_v2i32:2268; AVX1: # %bb.0:2269; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm22270; AVX1-NEXT: vpcmpeqq %xmm2, %xmm1, %xmm12271; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm22272; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm12273; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero2274; AVX1-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm22275; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22276; AVX1-NEXT: vblendvpd %xmm2, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02277; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]2278; AVX1-NEXT: vmaskmovps %xmm0, %xmm1, (%rdi)2279; AVX1-NEXT: retq2280;2281; AVX2-LABEL: truncstore_v2i64_v2i32:2282; AVX2: # %bb.0:2283; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm22284; AVX2-NEXT: vpcmpeqq %xmm2, %xmm1, %xmm12285; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm22286; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm12287; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero2288; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm22289; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22290; AVX2-NEXT: vblendvpd %xmm2, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02291; AVX2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]2292; AVX2-NEXT: vpmaskmovd %xmm0, %xmm1, (%rdi)2293; AVX2-NEXT: retq2294;2295; AVX512-LABEL: truncstore_v2i64_v2i32:2296; AVX512: # %bb.0:2297; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm12298; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm02299; AVX512-NEXT: vptestmq %zmm1, %zmm1, %k02300; AVX512-NEXT: kshiftlw $14, %k0, %k02301; AVX512-NEXT: kshiftrw $14, %k0, %k12302; AVX512-NEXT: vpmovusqd %zmm0, %ymm02303; AVX512-NEXT: vmovdqu32 %zmm0, (%rdi) {%k1}2304; AVX512-NEXT: vzeroupper2305; AVX512-NEXT: retq2306;2307; AVX512VL-LABEL: truncstore_v2i64_v2i32:2308; AVX512VL: # %bb.0:2309; AVX512VL-NEXT: vptestmq %xmm1, %xmm1, %k12310; AVX512VL-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm02311; AVX512VL-NEXT: vpmovqd %xmm0, (%rdi) {%k1}2312; AVX512VL-NEXT: retq2313 %a = icmp ne <2 x i64> %mask, zeroinitializer2314 %b = icmp ult <2 x i64> %x, <i64 4294967295, i64 4294967295>2315 %c = select <2 x i1> %b, <2 x i64> %x, <2 x i64> <i64 4294967295, i64 4294967295>2316 %d = trunc <2 x i64> %c to <2 x i32>2317 call void @llvm.masked.store.v2i32.p0(<2 x i32> %d, ptr %p, i32 1, <2 x i1> %a)2318 ret void2319}2320 2321define void @truncstore_v2i64_v2i16(<2 x i64> %x, ptr %p, <2 x i64> %mask) {2322; SSE2-LABEL: truncstore_v2i64_v2i16:2323; SSE2: # %bb.0:2324; SSE2-NEXT: pxor %xmm2, %xmm22325; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]2326; SSE2-NEXT: pxor %xmm0, %xmm32327; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]2328; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm42329; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,0,2,2]2330; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32331; SSE2-NEXT: pandn %xmm4, %xmm32332; SSE2-NEXT: pcmpeqd %xmm4, %xmm42333; SSE2-NEXT: pxor %xmm3, %xmm42334; SSE2-NEXT: pand %xmm0, %xmm32335; SSE2-NEXT: por %xmm4, %xmm32336; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]2337; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]2338; SSE2-NEXT: pcmpeqd %xmm1, %xmm22339; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]2340; SSE2-NEXT: pand %xmm2, %xmm12341; SSE2-NEXT: movmskpd %xmm1, %eax2342; SSE2-NEXT: xorl $3, %eax2343; SSE2-NEXT: testb $1, %al2344; SSE2-NEXT: jne .LBB7_12345; SSE2-NEXT: # %bb.2: # %else2346; SSE2-NEXT: testb $2, %al2347; SSE2-NEXT: jne .LBB7_32348; SSE2-NEXT: .LBB7_4: # %else22349; SSE2-NEXT: retq2350; SSE2-NEXT: .LBB7_1: # %cond.store2351; SSE2-NEXT: movd %xmm0, %ecx2352; SSE2-NEXT: movw %cx, (%rdi)2353; SSE2-NEXT: testb $2, %al2354; SSE2-NEXT: je .LBB7_42355; SSE2-NEXT: .LBB7_3: # %cond.store12356; SSE2-NEXT: pextrw $1, %xmm0, %eax2357; SSE2-NEXT: movw %ax, 2(%rdi)2358; SSE2-NEXT: retq2359;2360; SSE4-LABEL: truncstore_v2i64_v2i16:2361; SSE4: # %bb.0:2362; SSE4-NEXT: movdqa %xmm0, %xmm22363; SSE4-NEXT: pxor %xmm3, %xmm32364; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]2365; SSE4-NEXT: pxor %xmm2, %xmm02366; SSE4-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02367; SSE4-NEXT: blendvpd %xmm0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm22368; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]2369; SSE4-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]2370; SSE4-NEXT: pcmpeqq %xmm1, %xmm32371; SSE4-NEXT: movmskpd %xmm3, %eax2372; SSE4-NEXT: xorl $3, %eax2373; SSE4-NEXT: testb $1, %al2374; SSE4-NEXT: jne .LBB7_12375; SSE4-NEXT: # %bb.2: # %else2376; SSE4-NEXT: testb $2, %al2377; SSE4-NEXT: jne .LBB7_32378; SSE4-NEXT: .LBB7_4: # %else22379; SSE4-NEXT: retq2380; SSE4-NEXT: .LBB7_1: # %cond.store2381; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)2382; SSE4-NEXT: testb $2, %al2383; SSE4-NEXT: je .LBB7_42384; SSE4-NEXT: .LBB7_3: # %cond.store12385; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)2386; SSE4-NEXT: retq2387;2388; AVX-LABEL: truncstore_v2i64_v2i16:2389; AVX: # %bb.0:2390; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm22391; AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm32392; AVX-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm32393; AVX-NEXT: vblendvpd %xmm3, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02394; AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]2395; AVX-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]2396; AVX-NEXT: vpcmpeqq %xmm2, %xmm1, %xmm12397; AVX-NEXT: vmovmskpd %xmm1, %eax2398; AVX-NEXT: xorl $3, %eax2399; AVX-NEXT: testb $1, %al2400; AVX-NEXT: jne .LBB7_12401; AVX-NEXT: # %bb.2: # %else2402; AVX-NEXT: testb $2, %al2403; AVX-NEXT: jne .LBB7_32404; AVX-NEXT: .LBB7_4: # %else22405; AVX-NEXT: retq2406; AVX-NEXT: .LBB7_1: # %cond.store2407; AVX-NEXT: vpextrw $0, %xmm0, (%rdi)2408; AVX-NEXT: testb $2, %al2409; AVX-NEXT: je .LBB7_42410; AVX-NEXT: .LBB7_3: # %cond.store12411; AVX-NEXT: vpextrw $1, %xmm0, 2(%rdi)2412; AVX-NEXT: retq2413;2414; AVX512F-LABEL: truncstore_v2i64_v2i16:2415; AVX512F: # %bb.0:2416; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm12417; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm02418; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k02419; AVX512F-NEXT: vpmovusqw %zmm0, %xmm02420; AVX512F-NEXT: kmovw %k0, %eax2421; AVX512F-NEXT: testb $1, %al2422; AVX512F-NEXT: jne .LBB7_12423; AVX512F-NEXT: # %bb.2: # %else2424; AVX512F-NEXT: testb $2, %al2425; AVX512F-NEXT: jne .LBB7_32426; AVX512F-NEXT: .LBB7_4: # %else22427; AVX512F-NEXT: vzeroupper2428; AVX512F-NEXT: retq2429; AVX512F-NEXT: .LBB7_1: # %cond.store2430; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)2431; AVX512F-NEXT: testb $2, %al2432; AVX512F-NEXT: je .LBB7_42433; AVX512F-NEXT: .LBB7_3: # %cond.store12434; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)2435; AVX512F-NEXT: vzeroupper2436; AVX512F-NEXT: retq2437;2438; AVX512FVL-LABEL: truncstore_v2i64_v2i16:2439; AVX512FVL: # %bb.0:2440; AVX512FVL-NEXT: vptestmq %xmm1, %xmm1, %k02441; AVX512FVL-NEXT: vpmovusqw %xmm0, %xmm02442; AVX512FVL-NEXT: kmovw %k0, %eax2443; AVX512FVL-NEXT: testb $1, %al2444; AVX512FVL-NEXT: jne .LBB7_12445; AVX512FVL-NEXT: # %bb.2: # %else2446; AVX512FVL-NEXT: testb $2, %al2447; AVX512FVL-NEXT: jne .LBB7_32448; AVX512FVL-NEXT: .LBB7_4: # %else22449; AVX512FVL-NEXT: retq2450; AVX512FVL-NEXT: .LBB7_1: # %cond.store2451; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)2452; AVX512FVL-NEXT: testb $2, %al2453; AVX512FVL-NEXT: je .LBB7_42454; AVX512FVL-NEXT: .LBB7_3: # %cond.store12455; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)2456; AVX512FVL-NEXT: retq2457;2458; AVX512BW-LABEL: truncstore_v2i64_v2i16:2459; AVX512BW: # %bb.0:2460; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm12461; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm02462; AVX512BW-NEXT: vptestmq %zmm1, %zmm1, %k02463; AVX512BW-NEXT: kshiftld $30, %k0, %k02464; AVX512BW-NEXT: kshiftrd $30, %k0, %k12465; AVX512BW-NEXT: vpmovusqw %zmm0, %xmm02466; AVX512BW-NEXT: vmovdqu16 %zmm0, (%rdi) {%k1}2467; AVX512BW-NEXT: vzeroupper2468; AVX512BW-NEXT: retq2469;2470; AVX512BWVL-LABEL: truncstore_v2i64_v2i16:2471; AVX512BWVL: # %bb.0:2472; AVX512BWVL-NEXT: vptestmq %xmm1, %xmm1, %k12473; AVX512BWVL-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm02474; AVX512BWVL-NEXT: vpmovqw %xmm0, (%rdi) {%k1}2475; AVX512BWVL-NEXT: retq2476 %a = icmp ne <2 x i64> %mask, zeroinitializer2477 %b = icmp ult <2 x i64> %x, <i64 65535, i64 65535>2478 %c = select <2 x i1> %b, <2 x i64> %x, <2 x i64> <i64 65535, i64 65535>2479 %d = trunc <2 x i64> %c to <2 x i16>2480 call void @llvm.masked.store.v2i16.p0(<2 x i16> %d, ptr %p, i32 1, <2 x i1> %a)2481 ret void2482}2483 2484define void @truncstore_v2i64_v2i8(<2 x i64> %x, ptr %p, <2 x i64> %mask) {2485; SSE2-LABEL: truncstore_v2i64_v2i8:2486; SSE2: # %bb.0:2487; SSE2-NEXT: pxor %xmm2, %xmm22488; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]2489; SSE2-NEXT: pxor %xmm0, %xmm32490; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]2491; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm42492; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,0,2,2]2493; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32494; SSE2-NEXT: pandn %xmm4, %xmm32495; SSE2-NEXT: pand %xmm3, %xmm02496; SSE2-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32497; SSE2-NEXT: por %xmm0, %xmm32498; SSE2-NEXT: packuswb %xmm3, %xmm32499; SSE2-NEXT: packuswb %xmm3, %xmm32500; SSE2-NEXT: packuswb %xmm3, %xmm32501; SSE2-NEXT: pcmpeqd %xmm1, %xmm22502; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]2503; SSE2-NEXT: pand %xmm2, %xmm02504; SSE2-NEXT: movmskpd %xmm0, %eax2505; SSE2-NEXT: xorl $3, %eax2506; SSE2-NEXT: testb $1, %al2507; SSE2-NEXT: movd %xmm3, %ecx2508; SSE2-NEXT: jne .LBB8_12509; SSE2-NEXT: # %bb.2: # %else2510; SSE2-NEXT: testb $2, %al2511; SSE2-NEXT: jne .LBB8_32512; SSE2-NEXT: .LBB8_4: # %else22513; SSE2-NEXT: retq2514; SSE2-NEXT: .LBB8_1: # %cond.store2515; SSE2-NEXT: movb %cl, (%rdi)2516; SSE2-NEXT: testb $2, %al2517; SSE2-NEXT: je .LBB8_42518; SSE2-NEXT: .LBB8_3: # %cond.store12519; SSE2-NEXT: movb %ch, 1(%rdi)2520; SSE2-NEXT: retq2521;2522; SSE4-LABEL: truncstore_v2i64_v2i8:2523; SSE4: # %bb.0:2524; SSE4-NEXT: movdqa %xmm0, %xmm22525; SSE4-NEXT: pxor %xmm3, %xmm32526; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]2527; SSE4-NEXT: pxor %xmm2, %xmm02528; SSE4-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02529; SSE4-NEXT: blendvpd %xmm0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm22530; SSE4-NEXT: pshufb {{.*#+}} xmm2 = xmm2[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]2531; SSE4-NEXT: pcmpeqq %xmm1, %xmm32532; SSE4-NEXT: movmskpd %xmm3, %eax2533; SSE4-NEXT: xorl $3, %eax2534; SSE4-NEXT: testb $1, %al2535; SSE4-NEXT: jne .LBB8_12536; SSE4-NEXT: # %bb.2: # %else2537; SSE4-NEXT: testb $2, %al2538; SSE4-NEXT: jne .LBB8_32539; SSE4-NEXT: .LBB8_4: # %else22540; SSE4-NEXT: retq2541; SSE4-NEXT: .LBB8_1: # %cond.store2542; SSE4-NEXT: pextrb $0, %xmm2, (%rdi)2543; SSE4-NEXT: testb $2, %al2544; SSE4-NEXT: je .LBB8_42545; SSE4-NEXT: .LBB8_3: # %cond.store12546; SSE4-NEXT: pextrb $1, %xmm2, 1(%rdi)2547; SSE4-NEXT: retq2548;2549; AVX-LABEL: truncstore_v2i64_v2i8:2550; AVX: # %bb.0:2551; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm22552; AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm32553; AVX-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm32554; AVX-NEXT: vblendvpd %xmm3, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02555; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]2556; AVX-NEXT: vpcmpeqq %xmm2, %xmm1, %xmm12557; AVX-NEXT: vmovmskpd %xmm1, %eax2558; AVX-NEXT: xorl $3, %eax2559; AVX-NEXT: testb $1, %al2560; AVX-NEXT: jne .LBB8_12561; AVX-NEXT: # %bb.2: # %else2562; AVX-NEXT: testb $2, %al2563; AVX-NEXT: jne .LBB8_32564; AVX-NEXT: .LBB8_4: # %else22565; AVX-NEXT: retq2566; AVX-NEXT: .LBB8_1: # %cond.store2567; AVX-NEXT: vpextrb $0, %xmm0, (%rdi)2568; AVX-NEXT: testb $2, %al2569; AVX-NEXT: je .LBB8_42570; AVX-NEXT: .LBB8_3: # %cond.store12571; AVX-NEXT: vpextrb $1, %xmm0, 1(%rdi)2572; AVX-NEXT: retq2573;2574; AVX512F-LABEL: truncstore_v2i64_v2i8:2575; AVX512F: # %bb.0:2576; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm12577; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm02578; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k02579; AVX512F-NEXT: vpmovusqb %zmm0, %xmm02580; AVX512F-NEXT: kmovw %k0, %eax2581; AVX512F-NEXT: testb $1, %al2582; AVX512F-NEXT: jne .LBB8_12583; AVX512F-NEXT: # %bb.2: # %else2584; AVX512F-NEXT: testb $2, %al2585; AVX512F-NEXT: jne .LBB8_32586; AVX512F-NEXT: .LBB8_4: # %else22587; AVX512F-NEXT: vzeroupper2588; AVX512F-NEXT: retq2589; AVX512F-NEXT: .LBB8_1: # %cond.store2590; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)2591; AVX512F-NEXT: testb $2, %al2592; AVX512F-NEXT: je .LBB8_42593; AVX512F-NEXT: .LBB8_3: # %cond.store12594; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)2595; AVX512F-NEXT: vzeroupper2596; AVX512F-NEXT: retq2597;2598; AVX512FVL-LABEL: truncstore_v2i64_v2i8:2599; AVX512FVL: # %bb.0:2600; AVX512FVL-NEXT: vptestmq %xmm1, %xmm1, %k02601; AVX512FVL-NEXT: vpmovusqb %xmm0, %xmm02602; AVX512FVL-NEXT: kmovw %k0, %eax2603; AVX512FVL-NEXT: testb $1, %al2604; AVX512FVL-NEXT: jne .LBB8_12605; AVX512FVL-NEXT: # %bb.2: # %else2606; AVX512FVL-NEXT: testb $2, %al2607; AVX512FVL-NEXT: jne .LBB8_32608; AVX512FVL-NEXT: .LBB8_4: # %else22609; AVX512FVL-NEXT: retq2610; AVX512FVL-NEXT: .LBB8_1: # %cond.store2611; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)2612; AVX512FVL-NEXT: testb $2, %al2613; AVX512FVL-NEXT: je .LBB8_42614; AVX512FVL-NEXT: .LBB8_3: # %cond.store12615; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)2616; AVX512FVL-NEXT: retq2617;2618; AVX512BW-LABEL: truncstore_v2i64_v2i8:2619; AVX512BW: # %bb.0:2620; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm12621; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm02622; AVX512BW-NEXT: vptestmq %zmm1, %zmm1, %k02623; AVX512BW-NEXT: kshiftlq $62, %k0, %k02624; AVX512BW-NEXT: kshiftrq $62, %k0, %k12625; AVX512BW-NEXT: vpmovusqb %zmm0, %xmm02626; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}2627; AVX512BW-NEXT: vzeroupper2628; AVX512BW-NEXT: retq2629;2630; AVX512BWVL-LABEL: truncstore_v2i64_v2i8:2631; AVX512BWVL: # %bb.0:2632; AVX512BWVL-NEXT: vptestmq %xmm1, %xmm1, %k12633; AVX512BWVL-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm02634; AVX512BWVL-NEXT: vpmovqb %xmm0, (%rdi) {%k1}2635; AVX512BWVL-NEXT: retq2636 %a = icmp ne <2 x i64> %mask, zeroinitializer2637 %b = icmp ult <2 x i64> %x, <i64 255, i64 255>2638 %c = select <2 x i1> %b, <2 x i64> %x, <2 x i64> <i64 255, i64 255>2639 %d = trunc <2 x i64> %c to <2 x i8>2640 call void @llvm.masked.store.v2i8.p0(<2 x i8> %d, ptr %p, i32 1, <2 x i1> %a)2641 ret void2642}2643 2644define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {2645; SSE2-LABEL: truncstore_v16i32_v16i16:2646; SSE2: # %bb.0:2647; SSE2-NEXT: pxor %xmm12, %xmm122648; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]2649; SSE2-NEXT: movdqa %xmm0, %xmm92650; SSE2-NEXT: pxor %xmm11, %xmm92651; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147549183,2147549183,2147549183,2147549183]2652; SSE2-NEXT: movdqa %xmm10, %xmm82653; SSE2-NEXT: pcmpgtd %xmm9, %xmm82654; SSE2-NEXT: pcmpeqd %xmm9, %xmm92655; SSE2-NEXT: pand %xmm8, %xmm02656; SSE2-NEXT: pxor %xmm9, %xmm82657; SSE2-NEXT: por %xmm0, %xmm82658; SSE2-NEXT: movdqa %xmm1, %xmm02659; SSE2-NEXT: pxor %xmm11, %xmm02660; SSE2-NEXT: movdqa %xmm10, %xmm132661; SSE2-NEXT: pcmpgtd %xmm0, %xmm132662; SSE2-NEXT: pand %xmm13, %xmm12663; SSE2-NEXT: pxor %xmm9, %xmm132664; SSE2-NEXT: por %xmm1, %xmm132665; SSE2-NEXT: pslld $16, %xmm132666; SSE2-NEXT: psrad $16, %xmm132667; SSE2-NEXT: pslld $16, %xmm82668; SSE2-NEXT: psrad $16, %xmm82669; SSE2-NEXT: packssdw %xmm13, %xmm82670; SSE2-NEXT: pcmpeqd %xmm12, %xmm72671; SSE2-NEXT: pcmpeqd %xmm12, %xmm62672; SSE2-NEXT: packssdw %xmm7, %xmm62673; SSE2-NEXT: pcmpeqd %xmm12, %xmm52674; SSE2-NEXT: pcmpeqd %xmm12, %xmm42675; SSE2-NEXT: packssdw %xmm5, %xmm42676; SSE2-NEXT: packsswb %xmm6, %xmm42677; SSE2-NEXT: pmovmskb %xmm4, %eax2678; SSE2-NEXT: xorl $65535, %eax # imm = 0xFFFF2679; SSE2-NEXT: testb $1, %al2680; SSE2-NEXT: je .LBB9_22681; SSE2-NEXT: # %bb.1: # %cond.store2682; SSE2-NEXT: movd %xmm8, %ecx2683; SSE2-NEXT: movw %cx, (%rdi)2684; SSE2-NEXT: .LBB9_2: # %else2685; SSE2-NEXT: testb $2, %al2686; SSE2-NEXT: je .LBB9_42687; SSE2-NEXT: # %bb.3: # %cond.store12688; SSE2-NEXT: pextrw $1, %xmm8, %ecx2689; SSE2-NEXT: movw %cx, 2(%rdi)2690; SSE2-NEXT: .LBB9_4: # %else22691; SSE2-NEXT: movdqa %xmm2, %xmm12692; SSE2-NEXT: pxor %xmm11, %xmm12693; SSE2-NEXT: pxor %xmm3, %xmm112694; SSE2-NEXT: testb $4, %al2695; SSE2-NEXT: je .LBB9_62696; SSE2-NEXT: # %bb.5: # %cond.store32697; SSE2-NEXT: pextrw $2, %xmm8, %ecx2698; SSE2-NEXT: movw %cx, 4(%rdi)2699; SSE2-NEXT: .LBB9_6: # %else42700; SSE2-NEXT: movdqa %xmm10, %xmm02701; SSE2-NEXT: pcmpgtd %xmm1, %xmm02702; SSE2-NEXT: pcmpgtd %xmm11, %xmm102703; SSE2-NEXT: testb $8, %al2704; SSE2-NEXT: je .LBB9_82705; SSE2-NEXT: # %bb.7: # %cond.store52706; SSE2-NEXT: pextrw $3, %xmm8, %ecx2707; SSE2-NEXT: movw %cx, 6(%rdi)2708; SSE2-NEXT: .LBB9_8: # %else62709; SSE2-NEXT: pand %xmm0, %xmm22710; SSE2-NEXT: pxor %xmm9, %xmm02711; SSE2-NEXT: pxor %xmm10, %xmm92712; SSE2-NEXT: pand %xmm10, %xmm32713; SSE2-NEXT: testb $16, %al2714; SSE2-NEXT: je .LBB9_102715; SSE2-NEXT: # %bb.9: # %cond.store72716; SSE2-NEXT: pextrw $4, %xmm8, %ecx2717; SSE2-NEXT: movw %cx, 8(%rdi)2718; SSE2-NEXT: .LBB9_10: # %else82719; SSE2-NEXT: por %xmm0, %xmm22720; SSE2-NEXT: por %xmm9, %xmm32721; SSE2-NEXT: testb $32, %al2722; SSE2-NEXT: je .LBB9_122723; SSE2-NEXT: # %bb.11: # %cond.store92724; SSE2-NEXT: pextrw $5, %xmm8, %ecx2725; SSE2-NEXT: movw %cx, 10(%rdi)2726; SSE2-NEXT: .LBB9_12: # %else102727; SSE2-NEXT: pslld $16, %xmm32728; SSE2-NEXT: pslld $16, %xmm22729; SSE2-NEXT: testb $64, %al2730; SSE2-NEXT: je .LBB9_142731; SSE2-NEXT: # %bb.13: # %cond.store112732; SSE2-NEXT: pextrw $6, %xmm8, %ecx2733; SSE2-NEXT: movw %cx, 12(%rdi)2734; SSE2-NEXT: .LBB9_14: # %else122735; SSE2-NEXT: psrad $16, %xmm32736; SSE2-NEXT: psrad $16, %xmm22737; SSE2-NEXT: testb %al, %al2738; SSE2-NEXT: jns .LBB9_162739; SSE2-NEXT: # %bb.15: # %cond.store132740; SSE2-NEXT: pextrw $7, %xmm8, %ecx2741; SSE2-NEXT: movw %cx, 14(%rdi)2742; SSE2-NEXT: .LBB9_16: # %else142743; SSE2-NEXT: packssdw %xmm3, %xmm22744; SSE2-NEXT: testl $256, %eax # imm = 0x1002745; SSE2-NEXT: jne .LBB9_172746; SSE2-NEXT: # %bb.18: # %else162747; SSE2-NEXT: testl $512, %eax # imm = 0x2002748; SSE2-NEXT: jne .LBB9_192749; SSE2-NEXT: .LBB9_20: # %else182750; SSE2-NEXT: testl $1024, %eax # imm = 0x4002751; SSE2-NEXT: jne .LBB9_212752; SSE2-NEXT: .LBB9_22: # %else202753; SSE2-NEXT: testl $2048, %eax # imm = 0x8002754; SSE2-NEXT: jne .LBB9_232755; SSE2-NEXT: .LBB9_24: # %else222756; SSE2-NEXT: testl $4096, %eax # imm = 0x10002757; SSE2-NEXT: jne .LBB9_252758; SSE2-NEXT: .LBB9_26: # %else242759; SSE2-NEXT: testl $8192, %eax # imm = 0x20002760; SSE2-NEXT: jne .LBB9_272761; SSE2-NEXT: .LBB9_28: # %else262762; SSE2-NEXT: testl $16384, %eax # imm = 0x40002763; SSE2-NEXT: jne .LBB9_292764; SSE2-NEXT: .LBB9_30: # %else282765; SSE2-NEXT: testl $32768, %eax # imm = 0x80002766; SSE2-NEXT: jne .LBB9_312767; SSE2-NEXT: .LBB9_32: # %else302768; SSE2-NEXT: retq2769; SSE2-NEXT: .LBB9_17: # %cond.store152770; SSE2-NEXT: movd %xmm2, %ecx2771; SSE2-NEXT: movw %cx, 16(%rdi)2772; SSE2-NEXT: testl $512, %eax # imm = 0x2002773; SSE2-NEXT: je .LBB9_202774; SSE2-NEXT: .LBB9_19: # %cond.store172775; SSE2-NEXT: pextrw $1, %xmm2, %ecx2776; SSE2-NEXT: movw %cx, 18(%rdi)2777; SSE2-NEXT: testl $1024, %eax # imm = 0x4002778; SSE2-NEXT: je .LBB9_222779; SSE2-NEXT: .LBB9_21: # %cond.store192780; SSE2-NEXT: pextrw $2, %xmm2, %ecx2781; SSE2-NEXT: movw %cx, 20(%rdi)2782; SSE2-NEXT: testl $2048, %eax # imm = 0x8002783; SSE2-NEXT: je .LBB9_242784; SSE2-NEXT: .LBB9_23: # %cond.store212785; SSE2-NEXT: pextrw $3, %xmm2, %ecx2786; SSE2-NEXT: movw %cx, 22(%rdi)2787; SSE2-NEXT: testl $4096, %eax # imm = 0x10002788; SSE2-NEXT: je .LBB9_262789; SSE2-NEXT: .LBB9_25: # %cond.store232790; SSE2-NEXT: pextrw $4, %xmm2, %ecx2791; SSE2-NEXT: movw %cx, 24(%rdi)2792; SSE2-NEXT: testl $8192, %eax # imm = 0x20002793; SSE2-NEXT: je .LBB9_282794; SSE2-NEXT: .LBB9_27: # %cond.store252795; SSE2-NEXT: pextrw $5, %xmm2, %ecx2796; SSE2-NEXT: movw %cx, 26(%rdi)2797; SSE2-NEXT: testl $16384, %eax # imm = 0x40002798; SSE2-NEXT: je .LBB9_302799; SSE2-NEXT: .LBB9_29: # %cond.store272800; SSE2-NEXT: pextrw $6, %xmm2, %ecx2801; SSE2-NEXT: movw %cx, 28(%rdi)2802; SSE2-NEXT: testl $32768, %eax # imm = 0x80002803; SSE2-NEXT: je .LBB9_322804; SSE2-NEXT: .LBB9_31: # %cond.store292805; SSE2-NEXT: pextrw $7, %xmm2, %eax2806; SSE2-NEXT: movw %ax, 30(%rdi)2807; SSE2-NEXT: retq2808;2809; SSE4-LABEL: truncstore_v16i32_v16i16:2810; SSE4: # %bb.0:2811; SSE4-NEXT: pxor %xmm9, %xmm92812; SSE4-NEXT: pmovsxbw {{.*#+}} xmm8 = [65535,0,65535,0,65535,0,65535,0]2813; SSE4-NEXT: pminud %xmm8, %xmm12814; SSE4-NEXT: pminud %xmm8, %xmm02815; SSE4-NEXT: packusdw %xmm1, %xmm02816; SSE4-NEXT: pcmpeqd %xmm9, %xmm72817; SSE4-NEXT: pcmpeqd %xmm9, %xmm62818; SSE4-NEXT: packssdw %xmm7, %xmm62819; SSE4-NEXT: pcmpeqd %xmm9, %xmm52820; SSE4-NEXT: pcmpeqd %xmm9, %xmm42821; SSE4-NEXT: packssdw %xmm5, %xmm42822; SSE4-NEXT: packsswb %xmm6, %xmm42823; SSE4-NEXT: pmovmskb %xmm4, %eax2824; SSE4-NEXT: xorl $65535, %eax # imm = 0xFFFF2825; SSE4-NEXT: testb $1, %al2826; SSE4-NEXT: jne .LBB9_12827; SSE4-NEXT: # %bb.2: # %else2828; SSE4-NEXT: testb $2, %al2829; SSE4-NEXT: jne .LBB9_32830; SSE4-NEXT: .LBB9_4: # %else22831; SSE4-NEXT: testb $4, %al2832; SSE4-NEXT: jne .LBB9_52833; SSE4-NEXT: .LBB9_6: # %else42834; SSE4-NEXT: testb $8, %al2835; SSE4-NEXT: jne .LBB9_72836; SSE4-NEXT: .LBB9_8: # %else62837; SSE4-NEXT: testb $16, %al2838; SSE4-NEXT: jne .LBB9_92839; SSE4-NEXT: .LBB9_10: # %else82840; SSE4-NEXT: testb $32, %al2841; SSE4-NEXT: jne .LBB9_112842; SSE4-NEXT: .LBB9_12: # %else102843; SSE4-NEXT: testb $64, %al2844; SSE4-NEXT: je .LBB9_142845; SSE4-NEXT: .LBB9_13: # %cond.store112846; SSE4-NEXT: pextrw $6, %xmm0, 12(%rdi)2847; SSE4-NEXT: .LBB9_14: # %else122848; SSE4-NEXT: pminud %xmm8, %xmm32849; SSE4-NEXT: pminud %xmm8, %xmm22850; SSE4-NEXT: testb %al, %al2851; SSE4-NEXT: jns .LBB9_162852; SSE4-NEXT: # %bb.15: # %cond.store132853; SSE4-NEXT: pextrw $7, %xmm0, 14(%rdi)2854; SSE4-NEXT: .LBB9_16: # %else142855; SSE4-NEXT: packusdw %xmm3, %xmm22856; SSE4-NEXT: testl $256, %eax # imm = 0x1002857; SSE4-NEXT: jne .LBB9_172858; SSE4-NEXT: # %bb.18: # %else162859; SSE4-NEXT: testl $512, %eax # imm = 0x2002860; SSE4-NEXT: jne .LBB9_192861; SSE4-NEXT: .LBB9_20: # %else182862; SSE4-NEXT: testl $1024, %eax # imm = 0x4002863; SSE4-NEXT: jne .LBB9_212864; SSE4-NEXT: .LBB9_22: # %else202865; SSE4-NEXT: testl $2048, %eax # imm = 0x8002866; SSE4-NEXT: jne .LBB9_232867; SSE4-NEXT: .LBB9_24: # %else222868; SSE4-NEXT: testl $4096, %eax # imm = 0x10002869; SSE4-NEXT: jne .LBB9_252870; SSE4-NEXT: .LBB9_26: # %else242871; SSE4-NEXT: testl $8192, %eax # imm = 0x20002872; SSE4-NEXT: jne .LBB9_272873; SSE4-NEXT: .LBB9_28: # %else262874; SSE4-NEXT: testl $16384, %eax # imm = 0x40002875; SSE4-NEXT: jne .LBB9_292876; SSE4-NEXT: .LBB9_30: # %else282877; SSE4-NEXT: testl $32768, %eax # imm = 0x80002878; SSE4-NEXT: jne .LBB9_312879; SSE4-NEXT: .LBB9_32: # %else302880; SSE4-NEXT: retq2881; SSE4-NEXT: .LBB9_1: # %cond.store2882; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)2883; SSE4-NEXT: testb $2, %al2884; SSE4-NEXT: je .LBB9_42885; SSE4-NEXT: .LBB9_3: # %cond.store12886; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)2887; SSE4-NEXT: testb $4, %al2888; SSE4-NEXT: je .LBB9_62889; SSE4-NEXT: .LBB9_5: # %cond.store32890; SSE4-NEXT: pextrw $2, %xmm0, 4(%rdi)2891; SSE4-NEXT: testb $8, %al2892; SSE4-NEXT: je .LBB9_82893; SSE4-NEXT: .LBB9_7: # %cond.store52894; SSE4-NEXT: pextrw $3, %xmm0, 6(%rdi)2895; SSE4-NEXT: testb $16, %al2896; SSE4-NEXT: je .LBB9_102897; SSE4-NEXT: .LBB9_9: # %cond.store72898; SSE4-NEXT: pextrw $4, %xmm0, 8(%rdi)2899; SSE4-NEXT: testb $32, %al2900; SSE4-NEXT: je .LBB9_122901; SSE4-NEXT: .LBB9_11: # %cond.store92902; SSE4-NEXT: pextrw $5, %xmm0, 10(%rdi)2903; SSE4-NEXT: testb $64, %al2904; SSE4-NEXT: jne .LBB9_132905; SSE4-NEXT: jmp .LBB9_142906; SSE4-NEXT: .LBB9_17: # %cond.store152907; SSE4-NEXT: pextrw $0, %xmm2, 16(%rdi)2908; SSE4-NEXT: testl $512, %eax # imm = 0x2002909; SSE4-NEXT: je .LBB9_202910; SSE4-NEXT: .LBB9_19: # %cond.store172911; SSE4-NEXT: pextrw $1, %xmm2, 18(%rdi)2912; SSE4-NEXT: testl $1024, %eax # imm = 0x4002913; SSE4-NEXT: je .LBB9_222914; SSE4-NEXT: .LBB9_21: # %cond.store192915; SSE4-NEXT: pextrw $2, %xmm2, 20(%rdi)2916; SSE4-NEXT: testl $2048, %eax # imm = 0x8002917; SSE4-NEXT: je .LBB9_242918; SSE4-NEXT: .LBB9_23: # %cond.store212919; SSE4-NEXT: pextrw $3, %xmm2, 22(%rdi)2920; SSE4-NEXT: testl $4096, %eax # imm = 0x10002921; SSE4-NEXT: je .LBB9_262922; SSE4-NEXT: .LBB9_25: # %cond.store232923; SSE4-NEXT: pextrw $4, %xmm2, 24(%rdi)2924; SSE4-NEXT: testl $8192, %eax # imm = 0x20002925; SSE4-NEXT: je .LBB9_282926; SSE4-NEXT: .LBB9_27: # %cond.store252927; SSE4-NEXT: pextrw $5, %xmm2, 26(%rdi)2928; SSE4-NEXT: testl $16384, %eax # imm = 0x40002929; SSE4-NEXT: je .LBB9_302930; SSE4-NEXT: .LBB9_29: # %cond.store272931; SSE4-NEXT: pextrw $6, %xmm2, 28(%rdi)2932; SSE4-NEXT: testl $32768, %eax # imm = 0x80002933; SSE4-NEXT: je .LBB9_322934; SSE4-NEXT: .LBB9_31: # %cond.store292935; SSE4-NEXT: pextrw $7, %xmm2, 30(%rdi)2936; SSE4-NEXT: retq2937;2938; AVX1-LABEL: truncstore_v16i32_v16i16:2939; AVX1: # %bb.0:2940; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm42941; AVX1-NEXT: vbroadcastss {{.*#+}} xmm5 = [65535,65535,65535,65535]2942; AVX1-NEXT: vpminud %xmm5, %xmm4, %xmm42943; AVX1-NEXT: vpminud %xmm5, %xmm0, %xmm02944; AVX1-NEXT: vpackusdw %xmm4, %xmm0, %xmm02945; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm42946; AVX1-NEXT: vpminud %xmm5, %xmm4, %xmm42947; AVX1-NEXT: vpminud %xmm5, %xmm1, %xmm12948; AVX1-NEXT: vpackusdw %xmm4, %xmm1, %xmm12949; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm02950; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm12951; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm42952; AVX1-NEXT: vpcmpeqd %xmm4, %xmm1, %xmm12953; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm32954; AVX1-NEXT: vpackssdw %xmm1, %xmm3, %xmm12955; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm32956; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm32957; AVX1-NEXT: vpcmpeqd %xmm4, %xmm2, %xmm22958; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm22959; AVX1-NEXT: vpacksswb %xmm1, %xmm2, %xmm12960; AVX1-NEXT: vpmovmskb %xmm1, %eax2961; AVX1-NEXT: xorl $65535, %eax # imm = 0xFFFF2962; AVX1-NEXT: testb $1, %al2963; AVX1-NEXT: jne .LBB9_12964; AVX1-NEXT: # %bb.2: # %else2965; AVX1-NEXT: testb $2, %al2966; AVX1-NEXT: jne .LBB9_32967; AVX1-NEXT: .LBB9_4: # %else22968; AVX1-NEXT: testb $4, %al2969; AVX1-NEXT: jne .LBB9_52970; AVX1-NEXT: .LBB9_6: # %else42971; AVX1-NEXT: testb $8, %al2972; AVX1-NEXT: jne .LBB9_72973; AVX1-NEXT: .LBB9_8: # %else62974; AVX1-NEXT: testb $16, %al2975; AVX1-NEXT: jne .LBB9_92976; AVX1-NEXT: .LBB9_10: # %else82977; AVX1-NEXT: testb $32, %al2978; AVX1-NEXT: jne .LBB9_112979; AVX1-NEXT: .LBB9_12: # %else102980; AVX1-NEXT: testb $64, %al2981; AVX1-NEXT: jne .LBB9_132982; AVX1-NEXT: .LBB9_14: # %else122983; AVX1-NEXT: testb %al, %al2984; AVX1-NEXT: jns .LBB9_162985; AVX1-NEXT: .LBB9_15: # %cond.store132986; AVX1-NEXT: vpextrw $7, %xmm0, 14(%rdi)2987; AVX1-NEXT: .LBB9_16: # %else142988; AVX1-NEXT: testl $256, %eax # imm = 0x1002989; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02990; AVX1-NEXT: jne .LBB9_172991; AVX1-NEXT: # %bb.18: # %else162992; AVX1-NEXT: testl $512, %eax # imm = 0x2002993; AVX1-NEXT: jne .LBB9_192994; AVX1-NEXT: .LBB9_20: # %else182995; AVX1-NEXT: testl $1024, %eax # imm = 0x4002996; AVX1-NEXT: jne .LBB9_212997; AVX1-NEXT: .LBB9_22: # %else202998; AVX1-NEXT: testl $2048, %eax # imm = 0x8002999; AVX1-NEXT: jne .LBB9_233000; AVX1-NEXT: .LBB9_24: # %else223001; AVX1-NEXT: testl $4096, %eax # imm = 0x10003002; AVX1-NEXT: jne .LBB9_253003; AVX1-NEXT: .LBB9_26: # %else243004; AVX1-NEXT: testl $8192, %eax # imm = 0x20003005; AVX1-NEXT: jne .LBB9_273006; AVX1-NEXT: .LBB9_28: # %else263007; AVX1-NEXT: testl $16384, %eax # imm = 0x40003008; AVX1-NEXT: jne .LBB9_293009; AVX1-NEXT: .LBB9_30: # %else283010; AVX1-NEXT: testl $32768, %eax # imm = 0x80003011; AVX1-NEXT: jne .LBB9_313012; AVX1-NEXT: .LBB9_32: # %else303013; AVX1-NEXT: vzeroupper3014; AVX1-NEXT: retq3015; AVX1-NEXT: .LBB9_1: # %cond.store3016; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)3017; AVX1-NEXT: testb $2, %al3018; AVX1-NEXT: je .LBB9_43019; AVX1-NEXT: .LBB9_3: # %cond.store13020; AVX1-NEXT: vpextrw $1, %xmm0, 2(%rdi)3021; AVX1-NEXT: testb $4, %al3022; AVX1-NEXT: je .LBB9_63023; AVX1-NEXT: .LBB9_5: # %cond.store33024; AVX1-NEXT: vpextrw $2, %xmm0, 4(%rdi)3025; AVX1-NEXT: testb $8, %al3026; AVX1-NEXT: je .LBB9_83027; AVX1-NEXT: .LBB9_7: # %cond.store53028; AVX1-NEXT: vpextrw $3, %xmm0, 6(%rdi)3029; AVX1-NEXT: testb $16, %al3030; AVX1-NEXT: je .LBB9_103031; AVX1-NEXT: .LBB9_9: # %cond.store73032; AVX1-NEXT: vpextrw $4, %xmm0, 8(%rdi)3033; AVX1-NEXT: testb $32, %al3034; AVX1-NEXT: je .LBB9_123035; AVX1-NEXT: .LBB9_11: # %cond.store93036; AVX1-NEXT: vpextrw $5, %xmm0, 10(%rdi)3037; AVX1-NEXT: testb $64, %al3038; AVX1-NEXT: je .LBB9_143039; AVX1-NEXT: .LBB9_13: # %cond.store113040; AVX1-NEXT: vpextrw $6, %xmm0, 12(%rdi)3041; AVX1-NEXT: testb %al, %al3042; AVX1-NEXT: js .LBB9_153043; AVX1-NEXT: jmp .LBB9_163044; AVX1-NEXT: .LBB9_17: # %cond.store153045; AVX1-NEXT: vpextrw $0, %xmm0, 16(%rdi)3046; AVX1-NEXT: testl $512, %eax # imm = 0x2003047; AVX1-NEXT: je .LBB9_203048; AVX1-NEXT: .LBB9_19: # %cond.store173049; AVX1-NEXT: vpextrw $1, %xmm0, 18(%rdi)3050; AVX1-NEXT: testl $1024, %eax # imm = 0x4003051; AVX1-NEXT: je .LBB9_223052; AVX1-NEXT: .LBB9_21: # %cond.store193053; AVX1-NEXT: vpextrw $2, %xmm0, 20(%rdi)3054; AVX1-NEXT: testl $2048, %eax # imm = 0x8003055; AVX1-NEXT: je .LBB9_243056; AVX1-NEXT: .LBB9_23: # %cond.store213057; AVX1-NEXT: vpextrw $3, %xmm0, 22(%rdi)3058; AVX1-NEXT: testl $4096, %eax # imm = 0x10003059; AVX1-NEXT: je .LBB9_263060; AVX1-NEXT: .LBB9_25: # %cond.store233061; AVX1-NEXT: vpextrw $4, %xmm0, 24(%rdi)3062; AVX1-NEXT: testl $8192, %eax # imm = 0x20003063; AVX1-NEXT: je .LBB9_283064; AVX1-NEXT: .LBB9_27: # %cond.store253065; AVX1-NEXT: vpextrw $5, %xmm0, 26(%rdi)3066; AVX1-NEXT: testl $16384, %eax # imm = 0x40003067; AVX1-NEXT: je .LBB9_303068; AVX1-NEXT: .LBB9_29: # %cond.store273069; AVX1-NEXT: vpextrw $6, %xmm0, 28(%rdi)3070; AVX1-NEXT: testl $32768, %eax # imm = 0x80003071; AVX1-NEXT: je .LBB9_323072; AVX1-NEXT: .LBB9_31: # %cond.store293073; AVX1-NEXT: vpextrw $7, %xmm0, 30(%rdi)3074; AVX1-NEXT: vzeroupper3075; AVX1-NEXT: retq3076;3077; AVX2-LABEL: truncstore_v16i32_v16i16:3078; AVX2: # %bb.0:3079; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm43080; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm5 = [65535,65535,65535,65535,65535,65535,65535,65535]3081; AVX2-NEXT: vpminud %ymm5, %ymm1, %ymm13082; AVX2-NEXT: vpminud %ymm5, %ymm0, %ymm03083; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm03084; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]3085; AVX2-NEXT: vpcmpeqd %ymm4, %ymm3, %ymm13086; AVX2-NEXT: vpcmpeqd %ymm4, %ymm2, %ymm23087; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm13088; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm23089; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm13090; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm23091; AVX2-NEXT: vpacksswb %xmm2, %xmm1, %xmm13092; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,1,3]3093; AVX2-NEXT: vpmovmskb %xmm1, %eax3094; AVX2-NEXT: testb $1, %al3095; AVX2-NEXT: jne .LBB9_13096; AVX2-NEXT: # %bb.2: # %else3097; AVX2-NEXT: testb $2, %al3098; AVX2-NEXT: jne .LBB9_33099; AVX2-NEXT: .LBB9_4: # %else23100; AVX2-NEXT: testb $4, %al3101; AVX2-NEXT: jne .LBB9_53102; AVX2-NEXT: .LBB9_6: # %else43103; AVX2-NEXT: testb $8, %al3104; AVX2-NEXT: jne .LBB9_73105; AVX2-NEXT: .LBB9_8: # %else63106; AVX2-NEXT: testb $16, %al3107; AVX2-NEXT: jne .LBB9_93108; AVX2-NEXT: .LBB9_10: # %else83109; AVX2-NEXT: testb $32, %al3110; AVX2-NEXT: jne .LBB9_113111; AVX2-NEXT: .LBB9_12: # %else103112; AVX2-NEXT: testb $64, %al3113; AVX2-NEXT: jne .LBB9_133114; AVX2-NEXT: .LBB9_14: # %else123115; AVX2-NEXT: testb %al, %al3116; AVX2-NEXT: jns .LBB9_163117; AVX2-NEXT: .LBB9_15: # %cond.store133118; AVX2-NEXT: vpextrw $7, %xmm0, 14(%rdi)3119; AVX2-NEXT: .LBB9_16: # %else143120; AVX2-NEXT: testl $256, %eax # imm = 0x1003121; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm03122; AVX2-NEXT: jne .LBB9_173123; AVX2-NEXT: # %bb.18: # %else163124; AVX2-NEXT: testl $512, %eax # imm = 0x2003125; AVX2-NEXT: jne .LBB9_193126; AVX2-NEXT: .LBB9_20: # %else183127; AVX2-NEXT: testl $1024, %eax # imm = 0x4003128; AVX2-NEXT: jne .LBB9_213129; AVX2-NEXT: .LBB9_22: # %else203130; AVX2-NEXT: testl $2048, %eax # imm = 0x8003131; AVX2-NEXT: jne .LBB9_233132; AVX2-NEXT: .LBB9_24: # %else223133; AVX2-NEXT: testl $4096, %eax # imm = 0x10003134; AVX2-NEXT: jne .LBB9_253135; AVX2-NEXT: .LBB9_26: # %else243136; AVX2-NEXT: testl $8192, %eax # imm = 0x20003137; AVX2-NEXT: jne .LBB9_273138; AVX2-NEXT: .LBB9_28: # %else263139; AVX2-NEXT: testl $16384, %eax # imm = 0x40003140; AVX2-NEXT: jne .LBB9_293141; AVX2-NEXT: .LBB9_30: # %else283142; AVX2-NEXT: testl $32768, %eax # imm = 0x80003143; AVX2-NEXT: jne .LBB9_313144; AVX2-NEXT: .LBB9_32: # %else303145; AVX2-NEXT: vzeroupper3146; AVX2-NEXT: retq3147; AVX2-NEXT: .LBB9_1: # %cond.store3148; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)3149; AVX2-NEXT: testb $2, %al3150; AVX2-NEXT: je .LBB9_43151; AVX2-NEXT: .LBB9_3: # %cond.store13152; AVX2-NEXT: vpextrw $1, %xmm0, 2(%rdi)3153; AVX2-NEXT: testb $4, %al3154; AVX2-NEXT: je .LBB9_63155; AVX2-NEXT: .LBB9_5: # %cond.store33156; AVX2-NEXT: vpextrw $2, %xmm0, 4(%rdi)3157; AVX2-NEXT: testb $8, %al3158; AVX2-NEXT: je .LBB9_83159; AVX2-NEXT: .LBB9_7: # %cond.store53160; AVX2-NEXT: vpextrw $3, %xmm0, 6(%rdi)3161; AVX2-NEXT: testb $16, %al3162; AVX2-NEXT: je .LBB9_103163; AVX2-NEXT: .LBB9_9: # %cond.store73164; AVX2-NEXT: vpextrw $4, %xmm0, 8(%rdi)3165; AVX2-NEXT: testb $32, %al3166; AVX2-NEXT: je .LBB9_123167; AVX2-NEXT: .LBB9_11: # %cond.store93168; AVX2-NEXT: vpextrw $5, %xmm0, 10(%rdi)3169; AVX2-NEXT: testb $64, %al3170; AVX2-NEXT: je .LBB9_143171; AVX2-NEXT: .LBB9_13: # %cond.store113172; AVX2-NEXT: vpextrw $6, %xmm0, 12(%rdi)3173; AVX2-NEXT: testb %al, %al3174; AVX2-NEXT: js .LBB9_153175; AVX2-NEXT: jmp .LBB9_163176; AVX2-NEXT: .LBB9_17: # %cond.store153177; AVX2-NEXT: vpextrw $0, %xmm0, 16(%rdi)3178; AVX2-NEXT: testl $512, %eax # imm = 0x2003179; AVX2-NEXT: je .LBB9_203180; AVX2-NEXT: .LBB9_19: # %cond.store173181; AVX2-NEXT: vpextrw $1, %xmm0, 18(%rdi)3182; AVX2-NEXT: testl $1024, %eax # imm = 0x4003183; AVX2-NEXT: je .LBB9_223184; AVX2-NEXT: .LBB9_21: # %cond.store193185; AVX2-NEXT: vpextrw $2, %xmm0, 20(%rdi)3186; AVX2-NEXT: testl $2048, %eax # imm = 0x8003187; AVX2-NEXT: je .LBB9_243188; AVX2-NEXT: .LBB9_23: # %cond.store213189; AVX2-NEXT: vpextrw $3, %xmm0, 22(%rdi)3190; AVX2-NEXT: testl $4096, %eax # imm = 0x10003191; AVX2-NEXT: je .LBB9_263192; AVX2-NEXT: .LBB9_25: # %cond.store233193; AVX2-NEXT: vpextrw $4, %xmm0, 24(%rdi)3194; AVX2-NEXT: testl $8192, %eax # imm = 0x20003195; AVX2-NEXT: je .LBB9_283196; AVX2-NEXT: .LBB9_27: # %cond.store253197; AVX2-NEXT: vpextrw $5, %xmm0, 26(%rdi)3198; AVX2-NEXT: testl $16384, %eax # imm = 0x40003199; AVX2-NEXT: je .LBB9_303200; AVX2-NEXT: .LBB9_29: # %cond.store273201; AVX2-NEXT: vpextrw $6, %xmm0, 28(%rdi)3202; AVX2-NEXT: testl $32768, %eax # imm = 0x80003203; AVX2-NEXT: je .LBB9_323204; AVX2-NEXT: .LBB9_31: # %cond.store293205; AVX2-NEXT: vpextrw $7, %xmm0, 30(%rdi)3206; AVX2-NEXT: vzeroupper3207; AVX2-NEXT: retq3208;3209; AVX512F-LABEL: truncstore_v16i32_v16i16:3210; AVX512F: # %bb.0:3211; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k03212; AVX512F-NEXT: vpmovusdw %zmm0, %ymm03213; AVX512F-NEXT: kmovw %k0, %eax3214; AVX512F-NEXT: testb $1, %al3215; AVX512F-NEXT: jne .LBB9_13216; AVX512F-NEXT: # %bb.2: # %else3217; AVX512F-NEXT: testb $2, %al3218; AVX512F-NEXT: jne .LBB9_33219; AVX512F-NEXT: .LBB9_4: # %else23220; AVX512F-NEXT: testb $4, %al3221; AVX512F-NEXT: jne .LBB9_53222; AVX512F-NEXT: .LBB9_6: # %else43223; AVX512F-NEXT: testb $8, %al3224; AVX512F-NEXT: jne .LBB9_73225; AVX512F-NEXT: .LBB9_8: # %else63226; AVX512F-NEXT: testb $16, %al3227; AVX512F-NEXT: jne .LBB9_93228; AVX512F-NEXT: .LBB9_10: # %else83229; AVX512F-NEXT: testb $32, %al3230; AVX512F-NEXT: jne .LBB9_113231; AVX512F-NEXT: .LBB9_12: # %else103232; AVX512F-NEXT: testb $64, %al3233; AVX512F-NEXT: jne .LBB9_133234; AVX512F-NEXT: .LBB9_14: # %else123235; AVX512F-NEXT: testb %al, %al3236; AVX512F-NEXT: jns .LBB9_163237; AVX512F-NEXT: .LBB9_15: # %cond.store133238; AVX512F-NEXT: vpextrw $7, %xmm0, 14(%rdi)3239; AVX512F-NEXT: .LBB9_16: # %else143240; AVX512F-NEXT: testl $256, %eax # imm = 0x1003241; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm03242; AVX512F-NEXT: jne .LBB9_173243; AVX512F-NEXT: # %bb.18: # %else163244; AVX512F-NEXT: testl $512, %eax # imm = 0x2003245; AVX512F-NEXT: jne .LBB9_193246; AVX512F-NEXT: .LBB9_20: # %else183247; AVX512F-NEXT: testl $1024, %eax # imm = 0x4003248; AVX512F-NEXT: jne .LBB9_213249; AVX512F-NEXT: .LBB9_22: # %else203250; AVX512F-NEXT: testl $2048, %eax # imm = 0x8003251; AVX512F-NEXT: jne .LBB9_233252; AVX512F-NEXT: .LBB9_24: # %else223253; AVX512F-NEXT: testl $4096, %eax # imm = 0x10003254; AVX512F-NEXT: jne .LBB9_253255; AVX512F-NEXT: .LBB9_26: # %else243256; AVX512F-NEXT: testl $8192, %eax # imm = 0x20003257; AVX512F-NEXT: jne .LBB9_273258; AVX512F-NEXT: .LBB9_28: # %else263259; AVX512F-NEXT: testl $16384, %eax # imm = 0x40003260; AVX512F-NEXT: jne .LBB9_293261; AVX512F-NEXT: .LBB9_30: # %else283262; AVX512F-NEXT: testl $32768, %eax # imm = 0x80003263; AVX512F-NEXT: jne .LBB9_313264; AVX512F-NEXT: .LBB9_32: # %else303265; AVX512F-NEXT: vzeroupper3266; AVX512F-NEXT: retq3267; AVX512F-NEXT: .LBB9_1: # %cond.store3268; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)3269; AVX512F-NEXT: testb $2, %al3270; AVX512F-NEXT: je .LBB9_43271; AVX512F-NEXT: .LBB9_3: # %cond.store13272; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)3273; AVX512F-NEXT: testb $4, %al3274; AVX512F-NEXT: je .LBB9_63275; AVX512F-NEXT: .LBB9_5: # %cond.store33276; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)3277; AVX512F-NEXT: testb $8, %al3278; AVX512F-NEXT: je .LBB9_83279; AVX512F-NEXT: .LBB9_7: # %cond.store53280; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)3281; AVX512F-NEXT: testb $16, %al3282; AVX512F-NEXT: je .LBB9_103283; AVX512F-NEXT: .LBB9_9: # %cond.store73284; AVX512F-NEXT: vpextrw $4, %xmm0, 8(%rdi)3285; AVX512F-NEXT: testb $32, %al3286; AVX512F-NEXT: je .LBB9_123287; AVX512F-NEXT: .LBB9_11: # %cond.store93288; AVX512F-NEXT: vpextrw $5, %xmm0, 10(%rdi)3289; AVX512F-NEXT: testb $64, %al3290; AVX512F-NEXT: je .LBB9_143291; AVX512F-NEXT: .LBB9_13: # %cond.store113292; AVX512F-NEXT: vpextrw $6, %xmm0, 12(%rdi)3293; AVX512F-NEXT: testb %al, %al3294; AVX512F-NEXT: js .LBB9_153295; AVX512F-NEXT: jmp .LBB9_163296; AVX512F-NEXT: .LBB9_17: # %cond.store153297; AVX512F-NEXT: vpextrw $0, %xmm0, 16(%rdi)3298; AVX512F-NEXT: testl $512, %eax # imm = 0x2003299; AVX512F-NEXT: je .LBB9_203300; AVX512F-NEXT: .LBB9_19: # %cond.store173301; AVX512F-NEXT: vpextrw $1, %xmm0, 18(%rdi)3302; AVX512F-NEXT: testl $1024, %eax # imm = 0x4003303; AVX512F-NEXT: je .LBB9_223304; AVX512F-NEXT: .LBB9_21: # %cond.store193305; AVX512F-NEXT: vpextrw $2, %xmm0, 20(%rdi)3306; AVX512F-NEXT: testl $2048, %eax # imm = 0x8003307; AVX512F-NEXT: je .LBB9_243308; AVX512F-NEXT: .LBB9_23: # %cond.store213309; AVX512F-NEXT: vpextrw $3, %xmm0, 22(%rdi)3310; AVX512F-NEXT: testl $4096, %eax # imm = 0x10003311; AVX512F-NEXT: je .LBB9_263312; AVX512F-NEXT: .LBB9_25: # %cond.store233313; AVX512F-NEXT: vpextrw $4, %xmm0, 24(%rdi)3314; AVX512F-NEXT: testl $8192, %eax # imm = 0x20003315; AVX512F-NEXT: je .LBB9_283316; AVX512F-NEXT: .LBB9_27: # %cond.store253317; AVX512F-NEXT: vpextrw $5, %xmm0, 26(%rdi)3318; AVX512F-NEXT: testl $16384, %eax # imm = 0x40003319; AVX512F-NEXT: je .LBB9_303320; AVX512F-NEXT: .LBB9_29: # %cond.store273321; AVX512F-NEXT: vpextrw $6, %xmm0, 28(%rdi)3322; AVX512F-NEXT: testl $32768, %eax # imm = 0x80003323; AVX512F-NEXT: je .LBB9_323324; AVX512F-NEXT: .LBB9_31: # %cond.store293325; AVX512F-NEXT: vpextrw $7, %xmm0, 30(%rdi)3326; AVX512F-NEXT: vzeroupper3327; AVX512F-NEXT: retq3328;3329; AVX512FVL-LABEL: truncstore_v16i32_v16i16:3330; AVX512FVL: # %bb.0:3331; AVX512FVL-NEXT: vptestmd %zmm1, %zmm1, %k03332; AVX512FVL-NEXT: vpmovusdw %zmm0, %ymm03333; AVX512FVL-NEXT: kmovw %k0, %eax3334; AVX512FVL-NEXT: testb $1, %al3335; AVX512FVL-NEXT: jne .LBB9_13336; AVX512FVL-NEXT: # %bb.2: # %else3337; AVX512FVL-NEXT: testb $2, %al3338; AVX512FVL-NEXT: jne .LBB9_33339; AVX512FVL-NEXT: .LBB9_4: # %else23340; AVX512FVL-NEXT: testb $4, %al3341; AVX512FVL-NEXT: jne .LBB9_53342; AVX512FVL-NEXT: .LBB9_6: # %else43343; AVX512FVL-NEXT: testb $8, %al3344; AVX512FVL-NEXT: jne .LBB9_73345; AVX512FVL-NEXT: .LBB9_8: # %else63346; AVX512FVL-NEXT: testb $16, %al3347; AVX512FVL-NEXT: jne .LBB9_93348; AVX512FVL-NEXT: .LBB9_10: # %else83349; AVX512FVL-NEXT: testb $32, %al3350; AVX512FVL-NEXT: jne .LBB9_113351; AVX512FVL-NEXT: .LBB9_12: # %else103352; AVX512FVL-NEXT: testb $64, %al3353; AVX512FVL-NEXT: jne .LBB9_133354; AVX512FVL-NEXT: .LBB9_14: # %else123355; AVX512FVL-NEXT: testb %al, %al3356; AVX512FVL-NEXT: jns .LBB9_163357; AVX512FVL-NEXT: .LBB9_15: # %cond.store133358; AVX512FVL-NEXT: vpextrw $7, %xmm0, 14(%rdi)3359; AVX512FVL-NEXT: .LBB9_16: # %else143360; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1003361; AVX512FVL-NEXT: vextracti128 $1, %ymm0, %xmm03362; AVX512FVL-NEXT: jne .LBB9_173363; AVX512FVL-NEXT: # %bb.18: # %else163364; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2003365; AVX512FVL-NEXT: jne .LBB9_193366; AVX512FVL-NEXT: .LBB9_20: # %else183367; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4003368; AVX512FVL-NEXT: jne .LBB9_213369; AVX512FVL-NEXT: .LBB9_22: # %else203370; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8003371; AVX512FVL-NEXT: jne .LBB9_233372; AVX512FVL-NEXT: .LBB9_24: # %else223373; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10003374; AVX512FVL-NEXT: jne .LBB9_253375; AVX512FVL-NEXT: .LBB9_26: # %else243376; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20003377; AVX512FVL-NEXT: jne .LBB9_273378; AVX512FVL-NEXT: .LBB9_28: # %else263379; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40003380; AVX512FVL-NEXT: jne .LBB9_293381; AVX512FVL-NEXT: .LBB9_30: # %else283382; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80003383; AVX512FVL-NEXT: jne .LBB9_313384; AVX512FVL-NEXT: .LBB9_32: # %else303385; AVX512FVL-NEXT: vzeroupper3386; AVX512FVL-NEXT: retq3387; AVX512FVL-NEXT: .LBB9_1: # %cond.store3388; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)3389; AVX512FVL-NEXT: testb $2, %al3390; AVX512FVL-NEXT: je .LBB9_43391; AVX512FVL-NEXT: .LBB9_3: # %cond.store13392; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)3393; AVX512FVL-NEXT: testb $4, %al3394; AVX512FVL-NEXT: je .LBB9_63395; AVX512FVL-NEXT: .LBB9_5: # %cond.store33396; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)3397; AVX512FVL-NEXT: testb $8, %al3398; AVX512FVL-NEXT: je .LBB9_83399; AVX512FVL-NEXT: .LBB9_7: # %cond.store53400; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)3401; AVX512FVL-NEXT: testb $16, %al3402; AVX512FVL-NEXT: je .LBB9_103403; AVX512FVL-NEXT: .LBB9_9: # %cond.store73404; AVX512FVL-NEXT: vpextrw $4, %xmm0, 8(%rdi)3405; AVX512FVL-NEXT: testb $32, %al3406; AVX512FVL-NEXT: je .LBB9_123407; AVX512FVL-NEXT: .LBB9_11: # %cond.store93408; AVX512FVL-NEXT: vpextrw $5, %xmm0, 10(%rdi)3409; AVX512FVL-NEXT: testb $64, %al3410; AVX512FVL-NEXT: je .LBB9_143411; AVX512FVL-NEXT: .LBB9_13: # %cond.store113412; AVX512FVL-NEXT: vpextrw $6, %xmm0, 12(%rdi)3413; AVX512FVL-NEXT: testb %al, %al3414; AVX512FVL-NEXT: js .LBB9_153415; AVX512FVL-NEXT: jmp .LBB9_163416; AVX512FVL-NEXT: .LBB9_17: # %cond.store153417; AVX512FVL-NEXT: vpextrw $0, %xmm0, 16(%rdi)3418; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2003419; AVX512FVL-NEXT: je .LBB9_203420; AVX512FVL-NEXT: .LBB9_19: # %cond.store173421; AVX512FVL-NEXT: vpextrw $1, %xmm0, 18(%rdi)3422; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4003423; AVX512FVL-NEXT: je .LBB9_223424; AVX512FVL-NEXT: .LBB9_21: # %cond.store193425; AVX512FVL-NEXT: vpextrw $2, %xmm0, 20(%rdi)3426; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8003427; AVX512FVL-NEXT: je .LBB9_243428; AVX512FVL-NEXT: .LBB9_23: # %cond.store213429; AVX512FVL-NEXT: vpextrw $3, %xmm0, 22(%rdi)3430; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10003431; AVX512FVL-NEXT: je .LBB9_263432; AVX512FVL-NEXT: .LBB9_25: # %cond.store233433; AVX512FVL-NEXT: vpextrw $4, %xmm0, 24(%rdi)3434; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20003435; AVX512FVL-NEXT: je .LBB9_283436; AVX512FVL-NEXT: .LBB9_27: # %cond.store253437; AVX512FVL-NEXT: vpextrw $5, %xmm0, 26(%rdi)3438; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40003439; AVX512FVL-NEXT: je .LBB9_303440; AVX512FVL-NEXT: .LBB9_29: # %cond.store273441; AVX512FVL-NEXT: vpextrw $6, %xmm0, 28(%rdi)3442; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80003443; AVX512FVL-NEXT: je .LBB9_323444; AVX512FVL-NEXT: .LBB9_31: # %cond.store293445; AVX512FVL-NEXT: vpextrw $7, %xmm0, 30(%rdi)3446; AVX512FVL-NEXT: vzeroupper3447; AVX512FVL-NEXT: retq3448;3449; AVX512BW-LABEL: truncstore_v16i32_v16i16:3450; AVX512BW: # %bb.0:3451; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k13452; AVX512BW-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm03453; AVX512BW-NEXT: vpmovdw %zmm0, (%rdi) {%k1}3454; AVX512BW-NEXT: vzeroupper3455; AVX512BW-NEXT: retq3456;3457; AVX512BWVL-LABEL: truncstore_v16i32_v16i16:3458; AVX512BWVL: # %bb.0:3459; AVX512BWVL-NEXT: vptestmd %zmm1, %zmm1, %k13460; AVX512BWVL-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm03461; AVX512BWVL-NEXT: vpmovdw %zmm0, (%rdi) {%k1}3462; AVX512BWVL-NEXT: vzeroupper3463; AVX512BWVL-NEXT: retq3464 %a = icmp ne <16 x i32> %mask, zeroinitializer3465 %b = icmp ult <16 x i32> %x, <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>3466 %c = select <16 x i1> %b, <16 x i32> %x, <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>3467 %d = trunc <16 x i32> %c to <16 x i16>3468 call void @llvm.masked.store.v16i16.p0(<16 x i16> %d, ptr %p, i32 1, <16 x i1> %a)3469 ret void3470}3471 3472define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {3473; SSE2-LABEL: truncstore_v16i32_v16i8:3474; SSE2: # %bb.0:3475; SSE2-NEXT: pxor %xmm8, %xmm83476; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [255,255,255,255]3477; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]3478; SSE2-NEXT: movdqa %xmm1, %xmm123479; SSE2-NEXT: pxor %xmm11, %xmm123480; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903,2147483903,2147483903]3481; SSE2-NEXT: movdqa %xmm9, %xmm133482; SSE2-NEXT: pcmpgtd %xmm12, %xmm133483; SSE2-NEXT: pand %xmm13, %xmm13484; SSE2-NEXT: pandn %xmm10, %xmm133485; SSE2-NEXT: por %xmm1, %xmm133486; SSE2-NEXT: movdqa %xmm0, %xmm123487; SSE2-NEXT: pxor %xmm11, %xmm123488; SSE2-NEXT: movdqa %xmm9, %xmm13489; SSE2-NEXT: pcmpgtd %xmm12, %xmm13490; SSE2-NEXT: pand %xmm1, %xmm03491; SSE2-NEXT: pandn %xmm10, %xmm13492; SSE2-NEXT: por %xmm0, %xmm13493; SSE2-NEXT: packuswb %xmm13, %xmm13494; SSE2-NEXT: movdqa %xmm3, %xmm03495; SSE2-NEXT: pxor %xmm11, %xmm03496; SSE2-NEXT: movdqa %xmm9, %xmm123497; SSE2-NEXT: pcmpgtd %xmm0, %xmm123498; SSE2-NEXT: pand %xmm12, %xmm33499; SSE2-NEXT: pandn %xmm10, %xmm123500; SSE2-NEXT: por %xmm3, %xmm123501; SSE2-NEXT: pxor %xmm2, %xmm113502; SSE2-NEXT: pcmpgtd %xmm11, %xmm93503; SSE2-NEXT: pand %xmm9, %xmm23504; SSE2-NEXT: pandn %xmm10, %xmm93505; SSE2-NEXT: por %xmm2, %xmm93506; SSE2-NEXT: packuswb %xmm12, %xmm93507; SSE2-NEXT: packuswb %xmm9, %xmm13508; SSE2-NEXT: pcmpeqd %xmm8, %xmm73509; SSE2-NEXT: pcmpeqd %xmm8, %xmm63510; SSE2-NEXT: packssdw %xmm7, %xmm63511; SSE2-NEXT: pcmpeqd %xmm8, %xmm53512; SSE2-NEXT: pcmpeqd %xmm8, %xmm43513; SSE2-NEXT: packssdw %xmm5, %xmm43514; SSE2-NEXT: packsswb %xmm6, %xmm43515; SSE2-NEXT: pmovmskb %xmm4, %eax3516; SSE2-NEXT: xorl $65535, %eax # imm = 0xFFFF3517; SSE2-NEXT: testb $1, %al3518; SSE2-NEXT: movd %xmm1, %ecx3519; SSE2-NEXT: jne .LBB10_13520; SSE2-NEXT: # %bb.2: # %else3521; SSE2-NEXT: testb $2, %al3522; SSE2-NEXT: jne .LBB10_33523; SSE2-NEXT: .LBB10_4: # %else23524; SSE2-NEXT: testb $4, %al3525; SSE2-NEXT: jne .LBB10_53526; SSE2-NEXT: .LBB10_6: # %else43527; SSE2-NEXT: testb $8, %al3528; SSE2-NEXT: je .LBB10_83529; SSE2-NEXT: .LBB10_7: # %cond.store53530; SSE2-NEXT: shrl $24, %ecx3531; SSE2-NEXT: movb %cl, 3(%rdi)3532; SSE2-NEXT: .LBB10_8: # %else63533; SSE2-NEXT: testb $16, %al3534; SSE2-NEXT: pextrw $2, %xmm1, %ecx3535; SSE2-NEXT: je .LBB10_103536; SSE2-NEXT: # %bb.9: # %cond.store73537; SSE2-NEXT: movb %cl, 4(%rdi)3538; SSE2-NEXT: .LBB10_10: # %else83539; SSE2-NEXT: testb $32, %al3540; SSE2-NEXT: je .LBB10_123541; SSE2-NEXT: # %bb.11: # %cond.store93542; SSE2-NEXT: movb %ch, 5(%rdi)3543; SSE2-NEXT: .LBB10_12: # %else103544; SSE2-NEXT: testb $64, %al3545; SSE2-NEXT: pextrw $3, %xmm1, %ecx3546; SSE2-NEXT: je .LBB10_143547; SSE2-NEXT: # %bb.13: # %cond.store113548; SSE2-NEXT: movb %cl, 6(%rdi)3549; SSE2-NEXT: .LBB10_14: # %else123550; SSE2-NEXT: testb %al, %al3551; SSE2-NEXT: jns .LBB10_163552; SSE2-NEXT: # %bb.15: # %cond.store133553; SSE2-NEXT: movb %ch, 7(%rdi)3554; SSE2-NEXT: .LBB10_16: # %else143555; SSE2-NEXT: testl $256, %eax # imm = 0x1003556; SSE2-NEXT: pextrw $4, %xmm1, %ecx3557; SSE2-NEXT: je .LBB10_183558; SSE2-NEXT: # %bb.17: # %cond.store153559; SSE2-NEXT: movb %cl, 8(%rdi)3560; SSE2-NEXT: .LBB10_18: # %else163561; SSE2-NEXT: testl $512, %eax # imm = 0x2003562; SSE2-NEXT: je .LBB10_203563; SSE2-NEXT: # %bb.19: # %cond.store173564; SSE2-NEXT: movb %ch, 9(%rdi)3565; SSE2-NEXT: .LBB10_20: # %else183566; SSE2-NEXT: testl $1024, %eax # imm = 0x4003567; SSE2-NEXT: pextrw $5, %xmm1, %ecx3568; SSE2-NEXT: je .LBB10_223569; SSE2-NEXT: # %bb.21: # %cond.store193570; SSE2-NEXT: movb %cl, 10(%rdi)3571; SSE2-NEXT: .LBB10_22: # %else203572; SSE2-NEXT: testl $2048, %eax # imm = 0x8003573; SSE2-NEXT: je .LBB10_243574; SSE2-NEXT: # %bb.23: # %cond.store213575; SSE2-NEXT: movb %ch, 11(%rdi)3576; SSE2-NEXT: .LBB10_24: # %else223577; SSE2-NEXT: testl $4096, %eax # imm = 0x10003578; SSE2-NEXT: pextrw $6, %xmm1, %ecx3579; SSE2-NEXT: je .LBB10_263580; SSE2-NEXT: # %bb.25: # %cond.store233581; SSE2-NEXT: movb %cl, 12(%rdi)3582; SSE2-NEXT: .LBB10_26: # %else243583; SSE2-NEXT: testl $8192, %eax # imm = 0x20003584; SSE2-NEXT: je .LBB10_283585; SSE2-NEXT: # %bb.27: # %cond.store253586; SSE2-NEXT: movb %ch, 13(%rdi)3587; SSE2-NEXT: .LBB10_28: # %else263588; SSE2-NEXT: testl $16384, %eax # imm = 0x40003589; SSE2-NEXT: pextrw $7, %xmm1, %ecx3590; SSE2-NEXT: jne .LBB10_293591; SSE2-NEXT: # %bb.30: # %else283592; SSE2-NEXT: testl $32768, %eax # imm = 0x80003593; SSE2-NEXT: jne .LBB10_313594; SSE2-NEXT: .LBB10_32: # %else303595; SSE2-NEXT: retq3596; SSE2-NEXT: .LBB10_1: # %cond.store3597; SSE2-NEXT: movb %cl, (%rdi)3598; SSE2-NEXT: testb $2, %al3599; SSE2-NEXT: je .LBB10_43600; SSE2-NEXT: .LBB10_3: # %cond.store13601; SSE2-NEXT: movb %ch, 1(%rdi)3602; SSE2-NEXT: testb $4, %al3603; SSE2-NEXT: je .LBB10_63604; SSE2-NEXT: .LBB10_5: # %cond.store33605; SSE2-NEXT: movl %ecx, %edx3606; SSE2-NEXT: shrl $16, %edx3607; SSE2-NEXT: movb %dl, 2(%rdi)3608; SSE2-NEXT: testb $8, %al3609; SSE2-NEXT: jne .LBB10_73610; SSE2-NEXT: jmp .LBB10_83611; SSE2-NEXT: .LBB10_29: # %cond.store273612; SSE2-NEXT: movb %cl, 14(%rdi)3613; SSE2-NEXT: testl $32768, %eax # imm = 0x80003614; SSE2-NEXT: je .LBB10_323615; SSE2-NEXT: .LBB10_31: # %cond.store293616; SSE2-NEXT: movb %ch, 15(%rdi)3617; SSE2-NEXT: retq3618;3619; SSE4-LABEL: truncstore_v16i32_v16i8:3620; SSE4: # %bb.0:3621; SSE4-NEXT: pxor %xmm8, %xmm83622; SSE4-NEXT: pmovzxbd {{.*#+}} xmm9 = [255,255,255,255]3623; SSE4-NEXT: pminud %xmm9, %xmm13624; SSE4-NEXT: pminud %xmm9, %xmm03625; SSE4-NEXT: packusdw %xmm1, %xmm03626; SSE4-NEXT: pminud %xmm9, %xmm33627; SSE4-NEXT: pminud %xmm9, %xmm23628; SSE4-NEXT: packusdw %xmm3, %xmm23629; SSE4-NEXT: packuswb %xmm2, %xmm03630; SSE4-NEXT: pcmpeqd %xmm8, %xmm73631; SSE4-NEXT: pcmpeqd %xmm8, %xmm63632; SSE4-NEXT: packssdw %xmm7, %xmm63633; SSE4-NEXT: pcmpeqd %xmm8, %xmm53634; SSE4-NEXT: pcmpeqd %xmm8, %xmm43635; SSE4-NEXT: packssdw %xmm5, %xmm43636; SSE4-NEXT: packsswb %xmm6, %xmm43637; SSE4-NEXT: pmovmskb %xmm4, %eax3638; SSE4-NEXT: xorl $65535, %eax # imm = 0xFFFF3639; SSE4-NEXT: testb $1, %al3640; SSE4-NEXT: jne .LBB10_13641; SSE4-NEXT: # %bb.2: # %else3642; SSE4-NEXT: testb $2, %al3643; SSE4-NEXT: jne .LBB10_33644; SSE4-NEXT: .LBB10_4: # %else23645; SSE4-NEXT: testb $4, %al3646; SSE4-NEXT: jne .LBB10_53647; SSE4-NEXT: .LBB10_6: # %else43648; SSE4-NEXT: testb $8, %al3649; SSE4-NEXT: jne .LBB10_73650; SSE4-NEXT: .LBB10_8: # %else63651; SSE4-NEXT: testb $16, %al3652; SSE4-NEXT: jne .LBB10_93653; SSE4-NEXT: .LBB10_10: # %else83654; SSE4-NEXT: testb $32, %al3655; SSE4-NEXT: jne .LBB10_113656; SSE4-NEXT: .LBB10_12: # %else103657; SSE4-NEXT: testb $64, %al3658; SSE4-NEXT: jne .LBB10_133659; SSE4-NEXT: .LBB10_14: # %else123660; SSE4-NEXT: testb %al, %al3661; SSE4-NEXT: js .LBB10_153662; SSE4-NEXT: .LBB10_16: # %else143663; SSE4-NEXT: testl $256, %eax # imm = 0x1003664; SSE4-NEXT: jne .LBB10_173665; SSE4-NEXT: .LBB10_18: # %else163666; SSE4-NEXT: testl $512, %eax # imm = 0x2003667; SSE4-NEXT: jne .LBB10_193668; SSE4-NEXT: .LBB10_20: # %else183669; SSE4-NEXT: testl $1024, %eax # imm = 0x4003670; SSE4-NEXT: jne .LBB10_213671; SSE4-NEXT: .LBB10_22: # %else203672; SSE4-NEXT: testl $2048, %eax # imm = 0x8003673; SSE4-NEXT: jne .LBB10_233674; SSE4-NEXT: .LBB10_24: # %else223675; SSE4-NEXT: testl $4096, %eax # imm = 0x10003676; SSE4-NEXT: jne .LBB10_253677; SSE4-NEXT: .LBB10_26: # %else243678; SSE4-NEXT: testl $8192, %eax # imm = 0x20003679; SSE4-NEXT: jne .LBB10_273680; SSE4-NEXT: .LBB10_28: # %else263681; SSE4-NEXT: testl $16384, %eax # imm = 0x40003682; SSE4-NEXT: jne .LBB10_293683; SSE4-NEXT: .LBB10_30: # %else283684; SSE4-NEXT: testl $32768, %eax # imm = 0x80003685; SSE4-NEXT: jne .LBB10_313686; SSE4-NEXT: .LBB10_32: # %else303687; SSE4-NEXT: retq3688; SSE4-NEXT: .LBB10_1: # %cond.store3689; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)3690; SSE4-NEXT: testb $2, %al3691; SSE4-NEXT: je .LBB10_43692; SSE4-NEXT: .LBB10_3: # %cond.store13693; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)3694; SSE4-NEXT: testb $4, %al3695; SSE4-NEXT: je .LBB10_63696; SSE4-NEXT: .LBB10_5: # %cond.store33697; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)3698; SSE4-NEXT: testb $8, %al3699; SSE4-NEXT: je .LBB10_83700; SSE4-NEXT: .LBB10_7: # %cond.store53701; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)3702; SSE4-NEXT: testb $16, %al3703; SSE4-NEXT: je .LBB10_103704; SSE4-NEXT: .LBB10_9: # %cond.store73705; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)3706; SSE4-NEXT: testb $32, %al3707; SSE4-NEXT: je .LBB10_123708; SSE4-NEXT: .LBB10_11: # %cond.store93709; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)3710; SSE4-NEXT: testb $64, %al3711; SSE4-NEXT: je .LBB10_143712; SSE4-NEXT: .LBB10_13: # %cond.store113713; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)3714; SSE4-NEXT: testb %al, %al3715; SSE4-NEXT: jns .LBB10_163716; SSE4-NEXT: .LBB10_15: # %cond.store133717; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)3718; SSE4-NEXT: testl $256, %eax # imm = 0x1003719; SSE4-NEXT: je .LBB10_183720; SSE4-NEXT: .LBB10_17: # %cond.store153721; SSE4-NEXT: pextrb $8, %xmm0, 8(%rdi)3722; SSE4-NEXT: testl $512, %eax # imm = 0x2003723; SSE4-NEXT: je .LBB10_203724; SSE4-NEXT: .LBB10_19: # %cond.store173725; SSE4-NEXT: pextrb $9, %xmm0, 9(%rdi)3726; SSE4-NEXT: testl $1024, %eax # imm = 0x4003727; SSE4-NEXT: je .LBB10_223728; SSE4-NEXT: .LBB10_21: # %cond.store193729; SSE4-NEXT: pextrb $10, %xmm0, 10(%rdi)3730; SSE4-NEXT: testl $2048, %eax # imm = 0x8003731; SSE4-NEXT: je .LBB10_243732; SSE4-NEXT: .LBB10_23: # %cond.store213733; SSE4-NEXT: pextrb $11, %xmm0, 11(%rdi)3734; SSE4-NEXT: testl $4096, %eax # imm = 0x10003735; SSE4-NEXT: je .LBB10_263736; SSE4-NEXT: .LBB10_25: # %cond.store233737; SSE4-NEXT: pextrb $12, %xmm0, 12(%rdi)3738; SSE4-NEXT: testl $8192, %eax # imm = 0x20003739; SSE4-NEXT: je .LBB10_283740; SSE4-NEXT: .LBB10_27: # %cond.store253741; SSE4-NEXT: pextrb $13, %xmm0, 13(%rdi)3742; SSE4-NEXT: testl $16384, %eax # imm = 0x40003743; SSE4-NEXT: je .LBB10_303744; SSE4-NEXT: .LBB10_29: # %cond.store273745; SSE4-NEXT: pextrb $14, %xmm0, 14(%rdi)3746; SSE4-NEXT: testl $32768, %eax # imm = 0x80003747; SSE4-NEXT: je .LBB10_323748; SSE4-NEXT: .LBB10_31: # %cond.store293749; SSE4-NEXT: pextrb $15, %xmm0, 15(%rdi)3750; SSE4-NEXT: retq3751;3752; AVX1-LABEL: truncstore_v16i32_v16i8:3753; AVX1: # %bb.0:3754; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm43755; AVX1-NEXT: vbroadcastss {{.*#+}} xmm5 = [255,255,255,255]3756; AVX1-NEXT: vpminud %xmm5, %xmm4, %xmm43757; AVX1-NEXT: vpminud %xmm5, %xmm0, %xmm03758; AVX1-NEXT: vpackusdw %xmm4, %xmm0, %xmm03759; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm43760; AVX1-NEXT: vpminud %xmm5, %xmm4, %xmm43761; AVX1-NEXT: vpminud %xmm5, %xmm1, %xmm13762; AVX1-NEXT: vpackusdw %xmm4, %xmm1, %xmm13763; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm03764; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm13765; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm43766; AVX1-NEXT: vpcmpeqd %xmm4, %xmm1, %xmm13767; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm33768; AVX1-NEXT: vpackssdw %xmm1, %xmm3, %xmm13769; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm33770; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm33771; AVX1-NEXT: vpcmpeqd %xmm4, %xmm2, %xmm23772; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm23773; AVX1-NEXT: vpacksswb %xmm1, %xmm2, %xmm13774; AVX1-NEXT: vpmovmskb %xmm1, %eax3775; AVX1-NEXT: xorl $65535, %eax # imm = 0xFFFF3776; AVX1-NEXT: testb $1, %al3777; AVX1-NEXT: jne .LBB10_13778; AVX1-NEXT: # %bb.2: # %else3779; AVX1-NEXT: testb $2, %al3780; AVX1-NEXT: jne .LBB10_33781; AVX1-NEXT: .LBB10_4: # %else23782; AVX1-NEXT: testb $4, %al3783; AVX1-NEXT: jne .LBB10_53784; AVX1-NEXT: .LBB10_6: # %else43785; AVX1-NEXT: testb $8, %al3786; AVX1-NEXT: jne .LBB10_73787; AVX1-NEXT: .LBB10_8: # %else63788; AVX1-NEXT: testb $16, %al3789; AVX1-NEXT: jne .LBB10_93790; AVX1-NEXT: .LBB10_10: # %else83791; AVX1-NEXT: testb $32, %al3792; AVX1-NEXT: jne .LBB10_113793; AVX1-NEXT: .LBB10_12: # %else103794; AVX1-NEXT: testb $64, %al3795; AVX1-NEXT: jne .LBB10_133796; AVX1-NEXT: .LBB10_14: # %else123797; AVX1-NEXT: testb %al, %al3798; AVX1-NEXT: js .LBB10_153799; AVX1-NEXT: .LBB10_16: # %else143800; AVX1-NEXT: testl $256, %eax # imm = 0x1003801; AVX1-NEXT: jne .LBB10_173802; AVX1-NEXT: .LBB10_18: # %else163803; AVX1-NEXT: testl $512, %eax # imm = 0x2003804; AVX1-NEXT: jne .LBB10_193805; AVX1-NEXT: .LBB10_20: # %else183806; AVX1-NEXT: testl $1024, %eax # imm = 0x4003807; AVX1-NEXT: jne .LBB10_213808; AVX1-NEXT: .LBB10_22: # %else203809; AVX1-NEXT: testl $2048, %eax # imm = 0x8003810; AVX1-NEXT: jne .LBB10_233811; AVX1-NEXT: .LBB10_24: # %else223812; AVX1-NEXT: testl $4096, %eax # imm = 0x10003813; AVX1-NEXT: jne .LBB10_253814; AVX1-NEXT: .LBB10_26: # %else243815; AVX1-NEXT: testl $8192, %eax # imm = 0x20003816; AVX1-NEXT: jne .LBB10_273817; AVX1-NEXT: .LBB10_28: # %else263818; AVX1-NEXT: testl $16384, %eax # imm = 0x40003819; AVX1-NEXT: jne .LBB10_293820; AVX1-NEXT: .LBB10_30: # %else283821; AVX1-NEXT: testl $32768, %eax # imm = 0x80003822; AVX1-NEXT: jne .LBB10_313823; AVX1-NEXT: .LBB10_32: # %else303824; AVX1-NEXT: vzeroupper3825; AVX1-NEXT: retq3826; AVX1-NEXT: .LBB10_1: # %cond.store3827; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)3828; AVX1-NEXT: testb $2, %al3829; AVX1-NEXT: je .LBB10_43830; AVX1-NEXT: .LBB10_3: # %cond.store13831; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)3832; AVX1-NEXT: testb $4, %al3833; AVX1-NEXT: je .LBB10_63834; AVX1-NEXT: .LBB10_5: # %cond.store33835; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)3836; AVX1-NEXT: testb $8, %al3837; AVX1-NEXT: je .LBB10_83838; AVX1-NEXT: .LBB10_7: # %cond.store53839; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)3840; AVX1-NEXT: testb $16, %al3841; AVX1-NEXT: je .LBB10_103842; AVX1-NEXT: .LBB10_9: # %cond.store73843; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)3844; AVX1-NEXT: testb $32, %al3845; AVX1-NEXT: je .LBB10_123846; AVX1-NEXT: .LBB10_11: # %cond.store93847; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)3848; AVX1-NEXT: testb $64, %al3849; AVX1-NEXT: je .LBB10_143850; AVX1-NEXT: .LBB10_13: # %cond.store113851; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)3852; AVX1-NEXT: testb %al, %al3853; AVX1-NEXT: jns .LBB10_163854; AVX1-NEXT: .LBB10_15: # %cond.store133855; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)3856; AVX1-NEXT: testl $256, %eax # imm = 0x1003857; AVX1-NEXT: je .LBB10_183858; AVX1-NEXT: .LBB10_17: # %cond.store153859; AVX1-NEXT: vpextrb $8, %xmm0, 8(%rdi)3860; AVX1-NEXT: testl $512, %eax # imm = 0x2003861; AVX1-NEXT: je .LBB10_203862; AVX1-NEXT: .LBB10_19: # %cond.store173863; AVX1-NEXT: vpextrb $9, %xmm0, 9(%rdi)3864; AVX1-NEXT: testl $1024, %eax # imm = 0x4003865; AVX1-NEXT: je .LBB10_223866; AVX1-NEXT: .LBB10_21: # %cond.store193867; AVX1-NEXT: vpextrb $10, %xmm0, 10(%rdi)3868; AVX1-NEXT: testl $2048, %eax # imm = 0x8003869; AVX1-NEXT: je .LBB10_243870; AVX1-NEXT: .LBB10_23: # %cond.store213871; AVX1-NEXT: vpextrb $11, %xmm0, 11(%rdi)3872; AVX1-NEXT: testl $4096, %eax # imm = 0x10003873; AVX1-NEXT: je .LBB10_263874; AVX1-NEXT: .LBB10_25: # %cond.store233875; AVX1-NEXT: vpextrb $12, %xmm0, 12(%rdi)3876; AVX1-NEXT: testl $8192, %eax # imm = 0x20003877; AVX1-NEXT: je .LBB10_283878; AVX1-NEXT: .LBB10_27: # %cond.store253879; AVX1-NEXT: vpextrb $13, %xmm0, 13(%rdi)3880; AVX1-NEXT: testl $16384, %eax # imm = 0x40003881; AVX1-NEXT: je .LBB10_303882; AVX1-NEXT: .LBB10_29: # %cond.store273883; AVX1-NEXT: vpextrb $14, %xmm0, 14(%rdi)3884; AVX1-NEXT: testl $32768, %eax # imm = 0x80003885; AVX1-NEXT: je .LBB10_323886; AVX1-NEXT: .LBB10_31: # %cond.store293887; AVX1-NEXT: vpextrb $15, %xmm0, 15(%rdi)3888; AVX1-NEXT: vzeroupper3889; AVX1-NEXT: retq3890;3891; AVX2-LABEL: truncstore_v16i32_v16i8:3892; AVX2: # %bb.0:3893; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm43894; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm5 = [255,255,255,255,255,255,255,255]3895; AVX2-NEXT: vpminud %ymm5, %ymm1, %ymm13896; AVX2-NEXT: vpminud %ymm5, %ymm0, %ymm03897; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm03898; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm13899; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm03900; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]3901; AVX2-NEXT: vpcmpeqd %ymm4, %ymm3, %ymm13902; AVX2-NEXT: vpcmpeqd %ymm4, %ymm2, %ymm23903; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm13904; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm23905; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm13906; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm23907; AVX2-NEXT: vpacksswb %xmm2, %xmm1, %xmm13908; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,1,3]3909; AVX2-NEXT: vpmovmskb %xmm1, %eax3910; AVX2-NEXT: testb $1, %al3911; AVX2-NEXT: jne .LBB10_13912; AVX2-NEXT: # %bb.2: # %else3913; AVX2-NEXT: testb $2, %al3914; AVX2-NEXT: jne .LBB10_33915; AVX2-NEXT: .LBB10_4: # %else23916; AVX2-NEXT: testb $4, %al3917; AVX2-NEXT: jne .LBB10_53918; AVX2-NEXT: .LBB10_6: # %else43919; AVX2-NEXT: testb $8, %al3920; AVX2-NEXT: jne .LBB10_73921; AVX2-NEXT: .LBB10_8: # %else63922; AVX2-NEXT: testb $16, %al3923; AVX2-NEXT: jne .LBB10_93924; AVX2-NEXT: .LBB10_10: # %else83925; AVX2-NEXT: testb $32, %al3926; AVX2-NEXT: jne .LBB10_113927; AVX2-NEXT: .LBB10_12: # %else103928; AVX2-NEXT: testb $64, %al3929; AVX2-NEXT: jne .LBB10_133930; AVX2-NEXT: .LBB10_14: # %else123931; AVX2-NEXT: testb %al, %al3932; AVX2-NEXT: js .LBB10_153933; AVX2-NEXT: .LBB10_16: # %else143934; AVX2-NEXT: testl $256, %eax # imm = 0x1003935; AVX2-NEXT: jne .LBB10_173936; AVX2-NEXT: .LBB10_18: # %else163937; AVX2-NEXT: testl $512, %eax # imm = 0x2003938; AVX2-NEXT: jne .LBB10_193939; AVX2-NEXT: .LBB10_20: # %else183940; AVX2-NEXT: testl $1024, %eax # imm = 0x4003941; AVX2-NEXT: jne .LBB10_213942; AVX2-NEXT: .LBB10_22: # %else203943; AVX2-NEXT: testl $2048, %eax # imm = 0x8003944; AVX2-NEXT: jne .LBB10_233945; AVX2-NEXT: .LBB10_24: # %else223946; AVX2-NEXT: testl $4096, %eax # imm = 0x10003947; AVX2-NEXT: jne .LBB10_253948; AVX2-NEXT: .LBB10_26: # %else243949; AVX2-NEXT: testl $8192, %eax # imm = 0x20003950; AVX2-NEXT: jne .LBB10_273951; AVX2-NEXT: .LBB10_28: # %else263952; AVX2-NEXT: testl $16384, %eax # imm = 0x40003953; AVX2-NEXT: jne .LBB10_293954; AVX2-NEXT: .LBB10_30: # %else283955; AVX2-NEXT: testl $32768, %eax # imm = 0x80003956; AVX2-NEXT: jne .LBB10_313957; AVX2-NEXT: .LBB10_32: # %else303958; AVX2-NEXT: vzeroupper3959; AVX2-NEXT: retq3960; AVX2-NEXT: .LBB10_1: # %cond.store3961; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)3962; AVX2-NEXT: testb $2, %al3963; AVX2-NEXT: je .LBB10_43964; AVX2-NEXT: .LBB10_3: # %cond.store13965; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)3966; AVX2-NEXT: testb $4, %al3967; AVX2-NEXT: je .LBB10_63968; AVX2-NEXT: .LBB10_5: # %cond.store33969; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)3970; AVX2-NEXT: testb $8, %al3971; AVX2-NEXT: je .LBB10_83972; AVX2-NEXT: .LBB10_7: # %cond.store53973; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)3974; AVX2-NEXT: testb $16, %al3975; AVX2-NEXT: je .LBB10_103976; AVX2-NEXT: .LBB10_9: # %cond.store73977; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)3978; AVX2-NEXT: testb $32, %al3979; AVX2-NEXT: je .LBB10_123980; AVX2-NEXT: .LBB10_11: # %cond.store93981; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)3982; AVX2-NEXT: testb $64, %al3983; AVX2-NEXT: je .LBB10_143984; AVX2-NEXT: .LBB10_13: # %cond.store113985; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)3986; AVX2-NEXT: testb %al, %al3987; AVX2-NEXT: jns .LBB10_163988; AVX2-NEXT: .LBB10_15: # %cond.store133989; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)3990; AVX2-NEXT: testl $256, %eax # imm = 0x1003991; AVX2-NEXT: je .LBB10_183992; AVX2-NEXT: .LBB10_17: # %cond.store153993; AVX2-NEXT: vpextrb $8, %xmm0, 8(%rdi)3994; AVX2-NEXT: testl $512, %eax # imm = 0x2003995; AVX2-NEXT: je .LBB10_203996; AVX2-NEXT: .LBB10_19: # %cond.store173997; AVX2-NEXT: vpextrb $9, %xmm0, 9(%rdi)3998; AVX2-NEXT: testl $1024, %eax # imm = 0x4003999; AVX2-NEXT: je .LBB10_224000; AVX2-NEXT: .LBB10_21: # %cond.store194001; AVX2-NEXT: vpextrb $10, %xmm0, 10(%rdi)4002; AVX2-NEXT: testl $2048, %eax # imm = 0x8004003; AVX2-NEXT: je .LBB10_244004; AVX2-NEXT: .LBB10_23: # %cond.store214005; AVX2-NEXT: vpextrb $11, %xmm0, 11(%rdi)4006; AVX2-NEXT: testl $4096, %eax # imm = 0x10004007; AVX2-NEXT: je .LBB10_264008; AVX2-NEXT: .LBB10_25: # %cond.store234009; AVX2-NEXT: vpextrb $12, %xmm0, 12(%rdi)4010; AVX2-NEXT: testl $8192, %eax # imm = 0x20004011; AVX2-NEXT: je .LBB10_284012; AVX2-NEXT: .LBB10_27: # %cond.store254013; AVX2-NEXT: vpextrb $13, %xmm0, 13(%rdi)4014; AVX2-NEXT: testl $16384, %eax # imm = 0x40004015; AVX2-NEXT: je .LBB10_304016; AVX2-NEXT: .LBB10_29: # %cond.store274017; AVX2-NEXT: vpextrb $14, %xmm0, 14(%rdi)4018; AVX2-NEXT: testl $32768, %eax # imm = 0x80004019; AVX2-NEXT: je .LBB10_324020; AVX2-NEXT: .LBB10_31: # %cond.store294021; AVX2-NEXT: vpextrb $15, %xmm0, 15(%rdi)4022; AVX2-NEXT: vzeroupper4023; AVX2-NEXT: retq4024;4025; AVX512F-LABEL: truncstore_v16i32_v16i8:4026; AVX512F: # %bb.0:4027; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k04028; AVX512F-NEXT: vpmovusdb %zmm0, %xmm04029; AVX512F-NEXT: kmovw %k0, %eax4030; AVX512F-NEXT: testb $1, %al4031; AVX512F-NEXT: jne .LBB10_14032; AVX512F-NEXT: # %bb.2: # %else4033; AVX512F-NEXT: testb $2, %al4034; AVX512F-NEXT: jne .LBB10_34035; AVX512F-NEXT: .LBB10_4: # %else24036; AVX512F-NEXT: testb $4, %al4037; AVX512F-NEXT: jne .LBB10_54038; AVX512F-NEXT: .LBB10_6: # %else44039; AVX512F-NEXT: testb $8, %al4040; AVX512F-NEXT: jne .LBB10_74041; AVX512F-NEXT: .LBB10_8: # %else64042; AVX512F-NEXT: testb $16, %al4043; AVX512F-NEXT: jne .LBB10_94044; AVX512F-NEXT: .LBB10_10: # %else84045; AVX512F-NEXT: testb $32, %al4046; AVX512F-NEXT: jne .LBB10_114047; AVX512F-NEXT: .LBB10_12: # %else104048; AVX512F-NEXT: testb $64, %al4049; AVX512F-NEXT: jne .LBB10_134050; AVX512F-NEXT: .LBB10_14: # %else124051; AVX512F-NEXT: testb %al, %al4052; AVX512F-NEXT: js .LBB10_154053; AVX512F-NEXT: .LBB10_16: # %else144054; AVX512F-NEXT: testl $256, %eax # imm = 0x1004055; AVX512F-NEXT: jne .LBB10_174056; AVX512F-NEXT: .LBB10_18: # %else164057; AVX512F-NEXT: testl $512, %eax # imm = 0x2004058; AVX512F-NEXT: jne .LBB10_194059; AVX512F-NEXT: .LBB10_20: # %else184060; AVX512F-NEXT: testl $1024, %eax # imm = 0x4004061; AVX512F-NEXT: jne .LBB10_214062; AVX512F-NEXT: .LBB10_22: # %else204063; AVX512F-NEXT: testl $2048, %eax # imm = 0x8004064; AVX512F-NEXT: jne .LBB10_234065; AVX512F-NEXT: .LBB10_24: # %else224066; AVX512F-NEXT: testl $4096, %eax # imm = 0x10004067; AVX512F-NEXT: jne .LBB10_254068; AVX512F-NEXT: .LBB10_26: # %else244069; AVX512F-NEXT: testl $8192, %eax # imm = 0x20004070; AVX512F-NEXT: jne .LBB10_274071; AVX512F-NEXT: .LBB10_28: # %else264072; AVX512F-NEXT: testl $16384, %eax # imm = 0x40004073; AVX512F-NEXT: jne .LBB10_294074; AVX512F-NEXT: .LBB10_30: # %else284075; AVX512F-NEXT: testl $32768, %eax # imm = 0x80004076; AVX512F-NEXT: jne .LBB10_314077; AVX512F-NEXT: .LBB10_32: # %else304078; AVX512F-NEXT: vzeroupper4079; AVX512F-NEXT: retq4080; AVX512F-NEXT: .LBB10_1: # %cond.store4081; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)4082; AVX512F-NEXT: testb $2, %al4083; AVX512F-NEXT: je .LBB10_44084; AVX512F-NEXT: .LBB10_3: # %cond.store14085; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)4086; AVX512F-NEXT: testb $4, %al4087; AVX512F-NEXT: je .LBB10_64088; AVX512F-NEXT: .LBB10_5: # %cond.store34089; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)4090; AVX512F-NEXT: testb $8, %al4091; AVX512F-NEXT: je .LBB10_84092; AVX512F-NEXT: .LBB10_7: # %cond.store54093; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)4094; AVX512F-NEXT: testb $16, %al4095; AVX512F-NEXT: je .LBB10_104096; AVX512F-NEXT: .LBB10_9: # %cond.store74097; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)4098; AVX512F-NEXT: testb $32, %al4099; AVX512F-NEXT: je .LBB10_124100; AVX512F-NEXT: .LBB10_11: # %cond.store94101; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)4102; AVX512F-NEXT: testb $64, %al4103; AVX512F-NEXT: je .LBB10_144104; AVX512F-NEXT: .LBB10_13: # %cond.store114105; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)4106; AVX512F-NEXT: testb %al, %al4107; AVX512F-NEXT: jns .LBB10_164108; AVX512F-NEXT: .LBB10_15: # %cond.store134109; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)4110; AVX512F-NEXT: testl $256, %eax # imm = 0x1004111; AVX512F-NEXT: je .LBB10_184112; AVX512F-NEXT: .LBB10_17: # %cond.store154113; AVX512F-NEXT: vpextrb $8, %xmm0, 8(%rdi)4114; AVX512F-NEXT: testl $512, %eax # imm = 0x2004115; AVX512F-NEXT: je .LBB10_204116; AVX512F-NEXT: .LBB10_19: # %cond.store174117; AVX512F-NEXT: vpextrb $9, %xmm0, 9(%rdi)4118; AVX512F-NEXT: testl $1024, %eax # imm = 0x4004119; AVX512F-NEXT: je .LBB10_224120; AVX512F-NEXT: .LBB10_21: # %cond.store194121; AVX512F-NEXT: vpextrb $10, %xmm0, 10(%rdi)4122; AVX512F-NEXT: testl $2048, %eax # imm = 0x8004123; AVX512F-NEXT: je .LBB10_244124; AVX512F-NEXT: .LBB10_23: # %cond.store214125; AVX512F-NEXT: vpextrb $11, %xmm0, 11(%rdi)4126; AVX512F-NEXT: testl $4096, %eax # imm = 0x10004127; AVX512F-NEXT: je .LBB10_264128; AVX512F-NEXT: .LBB10_25: # %cond.store234129; AVX512F-NEXT: vpextrb $12, %xmm0, 12(%rdi)4130; AVX512F-NEXT: testl $8192, %eax # imm = 0x20004131; AVX512F-NEXT: je .LBB10_284132; AVX512F-NEXT: .LBB10_27: # %cond.store254133; AVX512F-NEXT: vpextrb $13, %xmm0, 13(%rdi)4134; AVX512F-NEXT: testl $16384, %eax # imm = 0x40004135; AVX512F-NEXT: je .LBB10_304136; AVX512F-NEXT: .LBB10_29: # %cond.store274137; AVX512F-NEXT: vpextrb $14, %xmm0, 14(%rdi)4138; AVX512F-NEXT: testl $32768, %eax # imm = 0x80004139; AVX512F-NEXT: je .LBB10_324140; AVX512F-NEXT: .LBB10_31: # %cond.store294141; AVX512F-NEXT: vpextrb $15, %xmm0, 15(%rdi)4142; AVX512F-NEXT: vzeroupper4143; AVX512F-NEXT: retq4144;4145; AVX512FVL-LABEL: truncstore_v16i32_v16i8:4146; AVX512FVL: # %bb.0:4147; AVX512FVL-NEXT: vptestmd %zmm1, %zmm1, %k04148; AVX512FVL-NEXT: vpmovusdb %zmm0, %xmm04149; AVX512FVL-NEXT: kmovw %k0, %eax4150; AVX512FVL-NEXT: testb $1, %al4151; AVX512FVL-NEXT: jne .LBB10_14152; AVX512FVL-NEXT: # %bb.2: # %else4153; AVX512FVL-NEXT: testb $2, %al4154; AVX512FVL-NEXT: jne .LBB10_34155; AVX512FVL-NEXT: .LBB10_4: # %else24156; AVX512FVL-NEXT: testb $4, %al4157; AVX512FVL-NEXT: jne .LBB10_54158; AVX512FVL-NEXT: .LBB10_6: # %else44159; AVX512FVL-NEXT: testb $8, %al4160; AVX512FVL-NEXT: jne .LBB10_74161; AVX512FVL-NEXT: .LBB10_8: # %else64162; AVX512FVL-NEXT: testb $16, %al4163; AVX512FVL-NEXT: jne .LBB10_94164; AVX512FVL-NEXT: .LBB10_10: # %else84165; AVX512FVL-NEXT: testb $32, %al4166; AVX512FVL-NEXT: jne .LBB10_114167; AVX512FVL-NEXT: .LBB10_12: # %else104168; AVX512FVL-NEXT: testb $64, %al4169; AVX512FVL-NEXT: jne .LBB10_134170; AVX512FVL-NEXT: .LBB10_14: # %else124171; AVX512FVL-NEXT: testb %al, %al4172; AVX512FVL-NEXT: js .LBB10_154173; AVX512FVL-NEXT: .LBB10_16: # %else144174; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1004175; AVX512FVL-NEXT: jne .LBB10_174176; AVX512FVL-NEXT: .LBB10_18: # %else164177; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2004178; AVX512FVL-NEXT: jne .LBB10_194179; AVX512FVL-NEXT: .LBB10_20: # %else184180; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4004181; AVX512FVL-NEXT: jne .LBB10_214182; AVX512FVL-NEXT: .LBB10_22: # %else204183; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8004184; AVX512FVL-NEXT: jne .LBB10_234185; AVX512FVL-NEXT: .LBB10_24: # %else224186; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10004187; AVX512FVL-NEXT: jne .LBB10_254188; AVX512FVL-NEXT: .LBB10_26: # %else244189; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20004190; AVX512FVL-NEXT: jne .LBB10_274191; AVX512FVL-NEXT: .LBB10_28: # %else264192; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40004193; AVX512FVL-NEXT: jne .LBB10_294194; AVX512FVL-NEXT: .LBB10_30: # %else284195; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80004196; AVX512FVL-NEXT: jne .LBB10_314197; AVX512FVL-NEXT: .LBB10_32: # %else304198; AVX512FVL-NEXT: vzeroupper4199; AVX512FVL-NEXT: retq4200; AVX512FVL-NEXT: .LBB10_1: # %cond.store4201; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)4202; AVX512FVL-NEXT: testb $2, %al4203; AVX512FVL-NEXT: je .LBB10_44204; AVX512FVL-NEXT: .LBB10_3: # %cond.store14205; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)4206; AVX512FVL-NEXT: testb $4, %al4207; AVX512FVL-NEXT: je .LBB10_64208; AVX512FVL-NEXT: .LBB10_5: # %cond.store34209; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)4210; AVX512FVL-NEXT: testb $8, %al4211; AVX512FVL-NEXT: je .LBB10_84212; AVX512FVL-NEXT: .LBB10_7: # %cond.store54213; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)4214; AVX512FVL-NEXT: testb $16, %al4215; AVX512FVL-NEXT: je .LBB10_104216; AVX512FVL-NEXT: .LBB10_9: # %cond.store74217; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)4218; AVX512FVL-NEXT: testb $32, %al4219; AVX512FVL-NEXT: je .LBB10_124220; AVX512FVL-NEXT: .LBB10_11: # %cond.store94221; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)4222; AVX512FVL-NEXT: testb $64, %al4223; AVX512FVL-NEXT: je .LBB10_144224; AVX512FVL-NEXT: .LBB10_13: # %cond.store114225; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)4226; AVX512FVL-NEXT: testb %al, %al4227; AVX512FVL-NEXT: jns .LBB10_164228; AVX512FVL-NEXT: .LBB10_15: # %cond.store134229; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)4230; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1004231; AVX512FVL-NEXT: je .LBB10_184232; AVX512FVL-NEXT: .LBB10_17: # %cond.store154233; AVX512FVL-NEXT: vpextrb $8, %xmm0, 8(%rdi)4234; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2004235; AVX512FVL-NEXT: je .LBB10_204236; AVX512FVL-NEXT: .LBB10_19: # %cond.store174237; AVX512FVL-NEXT: vpextrb $9, %xmm0, 9(%rdi)4238; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4004239; AVX512FVL-NEXT: je .LBB10_224240; AVX512FVL-NEXT: .LBB10_21: # %cond.store194241; AVX512FVL-NEXT: vpextrb $10, %xmm0, 10(%rdi)4242; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8004243; AVX512FVL-NEXT: je .LBB10_244244; AVX512FVL-NEXT: .LBB10_23: # %cond.store214245; AVX512FVL-NEXT: vpextrb $11, %xmm0, 11(%rdi)4246; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10004247; AVX512FVL-NEXT: je .LBB10_264248; AVX512FVL-NEXT: .LBB10_25: # %cond.store234249; AVX512FVL-NEXT: vpextrb $12, %xmm0, 12(%rdi)4250; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20004251; AVX512FVL-NEXT: je .LBB10_284252; AVX512FVL-NEXT: .LBB10_27: # %cond.store254253; AVX512FVL-NEXT: vpextrb $13, %xmm0, 13(%rdi)4254; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40004255; AVX512FVL-NEXT: je .LBB10_304256; AVX512FVL-NEXT: .LBB10_29: # %cond.store274257; AVX512FVL-NEXT: vpextrb $14, %xmm0, 14(%rdi)4258; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80004259; AVX512FVL-NEXT: je .LBB10_324260; AVX512FVL-NEXT: .LBB10_31: # %cond.store294261; AVX512FVL-NEXT: vpextrb $15, %xmm0, 15(%rdi)4262; AVX512FVL-NEXT: vzeroupper4263; AVX512FVL-NEXT: retq4264;4265; AVX512BW-LABEL: truncstore_v16i32_v16i8:4266; AVX512BW: # %bb.0:4267; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k14268; AVX512BW-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm04269; AVX512BW-NEXT: vpmovdb %zmm0, (%rdi) {%k1}4270; AVX512BW-NEXT: vzeroupper4271; AVX512BW-NEXT: retq4272;4273; AVX512BWVL-LABEL: truncstore_v16i32_v16i8:4274; AVX512BWVL: # %bb.0:4275; AVX512BWVL-NEXT: vptestmd %zmm1, %zmm1, %k14276; AVX512BWVL-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm04277; AVX512BWVL-NEXT: vpmovdb %zmm0, (%rdi) {%k1}4278; AVX512BWVL-NEXT: vzeroupper4279; AVX512BWVL-NEXT: retq4280 %a = icmp ne <16 x i32> %mask, zeroinitializer4281 %b = icmp ult <16 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>4282 %c = select <16 x i1> %b, <16 x i32> %x, <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>4283 %d = trunc <16 x i32> %c to <16 x i8>4284 call void @llvm.masked.store.v16i8.p0(<16 x i8> %d, ptr %p, i32 1, <16 x i1> %a)4285 ret void4286}4287 4288define void @truncstore_v8i32_v8i16(<8 x i32> %x, ptr %p, <8 x i32> %mask) {4289; SSE2-LABEL: truncstore_v8i32_v8i16:4290; SSE2: # %bb.0:4291; SSE2-NEXT: pxor %xmm5, %xmm54292; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]4293; SSE2-NEXT: movdqa %xmm0, %xmm74294; SSE2-NEXT: pxor %xmm6, %xmm74295; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147549183,2147549183,2147549183,2147549183]4296; SSE2-NEXT: movdqa %xmm8, %xmm44297; SSE2-NEXT: pcmpgtd %xmm7, %xmm44298; SSE2-NEXT: pcmpeqd %xmm7, %xmm74299; SSE2-NEXT: pand %xmm4, %xmm04300; SSE2-NEXT: pxor %xmm7, %xmm44301; SSE2-NEXT: por %xmm0, %xmm44302; SSE2-NEXT: pxor %xmm1, %xmm64303; SSE2-NEXT: pcmpgtd %xmm6, %xmm84304; SSE2-NEXT: pxor %xmm8, %xmm74305; SSE2-NEXT: pand %xmm1, %xmm84306; SSE2-NEXT: por %xmm7, %xmm84307; SSE2-NEXT: pslld $16, %xmm84308; SSE2-NEXT: psrad $16, %xmm84309; SSE2-NEXT: pslld $16, %xmm44310; SSE2-NEXT: psrad $16, %xmm44311; SSE2-NEXT: packssdw %xmm8, %xmm44312; SSE2-NEXT: pcmpeqd %xmm5, %xmm34313; SSE2-NEXT: pcmpeqd %xmm5, %xmm24314; SSE2-NEXT: packssdw %xmm3, %xmm24315; SSE2-NEXT: packsswb %xmm2, %xmm24316; SSE2-NEXT: pmovmskb %xmm2, %eax4317; SSE2-NEXT: notl %eax4318; SSE2-NEXT: testb $1, %al4319; SSE2-NEXT: jne .LBB11_14320; SSE2-NEXT: # %bb.2: # %else4321; SSE2-NEXT: testb $2, %al4322; SSE2-NEXT: jne .LBB11_34323; SSE2-NEXT: .LBB11_4: # %else24324; SSE2-NEXT: testb $4, %al4325; SSE2-NEXT: jne .LBB11_54326; SSE2-NEXT: .LBB11_6: # %else44327; SSE2-NEXT: testb $8, %al4328; SSE2-NEXT: jne .LBB11_74329; SSE2-NEXT: .LBB11_8: # %else64330; SSE2-NEXT: testb $16, %al4331; SSE2-NEXT: jne .LBB11_94332; SSE2-NEXT: .LBB11_10: # %else84333; SSE2-NEXT: testb $32, %al4334; SSE2-NEXT: jne .LBB11_114335; SSE2-NEXT: .LBB11_12: # %else104336; SSE2-NEXT: testb $64, %al4337; SSE2-NEXT: jne .LBB11_134338; SSE2-NEXT: .LBB11_14: # %else124339; SSE2-NEXT: testb $-128, %al4340; SSE2-NEXT: jne .LBB11_154341; SSE2-NEXT: .LBB11_16: # %else144342; SSE2-NEXT: retq4343; SSE2-NEXT: .LBB11_1: # %cond.store4344; SSE2-NEXT: movd %xmm4, %ecx4345; SSE2-NEXT: movw %cx, (%rdi)4346; SSE2-NEXT: testb $2, %al4347; SSE2-NEXT: je .LBB11_44348; SSE2-NEXT: .LBB11_3: # %cond.store14349; SSE2-NEXT: pextrw $1, %xmm4, %ecx4350; SSE2-NEXT: movw %cx, 2(%rdi)4351; SSE2-NEXT: testb $4, %al4352; SSE2-NEXT: je .LBB11_64353; SSE2-NEXT: .LBB11_5: # %cond.store34354; SSE2-NEXT: pextrw $2, %xmm4, %ecx4355; SSE2-NEXT: movw %cx, 4(%rdi)4356; SSE2-NEXT: testb $8, %al4357; SSE2-NEXT: je .LBB11_84358; SSE2-NEXT: .LBB11_7: # %cond.store54359; SSE2-NEXT: pextrw $3, %xmm4, %ecx4360; SSE2-NEXT: movw %cx, 6(%rdi)4361; SSE2-NEXT: testb $16, %al4362; SSE2-NEXT: je .LBB11_104363; SSE2-NEXT: .LBB11_9: # %cond.store74364; SSE2-NEXT: pextrw $4, %xmm4, %ecx4365; SSE2-NEXT: movw %cx, 8(%rdi)4366; SSE2-NEXT: testb $32, %al4367; SSE2-NEXT: je .LBB11_124368; SSE2-NEXT: .LBB11_11: # %cond.store94369; SSE2-NEXT: pextrw $5, %xmm4, %ecx4370; SSE2-NEXT: movw %cx, 10(%rdi)4371; SSE2-NEXT: testb $64, %al4372; SSE2-NEXT: je .LBB11_144373; SSE2-NEXT: .LBB11_13: # %cond.store114374; SSE2-NEXT: pextrw $6, %xmm4, %ecx4375; SSE2-NEXT: movw %cx, 12(%rdi)4376; SSE2-NEXT: testb $-128, %al4377; SSE2-NEXT: je .LBB11_164378; SSE2-NEXT: .LBB11_15: # %cond.store134379; SSE2-NEXT: pextrw $7, %xmm4, %eax4380; SSE2-NEXT: movw %ax, 14(%rdi)4381; SSE2-NEXT: retq4382;4383; SSE4-LABEL: truncstore_v8i32_v8i16:4384; SSE4: # %bb.0:4385; SSE4-NEXT: pxor %xmm4, %xmm44386; SSE4-NEXT: pmovsxbw {{.*#+}} xmm5 = [65535,0,65535,0,65535,0,65535,0]4387; SSE4-NEXT: pminud %xmm5, %xmm14388; SSE4-NEXT: pminud %xmm5, %xmm04389; SSE4-NEXT: packusdw %xmm1, %xmm04390; SSE4-NEXT: pcmpeqd %xmm4, %xmm34391; SSE4-NEXT: pcmpeqd %xmm4, %xmm24392; SSE4-NEXT: packssdw %xmm3, %xmm24393; SSE4-NEXT: packsswb %xmm2, %xmm24394; SSE4-NEXT: pmovmskb %xmm2, %eax4395; SSE4-NEXT: notl %eax4396; SSE4-NEXT: testb $1, %al4397; SSE4-NEXT: jne .LBB11_14398; SSE4-NEXT: # %bb.2: # %else4399; SSE4-NEXT: testb $2, %al4400; SSE4-NEXT: jne .LBB11_34401; SSE4-NEXT: .LBB11_4: # %else24402; SSE4-NEXT: testb $4, %al4403; SSE4-NEXT: jne .LBB11_54404; SSE4-NEXT: .LBB11_6: # %else44405; SSE4-NEXT: testb $8, %al4406; SSE4-NEXT: jne .LBB11_74407; SSE4-NEXT: .LBB11_8: # %else64408; SSE4-NEXT: testb $16, %al4409; SSE4-NEXT: jne .LBB11_94410; SSE4-NEXT: .LBB11_10: # %else84411; SSE4-NEXT: testb $32, %al4412; SSE4-NEXT: jne .LBB11_114413; SSE4-NEXT: .LBB11_12: # %else104414; SSE4-NEXT: testb $64, %al4415; SSE4-NEXT: jne .LBB11_134416; SSE4-NEXT: .LBB11_14: # %else124417; SSE4-NEXT: testb $-128, %al4418; SSE4-NEXT: jne .LBB11_154419; SSE4-NEXT: .LBB11_16: # %else144420; SSE4-NEXT: retq4421; SSE4-NEXT: .LBB11_1: # %cond.store4422; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)4423; SSE4-NEXT: testb $2, %al4424; SSE4-NEXT: je .LBB11_44425; SSE4-NEXT: .LBB11_3: # %cond.store14426; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)4427; SSE4-NEXT: testb $4, %al4428; SSE4-NEXT: je .LBB11_64429; SSE4-NEXT: .LBB11_5: # %cond.store34430; SSE4-NEXT: pextrw $2, %xmm0, 4(%rdi)4431; SSE4-NEXT: testb $8, %al4432; SSE4-NEXT: je .LBB11_84433; SSE4-NEXT: .LBB11_7: # %cond.store54434; SSE4-NEXT: pextrw $3, %xmm0, 6(%rdi)4435; SSE4-NEXT: testb $16, %al4436; SSE4-NEXT: je .LBB11_104437; SSE4-NEXT: .LBB11_9: # %cond.store74438; SSE4-NEXT: pextrw $4, %xmm0, 8(%rdi)4439; SSE4-NEXT: testb $32, %al4440; SSE4-NEXT: je .LBB11_124441; SSE4-NEXT: .LBB11_11: # %cond.store94442; SSE4-NEXT: pextrw $5, %xmm0, 10(%rdi)4443; SSE4-NEXT: testb $64, %al4444; SSE4-NEXT: je .LBB11_144445; SSE4-NEXT: .LBB11_13: # %cond.store114446; SSE4-NEXT: pextrw $6, %xmm0, 12(%rdi)4447; SSE4-NEXT: testb $-128, %al4448; SSE4-NEXT: je .LBB11_164449; SSE4-NEXT: .LBB11_15: # %cond.store134450; SSE4-NEXT: pextrw $7, %xmm0, 14(%rdi)4451; SSE4-NEXT: retq4452;4453; AVX1-LABEL: truncstore_v8i32_v8i16:4454; AVX1: # %bb.0:4455; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm24456; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [65535,65535,65535,65535]4457; AVX1-NEXT: vpminud %xmm3, %xmm2, %xmm24458; AVX1-NEXT: vpminud %xmm3, %xmm0, %xmm04459; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm04460; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm24461; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34462; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm24463; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm14464; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm14465; AVX1-NEXT: vmovmskps %ymm1, %eax4466; AVX1-NEXT: notl %eax4467; AVX1-NEXT: testb $1, %al4468; AVX1-NEXT: jne .LBB11_14469; AVX1-NEXT: # %bb.2: # %else4470; AVX1-NEXT: testb $2, %al4471; AVX1-NEXT: jne .LBB11_34472; AVX1-NEXT: .LBB11_4: # %else24473; AVX1-NEXT: testb $4, %al4474; AVX1-NEXT: jne .LBB11_54475; AVX1-NEXT: .LBB11_6: # %else44476; AVX1-NEXT: testb $8, %al4477; AVX1-NEXT: jne .LBB11_74478; AVX1-NEXT: .LBB11_8: # %else64479; AVX1-NEXT: testb $16, %al4480; AVX1-NEXT: jne .LBB11_94481; AVX1-NEXT: .LBB11_10: # %else84482; AVX1-NEXT: testb $32, %al4483; AVX1-NEXT: jne .LBB11_114484; AVX1-NEXT: .LBB11_12: # %else104485; AVX1-NEXT: testb $64, %al4486; AVX1-NEXT: jne .LBB11_134487; AVX1-NEXT: .LBB11_14: # %else124488; AVX1-NEXT: testb $-128, %al4489; AVX1-NEXT: jne .LBB11_154490; AVX1-NEXT: .LBB11_16: # %else144491; AVX1-NEXT: vzeroupper4492; AVX1-NEXT: retq4493; AVX1-NEXT: .LBB11_1: # %cond.store4494; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)4495; AVX1-NEXT: testb $2, %al4496; AVX1-NEXT: je .LBB11_44497; AVX1-NEXT: .LBB11_3: # %cond.store14498; AVX1-NEXT: vpextrw $1, %xmm0, 2(%rdi)4499; AVX1-NEXT: testb $4, %al4500; AVX1-NEXT: je .LBB11_64501; AVX1-NEXT: .LBB11_5: # %cond.store34502; AVX1-NEXT: vpextrw $2, %xmm0, 4(%rdi)4503; AVX1-NEXT: testb $8, %al4504; AVX1-NEXT: je .LBB11_84505; AVX1-NEXT: .LBB11_7: # %cond.store54506; AVX1-NEXT: vpextrw $3, %xmm0, 6(%rdi)4507; AVX1-NEXT: testb $16, %al4508; AVX1-NEXT: je .LBB11_104509; AVX1-NEXT: .LBB11_9: # %cond.store74510; AVX1-NEXT: vpextrw $4, %xmm0, 8(%rdi)4511; AVX1-NEXT: testb $32, %al4512; AVX1-NEXT: je .LBB11_124513; AVX1-NEXT: .LBB11_11: # %cond.store94514; AVX1-NEXT: vpextrw $5, %xmm0, 10(%rdi)4515; AVX1-NEXT: testb $64, %al4516; AVX1-NEXT: je .LBB11_144517; AVX1-NEXT: .LBB11_13: # %cond.store114518; AVX1-NEXT: vpextrw $6, %xmm0, 12(%rdi)4519; AVX1-NEXT: testb $-128, %al4520; AVX1-NEXT: je .LBB11_164521; AVX1-NEXT: .LBB11_15: # %cond.store134522; AVX1-NEXT: vpextrw $7, %xmm0, 14(%rdi)4523; AVX1-NEXT: vzeroupper4524; AVX1-NEXT: retq4525;4526; AVX2-LABEL: truncstore_v8i32_v8i16:4527; AVX2: # %bb.0:4528; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm24529; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm3 = [65535,65535,65535,65535,65535,65535,65535,65535]4530; AVX2-NEXT: vpminud %ymm3, %ymm0, %ymm04531; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm34532; AVX2-NEXT: vpackusdw %xmm3, %xmm0, %xmm04533; AVX2-NEXT: vpcmpeqd %ymm2, %ymm1, %ymm14534; AVX2-NEXT: vmovmskps %ymm1, %eax4535; AVX2-NEXT: notl %eax4536; AVX2-NEXT: testb $1, %al4537; AVX2-NEXT: jne .LBB11_14538; AVX2-NEXT: # %bb.2: # %else4539; AVX2-NEXT: testb $2, %al4540; AVX2-NEXT: jne .LBB11_34541; AVX2-NEXT: .LBB11_4: # %else24542; AVX2-NEXT: testb $4, %al4543; AVX2-NEXT: jne .LBB11_54544; AVX2-NEXT: .LBB11_6: # %else44545; AVX2-NEXT: testb $8, %al4546; AVX2-NEXT: jne .LBB11_74547; AVX2-NEXT: .LBB11_8: # %else64548; AVX2-NEXT: testb $16, %al4549; AVX2-NEXT: jne .LBB11_94550; AVX2-NEXT: .LBB11_10: # %else84551; AVX2-NEXT: testb $32, %al4552; AVX2-NEXT: jne .LBB11_114553; AVX2-NEXT: .LBB11_12: # %else104554; AVX2-NEXT: testb $64, %al4555; AVX2-NEXT: jne .LBB11_134556; AVX2-NEXT: .LBB11_14: # %else124557; AVX2-NEXT: testb $-128, %al4558; AVX2-NEXT: jne .LBB11_154559; AVX2-NEXT: .LBB11_16: # %else144560; AVX2-NEXT: vzeroupper4561; AVX2-NEXT: retq4562; AVX2-NEXT: .LBB11_1: # %cond.store4563; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)4564; AVX2-NEXT: testb $2, %al4565; AVX2-NEXT: je .LBB11_44566; AVX2-NEXT: .LBB11_3: # %cond.store14567; AVX2-NEXT: vpextrw $1, %xmm0, 2(%rdi)4568; AVX2-NEXT: testb $4, %al4569; AVX2-NEXT: je .LBB11_64570; AVX2-NEXT: .LBB11_5: # %cond.store34571; AVX2-NEXT: vpextrw $2, %xmm0, 4(%rdi)4572; AVX2-NEXT: testb $8, %al4573; AVX2-NEXT: je .LBB11_84574; AVX2-NEXT: .LBB11_7: # %cond.store54575; AVX2-NEXT: vpextrw $3, %xmm0, 6(%rdi)4576; AVX2-NEXT: testb $16, %al4577; AVX2-NEXT: je .LBB11_104578; AVX2-NEXT: .LBB11_9: # %cond.store74579; AVX2-NEXT: vpextrw $4, %xmm0, 8(%rdi)4580; AVX2-NEXT: testb $32, %al4581; AVX2-NEXT: je .LBB11_124582; AVX2-NEXT: .LBB11_11: # %cond.store94583; AVX2-NEXT: vpextrw $5, %xmm0, 10(%rdi)4584; AVX2-NEXT: testb $64, %al4585; AVX2-NEXT: je .LBB11_144586; AVX2-NEXT: .LBB11_13: # %cond.store114587; AVX2-NEXT: vpextrw $6, %xmm0, 12(%rdi)4588; AVX2-NEXT: testb $-128, %al4589; AVX2-NEXT: je .LBB11_164590; AVX2-NEXT: .LBB11_15: # %cond.store134591; AVX2-NEXT: vpextrw $7, %xmm0, 14(%rdi)4592; AVX2-NEXT: vzeroupper4593; AVX2-NEXT: retq4594;4595; AVX512F-LABEL: truncstore_v8i32_v8i16:4596; AVX512F: # %bb.0:4597; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm14598; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04599; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k04600; AVX512F-NEXT: vpmovusdw %zmm0, %ymm04601; AVX512F-NEXT: kmovw %k0, %eax4602; AVX512F-NEXT: testb $1, %al4603; AVX512F-NEXT: jne .LBB11_14604; AVX512F-NEXT: # %bb.2: # %else4605; AVX512F-NEXT: testb $2, %al4606; AVX512F-NEXT: jne .LBB11_34607; AVX512F-NEXT: .LBB11_4: # %else24608; AVX512F-NEXT: testb $4, %al4609; AVX512F-NEXT: jne .LBB11_54610; AVX512F-NEXT: .LBB11_6: # %else44611; AVX512F-NEXT: testb $8, %al4612; AVX512F-NEXT: jne .LBB11_74613; AVX512F-NEXT: .LBB11_8: # %else64614; AVX512F-NEXT: testb $16, %al4615; AVX512F-NEXT: jne .LBB11_94616; AVX512F-NEXT: .LBB11_10: # %else84617; AVX512F-NEXT: testb $32, %al4618; AVX512F-NEXT: jne .LBB11_114619; AVX512F-NEXT: .LBB11_12: # %else104620; AVX512F-NEXT: testb $64, %al4621; AVX512F-NEXT: jne .LBB11_134622; AVX512F-NEXT: .LBB11_14: # %else124623; AVX512F-NEXT: testb $-128, %al4624; AVX512F-NEXT: jne .LBB11_154625; AVX512F-NEXT: .LBB11_16: # %else144626; AVX512F-NEXT: vzeroupper4627; AVX512F-NEXT: retq4628; AVX512F-NEXT: .LBB11_1: # %cond.store4629; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)4630; AVX512F-NEXT: testb $2, %al4631; AVX512F-NEXT: je .LBB11_44632; AVX512F-NEXT: .LBB11_3: # %cond.store14633; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)4634; AVX512F-NEXT: testb $4, %al4635; AVX512F-NEXT: je .LBB11_64636; AVX512F-NEXT: .LBB11_5: # %cond.store34637; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)4638; AVX512F-NEXT: testb $8, %al4639; AVX512F-NEXT: je .LBB11_84640; AVX512F-NEXT: .LBB11_7: # %cond.store54641; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)4642; AVX512F-NEXT: testb $16, %al4643; AVX512F-NEXT: je .LBB11_104644; AVX512F-NEXT: .LBB11_9: # %cond.store74645; AVX512F-NEXT: vpextrw $4, %xmm0, 8(%rdi)4646; AVX512F-NEXT: testb $32, %al4647; AVX512F-NEXT: je .LBB11_124648; AVX512F-NEXT: .LBB11_11: # %cond.store94649; AVX512F-NEXT: vpextrw $5, %xmm0, 10(%rdi)4650; AVX512F-NEXT: testb $64, %al4651; AVX512F-NEXT: je .LBB11_144652; AVX512F-NEXT: .LBB11_13: # %cond.store114653; AVX512F-NEXT: vpextrw $6, %xmm0, 12(%rdi)4654; AVX512F-NEXT: testb $-128, %al4655; AVX512F-NEXT: je .LBB11_164656; AVX512F-NEXT: .LBB11_15: # %cond.store134657; AVX512F-NEXT: vpextrw $7, %xmm0, 14(%rdi)4658; AVX512F-NEXT: vzeroupper4659; AVX512F-NEXT: retq4660;4661; AVX512FVL-LABEL: truncstore_v8i32_v8i16:4662; AVX512FVL: # %bb.0:4663; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k04664; AVX512FVL-NEXT: vpmovusdw %ymm0, %xmm04665; AVX512FVL-NEXT: kmovw %k0, %eax4666; AVX512FVL-NEXT: testb $1, %al4667; AVX512FVL-NEXT: jne .LBB11_14668; AVX512FVL-NEXT: # %bb.2: # %else4669; AVX512FVL-NEXT: testb $2, %al4670; AVX512FVL-NEXT: jne .LBB11_34671; AVX512FVL-NEXT: .LBB11_4: # %else24672; AVX512FVL-NEXT: testb $4, %al4673; AVX512FVL-NEXT: jne .LBB11_54674; AVX512FVL-NEXT: .LBB11_6: # %else44675; AVX512FVL-NEXT: testb $8, %al4676; AVX512FVL-NEXT: jne .LBB11_74677; AVX512FVL-NEXT: .LBB11_8: # %else64678; AVX512FVL-NEXT: testb $16, %al4679; AVX512FVL-NEXT: jne .LBB11_94680; AVX512FVL-NEXT: .LBB11_10: # %else84681; AVX512FVL-NEXT: testb $32, %al4682; AVX512FVL-NEXT: jne .LBB11_114683; AVX512FVL-NEXT: .LBB11_12: # %else104684; AVX512FVL-NEXT: testb $64, %al4685; AVX512FVL-NEXT: jne .LBB11_134686; AVX512FVL-NEXT: .LBB11_14: # %else124687; AVX512FVL-NEXT: testb $-128, %al4688; AVX512FVL-NEXT: jne .LBB11_154689; AVX512FVL-NEXT: .LBB11_16: # %else144690; AVX512FVL-NEXT: vzeroupper4691; AVX512FVL-NEXT: retq4692; AVX512FVL-NEXT: .LBB11_1: # %cond.store4693; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)4694; AVX512FVL-NEXT: testb $2, %al4695; AVX512FVL-NEXT: je .LBB11_44696; AVX512FVL-NEXT: .LBB11_3: # %cond.store14697; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)4698; AVX512FVL-NEXT: testb $4, %al4699; AVX512FVL-NEXT: je .LBB11_64700; AVX512FVL-NEXT: .LBB11_5: # %cond.store34701; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)4702; AVX512FVL-NEXT: testb $8, %al4703; AVX512FVL-NEXT: je .LBB11_84704; AVX512FVL-NEXT: .LBB11_7: # %cond.store54705; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)4706; AVX512FVL-NEXT: testb $16, %al4707; AVX512FVL-NEXT: je .LBB11_104708; AVX512FVL-NEXT: .LBB11_9: # %cond.store74709; AVX512FVL-NEXT: vpextrw $4, %xmm0, 8(%rdi)4710; AVX512FVL-NEXT: testb $32, %al4711; AVX512FVL-NEXT: je .LBB11_124712; AVX512FVL-NEXT: .LBB11_11: # %cond.store94713; AVX512FVL-NEXT: vpextrw $5, %xmm0, 10(%rdi)4714; AVX512FVL-NEXT: testb $64, %al4715; AVX512FVL-NEXT: je .LBB11_144716; AVX512FVL-NEXT: .LBB11_13: # %cond.store114717; AVX512FVL-NEXT: vpextrw $6, %xmm0, 12(%rdi)4718; AVX512FVL-NEXT: testb $-128, %al4719; AVX512FVL-NEXT: je .LBB11_164720; AVX512FVL-NEXT: .LBB11_15: # %cond.store134721; AVX512FVL-NEXT: vpextrw $7, %xmm0, 14(%rdi)4722; AVX512FVL-NEXT: vzeroupper4723; AVX512FVL-NEXT: retq4724;4725; AVX512BW-LABEL: truncstore_v8i32_v8i16:4726; AVX512BW: # %bb.0:4727; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm14728; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04729; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k04730; AVX512BW-NEXT: kshiftld $24, %k0, %k04731; AVX512BW-NEXT: kshiftrd $24, %k0, %k14732; AVX512BW-NEXT: vpmovusdw %zmm0, %ymm04733; AVX512BW-NEXT: vmovdqu16 %zmm0, (%rdi) {%k1}4734; AVX512BW-NEXT: vzeroupper4735; AVX512BW-NEXT: retq4736;4737; AVX512BWVL-LABEL: truncstore_v8i32_v8i16:4738; AVX512BWVL: # %bb.0:4739; AVX512BWVL-NEXT: vptestmd %ymm1, %ymm1, %k14740; AVX512BWVL-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm04741; AVX512BWVL-NEXT: vpmovdw %ymm0, (%rdi) {%k1}4742; AVX512BWVL-NEXT: vzeroupper4743; AVX512BWVL-NEXT: retq4744 %a = icmp ne <8 x i32> %mask, zeroinitializer4745 %b = icmp ult <8 x i32> %x, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>4746 %c = select <8 x i1> %b, <8 x i32> %x, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>4747 %d = trunc <8 x i32> %c to <8 x i16>4748 call void @llvm.masked.store.v8i16.p0(<8 x i16> %d, ptr %p, i32 1, <8 x i1> %a)4749 ret void4750}4751 4752define void @truncstore_v8i32_v8i8(<8 x i32> %x, ptr %p, <8 x i32> %mask) {4753; SSE2-LABEL: truncstore_v8i32_v8i8:4754; SSE2: # %bb.0:4755; SSE2-NEXT: pxor %xmm5, %xmm54756; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [255,255,255,255]4757; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]4758; SSE2-NEXT: movdqa %xmm1, %xmm84759; SSE2-NEXT: pxor %xmm7, %xmm84760; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483903,2147483903,2147483903,2147483903]4761; SSE2-NEXT: movdqa %xmm4, %xmm94762; SSE2-NEXT: pcmpgtd %xmm8, %xmm94763; SSE2-NEXT: pand %xmm9, %xmm14764; SSE2-NEXT: pandn %xmm6, %xmm94765; SSE2-NEXT: por %xmm1, %xmm94766; SSE2-NEXT: pxor %xmm0, %xmm74767; SSE2-NEXT: pcmpgtd %xmm7, %xmm44768; SSE2-NEXT: pand %xmm4, %xmm04769; SSE2-NEXT: pandn %xmm6, %xmm44770; SSE2-NEXT: por %xmm0, %xmm44771; SSE2-NEXT: packuswb %xmm9, %xmm44772; SSE2-NEXT: packuswb %xmm4, %xmm44773; SSE2-NEXT: pcmpeqd %xmm5, %xmm34774; SSE2-NEXT: pcmpeqd %xmm5, %xmm24775; SSE2-NEXT: packssdw %xmm3, %xmm24776; SSE2-NEXT: packsswb %xmm2, %xmm24777; SSE2-NEXT: pmovmskb %xmm2, %eax4778; SSE2-NEXT: notl %eax4779; SSE2-NEXT: testb $1, %al4780; SSE2-NEXT: movd %xmm4, %ecx4781; SSE2-NEXT: jne .LBB12_14782; SSE2-NEXT: # %bb.2: # %else4783; SSE2-NEXT: testb $2, %al4784; SSE2-NEXT: jne .LBB12_34785; SSE2-NEXT: .LBB12_4: # %else24786; SSE2-NEXT: testb $4, %al4787; SSE2-NEXT: jne .LBB12_54788; SSE2-NEXT: .LBB12_6: # %else44789; SSE2-NEXT: testb $8, %al4790; SSE2-NEXT: je .LBB12_84791; SSE2-NEXT: .LBB12_7: # %cond.store54792; SSE2-NEXT: shrl $24, %ecx4793; SSE2-NEXT: movb %cl, 3(%rdi)4794; SSE2-NEXT: .LBB12_8: # %else64795; SSE2-NEXT: testb $16, %al4796; SSE2-NEXT: pextrw $2, %xmm4, %ecx4797; SSE2-NEXT: je .LBB12_104798; SSE2-NEXT: # %bb.9: # %cond.store74799; SSE2-NEXT: movb %cl, 4(%rdi)4800; SSE2-NEXT: .LBB12_10: # %else84801; SSE2-NEXT: testb $32, %al4802; SSE2-NEXT: je .LBB12_124803; SSE2-NEXT: # %bb.11: # %cond.store94804; SSE2-NEXT: movb %ch, 5(%rdi)4805; SSE2-NEXT: .LBB12_12: # %else104806; SSE2-NEXT: testb $64, %al4807; SSE2-NEXT: pextrw $3, %xmm4, %ecx4808; SSE2-NEXT: jne .LBB12_134809; SSE2-NEXT: # %bb.14: # %else124810; SSE2-NEXT: testb $-128, %al4811; SSE2-NEXT: jne .LBB12_154812; SSE2-NEXT: .LBB12_16: # %else144813; SSE2-NEXT: retq4814; SSE2-NEXT: .LBB12_1: # %cond.store4815; SSE2-NEXT: movb %cl, (%rdi)4816; SSE2-NEXT: testb $2, %al4817; SSE2-NEXT: je .LBB12_44818; SSE2-NEXT: .LBB12_3: # %cond.store14819; SSE2-NEXT: movb %ch, 1(%rdi)4820; SSE2-NEXT: testb $4, %al4821; SSE2-NEXT: je .LBB12_64822; SSE2-NEXT: .LBB12_5: # %cond.store34823; SSE2-NEXT: movl %ecx, %edx4824; SSE2-NEXT: shrl $16, %edx4825; SSE2-NEXT: movb %dl, 2(%rdi)4826; SSE2-NEXT: testb $8, %al4827; SSE2-NEXT: jne .LBB12_74828; SSE2-NEXT: jmp .LBB12_84829; SSE2-NEXT: .LBB12_13: # %cond.store114830; SSE2-NEXT: movb %cl, 6(%rdi)4831; SSE2-NEXT: testb $-128, %al4832; SSE2-NEXT: je .LBB12_164833; SSE2-NEXT: .LBB12_15: # %cond.store134834; SSE2-NEXT: movb %ch, 7(%rdi)4835; SSE2-NEXT: retq4836;4837; SSE4-LABEL: truncstore_v8i32_v8i8:4838; SSE4: # %bb.0:4839; SSE4-NEXT: pxor %xmm4, %xmm44840; SSE4-NEXT: pmovzxbd {{.*#+}} xmm5 = [255,255,255,255]4841; SSE4-NEXT: pminud %xmm5, %xmm14842; SSE4-NEXT: pminud %xmm5, %xmm04843; SSE4-NEXT: packusdw %xmm1, %xmm04844; SSE4-NEXT: packuswb %xmm0, %xmm04845; SSE4-NEXT: pcmpeqd %xmm4, %xmm34846; SSE4-NEXT: pcmpeqd %xmm4, %xmm24847; SSE4-NEXT: packssdw %xmm3, %xmm24848; SSE4-NEXT: packsswb %xmm2, %xmm24849; SSE4-NEXT: pmovmskb %xmm2, %eax4850; SSE4-NEXT: notl %eax4851; SSE4-NEXT: testb $1, %al4852; SSE4-NEXT: jne .LBB12_14853; SSE4-NEXT: # %bb.2: # %else4854; SSE4-NEXT: testb $2, %al4855; SSE4-NEXT: jne .LBB12_34856; SSE4-NEXT: .LBB12_4: # %else24857; SSE4-NEXT: testb $4, %al4858; SSE4-NEXT: jne .LBB12_54859; SSE4-NEXT: .LBB12_6: # %else44860; SSE4-NEXT: testb $8, %al4861; SSE4-NEXT: jne .LBB12_74862; SSE4-NEXT: .LBB12_8: # %else64863; SSE4-NEXT: testb $16, %al4864; SSE4-NEXT: jne .LBB12_94865; SSE4-NEXT: .LBB12_10: # %else84866; SSE4-NEXT: testb $32, %al4867; SSE4-NEXT: jne .LBB12_114868; SSE4-NEXT: .LBB12_12: # %else104869; SSE4-NEXT: testb $64, %al4870; SSE4-NEXT: jne .LBB12_134871; SSE4-NEXT: .LBB12_14: # %else124872; SSE4-NEXT: testb $-128, %al4873; SSE4-NEXT: jne .LBB12_154874; SSE4-NEXT: .LBB12_16: # %else144875; SSE4-NEXT: retq4876; SSE4-NEXT: .LBB12_1: # %cond.store4877; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)4878; SSE4-NEXT: testb $2, %al4879; SSE4-NEXT: je .LBB12_44880; SSE4-NEXT: .LBB12_3: # %cond.store14881; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)4882; SSE4-NEXT: testb $4, %al4883; SSE4-NEXT: je .LBB12_64884; SSE4-NEXT: .LBB12_5: # %cond.store34885; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)4886; SSE4-NEXT: testb $8, %al4887; SSE4-NEXT: je .LBB12_84888; SSE4-NEXT: .LBB12_7: # %cond.store54889; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)4890; SSE4-NEXT: testb $16, %al4891; SSE4-NEXT: je .LBB12_104892; SSE4-NEXT: .LBB12_9: # %cond.store74893; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)4894; SSE4-NEXT: testb $32, %al4895; SSE4-NEXT: je .LBB12_124896; SSE4-NEXT: .LBB12_11: # %cond.store94897; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)4898; SSE4-NEXT: testb $64, %al4899; SSE4-NEXT: je .LBB12_144900; SSE4-NEXT: .LBB12_13: # %cond.store114901; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)4902; SSE4-NEXT: testb $-128, %al4903; SSE4-NEXT: je .LBB12_164904; SSE4-NEXT: .LBB12_15: # %cond.store134905; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)4906; SSE4-NEXT: retq4907;4908; AVX1-LABEL: truncstore_v8i32_v8i8:4909; AVX1: # %bb.0:4910; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm24911; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [255,255,255,255]4912; AVX1-NEXT: vpminud %xmm3, %xmm2, %xmm24913; AVX1-NEXT: vpminud %xmm3, %xmm0, %xmm04914; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm04915; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm04916; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm24917; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34918; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm24919; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm14920; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm14921; AVX1-NEXT: vmovmskps %ymm1, %eax4922; AVX1-NEXT: notl %eax4923; AVX1-NEXT: testb $1, %al4924; AVX1-NEXT: jne .LBB12_14925; AVX1-NEXT: # %bb.2: # %else4926; AVX1-NEXT: testb $2, %al4927; AVX1-NEXT: jne .LBB12_34928; AVX1-NEXT: .LBB12_4: # %else24929; AVX1-NEXT: testb $4, %al4930; AVX1-NEXT: jne .LBB12_54931; AVX1-NEXT: .LBB12_6: # %else44932; AVX1-NEXT: testb $8, %al4933; AVX1-NEXT: jne .LBB12_74934; AVX1-NEXT: .LBB12_8: # %else64935; AVX1-NEXT: testb $16, %al4936; AVX1-NEXT: jne .LBB12_94937; AVX1-NEXT: .LBB12_10: # %else84938; AVX1-NEXT: testb $32, %al4939; AVX1-NEXT: jne .LBB12_114940; AVX1-NEXT: .LBB12_12: # %else104941; AVX1-NEXT: testb $64, %al4942; AVX1-NEXT: jne .LBB12_134943; AVX1-NEXT: .LBB12_14: # %else124944; AVX1-NEXT: testb $-128, %al4945; AVX1-NEXT: jne .LBB12_154946; AVX1-NEXT: .LBB12_16: # %else144947; AVX1-NEXT: vzeroupper4948; AVX1-NEXT: retq4949; AVX1-NEXT: .LBB12_1: # %cond.store4950; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)4951; AVX1-NEXT: testb $2, %al4952; AVX1-NEXT: je .LBB12_44953; AVX1-NEXT: .LBB12_3: # %cond.store14954; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)4955; AVX1-NEXT: testb $4, %al4956; AVX1-NEXT: je .LBB12_64957; AVX1-NEXT: .LBB12_5: # %cond.store34958; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)4959; AVX1-NEXT: testb $8, %al4960; AVX1-NEXT: je .LBB12_84961; AVX1-NEXT: .LBB12_7: # %cond.store54962; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)4963; AVX1-NEXT: testb $16, %al4964; AVX1-NEXT: je .LBB12_104965; AVX1-NEXT: .LBB12_9: # %cond.store74966; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)4967; AVX1-NEXT: testb $32, %al4968; AVX1-NEXT: je .LBB12_124969; AVX1-NEXT: .LBB12_11: # %cond.store94970; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)4971; AVX1-NEXT: testb $64, %al4972; AVX1-NEXT: je .LBB12_144973; AVX1-NEXT: .LBB12_13: # %cond.store114974; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)4975; AVX1-NEXT: testb $-128, %al4976; AVX1-NEXT: je .LBB12_164977; AVX1-NEXT: .LBB12_15: # %cond.store134978; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)4979; AVX1-NEXT: vzeroupper4980; AVX1-NEXT: retq4981;4982; AVX2-LABEL: truncstore_v8i32_v8i8:4983; AVX2: # %bb.0:4984; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm24985; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255]4986; AVX2-NEXT: vpminud %ymm3, %ymm0, %ymm04987; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm34988; AVX2-NEXT: vpackusdw %xmm3, %xmm0, %xmm04989; AVX2-NEXT: vpackuswb %xmm0, %xmm0, %xmm04990; AVX2-NEXT: vpcmpeqd %ymm2, %ymm1, %ymm14991; AVX2-NEXT: vmovmskps %ymm1, %eax4992; AVX2-NEXT: notl %eax4993; AVX2-NEXT: testb $1, %al4994; AVX2-NEXT: jne .LBB12_14995; AVX2-NEXT: # %bb.2: # %else4996; AVX2-NEXT: testb $2, %al4997; AVX2-NEXT: jne .LBB12_34998; AVX2-NEXT: .LBB12_4: # %else24999; AVX2-NEXT: testb $4, %al5000; AVX2-NEXT: jne .LBB12_55001; AVX2-NEXT: .LBB12_6: # %else45002; AVX2-NEXT: testb $8, %al5003; AVX2-NEXT: jne .LBB12_75004; AVX2-NEXT: .LBB12_8: # %else65005; AVX2-NEXT: testb $16, %al5006; AVX2-NEXT: jne .LBB12_95007; AVX2-NEXT: .LBB12_10: # %else85008; AVX2-NEXT: testb $32, %al5009; AVX2-NEXT: jne .LBB12_115010; AVX2-NEXT: .LBB12_12: # %else105011; AVX2-NEXT: testb $64, %al5012; AVX2-NEXT: jne .LBB12_135013; AVX2-NEXT: .LBB12_14: # %else125014; AVX2-NEXT: testb $-128, %al5015; AVX2-NEXT: jne .LBB12_155016; AVX2-NEXT: .LBB12_16: # %else145017; AVX2-NEXT: vzeroupper5018; AVX2-NEXT: retq5019; AVX2-NEXT: .LBB12_1: # %cond.store5020; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)5021; AVX2-NEXT: testb $2, %al5022; AVX2-NEXT: je .LBB12_45023; AVX2-NEXT: .LBB12_3: # %cond.store15024; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)5025; AVX2-NEXT: testb $4, %al5026; AVX2-NEXT: je .LBB12_65027; AVX2-NEXT: .LBB12_5: # %cond.store35028; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)5029; AVX2-NEXT: testb $8, %al5030; AVX2-NEXT: je .LBB12_85031; AVX2-NEXT: .LBB12_7: # %cond.store55032; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)5033; AVX2-NEXT: testb $16, %al5034; AVX2-NEXT: je .LBB12_105035; AVX2-NEXT: .LBB12_9: # %cond.store75036; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)5037; AVX2-NEXT: testb $32, %al5038; AVX2-NEXT: je .LBB12_125039; AVX2-NEXT: .LBB12_11: # %cond.store95040; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)5041; AVX2-NEXT: testb $64, %al5042; AVX2-NEXT: je .LBB12_145043; AVX2-NEXT: .LBB12_13: # %cond.store115044; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)5045; AVX2-NEXT: testb $-128, %al5046; AVX2-NEXT: je .LBB12_165047; AVX2-NEXT: .LBB12_15: # %cond.store135048; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)5049; AVX2-NEXT: vzeroupper5050; AVX2-NEXT: retq5051;5052; AVX512F-LABEL: truncstore_v8i32_v8i8:5053; AVX512F: # %bb.0:5054; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm15055; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05056; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k05057; AVX512F-NEXT: vpmovusdb %zmm0, %xmm05058; AVX512F-NEXT: kmovw %k0, %eax5059; AVX512F-NEXT: testb $1, %al5060; AVX512F-NEXT: jne .LBB12_15061; AVX512F-NEXT: # %bb.2: # %else5062; AVX512F-NEXT: testb $2, %al5063; AVX512F-NEXT: jne .LBB12_35064; AVX512F-NEXT: .LBB12_4: # %else25065; AVX512F-NEXT: testb $4, %al5066; AVX512F-NEXT: jne .LBB12_55067; AVX512F-NEXT: .LBB12_6: # %else45068; AVX512F-NEXT: testb $8, %al5069; AVX512F-NEXT: jne .LBB12_75070; AVX512F-NEXT: .LBB12_8: # %else65071; AVX512F-NEXT: testb $16, %al5072; AVX512F-NEXT: jne .LBB12_95073; AVX512F-NEXT: .LBB12_10: # %else85074; AVX512F-NEXT: testb $32, %al5075; AVX512F-NEXT: jne .LBB12_115076; AVX512F-NEXT: .LBB12_12: # %else105077; AVX512F-NEXT: testb $64, %al5078; AVX512F-NEXT: jne .LBB12_135079; AVX512F-NEXT: .LBB12_14: # %else125080; AVX512F-NEXT: testb $-128, %al5081; AVX512F-NEXT: jne .LBB12_155082; AVX512F-NEXT: .LBB12_16: # %else145083; AVX512F-NEXT: vzeroupper5084; AVX512F-NEXT: retq5085; AVX512F-NEXT: .LBB12_1: # %cond.store5086; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)5087; AVX512F-NEXT: testb $2, %al5088; AVX512F-NEXT: je .LBB12_45089; AVX512F-NEXT: .LBB12_3: # %cond.store15090; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)5091; AVX512F-NEXT: testb $4, %al5092; AVX512F-NEXT: je .LBB12_65093; AVX512F-NEXT: .LBB12_5: # %cond.store35094; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)5095; AVX512F-NEXT: testb $8, %al5096; AVX512F-NEXT: je .LBB12_85097; AVX512F-NEXT: .LBB12_7: # %cond.store55098; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)5099; AVX512F-NEXT: testb $16, %al5100; AVX512F-NEXT: je .LBB12_105101; AVX512F-NEXT: .LBB12_9: # %cond.store75102; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)5103; AVX512F-NEXT: testb $32, %al5104; AVX512F-NEXT: je .LBB12_125105; AVX512F-NEXT: .LBB12_11: # %cond.store95106; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)5107; AVX512F-NEXT: testb $64, %al5108; AVX512F-NEXT: je .LBB12_145109; AVX512F-NEXT: .LBB12_13: # %cond.store115110; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)5111; AVX512F-NEXT: testb $-128, %al5112; AVX512F-NEXT: je .LBB12_165113; AVX512F-NEXT: .LBB12_15: # %cond.store135114; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)5115; AVX512F-NEXT: vzeroupper5116; AVX512F-NEXT: retq5117;5118; AVX512FVL-LABEL: truncstore_v8i32_v8i8:5119; AVX512FVL: # %bb.0:5120; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k05121; AVX512FVL-NEXT: vpmovusdb %ymm0, %xmm05122; AVX512FVL-NEXT: kmovw %k0, %eax5123; AVX512FVL-NEXT: testb $1, %al5124; AVX512FVL-NEXT: jne .LBB12_15125; AVX512FVL-NEXT: # %bb.2: # %else5126; AVX512FVL-NEXT: testb $2, %al5127; AVX512FVL-NEXT: jne .LBB12_35128; AVX512FVL-NEXT: .LBB12_4: # %else25129; AVX512FVL-NEXT: testb $4, %al5130; AVX512FVL-NEXT: jne .LBB12_55131; AVX512FVL-NEXT: .LBB12_6: # %else45132; AVX512FVL-NEXT: testb $8, %al5133; AVX512FVL-NEXT: jne .LBB12_75134; AVX512FVL-NEXT: .LBB12_8: # %else65135; AVX512FVL-NEXT: testb $16, %al5136; AVX512FVL-NEXT: jne .LBB12_95137; AVX512FVL-NEXT: .LBB12_10: # %else85138; AVX512FVL-NEXT: testb $32, %al5139; AVX512FVL-NEXT: jne .LBB12_115140; AVX512FVL-NEXT: .LBB12_12: # %else105141; AVX512FVL-NEXT: testb $64, %al5142; AVX512FVL-NEXT: jne .LBB12_135143; AVX512FVL-NEXT: .LBB12_14: # %else125144; AVX512FVL-NEXT: testb $-128, %al5145; AVX512FVL-NEXT: jne .LBB12_155146; AVX512FVL-NEXT: .LBB12_16: # %else145147; AVX512FVL-NEXT: vzeroupper5148; AVX512FVL-NEXT: retq5149; AVX512FVL-NEXT: .LBB12_1: # %cond.store5150; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)5151; AVX512FVL-NEXT: testb $2, %al5152; AVX512FVL-NEXT: je .LBB12_45153; AVX512FVL-NEXT: .LBB12_3: # %cond.store15154; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)5155; AVX512FVL-NEXT: testb $4, %al5156; AVX512FVL-NEXT: je .LBB12_65157; AVX512FVL-NEXT: .LBB12_5: # %cond.store35158; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)5159; AVX512FVL-NEXT: testb $8, %al5160; AVX512FVL-NEXT: je .LBB12_85161; AVX512FVL-NEXT: .LBB12_7: # %cond.store55162; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)5163; AVX512FVL-NEXT: testb $16, %al5164; AVX512FVL-NEXT: je .LBB12_105165; AVX512FVL-NEXT: .LBB12_9: # %cond.store75166; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)5167; AVX512FVL-NEXT: testb $32, %al5168; AVX512FVL-NEXT: je .LBB12_125169; AVX512FVL-NEXT: .LBB12_11: # %cond.store95170; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)5171; AVX512FVL-NEXT: testb $64, %al5172; AVX512FVL-NEXT: je .LBB12_145173; AVX512FVL-NEXT: .LBB12_13: # %cond.store115174; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)5175; AVX512FVL-NEXT: testb $-128, %al5176; AVX512FVL-NEXT: je .LBB12_165177; AVX512FVL-NEXT: .LBB12_15: # %cond.store135178; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)5179; AVX512FVL-NEXT: vzeroupper5180; AVX512FVL-NEXT: retq5181;5182; AVX512BW-LABEL: truncstore_v8i32_v8i8:5183; AVX512BW: # %bb.0:5184; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm15185; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05186; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k05187; AVX512BW-NEXT: kshiftlq $56, %k0, %k05188; AVX512BW-NEXT: kshiftrq $56, %k0, %k15189; AVX512BW-NEXT: vpmovusdb %zmm0, %xmm05190; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}5191; AVX512BW-NEXT: vzeroupper5192; AVX512BW-NEXT: retq5193;5194; AVX512BWVL-LABEL: truncstore_v8i32_v8i8:5195; AVX512BWVL: # %bb.0:5196; AVX512BWVL-NEXT: vptestmd %ymm1, %ymm1, %k15197; AVX512BWVL-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm05198; AVX512BWVL-NEXT: vpmovdb %ymm0, (%rdi) {%k1}5199; AVX512BWVL-NEXT: vzeroupper5200; AVX512BWVL-NEXT: retq5201 %a = icmp ne <8 x i32> %mask, zeroinitializer5202 %b = icmp ult <8 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>5203 %c = select <8 x i1> %b, <8 x i32> %x, <8 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>5204 %d = trunc <8 x i32> %c to <8 x i8>5205 call void @llvm.masked.store.v8i8.p0(<8 x i8> %d, ptr %p, i32 1, <8 x i1> %a)5206 ret void5207}5208 5209define void @truncstore_v4i32_v4i16(<4 x i32> %x, ptr %p, <4 x i32> %mask) {5210; SSE2-LABEL: truncstore_v4i32_v4i16:5211; SSE2: # %bb.0:5212; SSE2-NEXT: pxor %xmm2, %xmm25213; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]5214; SSE2-NEXT: pxor %xmm0, %xmm35215; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm35216; SSE2-NEXT: movdqa %xmm3, %xmm45217; SSE2-NEXT: pandn %xmm0, %xmm45218; SSE2-NEXT: psrld $16, %xmm35219; SSE2-NEXT: por %xmm4, %xmm35220; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm3[0,2,2,3,4,5,6,7]5221; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]5222; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]5223; SSE2-NEXT: pcmpeqd %xmm1, %xmm25224; SSE2-NEXT: movmskps %xmm2, %eax5225; SSE2-NEXT: xorl $15, %eax5226; SSE2-NEXT: testb $1, %al5227; SSE2-NEXT: jne .LBB13_15228; SSE2-NEXT: # %bb.2: # %else5229; SSE2-NEXT: testb $2, %al5230; SSE2-NEXT: jne .LBB13_35231; SSE2-NEXT: .LBB13_4: # %else25232; SSE2-NEXT: testb $4, %al5233; SSE2-NEXT: jne .LBB13_55234; SSE2-NEXT: .LBB13_6: # %else45235; SSE2-NEXT: testb $8, %al5236; SSE2-NEXT: jne .LBB13_75237; SSE2-NEXT: .LBB13_8: # %else65238; SSE2-NEXT: retq5239; SSE2-NEXT: .LBB13_1: # %cond.store5240; SSE2-NEXT: movd %xmm0, %ecx5241; SSE2-NEXT: movw %cx, (%rdi)5242; SSE2-NEXT: testb $2, %al5243; SSE2-NEXT: je .LBB13_45244; SSE2-NEXT: .LBB13_3: # %cond.store15245; SSE2-NEXT: pextrw $1, %xmm0, %ecx5246; SSE2-NEXT: movw %cx, 2(%rdi)5247; SSE2-NEXT: testb $4, %al5248; SSE2-NEXT: je .LBB13_65249; SSE2-NEXT: .LBB13_5: # %cond.store35250; SSE2-NEXT: pextrw $2, %xmm0, %ecx5251; SSE2-NEXT: movw %cx, 4(%rdi)5252; SSE2-NEXT: testb $8, %al5253; SSE2-NEXT: je .LBB13_85254; SSE2-NEXT: .LBB13_7: # %cond.store55255; SSE2-NEXT: pextrw $3, %xmm0, %eax5256; SSE2-NEXT: movw %ax, 6(%rdi)5257; SSE2-NEXT: retq5258;5259; SSE4-LABEL: truncstore_v4i32_v4i16:5260; SSE4: # %bb.0:5261; SSE4-NEXT: pxor %xmm2, %xmm25262; SSE4-NEXT: pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm05263; SSE4-NEXT: packusdw %xmm0, %xmm05264; SSE4-NEXT: pcmpeqd %xmm1, %xmm25265; SSE4-NEXT: movmskps %xmm2, %eax5266; SSE4-NEXT: xorl $15, %eax5267; SSE4-NEXT: testb $1, %al5268; SSE4-NEXT: jne .LBB13_15269; SSE4-NEXT: # %bb.2: # %else5270; SSE4-NEXT: testb $2, %al5271; SSE4-NEXT: jne .LBB13_35272; SSE4-NEXT: .LBB13_4: # %else25273; SSE4-NEXT: testb $4, %al5274; SSE4-NEXT: jne .LBB13_55275; SSE4-NEXT: .LBB13_6: # %else45276; SSE4-NEXT: testb $8, %al5277; SSE4-NEXT: jne .LBB13_75278; SSE4-NEXT: .LBB13_8: # %else65279; SSE4-NEXT: retq5280; SSE4-NEXT: .LBB13_1: # %cond.store5281; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)5282; SSE4-NEXT: testb $2, %al5283; SSE4-NEXT: je .LBB13_45284; SSE4-NEXT: .LBB13_3: # %cond.store15285; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)5286; SSE4-NEXT: testb $4, %al5287; SSE4-NEXT: je .LBB13_65288; SSE4-NEXT: .LBB13_5: # %cond.store35289; SSE4-NEXT: pextrw $2, %xmm0, 4(%rdi)5290; SSE4-NEXT: testb $8, %al5291; SSE4-NEXT: je .LBB13_85292; SSE4-NEXT: .LBB13_7: # %cond.store55293; SSE4-NEXT: pextrw $3, %xmm0, 6(%rdi)5294; SSE4-NEXT: retq5295;5296; AVX1-LABEL: truncstore_v4i32_v4i16:5297; AVX1: # %bb.0:5298; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm25299; AVX1-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm05300; AVX1-NEXT: vpackusdw %xmm0, %xmm0, %xmm05301; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm15302; AVX1-NEXT: vmovmskps %xmm1, %eax5303; AVX1-NEXT: xorl $15, %eax5304; AVX1-NEXT: testb $1, %al5305; AVX1-NEXT: jne .LBB13_15306; AVX1-NEXT: # %bb.2: # %else5307; AVX1-NEXT: testb $2, %al5308; AVX1-NEXT: jne .LBB13_35309; AVX1-NEXT: .LBB13_4: # %else25310; AVX1-NEXT: testb $4, %al5311; AVX1-NEXT: jne .LBB13_55312; AVX1-NEXT: .LBB13_6: # %else45313; AVX1-NEXT: testb $8, %al5314; AVX1-NEXT: jne .LBB13_75315; AVX1-NEXT: .LBB13_8: # %else65316; AVX1-NEXT: retq5317; AVX1-NEXT: .LBB13_1: # %cond.store5318; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)5319; AVX1-NEXT: testb $2, %al5320; AVX1-NEXT: je .LBB13_45321; AVX1-NEXT: .LBB13_3: # %cond.store15322; AVX1-NEXT: vpextrw $1, %xmm0, 2(%rdi)5323; AVX1-NEXT: testb $4, %al5324; AVX1-NEXT: je .LBB13_65325; AVX1-NEXT: .LBB13_5: # %cond.store35326; AVX1-NEXT: vpextrw $2, %xmm0, 4(%rdi)5327; AVX1-NEXT: testb $8, %al5328; AVX1-NEXT: je .LBB13_85329; AVX1-NEXT: .LBB13_7: # %cond.store55330; AVX1-NEXT: vpextrw $3, %xmm0, 6(%rdi)5331; AVX1-NEXT: retq5332;5333; AVX2-LABEL: truncstore_v4i32_v4i16:5334; AVX2: # %bb.0:5335; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm25336; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm3 = [65535,65535,65535,65535]5337; AVX2-NEXT: vpminud %xmm3, %xmm0, %xmm05338; AVX2-NEXT: vpackusdw %xmm0, %xmm0, %xmm05339; AVX2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm15340; AVX2-NEXT: vmovmskps %xmm1, %eax5341; AVX2-NEXT: xorl $15, %eax5342; AVX2-NEXT: testb $1, %al5343; AVX2-NEXT: jne .LBB13_15344; AVX2-NEXT: # %bb.2: # %else5345; AVX2-NEXT: testb $2, %al5346; AVX2-NEXT: jne .LBB13_35347; AVX2-NEXT: .LBB13_4: # %else25348; AVX2-NEXT: testb $4, %al5349; AVX2-NEXT: jne .LBB13_55350; AVX2-NEXT: .LBB13_6: # %else45351; AVX2-NEXT: testb $8, %al5352; AVX2-NEXT: jne .LBB13_75353; AVX2-NEXT: .LBB13_8: # %else65354; AVX2-NEXT: retq5355; AVX2-NEXT: .LBB13_1: # %cond.store5356; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)5357; AVX2-NEXT: testb $2, %al5358; AVX2-NEXT: je .LBB13_45359; AVX2-NEXT: .LBB13_3: # %cond.store15360; AVX2-NEXT: vpextrw $1, %xmm0, 2(%rdi)5361; AVX2-NEXT: testb $4, %al5362; AVX2-NEXT: je .LBB13_65363; AVX2-NEXT: .LBB13_5: # %cond.store35364; AVX2-NEXT: vpextrw $2, %xmm0, 4(%rdi)5365; AVX2-NEXT: testb $8, %al5366; AVX2-NEXT: je .LBB13_85367; AVX2-NEXT: .LBB13_7: # %cond.store55368; AVX2-NEXT: vpextrw $3, %xmm0, 6(%rdi)5369; AVX2-NEXT: retq5370;5371; AVX512F-LABEL: truncstore_v4i32_v4i16:5372; AVX512F: # %bb.0:5373; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm15374; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm05375; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k05376; AVX512F-NEXT: vpmovusdw %zmm0, %ymm05377; AVX512F-NEXT: kmovw %k0, %eax5378; AVX512F-NEXT: testb $1, %al5379; AVX512F-NEXT: jne .LBB13_15380; AVX512F-NEXT: # %bb.2: # %else5381; AVX512F-NEXT: testb $2, %al5382; AVX512F-NEXT: jne .LBB13_35383; AVX512F-NEXT: .LBB13_4: # %else25384; AVX512F-NEXT: testb $4, %al5385; AVX512F-NEXT: jne .LBB13_55386; AVX512F-NEXT: .LBB13_6: # %else45387; AVX512F-NEXT: testb $8, %al5388; AVX512F-NEXT: jne .LBB13_75389; AVX512F-NEXT: .LBB13_8: # %else65390; AVX512F-NEXT: vzeroupper5391; AVX512F-NEXT: retq5392; AVX512F-NEXT: .LBB13_1: # %cond.store5393; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)5394; AVX512F-NEXT: testb $2, %al5395; AVX512F-NEXT: je .LBB13_45396; AVX512F-NEXT: .LBB13_3: # %cond.store15397; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)5398; AVX512F-NEXT: testb $4, %al5399; AVX512F-NEXT: je .LBB13_65400; AVX512F-NEXT: .LBB13_5: # %cond.store35401; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)5402; AVX512F-NEXT: testb $8, %al5403; AVX512F-NEXT: je .LBB13_85404; AVX512F-NEXT: .LBB13_7: # %cond.store55405; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)5406; AVX512F-NEXT: vzeroupper5407; AVX512F-NEXT: retq5408;5409; AVX512FVL-LABEL: truncstore_v4i32_v4i16:5410; AVX512FVL: # %bb.0:5411; AVX512FVL-NEXT: vptestmd %xmm1, %xmm1, %k05412; AVX512FVL-NEXT: vpmovusdw %xmm0, %xmm05413; AVX512FVL-NEXT: kmovw %k0, %eax5414; AVX512FVL-NEXT: testb $1, %al5415; AVX512FVL-NEXT: jne .LBB13_15416; AVX512FVL-NEXT: # %bb.2: # %else5417; AVX512FVL-NEXT: testb $2, %al5418; AVX512FVL-NEXT: jne .LBB13_35419; AVX512FVL-NEXT: .LBB13_4: # %else25420; AVX512FVL-NEXT: testb $4, %al5421; AVX512FVL-NEXT: jne .LBB13_55422; AVX512FVL-NEXT: .LBB13_6: # %else45423; AVX512FVL-NEXT: testb $8, %al5424; AVX512FVL-NEXT: jne .LBB13_75425; AVX512FVL-NEXT: .LBB13_8: # %else65426; AVX512FVL-NEXT: retq5427; AVX512FVL-NEXT: .LBB13_1: # %cond.store5428; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)5429; AVX512FVL-NEXT: testb $2, %al5430; AVX512FVL-NEXT: je .LBB13_45431; AVX512FVL-NEXT: .LBB13_3: # %cond.store15432; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)5433; AVX512FVL-NEXT: testb $4, %al5434; AVX512FVL-NEXT: je .LBB13_65435; AVX512FVL-NEXT: .LBB13_5: # %cond.store35436; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)5437; AVX512FVL-NEXT: testb $8, %al5438; AVX512FVL-NEXT: je .LBB13_85439; AVX512FVL-NEXT: .LBB13_7: # %cond.store55440; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)5441; AVX512FVL-NEXT: retq5442;5443; AVX512BW-LABEL: truncstore_v4i32_v4i16:5444; AVX512BW: # %bb.0:5445; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm15446; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm05447; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k05448; AVX512BW-NEXT: kshiftld $28, %k0, %k05449; AVX512BW-NEXT: kshiftrd $28, %k0, %k15450; AVX512BW-NEXT: vpmovusdw %zmm0, %ymm05451; AVX512BW-NEXT: vmovdqu16 %zmm0, (%rdi) {%k1}5452; AVX512BW-NEXT: vzeroupper5453; AVX512BW-NEXT: retq5454;5455; AVX512BWVL-LABEL: truncstore_v4i32_v4i16:5456; AVX512BWVL: # %bb.0:5457; AVX512BWVL-NEXT: vptestmd %xmm1, %xmm1, %k15458; AVX512BWVL-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm05459; AVX512BWVL-NEXT: vpmovdw %xmm0, (%rdi) {%k1}5460; AVX512BWVL-NEXT: retq5461 %a = icmp ne <4 x i32> %mask, zeroinitializer5462 %b = icmp ult <4 x i32> %x, <i32 65535, i32 65535, i32 65535, i32 65535>5463 %c = select <4 x i1> %b, <4 x i32> %x, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>5464 %d = trunc <4 x i32> %c to <4 x i16>5465 call void @llvm.masked.store.v4i16.p0(<4 x i16> %d, ptr %p, i32 1, <4 x i1> %a)5466 ret void5467}5468 5469define void @truncstore_v4i32_v4i8(<4 x i32> %x, ptr %p, <4 x i32> %mask) {5470; SSE2-LABEL: truncstore_v4i32_v4i8:5471; SSE2: # %bb.0:5472; SSE2-NEXT: pxor %xmm2, %xmm25473; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]5474; SSE2-NEXT: pxor %xmm0, %xmm35475; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm35476; SSE2-NEXT: movdqa %xmm3, %xmm45477; SSE2-NEXT: pandn %xmm0, %xmm45478; SSE2-NEXT: psrld $24, %xmm35479; SSE2-NEXT: por %xmm4, %xmm35480; SSE2-NEXT: packuswb %xmm3, %xmm35481; SSE2-NEXT: packuswb %xmm3, %xmm35482; SSE2-NEXT: pcmpeqd %xmm1, %xmm25483; SSE2-NEXT: movmskps %xmm2, %ecx5484; SSE2-NEXT: xorl $15, %ecx5485; SSE2-NEXT: testb $1, %cl5486; SSE2-NEXT: movd %xmm3, %eax5487; SSE2-NEXT: jne .LBB14_15488; SSE2-NEXT: # %bb.2: # %else5489; SSE2-NEXT: testb $2, %cl5490; SSE2-NEXT: jne .LBB14_35491; SSE2-NEXT: .LBB14_4: # %else25492; SSE2-NEXT: testb $4, %cl5493; SSE2-NEXT: jne .LBB14_55494; SSE2-NEXT: .LBB14_6: # %else45495; SSE2-NEXT: testb $8, %cl5496; SSE2-NEXT: jne .LBB14_75497; SSE2-NEXT: .LBB14_8: # %else65498; SSE2-NEXT: retq5499; SSE2-NEXT: .LBB14_1: # %cond.store5500; SSE2-NEXT: movb %al, (%rdi)5501; SSE2-NEXT: testb $2, %cl5502; SSE2-NEXT: je .LBB14_45503; SSE2-NEXT: .LBB14_3: # %cond.store15504; SSE2-NEXT: movb %ah, 1(%rdi)5505; SSE2-NEXT: testb $4, %cl5506; SSE2-NEXT: je .LBB14_65507; SSE2-NEXT: .LBB14_5: # %cond.store35508; SSE2-NEXT: movl %eax, %edx5509; SSE2-NEXT: shrl $16, %edx5510; SSE2-NEXT: movb %dl, 2(%rdi)5511; SSE2-NEXT: testb $8, %cl5512; SSE2-NEXT: je .LBB14_85513; SSE2-NEXT: .LBB14_7: # %cond.store55514; SSE2-NEXT: shrl $24, %eax5515; SSE2-NEXT: movb %al, 3(%rdi)5516; SSE2-NEXT: retq5517;5518; SSE4-LABEL: truncstore_v4i32_v4i8:5519; SSE4: # %bb.0:5520; SSE4-NEXT: pxor %xmm2, %xmm25521; SSE4-NEXT: pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm05522; SSE4-NEXT: packusdw %xmm0, %xmm05523; SSE4-NEXT: packuswb %xmm0, %xmm05524; SSE4-NEXT: pcmpeqd %xmm1, %xmm25525; SSE4-NEXT: movmskps %xmm2, %eax5526; SSE4-NEXT: xorl $15, %eax5527; SSE4-NEXT: testb $1, %al5528; SSE4-NEXT: jne .LBB14_15529; SSE4-NEXT: # %bb.2: # %else5530; SSE4-NEXT: testb $2, %al5531; SSE4-NEXT: jne .LBB14_35532; SSE4-NEXT: .LBB14_4: # %else25533; SSE4-NEXT: testb $4, %al5534; SSE4-NEXT: jne .LBB14_55535; SSE4-NEXT: .LBB14_6: # %else45536; SSE4-NEXT: testb $8, %al5537; SSE4-NEXT: jne .LBB14_75538; SSE4-NEXT: .LBB14_8: # %else65539; SSE4-NEXT: retq5540; SSE4-NEXT: .LBB14_1: # %cond.store5541; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)5542; SSE4-NEXT: testb $2, %al5543; SSE4-NEXT: je .LBB14_45544; SSE4-NEXT: .LBB14_3: # %cond.store15545; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)5546; SSE4-NEXT: testb $4, %al5547; SSE4-NEXT: je .LBB14_65548; SSE4-NEXT: .LBB14_5: # %cond.store35549; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)5550; SSE4-NEXT: testb $8, %al5551; SSE4-NEXT: je .LBB14_85552; SSE4-NEXT: .LBB14_7: # %cond.store55553; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)5554; SSE4-NEXT: retq5555;5556; AVX1-LABEL: truncstore_v4i32_v4i8:5557; AVX1: # %bb.0:5558; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm25559; AVX1-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm05560; AVX1-NEXT: vpackusdw %xmm0, %xmm0, %xmm05561; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm05562; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm15563; AVX1-NEXT: vmovmskps %xmm1, %eax5564; AVX1-NEXT: xorl $15, %eax5565; AVX1-NEXT: testb $1, %al5566; AVX1-NEXT: jne .LBB14_15567; AVX1-NEXT: # %bb.2: # %else5568; AVX1-NEXT: testb $2, %al5569; AVX1-NEXT: jne .LBB14_35570; AVX1-NEXT: .LBB14_4: # %else25571; AVX1-NEXT: testb $4, %al5572; AVX1-NEXT: jne .LBB14_55573; AVX1-NEXT: .LBB14_6: # %else45574; AVX1-NEXT: testb $8, %al5575; AVX1-NEXT: jne .LBB14_75576; AVX1-NEXT: .LBB14_8: # %else65577; AVX1-NEXT: retq5578; AVX1-NEXT: .LBB14_1: # %cond.store5579; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)5580; AVX1-NEXT: testb $2, %al5581; AVX1-NEXT: je .LBB14_45582; AVX1-NEXT: .LBB14_3: # %cond.store15583; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)5584; AVX1-NEXT: testb $4, %al5585; AVX1-NEXT: je .LBB14_65586; AVX1-NEXT: .LBB14_5: # %cond.store35587; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)5588; AVX1-NEXT: testb $8, %al5589; AVX1-NEXT: je .LBB14_85590; AVX1-NEXT: .LBB14_7: # %cond.store55591; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)5592; AVX1-NEXT: retq5593;5594; AVX2-LABEL: truncstore_v4i32_v4i8:5595; AVX2: # %bb.0:5596; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm25597; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm3 = [255,255,255,255]5598; AVX2-NEXT: vpminud %xmm3, %xmm0, %xmm05599; AVX2-NEXT: vpackusdw %xmm0, %xmm0, %xmm05600; AVX2-NEXT: vpackuswb %xmm0, %xmm0, %xmm05601; AVX2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm15602; AVX2-NEXT: vmovmskps %xmm1, %eax5603; AVX2-NEXT: xorl $15, %eax5604; AVX2-NEXT: testb $1, %al5605; AVX2-NEXT: jne .LBB14_15606; AVX2-NEXT: # %bb.2: # %else5607; AVX2-NEXT: testb $2, %al5608; AVX2-NEXT: jne .LBB14_35609; AVX2-NEXT: .LBB14_4: # %else25610; AVX2-NEXT: testb $4, %al5611; AVX2-NEXT: jne .LBB14_55612; AVX2-NEXT: .LBB14_6: # %else45613; AVX2-NEXT: testb $8, %al5614; AVX2-NEXT: jne .LBB14_75615; AVX2-NEXT: .LBB14_8: # %else65616; AVX2-NEXT: retq5617; AVX2-NEXT: .LBB14_1: # %cond.store5618; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)5619; AVX2-NEXT: testb $2, %al5620; AVX2-NEXT: je .LBB14_45621; AVX2-NEXT: .LBB14_3: # %cond.store15622; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)5623; AVX2-NEXT: testb $4, %al5624; AVX2-NEXT: je .LBB14_65625; AVX2-NEXT: .LBB14_5: # %cond.store35626; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)5627; AVX2-NEXT: testb $8, %al5628; AVX2-NEXT: je .LBB14_85629; AVX2-NEXT: .LBB14_7: # %cond.store55630; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)5631; AVX2-NEXT: retq5632;5633; AVX512F-LABEL: truncstore_v4i32_v4i8:5634; AVX512F: # %bb.0:5635; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm15636; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm05637; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k05638; AVX512F-NEXT: vpmovusdb %zmm0, %xmm05639; AVX512F-NEXT: kmovw %k0, %eax5640; AVX512F-NEXT: testb $1, %al5641; AVX512F-NEXT: jne .LBB14_15642; AVX512F-NEXT: # %bb.2: # %else5643; AVX512F-NEXT: testb $2, %al5644; AVX512F-NEXT: jne .LBB14_35645; AVX512F-NEXT: .LBB14_4: # %else25646; AVX512F-NEXT: testb $4, %al5647; AVX512F-NEXT: jne .LBB14_55648; AVX512F-NEXT: .LBB14_6: # %else45649; AVX512F-NEXT: testb $8, %al5650; AVX512F-NEXT: jne .LBB14_75651; AVX512F-NEXT: .LBB14_8: # %else65652; AVX512F-NEXT: vzeroupper5653; AVX512F-NEXT: retq5654; AVX512F-NEXT: .LBB14_1: # %cond.store5655; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)5656; AVX512F-NEXT: testb $2, %al5657; AVX512F-NEXT: je .LBB14_45658; AVX512F-NEXT: .LBB14_3: # %cond.store15659; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)5660; AVX512F-NEXT: testb $4, %al5661; AVX512F-NEXT: je .LBB14_65662; AVX512F-NEXT: .LBB14_5: # %cond.store35663; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)5664; AVX512F-NEXT: testb $8, %al5665; AVX512F-NEXT: je .LBB14_85666; AVX512F-NEXT: .LBB14_7: # %cond.store55667; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)5668; AVX512F-NEXT: vzeroupper5669; AVX512F-NEXT: retq5670;5671; AVX512FVL-LABEL: truncstore_v4i32_v4i8:5672; AVX512FVL: # %bb.0:5673; AVX512FVL-NEXT: vptestmd %xmm1, %xmm1, %k05674; AVX512FVL-NEXT: vpmovusdb %xmm0, %xmm05675; AVX512FVL-NEXT: kmovw %k0, %eax5676; AVX512FVL-NEXT: testb $1, %al5677; AVX512FVL-NEXT: jne .LBB14_15678; AVX512FVL-NEXT: # %bb.2: # %else5679; AVX512FVL-NEXT: testb $2, %al5680; AVX512FVL-NEXT: jne .LBB14_35681; AVX512FVL-NEXT: .LBB14_4: # %else25682; AVX512FVL-NEXT: testb $4, %al5683; AVX512FVL-NEXT: jne .LBB14_55684; AVX512FVL-NEXT: .LBB14_6: # %else45685; AVX512FVL-NEXT: testb $8, %al5686; AVX512FVL-NEXT: jne .LBB14_75687; AVX512FVL-NEXT: .LBB14_8: # %else65688; AVX512FVL-NEXT: retq5689; AVX512FVL-NEXT: .LBB14_1: # %cond.store5690; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)5691; AVX512FVL-NEXT: testb $2, %al5692; AVX512FVL-NEXT: je .LBB14_45693; AVX512FVL-NEXT: .LBB14_3: # %cond.store15694; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)5695; AVX512FVL-NEXT: testb $4, %al5696; AVX512FVL-NEXT: je .LBB14_65697; AVX512FVL-NEXT: .LBB14_5: # %cond.store35698; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)5699; AVX512FVL-NEXT: testb $8, %al5700; AVX512FVL-NEXT: je .LBB14_85701; AVX512FVL-NEXT: .LBB14_7: # %cond.store55702; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)5703; AVX512FVL-NEXT: retq5704;5705; AVX512BW-LABEL: truncstore_v4i32_v4i8:5706; AVX512BW: # %bb.0:5707; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm15708; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm05709; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k05710; AVX512BW-NEXT: kshiftlq $60, %k0, %k05711; AVX512BW-NEXT: kshiftrq $60, %k0, %k15712; AVX512BW-NEXT: vpmovusdb %zmm0, %xmm05713; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}5714; AVX512BW-NEXT: vzeroupper5715; AVX512BW-NEXT: retq5716;5717; AVX512BWVL-LABEL: truncstore_v4i32_v4i8:5718; AVX512BWVL: # %bb.0:5719; AVX512BWVL-NEXT: vptestmd %xmm1, %xmm1, %k15720; AVX512BWVL-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm05721; AVX512BWVL-NEXT: vpmovdb %xmm0, (%rdi) {%k1}5722; AVX512BWVL-NEXT: retq5723 %a = icmp ne <4 x i32> %mask, zeroinitializer5724 %b = icmp ult <4 x i32> %x, <i32 255, i32 255, i32 255, i32 255>5725 %c = select <4 x i1> %b, <4 x i32> %x, <4 x i32> <i32 255, i32 255, i32 255, i32 255>5726 %d = trunc <4 x i32> %c to <4 x i8>5727 call void @llvm.masked.store.v4i8.p0(<4 x i8> %d, ptr %p, i32 1, <4 x i1> %a)5728 ret void5729}5730 5731define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {5732; SSE2-LABEL: truncstore_v32i16_v32i8:5733; SSE2: # %bb.0:5734; SSE2-NEXT: pxor %xmm7, %xmm75735; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255]5736; SSE2-NEXT: movdqa %xmm1, %xmm85737; SSE2-NEXT: psubusw %xmm6, %xmm85738; SSE2-NEXT: psubw %xmm8, %xmm15739; SSE2-NEXT: movdqa %xmm0, %xmm85740; SSE2-NEXT: psubusw %xmm6, %xmm85741; SSE2-NEXT: psubw %xmm8, %xmm05742; SSE2-NEXT: packuswb %xmm1, %xmm05743; SSE2-NEXT: pcmpeqb %xmm7, %xmm45744; SSE2-NEXT: pmovmskb %xmm4, %ecx5745; SSE2-NEXT: xorl $65535, %ecx # imm = 0xFFFF5746; SSE2-NEXT: pcmpeqb %xmm7, %xmm55747; SSE2-NEXT: pmovmskb %xmm5, %eax5748; SSE2-NEXT: notl %eax5749; SSE2-NEXT: shll $16, %eax5750; SSE2-NEXT: orl %ecx, %eax5751; SSE2-NEXT: testb $1, %al5752; SSE2-NEXT: movd %xmm0, %ecx5753; SSE2-NEXT: jne .LBB15_15754; SSE2-NEXT: # %bb.2: # %else5755; SSE2-NEXT: testb $2, %al5756; SSE2-NEXT: jne .LBB15_35757; SSE2-NEXT: .LBB15_4: # %else25758; SSE2-NEXT: testb $4, %al5759; SSE2-NEXT: jne .LBB15_55760; SSE2-NEXT: .LBB15_6: # %else45761; SSE2-NEXT: testb $8, %al5762; SSE2-NEXT: je .LBB15_85763; SSE2-NEXT: .LBB15_7: # %cond.store55764; SSE2-NEXT: shrl $24, %ecx5765; SSE2-NEXT: movb %cl, 3(%rdi)5766; SSE2-NEXT: .LBB15_8: # %else65767; SSE2-NEXT: testb $16, %al5768; SSE2-NEXT: pextrw $2, %xmm0, %ecx5769; SSE2-NEXT: je .LBB15_105770; SSE2-NEXT: # %bb.9: # %cond.store75771; SSE2-NEXT: movb %cl, 4(%rdi)5772; SSE2-NEXT: .LBB15_10: # %else85773; SSE2-NEXT: testb $32, %al5774; SSE2-NEXT: je .LBB15_125775; SSE2-NEXT: # %bb.11: # %cond.store95776; SSE2-NEXT: movb %ch, 5(%rdi)5777; SSE2-NEXT: .LBB15_12: # %else105778; SSE2-NEXT: testb $64, %al5779; SSE2-NEXT: pextrw $3, %xmm0, %ecx5780; SSE2-NEXT: je .LBB15_145781; SSE2-NEXT: # %bb.13: # %cond.store115782; SSE2-NEXT: movb %cl, 6(%rdi)5783; SSE2-NEXT: .LBB15_14: # %else125784; SSE2-NEXT: testb %al, %al5785; SSE2-NEXT: jns .LBB15_165786; SSE2-NEXT: # %bb.15: # %cond.store135787; SSE2-NEXT: movb %ch, 7(%rdi)5788; SSE2-NEXT: .LBB15_16: # %else145789; SSE2-NEXT: testl $256, %eax # imm = 0x1005790; SSE2-NEXT: pextrw $4, %xmm0, %ecx5791; SSE2-NEXT: je .LBB15_185792; SSE2-NEXT: # %bb.17: # %cond.store155793; SSE2-NEXT: movb %cl, 8(%rdi)5794; SSE2-NEXT: .LBB15_18: # %else165795; SSE2-NEXT: testl $512, %eax # imm = 0x2005796; SSE2-NEXT: je .LBB15_205797; SSE2-NEXT: # %bb.19: # %cond.store175798; SSE2-NEXT: movb %ch, 9(%rdi)5799; SSE2-NEXT: .LBB15_20: # %else185800; SSE2-NEXT: testl $1024, %eax # imm = 0x4005801; SSE2-NEXT: pextrw $5, %xmm0, %ecx5802; SSE2-NEXT: je .LBB15_225803; SSE2-NEXT: # %bb.21: # %cond.store195804; SSE2-NEXT: movb %cl, 10(%rdi)5805; SSE2-NEXT: .LBB15_22: # %else205806; SSE2-NEXT: testl $2048, %eax # imm = 0x8005807; SSE2-NEXT: je .LBB15_245808; SSE2-NEXT: # %bb.23: # %cond.store215809; SSE2-NEXT: movb %ch, 11(%rdi)5810; SSE2-NEXT: .LBB15_24: # %else225811; SSE2-NEXT: testl $4096, %eax # imm = 0x10005812; SSE2-NEXT: pextrw $6, %xmm0, %ecx5813; SSE2-NEXT: je .LBB15_265814; SSE2-NEXT: # %bb.25: # %cond.store235815; SSE2-NEXT: movb %cl, 12(%rdi)5816; SSE2-NEXT: .LBB15_26: # %else245817; SSE2-NEXT: movdqa %xmm3, %xmm15818; SSE2-NEXT: psubusw %xmm6, %xmm15819; SSE2-NEXT: movdqa %xmm2, %xmm45820; SSE2-NEXT: psubusw %xmm6, %xmm45821; SSE2-NEXT: testl $8192, %eax # imm = 0x20005822; SSE2-NEXT: je .LBB15_285823; SSE2-NEXT: # %bb.27: # %cond.store255824; SSE2-NEXT: movb %ch, 13(%rdi)5825; SSE2-NEXT: .LBB15_28: # %else265826; SSE2-NEXT: psubw %xmm1, %xmm35827; SSE2-NEXT: psubw %xmm4, %xmm25828; SSE2-NEXT: testl $16384, %eax # imm = 0x40005829; SSE2-NEXT: pextrw $7, %xmm0, %ecx5830; SSE2-NEXT: je .LBB15_305831; SSE2-NEXT: # %bb.29: # %cond.store275832; SSE2-NEXT: movb %cl, 14(%rdi)5833; SSE2-NEXT: .LBB15_30: # %else285834; SSE2-NEXT: packuswb %xmm3, %xmm25835; SSE2-NEXT: testw %ax, %ax5836; SSE2-NEXT: jns .LBB15_325837; SSE2-NEXT: # %bb.31: # %cond.store295838; SSE2-NEXT: movb %ch, 15(%rdi)5839; SSE2-NEXT: .LBB15_32: # %else305840; SSE2-NEXT: testl $65536, %eax # imm = 0x100005841; SSE2-NEXT: movd %xmm2, %ecx5842; SSE2-NEXT: jne .LBB15_335843; SSE2-NEXT: # %bb.34: # %else325844; SSE2-NEXT: testl $131072, %eax # imm = 0x200005845; SSE2-NEXT: jne .LBB15_355846; SSE2-NEXT: .LBB15_36: # %else345847; SSE2-NEXT: testl $262144, %eax # imm = 0x400005848; SSE2-NEXT: jne .LBB15_375849; SSE2-NEXT: .LBB15_38: # %else365850; SSE2-NEXT: testl $524288, %eax # imm = 0x800005851; SSE2-NEXT: je .LBB15_405852; SSE2-NEXT: .LBB15_39: # %cond.store375853; SSE2-NEXT: shrl $24, %ecx5854; SSE2-NEXT: movb %cl, 19(%rdi)5855; SSE2-NEXT: .LBB15_40: # %else385856; SSE2-NEXT: testl $1048576, %eax # imm = 0x1000005857; SSE2-NEXT: pextrw $2, %xmm2, %ecx5858; SSE2-NEXT: je .LBB15_425859; SSE2-NEXT: # %bb.41: # %cond.store395860; SSE2-NEXT: movb %cl, 20(%rdi)5861; SSE2-NEXT: .LBB15_42: # %else405862; SSE2-NEXT: testl $2097152, %eax # imm = 0x2000005863; SSE2-NEXT: je .LBB15_445864; SSE2-NEXT: # %bb.43: # %cond.store415865; SSE2-NEXT: movb %ch, 21(%rdi)5866; SSE2-NEXT: .LBB15_44: # %else425867; SSE2-NEXT: testl $4194304, %eax # imm = 0x4000005868; SSE2-NEXT: pextrw $3, %xmm2, %ecx5869; SSE2-NEXT: je .LBB15_465870; SSE2-NEXT: # %bb.45: # %cond.store435871; SSE2-NEXT: movb %cl, 22(%rdi)5872; SSE2-NEXT: .LBB15_46: # %else445873; SSE2-NEXT: testl $8388608, %eax # imm = 0x8000005874; SSE2-NEXT: je .LBB15_485875; SSE2-NEXT: # %bb.47: # %cond.store455876; SSE2-NEXT: movb %ch, 23(%rdi)5877; SSE2-NEXT: .LBB15_48: # %else465878; SSE2-NEXT: testl $16777216, %eax # imm = 0x10000005879; SSE2-NEXT: pextrw $4, %xmm2, %ecx5880; SSE2-NEXT: je .LBB15_505881; SSE2-NEXT: # %bb.49: # %cond.store475882; SSE2-NEXT: movb %cl, 24(%rdi)5883; SSE2-NEXT: .LBB15_50: # %else485884; SSE2-NEXT: testl $33554432, %eax # imm = 0x20000005885; SSE2-NEXT: je .LBB15_525886; SSE2-NEXT: # %bb.51: # %cond.store495887; SSE2-NEXT: movb %ch, 25(%rdi)5888; SSE2-NEXT: .LBB15_52: # %else505889; SSE2-NEXT: testl $67108864, %eax # imm = 0x40000005890; SSE2-NEXT: pextrw $5, %xmm2, %ecx5891; SSE2-NEXT: je .LBB15_545892; SSE2-NEXT: # %bb.53: # %cond.store515893; SSE2-NEXT: movb %cl, 26(%rdi)5894; SSE2-NEXT: .LBB15_54: # %else525895; SSE2-NEXT: testl $134217728, %eax # imm = 0x80000005896; SSE2-NEXT: je .LBB15_565897; SSE2-NEXT: # %bb.55: # %cond.store535898; SSE2-NEXT: movb %ch, 27(%rdi)5899; SSE2-NEXT: .LBB15_56: # %else545900; SSE2-NEXT: testl $268435456, %eax # imm = 0x100000005901; SSE2-NEXT: pextrw $6, %xmm2, %ecx5902; SSE2-NEXT: je .LBB15_585903; SSE2-NEXT: # %bb.57: # %cond.store555904; SSE2-NEXT: movb %cl, 28(%rdi)5905; SSE2-NEXT: .LBB15_58: # %else565906; SSE2-NEXT: testl $536870912, %eax # imm = 0x200000005907; SSE2-NEXT: je .LBB15_605908; SSE2-NEXT: # %bb.59: # %cond.store575909; SSE2-NEXT: movb %ch, 29(%rdi)5910; SSE2-NEXT: .LBB15_60: # %else585911; SSE2-NEXT: testl $1073741824, %eax # imm = 0x400000005912; SSE2-NEXT: pextrw $7, %xmm2, %ecx5913; SSE2-NEXT: jne .LBB15_615914; SSE2-NEXT: # %bb.62: # %else605915; SSE2-NEXT: testl $-2147483648, %eax # imm = 0x800000005916; SSE2-NEXT: jne .LBB15_635917; SSE2-NEXT: .LBB15_64: # %else625918; SSE2-NEXT: retq5919; SSE2-NEXT: .LBB15_1: # %cond.store5920; SSE2-NEXT: movb %cl, (%rdi)5921; SSE2-NEXT: testb $2, %al5922; SSE2-NEXT: je .LBB15_45923; SSE2-NEXT: .LBB15_3: # %cond.store15924; SSE2-NEXT: movb %ch, 1(%rdi)5925; SSE2-NEXT: testb $4, %al5926; SSE2-NEXT: je .LBB15_65927; SSE2-NEXT: .LBB15_5: # %cond.store35928; SSE2-NEXT: movl %ecx, %edx5929; SSE2-NEXT: shrl $16, %edx5930; SSE2-NEXT: movb %dl, 2(%rdi)5931; SSE2-NEXT: testb $8, %al5932; SSE2-NEXT: jne .LBB15_75933; SSE2-NEXT: jmp .LBB15_85934; SSE2-NEXT: .LBB15_33: # %cond.store315935; SSE2-NEXT: movb %cl, 16(%rdi)5936; SSE2-NEXT: testl $131072, %eax # imm = 0x200005937; SSE2-NEXT: je .LBB15_365938; SSE2-NEXT: .LBB15_35: # %cond.store335939; SSE2-NEXT: movb %ch, 17(%rdi)5940; SSE2-NEXT: testl $262144, %eax # imm = 0x400005941; SSE2-NEXT: je .LBB15_385942; SSE2-NEXT: .LBB15_37: # %cond.store355943; SSE2-NEXT: movl %ecx, %edx5944; SSE2-NEXT: shrl $16, %edx5945; SSE2-NEXT: movb %dl, 18(%rdi)5946; SSE2-NEXT: testl $524288, %eax # imm = 0x800005947; SSE2-NEXT: jne .LBB15_395948; SSE2-NEXT: jmp .LBB15_405949; SSE2-NEXT: .LBB15_61: # %cond.store595950; SSE2-NEXT: movb %cl, 30(%rdi)5951; SSE2-NEXT: testl $-2147483648, %eax # imm = 0x800000005952; SSE2-NEXT: je .LBB15_645953; SSE2-NEXT: .LBB15_63: # %cond.store615954; SSE2-NEXT: movb %ch, 31(%rdi)5955; SSE2-NEXT: retq5956;5957; SSE4-LABEL: truncstore_v32i16_v32i8:5958; SSE4: # %bb.0:5959; SSE4-NEXT: pxor %xmm7, %xmm75960; SSE4-NEXT: pmovzxbw {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255]5961; SSE4-NEXT: pminuw %xmm6, %xmm15962; SSE4-NEXT: pminuw %xmm6, %xmm05963; SSE4-NEXT: packuswb %xmm1, %xmm05964; SSE4-NEXT: pcmpeqb %xmm7, %xmm45965; SSE4-NEXT: pmovmskb %xmm4, %ecx5966; SSE4-NEXT: xorl $65535, %ecx # imm = 0xFFFF5967; SSE4-NEXT: pcmpeqb %xmm7, %xmm55968; SSE4-NEXT: pmovmskb %xmm5, %eax5969; SSE4-NEXT: notl %eax5970; SSE4-NEXT: shll $16, %eax5971; SSE4-NEXT: orl %ecx, %eax5972; SSE4-NEXT: testb $1, %al5973; SSE4-NEXT: jne .LBB15_15974; SSE4-NEXT: # %bb.2: # %else5975; SSE4-NEXT: testb $2, %al5976; SSE4-NEXT: jne .LBB15_35977; SSE4-NEXT: .LBB15_4: # %else25978; SSE4-NEXT: testb $4, %al5979; SSE4-NEXT: jne .LBB15_55980; SSE4-NEXT: .LBB15_6: # %else45981; SSE4-NEXT: testb $8, %al5982; SSE4-NEXT: jne .LBB15_75983; SSE4-NEXT: .LBB15_8: # %else65984; SSE4-NEXT: testb $16, %al5985; SSE4-NEXT: jne .LBB15_95986; SSE4-NEXT: .LBB15_10: # %else85987; SSE4-NEXT: testb $32, %al5988; SSE4-NEXT: jne .LBB15_115989; SSE4-NEXT: .LBB15_12: # %else105990; SSE4-NEXT: testb $64, %al5991; SSE4-NEXT: jne .LBB15_135992; SSE4-NEXT: .LBB15_14: # %else125993; SSE4-NEXT: testb %al, %al5994; SSE4-NEXT: js .LBB15_155995; SSE4-NEXT: .LBB15_16: # %else145996; SSE4-NEXT: testl $256, %eax # imm = 0x1005997; SSE4-NEXT: jne .LBB15_175998; SSE4-NEXT: .LBB15_18: # %else165999; SSE4-NEXT: testl $512, %eax # imm = 0x2006000; SSE4-NEXT: jne .LBB15_196001; SSE4-NEXT: .LBB15_20: # %else186002; SSE4-NEXT: testl $1024, %eax # imm = 0x4006003; SSE4-NEXT: jne .LBB15_216004; SSE4-NEXT: .LBB15_22: # %else206005; SSE4-NEXT: testl $2048, %eax # imm = 0x8006006; SSE4-NEXT: jne .LBB15_236007; SSE4-NEXT: .LBB15_24: # %else226008; SSE4-NEXT: testl $4096, %eax # imm = 0x10006009; SSE4-NEXT: jne .LBB15_256010; SSE4-NEXT: .LBB15_26: # %else246011; SSE4-NEXT: testl $8192, %eax # imm = 0x20006012; SSE4-NEXT: jne .LBB15_276013; SSE4-NEXT: .LBB15_28: # %else266014; SSE4-NEXT: testl $16384, %eax # imm = 0x40006015; SSE4-NEXT: je .LBB15_306016; SSE4-NEXT: .LBB15_29: # %cond.store276017; SSE4-NEXT: pextrb $14, %xmm0, 14(%rdi)6018; SSE4-NEXT: .LBB15_30: # %else286019; SSE4-NEXT: pminuw %xmm6, %xmm36020; SSE4-NEXT: pminuw %xmm6, %xmm26021; SSE4-NEXT: testw %ax, %ax6022; SSE4-NEXT: jns .LBB15_326023; SSE4-NEXT: # %bb.31: # %cond.store296024; SSE4-NEXT: pextrb $15, %xmm0, 15(%rdi)6025; SSE4-NEXT: .LBB15_32: # %else306026; SSE4-NEXT: packuswb %xmm3, %xmm26027; SSE4-NEXT: testl $65536, %eax # imm = 0x100006028; SSE4-NEXT: jne .LBB15_336029; SSE4-NEXT: # %bb.34: # %else326030; SSE4-NEXT: testl $131072, %eax # imm = 0x200006031; SSE4-NEXT: jne .LBB15_356032; SSE4-NEXT: .LBB15_36: # %else346033; SSE4-NEXT: testl $262144, %eax # imm = 0x400006034; SSE4-NEXT: jne .LBB15_376035; SSE4-NEXT: .LBB15_38: # %else366036; SSE4-NEXT: testl $524288, %eax # imm = 0x800006037; SSE4-NEXT: jne .LBB15_396038; SSE4-NEXT: .LBB15_40: # %else386039; SSE4-NEXT: testl $1048576, %eax # imm = 0x1000006040; SSE4-NEXT: jne .LBB15_416041; SSE4-NEXT: .LBB15_42: # %else406042; SSE4-NEXT: testl $2097152, %eax # imm = 0x2000006043; SSE4-NEXT: jne .LBB15_436044; SSE4-NEXT: .LBB15_44: # %else426045; SSE4-NEXT: testl $4194304, %eax # imm = 0x4000006046; SSE4-NEXT: jne .LBB15_456047; SSE4-NEXT: .LBB15_46: # %else446048; SSE4-NEXT: testl $8388608, %eax # imm = 0x8000006049; SSE4-NEXT: jne .LBB15_476050; SSE4-NEXT: .LBB15_48: # %else466051; SSE4-NEXT: testl $16777216, %eax # imm = 0x10000006052; SSE4-NEXT: jne .LBB15_496053; SSE4-NEXT: .LBB15_50: # %else486054; SSE4-NEXT: testl $33554432, %eax # imm = 0x20000006055; SSE4-NEXT: jne .LBB15_516056; SSE4-NEXT: .LBB15_52: # %else506057; SSE4-NEXT: testl $67108864, %eax # imm = 0x40000006058; SSE4-NEXT: jne .LBB15_536059; SSE4-NEXT: .LBB15_54: # %else526060; SSE4-NEXT: testl $134217728, %eax # imm = 0x80000006061; SSE4-NEXT: jne .LBB15_556062; SSE4-NEXT: .LBB15_56: # %else546063; SSE4-NEXT: testl $268435456, %eax # imm = 0x100000006064; SSE4-NEXT: jne .LBB15_576065; SSE4-NEXT: .LBB15_58: # %else566066; SSE4-NEXT: testl $536870912, %eax # imm = 0x200000006067; SSE4-NEXT: jne .LBB15_596068; SSE4-NEXT: .LBB15_60: # %else586069; SSE4-NEXT: testl $1073741824, %eax # imm = 0x400000006070; SSE4-NEXT: jne .LBB15_616071; SSE4-NEXT: .LBB15_62: # %else606072; SSE4-NEXT: testl $-2147483648, %eax # imm = 0x800000006073; SSE4-NEXT: jne .LBB15_636074; SSE4-NEXT: .LBB15_64: # %else626075; SSE4-NEXT: retq6076; SSE4-NEXT: .LBB15_1: # %cond.store6077; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)6078; SSE4-NEXT: testb $2, %al6079; SSE4-NEXT: je .LBB15_46080; SSE4-NEXT: .LBB15_3: # %cond.store16081; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)6082; SSE4-NEXT: testb $4, %al6083; SSE4-NEXT: je .LBB15_66084; SSE4-NEXT: .LBB15_5: # %cond.store36085; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)6086; SSE4-NEXT: testb $8, %al6087; SSE4-NEXT: je .LBB15_86088; SSE4-NEXT: .LBB15_7: # %cond.store56089; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)6090; SSE4-NEXT: testb $16, %al6091; SSE4-NEXT: je .LBB15_106092; SSE4-NEXT: .LBB15_9: # %cond.store76093; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)6094; SSE4-NEXT: testb $32, %al6095; SSE4-NEXT: je .LBB15_126096; SSE4-NEXT: .LBB15_11: # %cond.store96097; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)6098; SSE4-NEXT: testb $64, %al6099; SSE4-NEXT: je .LBB15_146100; SSE4-NEXT: .LBB15_13: # %cond.store116101; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)6102; SSE4-NEXT: testb %al, %al6103; SSE4-NEXT: jns .LBB15_166104; SSE4-NEXT: .LBB15_15: # %cond.store136105; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)6106; SSE4-NEXT: testl $256, %eax # imm = 0x1006107; SSE4-NEXT: je .LBB15_186108; SSE4-NEXT: .LBB15_17: # %cond.store156109; SSE4-NEXT: pextrb $8, %xmm0, 8(%rdi)6110; SSE4-NEXT: testl $512, %eax # imm = 0x2006111; SSE4-NEXT: je .LBB15_206112; SSE4-NEXT: .LBB15_19: # %cond.store176113; SSE4-NEXT: pextrb $9, %xmm0, 9(%rdi)6114; SSE4-NEXT: testl $1024, %eax # imm = 0x4006115; SSE4-NEXT: je .LBB15_226116; SSE4-NEXT: .LBB15_21: # %cond.store196117; SSE4-NEXT: pextrb $10, %xmm0, 10(%rdi)6118; SSE4-NEXT: testl $2048, %eax # imm = 0x8006119; SSE4-NEXT: je .LBB15_246120; SSE4-NEXT: .LBB15_23: # %cond.store216121; SSE4-NEXT: pextrb $11, %xmm0, 11(%rdi)6122; SSE4-NEXT: testl $4096, %eax # imm = 0x10006123; SSE4-NEXT: je .LBB15_266124; SSE4-NEXT: .LBB15_25: # %cond.store236125; SSE4-NEXT: pextrb $12, %xmm0, 12(%rdi)6126; SSE4-NEXT: testl $8192, %eax # imm = 0x20006127; SSE4-NEXT: je .LBB15_286128; SSE4-NEXT: .LBB15_27: # %cond.store256129; SSE4-NEXT: pextrb $13, %xmm0, 13(%rdi)6130; SSE4-NEXT: testl $16384, %eax # imm = 0x40006131; SSE4-NEXT: jne .LBB15_296132; SSE4-NEXT: jmp .LBB15_306133; SSE4-NEXT: .LBB15_33: # %cond.store316134; SSE4-NEXT: pextrb $0, %xmm2, 16(%rdi)6135; SSE4-NEXT: testl $131072, %eax # imm = 0x200006136; SSE4-NEXT: je .LBB15_366137; SSE4-NEXT: .LBB15_35: # %cond.store336138; SSE4-NEXT: pextrb $1, %xmm2, 17(%rdi)6139; SSE4-NEXT: testl $262144, %eax # imm = 0x400006140; SSE4-NEXT: je .LBB15_386141; SSE4-NEXT: .LBB15_37: # %cond.store356142; SSE4-NEXT: pextrb $2, %xmm2, 18(%rdi)6143; SSE4-NEXT: testl $524288, %eax # imm = 0x800006144; SSE4-NEXT: je .LBB15_406145; SSE4-NEXT: .LBB15_39: # %cond.store376146; SSE4-NEXT: pextrb $3, %xmm2, 19(%rdi)6147; SSE4-NEXT: testl $1048576, %eax # imm = 0x1000006148; SSE4-NEXT: je .LBB15_426149; SSE4-NEXT: .LBB15_41: # %cond.store396150; SSE4-NEXT: pextrb $4, %xmm2, 20(%rdi)6151; SSE4-NEXT: testl $2097152, %eax # imm = 0x2000006152; SSE4-NEXT: je .LBB15_446153; SSE4-NEXT: .LBB15_43: # %cond.store416154; SSE4-NEXT: pextrb $5, %xmm2, 21(%rdi)6155; SSE4-NEXT: testl $4194304, %eax # imm = 0x4000006156; SSE4-NEXT: je .LBB15_466157; SSE4-NEXT: .LBB15_45: # %cond.store436158; SSE4-NEXT: pextrb $6, %xmm2, 22(%rdi)6159; SSE4-NEXT: testl $8388608, %eax # imm = 0x8000006160; SSE4-NEXT: je .LBB15_486161; SSE4-NEXT: .LBB15_47: # %cond.store456162; SSE4-NEXT: pextrb $7, %xmm2, 23(%rdi)6163; SSE4-NEXT: testl $16777216, %eax # imm = 0x10000006164; SSE4-NEXT: je .LBB15_506165; SSE4-NEXT: .LBB15_49: # %cond.store476166; SSE4-NEXT: pextrb $8, %xmm2, 24(%rdi)6167; SSE4-NEXT: testl $33554432, %eax # imm = 0x20000006168; SSE4-NEXT: je .LBB15_526169; SSE4-NEXT: .LBB15_51: # %cond.store496170; SSE4-NEXT: pextrb $9, %xmm2, 25(%rdi)6171; SSE4-NEXT: testl $67108864, %eax # imm = 0x40000006172; SSE4-NEXT: je .LBB15_546173; SSE4-NEXT: .LBB15_53: # %cond.store516174; SSE4-NEXT: pextrb $10, %xmm2, 26(%rdi)6175; SSE4-NEXT: testl $134217728, %eax # imm = 0x80000006176; SSE4-NEXT: je .LBB15_566177; SSE4-NEXT: .LBB15_55: # %cond.store536178; SSE4-NEXT: pextrb $11, %xmm2, 27(%rdi)6179; SSE4-NEXT: testl $268435456, %eax # imm = 0x100000006180; SSE4-NEXT: je .LBB15_586181; SSE4-NEXT: .LBB15_57: # %cond.store556182; SSE4-NEXT: pextrb $12, %xmm2, 28(%rdi)6183; SSE4-NEXT: testl $536870912, %eax # imm = 0x200000006184; SSE4-NEXT: je .LBB15_606185; SSE4-NEXT: .LBB15_59: # %cond.store576186; SSE4-NEXT: pextrb $13, %xmm2, 29(%rdi)6187; SSE4-NEXT: testl $1073741824, %eax # imm = 0x400000006188; SSE4-NEXT: je .LBB15_626189; SSE4-NEXT: .LBB15_61: # %cond.store596190; SSE4-NEXT: pextrb $14, %xmm2, 30(%rdi)6191; SSE4-NEXT: testl $-2147483648, %eax # imm = 0x800000006192; SSE4-NEXT: je .LBB15_646193; SSE4-NEXT: .LBB15_63: # %cond.store616194; SSE4-NEXT: pextrb $15, %xmm2, 31(%rdi)6195; SSE4-NEXT: retq6196;6197; AVX1-LABEL: truncstore_v32i16_v32i8:6198; AVX1: # %bb.0:6199; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm36200; AVX1-NEXT: vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]6201; AVX1-NEXT: vpminuw %xmm4, %xmm3, %xmm36202; AVX1-NEXT: vpminuw %xmm4, %xmm0, %xmm06203; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm06204; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm36205; AVX1-NEXT: vpminuw %xmm4, %xmm3, %xmm36206; AVX1-NEXT: vpminuw %xmm4, %xmm1, %xmm16207; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm16208; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06209; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm16210; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm36211; AVX1-NEXT: vpmovmskb %xmm3, %ecx6212; AVX1-NEXT: xorl $65535, %ecx # imm = 0xFFFF6213; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm26214; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm16215; AVX1-NEXT: vpmovmskb %xmm1, %eax6216; AVX1-NEXT: notl %eax6217; AVX1-NEXT: shll $16, %eax6218; AVX1-NEXT: orl %ecx, %eax6219; AVX1-NEXT: testb $1, %al6220; AVX1-NEXT: jne .LBB15_16221; AVX1-NEXT: # %bb.2: # %else6222; AVX1-NEXT: testb $2, %al6223; AVX1-NEXT: jne .LBB15_36224; AVX1-NEXT: .LBB15_4: # %else26225; AVX1-NEXT: testb $4, %al6226; AVX1-NEXT: jne .LBB15_56227; AVX1-NEXT: .LBB15_6: # %else46228; AVX1-NEXT: testb $8, %al6229; AVX1-NEXT: jne .LBB15_76230; AVX1-NEXT: .LBB15_8: # %else66231; AVX1-NEXT: testb $16, %al6232; AVX1-NEXT: jne .LBB15_96233; AVX1-NEXT: .LBB15_10: # %else86234; AVX1-NEXT: testb $32, %al6235; AVX1-NEXT: jne .LBB15_116236; AVX1-NEXT: .LBB15_12: # %else106237; AVX1-NEXT: testb $64, %al6238; AVX1-NEXT: jne .LBB15_136239; AVX1-NEXT: .LBB15_14: # %else126240; AVX1-NEXT: testb %al, %al6241; AVX1-NEXT: js .LBB15_156242; AVX1-NEXT: .LBB15_16: # %else146243; AVX1-NEXT: testl $256, %eax # imm = 0x1006244; AVX1-NEXT: jne .LBB15_176245; AVX1-NEXT: .LBB15_18: # %else166246; AVX1-NEXT: testl $512, %eax # imm = 0x2006247; AVX1-NEXT: jne .LBB15_196248; AVX1-NEXT: .LBB15_20: # %else186249; AVX1-NEXT: testl $1024, %eax # imm = 0x4006250; AVX1-NEXT: jne .LBB15_216251; AVX1-NEXT: .LBB15_22: # %else206252; AVX1-NEXT: testl $2048, %eax # imm = 0x8006253; AVX1-NEXT: jne .LBB15_236254; AVX1-NEXT: .LBB15_24: # %else226255; AVX1-NEXT: testl $4096, %eax # imm = 0x10006256; AVX1-NEXT: jne .LBB15_256257; AVX1-NEXT: .LBB15_26: # %else246258; AVX1-NEXT: testl $8192, %eax # imm = 0x20006259; AVX1-NEXT: jne .LBB15_276260; AVX1-NEXT: .LBB15_28: # %else266261; AVX1-NEXT: testl $16384, %eax # imm = 0x40006262; AVX1-NEXT: jne .LBB15_296263; AVX1-NEXT: .LBB15_30: # %else286264; AVX1-NEXT: testw %ax, %ax6265; AVX1-NEXT: jns .LBB15_326266; AVX1-NEXT: .LBB15_31: # %cond.store296267; AVX1-NEXT: vpextrb $15, %xmm0, 15(%rdi)6268; AVX1-NEXT: .LBB15_32: # %else306269; AVX1-NEXT: testl $65536, %eax # imm = 0x100006270; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm06271; AVX1-NEXT: jne .LBB15_336272; AVX1-NEXT: # %bb.34: # %else326273; AVX1-NEXT: testl $131072, %eax # imm = 0x200006274; AVX1-NEXT: jne .LBB15_356275; AVX1-NEXT: .LBB15_36: # %else346276; AVX1-NEXT: testl $262144, %eax # imm = 0x400006277; AVX1-NEXT: jne .LBB15_376278; AVX1-NEXT: .LBB15_38: # %else366279; AVX1-NEXT: testl $524288, %eax # imm = 0x800006280; AVX1-NEXT: jne .LBB15_396281; AVX1-NEXT: .LBB15_40: # %else386282; AVX1-NEXT: testl $1048576, %eax # imm = 0x1000006283; AVX1-NEXT: jne .LBB15_416284; AVX1-NEXT: .LBB15_42: # %else406285; AVX1-NEXT: testl $2097152, %eax # imm = 0x2000006286; AVX1-NEXT: jne .LBB15_436287; AVX1-NEXT: .LBB15_44: # %else426288; AVX1-NEXT: testl $4194304, %eax # imm = 0x4000006289; AVX1-NEXT: jne .LBB15_456290; AVX1-NEXT: .LBB15_46: # %else446291; AVX1-NEXT: testl $8388608, %eax # imm = 0x8000006292; AVX1-NEXT: jne .LBB15_476293; AVX1-NEXT: .LBB15_48: # %else466294; AVX1-NEXT: testl $16777216, %eax # imm = 0x10000006295; AVX1-NEXT: jne .LBB15_496296; AVX1-NEXT: .LBB15_50: # %else486297; AVX1-NEXT: testl $33554432, %eax # imm = 0x20000006298; AVX1-NEXT: jne .LBB15_516299; AVX1-NEXT: .LBB15_52: # %else506300; AVX1-NEXT: testl $67108864, %eax # imm = 0x40000006301; AVX1-NEXT: jne .LBB15_536302; AVX1-NEXT: .LBB15_54: # %else526303; AVX1-NEXT: testl $134217728, %eax # imm = 0x80000006304; AVX1-NEXT: jne .LBB15_556305; AVX1-NEXT: .LBB15_56: # %else546306; AVX1-NEXT: testl $268435456, %eax # imm = 0x100000006307; AVX1-NEXT: jne .LBB15_576308; AVX1-NEXT: .LBB15_58: # %else566309; AVX1-NEXT: testl $536870912, %eax # imm = 0x200000006310; AVX1-NEXT: jne .LBB15_596311; AVX1-NEXT: .LBB15_60: # %else586312; AVX1-NEXT: testl $1073741824, %eax # imm = 0x400000006313; AVX1-NEXT: jne .LBB15_616314; AVX1-NEXT: .LBB15_62: # %else606315; AVX1-NEXT: testl $-2147483648, %eax # imm = 0x800000006316; AVX1-NEXT: jne .LBB15_636317; AVX1-NEXT: .LBB15_64: # %else626318; AVX1-NEXT: vzeroupper6319; AVX1-NEXT: retq6320; AVX1-NEXT: .LBB15_1: # %cond.store6321; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)6322; AVX1-NEXT: testb $2, %al6323; AVX1-NEXT: je .LBB15_46324; AVX1-NEXT: .LBB15_3: # %cond.store16325; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)6326; AVX1-NEXT: testb $4, %al6327; AVX1-NEXT: je .LBB15_66328; AVX1-NEXT: .LBB15_5: # %cond.store36329; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)6330; AVX1-NEXT: testb $8, %al6331; AVX1-NEXT: je .LBB15_86332; AVX1-NEXT: .LBB15_7: # %cond.store56333; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)6334; AVX1-NEXT: testb $16, %al6335; AVX1-NEXT: je .LBB15_106336; AVX1-NEXT: .LBB15_9: # %cond.store76337; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)6338; AVX1-NEXT: testb $32, %al6339; AVX1-NEXT: je .LBB15_126340; AVX1-NEXT: .LBB15_11: # %cond.store96341; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)6342; AVX1-NEXT: testb $64, %al6343; AVX1-NEXT: je .LBB15_146344; AVX1-NEXT: .LBB15_13: # %cond.store116345; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)6346; AVX1-NEXT: testb %al, %al6347; AVX1-NEXT: jns .LBB15_166348; AVX1-NEXT: .LBB15_15: # %cond.store136349; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)6350; AVX1-NEXT: testl $256, %eax # imm = 0x1006351; AVX1-NEXT: je .LBB15_186352; AVX1-NEXT: .LBB15_17: # %cond.store156353; AVX1-NEXT: vpextrb $8, %xmm0, 8(%rdi)6354; AVX1-NEXT: testl $512, %eax # imm = 0x2006355; AVX1-NEXT: je .LBB15_206356; AVX1-NEXT: .LBB15_19: # %cond.store176357; AVX1-NEXT: vpextrb $9, %xmm0, 9(%rdi)6358; AVX1-NEXT: testl $1024, %eax # imm = 0x4006359; AVX1-NEXT: je .LBB15_226360; AVX1-NEXT: .LBB15_21: # %cond.store196361; AVX1-NEXT: vpextrb $10, %xmm0, 10(%rdi)6362; AVX1-NEXT: testl $2048, %eax # imm = 0x8006363; AVX1-NEXT: je .LBB15_246364; AVX1-NEXT: .LBB15_23: # %cond.store216365; AVX1-NEXT: vpextrb $11, %xmm0, 11(%rdi)6366; AVX1-NEXT: testl $4096, %eax # imm = 0x10006367; AVX1-NEXT: je .LBB15_266368; AVX1-NEXT: .LBB15_25: # %cond.store236369; AVX1-NEXT: vpextrb $12, %xmm0, 12(%rdi)6370; AVX1-NEXT: testl $8192, %eax # imm = 0x20006371; AVX1-NEXT: je .LBB15_286372; AVX1-NEXT: .LBB15_27: # %cond.store256373; AVX1-NEXT: vpextrb $13, %xmm0, 13(%rdi)6374; AVX1-NEXT: testl $16384, %eax # imm = 0x40006375; AVX1-NEXT: je .LBB15_306376; AVX1-NEXT: .LBB15_29: # %cond.store276377; AVX1-NEXT: vpextrb $14, %xmm0, 14(%rdi)6378; AVX1-NEXT: testw %ax, %ax6379; AVX1-NEXT: js .LBB15_316380; AVX1-NEXT: jmp .LBB15_326381; AVX1-NEXT: .LBB15_33: # %cond.store316382; AVX1-NEXT: vpextrb $0, %xmm0, 16(%rdi)6383; AVX1-NEXT: testl $131072, %eax # imm = 0x200006384; AVX1-NEXT: je .LBB15_366385; AVX1-NEXT: .LBB15_35: # %cond.store336386; AVX1-NEXT: vpextrb $1, %xmm0, 17(%rdi)6387; AVX1-NEXT: testl $262144, %eax # imm = 0x400006388; AVX1-NEXT: je .LBB15_386389; AVX1-NEXT: .LBB15_37: # %cond.store356390; AVX1-NEXT: vpextrb $2, %xmm0, 18(%rdi)6391; AVX1-NEXT: testl $524288, %eax # imm = 0x800006392; AVX1-NEXT: je .LBB15_406393; AVX1-NEXT: .LBB15_39: # %cond.store376394; AVX1-NEXT: vpextrb $3, %xmm0, 19(%rdi)6395; AVX1-NEXT: testl $1048576, %eax # imm = 0x1000006396; AVX1-NEXT: je .LBB15_426397; AVX1-NEXT: .LBB15_41: # %cond.store396398; AVX1-NEXT: vpextrb $4, %xmm0, 20(%rdi)6399; AVX1-NEXT: testl $2097152, %eax # imm = 0x2000006400; AVX1-NEXT: je .LBB15_446401; AVX1-NEXT: .LBB15_43: # %cond.store416402; AVX1-NEXT: vpextrb $5, %xmm0, 21(%rdi)6403; AVX1-NEXT: testl $4194304, %eax # imm = 0x4000006404; AVX1-NEXT: je .LBB15_466405; AVX1-NEXT: .LBB15_45: # %cond.store436406; AVX1-NEXT: vpextrb $6, %xmm0, 22(%rdi)6407; AVX1-NEXT: testl $8388608, %eax # imm = 0x8000006408; AVX1-NEXT: je .LBB15_486409; AVX1-NEXT: .LBB15_47: # %cond.store456410; AVX1-NEXT: vpextrb $7, %xmm0, 23(%rdi)6411; AVX1-NEXT: testl $16777216, %eax # imm = 0x10000006412; AVX1-NEXT: je .LBB15_506413; AVX1-NEXT: .LBB15_49: # %cond.store476414; AVX1-NEXT: vpextrb $8, %xmm0, 24(%rdi)6415; AVX1-NEXT: testl $33554432, %eax # imm = 0x20000006416; AVX1-NEXT: je .LBB15_526417; AVX1-NEXT: .LBB15_51: # %cond.store496418; AVX1-NEXT: vpextrb $9, %xmm0, 25(%rdi)6419; AVX1-NEXT: testl $67108864, %eax # imm = 0x40000006420; AVX1-NEXT: je .LBB15_546421; AVX1-NEXT: .LBB15_53: # %cond.store516422; AVX1-NEXT: vpextrb $10, %xmm0, 26(%rdi)6423; AVX1-NEXT: testl $134217728, %eax # imm = 0x80000006424; AVX1-NEXT: je .LBB15_566425; AVX1-NEXT: .LBB15_55: # %cond.store536426; AVX1-NEXT: vpextrb $11, %xmm0, 27(%rdi)6427; AVX1-NEXT: testl $268435456, %eax # imm = 0x100000006428; AVX1-NEXT: je .LBB15_586429; AVX1-NEXT: .LBB15_57: # %cond.store556430; AVX1-NEXT: vpextrb $12, %xmm0, 28(%rdi)6431; AVX1-NEXT: testl $536870912, %eax # imm = 0x200000006432; AVX1-NEXT: je .LBB15_606433; AVX1-NEXT: .LBB15_59: # %cond.store576434; AVX1-NEXT: vpextrb $13, %xmm0, 29(%rdi)6435; AVX1-NEXT: testl $1073741824, %eax # imm = 0x400000006436; AVX1-NEXT: je .LBB15_626437; AVX1-NEXT: .LBB15_61: # %cond.store596438; AVX1-NEXT: vpextrb $14, %xmm0, 30(%rdi)6439; AVX1-NEXT: testl $-2147483648, %eax # imm = 0x800000006440; AVX1-NEXT: je .LBB15_646441; AVX1-NEXT: .LBB15_63: # %cond.store616442; AVX1-NEXT: vpextrb $15, %xmm0, 31(%rdi)6443; AVX1-NEXT: vzeroupper6444; AVX1-NEXT: retq6445;6446; AVX2-LABEL: truncstore_v32i16_v32i8:6447; AVX2: # %bb.0:6448; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm36449; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]6450; AVX2-NEXT: vpminuw %ymm4, %ymm1, %ymm16451; AVX2-NEXT: vpminuw %ymm4, %ymm0, %ymm06452; AVX2-NEXT: vpackuswb %ymm1, %ymm0, %ymm06453; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]6454; AVX2-NEXT: vpcmpeqb %ymm3, %ymm2, %ymm16455; AVX2-NEXT: vpmovmskb %ymm1, %eax6456; AVX2-NEXT: notl %eax6457; AVX2-NEXT: testb $1, %al6458; AVX2-NEXT: jne .LBB15_16459; AVX2-NEXT: # %bb.2: # %else6460; AVX2-NEXT: testb $2, %al6461; AVX2-NEXT: jne .LBB15_36462; AVX2-NEXT: .LBB15_4: # %else26463; AVX2-NEXT: testb $4, %al6464; AVX2-NEXT: jne .LBB15_56465; AVX2-NEXT: .LBB15_6: # %else46466; AVX2-NEXT: testb $8, %al6467; AVX2-NEXT: jne .LBB15_76468; AVX2-NEXT: .LBB15_8: # %else66469; AVX2-NEXT: testb $16, %al6470; AVX2-NEXT: jne .LBB15_96471; AVX2-NEXT: .LBB15_10: # %else86472; AVX2-NEXT: testb $32, %al6473; AVX2-NEXT: jne .LBB15_116474; AVX2-NEXT: .LBB15_12: # %else106475; AVX2-NEXT: testb $64, %al6476; AVX2-NEXT: jne .LBB15_136477; AVX2-NEXT: .LBB15_14: # %else126478; AVX2-NEXT: testb %al, %al6479; AVX2-NEXT: js .LBB15_156480; AVX2-NEXT: .LBB15_16: # %else146481; AVX2-NEXT: testl $256, %eax # imm = 0x1006482; AVX2-NEXT: jne .LBB15_176483; AVX2-NEXT: .LBB15_18: # %else166484; AVX2-NEXT: testl $512, %eax # imm = 0x2006485; AVX2-NEXT: jne .LBB15_196486; AVX2-NEXT: .LBB15_20: # %else186487; AVX2-NEXT: testl $1024, %eax # imm = 0x4006488; AVX2-NEXT: jne .LBB15_216489; AVX2-NEXT: .LBB15_22: # %else206490; AVX2-NEXT: testl $2048, %eax # imm = 0x8006491; AVX2-NEXT: jne .LBB15_236492; AVX2-NEXT: .LBB15_24: # %else226493; AVX2-NEXT: testl $4096, %eax # imm = 0x10006494; AVX2-NEXT: jne .LBB15_256495; AVX2-NEXT: .LBB15_26: # %else246496; AVX2-NEXT: testl $8192, %eax # imm = 0x20006497; AVX2-NEXT: jne .LBB15_276498; AVX2-NEXT: .LBB15_28: # %else266499; AVX2-NEXT: testl $16384, %eax # imm = 0x40006500; AVX2-NEXT: jne .LBB15_296501; AVX2-NEXT: .LBB15_30: # %else286502; AVX2-NEXT: testw %ax, %ax6503; AVX2-NEXT: jns .LBB15_326504; AVX2-NEXT: .LBB15_31: # %cond.store296505; AVX2-NEXT: vpextrb $15, %xmm0, 15(%rdi)6506; AVX2-NEXT: .LBB15_32: # %else306507; AVX2-NEXT: testl $65536, %eax # imm = 0x100006508; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm06509; AVX2-NEXT: jne .LBB15_336510; AVX2-NEXT: # %bb.34: # %else326511; AVX2-NEXT: testl $131072, %eax # imm = 0x200006512; AVX2-NEXT: jne .LBB15_356513; AVX2-NEXT: .LBB15_36: # %else346514; AVX2-NEXT: testl $262144, %eax # imm = 0x400006515; AVX2-NEXT: jne .LBB15_376516; AVX2-NEXT: .LBB15_38: # %else366517; AVX2-NEXT: testl $524288, %eax # imm = 0x800006518; AVX2-NEXT: jne .LBB15_396519; AVX2-NEXT: .LBB15_40: # %else386520; AVX2-NEXT: testl $1048576, %eax # imm = 0x1000006521; AVX2-NEXT: jne .LBB15_416522; AVX2-NEXT: .LBB15_42: # %else406523; AVX2-NEXT: testl $2097152, %eax # imm = 0x2000006524; AVX2-NEXT: jne .LBB15_436525; AVX2-NEXT: .LBB15_44: # %else426526; AVX2-NEXT: testl $4194304, %eax # imm = 0x4000006527; AVX2-NEXT: jne .LBB15_456528; AVX2-NEXT: .LBB15_46: # %else446529; AVX2-NEXT: testl $8388608, %eax # imm = 0x8000006530; AVX2-NEXT: jne .LBB15_476531; AVX2-NEXT: .LBB15_48: # %else466532; AVX2-NEXT: testl $16777216, %eax # imm = 0x10000006533; AVX2-NEXT: jne .LBB15_496534; AVX2-NEXT: .LBB15_50: # %else486535; AVX2-NEXT: testl $33554432, %eax # imm = 0x20000006536; AVX2-NEXT: jne .LBB15_516537; AVX2-NEXT: .LBB15_52: # %else506538; AVX2-NEXT: testl $67108864, %eax # imm = 0x40000006539; AVX2-NEXT: jne .LBB15_536540; AVX2-NEXT: .LBB15_54: # %else526541; AVX2-NEXT: testl $134217728, %eax # imm = 0x80000006542; AVX2-NEXT: jne .LBB15_556543; AVX2-NEXT: .LBB15_56: # %else546544; AVX2-NEXT: testl $268435456, %eax # imm = 0x100000006545; AVX2-NEXT: jne .LBB15_576546; AVX2-NEXT: .LBB15_58: # %else566547; AVX2-NEXT: testl $536870912, %eax # imm = 0x200000006548; AVX2-NEXT: jne .LBB15_596549; AVX2-NEXT: .LBB15_60: # %else586550; AVX2-NEXT: testl $1073741824, %eax # imm = 0x400000006551; AVX2-NEXT: jne .LBB15_616552; AVX2-NEXT: .LBB15_62: # %else606553; AVX2-NEXT: testl $-2147483648, %eax # imm = 0x800000006554; AVX2-NEXT: jne .LBB15_636555; AVX2-NEXT: .LBB15_64: # %else626556; AVX2-NEXT: vzeroupper6557; AVX2-NEXT: retq6558; AVX2-NEXT: .LBB15_1: # %cond.store6559; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)6560; AVX2-NEXT: testb $2, %al6561; AVX2-NEXT: je .LBB15_46562; AVX2-NEXT: .LBB15_3: # %cond.store16563; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)6564; AVX2-NEXT: testb $4, %al6565; AVX2-NEXT: je .LBB15_66566; AVX2-NEXT: .LBB15_5: # %cond.store36567; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)6568; AVX2-NEXT: testb $8, %al6569; AVX2-NEXT: je .LBB15_86570; AVX2-NEXT: .LBB15_7: # %cond.store56571; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)6572; AVX2-NEXT: testb $16, %al6573; AVX2-NEXT: je .LBB15_106574; AVX2-NEXT: .LBB15_9: # %cond.store76575; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)6576; AVX2-NEXT: testb $32, %al6577; AVX2-NEXT: je .LBB15_126578; AVX2-NEXT: .LBB15_11: # %cond.store96579; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)6580; AVX2-NEXT: testb $64, %al6581; AVX2-NEXT: je .LBB15_146582; AVX2-NEXT: .LBB15_13: # %cond.store116583; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)6584; AVX2-NEXT: testb %al, %al6585; AVX2-NEXT: jns .LBB15_166586; AVX2-NEXT: .LBB15_15: # %cond.store136587; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)6588; AVX2-NEXT: testl $256, %eax # imm = 0x1006589; AVX2-NEXT: je .LBB15_186590; AVX2-NEXT: .LBB15_17: # %cond.store156591; AVX2-NEXT: vpextrb $8, %xmm0, 8(%rdi)6592; AVX2-NEXT: testl $512, %eax # imm = 0x2006593; AVX2-NEXT: je .LBB15_206594; AVX2-NEXT: .LBB15_19: # %cond.store176595; AVX2-NEXT: vpextrb $9, %xmm0, 9(%rdi)6596; AVX2-NEXT: testl $1024, %eax # imm = 0x4006597; AVX2-NEXT: je .LBB15_226598; AVX2-NEXT: .LBB15_21: # %cond.store196599; AVX2-NEXT: vpextrb $10, %xmm0, 10(%rdi)6600; AVX2-NEXT: testl $2048, %eax # imm = 0x8006601; AVX2-NEXT: je .LBB15_246602; AVX2-NEXT: .LBB15_23: # %cond.store216603; AVX2-NEXT: vpextrb $11, %xmm0, 11(%rdi)6604; AVX2-NEXT: testl $4096, %eax # imm = 0x10006605; AVX2-NEXT: je .LBB15_266606; AVX2-NEXT: .LBB15_25: # %cond.store236607; AVX2-NEXT: vpextrb $12, %xmm0, 12(%rdi)6608; AVX2-NEXT: testl $8192, %eax # imm = 0x20006609; AVX2-NEXT: je .LBB15_286610; AVX2-NEXT: .LBB15_27: # %cond.store256611; AVX2-NEXT: vpextrb $13, %xmm0, 13(%rdi)6612; AVX2-NEXT: testl $16384, %eax # imm = 0x40006613; AVX2-NEXT: je .LBB15_306614; AVX2-NEXT: .LBB15_29: # %cond.store276615; AVX2-NEXT: vpextrb $14, %xmm0, 14(%rdi)6616; AVX2-NEXT: testw %ax, %ax6617; AVX2-NEXT: js .LBB15_316618; AVX2-NEXT: jmp .LBB15_326619; AVX2-NEXT: .LBB15_33: # %cond.store316620; AVX2-NEXT: vpextrb $0, %xmm0, 16(%rdi)6621; AVX2-NEXT: testl $131072, %eax # imm = 0x200006622; AVX2-NEXT: je .LBB15_366623; AVX2-NEXT: .LBB15_35: # %cond.store336624; AVX2-NEXT: vpextrb $1, %xmm0, 17(%rdi)6625; AVX2-NEXT: testl $262144, %eax # imm = 0x400006626; AVX2-NEXT: je .LBB15_386627; AVX2-NEXT: .LBB15_37: # %cond.store356628; AVX2-NEXT: vpextrb $2, %xmm0, 18(%rdi)6629; AVX2-NEXT: testl $524288, %eax # imm = 0x800006630; AVX2-NEXT: je .LBB15_406631; AVX2-NEXT: .LBB15_39: # %cond.store376632; AVX2-NEXT: vpextrb $3, %xmm0, 19(%rdi)6633; AVX2-NEXT: testl $1048576, %eax # imm = 0x1000006634; AVX2-NEXT: je .LBB15_426635; AVX2-NEXT: .LBB15_41: # %cond.store396636; AVX2-NEXT: vpextrb $4, %xmm0, 20(%rdi)6637; AVX2-NEXT: testl $2097152, %eax # imm = 0x2000006638; AVX2-NEXT: je .LBB15_446639; AVX2-NEXT: .LBB15_43: # %cond.store416640; AVX2-NEXT: vpextrb $5, %xmm0, 21(%rdi)6641; AVX2-NEXT: testl $4194304, %eax # imm = 0x4000006642; AVX2-NEXT: je .LBB15_466643; AVX2-NEXT: .LBB15_45: # %cond.store436644; AVX2-NEXT: vpextrb $6, %xmm0, 22(%rdi)6645; AVX2-NEXT: testl $8388608, %eax # imm = 0x8000006646; AVX2-NEXT: je .LBB15_486647; AVX2-NEXT: .LBB15_47: # %cond.store456648; AVX2-NEXT: vpextrb $7, %xmm0, 23(%rdi)6649; AVX2-NEXT: testl $16777216, %eax # imm = 0x10000006650; AVX2-NEXT: je .LBB15_506651; AVX2-NEXT: .LBB15_49: # %cond.store476652; AVX2-NEXT: vpextrb $8, %xmm0, 24(%rdi)6653; AVX2-NEXT: testl $33554432, %eax # imm = 0x20000006654; AVX2-NEXT: je .LBB15_526655; AVX2-NEXT: .LBB15_51: # %cond.store496656; AVX2-NEXT: vpextrb $9, %xmm0, 25(%rdi)6657; AVX2-NEXT: testl $67108864, %eax # imm = 0x40000006658; AVX2-NEXT: je .LBB15_546659; AVX2-NEXT: .LBB15_53: # %cond.store516660; AVX2-NEXT: vpextrb $10, %xmm0, 26(%rdi)6661; AVX2-NEXT: testl $134217728, %eax # imm = 0x80000006662; AVX2-NEXT: je .LBB15_566663; AVX2-NEXT: .LBB15_55: # %cond.store536664; AVX2-NEXT: vpextrb $11, %xmm0, 27(%rdi)6665; AVX2-NEXT: testl $268435456, %eax # imm = 0x100000006666; AVX2-NEXT: je .LBB15_586667; AVX2-NEXT: .LBB15_57: # %cond.store556668; AVX2-NEXT: vpextrb $12, %xmm0, 28(%rdi)6669; AVX2-NEXT: testl $536870912, %eax # imm = 0x200000006670; AVX2-NEXT: je .LBB15_606671; AVX2-NEXT: .LBB15_59: # %cond.store576672; AVX2-NEXT: vpextrb $13, %xmm0, 29(%rdi)6673; AVX2-NEXT: testl $1073741824, %eax # imm = 0x400000006674; AVX2-NEXT: je .LBB15_626675; AVX2-NEXT: .LBB15_61: # %cond.store596676; AVX2-NEXT: vpextrb $14, %xmm0, 30(%rdi)6677; AVX2-NEXT: testl $-2147483648, %eax # imm = 0x800000006678; AVX2-NEXT: je .LBB15_646679; AVX2-NEXT: .LBB15_63: # %cond.store616680; AVX2-NEXT: vpextrb $15, %xmm0, 31(%rdi)6681; AVX2-NEXT: vzeroupper6682; AVX2-NEXT: retq6683;6684; AVX512F-LABEL: truncstore_v32i16_v32i8:6685; AVX512F: # %bb.0:6686; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm26687; AVX512F-NEXT: vpcmpeqb %ymm2, %ymm1, %ymm16688; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm26689; AVX512F-NEXT: vpbroadcastw {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]6690; AVX512F-NEXT: vpminuw %ymm3, %ymm2, %ymm26691; AVX512F-NEXT: vpminuw %ymm3, %ymm0, %ymm06692; AVX512F-NEXT: vpackuswb %ymm2, %ymm0, %ymm06693; AVX512F-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]6694; AVX512F-NEXT: vpmovmskb %ymm1, %eax6695; AVX512F-NEXT: notl %eax6696; AVX512F-NEXT: testb $1, %al6697; AVX512F-NEXT: jne .LBB15_16698; AVX512F-NEXT: # %bb.2: # %else6699; AVX512F-NEXT: testb $2, %al6700; AVX512F-NEXT: jne .LBB15_36701; AVX512F-NEXT: .LBB15_4: # %else26702; AVX512F-NEXT: testb $4, %al6703; AVX512F-NEXT: jne .LBB15_56704; AVX512F-NEXT: .LBB15_6: # %else46705; AVX512F-NEXT: testb $8, %al6706; AVX512F-NEXT: jne .LBB15_76707; AVX512F-NEXT: .LBB15_8: # %else66708; AVX512F-NEXT: testb $16, %al6709; AVX512F-NEXT: jne .LBB15_96710; AVX512F-NEXT: .LBB15_10: # %else86711; AVX512F-NEXT: testb $32, %al6712; AVX512F-NEXT: jne .LBB15_116713; AVX512F-NEXT: .LBB15_12: # %else106714; AVX512F-NEXT: testb $64, %al6715; AVX512F-NEXT: jne .LBB15_136716; AVX512F-NEXT: .LBB15_14: # %else126717; AVX512F-NEXT: testb %al, %al6718; AVX512F-NEXT: js .LBB15_156719; AVX512F-NEXT: .LBB15_16: # %else146720; AVX512F-NEXT: testl $256, %eax # imm = 0x1006721; AVX512F-NEXT: jne .LBB15_176722; AVX512F-NEXT: .LBB15_18: # %else166723; AVX512F-NEXT: testl $512, %eax # imm = 0x2006724; AVX512F-NEXT: jne .LBB15_196725; AVX512F-NEXT: .LBB15_20: # %else186726; AVX512F-NEXT: testl $1024, %eax # imm = 0x4006727; AVX512F-NEXT: jne .LBB15_216728; AVX512F-NEXT: .LBB15_22: # %else206729; AVX512F-NEXT: testl $2048, %eax # imm = 0x8006730; AVX512F-NEXT: jne .LBB15_236731; AVX512F-NEXT: .LBB15_24: # %else226732; AVX512F-NEXT: testl $4096, %eax # imm = 0x10006733; AVX512F-NEXT: jne .LBB15_256734; AVX512F-NEXT: .LBB15_26: # %else246735; AVX512F-NEXT: testl $8192, %eax # imm = 0x20006736; AVX512F-NEXT: jne .LBB15_276737; AVX512F-NEXT: .LBB15_28: # %else266738; AVX512F-NEXT: testl $16384, %eax # imm = 0x40006739; AVX512F-NEXT: jne .LBB15_296740; AVX512F-NEXT: .LBB15_30: # %else286741; AVX512F-NEXT: testw %ax, %ax6742; AVX512F-NEXT: jns .LBB15_326743; AVX512F-NEXT: .LBB15_31: # %cond.store296744; AVX512F-NEXT: vpextrb $15, %xmm0, 15(%rdi)6745; AVX512F-NEXT: .LBB15_32: # %else306746; AVX512F-NEXT: testl $65536, %eax # imm = 0x100006747; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm06748; AVX512F-NEXT: jne .LBB15_336749; AVX512F-NEXT: # %bb.34: # %else326750; AVX512F-NEXT: testl $131072, %eax # imm = 0x200006751; AVX512F-NEXT: jne .LBB15_356752; AVX512F-NEXT: .LBB15_36: # %else346753; AVX512F-NEXT: testl $262144, %eax # imm = 0x400006754; AVX512F-NEXT: jne .LBB15_376755; AVX512F-NEXT: .LBB15_38: # %else366756; AVX512F-NEXT: testl $524288, %eax # imm = 0x800006757; AVX512F-NEXT: jne .LBB15_396758; AVX512F-NEXT: .LBB15_40: # %else386759; AVX512F-NEXT: testl $1048576, %eax # imm = 0x1000006760; AVX512F-NEXT: jne .LBB15_416761; AVX512F-NEXT: .LBB15_42: # %else406762; AVX512F-NEXT: testl $2097152, %eax # imm = 0x2000006763; AVX512F-NEXT: jne .LBB15_436764; AVX512F-NEXT: .LBB15_44: # %else426765; AVX512F-NEXT: testl $4194304, %eax # imm = 0x4000006766; AVX512F-NEXT: jne .LBB15_456767; AVX512F-NEXT: .LBB15_46: # %else446768; AVX512F-NEXT: testl $8388608, %eax # imm = 0x8000006769; AVX512F-NEXT: jne .LBB15_476770; AVX512F-NEXT: .LBB15_48: # %else466771; AVX512F-NEXT: testl $16777216, %eax # imm = 0x10000006772; AVX512F-NEXT: jne .LBB15_496773; AVX512F-NEXT: .LBB15_50: # %else486774; AVX512F-NEXT: testl $33554432, %eax # imm = 0x20000006775; AVX512F-NEXT: jne .LBB15_516776; AVX512F-NEXT: .LBB15_52: # %else506777; AVX512F-NEXT: testl $67108864, %eax # imm = 0x40000006778; AVX512F-NEXT: jne .LBB15_536779; AVX512F-NEXT: .LBB15_54: # %else526780; AVX512F-NEXT: testl $134217728, %eax # imm = 0x80000006781; AVX512F-NEXT: jne .LBB15_556782; AVX512F-NEXT: .LBB15_56: # %else546783; AVX512F-NEXT: testl $268435456, %eax # imm = 0x100000006784; AVX512F-NEXT: jne .LBB15_576785; AVX512F-NEXT: .LBB15_58: # %else566786; AVX512F-NEXT: testl $536870912, %eax # imm = 0x200000006787; AVX512F-NEXT: jne .LBB15_596788; AVX512F-NEXT: .LBB15_60: # %else586789; AVX512F-NEXT: testl $1073741824, %eax # imm = 0x400000006790; AVX512F-NEXT: jne .LBB15_616791; AVX512F-NEXT: .LBB15_62: # %else606792; AVX512F-NEXT: testl $-2147483648, %eax # imm = 0x800000006793; AVX512F-NEXT: jne .LBB15_636794; AVX512F-NEXT: .LBB15_64: # %else626795; AVX512F-NEXT: vzeroupper6796; AVX512F-NEXT: retq6797; AVX512F-NEXT: .LBB15_1: # %cond.store6798; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)6799; AVX512F-NEXT: testb $2, %al6800; AVX512F-NEXT: je .LBB15_46801; AVX512F-NEXT: .LBB15_3: # %cond.store16802; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)6803; AVX512F-NEXT: testb $4, %al6804; AVX512F-NEXT: je .LBB15_66805; AVX512F-NEXT: .LBB15_5: # %cond.store36806; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)6807; AVX512F-NEXT: testb $8, %al6808; AVX512F-NEXT: je .LBB15_86809; AVX512F-NEXT: .LBB15_7: # %cond.store56810; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)6811; AVX512F-NEXT: testb $16, %al6812; AVX512F-NEXT: je .LBB15_106813; AVX512F-NEXT: .LBB15_9: # %cond.store76814; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)6815; AVX512F-NEXT: testb $32, %al6816; AVX512F-NEXT: je .LBB15_126817; AVX512F-NEXT: .LBB15_11: # %cond.store96818; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)6819; AVX512F-NEXT: testb $64, %al6820; AVX512F-NEXT: je .LBB15_146821; AVX512F-NEXT: .LBB15_13: # %cond.store116822; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)6823; AVX512F-NEXT: testb %al, %al6824; AVX512F-NEXT: jns .LBB15_166825; AVX512F-NEXT: .LBB15_15: # %cond.store136826; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)6827; AVX512F-NEXT: testl $256, %eax # imm = 0x1006828; AVX512F-NEXT: je .LBB15_186829; AVX512F-NEXT: .LBB15_17: # %cond.store156830; AVX512F-NEXT: vpextrb $8, %xmm0, 8(%rdi)6831; AVX512F-NEXT: testl $512, %eax # imm = 0x2006832; AVX512F-NEXT: je .LBB15_206833; AVX512F-NEXT: .LBB15_19: # %cond.store176834; AVX512F-NEXT: vpextrb $9, %xmm0, 9(%rdi)6835; AVX512F-NEXT: testl $1024, %eax # imm = 0x4006836; AVX512F-NEXT: je .LBB15_226837; AVX512F-NEXT: .LBB15_21: # %cond.store196838; AVX512F-NEXT: vpextrb $10, %xmm0, 10(%rdi)6839; AVX512F-NEXT: testl $2048, %eax # imm = 0x8006840; AVX512F-NEXT: je .LBB15_246841; AVX512F-NEXT: .LBB15_23: # %cond.store216842; AVX512F-NEXT: vpextrb $11, %xmm0, 11(%rdi)6843; AVX512F-NEXT: testl $4096, %eax # imm = 0x10006844; AVX512F-NEXT: je .LBB15_266845; AVX512F-NEXT: .LBB15_25: # %cond.store236846; AVX512F-NEXT: vpextrb $12, %xmm0, 12(%rdi)6847; AVX512F-NEXT: testl $8192, %eax # imm = 0x20006848; AVX512F-NEXT: je .LBB15_286849; AVX512F-NEXT: .LBB15_27: # %cond.store256850; AVX512F-NEXT: vpextrb $13, %xmm0, 13(%rdi)6851; AVX512F-NEXT: testl $16384, %eax # imm = 0x40006852; AVX512F-NEXT: je .LBB15_306853; AVX512F-NEXT: .LBB15_29: # %cond.store276854; AVX512F-NEXT: vpextrb $14, %xmm0, 14(%rdi)6855; AVX512F-NEXT: testw %ax, %ax6856; AVX512F-NEXT: js .LBB15_316857; AVX512F-NEXT: jmp .LBB15_326858; AVX512F-NEXT: .LBB15_33: # %cond.store316859; AVX512F-NEXT: vpextrb $0, %xmm0, 16(%rdi)6860; AVX512F-NEXT: testl $131072, %eax # imm = 0x200006861; AVX512F-NEXT: je .LBB15_366862; AVX512F-NEXT: .LBB15_35: # %cond.store336863; AVX512F-NEXT: vpextrb $1, %xmm0, 17(%rdi)6864; AVX512F-NEXT: testl $262144, %eax # imm = 0x400006865; AVX512F-NEXT: je .LBB15_386866; AVX512F-NEXT: .LBB15_37: # %cond.store356867; AVX512F-NEXT: vpextrb $2, %xmm0, 18(%rdi)6868; AVX512F-NEXT: testl $524288, %eax # imm = 0x800006869; AVX512F-NEXT: je .LBB15_406870; AVX512F-NEXT: .LBB15_39: # %cond.store376871; AVX512F-NEXT: vpextrb $3, %xmm0, 19(%rdi)6872; AVX512F-NEXT: testl $1048576, %eax # imm = 0x1000006873; AVX512F-NEXT: je .LBB15_426874; AVX512F-NEXT: .LBB15_41: # %cond.store396875; AVX512F-NEXT: vpextrb $4, %xmm0, 20(%rdi)6876; AVX512F-NEXT: testl $2097152, %eax # imm = 0x2000006877; AVX512F-NEXT: je .LBB15_446878; AVX512F-NEXT: .LBB15_43: # %cond.store416879; AVX512F-NEXT: vpextrb $5, %xmm0, 21(%rdi)6880; AVX512F-NEXT: testl $4194304, %eax # imm = 0x4000006881; AVX512F-NEXT: je .LBB15_466882; AVX512F-NEXT: .LBB15_45: # %cond.store436883; AVX512F-NEXT: vpextrb $6, %xmm0, 22(%rdi)6884; AVX512F-NEXT: testl $8388608, %eax # imm = 0x8000006885; AVX512F-NEXT: je .LBB15_486886; AVX512F-NEXT: .LBB15_47: # %cond.store456887; AVX512F-NEXT: vpextrb $7, %xmm0, 23(%rdi)6888; AVX512F-NEXT: testl $16777216, %eax # imm = 0x10000006889; AVX512F-NEXT: je .LBB15_506890; AVX512F-NEXT: .LBB15_49: # %cond.store476891; AVX512F-NEXT: vpextrb $8, %xmm0, 24(%rdi)6892; AVX512F-NEXT: testl $33554432, %eax # imm = 0x20000006893; AVX512F-NEXT: je .LBB15_526894; AVX512F-NEXT: .LBB15_51: # %cond.store496895; AVX512F-NEXT: vpextrb $9, %xmm0, 25(%rdi)6896; AVX512F-NEXT: testl $67108864, %eax # imm = 0x40000006897; AVX512F-NEXT: je .LBB15_546898; AVX512F-NEXT: .LBB15_53: # %cond.store516899; AVX512F-NEXT: vpextrb $10, %xmm0, 26(%rdi)6900; AVX512F-NEXT: testl $134217728, %eax # imm = 0x80000006901; AVX512F-NEXT: je .LBB15_566902; AVX512F-NEXT: .LBB15_55: # %cond.store536903; AVX512F-NEXT: vpextrb $11, %xmm0, 27(%rdi)6904; AVX512F-NEXT: testl $268435456, %eax # imm = 0x100000006905; AVX512F-NEXT: je .LBB15_586906; AVX512F-NEXT: .LBB15_57: # %cond.store556907; AVX512F-NEXT: vpextrb $12, %xmm0, 28(%rdi)6908; AVX512F-NEXT: testl $536870912, %eax # imm = 0x200000006909; AVX512F-NEXT: je .LBB15_606910; AVX512F-NEXT: .LBB15_59: # %cond.store576911; AVX512F-NEXT: vpextrb $13, %xmm0, 29(%rdi)6912; AVX512F-NEXT: testl $1073741824, %eax # imm = 0x400000006913; AVX512F-NEXT: je .LBB15_626914; AVX512F-NEXT: .LBB15_61: # %cond.store596915; AVX512F-NEXT: vpextrb $14, %xmm0, 30(%rdi)6916; AVX512F-NEXT: testl $-2147483648, %eax # imm = 0x800000006917; AVX512F-NEXT: je .LBB15_646918; AVX512F-NEXT: .LBB15_63: # %cond.store616919; AVX512F-NEXT: vpextrb $15, %xmm0, 31(%rdi)6920; AVX512F-NEXT: vzeroupper6921; AVX512F-NEXT: retq6922;6923; AVX512FVL-LABEL: truncstore_v32i16_v32i8:6924; AVX512FVL: # %bb.0:6925; AVX512FVL-NEXT: vpxor %xmm2, %xmm2, %xmm26926; AVX512FVL-NEXT: vpcmpeqb %ymm2, %ymm1, %ymm16927; AVX512FVL-NEXT: vextracti64x4 $1, %zmm0, %ymm26928; AVX512FVL-NEXT: vpbroadcastd {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]6929; AVX512FVL-NEXT: vpminuw %ymm3, %ymm2, %ymm26930; AVX512FVL-NEXT: vpminuw %ymm3, %ymm0, %ymm06931; AVX512FVL-NEXT: vpackuswb %ymm2, %ymm0, %ymm06932; AVX512FVL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]6933; AVX512FVL-NEXT: vpmovmskb %ymm1, %eax6934; AVX512FVL-NEXT: notl %eax6935; AVX512FVL-NEXT: testb $1, %al6936; AVX512FVL-NEXT: jne .LBB15_16937; AVX512FVL-NEXT: # %bb.2: # %else6938; AVX512FVL-NEXT: testb $2, %al6939; AVX512FVL-NEXT: jne .LBB15_36940; AVX512FVL-NEXT: .LBB15_4: # %else26941; AVX512FVL-NEXT: testb $4, %al6942; AVX512FVL-NEXT: jne .LBB15_56943; AVX512FVL-NEXT: .LBB15_6: # %else46944; AVX512FVL-NEXT: testb $8, %al6945; AVX512FVL-NEXT: jne .LBB15_76946; AVX512FVL-NEXT: .LBB15_8: # %else66947; AVX512FVL-NEXT: testb $16, %al6948; AVX512FVL-NEXT: jne .LBB15_96949; AVX512FVL-NEXT: .LBB15_10: # %else86950; AVX512FVL-NEXT: testb $32, %al6951; AVX512FVL-NEXT: jne .LBB15_116952; AVX512FVL-NEXT: .LBB15_12: # %else106953; AVX512FVL-NEXT: testb $64, %al6954; AVX512FVL-NEXT: jne .LBB15_136955; AVX512FVL-NEXT: .LBB15_14: # %else126956; AVX512FVL-NEXT: testb %al, %al6957; AVX512FVL-NEXT: js .LBB15_156958; AVX512FVL-NEXT: .LBB15_16: # %else146959; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1006960; AVX512FVL-NEXT: jne .LBB15_176961; AVX512FVL-NEXT: .LBB15_18: # %else166962; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2006963; AVX512FVL-NEXT: jne .LBB15_196964; AVX512FVL-NEXT: .LBB15_20: # %else186965; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4006966; AVX512FVL-NEXT: jne .LBB15_216967; AVX512FVL-NEXT: .LBB15_22: # %else206968; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8006969; AVX512FVL-NEXT: jne .LBB15_236970; AVX512FVL-NEXT: .LBB15_24: # %else226971; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10006972; AVX512FVL-NEXT: jne .LBB15_256973; AVX512FVL-NEXT: .LBB15_26: # %else246974; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20006975; AVX512FVL-NEXT: jne .LBB15_276976; AVX512FVL-NEXT: .LBB15_28: # %else266977; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40006978; AVX512FVL-NEXT: jne .LBB15_296979; AVX512FVL-NEXT: .LBB15_30: # %else286980; AVX512FVL-NEXT: testw %ax, %ax6981; AVX512FVL-NEXT: jns .LBB15_326982; AVX512FVL-NEXT: .LBB15_31: # %cond.store296983; AVX512FVL-NEXT: vpextrb $15, %xmm0, 15(%rdi)6984; AVX512FVL-NEXT: .LBB15_32: # %else306985; AVX512FVL-NEXT: testl $65536, %eax # imm = 0x100006986; AVX512FVL-NEXT: vextracti128 $1, %ymm0, %xmm06987; AVX512FVL-NEXT: jne .LBB15_336988; AVX512FVL-NEXT: # %bb.34: # %else326989; AVX512FVL-NEXT: testl $131072, %eax # imm = 0x200006990; AVX512FVL-NEXT: jne .LBB15_356991; AVX512FVL-NEXT: .LBB15_36: # %else346992; AVX512FVL-NEXT: testl $262144, %eax # imm = 0x400006993; AVX512FVL-NEXT: jne .LBB15_376994; AVX512FVL-NEXT: .LBB15_38: # %else366995; AVX512FVL-NEXT: testl $524288, %eax # imm = 0x800006996; AVX512FVL-NEXT: jne .LBB15_396997; AVX512FVL-NEXT: .LBB15_40: # %else386998; AVX512FVL-NEXT: testl $1048576, %eax # imm = 0x1000006999; AVX512FVL-NEXT: jne .LBB15_417000; AVX512FVL-NEXT: .LBB15_42: # %else407001; AVX512FVL-NEXT: testl $2097152, %eax # imm = 0x2000007002; AVX512FVL-NEXT: jne .LBB15_437003; AVX512FVL-NEXT: .LBB15_44: # %else427004; AVX512FVL-NEXT: testl $4194304, %eax # imm = 0x4000007005; AVX512FVL-NEXT: jne .LBB15_457006; AVX512FVL-NEXT: .LBB15_46: # %else447007; AVX512FVL-NEXT: testl $8388608, %eax # imm = 0x8000007008; AVX512FVL-NEXT: jne .LBB15_477009; AVX512FVL-NEXT: .LBB15_48: # %else467010; AVX512FVL-NEXT: testl $16777216, %eax # imm = 0x10000007011; AVX512FVL-NEXT: jne .LBB15_497012; AVX512FVL-NEXT: .LBB15_50: # %else487013; AVX512FVL-NEXT: testl $33554432, %eax # imm = 0x20000007014; AVX512FVL-NEXT: jne .LBB15_517015; AVX512FVL-NEXT: .LBB15_52: # %else507016; AVX512FVL-NEXT: testl $67108864, %eax # imm = 0x40000007017; AVX512FVL-NEXT: jne .LBB15_537018; AVX512FVL-NEXT: .LBB15_54: # %else527019; AVX512FVL-NEXT: testl $134217728, %eax # imm = 0x80000007020; AVX512FVL-NEXT: jne .LBB15_557021; AVX512FVL-NEXT: .LBB15_56: # %else547022; AVX512FVL-NEXT: testl $268435456, %eax # imm = 0x100000007023; AVX512FVL-NEXT: jne .LBB15_577024; AVX512FVL-NEXT: .LBB15_58: # %else567025; AVX512FVL-NEXT: testl $536870912, %eax # imm = 0x200000007026; AVX512FVL-NEXT: jne .LBB15_597027; AVX512FVL-NEXT: .LBB15_60: # %else587028; AVX512FVL-NEXT: testl $1073741824, %eax # imm = 0x400000007029; AVX512FVL-NEXT: jne .LBB15_617030; AVX512FVL-NEXT: .LBB15_62: # %else607031; AVX512FVL-NEXT: testl $-2147483648, %eax # imm = 0x800000007032; AVX512FVL-NEXT: jne .LBB15_637033; AVX512FVL-NEXT: .LBB15_64: # %else627034; AVX512FVL-NEXT: vzeroupper7035; AVX512FVL-NEXT: retq7036; AVX512FVL-NEXT: .LBB15_1: # %cond.store7037; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)7038; AVX512FVL-NEXT: testb $2, %al7039; AVX512FVL-NEXT: je .LBB15_47040; AVX512FVL-NEXT: .LBB15_3: # %cond.store17041; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)7042; AVX512FVL-NEXT: testb $4, %al7043; AVX512FVL-NEXT: je .LBB15_67044; AVX512FVL-NEXT: .LBB15_5: # %cond.store37045; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)7046; AVX512FVL-NEXT: testb $8, %al7047; AVX512FVL-NEXT: je .LBB15_87048; AVX512FVL-NEXT: .LBB15_7: # %cond.store57049; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)7050; AVX512FVL-NEXT: testb $16, %al7051; AVX512FVL-NEXT: je .LBB15_107052; AVX512FVL-NEXT: .LBB15_9: # %cond.store77053; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)7054; AVX512FVL-NEXT: testb $32, %al7055; AVX512FVL-NEXT: je .LBB15_127056; AVX512FVL-NEXT: .LBB15_11: # %cond.store97057; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)7058; AVX512FVL-NEXT: testb $64, %al7059; AVX512FVL-NEXT: je .LBB15_147060; AVX512FVL-NEXT: .LBB15_13: # %cond.store117061; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)7062; AVX512FVL-NEXT: testb %al, %al7063; AVX512FVL-NEXT: jns .LBB15_167064; AVX512FVL-NEXT: .LBB15_15: # %cond.store137065; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)7066; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1007067; AVX512FVL-NEXT: je .LBB15_187068; AVX512FVL-NEXT: .LBB15_17: # %cond.store157069; AVX512FVL-NEXT: vpextrb $8, %xmm0, 8(%rdi)7070; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2007071; AVX512FVL-NEXT: je .LBB15_207072; AVX512FVL-NEXT: .LBB15_19: # %cond.store177073; AVX512FVL-NEXT: vpextrb $9, %xmm0, 9(%rdi)7074; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4007075; AVX512FVL-NEXT: je .LBB15_227076; AVX512FVL-NEXT: .LBB15_21: # %cond.store197077; AVX512FVL-NEXT: vpextrb $10, %xmm0, 10(%rdi)7078; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8007079; AVX512FVL-NEXT: je .LBB15_247080; AVX512FVL-NEXT: .LBB15_23: # %cond.store217081; AVX512FVL-NEXT: vpextrb $11, %xmm0, 11(%rdi)7082; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10007083; AVX512FVL-NEXT: je .LBB15_267084; AVX512FVL-NEXT: .LBB15_25: # %cond.store237085; AVX512FVL-NEXT: vpextrb $12, %xmm0, 12(%rdi)7086; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20007087; AVX512FVL-NEXT: je .LBB15_287088; AVX512FVL-NEXT: .LBB15_27: # %cond.store257089; AVX512FVL-NEXT: vpextrb $13, %xmm0, 13(%rdi)7090; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40007091; AVX512FVL-NEXT: je .LBB15_307092; AVX512FVL-NEXT: .LBB15_29: # %cond.store277093; AVX512FVL-NEXT: vpextrb $14, %xmm0, 14(%rdi)7094; AVX512FVL-NEXT: testw %ax, %ax7095; AVX512FVL-NEXT: js .LBB15_317096; AVX512FVL-NEXT: jmp .LBB15_327097; AVX512FVL-NEXT: .LBB15_33: # %cond.store317098; AVX512FVL-NEXT: vpextrb $0, %xmm0, 16(%rdi)7099; AVX512FVL-NEXT: testl $131072, %eax # imm = 0x200007100; AVX512FVL-NEXT: je .LBB15_367101; AVX512FVL-NEXT: .LBB15_35: # %cond.store337102; AVX512FVL-NEXT: vpextrb $1, %xmm0, 17(%rdi)7103; AVX512FVL-NEXT: testl $262144, %eax # imm = 0x400007104; AVX512FVL-NEXT: je .LBB15_387105; AVX512FVL-NEXT: .LBB15_37: # %cond.store357106; AVX512FVL-NEXT: vpextrb $2, %xmm0, 18(%rdi)7107; AVX512FVL-NEXT: testl $524288, %eax # imm = 0x800007108; AVX512FVL-NEXT: je .LBB15_407109; AVX512FVL-NEXT: .LBB15_39: # %cond.store377110; AVX512FVL-NEXT: vpextrb $3, %xmm0, 19(%rdi)7111; AVX512FVL-NEXT: testl $1048576, %eax # imm = 0x1000007112; AVX512FVL-NEXT: je .LBB15_427113; AVX512FVL-NEXT: .LBB15_41: # %cond.store397114; AVX512FVL-NEXT: vpextrb $4, %xmm0, 20(%rdi)7115; AVX512FVL-NEXT: testl $2097152, %eax # imm = 0x2000007116; AVX512FVL-NEXT: je .LBB15_447117; AVX512FVL-NEXT: .LBB15_43: # %cond.store417118; AVX512FVL-NEXT: vpextrb $5, %xmm0, 21(%rdi)7119; AVX512FVL-NEXT: testl $4194304, %eax # imm = 0x4000007120; AVX512FVL-NEXT: je .LBB15_467121; AVX512FVL-NEXT: .LBB15_45: # %cond.store437122; AVX512FVL-NEXT: vpextrb $6, %xmm0, 22(%rdi)7123; AVX512FVL-NEXT: testl $8388608, %eax # imm = 0x8000007124; AVX512FVL-NEXT: je .LBB15_487125; AVX512FVL-NEXT: .LBB15_47: # %cond.store457126; AVX512FVL-NEXT: vpextrb $7, %xmm0, 23(%rdi)7127; AVX512FVL-NEXT: testl $16777216, %eax # imm = 0x10000007128; AVX512FVL-NEXT: je .LBB15_507129; AVX512FVL-NEXT: .LBB15_49: # %cond.store477130; AVX512FVL-NEXT: vpextrb $8, %xmm0, 24(%rdi)7131; AVX512FVL-NEXT: testl $33554432, %eax # imm = 0x20000007132; AVX512FVL-NEXT: je .LBB15_527133; AVX512FVL-NEXT: .LBB15_51: # %cond.store497134; AVX512FVL-NEXT: vpextrb $9, %xmm0, 25(%rdi)7135; AVX512FVL-NEXT: testl $67108864, %eax # imm = 0x40000007136; AVX512FVL-NEXT: je .LBB15_547137; AVX512FVL-NEXT: .LBB15_53: # %cond.store517138; AVX512FVL-NEXT: vpextrb $10, %xmm0, 26(%rdi)7139; AVX512FVL-NEXT: testl $134217728, %eax # imm = 0x80000007140; AVX512FVL-NEXT: je .LBB15_567141; AVX512FVL-NEXT: .LBB15_55: # %cond.store537142; AVX512FVL-NEXT: vpextrb $11, %xmm0, 27(%rdi)7143; AVX512FVL-NEXT: testl $268435456, %eax # imm = 0x100000007144; AVX512FVL-NEXT: je .LBB15_587145; AVX512FVL-NEXT: .LBB15_57: # %cond.store557146; AVX512FVL-NEXT: vpextrb $12, %xmm0, 28(%rdi)7147; AVX512FVL-NEXT: testl $536870912, %eax # imm = 0x200000007148; AVX512FVL-NEXT: je .LBB15_607149; AVX512FVL-NEXT: .LBB15_59: # %cond.store577150; AVX512FVL-NEXT: vpextrb $13, %xmm0, 29(%rdi)7151; AVX512FVL-NEXT: testl $1073741824, %eax # imm = 0x400000007152; AVX512FVL-NEXT: je .LBB15_627153; AVX512FVL-NEXT: .LBB15_61: # %cond.store597154; AVX512FVL-NEXT: vpextrb $14, %xmm0, 30(%rdi)7155; AVX512FVL-NEXT: testl $-2147483648, %eax # imm = 0x800000007156; AVX512FVL-NEXT: je .LBB15_647157; AVX512FVL-NEXT: .LBB15_63: # %cond.store617158; AVX512FVL-NEXT: vpextrb $15, %xmm0, 31(%rdi)7159; AVX512FVL-NEXT: vzeroupper7160; AVX512FVL-NEXT: retq7161;7162; AVX512BW-LABEL: truncstore_v32i16_v32i8:7163; AVX512BW: # %bb.0:7164; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm17165; AVX512BW-NEXT: vptestmb %zmm1, %zmm1, %k17166; AVX512BW-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm07167; AVX512BW-NEXT: vpmovwb %zmm0, (%rdi) {%k1}7168; AVX512BW-NEXT: vzeroupper7169; AVX512BW-NEXT: retq7170;7171; AVX512BWVL-LABEL: truncstore_v32i16_v32i8:7172; AVX512BWVL: # %bb.0:7173; AVX512BWVL-NEXT: vptestmb %ymm1, %ymm1, %k17174; AVX512BWVL-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm07175; AVX512BWVL-NEXT: vpmovwb %zmm0, (%rdi) {%k1}7176; AVX512BWVL-NEXT: vzeroupper7177; AVX512BWVL-NEXT: retq7178 %a = icmp ne <32 x i8> %mask, zeroinitializer7179 %b = icmp ult <32 x i16> %x, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>7180 %c = select <32 x i1> %b, <32 x i16> %x, <32 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>7181 %d = trunc <32 x i16> %c to <32 x i8>7182 call void @llvm.masked.store.v32i8.p0(<32 x i8> %d, ptr %p, i32 1, <32 x i1> %a)7183 ret void7184}7185 7186define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {7187; SSE2-LABEL: truncstore_v16i16_v16i8:7188; SSE2: # %bb.0:7189; SSE2-NEXT: pxor %xmm3, %xmm37190; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]7191; SSE2-NEXT: movdqa %xmm1, %xmm57192; SSE2-NEXT: psubusw %xmm4, %xmm57193; SSE2-NEXT: psubw %xmm5, %xmm17194; SSE2-NEXT: movdqa %xmm0, %xmm57195; SSE2-NEXT: psubusw %xmm4, %xmm57196; SSE2-NEXT: psubw %xmm5, %xmm07197; SSE2-NEXT: packuswb %xmm1, %xmm07198; SSE2-NEXT: pcmpeqb %xmm2, %xmm37199; SSE2-NEXT: pmovmskb %xmm3, %eax7200; SSE2-NEXT: xorl $65535, %eax # imm = 0xFFFF7201; SSE2-NEXT: testb $1, %al7202; SSE2-NEXT: movd %xmm0, %ecx7203; SSE2-NEXT: jne .LBB16_17204; SSE2-NEXT: # %bb.2: # %else7205; SSE2-NEXT: testb $2, %al7206; SSE2-NEXT: jne .LBB16_37207; SSE2-NEXT: .LBB16_4: # %else27208; SSE2-NEXT: testb $4, %al7209; SSE2-NEXT: jne .LBB16_57210; SSE2-NEXT: .LBB16_6: # %else47211; SSE2-NEXT: testb $8, %al7212; SSE2-NEXT: je .LBB16_87213; SSE2-NEXT: .LBB16_7: # %cond.store57214; SSE2-NEXT: shrl $24, %ecx7215; SSE2-NEXT: movb %cl, 3(%rdi)7216; SSE2-NEXT: .LBB16_8: # %else67217; SSE2-NEXT: testb $16, %al7218; SSE2-NEXT: pextrw $2, %xmm0, %ecx7219; SSE2-NEXT: je .LBB16_107220; SSE2-NEXT: # %bb.9: # %cond.store77221; SSE2-NEXT: movb %cl, 4(%rdi)7222; SSE2-NEXT: .LBB16_10: # %else87223; SSE2-NEXT: testb $32, %al7224; SSE2-NEXT: je .LBB16_127225; SSE2-NEXT: # %bb.11: # %cond.store97226; SSE2-NEXT: movb %ch, 5(%rdi)7227; SSE2-NEXT: .LBB16_12: # %else107228; SSE2-NEXT: testb $64, %al7229; SSE2-NEXT: pextrw $3, %xmm0, %ecx7230; SSE2-NEXT: je .LBB16_147231; SSE2-NEXT: # %bb.13: # %cond.store117232; SSE2-NEXT: movb %cl, 6(%rdi)7233; SSE2-NEXT: .LBB16_14: # %else127234; SSE2-NEXT: testb %al, %al7235; SSE2-NEXT: jns .LBB16_167236; SSE2-NEXT: # %bb.15: # %cond.store137237; SSE2-NEXT: movb %ch, 7(%rdi)7238; SSE2-NEXT: .LBB16_16: # %else147239; SSE2-NEXT: testl $256, %eax # imm = 0x1007240; SSE2-NEXT: pextrw $4, %xmm0, %ecx7241; SSE2-NEXT: je .LBB16_187242; SSE2-NEXT: # %bb.17: # %cond.store157243; SSE2-NEXT: movb %cl, 8(%rdi)7244; SSE2-NEXT: .LBB16_18: # %else167245; SSE2-NEXT: testl $512, %eax # imm = 0x2007246; SSE2-NEXT: je .LBB16_207247; SSE2-NEXT: # %bb.19: # %cond.store177248; SSE2-NEXT: movb %ch, 9(%rdi)7249; SSE2-NEXT: .LBB16_20: # %else187250; SSE2-NEXT: testl $1024, %eax # imm = 0x4007251; SSE2-NEXT: pextrw $5, %xmm0, %ecx7252; SSE2-NEXT: je .LBB16_227253; SSE2-NEXT: # %bb.21: # %cond.store197254; SSE2-NEXT: movb %cl, 10(%rdi)7255; SSE2-NEXT: .LBB16_22: # %else207256; SSE2-NEXT: testl $2048, %eax # imm = 0x8007257; SSE2-NEXT: je .LBB16_247258; SSE2-NEXT: # %bb.23: # %cond.store217259; SSE2-NEXT: movb %ch, 11(%rdi)7260; SSE2-NEXT: .LBB16_24: # %else227261; SSE2-NEXT: testl $4096, %eax # imm = 0x10007262; SSE2-NEXT: pextrw $6, %xmm0, %ecx7263; SSE2-NEXT: je .LBB16_267264; SSE2-NEXT: # %bb.25: # %cond.store237265; SSE2-NEXT: movb %cl, 12(%rdi)7266; SSE2-NEXT: .LBB16_26: # %else247267; SSE2-NEXT: testl $8192, %eax # imm = 0x20007268; SSE2-NEXT: je .LBB16_287269; SSE2-NEXT: # %bb.27: # %cond.store257270; SSE2-NEXT: movb %ch, 13(%rdi)7271; SSE2-NEXT: .LBB16_28: # %else267272; SSE2-NEXT: testl $16384, %eax # imm = 0x40007273; SSE2-NEXT: pextrw $7, %xmm0, %ecx7274; SSE2-NEXT: jne .LBB16_297275; SSE2-NEXT: # %bb.30: # %else287276; SSE2-NEXT: testl $32768, %eax # imm = 0x80007277; SSE2-NEXT: jne .LBB16_317278; SSE2-NEXT: .LBB16_32: # %else307279; SSE2-NEXT: retq7280; SSE2-NEXT: .LBB16_1: # %cond.store7281; SSE2-NEXT: movb %cl, (%rdi)7282; SSE2-NEXT: testb $2, %al7283; SSE2-NEXT: je .LBB16_47284; SSE2-NEXT: .LBB16_3: # %cond.store17285; SSE2-NEXT: movb %ch, 1(%rdi)7286; SSE2-NEXT: testb $4, %al7287; SSE2-NEXT: je .LBB16_67288; SSE2-NEXT: .LBB16_5: # %cond.store37289; SSE2-NEXT: movl %ecx, %edx7290; SSE2-NEXT: shrl $16, %edx7291; SSE2-NEXT: movb %dl, 2(%rdi)7292; SSE2-NEXT: testb $8, %al7293; SSE2-NEXT: jne .LBB16_77294; SSE2-NEXT: jmp .LBB16_87295; SSE2-NEXT: .LBB16_29: # %cond.store277296; SSE2-NEXT: movb %cl, 14(%rdi)7297; SSE2-NEXT: testl $32768, %eax # imm = 0x80007298; SSE2-NEXT: je .LBB16_327299; SSE2-NEXT: .LBB16_31: # %cond.store297300; SSE2-NEXT: movb %ch, 15(%rdi)7301; SSE2-NEXT: retq7302;7303; SSE4-LABEL: truncstore_v16i16_v16i8:7304; SSE4: # %bb.0:7305; SSE4-NEXT: pxor %xmm3, %xmm37306; SSE4-NEXT: pmovzxbw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]7307; SSE4-NEXT: pminuw %xmm4, %xmm17308; SSE4-NEXT: pminuw %xmm4, %xmm07309; SSE4-NEXT: packuswb %xmm1, %xmm07310; SSE4-NEXT: pcmpeqb %xmm2, %xmm37311; SSE4-NEXT: pmovmskb %xmm3, %eax7312; SSE4-NEXT: xorl $65535, %eax # imm = 0xFFFF7313; SSE4-NEXT: testb $1, %al7314; SSE4-NEXT: jne .LBB16_17315; SSE4-NEXT: # %bb.2: # %else7316; SSE4-NEXT: testb $2, %al7317; SSE4-NEXT: jne .LBB16_37318; SSE4-NEXT: .LBB16_4: # %else27319; SSE4-NEXT: testb $4, %al7320; SSE4-NEXT: jne .LBB16_57321; SSE4-NEXT: .LBB16_6: # %else47322; SSE4-NEXT: testb $8, %al7323; SSE4-NEXT: jne .LBB16_77324; SSE4-NEXT: .LBB16_8: # %else67325; SSE4-NEXT: testb $16, %al7326; SSE4-NEXT: jne .LBB16_97327; SSE4-NEXT: .LBB16_10: # %else87328; SSE4-NEXT: testb $32, %al7329; SSE4-NEXT: jne .LBB16_117330; SSE4-NEXT: .LBB16_12: # %else107331; SSE4-NEXT: testb $64, %al7332; SSE4-NEXT: jne .LBB16_137333; SSE4-NEXT: .LBB16_14: # %else127334; SSE4-NEXT: testb %al, %al7335; SSE4-NEXT: js .LBB16_157336; SSE4-NEXT: .LBB16_16: # %else147337; SSE4-NEXT: testl $256, %eax # imm = 0x1007338; SSE4-NEXT: jne .LBB16_177339; SSE4-NEXT: .LBB16_18: # %else167340; SSE4-NEXT: testl $512, %eax # imm = 0x2007341; SSE4-NEXT: jne .LBB16_197342; SSE4-NEXT: .LBB16_20: # %else187343; SSE4-NEXT: testl $1024, %eax # imm = 0x4007344; SSE4-NEXT: jne .LBB16_217345; SSE4-NEXT: .LBB16_22: # %else207346; SSE4-NEXT: testl $2048, %eax # imm = 0x8007347; SSE4-NEXT: jne .LBB16_237348; SSE4-NEXT: .LBB16_24: # %else227349; SSE4-NEXT: testl $4096, %eax # imm = 0x10007350; SSE4-NEXT: jne .LBB16_257351; SSE4-NEXT: .LBB16_26: # %else247352; SSE4-NEXT: testl $8192, %eax # imm = 0x20007353; SSE4-NEXT: jne .LBB16_277354; SSE4-NEXT: .LBB16_28: # %else267355; SSE4-NEXT: testl $16384, %eax # imm = 0x40007356; SSE4-NEXT: jne .LBB16_297357; SSE4-NEXT: .LBB16_30: # %else287358; SSE4-NEXT: testl $32768, %eax # imm = 0x80007359; SSE4-NEXT: jne .LBB16_317360; SSE4-NEXT: .LBB16_32: # %else307361; SSE4-NEXT: retq7362; SSE4-NEXT: .LBB16_1: # %cond.store7363; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)7364; SSE4-NEXT: testb $2, %al7365; SSE4-NEXT: je .LBB16_47366; SSE4-NEXT: .LBB16_3: # %cond.store17367; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)7368; SSE4-NEXT: testb $4, %al7369; SSE4-NEXT: je .LBB16_67370; SSE4-NEXT: .LBB16_5: # %cond.store37371; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)7372; SSE4-NEXT: testb $8, %al7373; SSE4-NEXT: je .LBB16_87374; SSE4-NEXT: .LBB16_7: # %cond.store57375; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)7376; SSE4-NEXT: testb $16, %al7377; SSE4-NEXT: je .LBB16_107378; SSE4-NEXT: .LBB16_9: # %cond.store77379; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)7380; SSE4-NEXT: testb $32, %al7381; SSE4-NEXT: je .LBB16_127382; SSE4-NEXT: .LBB16_11: # %cond.store97383; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)7384; SSE4-NEXT: testb $64, %al7385; SSE4-NEXT: je .LBB16_147386; SSE4-NEXT: .LBB16_13: # %cond.store117387; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)7388; SSE4-NEXT: testb %al, %al7389; SSE4-NEXT: jns .LBB16_167390; SSE4-NEXT: .LBB16_15: # %cond.store137391; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)7392; SSE4-NEXT: testl $256, %eax # imm = 0x1007393; SSE4-NEXT: je .LBB16_187394; SSE4-NEXT: .LBB16_17: # %cond.store157395; SSE4-NEXT: pextrb $8, %xmm0, 8(%rdi)7396; SSE4-NEXT: testl $512, %eax # imm = 0x2007397; SSE4-NEXT: je .LBB16_207398; SSE4-NEXT: .LBB16_19: # %cond.store177399; SSE4-NEXT: pextrb $9, %xmm0, 9(%rdi)7400; SSE4-NEXT: testl $1024, %eax # imm = 0x4007401; SSE4-NEXT: je .LBB16_227402; SSE4-NEXT: .LBB16_21: # %cond.store197403; SSE4-NEXT: pextrb $10, %xmm0, 10(%rdi)7404; SSE4-NEXT: testl $2048, %eax # imm = 0x8007405; SSE4-NEXT: je .LBB16_247406; SSE4-NEXT: .LBB16_23: # %cond.store217407; SSE4-NEXT: pextrb $11, %xmm0, 11(%rdi)7408; SSE4-NEXT: testl $4096, %eax # imm = 0x10007409; SSE4-NEXT: je .LBB16_267410; SSE4-NEXT: .LBB16_25: # %cond.store237411; SSE4-NEXT: pextrb $12, %xmm0, 12(%rdi)7412; SSE4-NEXT: testl $8192, %eax # imm = 0x20007413; SSE4-NEXT: je .LBB16_287414; SSE4-NEXT: .LBB16_27: # %cond.store257415; SSE4-NEXT: pextrb $13, %xmm0, 13(%rdi)7416; SSE4-NEXT: testl $16384, %eax # imm = 0x40007417; SSE4-NEXT: je .LBB16_307418; SSE4-NEXT: .LBB16_29: # %cond.store277419; SSE4-NEXT: pextrb $14, %xmm0, 14(%rdi)7420; SSE4-NEXT: testl $32768, %eax # imm = 0x80007421; SSE4-NEXT: je .LBB16_327422; SSE4-NEXT: .LBB16_31: # %cond.store297423; SSE4-NEXT: pextrb $15, %xmm0, 15(%rdi)7424; SSE4-NEXT: retq7425;7426; AVX1-LABEL: truncstore_v16i16_v16i8:7427; AVX1: # %bb.0:7428; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm27429; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm37430; AVX1-NEXT: vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]7431; AVX1-NEXT: vpminuw %xmm4, %xmm3, %xmm37432; AVX1-NEXT: vpminuw %xmm4, %xmm0, %xmm07433; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm07434; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm17435; AVX1-NEXT: vpmovmskb %xmm1, %eax7436; AVX1-NEXT: xorl $65535, %eax # imm = 0xFFFF7437; AVX1-NEXT: testb $1, %al7438; AVX1-NEXT: jne .LBB16_17439; AVX1-NEXT: # %bb.2: # %else7440; AVX1-NEXT: testb $2, %al7441; AVX1-NEXT: jne .LBB16_37442; AVX1-NEXT: .LBB16_4: # %else27443; AVX1-NEXT: testb $4, %al7444; AVX1-NEXT: jne .LBB16_57445; AVX1-NEXT: .LBB16_6: # %else47446; AVX1-NEXT: testb $8, %al7447; AVX1-NEXT: jne .LBB16_77448; AVX1-NEXT: .LBB16_8: # %else67449; AVX1-NEXT: testb $16, %al7450; AVX1-NEXT: jne .LBB16_97451; AVX1-NEXT: .LBB16_10: # %else87452; AVX1-NEXT: testb $32, %al7453; AVX1-NEXT: jne .LBB16_117454; AVX1-NEXT: .LBB16_12: # %else107455; AVX1-NEXT: testb $64, %al7456; AVX1-NEXT: jne .LBB16_137457; AVX1-NEXT: .LBB16_14: # %else127458; AVX1-NEXT: testb %al, %al7459; AVX1-NEXT: js .LBB16_157460; AVX1-NEXT: .LBB16_16: # %else147461; AVX1-NEXT: testl $256, %eax # imm = 0x1007462; AVX1-NEXT: jne .LBB16_177463; AVX1-NEXT: .LBB16_18: # %else167464; AVX1-NEXT: testl $512, %eax # imm = 0x2007465; AVX1-NEXT: jne .LBB16_197466; AVX1-NEXT: .LBB16_20: # %else187467; AVX1-NEXT: testl $1024, %eax # imm = 0x4007468; AVX1-NEXT: jne .LBB16_217469; AVX1-NEXT: .LBB16_22: # %else207470; AVX1-NEXT: testl $2048, %eax # imm = 0x8007471; AVX1-NEXT: jne .LBB16_237472; AVX1-NEXT: .LBB16_24: # %else227473; AVX1-NEXT: testl $4096, %eax # imm = 0x10007474; AVX1-NEXT: jne .LBB16_257475; AVX1-NEXT: .LBB16_26: # %else247476; AVX1-NEXT: testl $8192, %eax # imm = 0x20007477; AVX1-NEXT: jne .LBB16_277478; AVX1-NEXT: .LBB16_28: # %else267479; AVX1-NEXT: testl $16384, %eax # imm = 0x40007480; AVX1-NEXT: jne .LBB16_297481; AVX1-NEXT: .LBB16_30: # %else287482; AVX1-NEXT: testl $32768, %eax # imm = 0x80007483; AVX1-NEXT: jne .LBB16_317484; AVX1-NEXT: .LBB16_32: # %else307485; AVX1-NEXT: vzeroupper7486; AVX1-NEXT: retq7487; AVX1-NEXT: .LBB16_1: # %cond.store7488; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)7489; AVX1-NEXT: testb $2, %al7490; AVX1-NEXT: je .LBB16_47491; AVX1-NEXT: .LBB16_3: # %cond.store17492; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)7493; AVX1-NEXT: testb $4, %al7494; AVX1-NEXT: je .LBB16_67495; AVX1-NEXT: .LBB16_5: # %cond.store37496; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)7497; AVX1-NEXT: testb $8, %al7498; AVX1-NEXT: je .LBB16_87499; AVX1-NEXT: .LBB16_7: # %cond.store57500; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)7501; AVX1-NEXT: testb $16, %al7502; AVX1-NEXT: je .LBB16_107503; AVX1-NEXT: .LBB16_9: # %cond.store77504; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)7505; AVX1-NEXT: testb $32, %al7506; AVX1-NEXT: je .LBB16_127507; AVX1-NEXT: .LBB16_11: # %cond.store97508; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)7509; AVX1-NEXT: testb $64, %al7510; AVX1-NEXT: je .LBB16_147511; AVX1-NEXT: .LBB16_13: # %cond.store117512; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)7513; AVX1-NEXT: testb %al, %al7514; AVX1-NEXT: jns .LBB16_167515; AVX1-NEXT: .LBB16_15: # %cond.store137516; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)7517; AVX1-NEXT: testl $256, %eax # imm = 0x1007518; AVX1-NEXT: je .LBB16_187519; AVX1-NEXT: .LBB16_17: # %cond.store157520; AVX1-NEXT: vpextrb $8, %xmm0, 8(%rdi)7521; AVX1-NEXT: testl $512, %eax # imm = 0x2007522; AVX1-NEXT: je .LBB16_207523; AVX1-NEXT: .LBB16_19: # %cond.store177524; AVX1-NEXT: vpextrb $9, %xmm0, 9(%rdi)7525; AVX1-NEXT: testl $1024, %eax # imm = 0x4007526; AVX1-NEXT: je .LBB16_227527; AVX1-NEXT: .LBB16_21: # %cond.store197528; AVX1-NEXT: vpextrb $10, %xmm0, 10(%rdi)7529; AVX1-NEXT: testl $2048, %eax # imm = 0x8007530; AVX1-NEXT: je .LBB16_247531; AVX1-NEXT: .LBB16_23: # %cond.store217532; AVX1-NEXT: vpextrb $11, %xmm0, 11(%rdi)7533; AVX1-NEXT: testl $4096, %eax # imm = 0x10007534; AVX1-NEXT: je .LBB16_267535; AVX1-NEXT: .LBB16_25: # %cond.store237536; AVX1-NEXT: vpextrb $12, %xmm0, 12(%rdi)7537; AVX1-NEXT: testl $8192, %eax # imm = 0x20007538; AVX1-NEXT: je .LBB16_287539; AVX1-NEXT: .LBB16_27: # %cond.store257540; AVX1-NEXT: vpextrb $13, %xmm0, 13(%rdi)7541; AVX1-NEXT: testl $16384, %eax # imm = 0x40007542; AVX1-NEXT: je .LBB16_307543; AVX1-NEXT: .LBB16_29: # %cond.store277544; AVX1-NEXT: vpextrb $14, %xmm0, 14(%rdi)7545; AVX1-NEXT: testl $32768, %eax # imm = 0x80007546; AVX1-NEXT: je .LBB16_327547; AVX1-NEXT: .LBB16_31: # %cond.store297548; AVX1-NEXT: vpextrb $15, %xmm0, 15(%rdi)7549; AVX1-NEXT: vzeroupper7550; AVX1-NEXT: retq7551;7552; AVX2-LABEL: truncstore_v16i16_v16i8:7553; AVX2: # %bb.0:7554; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm27555; AVX2-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm07556; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm37557; AVX2-NEXT: vpackuswb %xmm3, %xmm0, %xmm07558; AVX2-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm17559; AVX2-NEXT: vpmovmskb %xmm1, %eax7560; AVX2-NEXT: xorl $65535, %eax # imm = 0xFFFF7561; AVX2-NEXT: testb $1, %al7562; AVX2-NEXT: jne .LBB16_17563; AVX2-NEXT: # %bb.2: # %else7564; AVX2-NEXT: testb $2, %al7565; AVX2-NEXT: jne .LBB16_37566; AVX2-NEXT: .LBB16_4: # %else27567; AVX2-NEXT: testb $4, %al7568; AVX2-NEXT: jne .LBB16_57569; AVX2-NEXT: .LBB16_6: # %else47570; AVX2-NEXT: testb $8, %al7571; AVX2-NEXT: jne .LBB16_77572; AVX2-NEXT: .LBB16_8: # %else67573; AVX2-NEXT: testb $16, %al7574; AVX2-NEXT: jne .LBB16_97575; AVX2-NEXT: .LBB16_10: # %else87576; AVX2-NEXT: testb $32, %al7577; AVX2-NEXT: jne .LBB16_117578; AVX2-NEXT: .LBB16_12: # %else107579; AVX2-NEXT: testb $64, %al7580; AVX2-NEXT: jne .LBB16_137581; AVX2-NEXT: .LBB16_14: # %else127582; AVX2-NEXT: testb %al, %al7583; AVX2-NEXT: js .LBB16_157584; AVX2-NEXT: .LBB16_16: # %else147585; AVX2-NEXT: testl $256, %eax # imm = 0x1007586; AVX2-NEXT: jne .LBB16_177587; AVX2-NEXT: .LBB16_18: # %else167588; AVX2-NEXT: testl $512, %eax # imm = 0x2007589; AVX2-NEXT: jne .LBB16_197590; AVX2-NEXT: .LBB16_20: # %else187591; AVX2-NEXT: testl $1024, %eax # imm = 0x4007592; AVX2-NEXT: jne .LBB16_217593; AVX2-NEXT: .LBB16_22: # %else207594; AVX2-NEXT: testl $2048, %eax # imm = 0x8007595; AVX2-NEXT: jne .LBB16_237596; AVX2-NEXT: .LBB16_24: # %else227597; AVX2-NEXT: testl $4096, %eax # imm = 0x10007598; AVX2-NEXT: jne .LBB16_257599; AVX2-NEXT: .LBB16_26: # %else247600; AVX2-NEXT: testl $8192, %eax # imm = 0x20007601; AVX2-NEXT: jne .LBB16_277602; AVX2-NEXT: .LBB16_28: # %else267603; AVX2-NEXT: testl $16384, %eax # imm = 0x40007604; AVX2-NEXT: jne .LBB16_297605; AVX2-NEXT: .LBB16_30: # %else287606; AVX2-NEXT: testl $32768, %eax # imm = 0x80007607; AVX2-NEXT: jne .LBB16_317608; AVX2-NEXT: .LBB16_32: # %else307609; AVX2-NEXT: vzeroupper7610; AVX2-NEXT: retq7611; AVX2-NEXT: .LBB16_1: # %cond.store7612; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)7613; AVX2-NEXT: testb $2, %al7614; AVX2-NEXT: je .LBB16_47615; AVX2-NEXT: .LBB16_3: # %cond.store17616; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)7617; AVX2-NEXT: testb $4, %al7618; AVX2-NEXT: je .LBB16_67619; AVX2-NEXT: .LBB16_5: # %cond.store37620; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)7621; AVX2-NEXT: testb $8, %al7622; AVX2-NEXT: je .LBB16_87623; AVX2-NEXT: .LBB16_7: # %cond.store57624; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)7625; AVX2-NEXT: testb $16, %al7626; AVX2-NEXT: je .LBB16_107627; AVX2-NEXT: .LBB16_9: # %cond.store77628; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)7629; AVX2-NEXT: testb $32, %al7630; AVX2-NEXT: je .LBB16_127631; AVX2-NEXT: .LBB16_11: # %cond.store97632; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)7633; AVX2-NEXT: testb $64, %al7634; AVX2-NEXT: je .LBB16_147635; AVX2-NEXT: .LBB16_13: # %cond.store117636; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)7637; AVX2-NEXT: testb %al, %al7638; AVX2-NEXT: jns .LBB16_167639; AVX2-NEXT: .LBB16_15: # %cond.store137640; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)7641; AVX2-NEXT: testl $256, %eax # imm = 0x1007642; AVX2-NEXT: je .LBB16_187643; AVX2-NEXT: .LBB16_17: # %cond.store157644; AVX2-NEXT: vpextrb $8, %xmm0, 8(%rdi)7645; AVX2-NEXT: testl $512, %eax # imm = 0x2007646; AVX2-NEXT: je .LBB16_207647; AVX2-NEXT: .LBB16_19: # %cond.store177648; AVX2-NEXT: vpextrb $9, %xmm0, 9(%rdi)7649; AVX2-NEXT: testl $1024, %eax # imm = 0x4007650; AVX2-NEXT: je .LBB16_227651; AVX2-NEXT: .LBB16_21: # %cond.store197652; AVX2-NEXT: vpextrb $10, %xmm0, 10(%rdi)7653; AVX2-NEXT: testl $2048, %eax # imm = 0x8007654; AVX2-NEXT: je .LBB16_247655; AVX2-NEXT: .LBB16_23: # %cond.store217656; AVX2-NEXT: vpextrb $11, %xmm0, 11(%rdi)7657; AVX2-NEXT: testl $4096, %eax # imm = 0x10007658; AVX2-NEXT: je .LBB16_267659; AVX2-NEXT: .LBB16_25: # %cond.store237660; AVX2-NEXT: vpextrb $12, %xmm0, 12(%rdi)7661; AVX2-NEXT: testl $8192, %eax # imm = 0x20007662; AVX2-NEXT: je .LBB16_287663; AVX2-NEXT: .LBB16_27: # %cond.store257664; AVX2-NEXT: vpextrb $13, %xmm0, 13(%rdi)7665; AVX2-NEXT: testl $16384, %eax # imm = 0x40007666; AVX2-NEXT: je .LBB16_307667; AVX2-NEXT: .LBB16_29: # %cond.store277668; AVX2-NEXT: vpextrb $14, %xmm0, 14(%rdi)7669; AVX2-NEXT: testl $32768, %eax # imm = 0x80007670; AVX2-NEXT: je .LBB16_327671; AVX2-NEXT: .LBB16_31: # %cond.store297672; AVX2-NEXT: vpextrb $15, %xmm0, 15(%rdi)7673; AVX2-NEXT: vzeroupper7674; AVX2-NEXT: retq7675;7676; AVX512F-LABEL: truncstore_v16i16_v16i8:7677; AVX512F: # %bb.0:7678; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm27679; AVX512F-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm17680; AVX512F-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm07681; AVX512F-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero7682; AVX512F-NEXT: vpmovdb %zmm0, %xmm07683; AVX512F-NEXT: vpmovmskb %xmm1, %eax7684; AVX512F-NEXT: xorl $65535, %eax # imm = 0xFFFF7685; AVX512F-NEXT: testb $1, %al7686; AVX512F-NEXT: jne .LBB16_17687; AVX512F-NEXT: # %bb.2: # %else7688; AVX512F-NEXT: testb $2, %al7689; AVX512F-NEXT: jne .LBB16_37690; AVX512F-NEXT: .LBB16_4: # %else27691; AVX512F-NEXT: testb $4, %al7692; AVX512F-NEXT: jne .LBB16_57693; AVX512F-NEXT: .LBB16_6: # %else47694; AVX512F-NEXT: testb $8, %al7695; AVX512F-NEXT: jne .LBB16_77696; AVX512F-NEXT: .LBB16_8: # %else67697; AVX512F-NEXT: testb $16, %al7698; AVX512F-NEXT: jne .LBB16_97699; AVX512F-NEXT: .LBB16_10: # %else87700; AVX512F-NEXT: testb $32, %al7701; AVX512F-NEXT: jne .LBB16_117702; AVX512F-NEXT: .LBB16_12: # %else107703; AVX512F-NEXT: testb $64, %al7704; AVX512F-NEXT: jne .LBB16_137705; AVX512F-NEXT: .LBB16_14: # %else127706; AVX512F-NEXT: testb %al, %al7707; AVX512F-NEXT: js .LBB16_157708; AVX512F-NEXT: .LBB16_16: # %else147709; AVX512F-NEXT: testl $256, %eax # imm = 0x1007710; AVX512F-NEXT: jne .LBB16_177711; AVX512F-NEXT: .LBB16_18: # %else167712; AVX512F-NEXT: testl $512, %eax # imm = 0x2007713; AVX512F-NEXT: jne .LBB16_197714; AVX512F-NEXT: .LBB16_20: # %else187715; AVX512F-NEXT: testl $1024, %eax # imm = 0x4007716; AVX512F-NEXT: jne .LBB16_217717; AVX512F-NEXT: .LBB16_22: # %else207718; AVX512F-NEXT: testl $2048, %eax # imm = 0x8007719; AVX512F-NEXT: jne .LBB16_237720; AVX512F-NEXT: .LBB16_24: # %else227721; AVX512F-NEXT: testl $4096, %eax # imm = 0x10007722; AVX512F-NEXT: jne .LBB16_257723; AVX512F-NEXT: .LBB16_26: # %else247724; AVX512F-NEXT: testl $8192, %eax # imm = 0x20007725; AVX512F-NEXT: jne .LBB16_277726; AVX512F-NEXT: .LBB16_28: # %else267727; AVX512F-NEXT: testl $16384, %eax # imm = 0x40007728; AVX512F-NEXT: jne .LBB16_297729; AVX512F-NEXT: .LBB16_30: # %else287730; AVX512F-NEXT: testl $32768, %eax # imm = 0x80007731; AVX512F-NEXT: jne .LBB16_317732; AVX512F-NEXT: .LBB16_32: # %else307733; AVX512F-NEXT: vzeroupper7734; AVX512F-NEXT: retq7735; AVX512F-NEXT: .LBB16_1: # %cond.store7736; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)7737; AVX512F-NEXT: testb $2, %al7738; AVX512F-NEXT: je .LBB16_47739; AVX512F-NEXT: .LBB16_3: # %cond.store17740; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)7741; AVX512F-NEXT: testb $4, %al7742; AVX512F-NEXT: je .LBB16_67743; AVX512F-NEXT: .LBB16_5: # %cond.store37744; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)7745; AVX512F-NEXT: testb $8, %al7746; AVX512F-NEXT: je .LBB16_87747; AVX512F-NEXT: .LBB16_7: # %cond.store57748; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)7749; AVX512F-NEXT: testb $16, %al7750; AVX512F-NEXT: je .LBB16_107751; AVX512F-NEXT: .LBB16_9: # %cond.store77752; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)7753; AVX512F-NEXT: testb $32, %al7754; AVX512F-NEXT: je .LBB16_127755; AVX512F-NEXT: .LBB16_11: # %cond.store97756; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)7757; AVX512F-NEXT: testb $64, %al7758; AVX512F-NEXT: je .LBB16_147759; AVX512F-NEXT: .LBB16_13: # %cond.store117760; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)7761; AVX512F-NEXT: testb %al, %al7762; AVX512F-NEXT: jns .LBB16_167763; AVX512F-NEXT: .LBB16_15: # %cond.store137764; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)7765; AVX512F-NEXT: testl $256, %eax # imm = 0x1007766; AVX512F-NEXT: je .LBB16_187767; AVX512F-NEXT: .LBB16_17: # %cond.store157768; AVX512F-NEXT: vpextrb $8, %xmm0, 8(%rdi)7769; AVX512F-NEXT: testl $512, %eax # imm = 0x2007770; AVX512F-NEXT: je .LBB16_207771; AVX512F-NEXT: .LBB16_19: # %cond.store177772; AVX512F-NEXT: vpextrb $9, %xmm0, 9(%rdi)7773; AVX512F-NEXT: testl $1024, %eax # imm = 0x4007774; AVX512F-NEXT: je .LBB16_227775; AVX512F-NEXT: .LBB16_21: # %cond.store197776; AVX512F-NEXT: vpextrb $10, %xmm0, 10(%rdi)7777; AVX512F-NEXT: testl $2048, %eax # imm = 0x8007778; AVX512F-NEXT: je .LBB16_247779; AVX512F-NEXT: .LBB16_23: # %cond.store217780; AVX512F-NEXT: vpextrb $11, %xmm0, 11(%rdi)7781; AVX512F-NEXT: testl $4096, %eax # imm = 0x10007782; AVX512F-NEXT: je .LBB16_267783; AVX512F-NEXT: .LBB16_25: # %cond.store237784; AVX512F-NEXT: vpextrb $12, %xmm0, 12(%rdi)7785; AVX512F-NEXT: testl $8192, %eax # imm = 0x20007786; AVX512F-NEXT: je .LBB16_287787; AVX512F-NEXT: .LBB16_27: # %cond.store257788; AVX512F-NEXT: vpextrb $13, %xmm0, 13(%rdi)7789; AVX512F-NEXT: testl $16384, %eax # imm = 0x40007790; AVX512F-NEXT: je .LBB16_307791; AVX512F-NEXT: .LBB16_29: # %cond.store277792; AVX512F-NEXT: vpextrb $14, %xmm0, 14(%rdi)7793; AVX512F-NEXT: testl $32768, %eax # imm = 0x80007794; AVX512F-NEXT: je .LBB16_327795; AVX512F-NEXT: .LBB16_31: # %cond.store297796; AVX512F-NEXT: vpextrb $15, %xmm0, 15(%rdi)7797; AVX512F-NEXT: vzeroupper7798; AVX512F-NEXT: retq7799;7800; AVX512FVL-LABEL: truncstore_v16i16_v16i8:7801; AVX512FVL: # %bb.0:7802; AVX512FVL-NEXT: vpxor %xmm2, %xmm2, %xmm27803; AVX512FVL-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm17804; AVX512FVL-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm07805; AVX512FVL-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],zero7806; AVX512FVL-NEXT: vpmovdb %zmm0, %xmm07807; AVX512FVL-NEXT: vpmovmskb %xmm1, %eax7808; AVX512FVL-NEXT: xorl $65535, %eax # imm = 0xFFFF7809; AVX512FVL-NEXT: testb $1, %al7810; AVX512FVL-NEXT: jne .LBB16_17811; AVX512FVL-NEXT: # %bb.2: # %else7812; AVX512FVL-NEXT: testb $2, %al7813; AVX512FVL-NEXT: jne .LBB16_37814; AVX512FVL-NEXT: .LBB16_4: # %else27815; AVX512FVL-NEXT: testb $4, %al7816; AVX512FVL-NEXT: jne .LBB16_57817; AVX512FVL-NEXT: .LBB16_6: # %else47818; AVX512FVL-NEXT: testb $8, %al7819; AVX512FVL-NEXT: jne .LBB16_77820; AVX512FVL-NEXT: .LBB16_8: # %else67821; AVX512FVL-NEXT: testb $16, %al7822; AVX512FVL-NEXT: jne .LBB16_97823; AVX512FVL-NEXT: .LBB16_10: # %else87824; AVX512FVL-NEXT: testb $32, %al7825; AVX512FVL-NEXT: jne .LBB16_117826; AVX512FVL-NEXT: .LBB16_12: # %else107827; AVX512FVL-NEXT: testb $64, %al7828; AVX512FVL-NEXT: jne .LBB16_137829; AVX512FVL-NEXT: .LBB16_14: # %else127830; AVX512FVL-NEXT: testb %al, %al7831; AVX512FVL-NEXT: js .LBB16_157832; AVX512FVL-NEXT: .LBB16_16: # %else147833; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1007834; AVX512FVL-NEXT: jne .LBB16_177835; AVX512FVL-NEXT: .LBB16_18: # %else167836; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2007837; AVX512FVL-NEXT: jne .LBB16_197838; AVX512FVL-NEXT: .LBB16_20: # %else187839; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4007840; AVX512FVL-NEXT: jne .LBB16_217841; AVX512FVL-NEXT: .LBB16_22: # %else207842; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8007843; AVX512FVL-NEXT: jne .LBB16_237844; AVX512FVL-NEXT: .LBB16_24: # %else227845; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10007846; AVX512FVL-NEXT: jne .LBB16_257847; AVX512FVL-NEXT: .LBB16_26: # %else247848; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20007849; AVX512FVL-NEXT: jne .LBB16_277850; AVX512FVL-NEXT: .LBB16_28: # %else267851; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40007852; AVX512FVL-NEXT: jne .LBB16_297853; AVX512FVL-NEXT: .LBB16_30: # %else287854; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80007855; AVX512FVL-NEXT: jne .LBB16_317856; AVX512FVL-NEXT: .LBB16_32: # %else307857; AVX512FVL-NEXT: vzeroupper7858; AVX512FVL-NEXT: retq7859; AVX512FVL-NEXT: .LBB16_1: # %cond.store7860; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)7861; AVX512FVL-NEXT: testb $2, %al7862; AVX512FVL-NEXT: je .LBB16_47863; AVX512FVL-NEXT: .LBB16_3: # %cond.store17864; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)7865; AVX512FVL-NEXT: testb $4, %al7866; AVX512FVL-NEXT: je .LBB16_67867; AVX512FVL-NEXT: .LBB16_5: # %cond.store37868; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)7869; AVX512FVL-NEXT: testb $8, %al7870; AVX512FVL-NEXT: je .LBB16_87871; AVX512FVL-NEXT: .LBB16_7: # %cond.store57872; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)7873; AVX512FVL-NEXT: testb $16, %al7874; AVX512FVL-NEXT: je .LBB16_107875; AVX512FVL-NEXT: .LBB16_9: # %cond.store77876; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)7877; AVX512FVL-NEXT: testb $32, %al7878; AVX512FVL-NEXT: je .LBB16_127879; AVX512FVL-NEXT: .LBB16_11: # %cond.store97880; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)7881; AVX512FVL-NEXT: testb $64, %al7882; AVX512FVL-NEXT: je .LBB16_147883; AVX512FVL-NEXT: .LBB16_13: # %cond.store117884; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)7885; AVX512FVL-NEXT: testb %al, %al7886; AVX512FVL-NEXT: jns .LBB16_167887; AVX512FVL-NEXT: .LBB16_15: # %cond.store137888; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)7889; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1007890; AVX512FVL-NEXT: je .LBB16_187891; AVX512FVL-NEXT: .LBB16_17: # %cond.store157892; AVX512FVL-NEXT: vpextrb $8, %xmm0, 8(%rdi)7893; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2007894; AVX512FVL-NEXT: je .LBB16_207895; AVX512FVL-NEXT: .LBB16_19: # %cond.store177896; AVX512FVL-NEXT: vpextrb $9, %xmm0, 9(%rdi)7897; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4007898; AVX512FVL-NEXT: je .LBB16_227899; AVX512FVL-NEXT: .LBB16_21: # %cond.store197900; AVX512FVL-NEXT: vpextrb $10, %xmm0, 10(%rdi)7901; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8007902; AVX512FVL-NEXT: je .LBB16_247903; AVX512FVL-NEXT: .LBB16_23: # %cond.store217904; AVX512FVL-NEXT: vpextrb $11, %xmm0, 11(%rdi)7905; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10007906; AVX512FVL-NEXT: je .LBB16_267907; AVX512FVL-NEXT: .LBB16_25: # %cond.store237908; AVX512FVL-NEXT: vpextrb $12, %xmm0, 12(%rdi)7909; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20007910; AVX512FVL-NEXT: je .LBB16_287911; AVX512FVL-NEXT: .LBB16_27: # %cond.store257912; AVX512FVL-NEXT: vpextrb $13, %xmm0, 13(%rdi)7913; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40007914; AVX512FVL-NEXT: je .LBB16_307915; AVX512FVL-NEXT: .LBB16_29: # %cond.store277916; AVX512FVL-NEXT: vpextrb $14, %xmm0, 14(%rdi)7917; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80007918; AVX512FVL-NEXT: je .LBB16_327919; AVX512FVL-NEXT: .LBB16_31: # %cond.store297920; AVX512FVL-NEXT: vpextrb $15, %xmm0, 15(%rdi)7921; AVX512FVL-NEXT: vzeroupper7922; AVX512FVL-NEXT: retq7923;7924; AVX512BW-LABEL: truncstore_v16i16_v16i8:7925; AVX512BW: # %bb.0:7926; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm17927; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07928; AVX512BW-NEXT: vptestmb %zmm1, %zmm1, %k07929; AVX512BW-NEXT: kmovw %k0, %k17930; AVX512BW-NEXT: vpmovuswb %zmm0, %ymm07931; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}7932; AVX512BW-NEXT: vzeroupper7933; AVX512BW-NEXT: retq7934;7935; AVX512BWVL-LABEL: truncstore_v16i16_v16i8:7936; AVX512BWVL: # %bb.0:7937; AVX512BWVL-NEXT: vptestmb %xmm1, %xmm1, %k17938; AVX512BWVL-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm07939; AVX512BWVL-NEXT: vpmovwb %ymm0, (%rdi) {%k1}7940; AVX512BWVL-NEXT: vzeroupper7941; AVX512BWVL-NEXT: retq7942 %a = icmp ne <16 x i8> %mask, zeroinitializer7943 %b = icmp ult <16 x i16> %x, <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>7944 %c = select <16 x i1> %b, <16 x i16> %x, <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>7945 %d = trunc <16 x i16> %c to <16 x i8>7946 call void @llvm.masked.store.v16i8.p0(<16 x i8> %d, ptr %p, i32 1, <16 x i1> %a)7947 ret void7948}7949 7950define void @truncstore_v8i16_v8i8(<8 x i16> %x, ptr %p, <8 x i16> %mask) {7951; SSE2-LABEL: truncstore_v8i16_v8i8:7952; SSE2: # %bb.0:7953; SSE2-NEXT: pxor %xmm2, %xmm27954; SSE2-NEXT: movdqa %xmm0, %xmm37955; SSE2-NEXT: psubusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm37956; SSE2-NEXT: psubw %xmm3, %xmm07957; SSE2-NEXT: packuswb %xmm0, %xmm07958; SSE2-NEXT: pcmpeqw %xmm1, %xmm27959; SSE2-NEXT: packsswb %xmm2, %xmm27960; SSE2-NEXT: pmovmskb %xmm2, %eax7961; SSE2-NEXT: notl %eax7962; SSE2-NEXT: testb $1, %al7963; SSE2-NEXT: movd %xmm0, %ecx7964; SSE2-NEXT: jne .LBB17_17965; SSE2-NEXT: # %bb.2: # %else7966; SSE2-NEXT: testb $2, %al7967; SSE2-NEXT: jne .LBB17_37968; SSE2-NEXT: .LBB17_4: # %else27969; SSE2-NEXT: testb $4, %al7970; SSE2-NEXT: jne .LBB17_57971; SSE2-NEXT: .LBB17_6: # %else47972; SSE2-NEXT: testb $8, %al7973; SSE2-NEXT: je .LBB17_87974; SSE2-NEXT: .LBB17_7: # %cond.store57975; SSE2-NEXT: shrl $24, %ecx7976; SSE2-NEXT: movb %cl, 3(%rdi)7977; SSE2-NEXT: .LBB17_8: # %else67978; SSE2-NEXT: testb $16, %al7979; SSE2-NEXT: pextrw $2, %xmm0, %ecx7980; SSE2-NEXT: je .LBB17_107981; SSE2-NEXT: # %bb.9: # %cond.store77982; SSE2-NEXT: movb %cl, 4(%rdi)7983; SSE2-NEXT: .LBB17_10: # %else87984; SSE2-NEXT: testb $32, %al7985; SSE2-NEXT: je .LBB17_127986; SSE2-NEXT: # %bb.11: # %cond.store97987; SSE2-NEXT: movb %ch, 5(%rdi)7988; SSE2-NEXT: .LBB17_12: # %else107989; SSE2-NEXT: testb $64, %al7990; SSE2-NEXT: pextrw $3, %xmm0, %ecx7991; SSE2-NEXT: jne .LBB17_137992; SSE2-NEXT: # %bb.14: # %else127993; SSE2-NEXT: testb $-128, %al7994; SSE2-NEXT: jne .LBB17_157995; SSE2-NEXT: .LBB17_16: # %else147996; SSE2-NEXT: retq7997; SSE2-NEXT: .LBB17_1: # %cond.store7998; SSE2-NEXT: movb %cl, (%rdi)7999; SSE2-NEXT: testb $2, %al8000; SSE2-NEXT: je .LBB17_48001; SSE2-NEXT: .LBB17_3: # %cond.store18002; SSE2-NEXT: movb %ch, 1(%rdi)8003; SSE2-NEXT: testb $4, %al8004; SSE2-NEXT: je .LBB17_68005; SSE2-NEXT: .LBB17_5: # %cond.store38006; SSE2-NEXT: movl %ecx, %edx8007; SSE2-NEXT: shrl $16, %edx8008; SSE2-NEXT: movb %dl, 2(%rdi)8009; SSE2-NEXT: testb $8, %al8010; SSE2-NEXT: jne .LBB17_78011; SSE2-NEXT: jmp .LBB17_88012; SSE2-NEXT: .LBB17_13: # %cond.store118013; SSE2-NEXT: movb %cl, 6(%rdi)8014; SSE2-NEXT: testb $-128, %al8015; SSE2-NEXT: je .LBB17_168016; SSE2-NEXT: .LBB17_15: # %cond.store138017; SSE2-NEXT: movb %ch, 7(%rdi)8018; SSE2-NEXT: retq8019;8020; SSE4-LABEL: truncstore_v8i16_v8i8:8021; SSE4: # %bb.0:8022; SSE4-NEXT: pxor %xmm2, %xmm28023; SSE4-NEXT: pminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm08024; SSE4-NEXT: packuswb %xmm0, %xmm08025; SSE4-NEXT: pcmpeqw %xmm1, %xmm28026; SSE4-NEXT: packsswb %xmm2, %xmm28027; SSE4-NEXT: pmovmskb %xmm2, %eax8028; SSE4-NEXT: notl %eax8029; SSE4-NEXT: testb $1, %al8030; SSE4-NEXT: jne .LBB17_18031; SSE4-NEXT: # %bb.2: # %else8032; SSE4-NEXT: testb $2, %al8033; SSE4-NEXT: jne .LBB17_38034; SSE4-NEXT: .LBB17_4: # %else28035; SSE4-NEXT: testb $4, %al8036; SSE4-NEXT: jne .LBB17_58037; SSE4-NEXT: .LBB17_6: # %else48038; SSE4-NEXT: testb $8, %al8039; SSE4-NEXT: jne .LBB17_78040; SSE4-NEXT: .LBB17_8: # %else68041; SSE4-NEXT: testb $16, %al8042; SSE4-NEXT: jne .LBB17_98043; SSE4-NEXT: .LBB17_10: # %else88044; SSE4-NEXT: testb $32, %al8045; SSE4-NEXT: jne .LBB17_118046; SSE4-NEXT: .LBB17_12: # %else108047; SSE4-NEXT: testb $64, %al8048; SSE4-NEXT: jne .LBB17_138049; SSE4-NEXT: .LBB17_14: # %else128050; SSE4-NEXT: testb $-128, %al8051; SSE4-NEXT: jne .LBB17_158052; SSE4-NEXT: .LBB17_16: # %else148053; SSE4-NEXT: retq8054; SSE4-NEXT: .LBB17_1: # %cond.store8055; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)8056; SSE4-NEXT: testb $2, %al8057; SSE4-NEXT: je .LBB17_48058; SSE4-NEXT: .LBB17_3: # %cond.store18059; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)8060; SSE4-NEXT: testb $4, %al8061; SSE4-NEXT: je .LBB17_68062; SSE4-NEXT: .LBB17_5: # %cond.store38063; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)8064; SSE4-NEXT: testb $8, %al8065; SSE4-NEXT: je .LBB17_88066; SSE4-NEXT: .LBB17_7: # %cond.store58067; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)8068; SSE4-NEXT: testb $16, %al8069; SSE4-NEXT: je .LBB17_108070; SSE4-NEXT: .LBB17_9: # %cond.store78071; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)8072; SSE4-NEXT: testb $32, %al8073; SSE4-NEXT: je .LBB17_128074; SSE4-NEXT: .LBB17_11: # %cond.store98075; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)8076; SSE4-NEXT: testb $64, %al8077; SSE4-NEXT: je .LBB17_148078; SSE4-NEXT: .LBB17_13: # %cond.store118079; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)8080; SSE4-NEXT: testb $-128, %al8081; SSE4-NEXT: je .LBB17_168082; SSE4-NEXT: .LBB17_15: # %cond.store138083; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)8084; SSE4-NEXT: retq8085;8086; AVX-LABEL: truncstore_v8i16_v8i8:8087; AVX: # %bb.0:8088; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm28089; AVX-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm08090; AVX-NEXT: vpackuswb %xmm0, %xmm0, %xmm08091; AVX-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm18092; AVX-NEXT: vpacksswb %xmm1, %xmm1, %xmm18093; AVX-NEXT: vpmovmskb %xmm1, %eax8094; AVX-NEXT: notl %eax8095; AVX-NEXT: testb $1, %al8096; AVX-NEXT: jne .LBB17_18097; AVX-NEXT: # %bb.2: # %else8098; AVX-NEXT: testb $2, %al8099; AVX-NEXT: jne .LBB17_38100; AVX-NEXT: .LBB17_4: # %else28101; AVX-NEXT: testb $4, %al8102; AVX-NEXT: jne .LBB17_58103; AVX-NEXT: .LBB17_6: # %else48104; AVX-NEXT: testb $8, %al8105; AVX-NEXT: jne .LBB17_78106; AVX-NEXT: .LBB17_8: # %else68107; AVX-NEXT: testb $16, %al8108; AVX-NEXT: jne .LBB17_98109; AVX-NEXT: .LBB17_10: # %else88110; AVX-NEXT: testb $32, %al8111; AVX-NEXT: jne .LBB17_118112; AVX-NEXT: .LBB17_12: # %else108113; AVX-NEXT: testb $64, %al8114; AVX-NEXT: jne .LBB17_138115; AVX-NEXT: .LBB17_14: # %else128116; AVX-NEXT: testb $-128, %al8117; AVX-NEXT: jne .LBB17_158118; AVX-NEXT: .LBB17_16: # %else148119; AVX-NEXT: retq8120; AVX-NEXT: .LBB17_1: # %cond.store8121; AVX-NEXT: vpextrb $0, %xmm0, (%rdi)8122; AVX-NEXT: testb $2, %al8123; AVX-NEXT: je .LBB17_48124; AVX-NEXT: .LBB17_3: # %cond.store18125; AVX-NEXT: vpextrb $1, %xmm0, 1(%rdi)8126; AVX-NEXT: testb $4, %al8127; AVX-NEXT: je .LBB17_68128; AVX-NEXT: .LBB17_5: # %cond.store38129; AVX-NEXT: vpextrb $2, %xmm0, 2(%rdi)8130; AVX-NEXT: testb $8, %al8131; AVX-NEXT: je .LBB17_88132; AVX-NEXT: .LBB17_7: # %cond.store58133; AVX-NEXT: vpextrb $3, %xmm0, 3(%rdi)8134; AVX-NEXT: testb $16, %al8135; AVX-NEXT: je .LBB17_108136; AVX-NEXT: .LBB17_9: # %cond.store78137; AVX-NEXT: vpextrb $4, %xmm0, 4(%rdi)8138; AVX-NEXT: testb $32, %al8139; AVX-NEXT: je .LBB17_128140; AVX-NEXT: .LBB17_11: # %cond.store98141; AVX-NEXT: vpextrb $5, %xmm0, 5(%rdi)8142; AVX-NEXT: testb $64, %al8143; AVX-NEXT: je .LBB17_148144; AVX-NEXT: .LBB17_13: # %cond.store118145; AVX-NEXT: vpextrb $6, %xmm0, 6(%rdi)8146; AVX-NEXT: testb $-128, %al8147; AVX-NEXT: je .LBB17_168148; AVX-NEXT: .LBB17_15: # %cond.store138149; AVX-NEXT: vpextrb $7, %xmm0, 7(%rdi)8150; AVX-NEXT: retq8151;8152; AVX512F-LABEL: truncstore_v8i16_v8i8:8153; AVX512F: # %bb.0:8154; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm28155; AVX512F-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm18156; AVX512F-NEXT: vpternlogq {{.*#+}} zmm1 = ~zmm18157; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm18158; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k08159; AVX512F-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm08160; AVX512F-NEXT: vpackuswb %xmm0, %xmm0, %xmm08161; AVX512F-NEXT: kmovw %k0, %eax8162; AVX512F-NEXT: testb $1, %al8163; AVX512F-NEXT: jne .LBB17_18164; AVX512F-NEXT: # %bb.2: # %else8165; AVX512F-NEXT: testb $2, %al8166; AVX512F-NEXT: jne .LBB17_38167; AVX512F-NEXT: .LBB17_4: # %else28168; AVX512F-NEXT: testb $4, %al8169; AVX512F-NEXT: jne .LBB17_58170; AVX512F-NEXT: .LBB17_6: # %else48171; AVX512F-NEXT: testb $8, %al8172; AVX512F-NEXT: jne .LBB17_78173; AVX512F-NEXT: .LBB17_8: # %else68174; AVX512F-NEXT: testb $16, %al8175; AVX512F-NEXT: jne .LBB17_98176; AVX512F-NEXT: .LBB17_10: # %else88177; AVX512F-NEXT: testb $32, %al8178; AVX512F-NEXT: jne .LBB17_118179; AVX512F-NEXT: .LBB17_12: # %else108180; AVX512F-NEXT: testb $64, %al8181; AVX512F-NEXT: jne .LBB17_138182; AVX512F-NEXT: .LBB17_14: # %else128183; AVX512F-NEXT: testb $-128, %al8184; AVX512F-NEXT: jne .LBB17_158185; AVX512F-NEXT: .LBB17_16: # %else148186; AVX512F-NEXT: vzeroupper8187; AVX512F-NEXT: retq8188; AVX512F-NEXT: .LBB17_1: # %cond.store8189; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)8190; AVX512F-NEXT: testb $2, %al8191; AVX512F-NEXT: je .LBB17_48192; AVX512F-NEXT: .LBB17_3: # %cond.store18193; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)8194; AVX512F-NEXT: testb $4, %al8195; AVX512F-NEXT: je .LBB17_68196; AVX512F-NEXT: .LBB17_5: # %cond.store38197; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)8198; AVX512F-NEXT: testb $8, %al8199; AVX512F-NEXT: je .LBB17_88200; AVX512F-NEXT: .LBB17_7: # %cond.store58201; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)8202; AVX512F-NEXT: testb $16, %al8203; AVX512F-NEXT: je .LBB17_108204; AVX512F-NEXT: .LBB17_9: # %cond.store78205; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)8206; AVX512F-NEXT: testb $32, %al8207; AVX512F-NEXT: je .LBB17_128208; AVX512F-NEXT: .LBB17_11: # %cond.store98209; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)8210; AVX512F-NEXT: testb $64, %al8211; AVX512F-NEXT: je .LBB17_148212; AVX512F-NEXT: .LBB17_13: # %cond.store118213; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)8214; AVX512F-NEXT: testb $-128, %al8215; AVX512F-NEXT: je .LBB17_168216; AVX512F-NEXT: .LBB17_15: # %cond.store138217; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)8218; AVX512F-NEXT: vzeroupper8219; AVX512F-NEXT: retq8220;8221; AVX512FVL-LABEL: truncstore_v8i16_v8i8:8222; AVX512FVL: # %bb.0:8223; AVX512FVL-NEXT: vpxor %xmm2, %xmm2, %xmm28224; AVX512FVL-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm18225; AVX512FVL-NEXT: vpternlogq {{.*#+}} xmm1 = ~xmm18226; AVX512FVL-NEXT: vpmovsxwd %xmm1, %ymm18227; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k08228; AVX512FVL-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm08229; AVX512FVL-NEXT: vpackuswb %xmm0, %xmm0, %xmm08230; AVX512FVL-NEXT: kmovw %k0, %eax8231; AVX512FVL-NEXT: testb $1, %al8232; AVX512FVL-NEXT: jne .LBB17_18233; AVX512FVL-NEXT: # %bb.2: # %else8234; AVX512FVL-NEXT: testb $2, %al8235; AVX512FVL-NEXT: jne .LBB17_38236; AVX512FVL-NEXT: .LBB17_4: # %else28237; AVX512FVL-NEXT: testb $4, %al8238; AVX512FVL-NEXT: jne .LBB17_58239; AVX512FVL-NEXT: .LBB17_6: # %else48240; AVX512FVL-NEXT: testb $8, %al8241; AVX512FVL-NEXT: jne .LBB17_78242; AVX512FVL-NEXT: .LBB17_8: # %else68243; AVX512FVL-NEXT: testb $16, %al8244; AVX512FVL-NEXT: jne .LBB17_98245; AVX512FVL-NEXT: .LBB17_10: # %else88246; AVX512FVL-NEXT: testb $32, %al8247; AVX512FVL-NEXT: jne .LBB17_118248; AVX512FVL-NEXT: .LBB17_12: # %else108249; AVX512FVL-NEXT: testb $64, %al8250; AVX512FVL-NEXT: jne .LBB17_138251; AVX512FVL-NEXT: .LBB17_14: # %else128252; AVX512FVL-NEXT: testb $-128, %al8253; AVX512FVL-NEXT: jne .LBB17_158254; AVX512FVL-NEXT: .LBB17_16: # %else148255; AVX512FVL-NEXT: vzeroupper8256; AVX512FVL-NEXT: retq8257; AVX512FVL-NEXT: .LBB17_1: # %cond.store8258; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)8259; AVX512FVL-NEXT: testb $2, %al8260; AVX512FVL-NEXT: je .LBB17_48261; AVX512FVL-NEXT: .LBB17_3: # %cond.store18262; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)8263; AVX512FVL-NEXT: testb $4, %al8264; AVX512FVL-NEXT: je .LBB17_68265; AVX512FVL-NEXT: .LBB17_5: # %cond.store38266; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)8267; AVX512FVL-NEXT: testb $8, %al8268; AVX512FVL-NEXT: je .LBB17_88269; AVX512FVL-NEXT: .LBB17_7: # %cond.store58270; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)8271; AVX512FVL-NEXT: testb $16, %al8272; AVX512FVL-NEXT: je .LBB17_108273; AVX512FVL-NEXT: .LBB17_9: # %cond.store78274; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)8275; AVX512FVL-NEXT: testb $32, %al8276; AVX512FVL-NEXT: je .LBB17_128277; AVX512FVL-NEXT: .LBB17_11: # %cond.store98278; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)8279; AVX512FVL-NEXT: testb $64, %al8280; AVX512FVL-NEXT: je .LBB17_148281; AVX512FVL-NEXT: .LBB17_13: # %cond.store118282; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)8283; AVX512FVL-NEXT: testb $-128, %al8284; AVX512FVL-NEXT: je .LBB17_168285; AVX512FVL-NEXT: .LBB17_15: # %cond.store138286; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)8287; AVX512FVL-NEXT: vzeroupper8288; AVX512FVL-NEXT: retq8289;8290; AVX512BW-LABEL: truncstore_v8i16_v8i8:8291; AVX512BW: # %bb.0:8292; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm18293; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm08294; AVX512BW-NEXT: vptestmw %zmm1, %zmm1, %k08295; AVX512BW-NEXT: kshiftlq $56, %k0, %k08296; AVX512BW-NEXT: kshiftrq $56, %k0, %k18297; AVX512BW-NEXT: vpmovuswb %zmm0, %ymm08298; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}8299; AVX512BW-NEXT: vzeroupper8300; AVX512BW-NEXT: retq8301;8302; AVX512BWVL-LABEL: truncstore_v8i16_v8i8:8303; AVX512BWVL: # %bb.0:8304; AVX512BWVL-NEXT: vptestmw %xmm1, %xmm1, %k18305; AVX512BWVL-NEXT: vpminuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm08306; AVX512BWVL-NEXT: vpmovwb %xmm0, (%rdi) {%k1}8307; AVX512BWVL-NEXT: retq8308 %a = icmp ne <8 x i16> %mask, zeroinitializer8309 %b = icmp ult <8 x i16> %x, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>8310 %c = select <8 x i1> %b, <8 x i16> %x, <8 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>8311 %d = trunc <8 x i16> %c to <8 x i8>8312 call void @llvm.masked.store.v8i8.p0(<8 x i8> %d, ptr %p, i32 1, <8 x i1> %a)8313 ret void8314}8315 8316declare void @llvm.masked.store.v8i32.p0(<8 x i32>, ptr, i32, <8 x i1>)8317declare void @llvm.masked.store.v8i16.p0(<8 x i16>, ptr, i32, <8 x i1>)8318declare void @llvm.masked.store.v8i8.p0(<8 x i8>, ptr, i32, <8 x i1>)8319declare void @llvm.masked.store.v4i32.p0(<4 x i32>, ptr, i32, <4 x i1>)8320declare void @llvm.masked.store.v4i16.p0(<4 x i16>, ptr, i32, <4 x i1>)8321declare void @llvm.masked.store.v4i8.p0(<4 x i8>, ptr, i32, <4 x i1>)8322declare void @llvm.masked.store.v2i32.p0(<2 x i32>, ptr, i32, <2 x i1>)8323declare void @llvm.masked.store.v2i16.p0(<2 x i16>, ptr, i32, <2 x i1>)8324declare void @llvm.masked.store.v2i8.p0(<2 x i8>, ptr, i32, <2 x i1>)8325declare void @llvm.masked.store.v16i16.p0(<16 x i16>, ptr, i32, <16 x i1>)8326declare void @llvm.masked.store.v16i8.p0(<16 x i8>, ptr, i32, <16 x i1>)8327declare void @llvm.masked.store.v32i8.p0(<32 x i8>, ptr, i32, <32 x i1>)8328