7578 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 %xmm6, %xmm615; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]16; SSE2-NEXT: pcmpeqd %xmm6, %xmm517; SSE2-NEXT: pcmpeqd %xmm6, %xmm418; SSE2-NEXT: packssdw %xmm5, %xmm419; SSE2-NEXT: packsswb %xmm4, %xmm420; SSE2-NEXT: pmovmskb %xmm4, %eax21; SSE2-NEXT: notl %eax22; SSE2-NEXT: testb $1, %al23; SSE2-NEXT: jne .LBB0_124; SSE2-NEXT: # %bb.2: # %else25; SSE2-NEXT: testb $2, %al26; SSE2-NEXT: jne .LBB0_327; SSE2-NEXT: .LBB0_4: # %else228; SSE2-NEXT: testb $4, %al29; SSE2-NEXT: jne .LBB0_530; SSE2-NEXT: .LBB0_6: # %else431; SSE2-NEXT: testb $8, %al32; SSE2-NEXT: je .LBB0_833; SSE2-NEXT: .LBB0_7: # %cond.store534; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]35; SSE2-NEXT: movd %xmm0, 12(%rdi)36; SSE2-NEXT: .LBB0_8: # %else637; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]38; SSE2-NEXT: testb $16, %al39; SSE2-NEXT: jne .LBB0_940; SSE2-NEXT: # %bb.10: # %else841; SSE2-NEXT: testb $32, %al42; SSE2-NEXT: jne .LBB0_1143; SSE2-NEXT: .LBB0_12: # %else1044; SSE2-NEXT: testb $64, %al45; SSE2-NEXT: jne .LBB0_1346; SSE2-NEXT: .LBB0_14: # %else1247; SSE2-NEXT: testb $-128, %al48; SSE2-NEXT: jne .LBB0_1549; SSE2-NEXT: .LBB0_16: # %else1450; SSE2-NEXT: retq51; SSE2-NEXT: .LBB0_1: # %cond.store52; SSE2-NEXT: movd %xmm0, (%rdi)53; SSE2-NEXT: testb $2, %al54; SSE2-NEXT: je .LBB0_455; SSE2-NEXT: .LBB0_3: # %cond.store156; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]57; SSE2-NEXT: movd %xmm1, 4(%rdi)58; SSE2-NEXT: testb $4, %al59; SSE2-NEXT: je .LBB0_660; SSE2-NEXT: .LBB0_5: # %cond.store361; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]62; SSE2-NEXT: movd %xmm1, 8(%rdi)63; SSE2-NEXT: testb $8, %al64; SSE2-NEXT: jne .LBB0_765; SSE2-NEXT: jmp .LBB0_866; SSE2-NEXT: .LBB0_9: # %cond.store767; SSE2-NEXT: movss %xmm2, 16(%rdi)68; SSE2-NEXT: testb $32, %al69; SSE2-NEXT: je .LBB0_1270; SSE2-NEXT: .LBB0_11: # %cond.store971; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]72; SSE2-NEXT: movd %xmm0, 20(%rdi)73; SSE2-NEXT: testb $64, %al74; SSE2-NEXT: je .LBB0_1475; SSE2-NEXT: .LBB0_13: # %cond.store1176; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]77; SSE2-NEXT: movd %xmm0, 24(%rdi)78; SSE2-NEXT: testb $-128, %al79; SSE2-NEXT: je .LBB0_1680; SSE2-NEXT: .LBB0_15: # %cond.store1381; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[3,3,3,3]82; SSE2-NEXT: movd %xmm0, 28(%rdi)83; SSE2-NEXT: retq84;85; SSE4-LABEL: truncstore_v8i64_v8i32:86; SSE4: # %bb.0:87; SSE4-NEXT: pxor %xmm6, %xmm688; SSE4-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]89; SSE4-NEXT: pcmpeqd %xmm6, %xmm590; SSE4-NEXT: pcmpeqd %xmm6, %xmm491; SSE4-NEXT: packssdw %xmm5, %xmm492; SSE4-NEXT: packsswb %xmm4, %xmm493; SSE4-NEXT: pmovmskb %xmm4, %eax94; SSE4-NEXT: notl %eax95; SSE4-NEXT: testb $1, %al96; SSE4-NEXT: jne .LBB0_197; SSE4-NEXT: # %bb.2: # %else98; SSE4-NEXT: testb $2, %al99; SSE4-NEXT: jne .LBB0_3100; SSE4-NEXT: .LBB0_4: # %else2101; SSE4-NEXT: testb $4, %al102; SSE4-NEXT: jne .LBB0_5103; SSE4-NEXT: .LBB0_6: # %else4104; SSE4-NEXT: testb $8, %al105; SSE4-NEXT: je .LBB0_8106; SSE4-NEXT: .LBB0_7: # %cond.store5107; SSE4-NEXT: pextrd $3, %xmm0, 12(%rdi)108; SSE4-NEXT: .LBB0_8: # %else6109; SSE4-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]110; SSE4-NEXT: testb $16, %al111; SSE4-NEXT: jne .LBB0_9112; SSE4-NEXT: # %bb.10: # %else8113; SSE4-NEXT: testb $32, %al114; SSE4-NEXT: jne .LBB0_11115; SSE4-NEXT: .LBB0_12: # %else10116; SSE4-NEXT: testb $64, %al117; SSE4-NEXT: jne .LBB0_13118; SSE4-NEXT: .LBB0_14: # %else12119; SSE4-NEXT: testb $-128, %al120; SSE4-NEXT: jne .LBB0_15121; SSE4-NEXT: .LBB0_16: # %else14122; SSE4-NEXT: retq123; SSE4-NEXT: .LBB0_1: # %cond.store124; SSE4-NEXT: movd %xmm0, (%rdi)125; SSE4-NEXT: testb $2, %al126; SSE4-NEXT: je .LBB0_4127; SSE4-NEXT: .LBB0_3: # %cond.store1128; SSE4-NEXT: pextrd $1, %xmm0, 4(%rdi)129; SSE4-NEXT: testb $4, %al130; SSE4-NEXT: je .LBB0_6131; SSE4-NEXT: .LBB0_5: # %cond.store3132; SSE4-NEXT: pextrd $2, %xmm0, 8(%rdi)133; SSE4-NEXT: testb $8, %al134; SSE4-NEXT: jne .LBB0_7135; SSE4-NEXT: jmp .LBB0_8136; SSE4-NEXT: .LBB0_9: # %cond.store7137; SSE4-NEXT: movss %xmm2, 16(%rdi)138; SSE4-NEXT: testb $32, %al139; SSE4-NEXT: je .LBB0_12140; SSE4-NEXT: .LBB0_11: # %cond.store9141; SSE4-NEXT: extractps $1, %xmm2, 20(%rdi)142; SSE4-NEXT: testb $64, %al143; SSE4-NEXT: je .LBB0_14144; SSE4-NEXT: .LBB0_13: # %cond.store11145; SSE4-NEXT: extractps $2, %xmm2, 24(%rdi)146; SSE4-NEXT: testb $-128, %al147; SSE4-NEXT: je .LBB0_16148; SSE4-NEXT: .LBB0_15: # %cond.store13149; SSE4-NEXT: extractps $3, %xmm2, 28(%rdi)150; SSE4-NEXT: retq151;152; AVX1-LABEL: truncstore_v8i64_v8i32:153; AVX1: # %bb.0:154; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3155; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4156; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm3157; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5158; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm3159; AVX1-NEXT: vpcmpeqd %xmm4, %xmm2, %xmm2160; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2161; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2162; AVX1-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm0[2,3],ymm1[2,3]163; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0164; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm3[0,2],ymm0[4,6],ymm3[4,6]165; AVX1-NEXT: vmaskmovps %ymm0, %ymm2, (%rdi)166; AVX1-NEXT: vzeroupper167; AVX1-NEXT: retq168;169; AVX2-LABEL: truncstore_v8i64_v8i32:170; AVX2: # %bb.0:171; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3172; AVX2-NEXT: vpcmpeqd %ymm3, %ymm2, %ymm2173; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3174; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2175; AVX2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6]176; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]177; AVX2-NEXT: vpmaskmovd %ymm0, %ymm2, (%rdi)178; AVX2-NEXT: vzeroupper179; AVX2-NEXT: retq180;181; AVX512-LABEL: truncstore_v8i64_v8i32:182; AVX512: # %bb.0:183; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1184; AVX512-NEXT: vptestmd %zmm1, %zmm1, %k1185; AVX512-NEXT: vpmovqd %zmm0, (%rdi) {%k1}186; AVX512-NEXT: vzeroupper187; AVX512-NEXT: retq188;189; AVX512VL-LABEL: truncstore_v8i64_v8i32:190; AVX512VL: # %bb.0:191; AVX512VL-NEXT: vptestmd %ymm1, %ymm1, %k1192; AVX512VL-NEXT: vpmovqd %zmm0, (%rdi) {%k1}193; AVX512VL-NEXT: vzeroupper194; AVX512VL-NEXT: retq195 %a = icmp ne <8 x i32> %mask, zeroinitializer196 %b = trunc <8 x i64> %x to <8 x i32>197 call void @llvm.masked.store.v8i32.p0(<8 x i32> %b, ptr %p, i32 1, <8 x i1> %a)198 ret void199}200 201define void @truncstore_v8i64_v8i16(<8 x i64> %x, ptr %p, <8 x i32> %mask) {202; SSE2-LABEL: truncstore_v8i64_v8i16:203; SSE2: # %bb.0:204; SSE2-NEXT: pxor %xmm6, %xmm6205; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]206; SSE2-NEXT: pslld $16, %xmm2207; SSE2-NEXT: psrad $16, %xmm2208; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]209; SSE2-NEXT: pslld $16, %xmm0210; SSE2-NEXT: psrad $16, %xmm0211; SSE2-NEXT: packssdw %xmm2, %xmm0212; SSE2-NEXT: pcmpeqd %xmm6, %xmm5213; SSE2-NEXT: pcmpeqd %xmm6, %xmm4214; SSE2-NEXT: packssdw %xmm5, %xmm4215; SSE2-NEXT: packsswb %xmm4, %xmm4216; SSE2-NEXT: pmovmskb %xmm4, %eax217; SSE2-NEXT: notl %eax218; SSE2-NEXT: testb $1, %al219; SSE2-NEXT: jne .LBB1_1220; SSE2-NEXT: # %bb.2: # %else221; SSE2-NEXT: testb $2, %al222; SSE2-NEXT: jne .LBB1_3223; SSE2-NEXT: .LBB1_4: # %else2224; SSE2-NEXT: testb $4, %al225; SSE2-NEXT: jne .LBB1_5226; SSE2-NEXT: .LBB1_6: # %else4227; SSE2-NEXT: testb $8, %al228; SSE2-NEXT: jne .LBB1_7229; SSE2-NEXT: .LBB1_8: # %else6230; SSE2-NEXT: testb $16, %al231; SSE2-NEXT: jne .LBB1_9232; SSE2-NEXT: .LBB1_10: # %else8233; SSE2-NEXT: testb $32, %al234; SSE2-NEXT: jne .LBB1_11235; SSE2-NEXT: .LBB1_12: # %else10236; SSE2-NEXT: testb $64, %al237; SSE2-NEXT: jne .LBB1_13238; SSE2-NEXT: .LBB1_14: # %else12239; SSE2-NEXT: testb $-128, %al240; SSE2-NEXT: jne .LBB1_15241; SSE2-NEXT: .LBB1_16: # %else14242; SSE2-NEXT: retq243; SSE2-NEXT: .LBB1_1: # %cond.store244; SSE2-NEXT: movd %xmm0, %ecx245; SSE2-NEXT: movw %cx, (%rdi)246; SSE2-NEXT: testb $2, %al247; SSE2-NEXT: je .LBB1_4248; SSE2-NEXT: .LBB1_3: # %cond.store1249; SSE2-NEXT: pextrw $1, %xmm0, %ecx250; SSE2-NEXT: movw %cx, 2(%rdi)251; SSE2-NEXT: testb $4, %al252; SSE2-NEXT: je .LBB1_6253; SSE2-NEXT: .LBB1_5: # %cond.store3254; SSE2-NEXT: pextrw $2, %xmm0, %ecx255; SSE2-NEXT: movw %cx, 4(%rdi)256; SSE2-NEXT: testb $8, %al257; SSE2-NEXT: je .LBB1_8258; SSE2-NEXT: .LBB1_7: # %cond.store5259; SSE2-NEXT: pextrw $3, %xmm0, %ecx260; SSE2-NEXT: movw %cx, 6(%rdi)261; SSE2-NEXT: testb $16, %al262; SSE2-NEXT: je .LBB1_10263; SSE2-NEXT: .LBB1_9: # %cond.store7264; SSE2-NEXT: pextrw $4, %xmm0, %ecx265; SSE2-NEXT: movw %cx, 8(%rdi)266; SSE2-NEXT: testb $32, %al267; SSE2-NEXT: je .LBB1_12268; SSE2-NEXT: .LBB1_11: # %cond.store9269; SSE2-NEXT: pextrw $5, %xmm0, %ecx270; SSE2-NEXT: movw %cx, 10(%rdi)271; SSE2-NEXT: testb $64, %al272; SSE2-NEXT: je .LBB1_14273; SSE2-NEXT: .LBB1_13: # %cond.store11274; SSE2-NEXT: pextrw $6, %xmm0, %ecx275; SSE2-NEXT: movw %cx, 12(%rdi)276; SSE2-NEXT: testb $-128, %al277; SSE2-NEXT: je .LBB1_16278; SSE2-NEXT: .LBB1_15: # %cond.store13279; SSE2-NEXT: pextrw $7, %xmm0, %eax280; SSE2-NEXT: movw %ax, 14(%rdi)281; SSE2-NEXT: retq282;283; SSE4-LABEL: truncstore_v8i64_v8i16:284; SSE4: # %bb.0:285; SSE4-NEXT: pxor %xmm6, %xmm6286; SSE4-NEXT: pblendw {{.*#+}} xmm3 = xmm3[0],xmm6[1,2,3],xmm3[4],xmm6[5,6,7]287; SSE4-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0],xmm6[1,2,3],xmm2[4],xmm6[5,6,7]288; SSE4-NEXT: packusdw %xmm3, %xmm2289; SSE4-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm6[1,2,3],xmm1[4],xmm6[5,6,7]290; SSE4-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm6[1,2,3],xmm0[4],xmm6[5,6,7]291; SSE4-NEXT: packusdw %xmm1, %xmm0292; SSE4-NEXT: packusdw %xmm2, %xmm0293; SSE4-NEXT: pcmpeqd %xmm6, %xmm5294; SSE4-NEXT: pcmpeqd %xmm6, %xmm4295; SSE4-NEXT: packssdw %xmm5, %xmm4296; SSE4-NEXT: packsswb %xmm4, %xmm4297; SSE4-NEXT: pmovmskb %xmm4, %eax298; SSE4-NEXT: notl %eax299; SSE4-NEXT: testb $1, %al300; SSE4-NEXT: jne .LBB1_1301; SSE4-NEXT: # %bb.2: # %else302; SSE4-NEXT: testb $2, %al303; SSE4-NEXT: jne .LBB1_3304; SSE4-NEXT: .LBB1_4: # %else2305; SSE4-NEXT: testb $4, %al306; SSE4-NEXT: jne .LBB1_5307; SSE4-NEXT: .LBB1_6: # %else4308; SSE4-NEXT: testb $8, %al309; SSE4-NEXT: jne .LBB1_7310; SSE4-NEXT: .LBB1_8: # %else6311; SSE4-NEXT: testb $16, %al312; SSE4-NEXT: jne .LBB1_9313; SSE4-NEXT: .LBB1_10: # %else8314; SSE4-NEXT: testb $32, %al315; SSE4-NEXT: jne .LBB1_11316; SSE4-NEXT: .LBB1_12: # %else10317; SSE4-NEXT: testb $64, %al318; SSE4-NEXT: jne .LBB1_13319; SSE4-NEXT: .LBB1_14: # %else12320; SSE4-NEXT: testb $-128, %al321; SSE4-NEXT: jne .LBB1_15322; SSE4-NEXT: .LBB1_16: # %else14323; SSE4-NEXT: retq324; SSE4-NEXT: .LBB1_1: # %cond.store325; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)326; SSE4-NEXT: testb $2, %al327; SSE4-NEXT: je .LBB1_4328; SSE4-NEXT: .LBB1_3: # %cond.store1329; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)330; SSE4-NEXT: testb $4, %al331; SSE4-NEXT: je .LBB1_6332; SSE4-NEXT: .LBB1_5: # %cond.store3333; SSE4-NEXT: pextrw $2, %xmm0, 4(%rdi)334; SSE4-NEXT: testb $8, %al335; SSE4-NEXT: je .LBB1_8336; SSE4-NEXT: .LBB1_7: # %cond.store5337; SSE4-NEXT: pextrw $3, %xmm0, 6(%rdi)338; SSE4-NEXT: testb $16, %al339; SSE4-NEXT: je .LBB1_10340; SSE4-NEXT: .LBB1_9: # %cond.store7341; SSE4-NEXT: pextrw $4, %xmm0, 8(%rdi)342; SSE4-NEXT: testb $32, %al343; SSE4-NEXT: je .LBB1_12344; SSE4-NEXT: .LBB1_11: # %cond.store9345; SSE4-NEXT: pextrw $5, %xmm0, 10(%rdi)346; SSE4-NEXT: testb $64, %al347; SSE4-NEXT: je .LBB1_14348; SSE4-NEXT: .LBB1_13: # %cond.store11349; SSE4-NEXT: pextrw $6, %xmm0, 12(%rdi)350; SSE4-NEXT: testb $-128, %al351; SSE4-NEXT: je .LBB1_16352; SSE4-NEXT: .LBB1_15: # %cond.store13353; SSE4-NEXT: pextrw $7, %xmm0, 14(%rdi)354; SSE4-NEXT: retq355;356; AVX1-LABEL: truncstore_v8i64_v8i16:357; AVX1: # %bb.0:358; AVX1-NEXT: vbroadcastsd {{.*#+}} ymm3 = [65535,65535,65535,65535]359; AVX1-NEXT: vandps %ymm3, %ymm1, %ymm1360; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4361; AVX1-NEXT: vpackusdw %xmm4, %xmm1, %xmm1362; AVX1-NEXT: vandps %ymm3, %ymm0, %ymm0363; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3364; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm0365; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0366; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm1367; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3368; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1369; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm2370; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1371; AVX1-NEXT: vmovmskps %ymm1, %eax372; AVX1-NEXT: notl %eax373; AVX1-NEXT: testb $1, %al374; AVX1-NEXT: jne .LBB1_1375; AVX1-NEXT: # %bb.2: # %else376; AVX1-NEXT: testb $2, %al377; AVX1-NEXT: jne .LBB1_3378; AVX1-NEXT: .LBB1_4: # %else2379; AVX1-NEXT: testb $4, %al380; AVX1-NEXT: jne .LBB1_5381; AVX1-NEXT: .LBB1_6: # %else4382; AVX1-NEXT: testb $8, %al383; AVX1-NEXT: jne .LBB1_7384; AVX1-NEXT: .LBB1_8: # %else6385; AVX1-NEXT: testb $16, %al386; AVX1-NEXT: jne .LBB1_9387; AVX1-NEXT: .LBB1_10: # %else8388; AVX1-NEXT: testb $32, %al389; AVX1-NEXT: jne .LBB1_11390; AVX1-NEXT: .LBB1_12: # %else10391; AVX1-NEXT: testb $64, %al392; AVX1-NEXT: jne .LBB1_13393; AVX1-NEXT: .LBB1_14: # %else12394; AVX1-NEXT: testb $-128, %al395; AVX1-NEXT: jne .LBB1_15396; AVX1-NEXT: .LBB1_16: # %else14397; AVX1-NEXT: vzeroupper398; AVX1-NEXT: retq399; AVX1-NEXT: .LBB1_1: # %cond.store400; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)401; AVX1-NEXT: testb $2, %al402; AVX1-NEXT: je .LBB1_4403; AVX1-NEXT: .LBB1_3: # %cond.store1404; AVX1-NEXT: vpextrw $1, %xmm0, 2(%rdi)405; AVX1-NEXT: testb $4, %al406; AVX1-NEXT: je .LBB1_6407; AVX1-NEXT: .LBB1_5: # %cond.store3408; AVX1-NEXT: vpextrw $2, %xmm0, 4(%rdi)409; AVX1-NEXT: testb $8, %al410; AVX1-NEXT: je .LBB1_8411; AVX1-NEXT: .LBB1_7: # %cond.store5412; AVX1-NEXT: vpextrw $3, %xmm0, 6(%rdi)413; AVX1-NEXT: testb $16, %al414; AVX1-NEXT: je .LBB1_10415; AVX1-NEXT: .LBB1_9: # %cond.store7416; AVX1-NEXT: vpextrw $4, %xmm0, 8(%rdi)417; AVX1-NEXT: testb $32, %al418; AVX1-NEXT: je .LBB1_12419; AVX1-NEXT: .LBB1_11: # %cond.store9420; AVX1-NEXT: vpextrw $5, %xmm0, 10(%rdi)421; AVX1-NEXT: testb $64, %al422; AVX1-NEXT: je .LBB1_14423; AVX1-NEXT: .LBB1_13: # %cond.store11424; AVX1-NEXT: vpextrw $6, %xmm0, 12(%rdi)425; AVX1-NEXT: testb $-128, %al426; AVX1-NEXT: je .LBB1_16427; AVX1-NEXT: .LBB1_15: # %cond.store13428; AVX1-NEXT: vpextrw $7, %xmm0, 14(%rdi)429; AVX1-NEXT: vzeroupper430; AVX1-NEXT: retq431;432; AVX2-LABEL: truncstore_v8i64_v8i16:433; AVX2: # %bb.0:434; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3435; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm3[1,2,3],ymm1[4],ymm3[5,6,7],ymm1[8],ymm3[9,10,11],ymm1[12],ymm3[13,14,15]436; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm3[1,2,3],ymm0[4],ymm3[5,6,7],ymm0[8],ymm3[9,10,11],ymm0[12],ymm3[13,14,15]437; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0438; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1439; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0440; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]441; AVX2-NEXT: vpcmpeqd %ymm3, %ymm2, %ymm1442; AVX2-NEXT: vmovmskps %ymm1, %eax443; AVX2-NEXT: notl %eax444; AVX2-NEXT: testb $1, %al445; AVX2-NEXT: jne .LBB1_1446; AVX2-NEXT: # %bb.2: # %else447; AVX2-NEXT: testb $2, %al448; AVX2-NEXT: jne .LBB1_3449; AVX2-NEXT: .LBB1_4: # %else2450; AVX2-NEXT: testb $4, %al451; AVX2-NEXT: jne .LBB1_5452; AVX2-NEXT: .LBB1_6: # %else4453; AVX2-NEXT: testb $8, %al454; AVX2-NEXT: jne .LBB1_7455; AVX2-NEXT: .LBB1_8: # %else6456; AVX2-NEXT: testb $16, %al457; AVX2-NEXT: jne .LBB1_9458; AVX2-NEXT: .LBB1_10: # %else8459; AVX2-NEXT: testb $32, %al460; AVX2-NEXT: jne .LBB1_11461; AVX2-NEXT: .LBB1_12: # %else10462; AVX2-NEXT: testb $64, %al463; AVX2-NEXT: jne .LBB1_13464; AVX2-NEXT: .LBB1_14: # %else12465; AVX2-NEXT: testb $-128, %al466; AVX2-NEXT: jne .LBB1_15467; AVX2-NEXT: .LBB1_16: # %else14468; AVX2-NEXT: vzeroupper469; AVX2-NEXT: retq470; AVX2-NEXT: .LBB1_1: # %cond.store471; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)472; AVX2-NEXT: testb $2, %al473; AVX2-NEXT: je .LBB1_4474; AVX2-NEXT: .LBB1_3: # %cond.store1475; AVX2-NEXT: vpextrw $1, %xmm0, 2(%rdi)476; AVX2-NEXT: testb $4, %al477; AVX2-NEXT: je .LBB1_6478; AVX2-NEXT: .LBB1_5: # %cond.store3479; AVX2-NEXT: vpextrw $2, %xmm0, 4(%rdi)480; AVX2-NEXT: testb $8, %al481; AVX2-NEXT: je .LBB1_8482; AVX2-NEXT: .LBB1_7: # %cond.store5483; AVX2-NEXT: vpextrw $3, %xmm0, 6(%rdi)484; AVX2-NEXT: testb $16, %al485; AVX2-NEXT: je .LBB1_10486; AVX2-NEXT: .LBB1_9: # %cond.store7487; AVX2-NEXT: vpextrw $4, %xmm0, 8(%rdi)488; AVX2-NEXT: testb $32, %al489; AVX2-NEXT: je .LBB1_12490; AVX2-NEXT: .LBB1_11: # %cond.store9491; AVX2-NEXT: vpextrw $5, %xmm0, 10(%rdi)492; AVX2-NEXT: testb $64, %al493; AVX2-NEXT: je .LBB1_14494; AVX2-NEXT: .LBB1_13: # %cond.store11495; AVX2-NEXT: vpextrw $6, %xmm0, 12(%rdi)496; AVX2-NEXT: testb $-128, %al497; AVX2-NEXT: je .LBB1_16498; AVX2-NEXT: .LBB1_15: # %cond.store13499; AVX2-NEXT: vpextrw $7, %xmm0, 14(%rdi)500; AVX2-NEXT: vzeroupper501; AVX2-NEXT: retq502;503; AVX512F-LABEL: truncstore_v8i64_v8i16:504; AVX512F: # %bb.0:505; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1506; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0507; AVX512F-NEXT: vpmovqw %zmm0, %xmm0508; AVX512F-NEXT: kmovw %k0, %eax509; AVX512F-NEXT: testb $1, %al510; AVX512F-NEXT: jne .LBB1_1511; AVX512F-NEXT: # %bb.2: # %else512; AVX512F-NEXT: testb $2, %al513; AVX512F-NEXT: jne .LBB1_3514; AVX512F-NEXT: .LBB1_4: # %else2515; AVX512F-NEXT: testb $4, %al516; AVX512F-NEXT: jne .LBB1_5517; AVX512F-NEXT: .LBB1_6: # %else4518; AVX512F-NEXT: testb $8, %al519; AVX512F-NEXT: jne .LBB1_7520; AVX512F-NEXT: .LBB1_8: # %else6521; AVX512F-NEXT: testb $16, %al522; AVX512F-NEXT: jne .LBB1_9523; AVX512F-NEXT: .LBB1_10: # %else8524; AVX512F-NEXT: testb $32, %al525; AVX512F-NEXT: jne .LBB1_11526; AVX512F-NEXT: .LBB1_12: # %else10527; AVX512F-NEXT: testb $64, %al528; AVX512F-NEXT: jne .LBB1_13529; AVX512F-NEXT: .LBB1_14: # %else12530; AVX512F-NEXT: testb $-128, %al531; AVX512F-NEXT: jne .LBB1_15532; AVX512F-NEXT: .LBB1_16: # %else14533; AVX512F-NEXT: vzeroupper534; AVX512F-NEXT: retq535; AVX512F-NEXT: .LBB1_1: # %cond.store536; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)537; AVX512F-NEXT: testb $2, %al538; AVX512F-NEXT: je .LBB1_4539; AVX512F-NEXT: .LBB1_3: # %cond.store1540; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)541; AVX512F-NEXT: testb $4, %al542; AVX512F-NEXT: je .LBB1_6543; AVX512F-NEXT: .LBB1_5: # %cond.store3544; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)545; AVX512F-NEXT: testb $8, %al546; AVX512F-NEXT: je .LBB1_8547; AVX512F-NEXT: .LBB1_7: # %cond.store5548; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)549; AVX512F-NEXT: testb $16, %al550; AVX512F-NEXT: je .LBB1_10551; AVX512F-NEXT: .LBB1_9: # %cond.store7552; AVX512F-NEXT: vpextrw $4, %xmm0, 8(%rdi)553; AVX512F-NEXT: testb $32, %al554; AVX512F-NEXT: je .LBB1_12555; AVX512F-NEXT: .LBB1_11: # %cond.store9556; AVX512F-NEXT: vpextrw $5, %xmm0, 10(%rdi)557; AVX512F-NEXT: testb $64, %al558; AVX512F-NEXT: je .LBB1_14559; AVX512F-NEXT: .LBB1_13: # %cond.store11560; AVX512F-NEXT: vpextrw $6, %xmm0, 12(%rdi)561; AVX512F-NEXT: testb $-128, %al562; AVX512F-NEXT: je .LBB1_16563; AVX512F-NEXT: .LBB1_15: # %cond.store13564; AVX512F-NEXT: vpextrw $7, %xmm0, 14(%rdi)565; AVX512F-NEXT: vzeroupper566; AVX512F-NEXT: retq567;568; AVX512FVL-LABEL: truncstore_v8i64_v8i16:569; AVX512FVL: # %bb.0:570; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k0571; AVX512FVL-NEXT: vpmovqw %zmm0, %xmm0572; AVX512FVL-NEXT: kmovw %k0, %eax573; AVX512FVL-NEXT: testb $1, %al574; AVX512FVL-NEXT: jne .LBB1_1575; AVX512FVL-NEXT: # %bb.2: # %else576; AVX512FVL-NEXT: testb $2, %al577; AVX512FVL-NEXT: jne .LBB1_3578; AVX512FVL-NEXT: .LBB1_4: # %else2579; AVX512FVL-NEXT: testb $4, %al580; AVX512FVL-NEXT: jne .LBB1_5581; AVX512FVL-NEXT: .LBB1_6: # %else4582; AVX512FVL-NEXT: testb $8, %al583; AVX512FVL-NEXT: jne .LBB1_7584; AVX512FVL-NEXT: .LBB1_8: # %else6585; AVX512FVL-NEXT: testb $16, %al586; AVX512FVL-NEXT: jne .LBB1_9587; AVX512FVL-NEXT: .LBB1_10: # %else8588; AVX512FVL-NEXT: testb $32, %al589; AVX512FVL-NEXT: jne .LBB1_11590; AVX512FVL-NEXT: .LBB1_12: # %else10591; AVX512FVL-NEXT: testb $64, %al592; AVX512FVL-NEXT: jne .LBB1_13593; AVX512FVL-NEXT: .LBB1_14: # %else12594; AVX512FVL-NEXT: testb $-128, %al595; AVX512FVL-NEXT: jne .LBB1_15596; AVX512FVL-NEXT: .LBB1_16: # %else14597; AVX512FVL-NEXT: vzeroupper598; AVX512FVL-NEXT: retq599; AVX512FVL-NEXT: .LBB1_1: # %cond.store600; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)601; AVX512FVL-NEXT: testb $2, %al602; AVX512FVL-NEXT: je .LBB1_4603; AVX512FVL-NEXT: .LBB1_3: # %cond.store1604; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)605; AVX512FVL-NEXT: testb $4, %al606; AVX512FVL-NEXT: je .LBB1_6607; AVX512FVL-NEXT: .LBB1_5: # %cond.store3608; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)609; AVX512FVL-NEXT: testb $8, %al610; AVX512FVL-NEXT: je .LBB1_8611; AVX512FVL-NEXT: .LBB1_7: # %cond.store5612; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)613; AVX512FVL-NEXT: testb $16, %al614; AVX512FVL-NEXT: je .LBB1_10615; AVX512FVL-NEXT: .LBB1_9: # %cond.store7616; AVX512FVL-NEXT: vpextrw $4, %xmm0, 8(%rdi)617; AVX512FVL-NEXT: testb $32, %al618; AVX512FVL-NEXT: je .LBB1_12619; AVX512FVL-NEXT: .LBB1_11: # %cond.store9620; AVX512FVL-NEXT: vpextrw $5, %xmm0, 10(%rdi)621; AVX512FVL-NEXT: testb $64, %al622; AVX512FVL-NEXT: je .LBB1_14623; AVX512FVL-NEXT: .LBB1_13: # %cond.store11624; AVX512FVL-NEXT: vpextrw $6, %xmm0, 12(%rdi)625; AVX512FVL-NEXT: testb $-128, %al626; AVX512FVL-NEXT: je .LBB1_16627; AVX512FVL-NEXT: .LBB1_15: # %cond.store13628; AVX512FVL-NEXT: vpextrw $7, %xmm0, 14(%rdi)629; AVX512FVL-NEXT: vzeroupper630; AVX512FVL-NEXT: retq631;632; AVX512BW-LABEL: truncstore_v8i64_v8i16:633; AVX512BW: # %bb.0:634; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1635; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k1636; AVX512BW-NEXT: vpmovqw %zmm0, (%rdi) {%k1}637; AVX512BW-NEXT: vzeroupper638; AVX512BW-NEXT: retq639;640; AVX512BWVL-LABEL: truncstore_v8i64_v8i16:641; AVX512BWVL: # %bb.0:642; AVX512BWVL-NEXT: vptestmd %ymm1, %ymm1, %k1643; AVX512BWVL-NEXT: vpmovqw %zmm0, (%rdi) {%k1}644; AVX512BWVL-NEXT: vzeroupper645; AVX512BWVL-NEXT: retq646 %a = icmp ne <8 x i32> %mask, zeroinitializer647 %b = trunc <8 x i64> %x to <8 x i16>648 call void @llvm.masked.store.v8i16.p0(<8 x i16> %b, ptr %p, i32 1, <8 x i1> %a)649 ret void650}651 652define void @truncstore_v8i64_v8i8(<8 x i64> %x, ptr %p, <8 x i32> %mask) {653; SSE2-LABEL: truncstore_v8i64_v8i8:654; SSE2: # %bb.0:655; SSE2-NEXT: pxor %xmm6, %xmm6656; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]657; SSE2-NEXT: pand %xmm7, %xmm3658; SSE2-NEXT: pand %xmm7, %xmm2659; SSE2-NEXT: packuswb %xmm3, %xmm2660; SSE2-NEXT: pand %xmm7, %xmm1661; SSE2-NEXT: pand %xmm7, %xmm0662; SSE2-NEXT: packuswb %xmm1, %xmm0663; SSE2-NEXT: packuswb %xmm2, %xmm0664; SSE2-NEXT: packuswb %xmm0, %xmm0665; SSE2-NEXT: pcmpeqd %xmm6, %xmm5666; SSE2-NEXT: pcmpeqd %xmm6, %xmm4667; SSE2-NEXT: packssdw %xmm5, %xmm4668; SSE2-NEXT: packsswb %xmm4, %xmm4669; SSE2-NEXT: pmovmskb %xmm4, %eax670; SSE2-NEXT: notl %eax671; SSE2-NEXT: testb $1, %al672; SSE2-NEXT: movd %xmm0, %ecx673; SSE2-NEXT: jne .LBB2_1674; SSE2-NEXT: # %bb.2: # %else675; SSE2-NEXT: testb $2, %al676; SSE2-NEXT: jne .LBB2_3677; SSE2-NEXT: .LBB2_4: # %else2678; SSE2-NEXT: testb $4, %al679; SSE2-NEXT: jne .LBB2_5680; SSE2-NEXT: .LBB2_6: # %else4681; SSE2-NEXT: testb $8, %al682; SSE2-NEXT: je .LBB2_8683; SSE2-NEXT: .LBB2_7: # %cond.store5684; SSE2-NEXT: shrl $24, %ecx685; SSE2-NEXT: movb %cl, 3(%rdi)686; SSE2-NEXT: .LBB2_8: # %else6687; SSE2-NEXT: testb $16, %al688; SSE2-NEXT: pextrw $2, %xmm0, %ecx689; SSE2-NEXT: je .LBB2_10690; SSE2-NEXT: # %bb.9: # %cond.store7691; SSE2-NEXT: movb %cl, 4(%rdi)692; SSE2-NEXT: .LBB2_10: # %else8693; SSE2-NEXT: testb $32, %al694; SSE2-NEXT: je .LBB2_12695; SSE2-NEXT: # %bb.11: # %cond.store9696; SSE2-NEXT: movb %ch, 5(%rdi)697; SSE2-NEXT: .LBB2_12: # %else10698; SSE2-NEXT: testb $64, %al699; SSE2-NEXT: pextrw $3, %xmm0, %ecx700; SSE2-NEXT: jne .LBB2_13701; SSE2-NEXT: # %bb.14: # %else12702; SSE2-NEXT: testb $-128, %al703; SSE2-NEXT: jne .LBB2_15704; SSE2-NEXT: .LBB2_16: # %else14705; SSE2-NEXT: retq706; SSE2-NEXT: .LBB2_1: # %cond.store707; SSE2-NEXT: movb %cl, (%rdi)708; SSE2-NEXT: testb $2, %al709; SSE2-NEXT: je .LBB2_4710; SSE2-NEXT: .LBB2_3: # %cond.store1711; SSE2-NEXT: movb %ch, 1(%rdi)712; SSE2-NEXT: testb $4, %al713; SSE2-NEXT: je .LBB2_6714; SSE2-NEXT: .LBB2_5: # %cond.store3715; SSE2-NEXT: movl %ecx, %edx716; SSE2-NEXT: shrl $16, %edx717; SSE2-NEXT: movb %dl, 2(%rdi)718; SSE2-NEXT: testb $8, %al719; SSE2-NEXT: jne .LBB2_7720; SSE2-NEXT: jmp .LBB2_8721; SSE2-NEXT: .LBB2_13: # %cond.store11722; SSE2-NEXT: movb %cl, 6(%rdi)723; SSE2-NEXT: testb $-128, %al724; SSE2-NEXT: je .LBB2_16725; SSE2-NEXT: .LBB2_15: # %cond.store13726; SSE2-NEXT: movb %ch, 7(%rdi)727; SSE2-NEXT: retq728;729; SSE4-LABEL: truncstore_v8i64_v8i8:730; SSE4: # %bb.0:731; SSE4-NEXT: pxor %xmm6, %xmm6732; SSE4-NEXT: pmovzxbq {{.*#+}} xmm7 = [255,255]733; SSE4-NEXT: pand %xmm7, %xmm3734; SSE4-NEXT: pand %xmm7, %xmm2735; SSE4-NEXT: packusdw %xmm3, %xmm2736; SSE4-NEXT: pand %xmm7, %xmm1737; SSE4-NEXT: pand %xmm7, %xmm0738; SSE4-NEXT: packusdw %xmm1, %xmm0739; SSE4-NEXT: packusdw %xmm2, %xmm0740; SSE4-NEXT: packuswb %xmm0, %xmm0741; SSE4-NEXT: pcmpeqd %xmm6, %xmm5742; SSE4-NEXT: pcmpeqd %xmm6, %xmm4743; SSE4-NEXT: packssdw %xmm5, %xmm4744; SSE4-NEXT: packsswb %xmm4, %xmm4745; SSE4-NEXT: pmovmskb %xmm4, %eax746; SSE4-NEXT: notl %eax747; SSE4-NEXT: testb $1, %al748; SSE4-NEXT: jne .LBB2_1749; SSE4-NEXT: # %bb.2: # %else750; SSE4-NEXT: testb $2, %al751; SSE4-NEXT: jne .LBB2_3752; SSE4-NEXT: .LBB2_4: # %else2753; SSE4-NEXT: testb $4, %al754; SSE4-NEXT: jne .LBB2_5755; SSE4-NEXT: .LBB2_6: # %else4756; SSE4-NEXT: testb $8, %al757; SSE4-NEXT: jne .LBB2_7758; SSE4-NEXT: .LBB2_8: # %else6759; SSE4-NEXT: testb $16, %al760; SSE4-NEXT: jne .LBB2_9761; SSE4-NEXT: .LBB2_10: # %else8762; SSE4-NEXT: testb $32, %al763; SSE4-NEXT: jne .LBB2_11764; SSE4-NEXT: .LBB2_12: # %else10765; SSE4-NEXT: testb $64, %al766; SSE4-NEXT: jne .LBB2_13767; SSE4-NEXT: .LBB2_14: # %else12768; SSE4-NEXT: testb $-128, %al769; SSE4-NEXT: jne .LBB2_15770; SSE4-NEXT: .LBB2_16: # %else14771; SSE4-NEXT: retq772; SSE4-NEXT: .LBB2_1: # %cond.store773; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)774; SSE4-NEXT: testb $2, %al775; SSE4-NEXT: je .LBB2_4776; SSE4-NEXT: .LBB2_3: # %cond.store1777; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)778; SSE4-NEXT: testb $4, %al779; SSE4-NEXT: je .LBB2_6780; SSE4-NEXT: .LBB2_5: # %cond.store3781; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)782; SSE4-NEXT: testb $8, %al783; SSE4-NEXT: je .LBB2_8784; SSE4-NEXT: .LBB2_7: # %cond.store5785; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)786; SSE4-NEXT: testb $16, %al787; SSE4-NEXT: je .LBB2_10788; SSE4-NEXT: .LBB2_9: # %cond.store7789; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)790; SSE4-NEXT: testb $32, %al791; SSE4-NEXT: je .LBB2_12792; SSE4-NEXT: .LBB2_11: # %cond.store9793; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)794; SSE4-NEXT: testb $64, %al795; SSE4-NEXT: je .LBB2_14796; SSE4-NEXT: .LBB2_13: # %cond.store11797; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)798; SSE4-NEXT: testb $-128, %al799; SSE4-NEXT: je .LBB2_16800; SSE4-NEXT: .LBB2_15: # %cond.store13801; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)802; SSE4-NEXT: retq803;804; AVX1-LABEL: truncstore_v8i64_v8i8:805; AVX1: # %bb.0:806; AVX1-NEXT: vbroadcastsd {{.*#+}} ymm3 = [255,255,255,255]807; AVX1-NEXT: vandps %ymm3, %ymm1, %ymm1808; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4809; AVX1-NEXT: vpackusdw %xmm4, %xmm1, %xmm1810; AVX1-NEXT: vandps %ymm3, %ymm0, %ymm0811; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3812; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm0813; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0814; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0815; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm1816; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3817; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1818; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm2819; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1820; AVX1-NEXT: vmovmskps %ymm1, %eax821; AVX1-NEXT: notl %eax822; AVX1-NEXT: testb $1, %al823; AVX1-NEXT: jne .LBB2_1824; AVX1-NEXT: # %bb.2: # %else825; AVX1-NEXT: testb $2, %al826; AVX1-NEXT: jne .LBB2_3827; AVX1-NEXT: .LBB2_4: # %else2828; AVX1-NEXT: testb $4, %al829; AVX1-NEXT: jne .LBB2_5830; AVX1-NEXT: .LBB2_6: # %else4831; AVX1-NEXT: testb $8, %al832; AVX1-NEXT: jne .LBB2_7833; AVX1-NEXT: .LBB2_8: # %else6834; AVX1-NEXT: testb $16, %al835; AVX1-NEXT: jne .LBB2_9836; AVX1-NEXT: .LBB2_10: # %else8837; AVX1-NEXT: testb $32, %al838; AVX1-NEXT: jne .LBB2_11839; AVX1-NEXT: .LBB2_12: # %else10840; AVX1-NEXT: testb $64, %al841; AVX1-NEXT: jne .LBB2_13842; AVX1-NEXT: .LBB2_14: # %else12843; AVX1-NEXT: testb $-128, %al844; AVX1-NEXT: jne .LBB2_15845; AVX1-NEXT: .LBB2_16: # %else14846; AVX1-NEXT: vzeroupper847; AVX1-NEXT: retq848; AVX1-NEXT: .LBB2_1: # %cond.store849; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)850; AVX1-NEXT: testb $2, %al851; AVX1-NEXT: je .LBB2_4852; AVX1-NEXT: .LBB2_3: # %cond.store1853; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)854; AVX1-NEXT: testb $4, %al855; AVX1-NEXT: je .LBB2_6856; AVX1-NEXT: .LBB2_5: # %cond.store3857; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)858; AVX1-NEXT: testb $8, %al859; AVX1-NEXT: je .LBB2_8860; AVX1-NEXT: .LBB2_7: # %cond.store5861; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)862; AVX1-NEXT: testb $16, %al863; AVX1-NEXT: je .LBB2_10864; AVX1-NEXT: .LBB2_9: # %cond.store7865; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)866; AVX1-NEXT: testb $32, %al867; AVX1-NEXT: je .LBB2_12868; AVX1-NEXT: .LBB2_11: # %cond.store9869; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)870; AVX1-NEXT: testb $64, %al871; AVX1-NEXT: je .LBB2_14872; AVX1-NEXT: .LBB2_13: # %cond.store11873; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)874; AVX1-NEXT: testb $-128, %al875; AVX1-NEXT: je .LBB2_16876; AVX1-NEXT: .LBB2_15: # %cond.store13877; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)878; AVX1-NEXT: vzeroupper879; AVX1-NEXT: retq880;881; AVX2-LABEL: truncstore_v8i64_v8i8:882; AVX2: # %bb.0:883; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3884; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]885; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1886; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0887; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0888; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1889; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0890; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]891; AVX2-NEXT: vpackuswb %xmm0, %xmm0, %xmm0892; AVX2-NEXT: vpcmpeqd %ymm3, %ymm2, %ymm1893; AVX2-NEXT: vmovmskps %ymm1, %eax894; AVX2-NEXT: notl %eax895; AVX2-NEXT: testb $1, %al896; AVX2-NEXT: jne .LBB2_1897; AVX2-NEXT: # %bb.2: # %else898; AVX2-NEXT: testb $2, %al899; AVX2-NEXT: jne .LBB2_3900; AVX2-NEXT: .LBB2_4: # %else2901; AVX2-NEXT: testb $4, %al902; AVX2-NEXT: jne .LBB2_5903; AVX2-NEXT: .LBB2_6: # %else4904; AVX2-NEXT: testb $8, %al905; AVX2-NEXT: jne .LBB2_7906; AVX2-NEXT: .LBB2_8: # %else6907; AVX2-NEXT: testb $16, %al908; AVX2-NEXT: jne .LBB2_9909; AVX2-NEXT: .LBB2_10: # %else8910; AVX2-NEXT: testb $32, %al911; AVX2-NEXT: jne .LBB2_11912; AVX2-NEXT: .LBB2_12: # %else10913; AVX2-NEXT: testb $64, %al914; AVX2-NEXT: jne .LBB2_13915; AVX2-NEXT: .LBB2_14: # %else12916; AVX2-NEXT: testb $-128, %al917; AVX2-NEXT: jne .LBB2_15918; AVX2-NEXT: .LBB2_16: # %else14919; AVX2-NEXT: vzeroupper920; AVX2-NEXT: retq921; AVX2-NEXT: .LBB2_1: # %cond.store922; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)923; AVX2-NEXT: testb $2, %al924; AVX2-NEXT: je .LBB2_4925; AVX2-NEXT: .LBB2_3: # %cond.store1926; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)927; AVX2-NEXT: testb $4, %al928; AVX2-NEXT: je .LBB2_6929; AVX2-NEXT: .LBB2_5: # %cond.store3930; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)931; AVX2-NEXT: testb $8, %al932; AVX2-NEXT: je .LBB2_8933; AVX2-NEXT: .LBB2_7: # %cond.store5934; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)935; AVX2-NEXT: testb $16, %al936; AVX2-NEXT: je .LBB2_10937; AVX2-NEXT: .LBB2_9: # %cond.store7938; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)939; AVX2-NEXT: testb $32, %al940; AVX2-NEXT: je .LBB2_12941; AVX2-NEXT: .LBB2_11: # %cond.store9942; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)943; AVX2-NEXT: testb $64, %al944; AVX2-NEXT: je .LBB2_14945; AVX2-NEXT: .LBB2_13: # %cond.store11946; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)947; AVX2-NEXT: testb $-128, %al948; AVX2-NEXT: je .LBB2_16949; AVX2-NEXT: .LBB2_15: # %cond.store13950; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)951; AVX2-NEXT: vzeroupper952; AVX2-NEXT: retq953;954; AVX512F-LABEL: truncstore_v8i64_v8i8:955; AVX512F: # %bb.0:956; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1957; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0958; AVX512F-NEXT: vpmovqb %zmm0, %xmm0959; AVX512F-NEXT: kmovw %k0, %eax960; AVX512F-NEXT: testb $1, %al961; AVX512F-NEXT: jne .LBB2_1962; AVX512F-NEXT: # %bb.2: # %else963; AVX512F-NEXT: testb $2, %al964; AVX512F-NEXT: jne .LBB2_3965; AVX512F-NEXT: .LBB2_4: # %else2966; AVX512F-NEXT: testb $4, %al967; AVX512F-NEXT: jne .LBB2_5968; AVX512F-NEXT: .LBB2_6: # %else4969; AVX512F-NEXT: testb $8, %al970; AVX512F-NEXT: jne .LBB2_7971; AVX512F-NEXT: .LBB2_8: # %else6972; AVX512F-NEXT: testb $16, %al973; AVX512F-NEXT: jne .LBB2_9974; AVX512F-NEXT: .LBB2_10: # %else8975; AVX512F-NEXT: testb $32, %al976; AVX512F-NEXT: jne .LBB2_11977; AVX512F-NEXT: .LBB2_12: # %else10978; AVX512F-NEXT: testb $64, %al979; AVX512F-NEXT: jne .LBB2_13980; AVX512F-NEXT: .LBB2_14: # %else12981; AVX512F-NEXT: testb $-128, %al982; AVX512F-NEXT: jne .LBB2_15983; AVX512F-NEXT: .LBB2_16: # %else14984; AVX512F-NEXT: vzeroupper985; AVX512F-NEXT: retq986; AVX512F-NEXT: .LBB2_1: # %cond.store987; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)988; AVX512F-NEXT: testb $2, %al989; AVX512F-NEXT: je .LBB2_4990; AVX512F-NEXT: .LBB2_3: # %cond.store1991; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)992; AVX512F-NEXT: testb $4, %al993; AVX512F-NEXT: je .LBB2_6994; AVX512F-NEXT: .LBB2_5: # %cond.store3995; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)996; AVX512F-NEXT: testb $8, %al997; AVX512F-NEXT: je .LBB2_8998; AVX512F-NEXT: .LBB2_7: # %cond.store5999; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)1000; AVX512F-NEXT: testb $16, %al1001; AVX512F-NEXT: je .LBB2_101002; AVX512F-NEXT: .LBB2_9: # %cond.store71003; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)1004; AVX512F-NEXT: testb $32, %al1005; AVX512F-NEXT: je .LBB2_121006; AVX512F-NEXT: .LBB2_11: # %cond.store91007; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)1008; AVX512F-NEXT: testb $64, %al1009; AVX512F-NEXT: je .LBB2_141010; AVX512F-NEXT: .LBB2_13: # %cond.store111011; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)1012; AVX512F-NEXT: testb $-128, %al1013; AVX512F-NEXT: je .LBB2_161014; AVX512F-NEXT: .LBB2_15: # %cond.store131015; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)1016; AVX512F-NEXT: vzeroupper1017; AVX512F-NEXT: retq1018;1019; AVX512FVL-LABEL: truncstore_v8i64_v8i8:1020; AVX512FVL: # %bb.0:1021; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k01022; AVX512FVL-NEXT: vpmovqb %zmm0, %xmm01023; AVX512FVL-NEXT: kmovw %k0, %eax1024; AVX512FVL-NEXT: testb $1, %al1025; AVX512FVL-NEXT: jne .LBB2_11026; AVX512FVL-NEXT: # %bb.2: # %else1027; AVX512FVL-NEXT: testb $2, %al1028; AVX512FVL-NEXT: jne .LBB2_31029; AVX512FVL-NEXT: .LBB2_4: # %else21030; AVX512FVL-NEXT: testb $4, %al1031; AVX512FVL-NEXT: jne .LBB2_51032; AVX512FVL-NEXT: .LBB2_6: # %else41033; AVX512FVL-NEXT: testb $8, %al1034; AVX512FVL-NEXT: jne .LBB2_71035; AVX512FVL-NEXT: .LBB2_8: # %else61036; AVX512FVL-NEXT: testb $16, %al1037; AVX512FVL-NEXT: jne .LBB2_91038; AVX512FVL-NEXT: .LBB2_10: # %else81039; AVX512FVL-NEXT: testb $32, %al1040; AVX512FVL-NEXT: jne .LBB2_111041; AVX512FVL-NEXT: .LBB2_12: # %else101042; AVX512FVL-NEXT: testb $64, %al1043; AVX512FVL-NEXT: jne .LBB2_131044; AVX512FVL-NEXT: .LBB2_14: # %else121045; AVX512FVL-NEXT: testb $-128, %al1046; AVX512FVL-NEXT: jne .LBB2_151047; AVX512FVL-NEXT: .LBB2_16: # %else141048; AVX512FVL-NEXT: vzeroupper1049; AVX512FVL-NEXT: retq1050; AVX512FVL-NEXT: .LBB2_1: # %cond.store1051; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)1052; AVX512FVL-NEXT: testb $2, %al1053; AVX512FVL-NEXT: je .LBB2_41054; AVX512FVL-NEXT: .LBB2_3: # %cond.store11055; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)1056; AVX512FVL-NEXT: testb $4, %al1057; AVX512FVL-NEXT: je .LBB2_61058; AVX512FVL-NEXT: .LBB2_5: # %cond.store31059; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)1060; AVX512FVL-NEXT: testb $8, %al1061; AVX512FVL-NEXT: je .LBB2_81062; AVX512FVL-NEXT: .LBB2_7: # %cond.store51063; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)1064; AVX512FVL-NEXT: testb $16, %al1065; AVX512FVL-NEXT: je .LBB2_101066; AVX512FVL-NEXT: .LBB2_9: # %cond.store71067; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)1068; AVX512FVL-NEXT: testb $32, %al1069; AVX512FVL-NEXT: je .LBB2_121070; AVX512FVL-NEXT: .LBB2_11: # %cond.store91071; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)1072; AVX512FVL-NEXT: testb $64, %al1073; AVX512FVL-NEXT: je .LBB2_141074; AVX512FVL-NEXT: .LBB2_13: # %cond.store111075; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)1076; AVX512FVL-NEXT: testb $-128, %al1077; AVX512FVL-NEXT: je .LBB2_161078; AVX512FVL-NEXT: .LBB2_15: # %cond.store131079; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)1080; AVX512FVL-NEXT: vzeroupper1081; AVX512FVL-NEXT: retq1082;1083; AVX512BW-LABEL: truncstore_v8i64_v8i8:1084; AVX512BW: # %bb.0:1085; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm11086; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k11087; AVX512BW-NEXT: vpmovqb %zmm0, (%rdi) {%k1}1088; AVX512BW-NEXT: vzeroupper1089; AVX512BW-NEXT: retq1090;1091; AVX512BWVL-LABEL: truncstore_v8i64_v8i8:1092; AVX512BWVL: # %bb.0:1093; AVX512BWVL-NEXT: vptestmd %ymm1, %ymm1, %k11094; AVX512BWVL-NEXT: vpmovqb %zmm0, (%rdi) {%k1}1095; AVX512BWVL-NEXT: vzeroupper1096; AVX512BWVL-NEXT: retq1097 %a = icmp ne <8 x i32> %mask, zeroinitializer1098 %b = trunc <8 x i64> %x to <8 x i8>1099 call void @llvm.masked.store.v8i8.p0(<8 x i8> %b, ptr %p, i32 1, <8 x i1> %a)1100 ret void1101}1102 1103define void @truncstore_v4i64_v4i32(<4 x i64> %x, ptr %p, <4 x i32> %mask) {1104; SSE2-LABEL: truncstore_v4i64_v4i32:1105; SSE2: # %bb.0:1106; SSE2-NEXT: pxor %xmm3, %xmm31107; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]1108; SSE2-NEXT: pcmpeqd %xmm2, %xmm31109; SSE2-NEXT: movmskps %xmm3, %eax1110; SSE2-NEXT: xorl $15, %eax1111; SSE2-NEXT: testb $1, %al1112; SSE2-NEXT: jne .LBB3_11113; SSE2-NEXT: # %bb.2: # %else1114; SSE2-NEXT: testb $2, %al1115; SSE2-NEXT: jne .LBB3_31116; SSE2-NEXT: .LBB3_4: # %else21117; SSE2-NEXT: testb $4, %al1118; SSE2-NEXT: jne .LBB3_51119; SSE2-NEXT: .LBB3_6: # %else41120; SSE2-NEXT: testb $8, %al1121; SSE2-NEXT: jne .LBB3_71122; SSE2-NEXT: .LBB3_8: # %else61123; SSE2-NEXT: retq1124; SSE2-NEXT: .LBB3_1: # %cond.store1125; SSE2-NEXT: movss %xmm0, (%rdi)1126; SSE2-NEXT: testb $2, %al1127; SSE2-NEXT: je .LBB3_41128; SSE2-NEXT: .LBB3_3: # %cond.store11129; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1130; SSE2-NEXT: movd %xmm1, 4(%rdi)1131; SSE2-NEXT: testb $4, %al1132; SSE2-NEXT: je .LBB3_61133; SSE2-NEXT: .LBB3_5: # %cond.store31134; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1135; SSE2-NEXT: movd %xmm1, 8(%rdi)1136; SSE2-NEXT: testb $8, %al1137; SSE2-NEXT: je .LBB3_81138; SSE2-NEXT: .LBB3_7: # %cond.store51139; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]1140; SSE2-NEXT: movd %xmm0, 12(%rdi)1141; SSE2-NEXT: retq1142;1143; SSE4-LABEL: truncstore_v4i64_v4i32:1144; SSE4: # %bb.0:1145; SSE4-NEXT: pxor %xmm3, %xmm31146; SSE4-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]1147; SSE4-NEXT: pcmpeqd %xmm2, %xmm31148; SSE4-NEXT: movmskps %xmm3, %eax1149; SSE4-NEXT: xorl $15, %eax1150; SSE4-NEXT: testb $1, %al1151; SSE4-NEXT: jne .LBB3_11152; SSE4-NEXT: # %bb.2: # %else1153; SSE4-NEXT: testb $2, %al1154; SSE4-NEXT: jne .LBB3_31155; SSE4-NEXT: .LBB3_4: # %else21156; SSE4-NEXT: testb $4, %al1157; SSE4-NEXT: jne .LBB3_51158; SSE4-NEXT: .LBB3_6: # %else41159; SSE4-NEXT: testb $8, %al1160; SSE4-NEXT: jne .LBB3_71161; SSE4-NEXT: .LBB3_8: # %else61162; SSE4-NEXT: retq1163; SSE4-NEXT: .LBB3_1: # %cond.store1164; SSE4-NEXT: movss %xmm0, (%rdi)1165; SSE4-NEXT: testb $2, %al1166; SSE4-NEXT: je .LBB3_41167; SSE4-NEXT: .LBB3_3: # %cond.store11168; SSE4-NEXT: extractps $1, %xmm0, 4(%rdi)1169; SSE4-NEXT: testb $4, %al1170; SSE4-NEXT: je .LBB3_61171; SSE4-NEXT: .LBB3_5: # %cond.store31172; SSE4-NEXT: extractps $2, %xmm0, 8(%rdi)1173; SSE4-NEXT: testb $8, %al1174; SSE4-NEXT: je .LBB3_81175; SSE4-NEXT: .LBB3_7: # %cond.store51176; SSE4-NEXT: extractps $3, %xmm0, 12(%rdi)1177; SSE4-NEXT: retq1178;1179; AVX1-LABEL: truncstore_v4i64_v4i32:1180; AVX1: # %bb.0:1181; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm21182; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11183; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21184; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm11185; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21186; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]1187; AVX1-NEXT: vmaskmovps %xmm0, %xmm1, (%rdi)1188; AVX1-NEXT: vzeroupper1189; AVX1-NEXT: retq1190;1191; AVX2-LABEL: truncstore_v4i64_v4i32:1192; AVX2: # %bb.0:1193; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21194; AVX2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11195; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21196; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm11197; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm21198; AVX2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]1199; AVX2-NEXT: vpmaskmovd %xmm0, %xmm1, (%rdi)1200; AVX2-NEXT: vzeroupper1201; AVX2-NEXT: retq1202;1203; AVX512-LABEL: truncstore_v4i64_v4i32:1204; AVX512: # %bb.0:1205; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11206; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01207; AVX512-NEXT: vptestmd %zmm1, %zmm1, %k01208; AVX512-NEXT: kshiftlw $12, %k0, %k01209; AVX512-NEXT: kshiftrw $12, %k0, %k11210; AVX512-NEXT: vpmovqd %zmm0, %ymm01211; AVX512-NEXT: vmovdqu32 %zmm0, (%rdi) {%k1}1212; AVX512-NEXT: vzeroupper1213; AVX512-NEXT: retq1214;1215; AVX512VL-LABEL: truncstore_v4i64_v4i32:1216; AVX512VL: # %bb.0:1217; AVX512VL-NEXT: vptestmd %xmm1, %xmm1, %k11218; AVX512VL-NEXT: vpmovqd %ymm0, (%rdi) {%k1}1219; AVX512VL-NEXT: vzeroupper1220; AVX512VL-NEXT: retq1221 %a = icmp ne <4 x i32> %mask, zeroinitializer1222 %b = trunc <4 x i64> %x to <4 x i32>1223 call void @llvm.masked.store.v4i32.p0(<4 x i32> %b, ptr %p, i32 1, <4 x i1> %a)1224 ret void1225}1226 1227define void @truncstore_v4i64_v4i16(<4 x i64> %x, ptr %p, <4 x i32> %mask) {1228; SSE2-LABEL: truncstore_v4i64_v4i16:1229; SSE2: # %bb.0:1230; SSE2-NEXT: pxor %xmm3, %xmm31231; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]1232; SSE2-NEXT: pslld $16, %xmm01233; SSE2-NEXT: psrad $16, %xmm01234; SSE2-NEXT: packssdw %xmm3, %xmm01235; SSE2-NEXT: pcmpeqd %xmm3, %xmm21236; SSE2-NEXT: movmskps %xmm2, %eax1237; SSE2-NEXT: xorl $15, %eax1238; SSE2-NEXT: testb $1, %al1239; SSE2-NEXT: jne .LBB4_11240; SSE2-NEXT: # %bb.2: # %else1241; SSE2-NEXT: testb $2, %al1242; SSE2-NEXT: jne .LBB4_31243; SSE2-NEXT: .LBB4_4: # %else21244; SSE2-NEXT: testb $4, %al1245; SSE2-NEXT: jne .LBB4_51246; SSE2-NEXT: .LBB4_6: # %else41247; SSE2-NEXT: testb $8, %al1248; SSE2-NEXT: jne .LBB4_71249; SSE2-NEXT: .LBB4_8: # %else61250; SSE2-NEXT: retq1251; SSE2-NEXT: .LBB4_1: # %cond.store1252; SSE2-NEXT: movd %xmm0, %ecx1253; SSE2-NEXT: movw %cx, (%rdi)1254; SSE2-NEXT: testb $2, %al1255; SSE2-NEXT: je .LBB4_41256; SSE2-NEXT: .LBB4_3: # %cond.store11257; SSE2-NEXT: pextrw $1, %xmm0, %ecx1258; SSE2-NEXT: movw %cx, 2(%rdi)1259; SSE2-NEXT: testb $4, %al1260; SSE2-NEXT: je .LBB4_61261; SSE2-NEXT: .LBB4_5: # %cond.store31262; SSE2-NEXT: pextrw $2, %xmm0, %ecx1263; SSE2-NEXT: movw %cx, 4(%rdi)1264; SSE2-NEXT: testb $8, %al1265; SSE2-NEXT: je .LBB4_81266; SSE2-NEXT: .LBB4_7: # %cond.store51267; SSE2-NEXT: pextrw $3, %xmm0, %eax1268; SSE2-NEXT: movw %ax, 6(%rdi)1269; SSE2-NEXT: retq1270;1271; SSE4-LABEL: truncstore_v4i64_v4i16:1272; SSE4: # %bb.0:1273; SSE4-NEXT: pxor %xmm3, %xmm31274; SSE4-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]1275; SSE4-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]1276; SSE4-NEXT: packusdw %xmm1, %xmm01277; SSE4-NEXT: packusdw %xmm3, %xmm01278; SSE4-NEXT: pcmpeqd %xmm3, %xmm21279; SSE4-NEXT: movmskps %xmm2, %eax1280; SSE4-NEXT: xorl $15, %eax1281; SSE4-NEXT: testb $1, %al1282; SSE4-NEXT: jne .LBB4_11283; SSE4-NEXT: # %bb.2: # %else1284; SSE4-NEXT: testb $2, %al1285; SSE4-NEXT: jne .LBB4_31286; SSE4-NEXT: .LBB4_4: # %else21287; SSE4-NEXT: testb $4, %al1288; SSE4-NEXT: jne .LBB4_51289; SSE4-NEXT: .LBB4_6: # %else41290; SSE4-NEXT: testb $8, %al1291; SSE4-NEXT: jne .LBB4_71292; SSE4-NEXT: .LBB4_8: # %else61293; SSE4-NEXT: retq1294; SSE4-NEXT: .LBB4_1: # %cond.store1295; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)1296; SSE4-NEXT: testb $2, %al1297; SSE4-NEXT: je .LBB4_41298; SSE4-NEXT: .LBB4_3: # %cond.store11299; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)1300; SSE4-NEXT: testb $4, %al1301; SSE4-NEXT: je .LBB4_61302; SSE4-NEXT: .LBB4_5: # %cond.store31303; SSE4-NEXT: pextrw $2, %xmm0, 4(%rdi)1304; SSE4-NEXT: testb $8, %al1305; SSE4-NEXT: je .LBB4_81306; SSE4-NEXT: .LBB4_7: # %cond.store51307; SSE4-NEXT: pextrw $3, %xmm0, 6(%rdi)1308; SSE4-NEXT: retq1309;1310; AVX1-LABEL: truncstore_v4i64_v4i16:1311; AVX1: # %bb.0:1312; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm21313; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31314; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm3[0],xmm2[1,2,3],xmm3[4],xmm2[5,6,7]1315; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]1316; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm01317; AVX1-NEXT: vpackusdw %xmm0, %xmm0, %xmm01318; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11319; AVX1-NEXT: vmovmskps %xmm1, %eax1320; AVX1-NEXT: xorl $15, %eax1321; AVX1-NEXT: testb $1, %al1322; AVX1-NEXT: jne .LBB4_11323; AVX1-NEXT: # %bb.2: # %else1324; AVX1-NEXT: testb $2, %al1325; AVX1-NEXT: jne .LBB4_31326; AVX1-NEXT: .LBB4_4: # %else21327; AVX1-NEXT: testb $4, %al1328; AVX1-NEXT: jne .LBB4_51329; AVX1-NEXT: .LBB4_6: # %else41330; AVX1-NEXT: testb $8, %al1331; AVX1-NEXT: jne .LBB4_71332; AVX1-NEXT: .LBB4_8: # %else61333; AVX1-NEXT: vzeroupper1334; AVX1-NEXT: retq1335; AVX1-NEXT: .LBB4_1: # %cond.store1336; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)1337; AVX1-NEXT: testb $2, %al1338; AVX1-NEXT: je .LBB4_41339; AVX1-NEXT: .LBB4_3: # %cond.store11340; AVX1-NEXT: vpextrw $1, %xmm0, 2(%rdi)1341; AVX1-NEXT: testb $4, %al1342; AVX1-NEXT: je .LBB4_61343; AVX1-NEXT: .LBB4_5: # %cond.store31344; AVX1-NEXT: vpextrw $2, %xmm0, 4(%rdi)1345; AVX1-NEXT: testb $8, %al1346; AVX1-NEXT: je .LBB4_81347; AVX1-NEXT: .LBB4_7: # %cond.store51348; AVX1-NEXT: vpextrw $3, %xmm0, 6(%rdi)1349; AVX1-NEXT: vzeroupper1350; AVX1-NEXT: retq1351;1352; AVX2-LABEL: truncstore_v4i64_v4i16:1353; AVX2: # %bb.0:1354; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21355; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm31356; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm3[1,2,3],ymm0[4],ymm3[5,6,7],ymm0[8],ymm3[9,10,11],ymm0[12],ymm3[13,14,15]1357; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm31358; AVX2-NEXT: vpackusdw %xmm3, %xmm0, %xmm01359; AVX2-NEXT: vpackusdw %xmm0, %xmm0, %xmm01360; AVX2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11361; AVX2-NEXT: vmovmskps %xmm1, %eax1362; AVX2-NEXT: xorl $15, %eax1363; AVX2-NEXT: testb $1, %al1364; AVX2-NEXT: jne .LBB4_11365; AVX2-NEXT: # %bb.2: # %else1366; AVX2-NEXT: testb $2, %al1367; AVX2-NEXT: jne .LBB4_31368; AVX2-NEXT: .LBB4_4: # %else21369; AVX2-NEXT: testb $4, %al1370; AVX2-NEXT: jne .LBB4_51371; AVX2-NEXT: .LBB4_6: # %else41372; AVX2-NEXT: testb $8, %al1373; AVX2-NEXT: jne .LBB4_71374; AVX2-NEXT: .LBB4_8: # %else61375; AVX2-NEXT: vzeroupper1376; AVX2-NEXT: retq1377; AVX2-NEXT: .LBB4_1: # %cond.store1378; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)1379; AVX2-NEXT: testb $2, %al1380; AVX2-NEXT: je .LBB4_41381; AVX2-NEXT: .LBB4_3: # %cond.store11382; AVX2-NEXT: vpextrw $1, %xmm0, 2(%rdi)1383; AVX2-NEXT: testb $4, %al1384; AVX2-NEXT: je .LBB4_61385; AVX2-NEXT: .LBB4_5: # %cond.store31386; AVX2-NEXT: vpextrw $2, %xmm0, 4(%rdi)1387; AVX2-NEXT: testb $8, %al1388; AVX2-NEXT: je .LBB4_81389; AVX2-NEXT: .LBB4_7: # %cond.store51390; AVX2-NEXT: vpextrw $3, %xmm0, 6(%rdi)1391; AVX2-NEXT: vzeroupper1392; AVX2-NEXT: retq1393;1394; AVX512F-LABEL: truncstore_v4i64_v4i16:1395; AVX512F: # %bb.0:1396; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11397; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01398; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k01399; AVX512F-NEXT: vpmovqw %zmm0, %xmm01400; AVX512F-NEXT: kmovw %k0, %eax1401; AVX512F-NEXT: testb $1, %al1402; AVX512F-NEXT: jne .LBB4_11403; AVX512F-NEXT: # %bb.2: # %else1404; AVX512F-NEXT: testb $2, %al1405; AVX512F-NEXT: jne .LBB4_31406; AVX512F-NEXT: .LBB4_4: # %else21407; AVX512F-NEXT: testb $4, %al1408; AVX512F-NEXT: jne .LBB4_51409; AVX512F-NEXT: .LBB4_6: # %else41410; AVX512F-NEXT: testb $8, %al1411; AVX512F-NEXT: jne .LBB4_71412; AVX512F-NEXT: .LBB4_8: # %else61413; AVX512F-NEXT: vzeroupper1414; AVX512F-NEXT: retq1415; AVX512F-NEXT: .LBB4_1: # %cond.store1416; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)1417; AVX512F-NEXT: testb $2, %al1418; AVX512F-NEXT: je .LBB4_41419; AVX512F-NEXT: .LBB4_3: # %cond.store11420; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)1421; AVX512F-NEXT: testb $4, %al1422; AVX512F-NEXT: je .LBB4_61423; AVX512F-NEXT: .LBB4_5: # %cond.store31424; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)1425; AVX512F-NEXT: testb $8, %al1426; AVX512F-NEXT: je .LBB4_81427; AVX512F-NEXT: .LBB4_7: # %cond.store51428; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)1429; AVX512F-NEXT: vzeroupper1430; AVX512F-NEXT: retq1431;1432; AVX512FVL-LABEL: truncstore_v4i64_v4i16:1433; AVX512FVL: # %bb.0:1434; AVX512FVL-NEXT: vptestmd %xmm1, %xmm1, %k01435; AVX512FVL-NEXT: vpmovqw %ymm0, %xmm01436; AVX512FVL-NEXT: kmovw %k0, %eax1437; AVX512FVL-NEXT: testb $1, %al1438; AVX512FVL-NEXT: jne .LBB4_11439; AVX512FVL-NEXT: # %bb.2: # %else1440; AVX512FVL-NEXT: testb $2, %al1441; AVX512FVL-NEXT: jne .LBB4_31442; AVX512FVL-NEXT: .LBB4_4: # %else21443; AVX512FVL-NEXT: testb $4, %al1444; AVX512FVL-NEXT: jne .LBB4_51445; AVX512FVL-NEXT: .LBB4_6: # %else41446; AVX512FVL-NEXT: testb $8, %al1447; AVX512FVL-NEXT: jne .LBB4_71448; AVX512FVL-NEXT: .LBB4_8: # %else61449; AVX512FVL-NEXT: vzeroupper1450; AVX512FVL-NEXT: retq1451; AVX512FVL-NEXT: .LBB4_1: # %cond.store1452; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)1453; AVX512FVL-NEXT: testb $2, %al1454; AVX512FVL-NEXT: je .LBB4_41455; AVX512FVL-NEXT: .LBB4_3: # %cond.store11456; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)1457; AVX512FVL-NEXT: testb $4, %al1458; AVX512FVL-NEXT: je .LBB4_61459; AVX512FVL-NEXT: .LBB4_5: # %cond.store31460; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)1461; AVX512FVL-NEXT: testb $8, %al1462; AVX512FVL-NEXT: je .LBB4_81463; AVX512FVL-NEXT: .LBB4_7: # %cond.store51464; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)1465; AVX512FVL-NEXT: vzeroupper1466; AVX512FVL-NEXT: retq1467;1468; AVX512BW-LABEL: truncstore_v4i64_v4i16:1469; AVX512BW: # %bb.0:1470; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11471; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01472; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k01473; AVX512BW-NEXT: kshiftld $28, %k0, %k01474; AVX512BW-NEXT: kshiftrd $28, %k0, %k11475; AVX512BW-NEXT: vpmovqw %zmm0, %xmm01476; AVX512BW-NEXT: vmovdqu16 %zmm0, (%rdi) {%k1}1477; AVX512BW-NEXT: vzeroupper1478; AVX512BW-NEXT: retq1479;1480; AVX512BWVL-LABEL: truncstore_v4i64_v4i16:1481; AVX512BWVL: # %bb.0:1482; AVX512BWVL-NEXT: vptestmd %xmm1, %xmm1, %k11483; AVX512BWVL-NEXT: vpmovqw %ymm0, (%rdi) {%k1}1484; AVX512BWVL-NEXT: vzeroupper1485; AVX512BWVL-NEXT: retq1486 %a = icmp ne <4 x i32> %mask, zeroinitializer1487 %b = trunc <4 x i64> %x to <4 x i16>1488 call void @llvm.masked.store.v4i16.p0(<4 x i16> %b, ptr %p, i32 1, <4 x i1> %a)1489 ret void1490}1491 1492define void @truncstore_v4i64_v4i8(<4 x i64> %x, ptr %p, <4 x i32> %mask) {1493; SSE2-LABEL: truncstore_v4i64_v4i8:1494; SSE2: # %bb.0:1495; SSE2-NEXT: pxor %xmm3, %xmm31496; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]1497; SSE2-NEXT: pand %xmm4, %xmm11498; SSE2-NEXT: pand %xmm4, %xmm01499; SSE2-NEXT: packuswb %xmm1, %xmm01500; SSE2-NEXT: packuswb %xmm3, %xmm01501; SSE2-NEXT: packuswb %xmm3, %xmm01502; SSE2-NEXT: pcmpeqd %xmm3, %xmm21503; SSE2-NEXT: movmskps %xmm2, %ecx1504; SSE2-NEXT: xorl $15, %ecx1505; SSE2-NEXT: testb $1, %cl1506; SSE2-NEXT: movd %xmm0, %eax1507; SSE2-NEXT: jne .LBB5_11508; SSE2-NEXT: # %bb.2: # %else1509; SSE2-NEXT: testb $2, %cl1510; SSE2-NEXT: jne .LBB5_31511; SSE2-NEXT: .LBB5_4: # %else21512; SSE2-NEXT: testb $4, %cl1513; SSE2-NEXT: jne .LBB5_51514; SSE2-NEXT: .LBB5_6: # %else41515; SSE2-NEXT: testb $8, %cl1516; SSE2-NEXT: jne .LBB5_71517; SSE2-NEXT: .LBB5_8: # %else61518; SSE2-NEXT: retq1519; SSE2-NEXT: .LBB5_1: # %cond.store1520; SSE2-NEXT: movb %al, (%rdi)1521; SSE2-NEXT: testb $2, %cl1522; SSE2-NEXT: je .LBB5_41523; SSE2-NEXT: .LBB5_3: # %cond.store11524; SSE2-NEXT: movb %ah, 1(%rdi)1525; SSE2-NEXT: testb $4, %cl1526; SSE2-NEXT: je .LBB5_61527; SSE2-NEXT: .LBB5_5: # %cond.store31528; SSE2-NEXT: movl %eax, %edx1529; SSE2-NEXT: shrl $16, %edx1530; SSE2-NEXT: movb %dl, 2(%rdi)1531; SSE2-NEXT: testb $8, %cl1532; SSE2-NEXT: je .LBB5_81533; SSE2-NEXT: .LBB5_7: # %cond.store51534; SSE2-NEXT: shrl $24, %eax1535; SSE2-NEXT: movb %al, 3(%rdi)1536; SSE2-NEXT: retq1537;1538; SSE4-LABEL: truncstore_v4i64_v4i8:1539; SSE4: # %bb.0:1540; SSE4-NEXT: pxor %xmm3, %xmm31541; SSE4-NEXT: movd {{.*#+}} xmm4 = [0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0]1542; SSE4-NEXT: pshufb %xmm4, %xmm11543; SSE4-NEXT: pshufb %xmm4, %xmm01544; SSE4-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1545; SSE4-NEXT: pcmpeqd %xmm2, %xmm31546; SSE4-NEXT: movmskps %xmm3, %eax1547; SSE4-NEXT: xorl $15, %eax1548; SSE4-NEXT: testb $1, %al1549; SSE4-NEXT: jne .LBB5_11550; SSE4-NEXT: # %bb.2: # %else1551; SSE4-NEXT: testb $2, %al1552; SSE4-NEXT: jne .LBB5_31553; SSE4-NEXT: .LBB5_4: # %else21554; SSE4-NEXT: testb $4, %al1555; SSE4-NEXT: jne .LBB5_51556; SSE4-NEXT: .LBB5_6: # %else41557; SSE4-NEXT: testb $8, %al1558; SSE4-NEXT: jne .LBB5_71559; SSE4-NEXT: .LBB5_8: # %else61560; SSE4-NEXT: retq1561; SSE4-NEXT: .LBB5_1: # %cond.store1562; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)1563; SSE4-NEXT: testb $2, %al1564; SSE4-NEXT: je .LBB5_41565; SSE4-NEXT: .LBB5_3: # %cond.store11566; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)1567; SSE4-NEXT: testb $4, %al1568; SSE4-NEXT: je .LBB5_61569; SSE4-NEXT: .LBB5_5: # %cond.store31570; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)1571; SSE4-NEXT: testb $8, %al1572; SSE4-NEXT: je .LBB5_81573; SSE4-NEXT: .LBB5_7: # %cond.store51574; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)1575; SSE4-NEXT: retq1576;1577; AVX1-LABEL: truncstore_v4i64_v4i8:1578; AVX1: # %bb.0:1579; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm21580; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31581; AVX1-NEXT: vmovd {{.*#+}} xmm4 = [0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0]1582; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm31583; AVX1-NEXT: vpshufb %xmm4, %xmm0, %xmm01584; AVX1-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]1585; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11586; AVX1-NEXT: vmovmskps %xmm1, %eax1587; AVX1-NEXT: xorl $15, %eax1588; AVX1-NEXT: testb $1, %al1589; AVX1-NEXT: jne .LBB5_11590; AVX1-NEXT: # %bb.2: # %else1591; AVX1-NEXT: testb $2, %al1592; AVX1-NEXT: jne .LBB5_31593; AVX1-NEXT: .LBB5_4: # %else21594; AVX1-NEXT: testb $4, %al1595; AVX1-NEXT: jne .LBB5_51596; AVX1-NEXT: .LBB5_6: # %else41597; AVX1-NEXT: testb $8, %al1598; AVX1-NEXT: jne .LBB5_71599; AVX1-NEXT: .LBB5_8: # %else61600; AVX1-NEXT: vzeroupper1601; AVX1-NEXT: retq1602; AVX1-NEXT: .LBB5_1: # %cond.store1603; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)1604; AVX1-NEXT: testb $2, %al1605; AVX1-NEXT: je .LBB5_41606; AVX1-NEXT: .LBB5_3: # %cond.store11607; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)1608; AVX1-NEXT: testb $4, %al1609; AVX1-NEXT: je .LBB5_61610; AVX1-NEXT: .LBB5_5: # %cond.store31611; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)1612; AVX1-NEXT: testb $8, %al1613; AVX1-NEXT: je .LBB5_81614; AVX1-NEXT: .LBB5_7: # %cond.store51615; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)1616; AVX1-NEXT: vzeroupper1617; AVX1-NEXT: retq1618;1619; AVX2-LABEL: truncstore_v4i64_v4i8:1620; AVX2: # %bb.0:1621; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21622; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm31623; AVX2-NEXT: vpbroadcastw {{.*#+}} xmm4 = [0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,8]1624; AVX2-NEXT: vpshufb %xmm4, %xmm3, %xmm31625; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm01626; AVX2-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]1627; AVX2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm11628; AVX2-NEXT: vmovmskps %xmm1, %eax1629; AVX2-NEXT: xorl $15, %eax1630; AVX2-NEXT: testb $1, %al1631; AVX2-NEXT: jne .LBB5_11632; AVX2-NEXT: # %bb.2: # %else1633; AVX2-NEXT: testb $2, %al1634; AVX2-NEXT: jne .LBB5_31635; AVX2-NEXT: .LBB5_4: # %else21636; AVX2-NEXT: testb $4, %al1637; AVX2-NEXT: jne .LBB5_51638; AVX2-NEXT: .LBB5_6: # %else41639; AVX2-NEXT: testb $8, %al1640; AVX2-NEXT: jne .LBB5_71641; AVX2-NEXT: .LBB5_8: # %else61642; AVX2-NEXT: vzeroupper1643; AVX2-NEXT: retq1644; AVX2-NEXT: .LBB5_1: # %cond.store1645; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)1646; AVX2-NEXT: testb $2, %al1647; AVX2-NEXT: je .LBB5_41648; AVX2-NEXT: .LBB5_3: # %cond.store11649; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)1650; AVX2-NEXT: testb $4, %al1651; AVX2-NEXT: je .LBB5_61652; AVX2-NEXT: .LBB5_5: # %cond.store31653; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)1654; AVX2-NEXT: testb $8, %al1655; AVX2-NEXT: je .LBB5_81656; AVX2-NEXT: .LBB5_7: # %cond.store51657; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)1658; AVX2-NEXT: vzeroupper1659; AVX2-NEXT: retq1660;1661; AVX512F-LABEL: truncstore_v4i64_v4i8:1662; AVX512F: # %bb.0:1663; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11664; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01665; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k01666; AVX512F-NEXT: vpmovqb %zmm0, %xmm01667; AVX512F-NEXT: kmovw %k0, %eax1668; AVX512F-NEXT: testb $1, %al1669; AVX512F-NEXT: jne .LBB5_11670; AVX512F-NEXT: # %bb.2: # %else1671; AVX512F-NEXT: testb $2, %al1672; AVX512F-NEXT: jne .LBB5_31673; AVX512F-NEXT: .LBB5_4: # %else21674; AVX512F-NEXT: testb $4, %al1675; AVX512F-NEXT: jne .LBB5_51676; AVX512F-NEXT: .LBB5_6: # %else41677; AVX512F-NEXT: testb $8, %al1678; AVX512F-NEXT: jne .LBB5_71679; AVX512F-NEXT: .LBB5_8: # %else61680; AVX512F-NEXT: vzeroupper1681; AVX512F-NEXT: retq1682; AVX512F-NEXT: .LBB5_1: # %cond.store1683; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)1684; AVX512F-NEXT: testb $2, %al1685; AVX512F-NEXT: je .LBB5_41686; AVX512F-NEXT: .LBB5_3: # %cond.store11687; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)1688; AVX512F-NEXT: testb $4, %al1689; AVX512F-NEXT: je .LBB5_61690; AVX512F-NEXT: .LBB5_5: # %cond.store31691; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)1692; AVX512F-NEXT: testb $8, %al1693; AVX512F-NEXT: je .LBB5_81694; AVX512F-NEXT: .LBB5_7: # %cond.store51695; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)1696; AVX512F-NEXT: vzeroupper1697; AVX512F-NEXT: retq1698;1699; AVX512FVL-LABEL: truncstore_v4i64_v4i8:1700; AVX512FVL: # %bb.0:1701; AVX512FVL-NEXT: vptestmd %xmm1, %xmm1, %k01702; AVX512FVL-NEXT: vpmovqb %ymm0, %xmm01703; AVX512FVL-NEXT: kmovw %k0, %eax1704; AVX512FVL-NEXT: testb $1, %al1705; AVX512FVL-NEXT: jne .LBB5_11706; AVX512FVL-NEXT: # %bb.2: # %else1707; AVX512FVL-NEXT: testb $2, %al1708; AVX512FVL-NEXT: jne .LBB5_31709; AVX512FVL-NEXT: .LBB5_4: # %else21710; AVX512FVL-NEXT: testb $4, %al1711; AVX512FVL-NEXT: jne .LBB5_51712; AVX512FVL-NEXT: .LBB5_6: # %else41713; AVX512FVL-NEXT: testb $8, %al1714; AVX512FVL-NEXT: jne .LBB5_71715; AVX512FVL-NEXT: .LBB5_8: # %else61716; AVX512FVL-NEXT: vzeroupper1717; AVX512FVL-NEXT: retq1718; AVX512FVL-NEXT: .LBB5_1: # %cond.store1719; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)1720; AVX512FVL-NEXT: testb $2, %al1721; AVX512FVL-NEXT: je .LBB5_41722; AVX512FVL-NEXT: .LBB5_3: # %cond.store11723; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)1724; AVX512FVL-NEXT: testb $4, %al1725; AVX512FVL-NEXT: je .LBB5_61726; AVX512FVL-NEXT: .LBB5_5: # %cond.store31727; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)1728; AVX512FVL-NEXT: testb $8, %al1729; AVX512FVL-NEXT: je .LBB5_81730; AVX512FVL-NEXT: .LBB5_7: # %cond.store51731; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)1732; AVX512FVL-NEXT: vzeroupper1733; AVX512FVL-NEXT: retq1734;1735; AVX512BW-LABEL: truncstore_v4i64_v4i8:1736; AVX512BW: # %bb.0:1737; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11738; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01739; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k01740; AVX512BW-NEXT: kshiftlq $60, %k0, %k01741; AVX512BW-NEXT: kshiftrq $60, %k0, %k11742; AVX512BW-NEXT: vpmovqb %zmm0, %xmm01743; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}1744; AVX512BW-NEXT: vzeroupper1745; AVX512BW-NEXT: retq1746;1747; AVX512BWVL-LABEL: truncstore_v4i64_v4i8:1748; AVX512BWVL: # %bb.0:1749; AVX512BWVL-NEXT: vptestmd %xmm1, %xmm1, %k11750; AVX512BWVL-NEXT: vpmovqb %ymm0, (%rdi) {%k1}1751; AVX512BWVL-NEXT: vzeroupper1752; AVX512BWVL-NEXT: retq1753 %a = icmp ne <4 x i32> %mask, zeroinitializer1754 %b = trunc <4 x i64> %x to <4 x i8>1755 call void @llvm.masked.store.v4i8.p0(<4 x i8> %b, ptr %p, i32 1, <4 x i1> %a)1756 ret void1757}1758 1759define void @truncstore_v2i64_v2i32(<2 x i64> %x, ptr %p, <2 x i64> %mask) {1760; SSE2-LABEL: truncstore_v2i64_v2i32:1761; SSE2: # %bb.0:1762; SSE2-NEXT: pxor %xmm2, %xmm21763; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1764; SSE2-NEXT: pcmpeqd %xmm1, %xmm21765; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]1766; SSE2-NEXT: pand %xmm2, %xmm11767; SSE2-NEXT: movmskpd %xmm1, %eax1768; SSE2-NEXT: xorl $3, %eax1769; SSE2-NEXT: testb $1, %al1770; SSE2-NEXT: jne .LBB6_11771; SSE2-NEXT: # %bb.2: # %else1772; SSE2-NEXT: testb $2, %al1773; SSE2-NEXT: jne .LBB6_31774; SSE2-NEXT: .LBB6_4: # %else21775; SSE2-NEXT: retq1776; SSE2-NEXT: .LBB6_1: # %cond.store1777; SSE2-NEXT: movd %xmm0, (%rdi)1778; SSE2-NEXT: testb $2, %al1779; SSE2-NEXT: je .LBB6_41780; SSE2-NEXT: .LBB6_3: # %cond.store11781; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1782; SSE2-NEXT: movd %xmm0, 4(%rdi)1783; SSE2-NEXT: retq1784;1785; SSE4-LABEL: truncstore_v2i64_v2i32:1786; SSE4: # %bb.0:1787; SSE4-NEXT: pxor %xmm2, %xmm21788; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1789; SSE4-NEXT: pcmpeqq %xmm1, %xmm21790; SSE4-NEXT: movmskpd %xmm2, %eax1791; SSE4-NEXT: xorl $3, %eax1792; SSE4-NEXT: testb $1, %al1793; SSE4-NEXT: jne .LBB6_11794; SSE4-NEXT: # %bb.2: # %else1795; SSE4-NEXT: testb $2, %al1796; SSE4-NEXT: jne .LBB6_31797; SSE4-NEXT: .LBB6_4: # %else21798; SSE4-NEXT: retq1799; SSE4-NEXT: .LBB6_1: # %cond.store1800; SSE4-NEXT: movd %xmm0, (%rdi)1801; SSE4-NEXT: testb $2, %al1802; SSE4-NEXT: je .LBB6_41803; SSE4-NEXT: .LBB6_3: # %cond.store11804; SSE4-NEXT: pextrd $1, %xmm0, 4(%rdi)1805; SSE4-NEXT: retq1806;1807; AVX1-LABEL: truncstore_v2i64_v2i32:1808; AVX1: # %bb.0:1809; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm21810; AVX1-NEXT: vpcmpeqq %xmm2, %xmm1, %xmm11811; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21812; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm11813; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero1814; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]1815; AVX1-NEXT: vmaskmovps %xmm0, %xmm1, (%rdi)1816; AVX1-NEXT: retq1817;1818; AVX2-LABEL: truncstore_v2i64_v2i32:1819; AVX2: # %bb.0:1820; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21821; AVX2-NEXT: vpcmpeqq %xmm2, %xmm1, %xmm11822; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21823; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm11824; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero1825; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1826; AVX2-NEXT: vpmaskmovd %xmm0, %xmm1, (%rdi)1827; AVX2-NEXT: retq1828;1829; AVX512-LABEL: truncstore_v2i64_v2i32:1830; AVX512: # %bb.0:1831; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11832; AVX512-NEXT: vptestmq %zmm1, %zmm1, %k01833; AVX512-NEXT: kshiftlw $14, %k0, %k01834; AVX512-NEXT: kshiftrw $14, %k0, %k11835; AVX512-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1836; AVX512-NEXT: vmovdqu32 %zmm0, (%rdi) {%k1}1837; AVX512-NEXT: vzeroupper1838; AVX512-NEXT: retq1839;1840; AVX512VL-LABEL: truncstore_v2i64_v2i32:1841; AVX512VL: # %bb.0:1842; AVX512VL-NEXT: vptestmq %xmm1, %xmm1, %k11843; AVX512VL-NEXT: vpmovqd %xmm0, (%rdi) {%k1}1844; AVX512VL-NEXT: retq1845 %a = icmp ne <2 x i64> %mask, zeroinitializer1846 %b = trunc <2 x i64> %x to <2 x i32>1847 call void @llvm.masked.store.v2i32.p0(<2 x i32> %b, ptr %p, i32 1, <2 x i1> %a)1848 ret void1849}1850 1851define void @truncstore_v2i64_v2i16(<2 x i64> %x, ptr %p, <2 x i64> %mask) {1852; SSE2-LABEL: truncstore_v2i64_v2i16:1853; SSE2: # %bb.0:1854; SSE2-NEXT: pxor %xmm2, %xmm21855; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1856; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]1857; SSE2-NEXT: pcmpeqd %xmm1, %xmm21858; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]1859; SSE2-NEXT: pand %xmm2, %xmm11860; SSE2-NEXT: movmskpd %xmm1, %eax1861; SSE2-NEXT: xorl $3, %eax1862; SSE2-NEXT: testb $1, %al1863; SSE2-NEXT: jne .LBB7_11864; SSE2-NEXT: # %bb.2: # %else1865; SSE2-NEXT: testb $2, %al1866; SSE2-NEXT: jne .LBB7_31867; SSE2-NEXT: .LBB7_4: # %else21868; SSE2-NEXT: retq1869; SSE2-NEXT: .LBB7_1: # %cond.store1870; SSE2-NEXT: movd %xmm0, %ecx1871; SSE2-NEXT: movw %cx, (%rdi)1872; SSE2-NEXT: testb $2, %al1873; SSE2-NEXT: je .LBB7_41874; SSE2-NEXT: .LBB7_3: # %cond.store11875; SSE2-NEXT: pextrw $1, %xmm0, %eax1876; SSE2-NEXT: movw %ax, 2(%rdi)1877; SSE2-NEXT: retq1878;1879; SSE4-LABEL: truncstore_v2i64_v2i16:1880; SSE4: # %bb.0:1881; SSE4-NEXT: pxor %xmm2, %xmm21882; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1883; SSE4-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]1884; SSE4-NEXT: pcmpeqq %xmm1, %xmm21885; SSE4-NEXT: movmskpd %xmm2, %eax1886; SSE4-NEXT: xorl $3, %eax1887; SSE4-NEXT: testb $1, %al1888; SSE4-NEXT: jne .LBB7_11889; SSE4-NEXT: # %bb.2: # %else1890; SSE4-NEXT: testb $2, %al1891; SSE4-NEXT: jne .LBB7_31892; SSE4-NEXT: .LBB7_4: # %else21893; SSE4-NEXT: retq1894; SSE4-NEXT: .LBB7_1: # %cond.store1895; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)1896; SSE4-NEXT: testb $2, %al1897; SSE4-NEXT: je .LBB7_41898; SSE4-NEXT: .LBB7_3: # %cond.store11899; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)1900; SSE4-NEXT: retq1901;1902; AVX-LABEL: truncstore_v2i64_v2i16:1903; AVX: # %bb.0:1904; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm21905; AVX-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1906; AVX-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]1907; AVX-NEXT: vpcmpeqq %xmm2, %xmm1, %xmm11908; AVX-NEXT: vmovmskpd %xmm1, %eax1909; AVX-NEXT: xorl $3, %eax1910; AVX-NEXT: testb $1, %al1911; AVX-NEXT: jne .LBB7_11912; AVX-NEXT: # %bb.2: # %else1913; AVX-NEXT: testb $2, %al1914; AVX-NEXT: jne .LBB7_31915; AVX-NEXT: .LBB7_4: # %else21916; AVX-NEXT: retq1917; AVX-NEXT: .LBB7_1: # %cond.store1918; AVX-NEXT: vpextrw $0, %xmm0, (%rdi)1919; AVX-NEXT: testb $2, %al1920; AVX-NEXT: je .LBB7_41921; AVX-NEXT: .LBB7_3: # %cond.store11922; AVX-NEXT: vpextrw $1, %xmm0, 2(%rdi)1923; AVX-NEXT: retq1924;1925; AVX512F-LABEL: truncstore_v2i64_v2i16:1926; AVX512F: # %bb.0:1927; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11928; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k01929; AVX512F-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1930; AVX512F-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]1931; AVX512F-NEXT: kmovw %k0, %eax1932; AVX512F-NEXT: testb $1, %al1933; AVX512F-NEXT: jne .LBB7_11934; AVX512F-NEXT: # %bb.2: # %else1935; AVX512F-NEXT: testb $2, %al1936; AVX512F-NEXT: jne .LBB7_31937; AVX512F-NEXT: .LBB7_4: # %else21938; AVX512F-NEXT: vzeroupper1939; AVX512F-NEXT: retq1940; AVX512F-NEXT: .LBB7_1: # %cond.store1941; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)1942; AVX512F-NEXT: testb $2, %al1943; AVX512F-NEXT: je .LBB7_41944; AVX512F-NEXT: .LBB7_3: # %cond.store11945; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)1946; AVX512F-NEXT: vzeroupper1947; AVX512F-NEXT: retq1948;1949; AVX512FVL-LABEL: truncstore_v2i64_v2i16:1950; AVX512FVL: # %bb.0:1951; AVX512FVL-NEXT: vptestmq %xmm1, %xmm1, %k01952; AVX512FVL-NEXT: vpmovqw %xmm0, %xmm01953; AVX512FVL-NEXT: kmovw %k0, %eax1954; AVX512FVL-NEXT: testb $1, %al1955; AVX512FVL-NEXT: jne .LBB7_11956; AVX512FVL-NEXT: # %bb.2: # %else1957; AVX512FVL-NEXT: testb $2, %al1958; AVX512FVL-NEXT: jne .LBB7_31959; AVX512FVL-NEXT: .LBB7_4: # %else21960; AVX512FVL-NEXT: retq1961; AVX512FVL-NEXT: .LBB7_1: # %cond.store1962; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)1963; AVX512FVL-NEXT: testb $2, %al1964; AVX512FVL-NEXT: je .LBB7_41965; AVX512FVL-NEXT: .LBB7_3: # %cond.store11966; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)1967; AVX512FVL-NEXT: retq1968;1969; AVX512BW-LABEL: truncstore_v2i64_v2i16:1970; AVX512BW: # %bb.0:1971; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11972; AVX512BW-NEXT: vptestmq %zmm1, %zmm1, %k01973; AVX512BW-NEXT: kshiftld $30, %k0, %k01974; AVX512BW-NEXT: kshiftrd $30, %k0, %k11975; AVX512BW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1976; AVX512BW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]1977; AVX512BW-NEXT: vmovdqu16 %zmm0, (%rdi) {%k1}1978; AVX512BW-NEXT: vzeroupper1979; AVX512BW-NEXT: retq1980;1981; AVX512BWVL-LABEL: truncstore_v2i64_v2i16:1982; AVX512BWVL: # %bb.0:1983; AVX512BWVL-NEXT: vptestmq %xmm1, %xmm1, %k11984; AVX512BWVL-NEXT: vpmovqw %xmm0, (%rdi) {%k1}1985; AVX512BWVL-NEXT: retq1986 %a = icmp ne <2 x i64> %mask, zeroinitializer1987 %b = trunc <2 x i64> %x to <2 x i16>1988 call void @llvm.masked.store.v2i16.p0(<2 x i16> %b, ptr %p, i32 1, <2 x i1> %a)1989 ret void1990}1991 1992define void @truncstore_v2i64_v2i8(<2 x i64> %x, ptr %p, <2 x i64> %mask) {1993; SSE2-LABEL: truncstore_v2i64_v2i8:1994; SSE2: # %bb.0:1995; SSE2-NEXT: pxor %xmm2, %xmm21996; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01997; SSE2-NEXT: packuswb %xmm0, %xmm01998; SSE2-NEXT: packuswb %xmm0, %xmm01999; SSE2-NEXT: packuswb %xmm0, %xmm02000; SSE2-NEXT: pcmpeqd %xmm1, %xmm22001; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]2002; SSE2-NEXT: pand %xmm2, %xmm12003; SSE2-NEXT: movmskpd %xmm1, %eax2004; SSE2-NEXT: xorl $3, %eax2005; SSE2-NEXT: testb $1, %al2006; SSE2-NEXT: movd %xmm0, %ecx2007; SSE2-NEXT: jne .LBB8_12008; SSE2-NEXT: # %bb.2: # %else2009; SSE2-NEXT: testb $2, %al2010; SSE2-NEXT: jne .LBB8_32011; SSE2-NEXT: .LBB8_4: # %else22012; SSE2-NEXT: retq2013; SSE2-NEXT: .LBB8_1: # %cond.store2014; SSE2-NEXT: movb %cl, (%rdi)2015; SSE2-NEXT: testb $2, %al2016; SSE2-NEXT: je .LBB8_42017; SSE2-NEXT: .LBB8_3: # %cond.store12018; SSE2-NEXT: movb %ch, 1(%rdi)2019; SSE2-NEXT: retq2020;2021; SSE4-LABEL: truncstore_v2i64_v2i8:2022; SSE4: # %bb.0:2023; SSE4-NEXT: pxor %xmm2, %xmm22024; SSE4-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]2025; SSE4-NEXT: pcmpeqq %xmm1, %xmm22026; SSE4-NEXT: movmskpd %xmm2, %eax2027; SSE4-NEXT: xorl $3, %eax2028; SSE4-NEXT: testb $1, %al2029; SSE4-NEXT: jne .LBB8_12030; SSE4-NEXT: # %bb.2: # %else2031; SSE4-NEXT: testb $2, %al2032; SSE4-NEXT: jne .LBB8_32033; SSE4-NEXT: .LBB8_4: # %else22034; SSE4-NEXT: retq2035; SSE4-NEXT: .LBB8_1: # %cond.store2036; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)2037; SSE4-NEXT: testb $2, %al2038; SSE4-NEXT: je .LBB8_42039; SSE4-NEXT: .LBB8_3: # %cond.store12040; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)2041; SSE4-NEXT: retq2042;2043; AVX-LABEL: truncstore_v2i64_v2i8:2044; AVX: # %bb.0:2045; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm22046; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]2047; AVX-NEXT: vpcmpeqq %xmm2, %xmm1, %xmm12048; AVX-NEXT: vmovmskpd %xmm1, %eax2049; AVX-NEXT: xorl $3, %eax2050; AVX-NEXT: testb $1, %al2051; AVX-NEXT: jne .LBB8_12052; AVX-NEXT: # %bb.2: # %else2053; AVX-NEXT: testb $2, %al2054; AVX-NEXT: jne .LBB8_32055; AVX-NEXT: .LBB8_4: # %else22056; AVX-NEXT: retq2057; AVX-NEXT: .LBB8_1: # %cond.store2058; AVX-NEXT: vpextrb $0, %xmm0, (%rdi)2059; AVX-NEXT: testb $2, %al2060; AVX-NEXT: je .LBB8_42061; AVX-NEXT: .LBB8_3: # %cond.store12062; AVX-NEXT: vpextrb $1, %xmm0, 1(%rdi)2063; AVX-NEXT: retq2064;2065; AVX512F-LABEL: truncstore_v2i64_v2i8:2066; AVX512F: # %bb.0:2067; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm12068; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k02069; AVX512F-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]2070; AVX512F-NEXT: kmovw %k0, %eax2071; AVX512F-NEXT: testb $1, %al2072; AVX512F-NEXT: jne .LBB8_12073; AVX512F-NEXT: # %bb.2: # %else2074; AVX512F-NEXT: testb $2, %al2075; AVX512F-NEXT: jne .LBB8_32076; AVX512F-NEXT: .LBB8_4: # %else22077; AVX512F-NEXT: vzeroupper2078; AVX512F-NEXT: retq2079; AVX512F-NEXT: .LBB8_1: # %cond.store2080; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)2081; AVX512F-NEXT: testb $2, %al2082; AVX512F-NEXT: je .LBB8_42083; AVX512F-NEXT: .LBB8_3: # %cond.store12084; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)2085; AVX512F-NEXT: vzeroupper2086; AVX512F-NEXT: retq2087;2088; AVX512FVL-LABEL: truncstore_v2i64_v2i8:2089; AVX512FVL: # %bb.0:2090; AVX512FVL-NEXT: vptestmq %xmm1, %xmm1, %k02091; AVX512FVL-NEXT: vpmovqb %xmm0, %xmm02092; AVX512FVL-NEXT: kmovw %k0, %eax2093; AVX512FVL-NEXT: testb $1, %al2094; AVX512FVL-NEXT: jne .LBB8_12095; AVX512FVL-NEXT: # %bb.2: # %else2096; AVX512FVL-NEXT: testb $2, %al2097; AVX512FVL-NEXT: jne .LBB8_32098; AVX512FVL-NEXT: .LBB8_4: # %else22099; AVX512FVL-NEXT: retq2100; AVX512FVL-NEXT: .LBB8_1: # %cond.store2101; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)2102; AVX512FVL-NEXT: testb $2, %al2103; AVX512FVL-NEXT: je .LBB8_42104; AVX512FVL-NEXT: .LBB8_3: # %cond.store12105; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)2106; AVX512FVL-NEXT: retq2107;2108; AVX512BW-LABEL: truncstore_v2i64_v2i8:2109; AVX512BW: # %bb.0:2110; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm12111; AVX512BW-NEXT: vptestmq %zmm1, %zmm1, %k02112; AVX512BW-NEXT: kshiftlq $62, %k0, %k02113; AVX512BW-NEXT: kshiftrq $62, %k0, %k12114; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]2115; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}2116; AVX512BW-NEXT: vzeroupper2117; AVX512BW-NEXT: retq2118;2119; AVX512BWVL-LABEL: truncstore_v2i64_v2i8:2120; AVX512BWVL: # %bb.0:2121; AVX512BWVL-NEXT: vptestmq %xmm1, %xmm1, %k12122; AVX512BWVL-NEXT: vpmovqb %xmm0, (%rdi) {%k1}2123; AVX512BWVL-NEXT: retq2124 %a = icmp ne <2 x i64> %mask, zeroinitializer2125 %b = trunc <2 x i64> %x to <2 x i8>2126 call void @llvm.masked.store.v2i8.p0(<2 x i8> %b, ptr %p, i32 1, <2 x i1> %a)2127 ret void2128}2129 2130define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {2131; SSE2-LABEL: truncstore_v16i32_v16i16:2132; SSE2: # %bb.0:2133; SSE2-NEXT: pxor %xmm8, %xmm82134; SSE2-NEXT: pslld $16, %xmm12135; SSE2-NEXT: psrad $16, %xmm12136; SSE2-NEXT: pslld $16, %xmm02137; SSE2-NEXT: psrad $16, %xmm02138; SSE2-NEXT: packssdw %xmm1, %xmm02139; SSE2-NEXT: pcmpeqd %xmm8, %xmm72140; SSE2-NEXT: pcmpeqd %xmm8, %xmm62141; SSE2-NEXT: packssdw %xmm7, %xmm62142; SSE2-NEXT: pcmpeqd %xmm8, %xmm52143; SSE2-NEXT: pcmpeqd %xmm8, %xmm42144; SSE2-NEXT: packssdw %xmm5, %xmm42145; SSE2-NEXT: packsswb %xmm6, %xmm42146; SSE2-NEXT: pmovmskb %xmm4, %eax2147; SSE2-NEXT: xorl $65535, %eax # imm = 0xFFFF2148; SSE2-NEXT: testb $1, %al2149; SSE2-NEXT: jne .LBB9_12150; SSE2-NEXT: # %bb.2: # %else2151; SSE2-NEXT: testb $2, %al2152; SSE2-NEXT: jne .LBB9_32153; SSE2-NEXT: .LBB9_4: # %else22154; SSE2-NEXT: testb $4, %al2155; SSE2-NEXT: jne .LBB9_52156; SSE2-NEXT: .LBB9_6: # %else42157; SSE2-NEXT: testb $8, %al2158; SSE2-NEXT: jne .LBB9_72159; SSE2-NEXT: .LBB9_8: # %else62160; SSE2-NEXT: testb $16, %al2161; SSE2-NEXT: jne .LBB9_92162; SSE2-NEXT: .LBB9_10: # %else82163; SSE2-NEXT: testb $32, %al2164; SSE2-NEXT: je .LBB9_122165; SSE2-NEXT: .LBB9_11: # %cond.store92166; SSE2-NEXT: pextrw $5, %xmm0, %ecx2167; SSE2-NEXT: movw %cx, 10(%rdi)2168; SSE2-NEXT: .LBB9_12: # %else102169; SSE2-NEXT: pslld $16, %xmm32170; SSE2-NEXT: pslld $16, %xmm22171; SSE2-NEXT: testb $64, %al2172; SSE2-NEXT: je .LBB9_142173; SSE2-NEXT: # %bb.13: # %cond.store112174; SSE2-NEXT: pextrw $6, %xmm0, %ecx2175; SSE2-NEXT: movw %cx, 12(%rdi)2176; SSE2-NEXT: .LBB9_14: # %else122177; SSE2-NEXT: psrad $16, %xmm32178; SSE2-NEXT: psrad $16, %xmm22179; SSE2-NEXT: testb %al, %al2180; SSE2-NEXT: jns .LBB9_162181; SSE2-NEXT: # %bb.15: # %cond.store132182; SSE2-NEXT: pextrw $7, %xmm0, %ecx2183; SSE2-NEXT: movw %cx, 14(%rdi)2184; SSE2-NEXT: .LBB9_16: # %else142185; SSE2-NEXT: packssdw %xmm3, %xmm22186; SSE2-NEXT: testl $256, %eax # imm = 0x1002187; SSE2-NEXT: jne .LBB9_172188; SSE2-NEXT: # %bb.18: # %else162189; SSE2-NEXT: testl $512, %eax # imm = 0x2002190; SSE2-NEXT: jne .LBB9_192191; SSE2-NEXT: .LBB9_20: # %else182192; SSE2-NEXT: testl $1024, %eax # imm = 0x4002193; SSE2-NEXT: jne .LBB9_212194; SSE2-NEXT: .LBB9_22: # %else202195; SSE2-NEXT: testl $2048, %eax # imm = 0x8002196; SSE2-NEXT: jne .LBB9_232197; SSE2-NEXT: .LBB9_24: # %else222198; SSE2-NEXT: testl $4096, %eax # imm = 0x10002199; SSE2-NEXT: jne .LBB9_252200; SSE2-NEXT: .LBB9_26: # %else242201; SSE2-NEXT: testl $8192, %eax # imm = 0x20002202; SSE2-NEXT: jne .LBB9_272203; SSE2-NEXT: .LBB9_28: # %else262204; SSE2-NEXT: testl $16384, %eax # imm = 0x40002205; SSE2-NEXT: jne .LBB9_292206; SSE2-NEXT: .LBB9_30: # %else282207; SSE2-NEXT: testl $32768, %eax # imm = 0x80002208; SSE2-NEXT: jne .LBB9_312209; SSE2-NEXT: .LBB9_32: # %else302210; SSE2-NEXT: retq2211; SSE2-NEXT: .LBB9_1: # %cond.store2212; SSE2-NEXT: movd %xmm0, %ecx2213; SSE2-NEXT: movw %cx, (%rdi)2214; SSE2-NEXT: testb $2, %al2215; SSE2-NEXT: je .LBB9_42216; SSE2-NEXT: .LBB9_3: # %cond.store12217; SSE2-NEXT: pextrw $1, %xmm0, %ecx2218; SSE2-NEXT: movw %cx, 2(%rdi)2219; SSE2-NEXT: testb $4, %al2220; SSE2-NEXT: je .LBB9_62221; SSE2-NEXT: .LBB9_5: # %cond.store32222; SSE2-NEXT: pextrw $2, %xmm0, %ecx2223; SSE2-NEXT: movw %cx, 4(%rdi)2224; SSE2-NEXT: testb $8, %al2225; SSE2-NEXT: je .LBB9_82226; SSE2-NEXT: .LBB9_7: # %cond.store52227; SSE2-NEXT: pextrw $3, %xmm0, %ecx2228; SSE2-NEXT: movw %cx, 6(%rdi)2229; SSE2-NEXT: testb $16, %al2230; SSE2-NEXT: je .LBB9_102231; SSE2-NEXT: .LBB9_9: # %cond.store72232; SSE2-NEXT: pextrw $4, %xmm0, %ecx2233; SSE2-NEXT: movw %cx, 8(%rdi)2234; SSE2-NEXT: testb $32, %al2235; SSE2-NEXT: jne .LBB9_112236; SSE2-NEXT: jmp .LBB9_122237; SSE2-NEXT: .LBB9_17: # %cond.store152238; SSE2-NEXT: movd %xmm2, %ecx2239; SSE2-NEXT: movw %cx, 16(%rdi)2240; SSE2-NEXT: testl $512, %eax # imm = 0x2002241; SSE2-NEXT: je .LBB9_202242; SSE2-NEXT: .LBB9_19: # %cond.store172243; SSE2-NEXT: pextrw $1, %xmm2, %ecx2244; SSE2-NEXT: movw %cx, 18(%rdi)2245; SSE2-NEXT: testl $1024, %eax # imm = 0x4002246; SSE2-NEXT: je .LBB9_222247; SSE2-NEXT: .LBB9_21: # %cond.store192248; SSE2-NEXT: pextrw $2, %xmm2, %ecx2249; SSE2-NEXT: movw %cx, 20(%rdi)2250; SSE2-NEXT: testl $2048, %eax # imm = 0x8002251; SSE2-NEXT: je .LBB9_242252; SSE2-NEXT: .LBB9_23: # %cond.store212253; SSE2-NEXT: pextrw $3, %xmm2, %ecx2254; SSE2-NEXT: movw %cx, 22(%rdi)2255; SSE2-NEXT: testl $4096, %eax # imm = 0x10002256; SSE2-NEXT: je .LBB9_262257; SSE2-NEXT: .LBB9_25: # %cond.store232258; SSE2-NEXT: pextrw $4, %xmm2, %ecx2259; SSE2-NEXT: movw %cx, 24(%rdi)2260; SSE2-NEXT: testl $8192, %eax # imm = 0x20002261; SSE2-NEXT: je .LBB9_282262; SSE2-NEXT: .LBB9_27: # %cond.store252263; SSE2-NEXT: pextrw $5, %xmm2, %ecx2264; SSE2-NEXT: movw %cx, 26(%rdi)2265; SSE2-NEXT: testl $16384, %eax # imm = 0x40002266; SSE2-NEXT: je .LBB9_302267; SSE2-NEXT: .LBB9_29: # %cond.store272268; SSE2-NEXT: pextrw $6, %xmm2, %ecx2269; SSE2-NEXT: movw %cx, 28(%rdi)2270; SSE2-NEXT: testl $32768, %eax # imm = 0x80002271; SSE2-NEXT: je .LBB9_322272; SSE2-NEXT: .LBB9_31: # %cond.store292273; SSE2-NEXT: pextrw $7, %xmm2, %eax2274; SSE2-NEXT: movw %ax, 30(%rdi)2275; SSE2-NEXT: retq2276;2277; SSE4-LABEL: truncstore_v16i32_v16i16:2278; SSE4: # %bb.0:2279; SSE4-NEXT: pxor %xmm8, %xmm82280; SSE4-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm8[1],xmm1[2],xmm8[3],xmm1[4],xmm8[5],xmm1[6],xmm8[7]2281; SSE4-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm8[1],xmm0[2],xmm8[3],xmm0[4],xmm8[5],xmm0[6],xmm8[7]2282; SSE4-NEXT: packusdw %xmm1, %xmm02283; SSE4-NEXT: pcmpeqd %xmm8, %xmm72284; SSE4-NEXT: pcmpeqd %xmm8, %xmm62285; SSE4-NEXT: packssdw %xmm7, %xmm62286; SSE4-NEXT: pcmpeqd %xmm8, %xmm52287; SSE4-NEXT: pcmpeqd %xmm8, %xmm42288; SSE4-NEXT: packssdw %xmm5, %xmm42289; SSE4-NEXT: packsswb %xmm6, %xmm42290; SSE4-NEXT: pmovmskb %xmm4, %eax2291; SSE4-NEXT: xorl $65535, %eax # imm = 0xFFFF2292; SSE4-NEXT: testb $1, %al2293; SSE4-NEXT: jne .LBB9_12294; SSE4-NEXT: # %bb.2: # %else2295; SSE4-NEXT: testb $2, %al2296; SSE4-NEXT: jne .LBB9_32297; SSE4-NEXT: .LBB9_4: # %else22298; SSE4-NEXT: testb $4, %al2299; SSE4-NEXT: jne .LBB9_52300; SSE4-NEXT: .LBB9_6: # %else42301; SSE4-NEXT: testb $8, %al2302; SSE4-NEXT: jne .LBB9_72303; SSE4-NEXT: .LBB9_8: # %else62304; SSE4-NEXT: testb $16, %al2305; SSE4-NEXT: jne .LBB9_92306; SSE4-NEXT: .LBB9_10: # %else82307; SSE4-NEXT: testb $32, %al2308; SSE4-NEXT: jne .LBB9_112309; SSE4-NEXT: .LBB9_12: # %else102310; SSE4-NEXT: testb $64, %al2311; SSE4-NEXT: je .LBB9_142312; SSE4-NEXT: .LBB9_13: # %cond.store112313; SSE4-NEXT: pextrw $6, %xmm0, 12(%rdi)2314; SSE4-NEXT: .LBB9_14: # %else122315; SSE4-NEXT: pblendw {{.*#+}} xmm3 = xmm3[0],xmm8[1],xmm3[2],xmm8[3],xmm3[4],xmm8[5],xmm3[6],xmm8[7]2316; SSE4-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0],xmm8[1],xmm2[2],xmm8[3],xmm2[4],xmm8[5],xmm2[6],xmm8[7]2317; SSE4-NEXT: testb %al, %al2318; SSE4-NEXT: jns .LBB9_162319; SSE4-NEXT: # %bb.15: # %cond.store132320; SSE4-NEXT: pextrw $7, %xmm0, 14(%rdi)2321; SSE4-NEXT: .LBB9_16: # %else142322; SSE4-NEXT: packusdw %xmm3, %xmm22323; SSE4-NEXT: testl $256, %eax # imm = 0x1002324; SSE4-NEXT: jne .LBB9_172325; SSE4-NEXT: # %bb.18: # %else162326; SSE4-NEXT: testl $512, %eax # imm = 0x2002327; SSE4-NEXT: jne .LBB9_192328; SSE4-NEXT: .LBB9_20: # %else182329; SSE4-NEXT: testl $1024, %eax # imm = 0x4002330; SSE4-NEXT: jne .LBB9_212331; SSE4-NEXT: .LBB9_22: # %else202332; SSE4-NEXT: testl $2048, %eax # imm = 0x8002333; SSE4-NEXT: jne .LBB9_232334; SSE4-NEXT: .LBB9_24: # %else222335; SSE4-NEXT: testl $4096, %eax # imm = 0x10002336; SSE4-NEXT: jne .LBB9_252337; SSE4-NEXT: .LBB9_26: # %else242338; SSE4-NEXT: testl $8192, %eax # imm = 0x20002339; SSE4-NEXT: jne .LBB9_272340; SSE4-NEXT: .LBB9_28: # %else262341; SSE4-NEXT: testl $16384, %eax # imm = 0x40002342; SSE4-NEXT: jne .LBB9_292343; SSE4-NEXT: .LBB9_30: # %else282344; SSE4-NEXT: testl $32768, %eax # imm = 0x80002345; SSE4-NEXT: jne .LBB9_312346; SSE4-NEXT: .LBB9_32: # %else302347; SSE4-NEXT: retq2348; SSE4-NEXT: .LBB9_1: # %cond.store2349; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)2350; SSE4-NEXT: testb $2, %al2351; SSE4-NEXT: je .LBB9_42352; SSE4-NEXT: .LBB9_3: # %cond.store12353; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)2354; SSE4-NEXT: testb $4, %al2355; SSE4-NEXT: je .LBB9_62356; SSE4-NEXT: .LBB9_5: # %cond.store32357; SSE4-NEXT: pextrw $2, %xmm0, 4(%rdi)2358; SSE4-NEXT: testb $8, %al2359; SSE4-NEXT: je .LBB9_82360; SSE4-NEXT: .LBB9_7: # %cond.store52361; SSE4-NEXT: pextrw $3, %xmm0, 6(%rdi)2362; SSE4-NEXT: testb $16, %al2363; SSE4-NEXT: je .LBB9_102364; SSE4-NEXT: .LBB9_9: # %cond.store72365; SSE4-NEXT: pextrw $4, %xmm0, 8(%rdi)2366; SSE4-NEXT: testb $32, %al2367; SSE4-NEXT: je .LBB9_122368; SSE4-NEXT: .LBB9_11: # %cond.store92369; SSE4-NEXT: pextrw $5, %xmm0, 10(%rdi)2370; SSE4-NEXT: testb $64, %al2371; SSE4-NEXT: jne .LBB9_132372; SSE4-NEXT: jmp .LBB9_142373; SSE4-NEXT: .LBB9_17: # %cond.store152374; SSE4-NEXT: pextrw $0, %xmm2, 16(%rdi)2375; SSE4-NEXT: testl $512, %eax # imm = 0x2002376; SSE4-NEXT: je .LBB9_202377; SSE4-NEXT: .LBB9_19: # %cond.store172378; SSE4-NEXT: pextrw $1, %xmm2, 18(%rdi)2379; SSE4-NEXT: testl $1024, %eax # imm = 0x4002380; SSE4-NEXT: je .LBB9_222381; SSE4-NEXT: .LBB9_21: # %cond.store192382; SSE4-NEXT: pextrw $2, %xmm2, 20(%rdi)2383; SSE4-NEXT: testl $2048, %eax # imm = 0x8002384; SSE4-NEXT: je .LBB9_242385; SSE4-NEXT: .LBB9_23: # %cond.store212386; SSE4-NEXT: pextrw $3, %xmm2, 22(%rdi)2387; SSE4-NEXT: testl $4096, %eax # imm = 0x10002388; SSE4-NEXT: je .LBB9_262389; SSE4-NEXT: .LBB9_25: # %cond.store232390; SSE4-NEXT: pextrw $4, %xmm2, 24(%rdi)2391; SSE4-NEXT: testl $8192, %eax # imm = 0x20002392; SSE4-NEXT: je .LBB9_282393; SSE4-NEXT: .LBB9_27: # %cond.store252394; SSE4-NEXT: pextrw $5, %xmm2, 26(%rdi)2395; SSE4-NEXT: testl $16384, %eax # imm = 0x40002396; SSE4-NEXT: je .LBB9_302397; SSE4-NEXT: .LBB9_29: # %cond.store272398; SSE4-NEXT: pextrw $6, %xmm2, 28(%rdi)2399; SSE4-NEXT: testl $32768, %eax # imm = 0x80002400; SSE4-NEXT: je .LBB9_322401; SSE4-NEXT: .LBB9_31: # %cond.store292402; SSE4-NEXT: pextrw $7, %xmm2, 30(%rdi)2403; SSE4-NEXT: retq2404;2405; AVX1-LABEL: truncstore_v16i32_v16i16:2406; AVX1: # %bb.0:2407; AVX1-NEXT: vbroadcastss {{.*#+}} ymm4 = [65535,65535,65535,65535,65535,65535,65535,65535]2408; AVX1-NEXT: vandps %ymm4, %ymm1, %ymm12409; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm52410; AVX1-NEXT: vpackusdw %xmm5, %xmm1, %xmm12411; AVX1-NEXT: vandps %ymm4, %ymm0, %ymm02412; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm42413; AVX1-NEXT: vpackusdw %xmm4, %xmm0, %xmm02414; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm02415; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm12416; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm42417; AVX1-NEXT: vpcmpeqd %xmm4, %xmm1, %xmm12418; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm32419; AVX1-NEXT: vpackssdw %xmm1, %xmm3, %xmm12420; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm32421; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm32422; AVX1-NEXT: vpcmpeqd %xmm4, %xmm2, %xmm22423; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm22424; AVX1-NEXT: vpacksswb %xmm1, %xmm2, %xmm12425; AVX1-NEXT: vpmovmskb %xmm1, %eax2426; AVX1-NEXT: xorl $65535, %eax # imm = 0xFFFF2427; AVX1-NEXT: testb $1, %al2428; AVX1-NEXT: jne .LBB9_12429; AVX1-NEXT: # %bb.2: # %else2430; AVX1-NEXT: testb $2, %al2431; AVX1-NEXT: jne .LBB9_32432; AVX1-NEXT: .LBB9_4: # %else22433; AVX1-NEXT: testb $4, %al2434; AVX1-NEXT: jne .LBB9_52435; AVX1-NEXT: .LBB9_6: # %else42436; AVX1-NEXT: testb $8, %al2437; AVX1-NEXT: jne .LBB9_72438; AVX1-NEXT: .LBB9_8: # %else62439; AVX1-NEXT: testb $16, %al2440; AVX1-NEXT: jne .LBB9_92441; AVX1-NEXT: .LBB9_10: # %else82442; AVX1-NEXT: testb $32, %al2443; AVX1-NEXT: jne .LBB9_112444; AVX1-NEXT: .LBB9_12: # %else102445; AVX1-NEXT: testb $64, %al2446; AVX1-NEXT: jne .LBB9_132447; AVX1-NEXT: .LBB9_14: # %else122448; AVX1-NEXT: testb %al, %al2449; AVX1-NEXT: jns .LBB9_162450; AVX1-NEXT: .LBB9_15: # %cond.store132451; AVX1-NEXT: vpextrw $7, %xmm0, 14(%rdi)2452; AVX1-NEXT: .LBB9_16: # %else142453; AVX1-NEXT: testl $256, %eax # imm = 0x1002454; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02455; AVX1-NEXT: jne .LBB9_172456; AVX1-NEXT: # %bb.18: # %else162457; AVX1-NEXT: testl $512, %eax # imm = 0x2002458; AVX1-NEXT: jne .LBB9_192459; AVX1-NEXT: .LBB9_20: # %else182460; AVX1-NEXT: testl $1024, %eax # imm = 0x4002461; AVX1-NEXT: jne .LBB9_212462; AVX1-NEXT: .LBB9_22: # %else202463; AVX1-NEXT: testl $2048, %eax # imm = 0x8002464; AVX1-NEXT: jne .LBB9_232465; AVX1-NEXT: .LBB9_24: # %else222466; AVX1-NEXT: testl $4096, %eax # imm = 0x10002467; AVX1-NEXT: jne .LBB9_252468; AVX1-NEXT: .LBB9_26: # %else242469; AVX1-NEXT: testl $8192, %eax # imm = 0x20002470; AVX1-NEXT: jne .LBB9_272471; AVX1-NEXT: .LBB9_28: # %else262472; AVX1-NEXT: testl $16384, %eax # imm = 0x40002473; AVX1-NEXT: jne .LBB9_292474; AVX1-NEXT: .LBB9_30: # %else282475; AVX1-NEXT: testl $32768, %eax # imm = 0x80002476; AVX1-NEXT: jne .LBB9_312477; AVX1-NEXT: .LBB9_32: # %else302478; AVX1-NEXT: vzeroupper2479; AVX1-NEXT: retq2480; AVX1-NEXT: .LBB9_1: # %cond.store2481; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)2482; AVX1-NEXT: testb $2, %al2483; AVX1-NEXT: je .LBB9_42484; AVX1-NEXT: .LBB9_3: # %cond.store12485; AVX1-NEXT: vpextrw $1, %xmm0, 2(%rdi)2486; AVX1-NEXT: testb $4, %al2487; AVX1-NEXT: je .LBB9_62488; AVX1-NEXT: .LBB9_5: # %cond.store32489; AVX1-NEXT: vpextrw $2, %xmm0, 4(%rdi)2490; AVX1-NEXT: testb $8, %al2491; AVX1-NEXT: je .LBB9_82492; AVX1-NEXT: .LBB9_7: # %cond.store52493; AVX1-NEXT: vpextrw $3, %xmm0, 6(%rdi)2494; AVX1-NEXT: testb $16, %al2495; AVX1-NEXT: je .LBB9_102496; AVX1-NEXT: .LBB9_9: # %cond.store72497; AVX1-NEXT: vpextrw $4, %xmm0, 8(%rdi)2498; AVX1-NEXT: testb $32, %al2499; AVX1-NEXT: je .LBB9_122500; AVX1-NEXT: .LBB9_11: # %cond.store92501; AVX1-NEXT: vpextrw $5, %xmm0, 10(%rdi)2502; AVX1-NEXT: testb $64, %al2503; AVX1-NEXT: je .LBB9_142504; AVX1-NEXT: .LBB9_13: # %cond.store112505; AVX1-NEXT: vpextrw $6, %xmm0, 12(%rdi)2506; AVX1-NEXT: testb %al, %al2507; AVX1-NEXT: js .LBB9_152508; AVX1-NEXT: jmp .LBB9_162509; AVX1-NEXT: .LBB9_17: # %cond.store152510; AVX1-NEXT: vpextrw $0, %xmm0, 16(%rdi)2511; AVX1-NEXT: testl $512, %eax # imm = 0x2002512; AVX1-NEXT: je .LBB9_202513; AVX1-NEXT: .LBB9_19: # %cond.store172514; AVX1-NEXT: vpextrw $1, %xmm0, 18(%rdi)2515; AVX1-NEXT: testl $1024, %eax # imm = 0x4002516; AVX1-NEXT: je .LBB9_222517; AVX1-NEXT: .LBB9_21: # %cond.store192518; AVX1-NEXT: vpextrw $2, %xmm0, 20(%rdi)2519; AVX1-NEXT: testl $2048, %eax # imm = 0x8002520; AVX1-NEXT: je .LBB9_242521; AVX1-NEXT: .LBB9_23: # %cond.store212522; AVX1-NEXT: vpextrw $3, %xmm0, 22(%rdi)2523; AVX1-NEXT: testl $4096, %eax # imm = 0x10002524; AVX1-NEXT: je .LBB9_262525; AVX1-NEXT: .LBB9_25: # %cond.store232526; AVX1-NEXT: vpextrw $4, %xmm0, 24(%rdi)2527; AVX1-NEXT: testl $8192, %eax # imm = 0x20002528; AVX1-NEXT: je .LBB9_282529; AVX1-NEXT: .LBB9_27: # %cond.store252530; AVX1-NEXT: vpextrw $5, %xmm0, 26(%rdi)2531; AVX1-NEXT: testl $16384, %eax # imm = 0x40002532; AVX1-NEXT: je .LBB9_302533; AVX1-NEXT: .LBB9_29: # %cond.store272534; AVX1-NEXT: vpextrw $6, %xmm0, 28(%rdi)2535; AVX1-NEXT: testl $32768, %eax # imm = 0x80002536; AVX1-NEXT: je .LBB9_322537; AVX1-NEXT: .LBB9_31: # %cond.store292538; AVX1-NEXT: vpextrw $7, %xmm0, 30(%rdi)2539; AVX1-NEXT: vzeroupper2540; AVX1-NEXT: retq2541;2542; AVX2-LABEL: truncstore_v16i32_v16i16:2543; AVX2: # %bb.0:2544; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm42545; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm4[1],ymm1[2],ymm4[3],ymm1[4],ymm4[5],ymm1[6],ymm4[7],ymm1[8],ymm4[9],ymm1[10],ymm4[11],ymm1[12],ymm4[13],ymm1[14],ymm4[15]2546; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm4[1],ymm0[2],ymm4[3],ymm0[4],ymm4[5],ymm0[6],ymm4[7],ymm0[8],ymm4[9],ymm0[10],ymm4[11],ymm0[12],ymm4[13],ymm0[14],ymm4[15]2547; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm02548; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2549; AVX2-NEXT: vpcmpeqd %ymm4, %ymm3, %ymm12550; AVX2-NEXT: vpcmpeqd %ymm4, %ymm2, %ymm22551; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm12552; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm22553; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm12554; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm22555; AVX2-NEXT: vpacksswb %xmm2, %xmm1, %xmm12556; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,1,3]2557; AVX2-NEXT: vpmovmskb %xmm1, %eax2558; AVX2-NEXT: testb $1, %al2559; AVX2-NEXT: jne .LBB9_12560; AVX2-NEXT: # %bb.2: # %else2561; AVX2-NEXT: testb $2, %al2562; AVX2-NEXT: jne .LBB9_32563; AVX2-NEXT: .LBB9_4: # %else22564; AVX2-NEXT: testb $4, %al2565; AVX2-NEXT: jne .LBB9_52566; AVX2-NEXT: .LBB9_6: # %else42567; AVX2-NEXT: testb $8, %al2568; AVX2-NEXT: jne .LBB9_72569; AVX2-NEXT: .LBB9_8: # %else62570; AVX2-NEXT: testb $16, %al2571; AVX2-NEXT: jne .LBB9_92572; AVX2-NEXT: .LBB9_10: # %else82573; AVX2-NEXT: testb $32, %al2574; AVX2-NEXT: jne .LBB9_112575; AVX2-NEXT: .LBB9_12: # %else102576; AVX2-NEXT: testb $64, %al2577; AVX2-NEXT: jne .LBB9_132578; AVX2-NEXT: .LBB9_14: # %else122579; AVX2-NEXT: testb %al, %al2580; AVX2-NEXT: jns .LBB9_162581; AVX2-NEXT: .LBB9_15: # %cond.store132582; AVX2-NEXT: vpextrw $7, %xmm0, 14(%rdi)2583; AVX2-NEXT: .LBB9_16: # %else142584; AVX2-NEXT: testl $256, %eax # imm = 0x1002585; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm02586; AVX2-NEXT: jne .LBB9_172587; AVX2-NEXT: # %bb.18: # %else162588; AVX2-NEXT: testl $512, %eax # imm = 0x2002589; AVX2-NEXT: jne .LBB9_192590; AVX2-NEXT: .LBB9_20: # %else182591; AVX2-NEXT: testl $1024, %eax # imm = 0x4002592; AVX2-NEXT: jne .LBB9_212593; AVX2-NEXT: .LBB9_22: # %else202594; AVX2-NEXT: testl $2048, %eax # imm = 0x8002595; AVX2-NEXT: jne .LBB9_232596; AVX2-NEXT: .LBB9_24: # %else222597; AVX2-NEXT: testl $4096, %eax # imm = 0x10002598; AVX2-NEXT: jne .LBB9_252599; AVX2-NEXT: .LBB9_26: # %else242600; AVX2-NEXT: testl $8192, %eax # imm = 0x20002601; AVX2-NEXT: jne .LBB9_272602; AVX2-NEXT: .LBB9_28: # %else262603; AVX2-NEXT: testl $16384, %eax # imm = 0x40002604; AVX2-NEXT: jne .LBB9_292605; AVX2-NEXT: .LBB9_30: # %else282606; AVX2-NEXT: testl $32768, %eax # imm = 0x80002607; AVX2-NEXT: jne .LBB9_312608; AVX2-NEXT: .LBB9_32: # %else302609; AVX2-NEXT: vzeroupper2610; AVX2-NEXT: retq2611; AVX2-NEXT: .LBB9_1: # %cond.store2612; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)2613; AVX2-NEXT: testb $2, %al2614; AVX2-NEXT: je .LBB9_42615; AVX2-NEXT: .LBB9_3: # %cond.store12616; AVX2-NEXT: vpextrw $1, %xmm0, 2(%rdi)2617; AVX2-NEXT: testb $4, %al2618; AVX2-NEXT: je .LBB9_62619; AVX2-NEXT: .LBB9_5: # %cond.store32620; AVX2-NEXT: vpextrw $2, %xmm0, 4(%rdi)2621; AVX2-NEXT: testb $8, %al2622; AVX2-NEXT: je .LBB9_82623; AVX2-NEXT: .LBB9_7: # %cond.store52624; AVX2-NEXT: vpextrw $3, %xmm0, 6(%rdi)2625; AVX2-NEXT: testb $16, %al2626; AVX2-NEXT: je .LBB9_102627; AVX2-NEXT: .LBB9_9: # %cond.store72628; AVX2-NEXT: vpextrw $4, %xmm0, 8(%rdi)2629; AVX2-NEXT: testb $32, %al2630; AVX2-NEXT: je .LBB9_122631; AVX2-NEXT: .LBB9_11: # %cond.store92632; AVX2-NEXT: vpextrw $5, %xmm0, 10(%rdi)2633; AVX2-NEXT: testb $64, %al2634; AVX2-NEXT: je .LBB9_142635; AVX2-NEXT: .LBB9_13: # %cond.store112636; AVX2-NEXT: vpextrw $6, %xmm0, 12(%rdi)2637; AVX2-NEXT: testb %al, %al2638; AVX2-NEXT: js .LBB9_152639; AVX2-NEXT: jmp .LBB9_162640; AVX2-NEXT: .LBB9_17: # %cond.store152641; AVX2-NEXT: vpextrw $0, %xmm0, 16(%rdi)2642; AVX2-NEXT: testl $512, %eax # imm = 0x2002643; AVX2-NEXT: je .LBB9_202644; AVX2-NEXT: .LBB9_19: # %cond.store172645; AVX2-NEXT: vpextrw $1, %xmm0, 18(%rdi)2646; AVX2-NEXT: testl $1024, %eax # imm = 0x4002647; AVX2-NEXT: je .LBB9_222648; AVX2-NEXT: .LBB9_21: # %cond.store192649; AVX2-NEXT: vpextrw $2, %xmm0, 20(%rdi)2650; AVX2-NEXT: testl $2048, %eax # imm = 0x8002651; AVX2-NEXT: je .LBB9_242652; AVX2-NEXT: .LBB9_23: # %cond.store212653; AVX2-NEXT: vpextrw $3, %xmm0, 22(%rdi)2654; AVX2-NEXT: testl $4096, %eax # imm = 0x10002655; AVX2-NEXT: je .LBB9_262656; AVX2-NEXT: .LBB9_25: # %cond.store232657; AVX2-NEXT: vpextrw $4, %xmm0, 24(%rdi)2658; AVX2-NEXT: testl $8192, %eax # imm = 0x20002659; AVX2-NEXT: je .LBB9_282660; AVX2-NEXT: .LBB9_27: # %cond.store252661; AVX2-NEXT: vpextrw $5, %xmm0, 26(%rdi)2662; AVX2-NEXT: testl $16384, %eax # imm = 0x40002663; AVX2-NEXT: je .LBB9_302664; AVX2-NEXT: .LBB9_29: # %cond.store272665; AVX2-NEXT: vpextrw $6, %xmm0, 28(%rdi)2666; AVX2-NEXT: testl $32768, %eax # imm = 0x80002667; AVX2-NEXT: je .LBB9_322668; AVX2-NEXT: .LBB9_31: # %cond.store292669; AVX2-NEXT: vpextrw $7, %xmm0, 30(%rdi)2670; AVX2-NEXT: vzeroupper2671; AVX2-NEXT: retq2672;2673; AVX512F-LABEL: truncstore_v16i32_v16i16:2674; AVX512F: # %bb.0:2675; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k02676; AVX512F-NEXT: vpmovdw %zmm0, %ymm02677; AVX512F-NEXT: kmovw %k0, %eax2678; AVX512F-NEXT: testb $1, %al2679; AVX512F-NEXT: jne .LBB9_12680; AVX512F-NEXT: # %bb.2: # %else2681; AVX512F-NEXT: testb $2, %al2682; AVX512F-NEXT: jne .LBB9_32683; AVX512F-NEXT: .LBB9_4: # %else22684; AVX512F-NEXT: testb $4, %al2685; AVX512F-NEXT: jne .LBB9_52686; AVX512F-NEXT: .LBB9_6: # %else42687; AVX512F-NEXT: testb $8, %al2688; AVX512F-NEXT: jne .LBB9_72689; AVX512F-NEXT: .LBB9_8: # %else62690; AVX512F-NEXT: testb $16, %al2691; AVX512F-NEXT: jne .LBB9_92692; AVX512F-NEXT: .LBB9_10: # %else82693; AVX512F-NEXT: testb $32, %al2694; AVX512F-NEXT: jne .LBB9_112695; AVX512F-NEXT: .LBB9_12: # %else102696; AVX512F-NEXT: testb $64, %al2697; AVX512F-NEXT: jne .LBB9_132698; AVX512F-NEXT: .LBB9_14: # %else122699; AVX512F-NEXT: testb %al, %al2700; AVX512F-NEXT: jns .LBB9_162701; AVX512F-NEXT: .LBB9_15: # %cond.store132702; AVX512F-NEXT: vpextrw $7, %xmm0, 14(%rdi)2703; AVX512F-NEXT: .LBB9_16: # %else142704; AVX512F-NEXT: testl $256, %eax # imm = 0x1002705; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm02706; AVX512F-NEXT: jne .LBB9_172707; AVX512F-NEXT: # %bb.18: # %else162708; AVX512F-NEXT: testl $512, %eax # imm = 0x2002709; AVX512F-NEXT: jne .LBB9_192710; AVX512F-NEXT: .LBB9_20: # %else182711; AVX512F-NEXT: testl $1024, %eax # imm = 0x4002712; AVX512F-NEXT: jne .LBB9_212713; AVX512F-NEXT: .LBB9_22: # %else202714; AVX512F-NEXT: testl $2048, %eax # imm = 0x8002715; AVX512F-NEXT: jne .LBB9_232716; AVX512F-NEXT: .LBB9_24: # %else222717; AVX512F-NEXT: testl $4096, %eax # imm = 0x10002718; AVX512F-NEXT: jne .LBB9_252719; AVX512F-NEXT: .LBB9_26: # %else242720; AVX512F-NEXT: testl $8192, %eax # imm = 0x20002721; AVX512F-NEXT: jne .LBB9_272722; AVX512F-NEXT: .LBB9_28: # %else262723; AVX512F-NEXT: testl $16384, %eax # imm = 0x40002724; AVX512F-NEXT: jne .LBB9_292725; AVX512F-NEXT: .LBB9_30: # %else282726; AVX512F-NEXT: testl $32768, %eax # imm = 0x80002727; AVX512F-NEXT: jne .LBB9_312728; AVX512F-NEXT: .LBB9_32: # %else302729; AVX512F-NEXT: vzeroupper2730; AVX512F-NEXT: retq2731; AVX512F-NEXT: .LBB9_1: # %cond.store2732; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)2733; AVX512F-NEXT: testb $2, %al2734; AVX512F-NEXT: je .LBB9_42735; AVX512F-NEXT: .LBB9_3: # %cond.store12736; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)2737; AVX512F-NEXT: testb $4, %al2738; AVX512F-NEXT: je .LBB9_62739; AVX512F-NEXT: .LBB9_5: # %cond.store32740; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)2741; AVX512F-NEXT: testb $8, %al2742; AVX512F-NEXT: je .LBB9_82743; AVX512F-NEXT: .LBB9_7: # %cond.store52744; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)2745; AVX512F-NEXT: testb $16, %al2746; AVX512F-NEXT: je .LBB9_102747; AVX512F-NEXT: .LBB9_9: # %cond.store72748; AVX512F-NEXT: vpextrw $4, %xmm0, 8(%rdi)2749; AVX512F-NEXT: testb $32, %al2750; AVX512F-NEXT: je .LBB9_122751; AVX512F-NEXT: .LBB9_11: # %cond.store92752; AVX512F-NEXT: vpextrw $5, %xmm0, 10(%rdi)2753; AVX512F-NEXT: testb $64, %al2754; AVX512F-NEXT: je .LBB9_142755; AVX512F-NEXT: .LBB9_13: # %cond.store112756; AVX512F-NEXT: vpextrw $6, %xmm0, 12(%rdi)2757; AVX512F-NEXT: testb %al, %al2758; AVX512F-NEXT: js .LBB9_152759; AVX512F-NEXT: jmp .LBB9_162760; AVX512F-NEXT: .LBB9_17: # %cond.store152761; AVX512F-NEXT: vpextrw $0, %xmm0, 16(%rdi)2762; AVX512F-NEXT: testl $512, %eax # imm = 0x2002763; AVX512F-NEXT: je .LBB9_202764; AVX512F-NEXT: .LBB9_19: # %cond.store172765; AVX512F-NEXT: vpextrw $1, %xmm0, 18(%rdi)2766; AVX512F-NEXT: testl $1024, %eax # imm = 0x4002767; AVX512F-NEXT: je .LBB9_222768; AVX512F-NEXT: .LBB9_21: # %cond.store192769; AVX512F-NEXT: vpextrw $2, %xmm0, 20(%rdi)2770; AVX512F-NEXT: testl $2048, %eax # imm = 0x8002771; AVX512F-NEXT: je .LBB9_242772; AVX512F-NEXT: .LBB9_23: # %cond.store212773; AVX512F-NEXT: vpextrw $3, %xmm0, 22(%rdi)2774; AVX512F-NEXT: testl $4096, %eax # imm = 0x10002775; AVX512F-NEXT: je .LBB9_262776; AVX512F-NEXT: .LBB9_25: # %cond.store232777; AVX512F-NEXT: vpextrw $4, %xmm0, 24(%rdi)2778; AVX512F-NEXT: testl $8192, %eax # imm = 0x20002779; AVX512F-NEXT: je .LBB9_282780; AVX512F-NEXT: .LBB9_27: # %cond.store252781; AVX512F-NEXT: vpextrw $5, %xmm0, 26(%rdi)2782; AVX512F-NEXT: testl $16384, %eax # imm = 0x40002783; AVX512F-NEXT: je .LBB9_302784; AVX512F-NEXT: .LBB9_29: # %cond.store272785; AVX512F-NEXT: vpextrw $6, %xmm0, 28(%rdi)2786; AVX512F-NEXT: testl $32768, %eax # imm = 0x80002787; AVX512F-NEXT: je .LBB9_322788; AVX512F-NEXT: .LBB9_31: # %cond.store292789; AVX512F-NEXT: vpextrw $7, %xmm0, 30(%rdi)2790; AVX512F-NEXT: vzeroupper2791; AVX512F-NEXT: retq2792;2793; AVX512FVL-LABEL: truncstore_v16i32_v16i16:2794; AVX512FVL: # %bb.0:2795; AVX512FVL-NEXT: vptestmd %zmm1, %zmm1, %k02796; AVX512FVL-NEXT: vpmovdw %zmm0, %ymm02797; AVX512FVL-NEXT: kmovw %k0, %eax2798; AVX512FVL-NEXT: testb $1, %al2799; AVX512FVL-NEXT: jne .LBB9_12800; AVX512FVL-NEXT: # %bb.2: # %else2801; AVX512FVL-NEXT: testb $2, %al2802; AVX512FVL-NEXT: jne .LBB9_32803; AVX512FVL-NEXT: .LBB9_4: # %else22804; AVX512FVL-NEXT: testb $4, %al2805; AVX512FVL-NEXT: jne .LBB9_52806; AVX512FVL-NEXT: .LBB9_6: # %else42807; AVX512FVL-NEXT: testb $8, %al2808; AVX512FVL-NEXT: jne .LBB9_72809; AVX512FVL-NEXT: .LBB9_8: # %else62810; AVX512FVL-NEXT: testb $16, %al2811; AVX512FVL-NEXT: jne .LBB9_92812; AVX512FVL-NEXT: .LBB9_10: # %else82813; AVX512FVL-NEXT: testb $32, %al2814; AVX512FVL-NEXT: jne .LBB9_112815; AVX512FVL-NEXT: .LBB9_12: # %else102816; AVX512FVL-NEXT: testb $64, %al2817; AVX512FVL-NEXT: jne .LBB9_132818; AVX512FVL-NEXT: .LBB9_14: # %else122819; AVX512FVL-NEXT: testb %al, %al2820; AVX512FVL-NEXT: jns .LBB9_162821; AVX512FVL-NEXT: .LBB9_15: # %cond.store132822; AVX512FVL-NEXT: vpextrw $7, %xmm0, 14(%rdi)2823; AVX512FVL-NEXT: .LBB9_16: # %else142824; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1002825; AVX512FVL-NEXT: vextracti128 $1, %ymm0, %xmm02826; AVX512FVL-NEXT: jne .LBB9_172827; AVX512FVL-NEXT: # %bb.18: # %else162828; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2002829; AVX512FVL-NEXT: jne .LBB9_192830; AVX512FVL-NEXT: .LBB9_20: # %else182831; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4002832; AVX512FVL-NEXT: jne .LBB9_212833; AVX512FVL-NEXT: .LBB9_22: # %else202834; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8002835; AVX512FVL-NEXT: jne .LBB9_232836; AVX512FVL-NEXT: .LBB9_24: # %else222837; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10002838; AVX512FVL-NEXT: jne .LBB9_252839; AVX512FVL-NEXT: .LBB9_26: # %else242840; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20002841; AVX512FVL-NEXT: jne .LBB9_272842; AVX512FVL-NEXT: .LBB9_28: # %else262843; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40002844; AVX512FVL-NEXT: jne .LBB9_292845; AVX512FVL-NEXT: .LBB9_30: # %else282846; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80002847; AVX512FVL-NEXT: jne .LBB9_312848; AVX512FVL-NEXT: .LBB9_32: # %else302849; AVX512FVL-NEXT: vzeroupper2850; AVX512FVL-NEXT: retq2851; AVX512FVL-NEXT: .LBB9_1: # %cond.store2852; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)2853; AVX512FVL-NEXT: testb $2, %al2854; AVX512FVL-NEXT: je .LBB9_42855; AVX512FVL-NEXT: .LBB9_3: # %cond.store12856; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)2857; AVX512FVL-NEXT: testb $4, %al2858; AVX512FVL-NEXT: je .LBB9_62859; AVX512FVL-NEXT: .LBB9_5: # %cond.store32860; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)2861; AVX512FVL-NEXT: testb $8, %al2862; AVX512FVL-NEXT: je .LBB9_82863; AVX512FVL-NEXT: .LBB9_7: # %cond.store52864; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)2865; AVX512FVL-NEXT: testb $16, %al2866; AVX512FVL-NEXT: je .LBB9_102867; AVX512FVL-NEXT: .LBB9_9: # %cond.store72868; AVX512FVL-NEXT: vpextrw $4, %xmm0, 8(%rdi)2869; AVX512FVL-NEXT: testb $32, %al2870; AVX512FVL-NEXT: je .LBB9_122871; AVX512FVL-NEXT: .LBB9_11: # %cond.store92872; AVX512FVL-NEXT: vpextrw $5, %xmm0, 10(%rdi)2873; AVX512FVL-NEXT: testb $64, %al2874; AVX512FVL-NEXT: je .LBB9_142875; AVX512FVL-NEXT: .LBB9_13: # %cond.store112876; AVX512FVL-NEXT: vpextrw $6, %xmm0, 12(%rdi)2877; AVX512FVL-NEXT: testb %al, %al2878; AVX512FVL-NEXT: js .LBB9_152879; AVX512FVL-NEXT: jmp .LBB9_162880; AVX512FVL-NEXT: .LBB9_17: # %cond.store152881; AVX512FVL-NEXT: vpextrw $0, %xmm0, 16(%rdi)2882; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2002883; AVX512FVL-NEXT: je .LBB9_202884; AVX512FVL-NEXT: .LBB9_19: # %cond.store172885; AVX512FVL-NEXT: vpextrw $1, %xmm0, 18(%rdi)2886; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4002887; AVX512FVL-NEXT: je .LBB9_222888; AVX512FVL-NEXT: .LBB9_21: # %cond.store192889; AVX512FVL-NEXT: vpextrw $2, %xmm0, 20(%rdi)2890; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8002891; AVX512FVL-NEXT: je .LBB9_242892; AVX512FVL-NEXT: .LBB9_23: # %cond.store212893; AVX512FVL-NEXT: vpextrw $3, %xmm0, 22(%rdi)2894; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10002895; AVX512FVL-NEXT: je .LBB9_262896; AVX512FVL-NEXT: .LBB9_25: # %cond.store232897; AVX512FVL-NEXT: vpextrw $4, %xmm0, 24(%rdi)2898; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20002899; AVX512FVL-NEXT: je .LBB9_282900; AVX512FVL-NEXT: .LBB9_27: # %cond.store252901; AVX512FVL-NEXT: vpextrw $5, %xmm0, 26(%rdi)2902; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40002903; AVX512FVL-NEXT: je .LBB9_302904; AVX512FVL-NEXT: .LBB9_29: # %cond.store272905; AVX512FVL-NEXT: vpextrw $6, %xmm0, 28(%rdi)2906; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80002907; AVX512FVL-NEXT: je .LBB9_322908; AVX512FVL-NEXT: .LBB9_31: # %cond.store292909; AVX512FVL-NEXT: vpextrw $7, %xmm0, 30(%rdi)2910; AVX512FVL-NEXT: vzeroupper2911; AVX512FVL-NEXT: retq2912;2913; AVX512BW-LABEL: truncstore_v16i32_v16i16:2914; AVX512BW: # %bb.0:2915; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k12916; AVX512BW-NEXT: vpmovdw %zmm0, (%rdi) {%k1}2917; AVX512BW-NEXT: vzeroupper2918; AVX512BW-NEXT: retq2919;2920; AVX512BWVL-LABEL: truncstore_v16i32_v16i16:2921; AVX512BWVL: # %bb.0:2922; AVX512BWVL-NEXT: vptestmd %zmm1, %zmm1, %k12923; AVX512BWVL-NEXT: vpmovdw %zmm0, (%rdi) {%k1}2924; AVX512BWVL-NEXT: vzeroupper2925; AVX512BWVL-NEXT: retq2926 %a = icmp ne <16 x i32> %mask, zeroinitializer2927 %b = trunc <16 x i32> %x to <16 x i16>2928 call void @llvm.masked.store.v16i16.p0(<16 x i16> %b, ptr %p, i32 1, <16 x i1> %a)2929 ret void2930}2931 2932define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {2933; SSE2-LABEL: truncstore_v16i32_v16i8:2934; SSE2: # %bb.0:2935; SSE2-NEXT: pxor %xmm8, %xmm82936; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]2937; SSE2-NEXT: pand %xmm9, %xmm32938; SSE2-NEXT: pand %xmm9, %xmm22939; SSE2-NEXT: packuswb %xmm3, %xmm22940; SSE2-NEXT: pand %xmm9, %xmm12941; SSE2-NEXT: pand %xmm9, %xmm02942; SSE2-NEXT: packuswb %xmm1, %xmm02943; SSE2-NEXT: packuswb %xmm2, %xmm02944; SSE2-NEXT: pcmpeqd %xmm8, %xmm72945; SSE2-NEXT: pcmpeqd %xmm8, %xmm62946; SSE2-NEXT: packssdw %xmm7, %xmm62947; SSE2-NEXT: pcmpeqd %xmm8, %xmm52948; SSE2-NEXT: pcmpeqd %xmm8, %xmm42949; SSE2-NEXT: packssdw %xmm5, %xmm42950; SSE2-NEXT: packsswb %xmm6, %xmm42951; SSE2-NEXT: pmovmskb %xmm4, %eax2952; SSE2-NEXT: xorl $65535, %eax # imm = 0xFFFF2953; SSE2-NEXT: testb $1, %al2954; SSE2-NEXT: movd %xmm0, %ecx2955; SSE2-NEXT: jne .LBB10_12956; SSE2-NEXT: # %bb.2: # %else2957; SSE2-NEXT: testb $2, %al2958; SSE2-NEXT: jne .LBB10_32959; SSE2-NEXT: .LBB10_4: # %else22960; SSE2-NEXT: testb $4, %al2961; SSE2-NEXT: jne .LBB10_52962; SSE2-NEXT: .LBB10_6: # %else42963; SSE2-NEXT: testb $8, %al2964; SSE2-NEXT: je .LBB10_82965; SSE2-NEXT: .LBB10_7: # %cond.store52966; SSE2-NEXT: shrl $24, %ecx2967; SSE2-NEXT: movb %cl, 3(%rdi)2968; SSE2-NEXT: .LBB10_8: # %else62969; SSE2-NEXT: testb $16, %al2970; SSE2-NEXT: pextrw $2, %xmm0, %ecx2971; SSE2-NEXT: je .LBB10_102972; SSE2-NEXT: # %bb.9: # %cond.store72973; SSE2-NEXT: movb %cl, 4(%rdi)2974; SSE2-NEXT: .LBB10_10: # %else82975; SSE2-NEXT: testb $32, %al2976; SSE2-NEXT: je .LBB10_122977; SSE2-NEXT: # %bb.11: # %cond.store92978; SSE2-NEXT: movb %ch, 5(%rdi)2979; SSE2-NEXT: .LBB10_12: # %else102980; SSE2-NEXT: testb $64, %al2981; SSE2-NEXT: pextrw $3, %xmm0, %ecx2982; SSE2-NEXT: je .LBB10_142983; SSE2-NEXT: # %bb.13: # %cond.store112984; SSE2-NEXT: movb %cl, 6(%rdi)2985; SSE2-NEXT: .LBB10_14: # %else122986; SSE2-NEXT: testb %al, %al2987; SSE2-NEXT: jns .LBB10_162988; SSE2-NEXT: # %bb.15: # %cond.store132989; SSE2-NEXT: movb %ch, 7(%rdi)2990; SSE2-NEXT: .LBB10_16: # %else142991; SSE2-NEXT: testl $256, %eax # imm = 0x1002992; SSE2-NEXT: pextrw $4, %xmm0, %ecx2993; SSE2-NEXT: je .LBB10_182994; SSE2-NEXT: # %bb.17: # %cond.store152995; SSE2-NEXT: movb %cl, 8(%rdi)2996; SSE2-NEXT: .LBB10_18: # %else162997; SSE2-NEXT: testl $512, %eax # imm = 0x2002998; SSE2-NEXT: je .LBB10_202999; SSE2-NEXT: # %bb.19: # %cond.store173000; SSE2-NEXT: movb %ch, 9(%rdi)3001; SSE2-NEXT: .LBB10_20: # %else183002; SSE2-NEXT: testl $1024, %eax # imm = 0x4003003; SSE2-NEXT: pextrw $5, %xmm0, %ecx3004; SSE2-NEXT: je .LBB10_223005; SSE2-NEXT: # %bb.21: # %cond.store193006; SSE2-NEXT: movb %cl, 10(%rdi)3007; SSE2-NEXT: .LBB10_22: # %else203008; SSE2-NEXT: testl $2048, %eax # imm = 0x8003009; SSE2-NEXT: je .LBB10_243010; SSE2-NEXT: # %bb.23: # %cond.store213011; SSE2-NEXT: movb %ch, 11(%rdi)3012; SSE2-NEXT: .LBB10_24: # %else223013; SSE2-NEXT: testl $4096, %eax # imm = 0x10003014; SSE2-NEXT: pextrw $6, %xmm0, %ecx3015; SSE2-NEXT: je .LBB10_263016; SSE2-NEXT: # %bb.25: # %cond.store233017; SSE2-NEXT: movb %cl, 12(%rdi)3018; SSE2-NEXT: .LBB10_26: # %else243019; SSE2-NEXT: testl $8192, %eax # imm = 0x20003020; SSE2-NEXT: je .LBB10_283021; SSE2-NEXT: # %bb.27: # %cond.store253022; SSE2-NEXT: movb %ch, 13(%rdi)3023; SSE2-NEXT: .LBB10_28: # %else263024; SSE2-NEXT: testl $16384, %eax # imm = 0x40003025; SSE2-NEXT: pextrw $7, %xmm0, %ecx3026; SSE2-NEXT: jne .LBB10_293027; SSE2-NEXT: # %bb.30: # %else283028; SSE2-NEXT: testl $32768, %eax # imm = 0x80003029; SSE2-NEXT: jne .LBB10_313030; SSE2-NEXT: .LBB10_32: # %else303031; SSE2-NEXT: retq3032; SSE2-NEXT: .LBB10_1: # %cond.store3033; SSE2-NEXT: movb %cl, (%rdi)3034; SSE2-NEXT: testb $2, %al3035; SSE2-NEXT: je .LBB10_43036; SSE2-NEXT: .LBB10_3: # %cond.store13037; SSE2-NEXT: movb %ch, 1(%rdi)3038; SSE2-NEXT: testb $4, %al3039; SSE2-NEXT: je .LBB10_63040; SSE2-NEXT: .LBB10_5: # %cond.store33041; SSE2-NEXT: movl %ecx, %edx3042; SSE2-NEXT: shrl $16, %edx3043; SSE2-NEXT: movb %dl, 2(%rdi)3044; SSE2-NEXT: testb $8, %al3045; SSE2-NEXT: jne .LBB10_73046; SSE2-NEXT: jmp .LBB10_83047; SSE2-NEXT: .LBB10_29: # %cond.store273048; SSE2-NEXT: movb %cl, 14(%rdi)3049; SSE2-NEXT: testl $32768, %eax # imm = 0x80003050; SSE2-NEXT: je .LBB10_323051; SSE2-NEXT: .LBB10_31: # %cond.store293052; SSE2-NEXT: movb %ch, 15(%rdi)3053; SSE2-NEXT: retq3054;3055; SSE4-LABEL: truncstore_v16i32_v16i8:3056; SSE4: # %bb.0:3057; SSE4-NEXT: pxor %xmm8, %xmm83058; SSE4-NEXT: pmovzxbd {{.*#+}} xmm9 = [255,255,255,255]3059; SSE4-NEXT: pand %xmm9, %xmm33060; SSE4-NEXT: pand %xmm9, %xmm23061; SSE4-NEXT: packusdw %xmm3, %xmm23062; SSE4-NEXT: pand %xmm9, %xmm13063; SSE4-NEXT: pand %xmm9, %xmm03064; SSE4-NEXT: packusdw %xmm1, %xmm03065; SSE4-NEXT: packuswb %xmm2, %xmm03066; SSE4-NEXT: pcmpeqd %xmm8, %xmm73067; SSE4-NEXT: pcmpeqd %xmm8, %xmm63068; SSE4-NEXT: packssdw %xmm7, %xmm63069; SSE4-NEXT: pcmpeqd %xmm8, %xmm53070; SSE4-NEXT: pcmpeqd %xmm8, %xmm43071; SSE4-NEXT: packssdw %xmm5, %xmm43072; SSE4-NEXT: packsswb %xmm6, %xmm43073; SSE4-NEXT: pmovmskb %xmm4, %eax3074; SSE4-NEXT: xorl $65535, %eax # imm = 0xFFFF3075; SSE4-NEXT: testb $1, %al3076; SSE4-NEXT: jne .LBB10_13077; SSE4-NEXT: # %bb.2: # %else3078; SSE4-NEXT: testb $2, %al3079; SSE4-NEXT: jne .LBB10_33080; SSE4-NEXT: .LBB10_4: # %else23081; SSE4-NEXT: testb $4, %al3082; SSE4-NEXT: jne .LBB10_53083; SSE4-NEXT: .LBB10_6: # %else43084; SSE4-NEXT: testb $8, %al3085; SSE4-NEXT: jne .LBB10_73086; SSE4-NEXT: .LBB10_8: # %else63087; SSE4-NEXT: testb $16, %al3088; SSE4-NEXT: jne .LBB10_93089; SSE4-NEXT: .LBB10_10: # %else83090; SSE4-NEXT: testb $32, %al3091; SSE4-NEXT: jne .LBB10_113092; SSE4-NEXT: .LBB10_12: # %else103093; SSE4-NEXT: testb $64, %al3094; SSE4-NEXT: jne .LBB10_133095; SSE4-NEXT: .LBB10_14: # %else123096; SSE4-NEXT: testb %al, %al3097; SSE4-NEXT: js .LBB10_153098; SSE4-NEXT: .LBB10_16: # %else143099; SSE4-NEXT: testl $256, %eax # imm = 0x1003100; SSE4-NEXT: jne .LBB10_173101; SSE4-NEXT: .LBB10_18: # %else163102; SSE4-NEXT: testl $512, %eax # imm = 0x2003103; SSE4-NEXT: jne .LBB10_193104; SSE4-NEXT: .LBB10_20: # %else183105; SSE4-NEXT: testl $1024, %eax # imm = 0x4003106; SSE4-NEXT: jne .LBB10_213107; SSE4-NEXT: .LBB10_22: # %else203108; SSE4-NEXT: testl $2048, %eax # imm = 0x8003109; SSE4-NEXT: jne .LBB10_233110; SSE4-NEXT: .LBB10_24: # %else223111; SSE4-NEXT: testl $4096, %eax # imm = 0x10003112; SSE4-NEXT: jne .LBB10_253113; SSE4-NEXT: .LBB10_26: # %else243114; SSE4-NEXT: testl $8192, %eax # imm = 0x20003115; SSE4-NEXT: jne .LBB10_273116; SSE4-NEXT: .LBB10_28: # %else263117; SSE4-NEXT: testl $16384, %eax # imm = 0x40003118; SSE4-NEXT: jne .LBB10_293119; SSE4-NEXT: .LBB10_30: # %else283120; SSE4-NEXT: testl $32768, %eax # imm = 0x80003121; SSE4-NEXT: jne .LBB10_313122; SSE4-NEXT: .LBB10_32: # %else303123; SSE4-NEXT: retq3124; SSE4-NEXT: .LBB10_1: # %cond.store3125; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)3126; SSE4-NEXT: testb $2, %al3127; SSE4-NEXT: je .LBB10_43128; SSE4-NEXT: .LBB10_3: # %cond.store13129; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)3130; SSE4-NEXT: testb $4, %al3131; SSE4-NEXT: je .LBB10_63132; SSE4-NEXT: .LBB10_5: # %cond.store33133; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)3134; SSE4-NEXT: testb $8, %al3135; SSE4-NEXT: je .LBB10_83136; SSE4-NEXT: .LBB10_7: # %cond.store53137; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)3138; SSE4-NEXT: testb $16, %al3139; SSE4-NEXT: je .LBB10_103140; SSE4-NEXT: .LBB10_9: # %cond.store73141; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)3142; SSE4-NEXT: testb $32, %al3143; SSE4-NEXT: je .LBB10_123144; SSE4-NEXT: .LBB10_11: # %cond.store93145; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)3146; SSE4-NEXT: testb $64, %al3147; SSE4-NEXT: je .LBB10_143148; SSE4-NEXT: .LBB10_13: # %cond.store113149; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)3150; SSE4-NEXT: testb %al, %al3151; SSE4-NEXT: jns .LBB10_163152; SSE4-NEXT: .LBB10_15: # %cond.store133153; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)3154; SSE4-NEXT: testl $256, %eax # imm = 0x1003155; SSE4-NEXT: je .LBB10_183156; SSE4-NEXT: .LBB10_17: # %cond.store153157; SSE4-NEXT: pextrb $8, %xmm0, 8(%rdi)3158; SSE4-NEXT: testl $512, %eax # imm = 0x2003159; SSE4-NEXT: je .LBB10_203160; SSE4-NEXT: .LBB10_19: # %cond.store173161; SSE4-NEXT: pextrb $9, %xmm0, 9(%rdi)3162; SSE4-NEXT: testl $1024, %eax # imm = 0x4003163; SSE4-NEXT: je .LBB10_223164; SSE4-NEXT: .LBB10_21: # %cond.store193165; SSE4-NEXT: pextrb $10, %xmm0, 10(%rdi)3166; SSE4-NEXT: testl $2048, %eax # imm = 0x8003167; SSE4-NEXT: je .LBB10_243168; SSE4-NEXT: .LBB10_23: # %cond.store213169; SSE4-NEXT: pextrb $11, %xmm0, 11(%rdi)3170; SSE4-NEXT: testl $4096, %eax # imm = 0x10003171; SSE4-NEXT: je .LBB10_263172; SSE4-NEXT: .LBB10_25: # %cond.store233173; SSE4-NEXT: pextrb $12, %xmm0, 12(%rdi)3174; SSE4-NEXT: testl $8192, %eax # imm = 0x20003175; SSE4-NEXT: je .LBB10_283176; SSE4-NEXT: .LBB10_27: # %cond.store253177; SSE4-NEXT: pextrb $13, %xmm0, 13(%rdi)3178; SSE4-NEXT: testl $16384, %eax # imm = 0x40003179; SSE4-NEXT: je .LBB10_303180; SSE4-NEXT: .LBB10_29: # %cond.store273181; SSE4-NEXT: pextrb $14, %xmm0, 14(%rdi)3182; SSE4-NEXT: testl $32768, %eax # imm = 0x80003183; SSE4-NEXT: je .LBB10_323184; SSE4-NEXT: .LBB10_31: # %cond.store293185; SSE4-NEXT: pextrb $15, %xmm0, 15(%rdi)3186; SSE4-NEXT: retq3187;3188; AVX1-LABEL: truncstore_v16i32_v16i8:3189; AVX1: # %bb.0:3190; AVX1-NEXT: vbroadcastss {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255]3191; AVX1-NEXT: vandps %ymm4, %ymm1, %ymm13192; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm53193; AVX1-NEXT: vpackusdw %xmm5, %xmm1, %xmm13194; AVX1-NEXT: vandps %ymm4, %ymm0, %ymm03195; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm43196; AVX1-NEXT: vpackusdw %xmm4, %xmm0, %xmm03197; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm03198; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm13199; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm43200; AVX1-NEXT: vpcmpeqd %xmm4, %xmm1, %xmm13201; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm33202; AVX1-NEXT: vpackssdw %xmm1, %xmm3, %xmm13203; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm33204; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm33205; AVX1-NEXT: vpcmpeqd %xmm4, %xmm2, %xmm23206; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm23207; AVX1-NEXT: vpacksswb %xmm1, %xmm2, %xmm13208; AVX1-NEXT: vpmovmskb %xmm1, %eax3209; AVX1-NEXT: xorl $65535, %eax # imm = 0xFFFF3210; AVX1-NEXT: testb $1, %al3211; AVX1-NEXT: jne .LBB10_13212; AVX1-NEXT: # %bb.2: # %else3213; AVX1-NEXT: testb $2, %al3214; AVX1-NEXT: jne .LBB10_33215; AVX1-NEXT: .LBB10_4: # %else23216; AVX1-NEXT: testb $4, %al3217; AVX1-NEXT: jne .LBB10_53218; AVX1-NEXT: .LBB10_6: # %else43219; AVX1-NEXT: testb $8, %al3220; AVX1-NEXT: jne .LBB10_73221; AVX1-NEXT: .LBB10_8: # %else63222; AVX1-NEXT: testb $16, %al3223; AVX1-NEXT: jne .LBB10_93224; AVX1-NEXT: .LBB10_10: # %else83225; AVX1-NEXT: testb $32, %al3226; AVX1-NEXT: jne .LBB10_113227; AVX1-NEXT: .LBB10_12: # %else103228; AVX1-NEXT: testb $64, %al3229; AVX1-NEXT: jne .LBB10_133230; AVX1-NEXT: .LBB10_14: # %else123231; AVX1-NEXT: testb %al, %al3232; AVX1-NEXT: js .LBB10_153233; AVX1-NEXT: .LBB10_16: # %else143234; AVX1-NEXT: testl $256, %eax # imm = 0x1003235; AVX1-NEXT: jne .LBB10_173236; AVX1-NEXT: .LBB10_18: # %else163237; AVX1-NEXT: testl $512, %eax # imm = 0x2003238; AVX1-NEXT: jne .LBB10_193239; AVX1-NEXT: .LBB10_20: # %else183240; AVX1-NEXT: testl $1024, %eax # imm = 0x4003241; AVX1-NEXT: jne .LBB10_213242; AVX1-NEXT: .LBB10_22: # %else203243; AVX1-NEXT: testl $2048, %eax # imm = 0x8003244; AVX1-NEXT: jne .LBB10_233245; AVX1-NEXT: .LBB10_24: # %else223246; AVX1-NEXT: testl $4096, %eax # imm = 0x10003247; AVX1-NEXT: jne .LBB10_253248; AVX1-NEXT: .LBB10_26: # %else243249; AVX1-NEXT: testl $8192, %eax # imm = 0x20003250; AVX1-NEXT: jne .LBB10_273251; AVX1-NEXT: .LBB10_28: # %else263252; AVX1-NEXT: testl $16384, %eax # imm = 0x40003253; AVX1-NEXT: jne .LBB10_293254; AVX1-NEXT: .LBB10_30: # %else283255; AVX1-NEXT: testl $32768, %eax # imm = 0x80003256; AVX1-NEXT: jne .LBB10_313257; AVX1-NEXT: .LBB10_32: # %else303258; AVX1-NEXT: vzeroupper3259; AVX1-NEXT: retq3260; AVX1-NEXT: .LBB10_1: # %cond.store3261; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)3262; AVX1-NEXT: testb $2, %al3263; AVX1-NEXT: je .LBB10_43264; AVX1-NEXT: .LBB10_3: # %cond.store13265; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)3266; AVX1-NEXT: testb $4, %al3267; AVX1-NEXT: je .LBB10_63268; AVX1-NEXT: .LBB10_5: # %cond.store33269; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)3270; AVX1-NEXT: testb $8, %al3271; AVX1-NEXT: je .LBB10_83272; AVX1-NEXT: .LBB10_7: # %cond.store53273; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)3274; AVX1-NEXT: testb $16, %al3275; AVX1-NEXT: je .LBB10_103276; AVX1-NEXT: .LBB10_9: # %cond.store73277; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)3278; AVX1-NEXT: testb $32, %al3279; AVX1-NEXT: je .LBB10_123280; AVX1-NEXT: .LBB10_11: # %cond.store93281; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)3282; AVX1-NEXT: testb $64, %al3283; AVX1-NEXT: je .LBB10_143284; AVX1-NEXT: .LBB10_13: # %cond.store113285; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)3286; AVX1-NEXT: testb %al, %al3287; AVX1-NEXT: jns .LBB10_163288; AVX1-NEXT: .LBB10_15: # %cond.store133289; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)3290; AVX1-NEXT: testl $256, %eax # imm = 0x1003291; AVX1-NEXT: je .LBB10_183292; AVX1-NEXT: .LBB10_17: # %cond.store153293; AVX1-NEXT: vpextrb $8, %xmm0, 8(%rdi)3294; AVX1-NEXT: testl $512, %eax # imm = 0x2003295; AVX1-NEXT: je .LBB10_203296; AVX1-NEXT: .LBB10_19: # %cond.store173297; AVX1-NEXT: vpextrb $9, %xmm0, 9(%rdi)3298; AVX1-NEXT: testl $1024, %eax # imm = 0x4003299; AVX1-NEXT: je .LBB10_223300; AVX1-NEXT: .LBB10_21: # %cond.store193301; AVX1-NEXT: vpextrb $10, %xmm0, 10(%rdi)3302; AVX1-NEXT: testl $2048, %eax # imm = 0x8003303; AVX1-NEXT: je .LBB10_243304; AVX1-NEXT: .LBB10_23: # %cond.store213305; AVX1-NEXT: vpextrb $11, %xmm0, 11(%rdi)3306; AVX1-NEXT: testl $4096, %eax # imm = 0x10003307; AVX1-NEXT: je .LBB10_263308; AVX1-NEXT: .LBB10_25: # %cond.store233309; AVX1-NEXT: vpextrb $12, %xmm0, 12(%rdi)3310; AVX1-NEXT: testl $8192, %eax # imm = 0x20003311; AVX1-NEXT: je .LBB10_283312; AVX1-NEXT: .LBB10_27: # %cond.store253313; AVX1-NEXT: vpextrb $13, %xmm0, 13(%rdi)3314; AVX1-NEXT: testl $16384, %eax # imm = 0x40003315; AVX1-NEXT: je .LBB10_303316; AVX1-NEXT: .LBB10_29: # %cond.store273317; AVX1-NEXT: vpextrb $14, %xmm0, 14(%rdi)3318; AVX1-NEXT: testl $32768, %eax # imm = 0x80003319; AVX1-NEXT: je .LBB10_323320; AVX1-NEXT: .LBB10_31: # %cond.store293321; AVX1-NEXT: vpextrb $15, %xmm0, 15(%rdi)3322; AVX1-NEXT: vzeroupper3323; AVX1-NEXT: retq3324;3325; AVX2-LABEL: truncstore_v16i32_v16i8:3326; AVX2: # %bb.0:3327; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm43328; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm5 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]3329; AVX2-NEXT: vpand %ymm5, %ymm1, %ymm13330; AVX2-NEXT: vpand %ymm5, %ymm0, %ymm03331; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm03332; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm13333; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm03334; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]3335; AVX2-NEXT: vpcmpeqd %ymm4, %ymm3, %ymm13336; AVX2-NEXT: vpcmpeqd %ymm4, %ymm2, %ymm23337; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm13338; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm23339; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm13340; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm23341; AVX2-NEXT: vpacksswb %xmm2, %xmm1, %xmm13342; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,1,3]3343; AVX2-NEXT: vpmovmskb %xmm1, %eax3344; AVX2-NEXT: testb $1, %al3345; AVX2-NEXT: jne .LBB10_13346; AVX2-NEXT: # %bb.2: # %else3347; AVX2-NEXT: testb $2, %al3348; AVX2-NEXT: jne .LBB10_33349; AVX2-NEXT: .LBB10_4: # %else23350; AVX2-NEXT: testb $4, %al3351; AVX2-NEXT: jne .LBB10_53352; AVX2-NEXT: .LBB10_6: # %else43353; AVX2-NEXT: testb $8, %al3354; AVX2-NEXT: jne .LBB10_73355; AVX2-NEXT: .LBB10_8: # %else63356; AVX2-NEXT: testb $16, %al3357; AVX2-NEXT: jne .LBB10_93358; AVX2-NEXT: .LBB10_10: # %else83359; AVX2-NEXT: testb $32, %al3360; AVX2-NEXT: jne .LBB10_113361; AVX2-NEXT: .LBB10_12: # %else103362; AVX2-NEXT: testb $64, %al3363; AVX2-NEXT: jne .LBB10_133364; AVX2-NEXT: .LBB10_14: # %else123365; AVX2-NEXT: testb %al, %al3366; AVX2-NEXT: js .LBB10_153367; AVX2-NEXT: .LBB10_16: # %else143368; AVX2-NEXT: testl $256, %eax # imm = 0x1003369; AVX2-NEXT: jne .LBB10_173370; AVX2-NEXT: .LBB10_18: # %else163371; AVX2-NEXT: testl $512, %eax # imm = 0x2003372; AVX2-NEXT: jne .LBB10_193373; AVX2-NEXT: .LBB10_20: # %else183374; AVX2-NEXT: testl $1024, %eax # imm = 0x4003375; AVX2-NEXT: jne .LBB10_213376; AVX2-NEXT: .LBB10_22: # %else203377; AVX2-NEXT: testl $2048, %eax # imm = 0x8003378; AVX2-NEXT: jne .LBB10_233379; AVX2-NEXT: .LBB10_24: # %else223380; AVX2-NEXT: testl $4096, %eax # imm = 0x10003381; AVX2-NEXT: jne .LBB10_253382; AVX2-NEXT: .LBB10_26: # %else243383; AVX2-NEXT: testl $8192, %eax # imm = 0x20003384; AVX2-NEXT: jne .LBB10_273385; AVX2-NEXT: .LBB10_28: # %else263386; AVX2-NEXT: testl $16384, %eax # imm = 0x40003387; AVX2-NEXT: jne .LBB10_293388; AVX2-NEXT: .LBB10_30: # %else283389; AVX2-NEXT: testl $32768, %eax # imm = 0x80003390; AVX2-NEXT: jne .LBB10_313391; AVX2-NEXT: .LBB10_32: # %else303392; AVX2-NEXT: vzeroupper3393; AVX2-NEXT: retq3394; AVX2-NEXT: .LBB10_1: # %cond.store3395; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)3396; AVX2-NEXT: testb $2, %al3397; AVX2-NEXT: je .LBB10_43398; AVX2-NEXT: .LBB10_3: # %cond.store13399; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)3400; AVX2-NEXT: testb $4, %al3401; AVX2-NEXT: je .LBB10_63402; AVX2-NEXT: .LBB10_5: # %cond.store33403; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)3404; AVX2-NEXT: testb $8, %al3405; AVX2-NEXT: je .LBB10_83406; AVX2-NEXT: .LBB10_7: # %cond.store53407; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)3408; AVX2-NEXT: testb $16, %al3409; AVX2-NEXT: je .LBB10_103410; AVX2-NEXT: .LBB10_9: # %cond.store73411; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)3412; AVX2-NEXT: testb $32, %al3413; AVX2-NEXT: je .LBB10_123414; AVX2-NEXT: .LBB10_11: # %cond.store93415; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)3416; AVX2-NEXT: testb $64, %al3417; AVX2-NEXT: je .LBB10_143418; AVX2-NEXT: .LBB10_13: # %cond.store113419; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)3420; AVX2-NEXT: testb %al, %al3421; AVX2-NEXT: jns .LBB10_163422; AVX2-NEXT: .LBB10_15: # %cond.store133423; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)3424; AVX2-NEXT: testl $256, %eax # imm = 0x1003425; AVX2-NEXT: je .LBB10_183426; AVX2-NEXT: .LBB10_17: # %cond.store153427; AVX2-NEXT: vpextrb $8, %xmm0, 8(%rdi)3428; AVX2-NEXT: testl $512, %eax # imm = 0x2003429; AVX2-NEXT: je .LBB10_203430; AVX2-NEXT: .LBB10_19: # %cond.store173431; AVX2-NEXT: vpextrb $9, %xmm0, 9(%rdi)3432; AVX2-NEXT: testl $1024, %eax # imm = 0x4003433; AVX2-NEXT: je .LBB10_223434; AVX2-NEXT: .LBB10_21: # %cond.store193435; AVX2-NEXT: vpextrb $10, %xmm0, 10(%rdi)3436; AVX2-NEXT: testl $2048, %eax # imm = 0x8003437; AVX2-NEXT: je .LBB10_243438; AVX2-NEXT: .LBB10_23: # %cond.store213439; AVX2-NEXT: vpextrb $11, %xmm0, 11(%rdi)3440; AVX2-NEXT: testl $4096, %eax # imm = 0x10003441; AVX2-NEXT: je .LBB10_263442; AVX2-NEXT: .LBB10_25: # %cond.store233443; AVX2-NEXT: vpextrb $12, %xmm0, 12(%rdi)3444; AVX2-NEXT: testl $8192, %eax # imm = 0x20003445; AVX2-NEXT: je .LBB10_283446; AVX2-NEXT: .LBB10_27: # %cond.store253447; AVX2-NEXT: vpextrb $13, %xmm0, 13(%rdi)3448; AVX2-NEXT: testl $16384, %eax # imm = 0x40003449; AVX2-NEXT: je .LBB10_303450; AVX2-NEXT: .LBB10_29: # %cond.store273451; AVX2-NEXT: vpextrb $14, %xmm0, 14(%rdi)3452; AVX2-NEXT: testl $32768, %eax # imm = 0x80003453; AVX2-NEXT: je .LBB10_323454; AVX2-NEXT: .LBB10_31: # %cond.store293455; AVX2-NEXT: vpextrb $15, %xmm0, 15(%rdi)3456; AVX2-NEXT: vzeroupper3457; AVX2-NEXT: retq3458;3459; AVX512F-LABEL: truncstore_v16i32_v16i8:3460; AVX512F: # %bb.0:3461; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k03462; AVX512F-NEXT: vpmovdb %zmm0, %xmm03463; AVX512F-NEXT: kmovw %k0, %eax3464; AVX512F-NEXT: testb $1, %al3465; AVX512F-NEXT: jne .LBB10_13466; AVX512F-NEXT: # %bb.2: # %else3467; AVX512F-NEXT: testb $2, %al3468; AVX512F-NEXT: jne .LBB10_33469; AVX512F-NEXT: .LBB10_4: # %else23470; AVX512F-NEXT: testb $4, %al3471; AVX512F-NEXT: jne .LBB10_53472; AVX512F-NEXT: .LBB10_6: # %else43473; AVX512F-NEXT: testb $8, %al3474; AVX512F-NEXT: jne .LBB10_73475; AVX512F-NEXT: .LBB10_8: # %else63476; AVX512F-NEXT: testb $16, %al3477; AVX512F-NEXT: jne .LBB10_93478; AVX512F-NEXT: .LBB10_10: # %else83479; AVX512F-NEXT: testb $32, %al3480; AVX512F-NEXT: jne .LBB10_113481; AVX512F-NEXT: .LBB10_12: # %else103482; AVX512F-NEXT: testb $64, %al3483; AVX512F-NEXT: jne .LBB10_133484; AVX512F-NEXT: .LBB10_14: # %else123485; AVX512F-NEXT: testb %al, %al3486; AVX512F-NEXT: js .LBB10_153487; AVX512F-NEXT: .LBB10_16: # %else143488; AVX512F-NEXT: testl $256, %eax # imm = 0x1003489; AVX512F-NEXT: jne .LBB10_173490; AVX512F-NEXT: .LBB10_18: # %else163491; AVX512F-NEXT: testl $512, %eax # imm = 0x2003492; AVX512F-NEXT: jne .LBB10_193493; AVX512F-NEXT: .LBB10_20: # %else183494; AVX512F-NEXT: testl $1024, %eax # imm = 0x4003495; AVX512F-NEXT: jne .LBB10_213496; AVX512F-NEXT: .LBB10_22: # %else203497; AVX512F-NEXT: testl $2048, %eax # imm = 0x8003498; AVX512F-NEXT: jne .LBB10_233499; AVX512F-NEXT: .LBB10_24: # %else223500; AVX512F-NEXT: testl $4096, %eax # imm = 0x10003501; AVX512F-NEXT: jne .LBB10_253502; AVX512F-NEXT: .LBB10_26: # %else243503; AVX512F-NEXT: testl $8192, %eax # imm = 0x20003504; AVX512F-NEXT: jne .LBB10_273505; AVX512F-NEXT: .LBB10_28: # %else263506; AVX512F-NEXT: testl $16384, %eax # imm = 0x40003507; AVX512F-NEXT: jne .LBB10_293508; AVX512F-NEXT: .LBB10_30: # %else283509; AVX512F-NEXT: testl $32768, %eax # imm = 0x80003510; AVX512F-NEXT: jne .LBB10_313511; AVX512F-NEXT: .LBB10_32: # %else303512; AVX512F-NEXT: vzeroupper3513; AVX512F-NEXT: retq3514; AVX512F-NEXT: .LBB10_1: # %cond.store3515; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)3516; AVX512F-NEXT: testb $2, %al3517; AVX512F-NEXT: je .LBB10_43518; AVX512F-NEXT: .LBB10_3: # %cond.store13519; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)3520; AVX512F-NEXT: testb $4, %al3521; AVX512F-NEXT: je .LBB10_63522; AVX512F-NEXT: .LBB10_5: # %cond.store33523; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)3524; AVX512F-NEXT: testb $8, %al3525; AVX512F-NEXT: je .LBB10_83526; AVX512F-NEXT: .LBB10_7: # %cond.store53527; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)3528; AVX512F-NEXT: testb $16, %al3529; AVX512F-NEXT: je .LBB10_103530; AVX512F-NEXT: .LBB10_9: # %cond.store73531; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)3532; AVX512F-NEXT: testb $32, %al3533; AVX512F-NEXT: je .LBB10_123534; AVX512F-NEXT: .LBB10_11: # %cond.store93535; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)3536; AVX512F-NEXT: testb $64, %al3537; AVX512F-NEXT: je .LBB10_143538; AVX512F-NEXT: .LBB10_13: # %cond.store113539; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)3540; AVX512F-NEXT: testb %al, %al3541; AVX512F-NEXT: jns .LBB10_163542; AVX512F-NEXT: .LBB10_15: # %cond.store133543; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)3544; AVX512F-NEXT: testl $256, %eax # imm = 0x1003545; AVX512F-NEXT: je .LBB10_183546; AVX512F-NEXT: .LBB10_17: # %cond.store153547; AVX512F-NEXT: vpextrb $8, %xmm0, 8(%rdi)3548; AVX512F-NEXT: testl $512, %eax # imm = 0x2003549; AVX512F-NEXT: je .LBB10_203550; AVX512F-NEXT: .LBB10_19: # %cond.store173551; AVX512F-NEXT: vpextrb $9, %xmm0, 9(%rdi)3552; AVX512F-NEXT: testl $1024, %eax # imm = 0x4003553; AVX512F-NEXT: je .LBB10_223554; AVX512F-NEXT: .LBB10_21: # %cond.store193555; AVX512F-NEXT: vpextrb $10, %xmm0, 10(%rdi)3556; AVX512F-NEXT: testl $2048, %eax # imm = 0x8003557; AVX512F-NEXT: je .LBB10_243558; AVX512F-NEXT: .LBB10_23: # %cond.store213559; AVX512F-NEXT: vpextrb $11, %xmm0, 11(%rdi)3560; AVX512F-NEXT: testl $4096, %eax # imm = 0x10003561; AVX512F-NEXT: je .LBB10_263562; AVX512F-NEXT: .LBB10_25: # %cond.store233563; AVX512F-NEXT: vpextrb $12, %xmm0, 12(%rdi)3564; AVX512F-NEXT: testl $8192, %eax # imm = 0x20003565; AVX512F-NEXT: je .LBB10_283566; AVX512F-NEXT: .LBB10_27: # %cond.store253567; AVX512F-NEXT: vpextrb $13, %xmm0, 13(%rdi)3568; AVX512F-NEXT: testl $16384, %eax # imm = 0x40003569; AVX512F-NEXT: je .LBB10_303570; AVX512F-NEXT: .LBB10_29: # %cond.store273571; AVX512F-NEXT: vpextrb $14, %xmm0, 14(%rdi)3572; AVX512F-NEXT: testl $32768, %eax # imm = 0x80003573; AVX512F-NEXT: je .LBB10_323574; AVX512F-NEXT: .LBB10_31: # %cond.store293575; AVX512F-NEXT: vpextrb $15, %xmm0, 15(%rdi)3576; AVX512F-NEXT: vzeroupper3577; AVX512F-NEXT: retq3578;3579; AVX512FVL-LABEL: truncstore_v16i32_v16i8:3580; AVX512FVL: # %bb.0:3581; AVX512FVL-NEXT: vptestmd %zmm1, %zmm1, %k03582; AVX512FVL-NEXT: vpmovdb %zmm0, %xmm03583; AVX512FVL-NEXT: kmovw %k0, %eax3584; AVX512FVL-NEXT: testb $1, %al3585; AVX512FVL-NEXT: jne .LBB10_13586; AVX512FVL-NEXT: # %bb.2: # %else3587; AVX512FVL-NEXT: testb $2, %al3588; AVX512FVL-NEXT: jne .LBB10_33589; AVX512FVL-NEXT: .LBB10_4: # %else23590; AVX512FVL-NEXT: testb $4, %al3591; AVX512FVL-NEXT: jne .LBB10_53592; AVX512FVL-NEXT: .LBB10_6: # %else43593; AVX512FVL-NEXT: testb $8, %al3594; AVX512FVL-NEXT: jne .LBB10_73595; AVX512FVL-NEXT: .LBB10_8: # %else63596; AVX512FVL-NEXT: testb $16, %al3597; AVX512FVL-NEXT: jne .LBB10_93598; AVX512FVL-NEXT: .LBB10_10: # %else83599; AVX512FVL-NEXT: testb $32, %al3600; AVX512FVL-NEXT: jne .LBB10_113601; AVX512FVL-NEXT: .LBB10_12: # %else103602; AVX512FVL-NEXT: testb $64, %al3603; AVX512FVL-NEXT: jne .LBB10_133604; AVX512FVL-NEXT: .LBB10_14: # %else123605; AVX512FVL-NEXT: testb %al, %al3606; AVX512FVL-NEXT: js .LBB10_153607; AVX512FVL-NEXT: .LBB10_16: # %else143608; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1003609; AVX512FVL-NEXT: jne .LBB10_173610; AVX512FVL-NEXT: .LBB10_18: # %else163611; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2003612; AVX512FVL-NEXT: jne .LBB10_193613; AVX512FVL-NEXT: .LBB10_20: # %else183614; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4003615; AVX512FVL-NEXT: jne .LBB10_213616; AVX512FVL-NEXT: .LBB10_22: # %else203617; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8003618; AVX512FVL-NEXT: jne .LBB10_233619; AVX512FVL-NEXT: .LBB10_24: # %else223620; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10003621; AVX512FVL-NEXT: jne .LBB10_253622; AVX512FVL-NEXT: .LBB10_26: # %else243623; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20003624; AVX512FVL-NEXT: jne .LBB10_273625; AVX512FVL-NEXT: .LBB10_28: # %else263626; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40003627; AVX512FVL-NEXT: jne .LBB10_293628; AVX512FVL-NEXT: .LBB10_30: # %else283629; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80003630; AVX512FVL-NEXT: jne .LBB10_313631; AVX512FVL-NEXT: .LBB10_32: # %else303632; AVX512FVL-NEXT: vzeroupper3633; AVX512FVL-NEXT: retq3634; AVX512FVL-NEXT: .LBB10_1: # %cond.store3635; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)3636; AVX512FVL-NEXT: testb $2, %al3637; AVX512FVL-NEXT: je .LBB10_43638; AVX512FVL-NEXT: .LBB10_3: # %cond.store13639; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)3640; AVX512FVL-NEXT: testb $4, %al3641; AVX512FVL-NEXT: je .LBB10_63642; AVX512FVL-NEXT: .LBB10_5: # %cond.store33643; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)3644; AVX512FVL-NEXT: testb $8, %al3645; AVX512FVL-NEXT: je .LBB10_83646; AVX512FVL-NEXT: .LBB10_7: # %cond.store53647; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)3648; AVX512FVL-NEXT: testb $16, %al3649; AVX512FVL-NEXT: je .LBB10_103650; AVX512FVL-NEXT: .LBB10_9: # %cond.store73651; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)3652; AVX512FVL-NEXT: testb $32, %al3653; AVX512FVL-NEXT: je .LBB10_123654; AVX512FVL-NEXT: .LBB10_11: # %cond.store93655; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)3656; AVX512FVL-NEXT: testb $64, %al3657; AVX512FVL-NEXT: je .LBB10_143658; AVX512FVL-NEXT: .LBB10_13: # %cond.store113659; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)3660; AVX512FVL-NEXT: testb %al, %al3661; AVX512FVL-NEXT: jns .LBB10_163662; AVX512FVL-NEXT: .LBB10_15: # %cond.store133663; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)3664; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1003665; AVX512FVL-NEXT: je .LBB10_183666; AVX512FVL-NEXT: .LBB10_17: # %cond.store153667; AVX512FVL-NEXT: vpextrb $8, %xmm0, 8(%rdi)3668; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2003669; AVX512FVL-NEXT: je .LBB10_203670; AVX512FVL-NEXT: .LBB10_19: # %cond.store173671; AVX512FVL-NEXT: vpextrb $9, %xmm0, 9(%rdi)3672; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4003673; AVX512FVL-NEXT: je .LBB10_223674; AVX512FVL-NEXT: .LBB10_21: # %cond.store193675; AVX512FVL-NEXT: vpextrb $10, %xmm0, 10(%rdi)3676; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8003677; AVX512FVL-NEXT: je .LBB10_243678; AVX512FVL-NEXT: .LBB10_23: # %cond.store213679; AVX512FVL-NEXT: vpextrb $11, %xmm0, 11(%rdi)3680; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10003681; AVX512FVL-NEXT: je .LBB10_263682; AVX512FVL-NEXT: .LBB10_25: # %cond.store233683; AVX512FVL-NEXT: vpextrb $12, %xmm0, 12(%rdi)3684; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20003685; AVX512FVL-NEXT: je .LBB10_283686; AVX512FVL-NEXT: .LBB10_27: # %cond.store253687; AVX512FVL-NEXT: vpextrb $13, %xmm0, 13(%rdi)3688; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40003689; AVX512FVL-NEXT: je .LBB10_303690; AVX512FVL-NEXT: .LBB10_29: # %cond.store273691; AVX512FVL-NEXT: vpextrb $14, %xmm0, 14(%rdi)3692; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80003693; AVX512FVL-NEXT: je .LBB10_323694; AVX512FVL-NEXT: .LBB10_31: # %cond.store293695; AVX512FVL-NEXT: vpextrb $15, %xmm0, 15(%rdi)3696; AVX512FVL-NEXT: vzeroupper3697; AVX512FVL-NEXT: retq3698;3699; AVX512BW-LABEL: truncstore_v16i32_v16i8:3700; AVX512BW: # %bb.0:3701; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k13702; AVX512BW-NEXT: vpmovdb %zmm0, (%rdi) {%k1}3703; AVX512BW-NEXT: vzeroupper3704; AVX512BW-NEXT: retq3705;3706; AVX512BWVL-LABEL: truncstore_v16i32_v16i8:3707; AVX512BWVL: # %bb.0:3708; AVX512BWVL-NEXT: vptestmd %zmm1, %zmm1, %k13709; AVX512BWVL-NEXT: vpmovdb %zmm0, (%rdi) {%k1}3710; AVX512BWVL-NEXT: vzeroupper3711; AVX512BWVL-NEXT: retq3712 %a = icmp ne <16 x i32> %mask, zeroinitializer3713 %b = trunc <16 x i32> %x to <16 x i8>3714 call void @llvm.masked.store.v16i8.p0(<16 x i8> %b, ptr %p, i32 1, <16 x i1> %a)3715 ret void3716}3717 3718define void @truncstore_v8i32_v8i16(<8 x i32> %x, ptr %p, <8 x i32> %mask) {3719; SSE2-LABEL: truncstore_v8i32_v8i16:3720; SSE2: # %bb.0:3721; SSE2-NEXT: pxor %xmm4, %xmm43722; SSE2-NEXT: pslld $16, %xmm13723; SSE2-NEXT: psrad $16, %xmm13724; SSE2-NEXT: pslld $16, %xmm03725; SSE2-NEXT: psrad $16, %xmm03726; SSE2-NEXT: packssdw %xmm1, %xmm03727; SSE2-NEXT: pcmpeqd %xmm4, %xmm33728; SSE2-NEXT: pcmpeqd %xmm4, %xmm23729; SSE2-NEXT: packssdw %xmm3, %xmm23730; SSE2-NEXT: packsswb %xmm2, %xmm23731; SSE2-NEXT: pmovmskb %xmm2, %eax3732; SSE2-NEXT: notl %eax3733; SSE2-NEXT: testb $1, %al3734; SSE2-NEXT: jne .LBB11_13735; SSE2-NEXT: # %bb.2: # %else3736; SSE2-NEXT: testb $2, %al3737; SSE2-NEXT: jne .LBB11_33738; SSE2-NEXT: .LBB11_4: # %else23739; SSE2-NEXT: testb $4, %al3740; SSE2-NEXT: jne .LBB11_53741; SSE2-NEXT: .LBB11_6: # %else43742; SSE2-NEXT: testb $8, %al3743; SSE2-NEXT: jne .LBB11_73744; SSE2-NEXT: .LBB11_8: # %else63745; SSE2-NEXT: testb $16, %al3746; SSE2-NEXT: jne .LBB11_93747; SSE2-NEXT: .LBB11_10: # %else83748; SSE2-NEXT: testb $32, %al3749; SSE2-NEXT: jne .LBB11_113750; SSE2-NEXT: .LBB11_12: # %else103751; SSE2-NEXT: testb $64, %al3752; SSE2-NEXT: jne .LBB11_133753; SSE2-NEXT: .LBB11_14: # %else123754; SSE2-NEXT: testb $-128, %al3755; SSE2-NEXT: jne .LBB11_153756; SSE2-NEXT: .LBB11_16: # %else143757; SSE2-NEXT: retq3758; SSE2-NEXT: .LBB11_1: # %cond.store3759; SSE2-NEXT: movd %xmm0, %ecx3760; SSE2-NEXT: movw %cx, (%rdi)3761; SSE2-NEXT: testb $2, %al3762; SSE2-NEXT: je .LBB11_43763; SSE2-NEXT: .LBB11_3: # %cond.store13764; SSE2-NEXT: pextrw $1, %xmm0, %ecx3765; SSE2-NEXT: movw %cx, 2(%rdi)3766; SSE2-NEXT: testb $4, %al3767; SSE2-NEXT: je .LBB11_63768; SSE2-NEXT: .LBB11_5: # %cond.store33769; SSE2-NEXT: pextrw $2, %xmm0, %ecx3770; SSE2-NEXT: movw %cx, 4(%rdi)3771; SSE2-NEXT: testb $8, %al3772; SSE2-NEXT: je .LBB11_83773; SSE2-NEXT: .LBB11_7: # %cond.store53774; SSE2-NEXT: pextrw $3, %xmm0, %ecx3775; SSE2-NEXT: movw %cx, 6(%rdi)3776; SSE2-NEXT: testb $16, %al3777; SSE2-NEXT: je .LBB11_103778; SSE2-NEXT: .LBB11_9: # %cond.store73779; SSE2-NEXT: pextrw $4, %xmm0, %ecx3780; SSE2-NEXT: movw %cx, 8(%rdi)3781; SSE2-NEXT: testb $32, %al3782; SSE2-NEXT: je .LBB11_123783; SSE2-NEXT: .LBB11_11: # %cond.store93784; SSE2-NEXT: pextrw $5, %xmm0, %ecx3785; SSE2-NEXT: movw %cx, 10(%rdi)3786; SSE2-NEXT: testb $64, %al3787; SSE2-NEXT: je .LBB11_143788; SSE2-NEXT: .LBB11_13: # %cond.store113789; SSE2-NEXT: pextrw $6, %xmm0, %ecx3790; SSE2-NEXT: movw %cx, 12(%rdi)3791; SSE2-NEXT: testb $-128, %al3792; SSE2-NEXT: je .LBB11_163793; SSE2-NEXT: .LBB11_15: # %cond.store133794; SSE2-NEXT: pextrw $7, %xmm0, %eax3795; SSE2-NEXT: movw %ax, 14(%rdi)3796; SSE2-NEXT: retq3797;3798; SSE4-LABEL: truncstore_v8i32_v8i16:3799; SSE4: # %bb.0:3800; SSE4-NEXT: pxor %xmm4, %xmm43801; SSE4-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1],xmm1[2],xmm4[3],xmm1[4],xmm4[5],xmm1[6],xmm4[7]3802; SSE4-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1],xmm0[2],xmm4[3],xmm0[4],xmm4[5],xmm0[6],xmm4[7]3803; SSE4-NEXT: packusdw %xmm1, %xmm03804; SSE4-NEXT: pcmpeqd %xmm4, %xmm33805; SSE4-NEXT: pcmpeqd %xmm4, %xmm23806; SSE4-NEXT: packssdw %xmm3, %xmm23807; SSE4-NEXT: packsswb %xmm2, %xmm23808; SSE4-NEXT: pmovmskb %xmm2, %eax3809; SSE4-NEXT: notl %eax3810; SSE4-NEXT: testb $1, %al3811; SSE4-NEXT: jne .LBB11_13812; SSE4-NEXT: # %bb.2: # %else3813; SSE4-NEXT: testb $2, %al3814; SSE4-NEXT: jne .LBB11_33815; SSE4-NEXT: .LBB11_4: # %else23816; SSE4-NEXT: testb $4, %al3817; SSE4-NEXT: jne .LBB11_53818; SSE4-NEXT: .LBB11_6: # %else43819; SSE4-NEXT: testb $8, %al3820; SSE4-NEXT: jne .LBB11_73821; SSE4-NEXT: .LBB11_8: # %else63822; SSE4-NEXT: testb $16, %al3823; SSE4-NEXT: jne .LBB11_93824; SSE4-NEXT: .LBB11_10: # %else83825; SSE4-NEXT: testb $32, %al3826; SSE4-NEXT: jne .LBB11_113827; SSE4-NEXT: .LBB11_12: # %else103828; SSE4-NEXT: testb $64, %al3829; SSE4-NEXT: jne .LBB11_133830; SSE4-NEXT: .LBB11_14: # %else123831; SSE4-NEXT: testb $-128, %al3832; SSE4-NEXT: jne .LBB11_153833; SSE4-NEXT: .LBB11_16: # %else143834; SSE4-NEXT: retq3835; SSE4-NEXT: .LBB11_1: # %cond.store3836; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)3837; SSE4-NEXT: testb $2, %al3838; SSE4-NEXT: je .LBB11_43839; SSE4-NEXT: .LBB11_3: # %cond.store13840; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)3841; SSE4-NEXT: testb $4, %al3842; SSE4-NEXT: je .LBB11_63843; SSE4-NEXT: .LBB11_5: # %cond.store33844; SSE4-NEXT: pextrw $2, %xmm0, 4(%rdi)3845; SSE4-NEXT: testb $8, %al3846; SSE4-NEXT: je .LBB11_83847; SSE4-NEXT: .LBB11_7: # %cond.store53848; SSE4-NEXT: pextrw $3, %xmm0, 6(%rdi)3849; SSE4-NEXT: testb $16, %al3850; SSE4-NEXT: je .LBB11_103851; SSE4-NEXT: .LBB11_9: # %cond.store73852; SSE4-NEXT: pextrw $4, %xmm0, 8(%rdi)3853; SSE4-NEXT: testb $32, %al3854; SSE4-NEXT: je .LBB11_123855; SSE4-NEXT: .LBB11_11: # %cond.store93856; SSE4-NEXT: pextrw $5, %xmm0, 10(%rdi)3857; SSE4-NEXT: testb $64, %al3858; SSE4-NEXT: je .LBB11_143859; SSE4-NEXT: .LBB11_13: # %cond.store113860; SSE4-NEXT: pextrw $6, %xmm0, 12(%rdi)3861; SSE4-NEXT: testb $-128, %al3862; SSE4-NEXT: je .LBB11_163863; SSE4-NEXT: .LBB11_15: # %cond.store133864; SSE4-NEXT: pextrw $7, %xmm0, 14(%rdi)3865; SSE4-NEXT: retq3866;3867; AVX1-LABEL: truncstore_v8i32_v8i16:3868; AVX1: # %bb.0:3869; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03870; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm23871; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm03872; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm23873; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm33874; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm23875; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm13876; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm13877; AVX1-NEXT: vmovmskps %ymm1, %eax3878; AVX1-NEXT: notl %eax3879; AVX1-NEXT: testb $1, %al3880; AVX1-NEXT: jne .LBB11_13881; AVX1-NEXT: # %bb.2: # %else3882; AVX1-NEXT: testb $2, %al3883; AVX1-NEXT: jne .LBB11_33884; AVX1-NEXT: .LBB11_4: # %else23885; AVX1-NEXT: testb $4, %al3886; AVX1-NEXT: jne .LBB11_53887; AVX1-NEXT: .LBB11_6: # %else43888; AVX1-NEXT: testb $8, %al3889; AVX1-NEXT: jne .LBB11_73890; AVX1-NEXT: .LBB11_8: # %else63891; AVX1-NEXT: testb $16, %al3892; AVX1-NEXT: jne .LBB11_93893; AVX1-NEXT: .LBB11_10: # %else83894; AVX1-NEXT: testb $32, %al3895; AVX1-NEXT: jne .LBB11_113896; AVX1-NEXT: .LBB11_12: # %else103897; AVX1-NEXT: testb $64, %al3898; AVX1-NEXT: jne .LBB11_133899; AVX1-NEXT: .LBB11_14: # %else123900; AVX1-NEXT: testb $-128, %al3901; AVX1-NEXT: jne .LBB11_153902; AVX1-NEXT: .LBB11_16: # %else143903; AVX1-NEXT: vzeroupper3904; AVX1-NEXT: retq3905; AVX1-NEXT: .LBB11_1: # %cond.store3906; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)3907; AVX1-NEXT: testb $2, %al3908; AVX1-NEXT: je .LBB11_43909; AVX1-NEXT: .LBB11_3: # %cond.store13910; AVX1-NEXT: vpextrw $1, %xmm0, 2(%rdi)3911; AVX1-NEXT: testb $4, %al3912; AVX1-NEXT: je .LBB11_63913; AVX1-NEXT: .LBB11_5: # %cond.store33914; AVX1-NEXT: vpextrw $2, %xmm0, 4(%rdi)3915; AVX1-NEXT: testb $8, %al3916; AVX1-NEXT: je .LBB11_83917; AVX1-NEXT: .LBB11_7: # %cond.store53918; AVX1-NEXT: vpextrw $3, %xmm0, 6(%rdi)3919; AVX1-NEXT: testb $16, %al3920; AVX1-NEXT: je .LBB11_103921; AVX1-NEXT: .LBB11_9: # %cond.store73922; AVX1-NEXT: vpextrw $4, %xmm0, 8(%rdi)3923; AVX1-NEXT: testb $32, %al3924; AVX1-NEXT: je .LBB11_123925; AVX1-NEXT: .LBB11_11: # %cond.store93926; AVX1-NEXT: vpextrw $5, %xmm0, 10(%rdi)3927; AVX1-NEXT: testb $64, %al3928; AVX1-NEXT: je .LBB11_143929; AVX1-NEXT: .LBB11_13: # %cond.store113930; AVX1-NEXT: vpextrw $6, %xmm0, 12(%rdi)3931; AVX1-NEXT: testb $-128, %al3932; AVX1-NEXT: je .LBB11_163933; AVX1-NEXT: .LBB11_15: # %cond.store133934; AVX1-NEXT: vpextrw $7, %xmm0, 14(%rdi)3935; AVX1-NEXT: vzeroupper3936; AVX1-NEXT: retq3937;3938; AVX2-LABEL: truncstore_v8i32_v8i16:3939; AVX2: # %bb.0:3940; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm23941; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28,29,u,u,u,u,u,u,u,u]3942; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]3943; AVX2-NEXT: vpcmpeqd %ymm2, %ymm1, %ymm13944; AVX2-NEXT: vmovmskps %ymm1, %eax3945; AVX2-NEXT: notl %eax3946; AVX2-NEXT: testb $1, %al3947; AVX2-NEXT: jne .LBB11_13948; AVX2-NEXT: # %bb.2: # %else3949; AVX2-NEXT: testb $2, %al3950; AVX2-NEXT: jne .LBB11_33951; AVX2-NEXT: .LBB11_4: # %else23952; AVX2-NEXT: testb $4, %al3953; AVX2-NEXT: jne .LBB11_53954; AVX2-NEXT: .LBB11_6: # %else43955; AVX2-NEXT: testb $8, %al3956; AVX2-NEXT: jne .LBB11_73957; AVX2-NEXT: .LBB11_8: # %else63958; AVX2-NEXT: testb $16, %al3959; AVX2-NEXT: jne .LBB11_93960; AVX2-NEXT: .LBB11_10: # %else83961; AVX2-NEXT: testb $32, %al3962; AVX2-NEXT: jne .LBB11_113963; AVX2-NEXT: .LBB11_12: # %else103964; AVX2-NEXT: testb $64, %al3965; AVX2-NEXT: jne .LBB11_133966; AVX2-NEXT: .LBB11_14: # %else123967; AVX2-NEXT: testb $-128, %al3968; AVX2-NEXT: jne .LBB11_153969; AVX2-NEXT: .LBB11_16: # %else143970; AVX2-NEXT: vzeroupper3971; AVX2-NEXT: retq3972; AVX2-NEXT: .LBB11_1: # %cond.store3973; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)3974; AVX2-NEXT: testb $2, %al3975; AVX2-NEXT: je .LBB11_43976; AVX2-NEXT: .LBB11_3: # %cond.store13977; AVX2-NEXT: vpextrw $1, %xmm0, 2(%rdi)3978; AVX2-NEXT: testb $4, %al3979; AVX2-NEXT: je .LBB11_63980; AVX2-NEXT: .LBB11_5: # %cond.store33981; AVX2-NEXT: vpextrw $2, %xmm0, 4(%rdi)3982; AVX2-NEXT: testb $8, %al3983; AVX2-NEXT: je .LBB11_83984; AVX2-NEXT: .LBB11_7: # %cond.store53985; AVX2-NEXT: vpextrw $3, %xmm0, 6(%rdi)3986; AVX2-NEXT: testb $16, %al3987; AVX2-NEXT: je .LBB11_103988; AVX2-NEXT: .LBB11_9: # %cond.store73989; AVX2-NEXT: vpextrw $4, %xmm0, 8(%rdi)3990; AVX2-NEXT: testb $32, %al3991; AVX2-NEXT: je .LBB11_123992; AVX2-NEXT: .LBB11_11: # %cond.store93993; AVX2-NEXT: vpextrw $5, %xmm0, 10(%rdi)3994; AVX2-NEXT: testb $64, %al3995; AVX2-NEXT: je .LBB11_143996; AVX2-NEXT: .LBB11_13: # %cond.store113997; AVX2-NEXT: vpextrw $6, %xmm0, 12(%rdi)3998; AVX2-NEXT: testb $-128, %al3999; AVX2-NEXT: je .LBB11_164000; AVX2-NEXT: .LBB11_15: # %cond.store134001; AVX2-NEXT: vpextrw $7, %xmm0, 14(%rdi)4002; AVX2-NEXT: vzeroupper4003; AVX2-NEXT: retq4004;4005; AVX512F-LABEL: truncstore_v8i32_v8i16:4006; AVX512F: # %bb.0:4007; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm14008; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04009; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k04010; AVX512F-NEXT: vpmovdw %zmm0, %ymm04011; AVX512F-NEXT: kmovw %k0, %eax4012; AVX512F-NEXT: testb $1, %al4013; AVX512F-NEXT: jne .LBB11_14014; AVX512F-NEXT: # %bb.2: # %else4015; AVX512F-NEXT: testb $2, %al4016; AVX512F-NEXT: jne .LBB11_34017; AVX512F-NEXT: .LBB11_4: # %else24018; AVX512F-NEXT: testb $4, %al4019; AVX512F-NEXT: jne .LBB11_54020; AVX512F-NEXT: .LBB11_6: # %else44021; AVX512F-NEXT: testb $8, %al4022; AVX512F-NEXT: jne .LBB11_74023; AVX512F-NEXT: .LBB11_8: # %else64024; AVX512F-NEXT: testb $16, %al4025; AVX512F-NEXT: jne .LBB11_94026; AVX512F-NEXT: .LBB11_10: # %else84027; AVX512F-NEXT: testb $32, %al4028; AVX512F-NEXT: jne .LBB11_114029; AVX512F-NEXT: .LBB11_12: # %else104030; AVX512F-NEXT: testb $64, %al4031; AVX512F-NEXT: jne .LBB11_134032; AVX512F-NEXT: .LBB11_14: # %else124033; AVX512F-NEXT: testb $-128, %al4034; AVX512F-NEXT: jne .LBB11_154035; AVX512F-NEXT: .LBB11_16: # %else144036; AVX512F-NEXT: vzeroupper4037; AVX512F-NEXT: retq4038; AVX512F-NEXT: .LBB11_1: # %cond.store4039; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)4040; AVX512F-NEXT: testb $2, %al4041; AVX512F-NEXT: je .LBB11_44042; AVX512F-NEXT: .LBB11_3: # %cond.store14043; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)4044; AVX512F-NEXT: testb $4, %al4045; AVX512F-NEXT: je .LBB11_64046; AVX512F-NEXT: .LBB11_5: # %cond.store34047; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)4048; AVX512F-NEXT: testb $8, %al4049; AVX512F-NEXT: je .LBB11_84050; AVX512F-NEXT: .LBB11_7: # %cond.store54051; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)4052; AVX512F-NEXT: testb $16, %al4053; AVX512F-NEXT: je .LBB11_104054; AVX512F-NEXT: .LBB11_9: # %cond.store74055; AVX512F-NEXT: vpextrw $4, %xmm0, 8(%rdi)4056; AVX512F-NEXT: testb $32, %al4057; AVX512F-NEXT: je .LBB11_124058; AVX512F-NEXT: .LBB11_11: # %cond.store94059; AVX512F-NEXT: vpextrw $5, %xmm0, 10(%rdi)4060; AVX512F-NEXT: testb $64, %al4061; AVX512F-NEXT: je .LBB11_144062; AVX512F-NEXT: .LBB11_13: # %cond.store114063; AVX512F-NEXT: vpextrw $6, %xmm0, 12(%rdi)4064; AVX512F-NEXT: testb $-128, %al4065; AVX512F-NEXT: je .LBB11_164066; AVX512F-NEXT: .LBB11_15: # %cond.store134067; AVX512F-NEXT: vpextrw $7, %xmm0, 14(%rdi)4068; AVX512F-NEXT: vzeroupper4069; AVX512F-NEXT: retq4070;4071; AVX512FVL-LABEL: truncstore_v8i32_v8i16:4072; AVX512FVL: # %bb.0:4073; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k04074; AVX512FVL-NEXT: vpmovdw %ymm0, %xmm04075; AVX512FVL-NEXT: kmovw %k0, %eax4076; AVX512FVL-NEXT: testb $1, %al4077; AVX512FVL-NEXT: jne .LBB11_14078; AVX512FVL-NEXT: # %bb.2: # %else4079; AVX512FVL-NEXT: testb $2, %al4080; AVX512FVL-NEXT: jne .LBB11_34081; AVX512FVL-NEXT: .LBB11_4: # %else24082; AVX512FVL-NEXT: testb $4, %al4083; AVX512FVL-NEXT: jne .LBB11_54084; AVX512FVL-NEXT: .LBB11_6: # %else44085; AVX512FVL-NEXT: testb $8, %al4086; AVX512FVL-NEXT: jne .LBB11_74087; AVX512FVL-NEXT: .LBB11_8: # %else64088; AVX512FVL-NEXT: testb $16, %al4089; AVX512FVL-NEXT: jne .LBB11_94090; AVX512FVL-NEXT: .LBB11_10: # %else84091; AVX512FVL-NEXT: testb $32, %al4092; AVX512FVL-NEXT: jne .LBB11_114093; AVX512FVL-NEXT: .LBB11_12: # %else104094; AVX512FVL-NEXT: testb $64, %al4095; AVX512FVL-NEXT: jne .LBB11_134096; AVX512FVL-NEXT: .LBB11_14: # %else124097; AVX512FVL-NEXT: testb $-128, %al4098; AVX512FVL-NEXT: jne .LBB11_154099; AVX512FVL-NEXT: .LBB11_16: # %else144100; AVX512FVL-NEXT: vzeroupper4101; AVX512FVL-NEXT: retq4102; AVX512FVL-NEXT: .LBB11_1: # %cond.store4103; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)4104; AVX512FVL-NEXT: testb $2, %al4105; AVX512FVL-NEXT: je .LBB11_44106; AVX512FVL-NEXT: .LBB11_3: # %cond.store14107; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)4108; AVX512FVL-NEXT: testb $4, %al4109; AVX512FVL-NEXT: je .LBB11_64110; AVX512FVL-NEXT: .LBB11_5: # %cond.store34111; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)4112; AVX512FVL-NEXT: testb $8, %al4113; AVX512FVL-NEXT: je .LBB11_84114; AVX512FVL-NEXT: .LBB11_7: # %cond.store54115; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)4116; AVX512FVL-NEXT: testb $16, %al4117; AVX512FVL-NEXT: je .LBB11_104118; AVX512FVL-NEXT: .LBB11_9: # %cond.store74119; AVX512FVL-NEXT: vpextrw $4, %xmm0, 8(%rdi)4120; AVX512FVL-NEXT: testb $32, %al4121; AVX512FVL-NEXT: je .LBB11_124122; AVX512FVL-NEXT: .LBB11_11: # %cond.store94123; AVX512FVL-NEXT: vpextrw $5, %xmm0, 10(%rdi)4124; AVX512FVL-NEXT: testb $64, %al4125; AVX512FVL-NEXT: je .LBB11_144126; AVX512FVL-NEXT: .LBB11_13: # %cond.store114127; AVX512FVL-NEXT: vpextrw $6, %xmm0, 12(%rdi)4128; AVX512FVL-NEXT: testb $-128, %al4129; AVX512FVL-NEXT: je .LBB11_164130; AVX512FVL-NEXT: .LBB11_15: # %cond.store134131; AVX512FVL-NEXT: vpextrw $7, %xmm0, 14(%rdi)4132; AVX512FVL-NEXT: vzeroupper4133; AVX512FVL-NEXT: retq4134;4135; AVX512BW-LABEL: truncstore_v8i32_v8i16:4136; AVX512BW: # %bb.0:4137; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm14138; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04139; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k04140; AVX512BW-NEXT: kshiftld $24, %k0, %k04141; AVX512BW-NEXT: kshiftrd $24, %k0, %k14142; AVX512BW-NEXT: vpmovdw %zmm0, %ymm04143; AVX512BW-NEXT: vmovdqu16 %zmm0, (%rdi) {%k1}4144; AVX512BW-NEXT: vzeroupper4145; AVX512BW-NEXT: retq4146;4147; AVX512BWVL-LABEL: truncstore_v8i32_v8i16:4148; AVX512BWVL: # %bb.0:4149; AVX512BWVL-NEXT: vptestmd %ymm1, %ymm1, %k14150; AVX512BWVL-NEXT: vpmovdw %ymm0, (%rdi) {%k1}4151; AVX512BWVL-NEXT: vzeroupper4152; AVX512BWVL-NEXT: retq4153 %a = icmp ne <8 x i32> %mask, zeroinitializer4154 %b = trunc <8 x i32> %x to <8 x i16>4155 call void @llvm.masked.store.v8i16.p0(<8 x i16> %b, ptr %p, i32 1, <8 x i1> %a)4156 ret void4157}4158 4159define void @truncstore_v8i32_v8i8(<8 x i32> %x, ptr %p, <8 x i32> %mask) {4160; SSE2-LABEL: truncstore_v8i32_v8i8:4161; SSE2: # %bb.0:4162; SSE2-NEXT: pxor %xmm4, %xmm44163; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]4164; SSE2-NEXT: pand %xmm5, %xmm14165; SSE2-NEXT: pand %xmm5, %xmm04166; SSE2-NEXT: packuswb %xmm1, %xmm04167; SSE2-NEXT: packuswb %xmm0, %xmm04168; SSE2-NEXT: pcmpeqd %xmm4, %xmm34169; SSE2-NEXT: pcmpeqd %xmm4, %xmm24170; SSE2-NEXT: packssdw %xmm3, %xmm24171; SSE2-NEXT: packsswb %xmm2, %xmm24172; SSE2-NEXT: pmovmskb %xmm2, %eax4173; SSE2-NEXT: notl %eax4174; SSE2-NEXT: testb $1, %al4175; SSE2-NEXT: movd %xmm0, %ecx4176; SSE2-NEXT: jne .LBB12_14177; SSE2-NEXT: # %bb.2: # %else4178; SSE2-NEXT: testb $2, %al4179; SSE2-NEXT: jne .LBB12_34180; SSE2-NEXT: .LBB12_4: # %else24181; SSE2-NEXT: testb $4, %al4182; SSE2-NEXT: jne .LBB12_54183; SSE2-NEXT: .LBB12_6: # %else44184; SSE2-NEXT: testb $8, %al4185; SSE2-NEXT: je .LBB12_84186; SSE2-NEXT: .LBB12_7: # %cond.store54187; SSE2-NEXT: shrl $24, %ecx4188; SSE2-NEXT: movb %cl, 3(%rdi)4189; SSE2-NEXT: .LBB12_8: # %else64190; SSE2-NEXT: testb $16, %al4191; SSE2-NEXT: pextrw $2, %xmm0, %ecx4192; SSE2-NEXT: je .LBB12_104193; SSE2-NEXT: # %bb.9: # %cond.store74194; SSE2-NEXT: movb %cl, 4(%rdi)4195; SSE2-NEXT: .LBB12_10: # %else84196; SSE2-NEXT: testb $32, %al4197; SSE2-NEXT: je .LBB12_124198; SSE2-NEXT: # %bb.11: # %cond.store94199; SSE2-NEXT: movb %ch, 5(%rdi)4200; SSE2-NEXT: .LBB12_12: # %else104201; SSE2-NEXT: testb $64, %al4202; SSE2-NEXT: pextrw $3, %xmm0, %ecx4203; SSE2-NEXT: jne .LBB12_134204; SSE2-NEXT: # %bb.14: # %else124205; SSE2-NEXT: testb $-128, %al4206; SSE2-NEXT: jne .LBB12_154207; SSE2-NEXT: .LBB12_16: # %else144208; SSE2-NEXT: retq4209; SSE2-NEXT: .LBB12_1: # %cond.store4210; SSE2-NEXT: movb %cl, (%rdi)4211; SSE2-NEXT: testb $2, %al4212; SSE2-NEXT: je .LBB12_44213; SSE2-NEXT: .LBB12_3: # %cond.store14214; SSE2-NEXT: movb %ch, 1(%rdi)4215; SSE2-NEXT: testb $4, %al4216; SSE2-NEXT: je .LBB12_64217; SSE2-NEXT: .LBB12_5: # %cond.store34218; SSE2-NEXT: movl %ecx, %edx4219; SSE2-NEXT: shrl $16, %edx4220; SSE2-NEXT: movb %dl, 2(%rdi)4221; SSE2-NEXT: testb $8, %al4222; SSE2-NEXT: jne .LBB12_74223; SSE2-NEXT: jmp .LBB12_84224; SSE2-NEXT: .LBB12_13: # %cond.store114225; SSE2-NEXT: movb %cl, 6(%rdi)4226; SSE2-NEXT: testb $-128, %al4227; SSE2-NEXT: je .LBB12_164228; SSE2-NEXT: .LBB12_15: # %cond.store134229; SSE2-NEXT: movb %ch, 7(%rdi)4230; SSE2-NEXT: retq4231;4232; SSE4-LABEL: truncstore_v8i32_v8i8:4233; SSE4: # %bb.0:4234; SSE4-NEXT: pxor %xmm4, %xmm44235; SSE4-NEXT: pmovzxbd {{.*#+}} xmm5 = [255,255,255,255]4236; SSE4-NEXT: pand %xmm5, %xmm14237; SSE4-NEXT: pand %xmm5, %xmm04238; SSE4-NEXT: packusdw %xmm1, %xmm04239; SSE4-NEXT: packuswb %xmm4, %xmm04240; SSE4-NEXT: pcmpeqd %xmm4, %xmm34241; SSE4-NEXT: pcmpeqd %xmm4, %xmm24242; SSE4-NEXT: packssdw %xmm3, %xmm24243; SSE4-NEXT: packsswb %xmm2, %xmm24244; SSE4-NEXT: pmovmskb %xmm2, %eax4245; SSE4-NEXT: notl %eax4246; SSE4-NEXT: testb $1, %al4247; SSE4-NEXT: jne .LBB12_14248; SSE4-NEXT: # %bb.2: # %else4249; SSE4-NEXT: testb $2, %al4250; SSE4-NEXT: jne .LBB12_34251; SSE4-NEXT: .LBB12_4: # %else24252; SSE4-NEXT: testb $4, %al4253; SSE4-NEXT: jne .LBB12_54254; SSE4-NEXT: .LBB12_6: # %else44255; SSE4-NEXT: testb $8, %al4256; SSE4-NEXT: jne .LBB12_74257; SSE4-NEXT: .LBB12_8: # %else64258; SSE4-NEXT: testb $16, %al4259; SSE4-NEXT: jne .LBB12_94260; SSE4-NEXT: .LBB12_10: # %else84261; SSE4-NEXT: testb $32, %al4262; SSE4-NEXT: jne .LBB12_114263; SSE4-NEXT: .LBB12_12: # %else104264; SSE4-NEXT: testb $64, %al4265; SSE4-NEXT: jne .LBB12_134266; SSE4-NEXT: .LBB12_14: # %else124267; SSE4-NEXT: testb $-128, %al4268; SSE4-NEXT: jne .LBB12_154269; SSE4-NEXT: .LBB12_16: # %else144270; SSE4-NEXT: retq4271; SSE4-NEXT: .LBB12_1: # %cond.store4272; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)4273; SSE4-NEXT: testb $2, %al4274; SSE4-NEXT: je .LBB12_44275; SSE4-NEXT: .LBB12_3: # %cond.store14276; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)4277; SSE4-NEXT: testb $4, %al4278; SSE4-NEXT: je .LBB12_64279; SSE4-NEXT: .LBB12_5: # %cond.store34280; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)4281; SSE4-NEXT: testb $8, %al4282; SSE4-NEXT: je .LBB12_84283; SSE4-NEXT: .LBB12_7: # %cond.store54284; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)4285; SSE4-NEXT: testb $16, %al4286; SSE4-NEXT: je .LBB12_104287; SSE4-NEXT: .LBB12_9: # %cond.store74288; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)4289; SSE4-NEXT: testb $32, %al4290; SSE4-NEXT: je .LBB12_124291; SSE4-NEXT: .LBB12_11: # %cond.store94292; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)4293; SSE4-NEXT: testb $64, %al4294; SSE4-NEXT: je .LBB12_144295; SSE4-NEXT: .LBB12_13: # %cond.store114296; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)4297; SSE4-NEXT: testb $-128, %al4298; SSE4-NEXT: je .LBB12_164299; SSE4-NEXT: .LBB12_15: # %cond.store134300; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)4301; SSE4-NEXT: retq4302;4303; AVX1-LABEL: truncstore_v8i32_v8i8:4304; AVX1: # %bb.0:4305; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm24306; AVX1-NEXT: vmovd {{.*#+}} xmm3 = [0,4,8,12,0,0,0,0,0,0,0,0,0,0,0,0]4307; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm24308; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm04309; AVX1-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]4310; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm24311; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34312; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm24313; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm14314; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm14315; AVX1-NEXT: vmovmskps %ymm1, %eax4316; AVX1-NEXT: notl %eax4317; AVX1-NEXT: testb $1, %al4318; AVX1-NEXT: jne .LBB12_14319; AVX1-NEXT: # %bb.2: # %else4320; AVX1-NEXT: testb $2, %al4321; AVX1-NEXT: jne .LBB12_34322; AVX1-NEXT: .LBB12_4: # %else24323; AVX1-NEXT: testb $4, %al4324; AVX1-NEXT: jne .LBB12_54325; AVX1-NEXT: .LBB12_6: # %else44326; AVX1-NEXT: testb $8, %al4327; AVX1-NEXT: jne .LBB12_74328; AVX1-NEXT: .LBB12_8: # %else64329; AVX1-NEXT: testb $16, %al4330; AVX1-NEXT: jne .LBB12_94331; AVX1-NEXT: .LBB12_10: # %else84332; AVX1-NEXT: testb $32, %al4333; AVX1-NEXT: jne .LBB12_114334; AVX1-NEXT: .LBB12_12: # %else104335; AVX1-NEXT: testb $64, %al4336; AVX1-NEXT: jne .LBB12_134337; AVX1-NEXT: .LBB12_14: # %else124338; AVX1-NEXT: testb $-128, %al4339; AVX1-NEXT: jne .LBB12_154340; AVX1-NEXT: .LBB12_16: # %else144341; AVX1-NEXT: vzeroupper4342; AVX1-NEXT: retq4343; AVX1-NEXT: .LBB12_1: # %cond.store4344; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)4345; AVX1-NEXT: testb $2, %al4346; AVX1-NEXT: je .LBB12_44347; AVX1-NEXT: .LBB12_3: # %cond.store14348; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)4349; AVX1-NEXT: testb $4, %al4350; AVX1-NEXT: je .LBB12_64351; AVX1-NEXT: .LBB12_5: # %cond.store34352; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)4353; AVX1-NEXT: testb $8, %al4354; AVX1-NEXT: je .LBB12_84355; AVX1-NEXT: .LBB12_7: # %cond.store54356; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)4357; AVX1-NEXT: testb $16, %al4358; AVX1-NEXT: je .LBB12_104359; AVX1-NEXT: .LBB12_9: # %cond.store74360; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)4361; AVX1-NEXT: testb $32, %al4362; AVX1-NEXT: je .LBB12_124363; AVX1-NEXT: .LBB12_11: # %cond.store94364; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)4365; AVX1-NEXT: testb $64, %al4366; AVX1-NEXT: je .LBB12_144367; AVX1-NEXT: .LBB12_13: # %cond.store114368; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)4369; AVX1-NEXT: testb $-128, %al4370; AVX1-NEXT: je .LBB12_164371; AVX1-NEXT: .LBB12_15: # %cond.store134372; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)4373; AVX1-NEXT: vzeroupper4374; AVX1-NEXT: retq4375;4376; AVX2-LABEL: truncstore_v8i32_v8i8:4377; AVX2: # %bb.0:4378; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm24379; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm34380; AVX2-NEXT: vmovd {{.*#+}} xmm4 = [0,4,8,12,0,0,0,0,0,0,0,0,0,0,0,0]4381; AVX2-NEXT: vpshufb %xmm4, %xmm3, %xmm34382; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm04383; AVX2-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]4384; AVX2-NEXT: vpcmpeqd %ymm2, %ymm1, %ymm14385; AVX2-NEXT: vmovmskps %ymm1, %eax4386; AVX2-NEXT: notl %eax4387; AVX2-NEXT: testb $1, %al4388; AVX2-NEXT: jne .LBB12_14389; AVX2-NEXT: # %bb.2: # %else4390; AVX2-NEXT: testb $2, %al4391; AVX2-NEXT: jne .LBB12_34392; AVX2-NEXT: .LBB12_4: # %else24393; AVX2-NEXT: testb $4, %al4394; AVX2-NEXT: jne .LBB12_54395; AVX2-NEXT: .LBB12_6: # %else44396; AVX2-NEXT: testb $8, %al4397; AVX2-NEXT: jne .LBB12_74398; AVX2-NEXT: .LBB12_8: # %else64399; AVX2-NEXT: testb $16, %al4400; AVX2-NEXT: jne .LBB12_94401; AVX2-NEXT: .LBB12_10: # %else84402; AVX2-NEXT: testb $32, %al4403; AVX2-NEXT: jne .LBB12_114404; AVX2-NEXT: .LBB12_12: # %else104405; AVX2-NEXT: testb $64, %al4406; AVX2-NEXT: jne .LBB12_134407; AVX2-NEXT: .LBB12_14: # %else124408; AVX2-NEXT: testb $-128, %al4409; AVX2-NEXT: jne .LBB12_154410; AVX2-NEXT: .LBB12_16: # %else144411; AVX2-NEXT: vzeroupper4412; AVX2-NEXT: retq4413; AVX2-NEXT: .LBB12_1: # %cond.store4414; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)4415; AVX2-NEXT: testb $2, %al4416; AVX2-NEXT: je .LBB12_44417; AVX2-NEXT: .LBB12_3: # %cond.store14418; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)4419; AVX2-NEXT: testb $4, %al4420; AVX2-NEXT: je .LBB12_64421; AVX2-NEXT: .LBB12_5: # %cond.store34422; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)4423; AVX2-NEXT: testb $8, %al4424; AVX2-NEXT: je .LBB12_84425; AVX2-NEXT: .LBB12_7: # %cond.store54426; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)4427; AVX2-NEXT: testb $16, %al4428; AVX2-NEXT: je .LBB12_104429; AVX2-NEXT: .LBB12_9: # %cond.store74430; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)4431; AVX2-NEXT: testb $32, %al4432; AVX2-NEXT: je .LBB12_124433; AVX2-NEXT: .LBB12_11: # %cond.store94434; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)4435; AVX2-NEXT: testb $64, %al4436; AVX2-NEXT: je .LBB12_144437; AVX2-NEXT: .LBB12_13: # %cond.store114438; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)4439; AVX2-NEXT: testb $-128, %al4440; AVX2-NEXT: je .LBB12_164441; AVX2-NEXT: .LBB12_15: # %cond.store134442; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)4443; AVX2-NEXT: vzeroupper4444; AVX2-NEXT: retq4445;4446; AVX512F-LABEL: truncstore_v8i32_v8i8:4447; AVX512F: # %bb.0:4448; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm14449; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04450; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k04451; AVX512F-NEXT: vpmovdb %zmm0, %xmm04452; AVX512F-NEXT: kmovw %k0, %eax4453; AVX512F-NEXT: testb $1, %al4454; AVX512F-NEXT: jne .LBB12_14455; AVX512F-NEXT: # %bb.2: # %else4456; AVX512F-NEXT: testb $2, %al4457; AVX512F-NEXT: jne .LBB12_34458; AVX512F-NEXT: .LBB12_4: # %else24459; AVX512F-NEXT: testb $4, %al4460; AVX512F-NEXT: jne .LBB12_54461; AVX512F-NEXT: .LBB12_6: # %else44462; AVX512F-NEXT: testb $8, %al4463; AVX512F-NEXT: jne .LBB12_74464; AVX512F-NEXT: .LBB12_8: # %else64465; AVX512F-NEXT: testb $16, %al4466; AVX512F-NEXT: jne .LBB12_94467; AVX512F-NEXT: .LBB12_10: # %else84468; AVX512F-NEXT: testb $32, %al4469; AVX512F-NEXT: jne .LBB12_114470; AVX512F-NEXT: .LBB12_12: # %else104471; AVX512F-NEXT: testb $64, %al4472; AVX512F-NEXT: jne .LBB12_134473; AVX512F-NEXT: .LBB12_14: # %else124474; AVX512F-NEXT: testb $-128, %al4475; AVX512F-NEXT: jne .LBB12_154476; AVX512F-NEXT: .LBB12_16: # %else144477; AVX512F-NEXT: vzeroupper4478; AVX512F-NEXT: retq4479; AVX512F-NEXT: .LBB12_1: # %cond.store4480; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)4481; AVX512F-NEXT: testb $2, %al4482; AVX512F-NEXT: je .LBB12_44483; AVX512F-NEXT: .LBB12_3: # %cond.store14484; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)4485; AVX512F-NEXT: testb $4, %al4486; AVX512F-NEXT: je .LBB12_64487; AVX512F-NEXT: .LBB12_5: # %cond.store34488; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)4489; AVX512F-NEXT: testb $8, %al4490; AVX512F-NEXT: je .LBB12_84491; AVX512F-NEXT: .LBB12_7: # %cond.store54492; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)4493; AVX512F-NEXT: testb $16, %al4494; AVX512F-NEXT: je .LBB12_104495; AVX512F-NEXT: .LBB12_9: # %cond.store74496; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)4497; AVX512F-NEXT: testb $32, %al4498; AVX512F-NEXT: je .LBB12_124499; AVX512F-NEXT: .LBB12_11: # %cond.store94500; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)4501; AVX512F-NEXT: testb $64, %al4502; AVX512F-NEXT: je .LBB12_144503; AVX512F-NEXT: .LBB12_13: # %cond.store114504; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)4505; AVX512F-NEXT: testb $-128, %al4506; AVX512F-NEXT: je .LBB12_164507; AVX512F-NEXT: .LBB12_15: # %cond.store134508; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)4509; AVX512F-NEXT: vzeroupper4510; AVX512F-NEXT: retq4511;4512; AVX512FVL-LABEL: truncstore_v8i32_v8i8:4513; AVX512FVL: # %bb.0:4514; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k04515; AVX512FVL-NEXT: vpmovdb %ymm0, %xmm04516; AVX512FVL-NEXT: kmovw %k0, %eax4517; AVX512FVL-NEXT: testb $1, %al4518; AVX512FVL-NEXT: jne .LBB12_14519; AVX512FVL-NEXT: # %bb.2: # %else4520; AVX512FVL-NEXT: testb $2, %al4521; AVX512FVL-NEXT: jne .LBB12_34522; AVX512FVL-NEXT: .LBB12_4: # %else24523; AVX512FVL-NEXT: testb $4, %al4524; AVX512FVL-NEXT: jne .LBB12_54525; AVX512FVL-NEXT: .LBB12_6: # %else44526; AVX512FVL-NEXT: testb $8, %al4527; AVX512FVL-NEXT: jne .LBB12_74528; AVX512FVL-NEXT: .LBB12_8: # %else64529; AVX512FVL-NEXT: testb $16, %al4530; AVX512FVL-NEXT: jne .LBB12_94531; AVX512FVL-NEXT: .LBB12_10: # %else84532; AVX512FVL-NEXT: testb $32, %al4533; AVX512FVL-NEXT: jne .LBB12_114534; AVX512FVL-NEXT: .LBB12_12: # %else104535; AVX512FVL-NEXT: testb $64, %al4536; AVX512FVL-NEXT: jne .LBB12_134537; AVX512FVL-NEXT: .LBB12_14: # %else124538; AVX512FVL-NEXT: testb $-128, %al4539; AVX512FVL-NEXT: jne .LBB12_154540; AVX512FVL-NEXT: .LBB12_16: # %else144541; AVX512FVL-NEXT: vzeroupper4542; AVX512FVL-NEXT: retq4543; AVX512FVL-NEXT: .LBB12_1: # %cond.store4544; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)4545; AVX512FVL-NEXT: testb $2, %al4546; AVX512FVL-NEXT: je .LBB12_44547; AVX512FVL-NEXT: .LBB12_3: # %cond.store14548; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)4549; AVX512FVL-NEXT: testb $4, %al4550; AVX512FVL-NEXT: je .LBB12_64551; AVX512FVL-NEXT: .LBB12_5: # %cond.store34552; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)4553; AVX512FVL-NEXT: testb $8, %al4554; AVX512FVL-NEXT: je .LBB12_84555; AVX512FVL-NEXT: .LBB12_7: # %cond.store54556; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)4557; AVX512FVL-NEXT: testb $16, %al4558; AVX512FVL-NEXT: je .LBB12_104559; AVX512FVL-NEXT: .LBB12_9: # %cond.store74560; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)4561; AVX512FVL-NEXT: testb $32, %al4562; AVX512FVL-NEXT: je .LBB12_124563; AVX512FVL-NEXT: .LBB12_11: # %cond.store94564; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)4565; AVX512FVL-NEXT: testb $64, %al4566; AVX512FVL-NEXT: je .LBB12_144567; AVX512FVL-NEXT: .LBB12_13: # %cond.store114568; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)4569; AVX512FVL-NEXT: testb $-128, %al4570; AVX512FVL-NEXT: je .LBB12_164571; AVX512FVL-NEXT: .LBB12_15: # %cond.store134572; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)4573; AVX512FVL-NEXT: vzeroupper4574; AVX512FVL-NEXT: retq4575;4576; AVX512BW-LABEL: truncstore_v8i32_v8i8:4577; AVX512BW: # %bb.0:4578; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm14579; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04580; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k04581; AVX512BW-NEXT: kshiftlq $56, %k0, %k04582; AVX512BW-NEXT: kshiftrq $56, %k0, %k14583; AVX512BW-NEXT: vpmovdb %zmm0, %xmm04584; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}4585; AVX512BW-NEXT: vzeroupper4586; AVX512BW-NEXT: retq4587;4588; AVX512BWVL-LABEL: truncstore_v8i32_v8i8:4589; AVX512BWVL: # %bb.0:4590; AVX512BWVL-NEXT: vptestmd %ymm1, %ymm1, %k14591; AVX512BWVL-NEXT: vpmovdb %ymm0, (%rdi) {%k1}4592; AVX512BWVL-NEXT: vzeroupper4593; AVX512BWVL-NEXT: retq4594 %a = icmp ne <8 x i32> %mask, zeroinitializer4595 %b = trunc <8 x i32> %x to <8 x i8>4596 call void @llvm.masked.store.v8i8.p0(<8 x i8> %b, ptr %p, i32 1, <8 x i1> %a)4597 ret void4598}4599 4600define void @truncstore_v4i32_v4i16(<4 x i32> %x, ptr %p, <4 x i32> %mask) {4601; SSE2-LABEL: truncstore_v4i32_v4i16:4602; SSE2: # %bb.0:4603; SSE2-NEXT: pxor %xmm2, %xmm24604; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]4605; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]4606; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]4607; SSE2-NEXT: pcmpeqd %xmm1, %xmm24608; SSE2-NEXT: movmskps %xmm2, %eax4609; SSE2-NEXT: xorl $15, %eax4610; SSE2-NEXT: testb $1, %al4611; SSE2-NEXT: jne .LBB13_14612; SSE2-NEXT: # %bb.2: # %else4613; SSE2-NEXT: testb $2, %al4614; SSE2-NEXT: jne .LBB13_34615; SSE2-NEXT: .LBB13_4: # %else24616; SSE2-NEXT: testb $4, %al4617; SSE2-NEXT: jne .LBB13_54618; SSE2-NEXT: .LBB13_6: # %else44619; SSE2-NEXT: testb $8, %al4620; SSE2-NEXT: jne .LBB13_74621; SSE2-NEXT: .LBB13_8: # %else64622; SSE2-NEXT: retq4623; SSE2-NEXT: .LBB13_1: # %cond.store4624; SSE2-NEXT: movd %xmm0, %ecx4625; SSE2-NEXT: movw %cx, (%rdi)4626; SSE2-NEXT: testb $2, %al4627; SSE2-NEXT: je .LBB13_44628; SSE2-NEXT: .LBB13_3: # %cond.store14629; SSE2-NEXT: pextrw $1, %xmm0, %ecx4630; SSE2-NEXT: movw %cx, 2(%rdi)4631; SSE2-NEXT: testb $4, %al4632; SSE2-NEXT: je .LBB13_64633; SSE2-NEXT: .LBB13_5: # %cond.store34634; SSE2-NEXT: pextrw $2, %xmm0, %ecx4635; SSE2-NEXT: movw %cx, 4(%rdi)4636; SSE2-NEXT: testb $8, %al4637; SSE2-NEXT: je .LBB13_84638; SSE2-NEXT: .LBB13_7: # %cond.store54639; SSE2-NEXT: pextrw $3, %xmm0, %eax4640; SSE2-NEXT: movw %ax, 6(%rdi)4641; SSE2-NEXT: retq4642;4643; SSE4-LABEL: truncstore_v4i32_v4i16:4644; SSE4: # %bb.0:4645; SSE4-NEXT: pxor %xmm2, %xmm24646; SSE4-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]4647; SSE4-NEXT: pcmpeqd %xmm1, %xmm24648; SSE4-NEXT: movmskps %xmm2, %eax4649; SSE4-NEXT: xorl $15, %eax4650; SSE4-NEXT: testb $1, %al4651; SSE4-NEXT: jne .LBB13_14652; SSE4-NEXT: # %bb.2: # %else4653; SSE4-NEXT: testb $2, %al4654; SSE4-NEXT: jne .LBB13_34655; SSE4-NEXT: .LBB13_4: # %else24656; SSE4-NEXT: testb $4, %al4657; SSE4-NEXT: jne .LBB13_54658; SSE4-NEXT: .LBB13_6: # %else44659; SSE4-NEXT: testb $8, %al4660; SSE4-NEXT: jne .LBB13_74661; SSE4-NEXT: .LBB13_8: # %else64662; SSE4-NEXT: retq4663; SSE4-NEXT: .LBB13_1: # %cond.store4664; SSE4-NEXT: pextrw $0, %xmm0, (%rdi)4665; SSE4-NEXT: testb $2, %al4666; SSE4-NEXT: je .LBB13_44667; SSE4-NEXT: .LBB13_3: # %cond.store14668; SSE4-NEXT: pextrw $1, %xmm0, 2(%rdi)4669; SSE4-NEXT: testb $4, %al4670; SSE4-NEXT: je .LBB13_64671; SSE4-NEXT: .LBB13_5: # %cond.store34672; SSE4-NEXT: pextrw $2, %xmm0, 4(%rdi)4673; SSE4-NEXT: testb $8, %al4674; SSE4-NEXT: je .LBB13_84675; SSE4-NEXT: .LBB13_7: # %cond.store54676; SSE4-NEXT: pextrw $3, %xmm0, 6(%rdi)4677; SSE4-NEXT: retq4678;4679; AVX-LABEL: truncstore_v4i32_v4i16:4680; AVX: # %bb.0:4681; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm24682; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]4683; AVX-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm14684; AVX-NEXT: vmovmskps %xmm1, %eax4685; AVX-NEXT: xorl $15, %eax4686; AVX-NEXT: testb $1, %al4687; AVX-NEXT: jne .LBB13_14688; AVX-NEXT: # %bb.2: # %else4689; AVX-NEXT: testb $2, %al4690; AVX-NEXT: jne .LBB13_34691; AVX-NEXT: .LBB13_4: # %else24692; AVX-NEXT: testb $4, %al4693; AVX-NEXT: jne .LBB13_54694; AVX-NEXT: .LBB13_6: # %else44695; AVX-NEXT: testb $8, %al4696; AVX-NEXT: jne .LBB13_74697; AVX-NEXT: .LBB13_8: # %else64698; AVX-NEXT: retq4699; AVX-NEXT: .LBB13_1: # %cond.store4700; AVX-NEXT: vpextrw $0, %xmm0, (%rdi)4701; AVX-NEXT: testb $2, %al4702; AVX-NEXT: je .LBB13_44703; AVX-NEXT: .LBB13_3: # %cond.store14704; AVX-NEXT: vpextrw $1, %xmm0, 2(%rdi)4705; AVX-NEXT: testb $4, %al4706; AVX-NEXT: je .LBB13_64707; AVX-NEXT: .LBB13_5: # %cond.store34708; AVX-NEXT: vpextrw $2, %xmm0, 4(%rdi)4709; AVX-NEXT: testb $8, %al4710; AVX-NEXT: je .LBB13_84711; AVX-NEXT: .LBB13_7: # %cond.store54712; AVX-NEXT: vpextrw $3, %xmm0, 6(%rdi)4713; AVX-NEXT: retq4714;4715; AVX512F-LABEL: truncstore_v4i32_v4i16:4716; AVX512F: # %bb.0:4717; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm14718; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k04719; AVX512F-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]4720; AVX512F-NEXT: kmovw %k0, %eax4721; AVX512F-NEXT: testb $1, %al4722; AVX512F-NEXT: jne .LBB13_14723; AVX512F-NEXT: # %bb.2: # %else4724; AVX512F-NEXT: testb $2, %al4725; AVX512F-NEXT: jne .LBB13_34726; AVX512F-NEXT: .LBB13_4: # %else24727; AVX512F-NEXT: testb $4, %al4728; AVX512F-NEXT: jne .LBB13_54729; AVX512F-NEXT: .LBB13_6: # %else44730; AVX512F-NEXT: testb $8, %al4731; AVX512F-NEXT: jne .LBB13_74732; AVX512F-NEXT: .LBB13_8: # %else64733; AVX512F-NEXT: vzeroupper4734; AVX512F-NEXT: retq4735; AVX512F-NEXT: .LBB13_1: # %cond.store4736; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi)4737; AVX512F-NEXT: testb $2, %al4738; AVX512F-NEXT: je .LBB13_44739; AVX512F-NEXT: .LBB13_3: # %cond.store14740; AVX512F-NEXT: vpextrw $1, %xmm0, 2(%rdi)4741; AVX512F-NEXT: testb $4, %al4742; AVX512F-NEXT: je .LBB13_64743; AVX512F-NEXT: .LBB13_5: # %cond.store34744; AVX512F-NEXT: vpextrw $2, %xmm0, 4(%rdi)4745; AVX512F-NEXT: testb $8, %al4746; AVX512F-NEXT: je .LBB13_84747; AVX512F-NEXT: .LBB13_7: # %cond.store54748; AVX512F-NEXT: vpextrw $3, %xmm0, 6(%rdi)4749; AVX512F-NEXT: vzeroupper4750; AVX512F-NEXT: retq4751;4752; AVX512FVL-LABEL: truncstore_v4i32_v4i16:4753; AVX512FVL: # %bb.0:4754; AVX512FVL-NEXT: vptestmd %xmm1, %xmm1, %k04755; AVX512FVL-NEXT: vpmovdw %xmm0, %xmm04756; AVX512FVL-NEXT: kmovw %k0, %eax4757; AVX512FVL-NEXT: testb $1, %al4758; AVX512FVL-NEXT: jne .LBB13_14759; AVX512FVL-NEXT: # %bb.2: # %else4760; AVX512FVL-NEXT: testb $2, %al4761; AVX512FVL-NEXT: jne .LBB13_34762; AVX512FVL-NEXT: .LBB13_4: # %else24763; AVX512FVL-NEXT: testb $4, %al4764; AVX512FVL-NEXT: jne .LBB13_54765; AVX512FVL-NEXT: .LBB13_6: # %else44766; AVX512FVL-NEXT: testb $8, %al4767; AVX512FVL-NEXT: jne .LBB13_74768; AVX512FVL-NEXT: .LBB13_8: # %else64769; AVX512FVL-NEXT: retq4770; AVX512FVL-NEXT: .LBB13_1: # %cond.store4771; AVX512FVL-NEXT: vpextrw $0, %xmm0, (%rdi)4772; AVX512FVL-NEXT: testb $2, %al4773; AVX512FVL-NEXT: je .LBB13_44774; AVX512FVL-NEXT: .LBB13_3: # %cond.store14775; AVX512FVL-NEXT: vpextrw $1, %xmm0, 2(%rdi)4776; AVX512FVL-NEXT: testb $4, %al4777; AVX512FVL-NEXT: je .LBB13_64778; AVX512FVL-NEXT: .LBB13_5: # %cond.store34779; AVX512FVL-NEXT: vpextrw $2, %xmm0, 4(%rdi)4780; AVX512FVL-NEXT: testb $8, %al4781; AVX512FVL-NEXT: je .LBB13_84782; AVX512FVL-NEXT: .LBB13_7: # %cond.store54783; AVX512FVL-NEXT: vpextrw $3, %xmm0, 6(%rdi)4784; AVX512FVL-NEXT: retq4785;4786; AVX512BW-LABEL: truncstore_v4i32_v4i16:4787; AVX512BW: # %bb.0:4788; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm14789; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k04790; AVX512BW-NEXT: kshiftld $28, %k0, %k04791; AVX512BW-NEXT: kshiftrd $28, %k0, %k14792; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]4793; AVX512BW-NEXT: vmovdqu16 %zmm0, (%rdi) {%k1}4794; AVX512BW-NEXT: vzeroupper4795; AVX512BW-NEXT: retq4796;4797; AVX512BWVL-LABEL: truncstore_v4i32_v4i16:4798; AVX512BWVL: # %bb.0:4799; AVX512BWVL-NEXT: vptestmd %xmm1, %xmm1, %k14800; AVX512BWVL-NEXT: vpmovdw %xmm0, (%rdi) {%k1}4801; AVX512BWVL-NEXT: retq4802 %a = icmp ne <4 x i32> %mask, zeroinitializer4803 %b = trunc <4 x i32> %x to <4 x i16>4804 call void @llvm.masked.store.v4i16.p0(<4 x i16> %b, ptr %p, i32 1, <4 x i1> %a)4805 ret void4806}4807 4808define void @truncstore_v4i32_v4i8(<4 x i32> %x, ptr %p, <4 x i32> %mask) {4809; SSE2-LABEL: truncstore_v4i32_v4i8:4810; SSE2: # %bb.0:4811; SSE2-NEXT: pxor %xmm2, %xmm24812; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm04813; SSE2-NEXT: packuswb %xmm0, %xmm04814; SSE2-NEXT: packuswb %xmm0, %xmm04815; SSE2-NEXT: pcmpeqd %xmm1, %xmm24816; SSE2-NEXT: movmskps %xmm2, %ecx4817; SSE2-NEXT: xorl $15, %ecx4818; SSE2-NEXT: testb $1, %cl4819; SSE2-NEXT: movd %xmm0, %eax4820; SSE2-NEXT: jne .LBB14_14821; SSE2-NEXT: # %bb.2: # %else4822; SSE2-NEXT: testb $2, %cl4823; SSE2-NEXT: jne .LBB14_34824; SSE2-NEXT: .LBB14_4: # %else24825; SSE2-NEXT: testb $4, %cl4826; SSE2-NEXT: jne .LBB14_54827; SSE2-NEXT: .LBB14_6: # %else44828; SSE2-NEXT: testb $8, %cl4829; SSE2-NEXT: jne .LBB14_74830; SSE2-NEXT: .LBB14_8: # %else64831; SSE2-NEXT: retq4832; SSE2-NEXT: .LBB14_1: # %cond.store4833; SSE2-NEXT: movb %al, (%rdi)4834; SSE2-NEXT: testb $2, %cl4835; SSE2-NEXT: je .LBB14_44836; SSE2-NEXT: .LBB14_3: # %cond.store14837; SSE2-NEXT: movb %ah, 1(%rdi)4838; SSE2-NEXT: testb $4, %cl4839; SSE2-NEXT: je .LBB14_64840; SSE2-NEXT: .LBB14_5: # %cond.store34841; SSE2-NEXT: movl %eax, %edx4842; SSE2-NEXT: shrl $16, %edx4843; SSE2-NEXT: movb %dl, 2(%rdi)4844; SSE2-NEXT: testb $8, %cl4845; SSE2-NEXT: je .LBB14_84846; SSE2-NEXT: .LBB14_7: # %cond.store54847; SSE2-NEXT: shrl $24, %eax4848; SSE2-NEXT: movb %al, 3(%rdi)4849; SSE2-NEXT: retq4850;4851; SSE4-LABEL: truncstore_v4i32_v4i8:4852; SSE4: # %bb.0:4853; SSE4-NEXT: pxor %xmm2, %xmm24854; SSE4-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]4855; SSE4-NEXT: pcmpeqd %xmm1, %xmm24856; SSE4-NEXT: movmskps %xmm2, %eax4857; SSE4-NEXT: xorl $15, %eax4858; SSE4-NEXT: testb $1, %al4859; SSE4-NEXT: jne .LBB14_14860; SSE4-NEXT: # %bb.2: # %else4861; SSE4-NEXT: testb $2, %al4862; SSE4-NEXT: jne .LBB14_34863; SSE4-NEXT: .LBB14_4: # %else24864; SSE4-NEXT: testb $4, %al4865; SSE4-NEXT: jne .LBB14_54866; SSE4-NEXT: .LBB14_6: # %else44867; SSE4-NEXT: testb $8, %al4868; SSE4-NEXT: jne .LBB14_74869; SSE4-NEXT: .LBB14_8: # %else64870; SSE4-NEXT: retq4871; SSE4-NEXT: .LBB14_1: # %cond.store4872; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)4873; SSE4-NEXT: testb $2, %al4874; SSE4-NEXT: je .LBB14_44875; SSE4-NEXT: .LBB14_3: # %cond.store14876; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)4877; SSE4-NEXT: testb $4, %al4878; SSE4-NEXT: je .LBB14_64879; SSE4-NEXT: .LBB14_5: # %cond.store34880; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)4881; SSE4-NEXT: testb $8, %al4882; SSE4-NEXT: je .LBB14_84883; SSE4-NEXT: .LBB14_7: # %cond.store54884; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)4885; SSE4-NEXT: retq4886;4887; AVX-LABEL: truncstore_v4i32_v4i8:4888; AVX: # %bb.0:4889; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm24890; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]4891; AVX-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm14892; AVX-NEXT: vmovmskps %xmm1, %eax4893; AVX-NEXT: xorl $15, %eax4894; AVX-NEXT: testb $1, %al4895; AVX-NEXT: jne .LBB14_14896; AVX-NEXT: # %bb.2: # %else4897; AVX-NEXT: testb $2, %al4898; AVX-NEXT: jne .LBB14_34899; AVX-NEXT: .LBB14_4: # %else24900; AVX-NEXT: testb $4, %al4901; AVX-NEXT: jne .LBB14_54902; AVX-NEXT: .LBB14_6: # %else44903; AVX-NEXT: testb $8, %al4904; AVX-NEXT: jne .LBB14_74905; AVX-NEXT: .LBB14_8: # %else64906; AVX-NEXT: retq4907; AVX-NEXT: .LBB14_1: # %cond.store4908; AVX-NEXT: vpextrb $0, %xmm0, (%rdi)4909; AVX-NEXT: testb $2, %al4910; AVX-NEXT: je .LBB14_44911; AVX-NEXT: .LBB14_3: # %cond.store14912; AVX-NEXT: vpextrb $1, %xmm0, 1(%rdi)4913; AVX-NEXT: testb $4, %al4914; AVX-NEXT: je .LBB14_64915; AVX-NEXT: .LBB14_5: # %cond.store34916; AVX-NEXT: vpextrb $2, %xmm0, 2(%rdi)4917; AVX-NEXT: testb $8, %al4918; AVX-NEXT: je .LBB14_84919; AVX-NEXT: .LBB14_7: # %cond.store54920; AVX-NEXT: vpextrb $3, %xmm0, 3(%rdi)4921; AVX-NEXT: retq4922;4923; AVX512F-LABEL: truncstore_v4i32_v4i8:4924; AVX512F: # %bb.0:4925; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm14926; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k04927; AVX512F-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]4928; AVX512F-NEXT: kmovw %k0, %eax4929; AVX512F-NEXT: testb $1, %al4930; AVX512F-NEXT: jne .LBB14_14931; AVX512F-NEXT: # %bb.2: # %else4932; AVX512F-NEXT: testb $2, %al4933; AVX512F-NEXT: jne .LBB14_34934; AVX512F-NEXT: .LBB14_4: # %else24935; AVX512F-NEXT: testb $4, %al4936; AVX512F-NEXT: jne .LBB14_54937; AVX512F-NEXT: .LBB14_6: # %else44938; AVX512F-NEXT: testb $8, %al4939; AVX512F-NEXT: jne .LBB14_74940; AVX512F-NEXT: .LBB14_8: # %else64941; AVX512F-NEXT: vzeroupper4942; AVX512F-NEXT: retq4943; AVX512F-NEXT: .LBB14_1: # %cond.store4944; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)4945; AVX512F-NEXT: testb $2, %al4946; AVX512F-NEXT: je .LBB14_44947; AVX512F-NEXT: .LBB14_3: # %cond.store14948; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)4949; AVX512F-NEXT: testb $4, %al4950; AVX512F-NEXT: je .LBB14_64951; AVX512F-NEXT: .LBB14_5: # %cond.store34952; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)4953; AVX512F-NEXT: testb $8, %al4954; AVX512F-NEXT: je .LBB14_84955; AVX512F-NEXT: .LBB14_7: # %cond.store54956; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)4957; AVX512F-NEXT: vzeroupper4958; AVX512F-NEXT: retq4959;4960; AVX512FVL-LABEL: truncstore_v4i32_v4i8:4961; AVX512FVL: # %bb.0:4962; AVX512FVL-NEXT: vptestmd %xmm1, %xmm1, %k04963; AVX512FVL-NEXT: vpmovdb %xmm0, %xmm04964; AVX512FVL-NEXT: kmovw %k0, %eax4965; AVX512FVL-NEXT: testb $1, %al4966; AVX512FVL-NEXT: jne .LBB14_14967; AVX512FVL-NEXT: # %bb.2: # %else4968; AVX512FVL-NEXT: testb $2, %al4969; AVX512FVL-NEXT: jne .LBB14_34970; AVX512FVL-NEXT: .LBB14_4: # %else24971; AVX512FVL-NEXT: testb $4, %al4972; AVX512FVL-NEXT: jne .LBB14_54973; AVX512FVL-NEXT: .LBB14_6: # %else44974; AVX512FVL-NEXT: testb $8, %al4975; AVX512FVL-NEXT: jne .LBB14_74976; AVX512FVL-NEXT: .LBB14_8: # %else64977; AVX512FVL-NEXT: retq4978; AVX512FVL-NEXT: .LBB14_1: # %cond.store4979; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)4980; AVX512FVL-NEXT: testb $2, %al4981; AVX512FVL-NEXT: je .LBB14_44982; AVX512FVL-NEXT: .LBB14_3: # %cond.store14983; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)4984; AVX512FVL-NEXT: testb $4, %al4985; AVX512FVL-NEXT: je .LBB14_64986; AVX512FVL-NEXT: .LBB14_5: # %cond.store34987; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)4988; AVX512FVL-NEXT: testb $8, %al4989; AVX512FVL-NEXT: je .LBB14_84990; AVX512FVL-NEXT: .LBB14_7: # %cond.store54991; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)4992; AVX512FVL-NEXT: retq4993;4994; AVX512BW-LABEL: truncstore_v4i32_v4i8:4995; AVX512BW: # %bb.0:4996; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm14997; AVX512BW-NEXT: vptestmd %zmm1, %zmm1, %k04998; AVX512BW-NEXT: kshiftlq $60, %k0, %k04999; AVX512BW-NEXT: kshiftrq $60, %k0, %k15000; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]5001; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}5002; AVX512BW-NEXT: vzeroupper5003; AVX512BW-NEXT: retq5004;5005; AVX512BWVL-LABEL: truncstore_v4i32_v4i8:5006; AVX512BWVL: # %bb.0:5007; AVX512BWVL-NEXT: vptestmd %xmm1, %xmm1, %k15008; AVX512BWVL-NEXT: vpmovdb %xmm0, (%rdi) {%k1}5009; AVX512BWVL-NEXT: retq5010 %a = icmp ne <4 x i32> %mask, zeroinitializer5011 %b = trunc <4 x i32> %x to <4 x i8>5012 call void @llvm.masked.store.v4i8.p0(<4 x i8> %b, ptr %p, i32 1, <4 x i1> %a)5013 ret void5014}5015 5016define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {5017; SSE2-LABEL: truncstore_v32i16_v32i8:5018; SSE2: # %bb.0:5019; SSE2-NEXT: pxor %xmm7, %xmm75020; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]5021; SSE2-NEXT: pand %xmm6, %xmm15022; SSE2-NEXT: pand %xmm6, %xmm05023; SSE2-NEXT: packuswb %xmm1, %xmm05024; SSE2-NEXT: pcmpeqb %xmm7, %xmm45025; SSE2-NEXT: pmovmskb %xmm4, %ecx5026; SSE2-NEXT: xorl $65535, %ecx # imm = 0xFFFF5027; SSE2-NEXT: pcmpeqb %xmm7, %xmm55028; SSE2-NEXT: pmovmskb %xmm5, %eax5029; SSE2-NEXT: notl %eax5030; SSE2-NEXT: shll $16, %eax5031; SSE2-NEXT: orl %ecx, %eax5032; SSE2-NEXT: testb $1, %al5033; SSE2-NEXT: movd %xmm0, %ecx5034; SSE2-NEXT: jne .LBB15_15035; SSE2-NEXT: # %bb.2: # %else5036; SSE2-NEXT: testb $2, %al5037; SSE2-NEXT: jne .LBB15_35038; SSE2-NEXT: .LBB15_4: # %else25039; SSE2-NEXT: testb $4, %al5040; SSE2-NEXT: jne .LBB15_55041; SSE2-NEXT: .LBB15_6: # %else45042; SSE2-NEXT: testb $8, %al5043; SSE2-NEXT: je .LBB15_85044; SSE2-NEXT: .LBB15_7: # %cond.store55045; SSE2-NEXT: shrl $24, %ecx5046; SSE2-NEXT: movb %cl, 3(%rdi)5047; SSE2-NEXT: .LBB15_8: # %else65048; SSE2-NEXT: testb $16, %al5049; SSE2-NEXT: pextrw $2, %xmm0, %ecx5050; SSE2-NEXT: je .LBB15_105051; SSE2-NEXT: # %bb.9: # %cond.store75052; SSE2-NEXT: movb %cl, 4(%rdi)5053; SSE2-NEXT: .LBB15_10: # %else85054; SSE2-NEXT: testb $32, %al5055; SSE2-NEXT: je .LBB15_125056; SSE2-NEXT: # %bb.11: # %cond.store95057; SSE2-NEXT: movb %ch, 5(%rdi)5058; SSE2-NEXT: .LBB15_12: # %else105059; SSE2-NEXT: testb $64, %al5060; SSE2-NEXT: pextrw $3, %xmm0, %ecx5061; SSE2-NEXT: je .LBB15_145062; SSE2-NEXT: # %bb.13: # %cond.store115063; SSE2-NEXT: movb %cl, 6(%rdi)5064; SSE2-NEXT: .LBB15_14: # %else125065; SSE2-NEXT: testb %al, %al5066; SSE2-NEXT: jns .LBB15_165067; SSE2-NEXT: # %bb.15: # %cond.store135068; SSE2-NEXT: movb %ch, 7(%rdi)5069; SSE2-NEXT: .LBB15_16: # %else145070; SSE2-NEXT: testl $256, %eax # imm = 0x1005071; SSE2-NEXT: pextrw $4, %xmm0, %ecx5072; SSE2-NEXT: je .LBB15_185073; SSE2-NEXT: # %bb.17: # %cond.store155074; SSE2-NEXT: movb %cl, 8(%rdi)5075; SSE2-NEXT: .LBB15_18: # %else165076; SSE2-NEXT: testl $512, %eax # imm = 0x2005077; SSE2-NEXT: je .LBB15_205078; SSE2-NEXT: # %bb.19: # %cond.store175079; SSE2-NEXT: movb %ch, 9(%rdi)5080; SSE2-NEXT: .LBB15_20: # %else185081; SSE2-NEXT: testl $1024, %eax # imm = 0x4005082; SSE2-NEXT: pextrw $5, %xmm0, %ecx5083; SSE2-NEXT: je .LBB15_225084; SSE2-NEXT: # %bb.21: # %cond.store195085; SSE2-NEXT: movb %cl, 10(%rdi)5086; SSE2-NEXT: .LBB15_22: # %else205087; SSE2-NEXT: testl $2048, %eax # imm = 0x8005088; SSE2-NEXT: je .LBB15_245089; SSE2-NEXT: # %bb.23: # %cond.store215090; SSE2-NEXT: movb %ch, 11(%rdi)5091; SSE2-NEXT: .LBB15_24: # %else225092; SSE2-NEXT: testl $4096, %eax # imm = 0x10005093; SSE2-NEXT: pextrw $6, %xmm0, %ecx5094; SSE2-NEXT: je .LBB15_265095; SSE2-NEXT: # %bb.25: # %cond.store235096; SSE2-NEXT: movb %cl, 12(%rdi)5097; SSE2-NEXT: .LBB15_26: # %else245098; SSE2-NEXT: testl $8192, %eax # imm = 0x20005099; SSE2-NEXT: je .LBB15_285100; SSE2-NEXT: # %bb.27: # %cond.store255101; SSE2-NEXT: movb %ch, 13(%rdi)5102; SSE2-NEXT: .LBB15_28: # %else265103; SSE2-NEXT: pand %xmm6, %xmm35104; SSE2-NEXT: pand %xmm6, %xmm25105; SSE2-NEXT: testl $16384, %eax # imm = 0x40005106; SSE2-NEXT: pextrw $7, %xmm0, %ecx5107; SSE2-NEXT: je .LBB15_305108; SSE2-NEXT: # %bb.29: # %cond.store275109; SSE2-NEXT: movb %cl, 14(%rdi)5110; SSE2-NEXT: .LBB15_30: # %else285111; SSE2-NEXT: packuswb %xmm3, %xmm25112; SSE2-NEXT: testw %ax, %ax5113; SSE2-NEXT: jns .LBB15_325114; SSE2-NEXT: # %bb.31: # %cond.store295115; SSE2-NEXT: movb %ch, 15(%rdi)5116; SSE2-NEXT: .LBB15_32: # %else305117; SSE2-NEXT: testl $65536, %eax # imm = 0x100005118; SSE2-NEXT: movd %xmm2, %ecx5119; SSE2-NEXT: jne .LBB15_335120; SSE2-NEXT: # %bb.34: # %else325121; SSE2-NEXT: testl $131072, %eax # imm = 0x200005122; SSE2-NEXT: jne .LBB15_355123; SSE2-NEXT: .LBB15_36: # %else345124; SSE2-NEXT: testl $262144, %eax # imm = 0x400005125; SSE2-NEXT: jne .LBB15_375126; SSE2-NEXT: .LBB15_38: # %else365127; SSE2-NEXT: testl $524288, %eax # imm = 0x800005128; SSE2-NEXT: je .LBB15_405129; SSE2-NEXT: .LBB15_39: # %cond.store375130; SSE2-NEXT: shrl $24, %ecx5131; SSE2-NEXT: movb %cl, 19(%rdi)5132; SSE2-NEXT: .LBB15_40: # %else385133; SSE2-NEXT: testl $1048576, %eax # imm = 0x1000005134; SSE2-NEXT: pextrw $2, %xmm2, %ecx5135; SSE2-NEXT: je .LBB15_425136; SSE2-NEXT: # %bb.41: # %cond.store395137; SSE2-NEXT: movb %cl, 20(%rdi)5138; SSE2-NEXT: .LBB15_42: # %else405139; SSE2-NEXT: testl $2097152, %eax # imm = 0x2000005140; SSE2-NEXT: je .LBB15_445141; SSE2-NEXT: # %bb.43: # %cond.store415142; SSE2-NEXT: movb %ch, 21(%rdi)5143; SSE2-NEXT: .LBB15_44: # %else425144; SSE2-NEXT: testl $4194304, %eax # imm = 0x4000005145; SSE2-NEXT: pextrw $3, %xmm2, %ecx5146; SSE2-NEXT: je .LBB15_465147; SSE2-NEXT: # %bb.45: # %cond.store435148; SSE2-NEXT: movb %cl, 22(%rdi)5149; SSE2-NEXT: .LBB15_46: # %else445150; SSE2-NEXT: testl $8388608, %eax # imm = 0x8000005151; SSE2-NEXT: je .LBB15_485152; SSE2-NEXT: # %bb.47: # %cond.store455153; SSE2-NEXT: movb %ch, 23(%rdi)5154; SSE2-NEXT: .LBB15_48: # %else465155; SSE2-NEXT: testl $16777216, %eax # imm = 0x10000005156; SSE2-NEXT: pextrw $4, %xmm2, %ecx5157; SSE2-NEXT: je .LBB15_505158; SSE2-NEXT: # %bb.49: # %cond.store475159; SSE2-NEXT: movb %cl, 24(%rdi)5160; SSE2-NEXT: .LBB15_50: # %else485161; SSE2-NEXT: testl $33554432, %eax # imm = 0x20000005162; SSE2-NEXT: je .LBB15_525163; SSE2-NEXT: # %bb.51: # %cond.store495164; SSE2-NEXT: movb %ch, 25(%rdi)5165; SSE2-NEXT: .LBB15_52: # %else505166; SSE2-NEXT: testl $67108864, %eax # imm = 0x40000005167; SSE2-NEXT: pextrw $5, %xmm2, %ecx5168; SSE2-NEXT: je .LBB15_545169; SSE2-NEXT: # %bb.53: # %cond.store515170; SSE2-NEXT: movb %cl, 26(%rdi)5171; SSE2-NEXT: .LBB15_54: # %else525172; SSE2-NEXT: testl $134217728, %eax # imm = 0x80000005173; SSE2-NEXT: je .LBB15_565174; SSE2-NEXT: # %bb.55: # %cond.store535175; SSE2-NEXT: movb %ch, 27(%rdi)5176; SSE2-NEXT: .LBB15_56: # %else545177; SSE2-NEXT: testl $268435456, %eax # imm = 0x100000005178; SSE2-NEXT: pextrw $6, %xmm2, %ecx5179; SSE2-NEXT: je .LBB15_585180; SSE2-NEXT: # %bb.57: # %cond.store555181; SSE2-NEXT: movb %cl, 28(%rdi)5182; SSE2-NEXT: .LBB15_58: # %else565183; SSE2-NEXT: testl $536870912, %eax # imm = 0x200000005184; SSE2-NEXT: je .LBB15_605185; SSE2-NEXT: # %bb.59: # %cond.store575186; SSE2-NEXT: movb %ch, 29(%rdi)5187; SSE2-NEXT: .LBB15_60: # %else585188; SSE2-NEXT: testl $1073741824, %eax # imm = 0x400000005189; SSE2-NEXT: pextrw $7, %xmm2, %ecx5190; SSE2-NEXT: jne .LBB15_615191; SSE2-NEXT: # %bb.62: # %else605192; SSE2-NEXT: testl $-2147483648, %eax # imm = 0x800000005193; SSE2-NEXT: jne .LBB15_635194; SSE2-NEXT: .LBB15_64: # %else625195; SSE2-NEXT: retq5196; SSE2-NEXT: .LBB15_1: # %cond.store5197; SSE2-NEXT: movb %cl, (%rdi)5198; SSE2-NEXT: testb $2, %al5199; SSE2-NEXT: je .LBB15_45200; SSE2-NEXT: .LBB15_3: # %cond.store15201; SSE2-NEXT: movb %ch, 1(%rdi)5202; SSE2-NEXT: testb $4, %al5203; SSE2-NEXT: je .LBB15_65204; SSE2-NEXT: .LBB15_5: # %cond.store35205; SSE2-NEXT: movl %ecx, %edx5206; SSE2-NEXT: shrl $16, %edx5207; SSE2-NEXT: movb %dl, 2(%rdi)5208; SSE2-NEXT: testb $8, %al5209; SSE2-NEXT: jne .LBB15_75210; SSE2-NEXT: jmp .LBB15_85211; SSE2-NEXT: .LBB15_33: # %cond.store315212; SSE2-NEXT: movb %cl, 16(%rdi)5213; SSE2-NEXT: testl $131072, %eax # imm = 0x200005214; SSE2-NEXT: je .LBB15_365215; SSE2-NEXT: .LBB15_35: # %cond.store335216; SSE2-NEXT: movb %ch, 17(%rdi)5217; SSE2-NEXT: testl $262144, %eax # imm = 0x400005218; SSE2-NEXT: je .LBB15_385219; SSE2-NEXT: .LBB15_37: # %cond.store355220; SSE2-NEXT: movl %ecx, %edx5221; SSE2-NEXT: shrl $16, %edx5222; SSE2-NEXT: movb %dl, 18(%rdi)5223; SSE2-NEXT: testl $524288, %eax # imm = 0x800005224; SSE2-NEXT: jne .LBB15_395225; SSE2-NEXT: jmp .LBB15_405226; SSE2-NEXT: .LBB15_61: # %cond.store595227; SSE2-NEXT: movb %cl, 30(%rdi)5228; SSE2-NEXT: testl $-2147483648, %eax # imm = 0x800000005229; SSE2-NEXT: je .LBB15_645230; SSE2-NEXT: .LBB15_63: # %cond.store615231; SSE2-NEXT: movb %ch, 31(%rdi)5232; SSE2-NEXT: retq5233;5234; SSE4-LABEL: truncstore_v32i16_v32i8:5235; SSE4: # %bb.0:5236; SSE4-NEXT: pxor %xmm7, %xmm75237; SSE4-NEXT: pmovzxbw {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255]5238; SSE4-NEXT: pand %xmm6, %xmm15239; SSE4-NEXT: pand %xmm6, %xmm05240; SSE4-NEXT: packuswb %xmm1, %xmm05241; SSE4-NEXT: pcmpeqb %xmm7, %xmm45242; SSE4-NEXT: pmovmskb %xmm4, %ecx5243; SSE4-NEXT: xorl $65535, %ecx # imm = 0xFFFF5244; SSE4-NEXT: pcmpeqb %xmm7, %xmm55245; SSE4-NEXT: pmovmskb %xmm5, %eax5246; SSE4-NEXT: notl %eax5247; SSE4-NEXT: shll $16, %eax5248; SSE4-NEXT: orl %ecx, %eax5249; SSE4-NEXT: testb $1, %al5250; SSE4-NEXT: jne .LBB15_15251; SSE4-NEXT: # %bb.2: # %else5252; SSE4-NEXT: testb $2, %al5253; SSE4-NEXT: jne .LBB15_35254; SSE4-NEXT: .LBB15_4: # %else25255; SSE4-NEXT: testb $4, %al5256; SSE4-NEXT: jne .LBB15_55257; SSE4-NEXT: .LBB15_6: # %else45258; SSE4-NEXT: testb $8, %al5259; SSE4-NEXT: jne .LBB15_75260; SSE4-NEXT: .LBB15_8: # %else65261; SSE4-NEXT: testb $16, %al5262; SSE4-NEXT: jne .LBB15_95263; SSE4-NEXT: .LBB15_10: # %else85264; SSE4-NEXT: testb $32, %al5265; SSE4-NEXT: jne .LBB15_115266; SSE4-NEXT: .LBB15_12: # %else105267; SSE4-NEXT: testb $64, %al5268; SSE4-NEXT: jne .LBB15_135269; SSE4-NEXT: .LBB15_14: # %else125270; SSE4-NEXT: testb %al, %al5271; SSE4-NEXT: js .LBB15_155272; SSE4-NEXT: .LBB15_16: # %else145273; SSE4-NEXT: testl $256, %eax # imm = 0x1005274; SSE4-NEXT: jne .LBB15_175275; SSE4-NEXT: .LBB15_18: # %else165276; SSE4-NEXT: testl $512, %eax # imm = 0x2005277; SSE4-NEXT: jne .LBB15_195278; SSE4-NEXT: .LBB15_20: # %else185279; SSE4-NEXT: testl $1024, %eax # imm = 0x4005280; SSE4-NEXT: jne .LBB15_215281; SSE4-NEXT: .LBB15_22: # %else205282; SSE4-NEXT: testl $2048, %eax # imm = 0x8005283; SSE4-NEXT: jne .LBB15_235284; SSE4-NEXT: .LBB15_24: # %else225285; SSE4-NEXT: testl $4096, %eax # imm = 0x10005286; SSE4-NEXT: jne .LBB15_255287; SSE4-NEXT: .LBB15_26: # %else245288; SSE4-NEXT: testl $8192, %eax # imm = 0x20005289; SSE4-NEXT: jne .LBB15_275290; SSE4-NEXT: .LBB15_28: # %else265291; SSE4-NEXT: testl $16384, %eax # imm = 0x40005292; SSE4-NEXT: je .LBB15_305293; SSE4-NEXT: .LBB15_29: # %cond.store275294; SSE4-NEXT: pextrb $14, %xmm0, 14(%rdi)5295; SSE4-NEXT: .LBB15_30: # %else285296; SSE4-NEXT: pand %xmm6, %xmm35297; SSE4-NEXT: pand %xmm6, %xmm25298; SSE4-NEXT: testw %ax, %ax5299; SSE4-NEXT: jns .LBB15_325300; SSE4-NEXT: # %bb.31: # %cond.store295301; SSE4-NEXT: pextrb $15, %xmm0, 15(%rdi)5302; SSE4-NEXT: .LBB15_32: # %else305303; SSE4-NEXT: packuswb %xmm3, %xmm25304; SSE4-NEXT: testl $65536, %eax # imm = 0x100005305; SSE4-NEXT: jne .LBB15_335306; SSE4-NEXT: # %bb.34: # %else325307; SSE4-NEXT: testl $131072, %eax # imm = 0x200005308; SSE4-NEXT: jne .LBB15_355309; SSE4-NEXT: .LBB15_36: # %else345310; SSE4-NEXT: testl $262144, %eax # imm = 0x400005311; SSE4-NEXT: jne .LBB15_375312; SSE4-NEXT: .LBB15_38: # %else365313; SSE4-NEXT: testl $524288, %eax # imm = 0x800005314; SSE4-NEXT: jne .LBB15_395315; SSE4-NEXT: .LBB15_40: # %else385316; SSE4-NEXT: testl $1048576, %eax # imm = 0x1000005317; SSE4-NEXT: jne .LBB15_415318; SSE4-NEXT: .LBB15_42: # %else405319; SSE4-NEXT: testl $2097152, %eax # imm = 0x2000005320; SSE4-NEXT: jne .LBB15_435321; SSE4-NEXT: .LBB15_44: # %else425322; SSE4-NEXT: testl $4194304, %eax # imm = 0x4000005323; SSE4-NEXT: jne .LBB15_455324; SSE4-NEXT: .LBB15_46: # %else445325; SSE4-NEXT: testl $8388608, %eax # imm = 0x8000005326; SSE4-NEXT: jne .LBB15_475327; SSE4-NEXT: .LBB15_48: # %else465328; SSE4-NEXT: testl $16777216, %eax # imm = 0x10000005329; SSE4-NEXT: jne .LBB15_495330; SSE4-NEXT: .LBB15_50: # %else485331; SSE4-NEXT: testl $33554432, %eax # imm = 0x20000005332; SSE4-NEXT: jne .LBB15_515333; SSE4-NEXT: .LBB15_52: # %else505334; SSE4-NEXT: testl $67108864, %eax # imm = 0x40000005335; SSE4-NEXT: jne .LBB15_535336; SSE4-NEXT: .LBB15_54: # %else525337; SSE4-NEXT: testl $134217728, %eax # imm = 0x80000005338; SSE4-NEXT: jne .LBB15_555339; SSE4-NEXT: .LBB15_56: # %else545340; SSE4-NEXT: testl $268435456, %eax # imm = 0x100000005341; SSE4-NEXT: jne .LBB15_575342; SSE4-NEXT: .LBB15_58: # %else565343; SSE4-NEXT: testl $536870912, %eax # imm = 0x200000005344; SSE4-NEXT: jne .LBB15_595345; SSE4-NEXT: .LBB15_60: # %else585346; SSE4-NEXT: testl $1073741824, %eax # imm = 0x400000005347; SSE4-NEXT: jne .LBB15_615348; SSE4-NEXT: .LBB15_62: # %else605349; SSE4-NEXT: testl $-2147483648, %eax # imm = 0x800000005350; SSE4-NEXT: jne .LBB15_635351; SSE4-NEXT: .LBB15_64: # %else625352; SSE4-NEXT: retq5353; SSE4-NEXT: .LBB15_1: # %cond.store5354; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)5355; SSE4-NEXT: testb $2, %al5356; SSE4-NEXT: je .LBB15_45357; SSE4-NEXT: .LBB15_3: # %cond.store15358; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)5359; SSE4-NEXT: testb $4, %al5360; SSE4-NEXT: je .LBB15_65361; SSE4-NEXT: .LBB15_5: # %cond.store35362; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)5363; SSE4-NEXT: testb $8, %al5364; SSE4-NEXT: je .LBB15_85365; SSE4-NEXT: .LBB15_7: # %cond.store55366; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)5367; SSE4-NEXT: testb $16, %al5368; SSE4-NEXT: je .LBB15_105369; SSE4-NEXT: .LBB15_9: # %cond.store75370; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)5371; SSE4-NEXT: testb $32, %al5372; SSE4-NEXT: je .LBB15_125373; SSE4-NEXT: .LBB15_11: # %cond.store95374; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)5375; SSE4-NEXT: testb $64, %al5376; SSE4-NEXT: je .LBB15_145377; SSE4-NEXT: .LBB15_13: # %cond.store115378; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)5379; SSE4-NEXT: testb %al, %al5380; SSE4-NEXT: jns .LBB15_165381; SSE4-NEXT: .LBB15_15: # %cond.store135382; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)5383; SSE4-NEXT: testl $256, %eax # imm = 0x1005384; SSE4-NEXT: je .LBB15_185385; SSE4-NEXT: .LBB15_17: # %cond.store155386; SSE4-NEXT: pextrb $8, %xmm0, 8(%rdi)5387; SSE4-NEXT: testl $512, %eax # imm = 0x2005388; SSE4-NEXT: je .LBB15_205389; SSE4-NEXT: .LBB15_19: # %cond.store175390; SSE4-NEXT: pextrb $9, %xmm0, 9(%rdi)5391; SSE4-NEXT: testl $1024, %eax # imm = 0x4005392; SSE4-NEXT: je .LBB15_225393; SSE4-NEXT: .LBB15_21: # %cond.store195394; SSE4-NEXT: pextrb $10, %xmm0, 10(%rdi)5395; SSE4-NEXT: testl $2048, %eax # imm = 0x8005396; SSE4-NEXT: je .LBB15_245397; SSE4-NEXT: .LBB15_23: # %cond.store215398; SSE4-NEXT: pextrb $11, %xmm0, 11(%rdi)5399; SSE4-NEXT: testl $4096, %eax # imm = 0x10005400; SSE4-NEXT: je .LBB15_265401; SSE4-NEXT: .LBB15_25: # %cond.store235402; SSE4-NEXT: pextrb $12, %xmm0, 12(%rdi)5403; SSE4-NEXT: testl $8192, %eax # imm = 0x20005404; SSE4-NEXT: je .LBB15_285405; SSE4-NEXT: .LBB15_27: # %cond.store255406; SSE4-NEXT: pextrb $13, %xmm0, 13(%rdi)5407; SSE4-NEXT: testl $16384, %eax # imm = 0x40005408; SSE4-NEXT: jne .LBB15_295409; SSE4-NEXT: jmp .LBB15_305410; SSE4-NEXT: .LBB15_33: # %cond.store315411; SSE4-NEXT: pextrb $0, %xmm2, 16(%rdi)5412; SSE4-NEXT: testl $131072, %eax # imm = 0x200005413; SSE4-NEXT: je .LBB15_365414; SSE4-NEXT: .LBB15_35: # %cond.store335415; SSE4-NEXT: pextrb $1, %xmm2, 17(%rdi)5416; SSE4-NEXT: testl $262144, %eax # imm = 0x400005417; SSE4-NEXT: je .LBB15_385418; SSE4-NEXT: .LBB15_37: # %cond.store355419; SSE4-NEXT: pextrb $2, %xmm2, 18(%rdi)5420; SSE4-NEXT: testl $524288, %eax # imm = 0x800005421; SSE4-NEXT: je .LBB15_405422; SSE4-NEXT: .LBB15_39: # %cond.store375423; SSE4-NEXT: pextrb $3, %xmm2, 19(%rdi)5424; SSE4-NEXT: testl $1048576, %eax # imm = 0x1000005425; SSE4-NEXT: je .LBB15_425426; SSE4-NEXT: .LBB15_41: # %cond.store395427; SSE4-NEXT: pextrb $4, %xmm2, 20(%rdi)5428; SSE4-NEXT: testl $2097152, %eax # imm = 0x2000005429; SSE4-NEXT: je .LBB15_445430; SSE4-NEXT: .LBB15_43: # %cond.store415431; SSE4-NEXT: pextrb $5, %xmm2, 21(%rdi)5432; SSE4-NEXT: testl $4194304, %eax # imm = 0x4000005433; SSE4-NEXT: je .LBB15_465434; SSE4-NEXT: .LBB15_45: # %cond.store435435; SSE4-NEXT: pextrb $6, %xmm2, 22(%rdi)5436; SSE4-NEXT: testl $8388608, %eax # imm = 0x8000005437; SSE4-NEXT: je .LBB15_485438; SSE4-NEXT: .LBB15_47: # %cond.store455439; SSE4-NEXT: pextrb $7, %xmm2, 23(%rdi)5440; SSE4-NEXT: testl $16777216, %eax # imm = 0x10000005441; SSE4-NEXT: je .LBB15_505442; SSE4-NEXT: .LBB15_49: # %cond.store475443; SSE4-NEXT: pextrb $8, %xmm2, 24(%rdi)5444; SSE4-NEXT: testl $33554432, %eax # imm = 0x20000005445; SSE4-NEXT: je .LBB15_525446; SSE4-NEXT: .LBB15_51: # %cond.store495447; SSE4-NEXT: pextrb $9, %xmm2, 25(%rdi)5448; SSE4-NEXT: testl $67108864, %eax # imm = 0x40000005449; SSE4-NEXT: je .LBB15_545450; SSE4-NEXT: .LBB15_53: # %cond.store515451; SSE4-NEXT: pextrb $10, %xmm2, 26(%rdi)5452; SSE4-NEXT: testl $134217728, %eax # imm = 0x80000005453; SSE4-NEXT: je .LBB15_565454; SSE4-NEXT: .LBB15_55: # %cond.store535455; SSE4-NEXT: pextrb $11, %xmm2, 27(%rdi)5456; SSE4-NEXT: testl $268435456, %eax # imm = 0x100000005457; SSE4-NEXT: je .LBB15_585458; SSE4-NEXT: .LBB15_57: # %cond.store555459; SSE4-NEXT: pextrb $12, %xmm2, 28(%rdi)5460; SSE4-NEXT: testl $536870912, %eax # imm = 0x200000005461; SSE4-NEXT: je .LBB15_605462; SSE4-NEXT: .LBB15_59: # %cond.store575463; SSE4-NEXT: pextrb $13, %xmm2, 29(%rdi)5464; SSE4-NEXT: testl $1073741824, %eax # imm = 0x400000005465; SSE4-NEXT: je .LBB15_625466; SSE4-NEXT: .LBB15_61: # %cond.store595467; SSE4-NEXT: pextrb $14, %xmm2, 30(%rdi)5468; SSE4-NEXT: testl $-2147483648, %eax # imm = 0x800000005469; SSE4-NEXT: je .LBB15_645470; SSE4-NEXT: .LBB15_63: # %cond.store615471; SSE4-NEXT: pextrb $15, %xmm2, 31(%rdi)5472; SSE4-NEXT: retq5473;5474; AVX1-LABEL: truncstore_v32i16_v32i8:5475; AVX1: # %bb.0:5476; AVX1-NEXT: vbroadcastss {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]5477; AVX1-NEXT: vandps %ymm3, %ymm1, %ymm15478; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm45479; AVX1-NEXT: vpackuswb %xmm4, %xmm1, %xmm15480; AVX1-NEXT: vandps %ymm3, %ymm0, %ymm05481; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm35482; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm05483; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05484; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm15485; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm35486; AVX1-NEXT: vpmovmskb %xmm3, %ecx5487; AVX1-NEXT: xorl $65535, %ecx # imm = 0xFFFF5488; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm25489; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm15490; AVX1-NEXT: vpmovmskb %xmm1, %eax5491; AVX1-NEXT: notl %eax5492; AVX1-NEXT: shll $16, %eax5493; AVX1-NEXT: orl %ecx, %eax5494; AVX1-NEXT: testb $1, %al5495; AVX1-NEXT: jne .LBB15_15496; AVX1-NEXT: # %bb.2: # %else5497; AVX1-NEXT: testb $2, %al5498; AVX1-NEXT: jne .LBB15_35499; AVX1-NEXT: .LBB15_4: # %else25500; AVX1-NEXT: testb $4, %al5501; AVX1-NEXT: jne .LBB15_55502; AVX1-NEXT: .LBB15_6: # %else45503; AVX1-NEXT: testb $8, %al5504; AVX1-NEXT: jne .LBB15_75505; AVX1-NEXT: .LBB15_8: # %else65506; AVX1-NEXT: testb $16, %al5507; AVX1-NEXT: jne .LBB15_95508; AVX1-NEXT: .LBB15_10: # %else85509; AVX1-NEXT: testb $32, %al5510; AVX1-NEXT: jne .LBB15_115511; AVX1-NEXT: .LBB15_12: # %else105512; AVX1-NEXT: testb $64, %al5513; AVX1-NEXT: jne .LBB15_135514; AVX1-NEXT: .LBB15_14: # %else125515; AVX1-NEXT: testb %al, %al5516; AVX1-NEXT: js .LBB15_155517; AVX1-NEXT: .LBB15_16: # %else145518; AVX1-NEXT: testl $256, %eax # imm = 0x1005519; AVX1-NEXT: jne .LBB15_175520; AVX1-NEXT: .LBB15_18: # %else165521; AVX1-NEXT: testl $512, %eax # imm = 0x2005522; AVX1-NEXT: jne .LBB15_195523; AVX1-NEXT: .LBB15_20: # %else185524; AVX1-NEXT: testl $1024, %eax # imm = 0x4005525; AVX1-NEXT: jne .LBB15_215526; AVX1-NEXT: .LBB15_22: # %else205527; AVX1-NEXT: testl $2048, %eax # imm = 0x8005528; AVX1-NEXT: jne .LBB15_235529; AVX1-NEXT: .LBB15_24: # %else225530; AVX1-NEXT: testl $4096, %eax # imm = 0x10005531; AVX1-NEXT: jne .LBB15_255532; AVX1-NEXT: .LBB15_26: # %else245533; AVX1-NEXT: testl $8192, %eax # imm = 0x20005534; AVX1-NEXT: jne .LBB15_275535; AVX1-NEXT: .LBB15_28: # %else265536; AVX1-NEXT: testl $16384, %eax # imm = 0x40005537; AVX1-NEXT: jne .LBB15_295538; AVX1-NEXT: .LBB15_30: # %else285539; AVX1-NEXT: testw %ax, %ax5540; AVX1-NEXT: jns .LBB15_325541; AVX1-NEXT: .LBB15_31: # %cond.store295542; AVX1-NEXT: vpextrb $15, %xmm0, 15(%rdi)5543; AVX1-NEXT: .LBB15_32: # %else305544; AVX1-NEXT: testl $65536, %eax # imm = 0x100005545; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm05546; AVX1-NEXT: jne .LBB15_335547; AVX1-NEXT: # %bb.34: # %else325548; AVX1-NEXT: testl $131072, %eax # imm = 0x200005549; AVX1-NEXT: jne .LBB15_355550; AVX1-NEXT: .LBB15_36: # %else345551; AVX1-NEXT: testl $262144, %eax # imm = 0x400005552; AVX1-NEXT: jne .LBB15_375553; AVX1-NEXT: .LBB15_38: # %else365554; AVX1-NEXT: testl $524288, %eax # imm = 0x800005555; AVX1-NEXT: jne .LBB15_395556; AVX1-NEXT: .LBB15_40: # %else385557; AVX1-NEXT: testl $1048576, %eax # imm = 0x1000005558; AVX1-NEXT: jne .LBB15_415559; AVX1-NEXT: .LBB15_42: # %else405560; AVX1-NEXT: testl $2097152, %eax # imm = 0x2000005561; AVX1-NEXT: jne .LBB15_435562; AVX1-NEXT: .LBB15_44: # %else425563; AVX1-NEXT: testl $4194304, %eax # imm = 0x4000005564; AVX1-NEXT: jne .LBB15_455565; AVX1-NEXT: .LBB15_46: # %else445566; AVX1-NEXT: testl $8388608, %eax # imm = 0x8000005567; AVX1-NEXT: jne .LBB15_475568; AVX1-NEXT: .LBB15_48: # %else465569; AVX1-NEXT: testl $16777216, %eax # imm = 0x10000005570; AVX1-NEXT: jne .LBB15_495571; AVX1-NEXT: .LBB15_50: # %else485572; AVX1-NEXT: testl $33554432, %eax # imm = 0x20000005573; AVX1-NEXT: jne .LBB15_515574; AVX1-NEXT: .LBB15_52: # %else505575; AVX1-NEXT: testl $67108864, %eax # imm = 0x40000005576; AVX1-NEXT: jne .LBB15_535577; AVX1-NEXT: .LBB15_54: # %else525578; AVX1-NEXT: testl $134217728, %eax # imm = 0x80000005579; AVX1-NEXT: jne .LBB15_555580; AVX1-NEXT: .LBB15_56: # %else545581; AVX1-NEXT: testl $268435456, %eax # imm = 0x100000005582; AVX1-NEXT: jne .LBB15_575583; AVX1-NEXT: .LBB15_58: # %else565584; AVX1-NEXT: testl $536870912, %eax # imm = 0x200000005585; AVX1-NEXT: jne .LBB15_595586; AVX1-NEXT: .LBB15_60: # %else585587; AVX1-NEXT: testl $1073741824, %eax # imm = 0x400000005588; AVX1-NEXT: jne .LBB15_615589; AVX1-NEXT: .LBB15_62: # %else605590; AVX1-NEXT: testl $-2147483648, %eax # imm = 0x800000005591; AVX1-NEXT: jne .LBB15_635592; AVX1-NEXT: .LBB15_64: # %else625593; AVX1-NEXT: vzeroupper5594; AVX1-NEXT: retq5595; AVX1-NEXT: .LBB15_1: # %cond.store5596; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)5597; AVX1-NEXT: testb $2, %al5598; AVX1-NEXT: je .LBB15_45599; AVX1-NEXT: .LBB15_3: # %cond.store15600; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)5601; AVX1-NEXT: testb $4, %al5602; AVX1-NEXT: je .LBB15_65603; AVX1-NEXT: .LBB15_5: # %cond.store35604; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)5605; AVX1-NEXT: testb $8, %al5606; AVX1-NEXT: je .LBB15_85607; AVX1-NEXT: .LBB15_7: # %cond.store55608; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)5609; AVX1-NEXT: testb $16, %al5610; AVX1-NEXT: je .LBB15_105611; AVX1-NEXT: .LBB15_9: # %cond.store75612; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)5613; AVX1-NEXT: testb $32, %al5614; AVX1-NEXT: je .LBB15_125615; AVX1-NEXT: .LBB15_11: # %cond.store95616; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)5617; AVX1-NEXT: testb $64, %al5618; AVX1-NEXT: je .LBB15_145619; AVX1-NEXT: .LBB15_13: # %cond.store115620; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)5621; AVX1-NEXT: testb %al, %al5622; AVX1-NEXT: jns .LBB15_165623; AVX1-NEXT: .LBB15_15: # %cond.store135624; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)5625; AVX1-NEXT: testl $256, %eax # imm = 0x1005626; AVX1-NEXT: je .LBB15_185627; AVX1-NEXT: .LBB15_17: # %cond.store155628; AVX1-NEXT: vpextrb $8, %xmm0, 8(%rdi)5629; AVX1-NEXT: testl $512, %eax # imm = 0x2005630; AVX1-NEXT: je .LBB15_205631; AVX1-NEXT: .LBB15_19: # %cond.store175632; AVX1-NEXT: vpextrb $9, %xmm0, 9(%rdi)5633; AVX1-NEXT: testl $1024, %eax # imm = 0x4005634; AVX1-NEXT: je .LBB15_225635; AVX1-NEXT: .LBB15_21: # %cond.store195636; AVX1-NEXT: vpextrb $10, %xmm0, 10(%rdi)5637; AVX1-NEXT: testl $2048, %eax # imm = 0x8005638; AVX1-NEXT: je .LBB15_245639; AVX1-NEXT: .LBB15_23: # %cond.store215640; AVX1-NEXT: vpextrb $11, %xmm0, 11(%rdi)5641; AVX1-NEXT: testl $4096, %eax # imm = 0x10005642; AVX1-NEXT: je .LBB15_265643; AVX1-NEXT: .LBB15_25: # %cond.store235644; AVX1-NEXT: vpextrb $12, %xmm0, 12(%rdi)5645; AVX1-NEXT: testl $8192, %eax # imm = 0x20005646; AVX1-NEXT: je .LBB15_285647; AVX1-NEXT: .LBB15_27: # %cond.store255648; AVX1-NEXT: vpextrb $13, %xmm0, 13(%rdi)5649; AVX1-NEXT: testl $16384, %eax # imm = 0x40005650; AVX1-NEXT: je .LBB15_305651; AVX1-NEXT: .LBB15_29: # %cond.store275652; AVX1-NEXT: vpextrb $14, %xmm0, 14(%rdi)5653; AVX1-NEXT: testw %ax, %ax5654; AVX1-NEXT: js .LBB15_315655; AVX1-NEXT: jmp .LBB15_325656; AVX1-NEXT: .LBB15_33: # %cond.store315657; AVX1-NEXT: vpextrb $0, %xmm0, 16(%rdi)5658; AVX1-NEXT: testl $131072, %eax # imm = 0x200005659; AVX1-NEXT: je .LBB15_365660; AVX1-NEXT: .LBB15_35: # %cond.store335661; AVX1-NEXT: vpextrb $1, %xmm0, 17(%rdi)5662; AVX1-NEXT: testl $262144, %eax # imm = 0x400005663; AVX1-NEXT: je .LBB15_385664; AVX1-NEXT: .LBB15_37: # %cond.store355665; AVX1-NEXT: vpextrb $2, %xmm0, 18(%rdi)5666; AVX1-NEXT: testl $524288, %eax # imm = 0x800005667; AVX1-NEXT: je .LBB15_405668; AVX1-NEXT: .LBB15_39: # %cond.store375669; AVX1-NEXT: vpextrb $3, %xmm0, 19(%rdi)5670; AVX1-NEXT: testl $1048576, %eax # imm = 0x1000005671; AVX1-NEXT: je .LBB15_425672; AVX1-NEXT: .LBB15_41: # %cond.store395673; AVX1-NEXT: vpextrb $4, %xmm0, 20(%rdi)5674; AVX1-NEXT: testl $2097152, %eax # imm = 0x2000005675; AVX1-NEXT: je .LBB15_445676; AVX1-NEXT: .LBB15_43: # %cond.store415677; AVX1-NEXT: vpextrb $5, %xmm0, 21(%rdi)5678; AVX1-NEXT: testl $4194304, %eax # imm = 0x4000005679; AVX1-NEXT: je .LBB15_465680; AVX1-NEXT: .LBB15_45: # %cond.store435681; AVX1-NEXT: vpextrb $6, %xmm0, 22(%rdi)5682; AVX1-NEXT: testl $8388608, %eax # imm = 0x8000005683; AVX1-NEXT: je .LBB15_485684; AVX1-NEXT: .LBB15_47: # %cond.store455685; AVX1-NEXT: vpextrb $7, %xmm0, 23(%rdi)5686; AVX1-NEXT: testl $16777216, %eax # imm = 0x10000005687; AVX1-NEXT: je .LBB15_505688; AVX1-NEXT: .LBB15_49: # %cond.store475689; AVX1-NEXT: vpextrb $8, %xmm0, 24(%rdi)5690; AVX1-NEXT: testl $33554432, %eax # imm = 0x20000005691; AVX1-NEXT: je .LBB15_525692; AVX1-NEXT: .LBB15_51: # %cond.store495693; AVX1-NEXT: vpextrb $9, %xmm0, 25(%rdi)5694; AVX1-NEXT: testl $67108864, %eax # imm = 0x40000005695; AVX1-NEXT: je .LBB15_545696; AVX1-NEXT: .LBB15_53: # %cond.store515697; AVX1-NEXT: vpextrb $10, %xmm0, 26(%rdi)5698; AVX1-NEXT: testl $134217728, %eax # imm = 0x80000005699; AVX1-NEXT: je .LBB15_565700; AVX1-NEXT: .LBB15_55: # %cond.store535701; AVX1-NEXT: vpextrb $11, %xmm0, 27(%rdi)5702; AVX1-NEXT: testl $268435456, %eax # imm = 0x100000005703; AVX1-NEXT: je .LBB15_585704; AVX1-NEXT: .LBB15_57: # %cond.store555705; AVX1-NEXT: vpextrb $12, %xmm0, 28(%rdi)5706; AVX1-NEXT: testl $536870912, %eax # imm = 0x200000005707; AVX1-NEXT: je .LBB15_605708; AVX1-NEXT: .LBB15_59: # %cond.store575709; AVX1-NEXT: vpextrb $13, %xmm0, 29(%rdi)5710; AVX1-NEXT: testl $1073741824, %eax # imm = 0x400000005711; AVX1-NEXT: je .LBB15_625712; AVX1-NEXT: .LBB15_61: # %cond.store595713; AVX1-NEXT: vpextrb $14, %xmm0, 30(%rdi)5714; AVX1-NEXT: testl $-2147483648, %eax # imm = 0x800000005715; AVX1-NEXT: je .LBB15_645716; AVX1-NEXT: .LBB15_63: # %cond.store615717; AVX1-NEXT: vpextrb $15, %xmm0, 31(%rdi)5718; AVX1-NEXT: vzeroupper5719; AVX1-NEXT: retq5720;5721; AVX2-LABEL: truncstore_v32i16_v32i8:5722; AVX2: # %bb.0:5723; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm35724; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm4 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]5725; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm15726; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm05727; AVX2-NEXT: vpackuswb %ymm1, %ymm0, %ymm05728; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]5729; AVX2-NEXT: vpcmpeqb %ymm3, %ymm2, %ymm15730; AVX2-NEXT: vpmovmskb %ymm1, %eax5731; AVX2-NEXT: notl %eax5732; AVX2-NEXT: testb $1, %al5733; AVX2-NEXT: jne .LBB15_15734; AVX2-NEXT: # %bb.2: # %else5735; AVX2-NEXT: testb $2, %al5736; AVX2-NEXT: jne .LBB15_35737; AVX2-NEXT: .LBB15_4: # %else25738; AVX2-NEXT: testb $4, %al5739; AVX2-NEXT: jne .LBB15_55740; AVX2-NEXT: .LBB15_6: # %else45741; AVX2-NEXT: testb $8, %al5742; AVX2-NEXT: jne .LBB15_75743; AVX2-NEXT: .LBB15_8: # %else65744; AVX2-NEXT: testb $16, %al5745; AVX2-NEXT: jne .LBB15_95746; AVX2-NEXT: .LBB15_10: # %else85747; AVX2-NEXT: testb $32, %al5748; AVX2-NEXT: jne .LBB15_115749; AVX2-NEXT: .LBB15_12: # %else105750; AVX2-NEXT: testb $64, %al5751; AVX2-NEXT: jne .LBB15_135752; AVX2-NEXT: .LBB15_14: # %else125753; AVX2-NEXT: testb %al, %al5754; AVX2-NEXT: js .LBB15_155755; AVX2-NEXT: .LBB15_16: # %else145756; AVX2-NEXT: testl $256, %eax # imm = 0x1005757; AVX2-NEXT: jne .LBB15_175758; AVX2-NEXT: .LBB15_18: # %else165759; AVX2-NEXT: testl $512, %eax # imm = 0x2005760; AVX2-NEXT: jne .LBB15_195761; AVX2-NEXT: .LBB15_20: # %else185762; AVX2-NEXT: testl $1024, %eax # imm = 0x4005763; AVX2-NEXT: jne .LBB15_215764; AVX2-NEXT: .LBB15_22: # %else205765; AVX2-NEXT: testl $2048, %eax # imm = 0x8005766; AVX2-NEXT: jne .LBB15_235767; AVX2-NEXT: .LBB15_24: # %else225768; AVX2-NEXT: testl $4096, %eax # imm = 0x10005769; AVX2-NEXT: jne .LBB15_255770; AVX2-NEXT: .LBB15_26: # %else245771; AVX2-NEXT: testl $8192, %eax # imm = 0x20005772; AVX2-NEXT: jne .LBB15_275773; AVX2-NEXT: .LBB15_28: # %else265774; AVX2-NEXT: testl $16384, %eax # imm = 0x40005775; AVX2-NEXT: jne .LBB15_295776; AVX2-NEXT: .LBB15_30: # %else285777; AVX2-NEXT: testw %ax, %ax5778; AVX2-NEXT: jns .LBB15_325779; AVX2-NEXT: .LBB15_31: # %cond.store295780; AVX2-NEXT: vpextrb $15, %xmm0, 15(%rdi)5781; AVX2-NEXT: .LBB15_32: # %else305782; AVX2-NEXT: testl $65536, %eax # imm = 0x100005783; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm05784; AVX2-NEXT: jne .LBB15_335785; AVX2-NEXT: # %bb.34: # %else325786; AVX2-NEXT: testl $131072, %eax # imm = 0x200005787; AVX2-NEXT: jne .LBB15_355788; AVX2-NEXT: .LBB15_36: # %else345789; AVX2-NEXT: testl $262144, %eax # imm = 0x400005790; AVX2-NEXT: jne .LBB15_375791; AVX2-NEXT: .LBB15_38: # %else365792; AVX2-NEXT: testl $524288, %eax # imm = 0x800005793; AVX2-NEXT: jne .LBB15_395794; AVX2-NEXT: .LBB15_40: # %else385795; AVX2-NEXT: testl $1048576, %eax # imm = 0x1000005796; AVX2-NEXT: jne .LBB15_415797; AVX2-NEXT: .LBB15_42: # %else405798; AVX2-NEXT: testl $2097152, %eax # imm = 0x2000005799; AVX2-NEXT: jne .LBB15_435800; AVX2-NEXT: .LBB15_44: # %else425801; AVX2-NEXT: testl $4194304, %eax # imm = 0x4000005802; AVX2-NEXT: jne .LBB15_455803; AVX2-NEXT: .LBB15_46: # %else445804; AVX2-NEXT: testl $8388608, %eax # imm = 0x8000005805; AVX2-NEXT: jne .LBB15_475806; AVX2-NEXT: .LBB15_48: # %else465807; AVX2-NEXT: testl $16777216, %eax # imm = 0x10000005808; AVX2-NEXT: jne .LBB15_495809; AVX2-NEXT: .LBB15_50: # %else485810; AVX2-NEXT: testl $33554432, %eax # imm = 0x20000005811; AVX2-NEXT: jne .LBB15_515812; AVX2-NEXT: .LBB15_52: # %else505813; AVX2-NEXT: testl $67108864, %eax # imm = 0x40000005814; AVX2-NEXT: jne .LBB15_535815; AVX2-NEXT: .LBB15_54: # %else525816; AVX2-NEXT: testl $134217728, %eax # imm = 0x80000005817; AVX2-NEXT: jne .LBB15_555818; AVX2-NEXT: .LBB15_56: # %else545819; AVX2-NEXT: testl $268435456, %eax # imm = 0x100000005820; AVX2-NEXT: jne .LBB15_575821; AVX2-NEXT: .LBB15_58: # %else565822; AVX2-NEXT: testl $536870912, %eax # imm = 0x200000005823; AVX2-NEXT: jne .LBB15_595824; AVX2-NEXT: .LBB15_60: # %else585825; AVX2-NEXT: testl $1073741824, %eax # imm = 0x400000005826; AVX2-NEXT: jne .LBB15_615827; AVX2-NEXT: .LBB15_62: # %else605828; AVX2-NEXT: testl $-2147483648, %eax # imm = 0x800000005829; AVX2-NEXT: jne .LBB15_635830; AVX2-NEXT: .LBB15_64: # %else625831; AVX2-NEXT: vzeroupper5832; AVX2-NEXT: retq5833; AVX2-NEXT: .LBB15_1: # %cond.store5834; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)5835; AVX2-NEXT: testb $2, %al5836; AVX2-NEXT: je .LBB15_45837; AVX2-NEXT: .LBB15_3: # %cond.store15838; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)5839; AVX2-NEXT: testb $4, %al5840; AVX2-NEXT: je .LBB15_65841; AVX2-NEXT: .LBB15_5: # %cond.store35842; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)5843; AVX2-NEXT: testb $8, %al5844; AVX2-NEXT: je .LBB15_85845; AVX2-NEXT: .LBB15_7: # %cond.store55846; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)5847; AVX2-NEXT: testb $16, %al5848; AVX2-NEXT: je .LBB15_105849; AVX2-NEXT: .LBB15_9: # %cond.store75850; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)5851; AVX2-NEXT: testb $32, %al5852; AVX2-NEXT: je .LBB15_125853; AVX2-NEXT: .LBB15_11: # %cond.store95854; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)5855; AVX2-NEXT: testb $64, %al5856; AVX2-NEXT: je .LBB15_145857; AVX2-NEXT: .LBB15_13: # %cond.store115858; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)5859; AVX2-NEXT: testb %al, %al5860; AVX2-NEXT: jns .LBB15_165861; AVX2-NEXT: .LBB15_15: # %cond.store135862; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)5863; AVX2-NEXT: testl $256, %eax # imm = 0x1005864; AVX2-NEXT: je .LBB15_185865; AVX2-NEXT: .LBB15_17: # %cond.store155866; AVX2-NEXT: vpextrb $8, %xmm0, 8(%rdi)5867; AVX2-NEXT: testl $512, %eax # imm = 0x2005868; AVX2-NEXT: je .LBB15_205869; AVX2-NEXT: .LBB15_19: # %cond.store175870; AVX2-NEXT: vpextrb $9, %xmm0, 9(%rdi)5871; AVX2-NEXT: testl $1024, %eax # imm = 0x4005872; AVX2-NEXT: je .LBB15_225873; AVX2-NEXT: .LBB15_21: # %cond.store195874; AVX2-NEXT: vpextrb $10, %xmm0, 10(%rdi)5875; AVX2-NEXT: testl $2048, %eax # imm = 0x8005876; AVX2-NEXT: je .LBB15_245877; AVX2-NEXT: .LBB15_23: # %cond.store215878; AVX2-NEXT: vpextrb $11, %xmm0, 11(%rdi)5879; AVX2-NEXT: testl $4096, %eax # imm = 0x10005880; AVX2-NEXT: je .LBB15_265881; AVX2-NEXT: .LBB15_25: # %cond.store235882; AVX2-NEXT: vpextrb $12, %xmm0, 12(%rdi)5883; AVX2-NEXT: testl $8192, %eax # imm = 0x20005884; AVX2-NEXT: je .LBB15_285885; AVX2-NEXT: .LBB15_27: # %cond.store255886; AVX2-NEXT: vpextrb $13, %xmm0, 13(%rdi)5887; AVX2-NEXT: testl $16384, %eax # imm = 0x40005888; AVX2-NEXT: je .LBB15_305889; AVX2-NEXT: .LBB15_29: # %cond.store275890; AVX2-NEXT: vpextrb $14, %xmm0, 14(%rdi)5891; AVX2-NEXT: testw %ax, %ax5892; AVX2-NEXT: js .LBB15_315893; AVX2-NEXT: jmp .LBB15_325894; AVX2-NEXT: .LBB15_33: # %cond.store315895; AVX2-NEXT: vpextrb $0, %xmm0, 16(%rdi)5896; AVX2-NEXT: testl $131072, %eax # imm = 0x200005897; AVX2-NEXT: je .LBB15_365898; AVX2-NEXT: .LBB15_35: # %cond.store335899; AVX2-NEXT: vpextrb $1, %xmm0, 17(%rdi)5900; AVX2-NEXT: testl $262144, %eax # imm = 0x400005901; AVX2-NEXT: je .LBB15_385902; AVX2-NEXT: .LBB15_37: # %cond.store355903; AVX2-NEXT: vpextrb $2, %xmm0, 18(%rdi)5904; AVX2-NEXT: testl $524288, %eax # imm = 0x800005905; AVX2-NEXT: je .LBB15_405906; AVX2-NEXT: .LBB15_39: # %cond.store375907; AVX2-NEXT: vpextrb $3, %xmm0, 19(%rdi)5908; AVX2-NEXT: testl $1048576, %eax # imm = 0x1000005909; AVX2-NEXT: je .LBB15_425910; AVX2-NEXT: .LBB15_41: # %cond.store395911; AVX2-NEXT: vpextrb $4, %xmm0, 20(%rdi)5912; AVX2-NEXT: testl $2097152, %eax # imm = 0x2000005913; AVX2-NEXT: je .LBB15_445914; AVX2-NEXT: .LBB15_43: # %cond.store415915; AVX2-NEXT: vpextrb $5, %xmm0, 21(%rdi)5916; AVX2-NEXT: testl $4194304, %eax # imm = 0x4000005917; AVX2-NEXT: je .LBB15_465918; AVX2-NEXT: .LBB15_45: # %cond.store435919; AVX2-NEXT: vpextrb $6, %xmm0, 22(%rdi)5920; AVX2-NEXT: testl $8388608, %eax # imm = 0x8000005921; AVX2-NEXT: je .LBB15_485922; AVX2-NEXT: .LBB15_47: # %cond.store455923; AVX2-NEXT: vpextrb $7, %xmm0, 23(%rdi)5924; AVX2-NEXT: testl $16777216, %eax # imm = 0x10000005925; AVX2-NEXT: je .LBB15_505926; AVX2-NEXT: .LBB15_49: # %cond.store475927; AVX2-NEXT: vpextrb $8, %xmm0, 24(%rdi)5928; AVX2-NEXT: testl $33554432, %eax # imm = 0x20000005929; AVX2-NEXT: je .LBB15_525930; AVX2-NEXT: .LBB15_51: # %cond.store495931; AVX2-NEXT: vpextrb $9, %xmm0, 25(%rdi)5932; AVX2-NEXT: testl $67108864, %eax # imm = 0x40000005933; AVX2-NEXT: je .LBB15_545934; AVX2-NEXT: .LBB15_53: # %cond.store515935; AVX2-NEXT: vpextrb $10, %xmm0, 26(%rdi)5936; AVX2-NEXT: testl $134217728, %eax # imm = 0x80000005937; AVX2-NEXT: je .LBB15_565938; AVX2-NEXT: .LBB15_55: # %cond.store535939; AVX2-NEXT: vpextrb $11, %xmm0, 27(%rdi)5940; AVX2-NEXT: testl $268435456, %eax # imm = 0x100000005941; AVX2-NEXT: je .LBB15_585942; AVX2-NEXT: .LBB15_57: # %cond.store555943; AVX2-NEXT: vpextrb $12, %xmm0, 28(%rdi)5944; AVX2-NEXT: testl $536870912, %eax # imm = 0x200000005945; AVX2-NEXT: je .LBB15_605946; AVX2-NEXT: .LBB15_59: # %cond.store575947; AVX2-NEXT: vpextrb $13, %xmm0, 29(%rdi)5948; AVX2-NEXT: testl $1073741824, %eax # imm = 0x400000005949; AVX2-NEXT: je .LBB15_625950; AVX2-NEXT: .LBB15_61: # %cond.store595951; AVX2-NEXT: vpextrb $14, %xmm0, 30(%rdi)5952; AVX2-NEXT: testl $-2147483648, %eax # imm = 0x800000005953; AVX2-NEXT: je .LBB15_645954; AVX2-NEXT: .LBB15_63: # %cond.store615955; AVX2-NEXT: vpextrb $15, %xmm0, 31(%rdi)5956; AVX2-NEXT: vzeroupper5957; AVX2-NEXT: retq5958;5959; AVX512F-LABEL: truncstore_v32i16_v32i8:5960; AVX512F: # %bb.0:5961; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm25962; AVX512F-NEXT: vpcmpeqb %ymm2, %ymm1, %ymm15963; AVX512F-NEXT: vpmovzxwd {{.*#+}} zmm2 = 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],zero5964; AVX512F-NEXT: vpmovdb %zmm2, %xmm25965; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm05966; 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],zero5967; AVX512F-NEXT: vpmovdb %zmm0, %xmm05968; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm2, %ymm05969; AVX512F-NEXT: vpmovmskb %ymm1, %eax5970; AVX512F-NEXT: notl %eax5971; AVX512F-NEXT: testb $1, %al5972; AVX512F-NEXT: jne .LBB15_15973; AVX512F-NEXT: # %bb.2: # %else5974; AVX512F-NEXT: testb $2, %al5975; AVX512F-NEXT: jne .LBB15_35976; AVX512F-NEXT: .LBB15_4: # %else25977; AVX512F-NEXT: testb $4, %al5978; AVX512F-NEXT: jne .LBB15_55979; AVX512F-NEXT: .LBB15_6: # %else45980; AVX512F-NEXT: testb $8, %al5981; AVX512F-NEXT: jne .LBB15_75982; AVX512F-NEXT: .LBB15_8: # %else65983; AVX512F-NEXT: testb $16, %al5984; AVX512F-NEXT: jne .LBB15_95985; AVX512F-NEXT: .LBB15_10: # %else85986; AVX512F-NEXT: testb $32, %al5987; AVX512F-NEXT: jne .LBB15_115988; AVX512F-NEXT: .LBB15_12: # %else105989; AVX512F-NEXT: testb $64, %al5990; AVX512F-NEXT: jne .LBB15_135991; AVX512F-NEXT: .LBB15_14: # %else125992; AVX512F-NEXT: testb %al, %al5993; AVX512F-NEXT: js .LBB15_155994; AVX512F-NEXT: .LBB15_16: # %else145995; AVX512F-NEXT: testl $256, %eax # imm = 0x1005996; AVX512F-NEXT: jne .LBB15_175997; AVX512F-NEXT: .LBB15_18: # %else165998; AVX512F-NEXT: testl $512, %eax # imm = 0x2005999; AVX512F-NEXT: jne .LBB15_196000; AVX512F-NEXT: .LBB15_20: # %else186001; AVX512F-NEXT: testl $1024, %eax # imm = 0x4006002; AVX512F-NEXT: jne .LBB15_216003; AVX512F-NEXT: .LBB15_22: # %else206004; AVX512F-NEXT: testl $2048, %eax # imm = 0x8006005; AVX512F-NEXT: jne .LBB15_236006; AVX512F-NEXT: .LBB15_24: # %else226007; AVX512F-NEXT: testl $4096, %eax # imm = 0x10006008; AVX512F-NEXT: jne .LBB15_256009; AVX512F-NEXT: .LBB15_26: # %else246010; AVX512F-NEXT: testl $8192, %eax # imm = 0x20006011; AVX512F-NEXT: jne .LBB15_276012; AVX512F-NEXT: .LBB15_28: # %else266013; AVX512F-NEXT: testl $16384, %eax # imm = 0x40006014; AVX512F-NEXT: jne .LBB15_296015; AVX512F-NEXT: .LBB15_30: # %else286016; AVX512F-NEXT: testw %ax, %ax6017; AVX512F-NEXT: jns .LBB15_326018; AVX512F-NEXT: .LBB15_31: # %cond.store296019; AVX512F-NEXT: vpextrb $15, %xmm0, 15(%rdi)6020; AVX512F-NEXT: .LBB15_32: # %else306021; AVX512F-NEXT: testl $65536, %eax # imm = 0x100006022; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm06023; AVX512F-NEXT: jne .LBB15_336024; AVX512F-NEXT: # %bb.34: # %else326025; AVX512F-NEXT: testl $131072, %eax # imm = 0x200006026; AVX512F-NEXT: jne .LBB15_356027; AVX512F-NEXT: .LBB15_36: # %else346028; AVX512F-NEXT: testl $262144, %eax # imm = 0x400006029; AVX512F-NEXT: jne .LBB15_376030; AVX512F-NEXT: .LBB15_38: # %else366031; AVX512F-NEXT: testl $524288, %eax # imm = 0x800006032; AVX512F-NEXT: jne .LBB15_396033; AVX512F-NEXT: .LBB15_40: # %else386034; AVX512F-NEXT: testl $1048576, %eax # imm = 0x1000006035; AVX512F-NEXT: jne .LBB15_416036; AVX512F-NEXT: .LBB15_42: # %else406037; AVX512F-NEXT: testl $2097152, %eax # imm = 0x2000006038; AVX512F-NEXT: jne .LBB15_436039; AVX512F-NEXT: .LBB15_44: # %else426040; AVX512F-NEXT: testl $4194304, %eax # imm = 0x4000006041; AVX512F-NEXT: jne .LBB15_456042; AVX512F-NEXT: .LBB15_46: # %else446043; AVX512F-NEXT: testl $8388608, %eax # imm = 0x8000006044; AVX512F-NEXT: jne .LBB15_476045; AVX512F-NEXT: .LBB15_48: # %else466046; AVX512F-NEXT: testl $16777216, %eax # imm = 0x10000006047; AVX512F-NEXT: jne .LBB15_496048; AVX512F-NEXT: .LBB15_50: # %else486049; AVX512F-NEXT: testl $33554432, %eax # imm = 0x20000006050; AVX512F-NEXT: jne .LBB15_516051; AVX512F-NEXT: .LBB15_52: # %else506052; AVX512F-NEXT: testl $67108864, %eax # imm = 0x40000006053; AVX512F-NEXT: jne .LBB15_536054; AVX512F-NEXT: .LBB15_54: # %else526055; AVX512F-NEXT: testl $134217728, %eax # imm = 0x80000006056; AVX512F-NEXT: jne .LBB15_556057; AVX512F-NEXT: .LBB15_56: # %else546058; AVX512F-NEXT: testl $268435456, %eax # imm = 0x100000006059; AVX512F-NEXT: jne .LBB15_576060; AVX512F-NEXT: .LBB15_58: # %else566061; AVX512F-NEXT: testl $536870912, %eax # imm = 0x200000006062; AVX512F-NEXT: jne .LBB15_596063; AVX512F-NEXT: .LBB15_60: # %else586064; AVX512F-NEXT: testl $1073741824, %eax # imm = 0x400000006065; AVX512F-NEXT: jne .LBB15_616066; AVX512F-NEXT: .LBB15_62: # %else606067; AVX512F-NEXT: testl $-2147483648, %eax # imm = 0x800000006068; AVX512F-NEXT: jne .LBB15_636069; AVX512F-NEXT: .LBB15_64: # %else626070; AVX512F-NEXT: vzeroupper6071; AVX512F-NEXT: retq6072; AVX512F-NEXT: .LBB15_1: # %cond.store6073; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)6074; AVX512F-NEXT: testb $2, %al6075; AVX512F-NEXT: je .LBB15_46076; AVX512F-NEXT: .LBB15_3: # %cond.store16077; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)6078; AVX512F-NEXT: testb $4, %al6079; AVX512F-NEXT: je .LBB15_66080; AVX512F-NEXT: .LBB15_5: # %cond.store36081; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)6082; AVX512F-NEXT: testb $8, %al6083; AVX512F-NEXT: je .LBB15_86084; AVX512F-NEXT: .LBB15_7: # %cond.store56085; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)6086; AVX512F-NEXT: testb $16, %al6087; AVX512F-NEXT: je .LBB15_106088; AVX512F-NEXT: .LBB15_9: # %cond.store76089; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)6090; AVX512F-NEXT: testb $32, %al6091; AVX512F-NEXT: je .LBB15_126092; AVX512F-NEXT: .LBB15_11: # %cond.store96093; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)6094; AVX512F-NEXT: testb $64, %al6095; AVX512F-NEXT: je .LBB15_146096; AVX512F-NEXT: .LBB15_13: # %cond.store116097; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)6098; AVX512F-NEXT: testb %al, %al6099; AVX512F-NEXT: jns .LBB15_166100; AVX512F-NEXT: .LBB15_15: # %cond.store136101; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)6102; AVX512F-NEXT: testl $256, %eax # imm = 0x1006103; AVX512F-NEXT: je .LBB15_186104; AVX512F-NEXT: .LBB15_17: # %cond.store156105; AVX512F-NEXT: vpextrb $8, %xmm0, 8(%rdi)6106; AVX512F-NEXT: testl $512, %eax # imm = 0x2006107; AVX512F-NEXT: je .LBB15_206108; AVX512F-NEXT: .LBB15_19: # %cond.store176109; AVX512F-NEXT: vpextrb $9, %xmm0, 9(%rdi)6110; AVX512F-NEXT: testl $1024, %eax # imm = 0x4006111; AVX512F-NEXT: je .LBB15_226112; AVX512F-NEXT: .LBB15_21: # %cond.store196113; AVX512F-NEXT: vpextrb $10, %xmm0, 10(%rdi)6114; AVX512F-NEXT: testl $2048, %eax # imm = 0x8006115; AVX512F-NEXT: je .LBB15_246116; AVX512F-NEXT: .LBB15_23: # %cond.store216117; AVX512F-NEXT: vpextrb $11, %xmm0, 11(%rdi)6118; AVX512F-NEXT: testl $4096, %eax # imm = 0x10006119; AVX512F-NEXT: je .LBB15_266120; AVX512F-NEXT: .LBB15_25: # %cond.store236121; AVX512F-NEXT: vpextrb $12, %xmm0, 12(%rdi)6122; AVX512F-NEXT: testl $8192, %eax # imm = 0x20006123; AVX512F-NEXT: je .LBB15_286124; AVX512F-NEXT: .LBB15_27: # %cond.store256125; AVX512F-NEXT: vpextrb $13, %xmm0, 13(%rdi)6126; AVX512F-NEXT: testl $16384, %eax # imm = 0x40006127; AVX512F-NEXT: je .LBB15_306128; AVX512F-NEXT: .LBB15_29: # %cond.store276129; AVX512F-NEXT: vpextrb $14, %xmm0, 14(%rdi)6130; AVX512F-NEXT: testw %ax, %ax6131; AVX512F-NEXT: js .LBB15_316132; AVX512F-NEXT: jmp .LBB15_326133; AVX512F-NEXT: .LBB15_33: # %cond.store316134; AVX512F-NEXT: vpextrb $0, %xmm0, 16(%rdi)6135; AVX512F-NEXT: testl $131072, %eax # imm = 0x200006136; AVX512F-NEXT: je .LBB15_366137; AVX512F-NEXT: .LBB15_35: # %cond.store336138; AVX512F-NEXT: vpextrb $1, %xmm0, 17(%rdi)6139; AVX512F-NEXT: testl $262144, %eax # imm = 0x400006140; AVX512F-NEXT: je .LBB15_386141; AVX512F-NEXT: .LBB15_37: # %cond.store356142; AVX512F-NEXT: vpextrb $2, %xmm0, 18(%rdi)6143; AVX512F-NEXT: testl $524288, %eax # imm = 0x800006144; AVX512F-NEXT: je .LBB15_406145; AVX512F-NEXT: .LBB15_39: # %cond.store376146; AVX512F-NEXT: vpextrb $3, %xmm0, 19(%rdi)6147; AVX512F-NEXT: testl $1048576, %eax # imm = 0x1000006148; AVX512F-NEXT: je .LBB15_426149; AVX512F-NEXT: .LBB15_41: # %cond.store396150; AVX512F-NEXT: vpextrb $4, %xmm0, 20(%rdi)6151; AVX512F-NEXT: testl $2097152, %eax # imm = 0x2000006152; AVX512F-NEXT: je .LBB15_446153; AVX512F-NEXT: .LBB15_43: # %cond.store416154; AVX512F-NEXT: vpextrb $5, %xmm0, 21(%rdi)6155; AVX512F-NEXT: testl $4194304, %eax # imm = 0x4000006156; AVX512F-NEXT: je .LBB15_466157; AVX512F-NEXT: .LBB15_45: # %cond.store436158; AVX512F-NEXT: vpextrb $6, %xmm0, 22(%rdi)6159; AVX512F-NEXT: testl $8388608, %eax # imm = 0x8000006160; AVX512F-NEXT: je .LBB15_486161; AVX512F-NEXT: .LBB15_47: # %cond.store456162; AVX512F-NEXT: vpextrb $7, %xmm0, 23(%rdi)6163; AVX512F-NEXT: testl $16777216, %eax # imm = 0x10000006164; AVX512F-NEXT: je .LBB15_506165; AVX512F-NEXT: .LBB15_49: # %cond.store476166; AVX512F-NEXT: vpextrb $8, %xmm0, 24(%rdi)6167; AVX512F-NEXT: testl $33554432, %eax # imm = 0x20000006168; AVX512F-NEXT: je .LBB15_526169; AVX512F-NEXT: .LBB15_51: # %cond.store496170; AVX512F-NEXT: vpextrb $9, %xmm0, 25(%rdi)6171; AVX512F-NEXT: testl $67108864, %eax # imm = 0x40000006172; AVX512F-NEXT: je .LBB15_546173; AVX512F-NEXT: .LBB15_53: # %cond.store516174; AVX512F-NEXT: vpextrb $10, %xmm0, 26(%rdi)6175; AVX512F-NEXT: testl $134217728, %eax # imm = 0x80000006176; AVX512F-NEXT: je .LBB15_566177; AVX512F-NEXT: .LBB15_55: # %cond.store536178; AVX512F-NEXT: vpextrb $11, %xmm0, 27(%rdi)6179; AVX512F-NEXT: testl $268435456, %eax # imm = 0x100000006180; AVX512F-NEXT: je .LBB15_586181; AVX512F-NEXT: .LBB15_57: # %cond.store556182; AVX512F-NEXT: vpextrb $12, %xmm0, 28(%rdi)6183; AVX512F-NEXT: testl $536870912, %eax # imm = 0x200000006184; AVX512F-NEXT: je .LBB15_606185; AVX512F-NEXT: .LBB15_59: # %cond.store576186; AVX512F-NEXT: vpextrb $13, %xmm0, 29(%rdi)6187; AVX512F-NEXT: testl $1073741824, %eax # imm = 0x400000006188; AVX512F-NEXT: je .LBB15_626189; AVX512F-NEXT: .LBB15_61: # %cond.store596190; AVX512F-NEXT: vpextrb $14, %xmm0, 30(%rdi)6191; AVX512F-NEXT: testl $-2147483648, %eax # imm = 0x800000006192; AVX512F-NEXT: je .LBB15_646193; AVX512F-NEXT: .LBB15_63: # %cond.store616194; AVX512F-NEXT: vpextrb $15, %xmm0, 31(%rdi)6195; AVX512F-NEXT: vzeroupper6196; AVX512F-NEXT: retq6197;6198; AVX512FVL-LABEL: truncstore_v32i16_v32i8:6199; AVX512FVL: # %bb.0:6200; AVX512FVL-NEXT: vpxor %xmm2, %xmm2, %xmm26201; AVX512FVL-NEXT: vpcmpeqb %ymm2, %ymm1, %ymm16202; AVX512FVL-NEXT: vpmovzxwd {{.*#+}} zmm2 = 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],zero6203; AVX512FVL-NEXT: vpmovdb %zmm2, %xmm26204; AVX512FVL-NEXT: vextracti64x4 $1, %zmm0, %ymm06205; 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],zero6206; AVX512FVL-NEXT: vpmovdb %zmm0, %xmm06207; AVX512FVL-NEXT: vinserti128 $1, %xmm0, %ymm2, %ymm06208; AVX512FVL-NEXT: vpmovmskb %ymm1, %eax6209; AVX512FVL-NEXT: notl %eax6210; AVX512FVL-NEXT: testb $1, %al6211; AVX512FVL-NEXT: jne .LBB15_16212; AVX512FVL-NEXT: # %bb.2: # %else6213; AVX512FVL-NEXT: testb $2, %al6214; AVX512FVL-NEXT: jne .LBB15_36215; AVX512FVL-NEXT: .LBB15_4: # %else26216; AVX512FVL-NEXT: testb $4, %al6217; AVX512FVL-NEXT: jne .LBB15_56218; AVX512FVL-NEXT: .LBB15_6: # %else46219; AVX512FVL-NEXT: testb $8, %al6220; AVX512FVL-NEXT: jne .LBB15_76221; AVX512FVL-NEXT: .LBB15_8: # %else66222; AVX512FVL-NEXT: testb $16, %al6223; AVX512FVL-NEXT: jne .LBB15_96224; AVX512FVL-NEXT: .LBB15_10: # %else86225; AVX512FVL-NEXT: testb $32, %al6226; AVX512FVL-NEXT: jne .LBB15_116227; AVX512FVL-NEXT: .LBB15_12: # %else106228; AVX512FVL-NEXT: testb $64, %al6229; AVX512FVL-NEXT: jne .LBB15_136230; AVX512FVL-NEXT: .LBB15_14: # %else126231; AVX512FVL-NEXT: testb %al, %al6232; AVX512FVL-NEXT: js .LBB15_156233; AVX512FVL-NEXT: .LBB15_16: # %else146234; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1006235; AVX512FVL-NEXT: jne .LBB15_176236; AVX512FVL-NEXT: .LBB15_18: # %else166237; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2006238; AVX512FVL-NEXT: jne .LBB15_196239; AVX512FVL-NEXT: .LBB15_20: # %else186240; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4006241; AVX512FVL-NEXT: jne .LBB15_216242; AVX512FVL-NEXT: .LBB15_22: # %else206243; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8006244; AVX512FVL-NEXT: jne .LBB15_236245; AVX512FVL-NEXT: .LBB15_24: # %else226246; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10006247; AVX512FVL-NEXT: jne .LBB15_256248; AVX512FVL-NEXT: .LBB15_26: # %else246249; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20006250; AVX512FVL-NEXT: jne .LBB15_276251; AVX512FVL-NEXT: .LBB15_28: # %else266252; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40006253; AVX512FVL-NEXT: jne .LBB15_296254; AVX512FVL-NEXT: .LBB15_30: # %else286255; AVX512FVL-NEXT: testw %ax, %ax6256; AVX512FVL-NEXT: jns .LBB15_326257; AVX512FVL-NEXT: .LBB15_31: # %cond.store296258; AVX512FVL-NEXT: vpextrb $15, %xmm0, 15(%rdi)6259; AVX512FVL-NEXT: .LBB15_32: # %else306260; AVX512FVL-NEXT: testl $65536, %eax # imm = 0x100006261; AVX512FVL-NEXT: vextracti128 $1, %ymm0, %xmm06262; AVX512FVL-NEXT: jne .LBB15_336263; AVX512FVL-NEXT: # %bb.34: # %else326264; AVX512FVL-NEXT: testl $131072, %eax # imm = 0x200006265; AVX512FVL-NEXT: jne .LBB15_356266; AVX512FVL-NEXT: .LBB15_36: # %else346267; AVX512FVL-NEXT: testl $262144, %eax # imm = 0x400006268; AVX512FVL-NEXT: jne .LBB15_376269; AVX512FVL-NEXT: .LBB15_38: # %else366270; AVX512FVL-NEXT: testl $524288, %eax # imm = 0x800006271; AVX512FVL-NEXT: jne .LBB15_396272; AVX512FVL-NEXT: .LBB15_40: # %else386273; AVX512FVL-NEXT: testl $1048576, %eax # imm = 0x1000006274; AVX512FVL-NEXT: jne .LBB15_416275; AVX512FVL-NEXT: .LBB15_42: # %else406276; AVX512FVL-NEXT: testl $2097152, %eax # imm = 0x2000006277; AVX512FVL-NEXT: jne .LBB15_436278; AVX512FVL-NEXT: .LBB15_44: # %else426279; AVX512FVL-NEXT: testl $4194304, %eax # imm = 0x4000006280; AVX512FVL-NEXT: jne .LBB15_456281; AVX512FVL-NEXT: .LBB15_46: # %else446282; AVX512FVL-NEXT: testl $8388608, %eax # imm = 0x8000006283; AVX512FVL-NEXT: jne .LBB15_476284; AVX512FVL-NEXT: .LBB15_48: # %else466285; AVX512FVL-NEXT: testl $16777216, %eax # imm = 0x10000006286; AVX512FVL-NEXT: jne .LBB15_496287; AVX512FVL-NEXT: .LBB15_50: # %else486288; AVX512FVL-NEXT: testl $33554432, %eax # imm = 0x20000006289; AVX512FVL-NEXT: jne .LBB15_516290; AVX512FVL-NEXT: .LBB15_52: # %else506291; AVX512FVL-NEXT: testl $67108864, %eax # imm = 0x40000006292; AVX512FVL-NEXT: jne .LBB15_536293; AVX512FVL-NEXT: .LBB15_54: # %else526294; AVX512FVL-NEXT: testl $134217728, %eax # imm = 0x80000006295; AVX512FVL-NEXT: jne .LBB15_556296; AVX512FVL-NEXT: .LBB15_56: # %else546297; AVX512FVL-NEXT: testl $268435456, %eax # imm = 0x100000006298; AVX512FVL-NEXT: jne .LBB15_576299; AVX512FVL-NEXT: .LBB15_58: # %else566300; AVX512FVL-NEXT: testl $536870912, %eax # imm = 0x200000006301; AVX512FVL-NEXT: jne .LBB15_596302; AVX512FVL-NEXT: .LBB15_60: # %else586303; AVX512FVL-NEXT: testl $1073741824, %eax # imm = 0x400000006304; AVX512FVL-NEXT: jne .LBB15_616305; AVX512FVL-NEXT: .LBB15_62: # %else606306; AVX512FVL-NEXT: testl $-2147483648, %eax # imm = 0x800000006307; AVX512FVL-NEXT: jne .LBB15_636308; AVX512FVL-NEXT: .LBB15_64: # %else626309; AVX512FVL-NEXT: vzeroupper6310; AVX512FVL-NEXT: retq6311; AVX512FVL-NEXT: .LBB15_1: # %cond.store6312; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)6313; AVX512FVL-NEXT: testb $2, %al6314; AVX512FVL-NEXT: je .LBB15_46315; AVX512FVL-NEXT: .LBB15_3: # %cond.store16316; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)6317; AVX512FVL-NEXT: testb $4, %al6318; AVX512FVL-NEXT: je .LBB15_66319; AVX512FVL-NEXT: .LBB15_5: # %cond.store36320; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)6321; AVX512FVL-NEXT: testb $8, %al6322; AVX512FVL-NEXT: je .LBB15_86323; AVX512FVL-NEXT: .LBB15_7: # %cond.store56324; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)6325; AVX512FVL-NEXT: testb $16, %al6326; AVX512FVL-NEXT: je .LBB15_106327; AVX512FVL-NEXT: .LBB15_9: # %cond.store76328; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)6329; AVX512FVL-NEXT: testb $32, %al6330; AVX512FVL-NEXT: je .LBB15_126331; AVX512FVL-NEXT: .LBB15_11: # %cond.store96332; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)6333; AVX512FVL-NEXT: testb $64, %al6334; AVX512FVL-NEXT: je .LBB15_146335; AVX512FVL-NEXT: .LBB15_13: # %cond.store116336; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)6337; AVX512FVL-NEXT: testb %al, %al6338; AVX512FVL-NEXT: jns .LBB15_166339; AVX512FVL-NEXT: .LBB15_15: # %cond.store136340; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)6341; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1006342; AVX512FVL-NEXT: je .LBB15_186343; AVX512FVL-NEXT: .LBB15_17: # %cond.store156344; AVX512FVL-NEXT: vpextrb $8, %xmm0, 8(%rdi)6345; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2006346; AVX512FVL-NEXT: je .LBB15_206347; AVX512FVL-NEXT: .LBB15_19: # %cond.store176348; AVX512FVL-NEXT: vpextrb $9, %xmm0, 9(%rdi)6349; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4006350; AVX512FVL-NEXT: je .LBB15_226351; AVX512FVL-NEXT: .LBB15_21: # %cond.store196352; AVX512FVL-NEXT: vpextrb $10, %xmm0, 10(%rdi)6353; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8006354; AVX512FVL-NEXT: je .LBB15_246355; AVX512FVL-NEXT: .LBB15_23: # %cond.store216356; AVX512FVL-NEXT: vpextrb $11, %xmm0, 11(%rdi)6357; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10006358; AVX512FVL-NEXT: je .LBB15_266359; AVX512FVL-NEXT: .LBB15_25: # %cond.store236360; AVX512FVL-NEXT: vpextrb $12, %xmm0, 12(%rdi)6361; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20006362; AVX512FVL-NEXT: je .LBB15_286363; AVX512FVL-NEXT: .LBB15_27: # %cond.store256364; AVX512FVL-NEXT: vpextrb $13, %xmm0, 13(%rdi)6365; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40006366; AVX512FVL-NEXT: je .LBB15_306367; AVX512FVL-NEXT: .LBB15_29: # %cond.store276368; AVX512FVL-NEXT: vpextrb $14, %xmm0, 14(%rdi)6369; AVX512FVL-NEXT: testw %ax, %ax6370; AVX512FVL-NEXT: js .LBB15_316371; AVX512FVL-NEXT: jmp .LBB15_326372; AVX512FVL-NEXT: .LBB15_33: # %cond.store316373; AVX512FVL-NEXT: vpextrb $0, %xmm0, 16(%rdi)6374; AVX512FVL-NEXT: testl $131072, %eax # imm = 0x200006375; AVX512FVL-NEXT: je .LBB15_366376; AVX512FVL-NEXT: .LBB15_35: # %cond.store336377; AVX512FVL-NEXT: vpextrb $1, %xmm0, 17(%rdi)6378; AVX512FVL-NEXT: testl $262144, %eax # imm = 0x400006379; AVX512FVL-NEXT: je .LBB15_386380; AVX512FVL-NEXT: .LBB15_37: # %cond.store356381; AVX512FVL-NEXT: vpextrb $2, %xmm0, 18(%rdi)6382; AVX512FVL-NEXT: testl $524288, %eax # imm = 0x800006383; AVX512FVL-NEXT: je .LBB15_406384; AVX512FVL-NEXT: .LBB15_39: # %cond.store376385; AVX512FVL-NEXT: vpextrb $3, %xmm0, 19(%rdi)6386; AVX512FVL-NEXT: testl $1048576, %eax # imm = 0x1000006387; AVX512FVL-NEXT: je .LBB15_426388; AVX512FVL-NEXT: .LBB15_41: # %cond.store396389; AVX512FVL-NEXT: vpextrb $4, %xmm0, 20(%rdi)6390; AVX512FVL-NEXT: testl $2097152, %eax # imm = 0x2000006391; AVX512FVL-NEXT: je .LBB15_446392; AVX512FVL-NEXT: .LBB15_43: # %cond.store416393; AVX512FVL-NEXT: vpextrb $5, %xmm0, 21(%rdi)6394; AVX512FVL-NEXT: testl $4194304, %eax # imm = 0x4000006395; AVX512FVL-NEXT: je .LBB15_466396; AVX512FVL-NEXT: .LBB15_45: # %cond.store436397; AVX512FVL-NEXT: vpextrb $6, %xmm0, 22(%rdi)6398; AVX512FVL-NEXT: testl $8388608, %eax # imm = 0x8000006399; AVX512FVL-NEXT: je .LBB15_486400; AVX512FVL-NEXT: .LBB15_47: # %cond.store456401; AVX512FVL-NEXT: vpextrb $7, %xmm0, 23(%rdi)6402; AVX512FVL-NEXT: testl $16777216, %eax # imm = 0x10000006403; AVX512FVL-NEXT: je .LBB15_506404; AVX512FVL-NEXT: .LBB15_49: # %cond.store476405; AVX512FVL-NEXT: vpextrb $8, %xmm0, 24(%rdi)6406; AVX512FVL-NEXT: testl $33554432, %eax # imm = 0x20000006407; AVX512FVL-NEXT: je .LBB15_526408; AVX512FVL-NEXT: .LBB15_51: # %cond.store496409; AVX512FVL-NEXT: vpextrb $9, %xmm0, 25(%rdi)6410; AVX512FVL-NEXT: testl $67108864, %eax # imm = 0x40000006411; AVX512FVL-NEXT: je .LBB15_546412; AVX512FVL-NEXT: .LBB15_53: # %cond.store516413; AVX512FVL-NEXT: vpextrb $10, %xmm0, 26(%rdi)6414; AVX512FVL-NEXT: testl $134217728, %eax # imm = 0x80000006415; AVX512FVL-NEXT: je .LBB15_566416; AVX512FVL-NEXT: .LBB15_55: # %cond.store536417; AVX512FVL-NEXT: vpextrb $11, %xmm0, 27(%rdi)6418; AVX512FVL-NEXT: testl $268435456, %eax # imm = 0x100000006419; AVX512FVL-NEXT: je .LBB15_586420; AVX512FVL-NEXT: .LBB15_57: # %cond.store556421; AVX512FVL-NEXT: vpextrb $12, %xmm0, 28(%rdi)6422; AVX512FVL-NEXT: testl $536870912, %eax # imm = 0x200000006423; AVX512FVL-NEXT: je .LBB15_606424; AVX512FVL-NEXT: .LBB15_59: # %cond.store576425; AVX512FVL-NEXT: vpextrb $13, %xmm0, 29(%rdi)6426; AVX512FVL-NEXT: testl $1073741824, %eax # imm = 0x400000006427; AVX512FVL-NEXT: je .LBB15_626428; AVX512FVL-NEXT: .LBB15_61: # %cond.store596429; AVX512FVL-NEXT: vpextrb $14, %xmm0, 30(%rdi)6430; AVX512FVL-NEXT: testl $-2147483648, %eax # imm = 0x800000006431; AVX512FVL-NEXT: je .LBB15_646432; AVX512FVL-NEXT: .LBB15_63: # %cond.store616433; AVX512FVL-NEXT: vpextrb $15, %xmm0, 31(%rdi)6434; AVX512FVL-NEXT: vzeroupper6435; AVX512FVL-NEXT: retq6436;6437; AVX512BW-LABEL: truncstore_v32i16_v32i8:6438; AVX512BW: # %bb.0:6439; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm16440; AVX512BW-NEXT: vptestmb %zmm1, %zmm1, %k16441; AVX512BW-NEXT: vpmovwb %zmm0, (%rdi) {%k1}6442; AVX512BW-NEXT: vzeroupper6443; AVX512BW-NEXT: retq6444;6445; AVX512BWVL-LABEL: truncstore_v32i16_v32i8:6446; AVX512BWVL: # %bb.0:6447; AVX512BWVL-NEXT: vptestmb %ymm1, %ymm1, %k16448; AVX512BWVL-NEXT: vpmovwb %zmm0, (%rdi) {%k1}6449; AVX512BWVL-NEXT: vzeroupper6450; AVX512BWVL-NEXT: retq6451 %a = icmp ne <32 x i8> %mask, zeroinitializer6452 %b = trunc <32 x i16> %x to <32 x i8>6453 call void @llvm.masked.store.v32i8.p0(<32 x i8> %b, ptr %p, i32 1, <32 x i1> %a)6454 ret void6455}6456 6457define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {6458; SSE2-LABEL: truncstore_v16i16_v16i8:6459; SSE2: # %bb.0:6460; SSE2-NEXT: pxor %xmm3, %xmm36461; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]6462; SSE2-NEXT: pand %xmm4, %xmm16463; SSE2-NEXT: pand %xmm4, %xmm06464; SSE2-NEXT: packuswb %xmm1, %xmm06465; SSE2-NEXT: pcmpeqb %xmm2, %xmm36466; SSE2-NEXT: pmovmskb %xmm3, %eax6467; SSE2-NEXT: xorl $65535, %eax # imm = 0xFFFF6468; SSE2-NEXT: testb $1, %al6469; SSE2-NEXT: movd %xmm0, %ecx6470; SSE2-NEXT: jne .LBB16_16471; SSE2-NEXT: # %bb.2: # %else6472; SSE2-NEXT: testb $2, %al6473; SSE2-NEXT: jne .LBB16_36474; SSE2-NEXT: .LBB16_4: # %else26475; SSE2-NEXT: testb $4, %al6476; SSE2-NEXT: jne .LBB16_56477; SSE2-NEXT: .LBB16_6: # %else46478; SSE2-NEXT: testb $8, %al6479; SSE2-NEXT: je .LBB16_86480; SSE2-NEXT: .LBB16_7: # %cond.store56481; SSE2-NEXT: shrl $24, %ecx6482; SSE2-NEXT: movb %cl, 3(%rdi)6483; SSE2-NEXT: .LBB16_8: # %else66484; SSE2-NEXT: testb $16, %al6485; SSE2-NEXT: pextrw $2, %xmm0, %ecx6486; SSE2-NEXT: je .LBB16_106487; SSE2-NEXT: # %bb.9: # %cond.store76488; SSE2-NEXT: movb %cl, 4(%rdi)6489; SSE2-NEXT: .LBB16_10: # %else86490; SSE2-NEXT: testb $32, %al6491; SSE2-NEXT: je .LBB16_126492; SSE2-NEXT: # %bb.11: # %cond.store96493; SSE2-NEXT: movb %ch, 5(%rdi)6494; SSE2-NEXT: .LBB16_12: # %else106495; SSE2-NEXT: testb $64, %al6496; SSE2-NEXT: pextrw $3, %xmm0, %ecx6497; SSE2-NEXT: je .LBB16_146498; SSE2-NEXT: # %bb.13: # %cond.store116499; SSE2-NEXT: movb %cl, 6(%rdi)6500; SSE2-NEXT: .LBB16_14: # %else126501; SSE2-NEXT: testb %al, %al6502; SSE2-NEXT: jns .LBB16_166503; SSE2-NEXT: # %bb.15: # %cond.store136504; SSE2-NEXT: movb %ch, 7(%rdi)6505; SSE2-NEXT: .LBB16_16: # %else146506; SSE2-NEXT: testl $256, %eax # imm = 0x1006507; SSE2-NEXT: pextrw $4, %xmm0, %ecx6508; SSE2-NEXT: je .LBB16_186509; SSE2-NEXT: # %bb.17: # %cond.store156510; SSE2-NEXT: movb %cl, 8(%rdi)6511; SSE2-NEXT: .LBB16_18: # %else166512; SSE2-NEXT: testl $512, %eax # imm = 0x2006513; SSE2-NEXT: je .LBB16_206514; SSE2-NEXT: # %bb.19: # %cond.store176515; SSE2-NEXT: movb %ch, 9(%rdi)6516; SSE2-NEXT: .LBB16_20: # %else186517; SSE2-NEXT: testl $1024, %eax # imm = 0x4006518; SSE2-NEXT: pextrw $5, %xmm0, %ecx6519; SSE2-NEXT: je .LBB16_226520; SSE2-NEXT: # %bb.21: # %cond.store196521; SSE2-NEXT: movb %cl, 10(%rdi)6522; SSE2-NEXT: .LBB16_22: # %else206523; SSE2-NEXT: testl $2048, %eax # imm = 0x8006524; SSE2-NEXT: je .LBB16_246525; SSE2-NEXT: # %bb.23: # %cond.store216526; SSE2-NEXT: movb %ch, 11(%rdi)6527; SSE2-NEXT: .LBB16_24: # %else226528; SSE2-NEXT: testl $4096, %eax # imm = 0x10006529; SSE2-NEXT: pextrw $6, %xmm0, %ecx6530; SSE2-NEXT: je .LBB16_266531; SSE2-NEXT: # %bb.25: # %cond.store236532; SSE2-NEXT: movb %cl, 12(%rdi)6533; SSE2-NEXT: .LBB16_26: # %else246534; SSE2-NEXT: testl $8192, %eax # imm = 0x20006535; SSE2-NEXT: je .LBB16_286536; SSE2-NEXT: # %bb.27: # %cond.store256537; SSE2-NEXT: movb %ch, 13(%rdi)6538; SSE2-NEXT: .LBB16_28: # %else266539; SSE2-NEXT: testl $16384, %eax # imm = 0x40006540; SSE2-NEXT: pextrw $7, %xmm0, %ecx6541; SSE2-NEXT: jne .LBB16_296542; SSE2-NEXT: # %bb.30: # %else286543; SSE2-NEXT: testl $32768, %eax # imm = 0x80006544; SSE2-NEXT: jne .LBB16_316545; SSE2-NEXT: .LBB16_32: # %else306546; SSE2-NEXT: retq6547; SSE2-NEXT: .LBB16_1: # %cond.store6548; SSE2-NEXT: movb %cl, (%rdi)6549; SSE2-NEXT: testb $2, %al6550; SSE2-NEXT: je .LBB16_46551; SSE2-NEXT: .LBB16_3: # %cond.store16552; SSE2-NEXT: movb %ch, 1(%rdi)6553; SSE2-NEXT: testb $4, %al6554; SSE2-NEXT: je .LBB16_66555; SSE2-NEXT: .LBB16_5: # %cond.store36556; SSE2-NEXT: movl %ecx, %edx6557; SSE2-NEXT: shrl $16, %edx6558; SSE2-NEXT: movb %dl, 2(%rdi)6559; SSE2-NEXT: testb $8, %al6560; SSE2-NEXT: jne .LBB16_76561; SSE2-NEXT: jmp .LBB16_86562; SSE2-NEXT: .LBB16_29: # %cond.store276563; SSE2-NEXT: movb %cl, 14(%rdi)6564; SSE2-NEXT: testl $32768, %eax # imm = 0x80006565; SSE2-NEXT: je .LBB16_326566; SSE2-NEXT: .LBB16_31: # %cond.store296567; SSE2-NEXT: movb %ch, 15(%rdi)6568; SSE2-NEXT: retq6569;6570; SSE4-LABEL: truncstore_v16i16_v16i8:6571; SSE4: # %bb.0:6572; SSE4-NEXT: pxor %xmm3, %xmm36573; SSE4-NEXT: pmovzxbw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]6574; SSE4-NEXT: pand %xmm4, %xmm16575; SSE4-NEXT: pand %xmm4, %xmm06576; SSE4-NEXT: packuswb %xmm1, %xmm06577; SSE4-NEXT: pcmpeqb %xmm2, %xmm36578; SSE4-NEXT: pmovmskb %xmm3, %eax6579; SSE4-NEXT: xorl $65535, %eax # imm = 0xFFFF6580; SSE4-NEXT: testb $1, %al6581; SSE4-NEXT: jne .LBB16_16582; SSE4-NEXT: # %bb.2: # %else6583; SSE4-NEXT: testb $2, %al6584; SSE4-NEXT: jne .LBB16_36585; SSE4-NEXT: .LBB16_4: # %else26586; SSE4-NEXT: testb $4, %al6587; SSE4-NEXT: jne .LBB16_56588; SSE4-NEXT: .LBB16_6: # %else46589; SSE4-NEXT: testb $8, %al6590; SSE4-NEXT: jne .LBB16_76591; SSE4-NEXT: .LBB16_8: # %else66592; SSE4-NEXT: testb $16, %al6593; SSE4-NEXT: jne .LBB16_96594; SSE4-NEXT: .LBB16_10: # %else86595; SSE4-NEXT: testb $32, %al6596; SSE4-NEXT: jne .LBB16_116597; SSE4-NEXT: .LBB16_12: # %else106598; SSE4-NEXT: testb $64, %al6599; SSE4-NEXT: jne .LBB16_136600; SSE4-NEXT: .LBB16_14: # %else126601; SSE4-NEXT: testb %al, %al6602; SSE4-NEXT: js .LBB16_156603; SSE4-NEXT: .LBB16_16: # %else146604; SSE4-NEXT: testl $256, %eax # imm = 0x1006605; SSE4-NEXT: jne .LBB16_176606; SSE4-NEXT: .LBB16_18: # %else166607; SSE4-NEXT: testl $512, %eax # imm = 0x2006608; SSE4-NEXT: jne .LBB16_196609; SSE4-NEXT: .LBB16_20: # %else186610; SSE4-NEXT: testl $1024, %eax # imm = 0x4006611; SSE4-NEXT: jne .LBB16_216612; SSE4-NEXT: .LBB16_22: # %else206613; SSE4-NEXT: testl $2048, %eax # imm = 0x8006614; SSE4-NEXT: jne .LBB16_236615; SSE4-NEXT: .LBB16_24: # %else226616; SSE4-NEXT: testl $4096, %eax # imm = 0x10006617; SSE4-NEXT: jne .LBB16_256618; SSE4-NEXT: .LBB16_26: # %else246619; SSE4-NEXT: testl $8192, %eax # imm = 0x20006620; SSE4-NEXT: jne .LBB16_276621; SSE4-NEXT: .LBB16_28: # %else266622; SSE4-NEXT: testl $16384, %eax # imm = 0x40006623; SSE4-NEXT: jne .LBB16_296624; SSE4-NEXT: .LBB16_30: # %else286625; SSE4-NEXT: testl $32768, %eax # imm = 0x80006626; SSE4-NEXT: jne .LBB16_316627; SSE4-NEXT: .LBB16_32: # %else306628; SSE4-NEXT: retq6629; SSE4-NEXT: .LBB16_1: # %cond.store6630; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)6631; SSE4-NEXT: testb $2, %al6632; SSE4-NEXT: je .LBB16_46633; SSE4-NEXT: .LBB16_3: # %cond.store16634; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)6635; SSE4-NEXT: testb $4, %al6636; SSE4-NEXT: je .LBB16_66637; SSE4-NEXT: .LBB16_5: # %cond.store36638; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)6639; SSE4-NEXT: testb $8, %al6640; SSE4-NEXT: je .LBB16_86641; SSE4-NEXT: .LBB16_7: # %cond.store56642; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)6643; SSE4-NEXT: testb $16, %al6644; SSE4-NEXT: je .LBB16_106645; SSE4-NEXT: .LBB16_9: # %cond.store76646; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)6647; SSE4-NEXT: testb $32, %al6648; SSE4-NEXT: je .LBB16_126649; SSE4-NEXT: .LBB16_11: # %cond.store96650; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)6651; SSE4-NEXT: testb $64, %al6652; SSE4-NEXT: je .LBB16_146653; SSE4-NEXT: .LBB16_13: # %cond.store116654; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)6655; SSE4-NEXT: testb %al, %al6656; SSE4-NEXT: jns .LBB16_166657; SSE4-NEXT: .LBB16_15: # %cond.store136658; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)6659; SSE4-NEXT: testl $256, %eax # imm = 0x1006660; SSE4-NEXT: je .LBB16_186661; SSE4-NEXT: .LBB16_17: # %cond.store156662; SSE4-NEXT: pextrb $8, %xmm0, 8(%rdi)6663; SSE4-NEXT: testl $512, %eax # imm = 0x2006664; SSE4-NEXT: je .LBB16_206665; SSE4-NEXT: .LBB16_19: # %cond.store176666; SSE4-NEXT: pextrb $9, %xmm0, 9(%rdi)6667; SSE4-NEXT: testl $1024, %eax # imm = 0x4006668; SSE4-NEXT: je .LBB16_226669; SSE4-NEXT: .LBB16_21: # %cond.store196670; SSE4-NEXT: pextrb $10, %xmm0, 10(%rdi)6671; SSE4-NEXT: testl $2048, %eax # imm = 0x8006672; SSE4-NEXT: je .LBB16_246673; SSE4-NEXT: .LBB16_23: # %cond.store216674; SSE4-NEXT: pextrb $11, %xmm0, 11(%rdi)6675; SSE4-NEXT: testl $4096, %eax # imm = 0x10006676; SSE4-NEXT: je .LBB16_266677; SSE4-NEXT: .LBB16_25: # %cond.store236678; SSE4-NEXT: pextrb $12, %xmm0, 12(%rdi)6679; SSE4-NEXT: testl $8192, %eax # imm = 0x20006680; SSE4-NEXT: je .LBB16_286681; SSE4-NEXT: .LBB16_27: # %cond.store256682; SSE4-NEXT: pextrb $13, %xmm0, 13(%rdi)6683; SSE4-NEXT: testl $16384, %eax # imm = 0x40006684; SSE4-NEXT: je .LBB16_306685; SSE4-NEXT: .LBB16_29: # %cond.store276686; SSE4-NEXT: pextrb $14, %xmm0, 14(%rdi)6687; SSE4-NEXT: testl $32768, %eax # imm = 0x80006688; SSE4-NEXT: je .LBB16_326689; SSE4-NEXT: .LBB16_31: # %cond.store296690; SSE4-NEXT: pextrb $15, %xmm0, 15(%rdi)6691; SSE4-NEXT: retq6692;6693; AVX1-LABEL: truncstore_v16i16_v16i8:6694; AVX1: # %bb.0:6695; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm26696; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm06697; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm36698; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm06699; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm16700; AVX1-NEXT: vpmovmskb %xmm1, %eax6701; AVX1-NEXT: xorl $65535, %eax # imm = 0xFFFF6702; AVX1-NEXT: testb $1, %al6703; AVX1-NEXT: jne .LBB16_16704; AVX1-NEXT: # %bb.2: # %else6705; AVX1-NEXT: testb $2, %al6706; AVX1-NEXT: jne .LBB16_36707; AVX1-NEXT: .LBB16_4: # %else26708; AVX1-NEXT: testb $4, %al6709; AVX1-NEXT: jne .LBB16_56710; AVX1-NEXT: .LBB16_6: # %else46711; AVX1-NEXT: testb $8, %al6712; AVX1-NEXT: jne .LBB16_76713; AVX1-NEXT: .LBB16_8: # %else66714; AVX1-NEXT: testb $16, %al6715; AVX1-NEXT: jne .LBB16_96716; AVX1-NEXT: .LBB16_10: # %else86717; AVX1-NEXT: testb $32, %al6718; AVX1-NEXT: jne .LBB16_116719; AVX1-NEXT: .LBB16_12: # %else106720; AVX1-NEXT: testb $64, %al6721; AVX1-NEXT: jne .LBB16_136722; AVX1-NEXT: .LBB16_14: # %else126723; AVX1-NEXT: testb %al, %al6724; AVX1-NEXT: js .LBB16_156725; AVX1-NEXT: .LBB16_16: # %else146726; AVX1-NEXT: testl $256, %eax # imm = 0x1006727; AVX1-NEXT: jne .LBB16_176728; AVX1-NEXT: .LBB16_18: # %else166729; AVX1-NEXT: testl $512, %eax # imm = 0x2006730; AVX1-NEXT: jne .LBB16_196731; AVX1-NEXT: .LBB16_20: # %else186732; AVX1-NEXT: testl $1024, %eax # imm = 0x4006733; AVX1-NEXT: jne .LBB16_216734; AVX1-NEXT: .LBB16_22: # %else206735; AVX1-NEXT: testl $2048, %eax # imm = 0x8006736; AVX1-NEXT: jne .LBB16_236737; AVX1-NEXT: .LBB16_24: # %else226738; AVX1-NEXT: testl $4096, %eax # imm = 0x10006739; AVX1-NEXT: jne .LBB16_256740; AVX1-NEXT: .LBB16_26: # %else246741; AVX1-NEXT: testl $8192, %eax # imm = 0x20006742; AVX1-NEXT: jne .LBB16_276743; AVX1-NEXT: .LBB16_28: # %else266744; AVX1-NEXT: testl $16384, %eax # imm = 0x40006745; AVX1-NEXT: jne .LBB16_296746; AVX1-NEXT: .LBB16_30: # %else286747; AVX1-NEXT: testl $32768, %eax # imm = 0x80006748; AVX1-NEXT: jne .LBB16_316749; AVX1-NEXT: .LBB16_32: # %else306750; AVX1-NEXT: vzeroupper6751; AVX1-NEXT: retq6752; AVX1-NEXT: .LBB16_1: # %cond.store6753; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)6754; AVX1-NEXT: testb $2, %al6755; AVX1-NEXT: je .LBB16_46756; AVX1-NEXT: .LBB16_3: # %cond.store16757; AVX1-NEXT: vpextrb $1, %xmm0, 1(%rdi)6758; AVX1-NEXT: testb $4, %al6759; AVX1-NEXT: je .LBB16_66760; AVX1-NEXT: .LBB16_5: # %cond.store36761; AVX1-NEXT: vpextrb $2, %xmm0, 2(%rdi)6762; AVX1-NEXT: testb $8, %al6763; AVX1-NEXT: je .LBB16_86764; AVX1-NEXT: .LBB16_7: # %cond.store56765; AVX1-NEXT: vpextrb $3, %xmm0, 3(%rdi)6766; AVX1-NEXT: testb $16, %al6767; AVX1-NEXT: je .LBB16_106768; AVX1-NEXT: .LBB16_9: # %cond.store76769; AVX1-NEXT: vpextrb $4, %xmm0, 4(%rdi)6770; AVX1-NEXT: testb $32, %al6771; AVX1-NEXT: je .LBB16_126772; AVX1-NEXT: .LBB16_11: # %cond.store96773; AVX1-NEXT: vpextrb $5, %xmm0, 5(%rdi)6774; AVX1-NEXT: testb $64, %al6775; AVX1-NEXT: je .LBB16_146776; AVX1-NEXT: .LBB16_13: # %cond.store116777; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)6778; AVX1-NEXT: testb %al, %al6779; AVX1-NEXT: jns .LBB16_166780; AVX1-NEXT: .LBB16_15: # %cond.store136781; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)6782; AVX1-NEXT: testl $256, %eax # imm = 0x1006783; AVX1-NEXT: je .LBB16_186784; AVX1-NEXT: .LBB16_17: # %cond.store156785; AVX1-NEXT: vpextrb $8, %xmm0, 8(%rdi)6786; AVX1-NEXT: testl $512, %eax # imm = 0x2006787; AVX1-NEXT: je .LBB16_206788; AVX1-NEXT: .LBB16_19: # %cond.store176789; AVX1-NEXT: vpextrb $9, %xmm0, 9(%rdi)6790; AVX1-NEXT: testl $1024, %eax # imm = 0x4006791; AVX1-NEXT: je .LBB16_226792; AVX1-NEXT: .LBB16_21: # %cond.store196793; AVX1-NEXT: vpextrb $10, %xmm0, 10(%rdi)6794; AVX1-NEXT: testl $2048, %eax # imm = 0x8006795; AVX1-NEXT: je .LBB16_246796; AVX1-NEXT: .LBB16_23: # %cond.store216797; AVX1-NEXT: vpextrb $11, %xmm0, 11(%rdi)6798; AVX1-NEXT: testl $4096, %eax # imm = 0x10006799; AVX1-NEXT: je .LBB16_266800; AVX1-NEXT: .LBB16_25: # %cond.store236801; AVX1-NEXT: vpextrb $12, %xmm0, 12(%rdi)6802; AVX1-NEXT: testl $8192, %eax # imm = 0x20006803; AVX1-NEXT: je .LBB16_286804; AVX1-NEXT: .LBB16_27: # %cond.store256805; AVX1-NEXT: vpextrb $13, %xmm0, 13(%rdi)6806; AVX1-NEXT: testl $16384, %eax # imm = 0x40006807; AVX1-NEXT: je .LBB16_306808; AVX1-NEXT: .LBB16_29: # %cond.store276809; AVX1-NEXT: vpextrb $14, %xmm0, 14(%rdi)6810; AVX1-NEXT: testl $32768, %eax # imm = 0x80006811; AVX1-NEXT: je .LBB16_326812; AVX1-NEXT: .LBB16_31: # %cond.store296813; AVX1-NEXT: vpextrb $15, %xmm0, 15(%rdi)6814; AVX1-NEXT: vzeroupper6815; AVX1-NEXT: retq6816;6817; AVX2-LABEL: truncstore_v16i16_v16i8:6818; AVX2: # %bb.0:6819; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm26820; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm06821; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm36822; AVX2-NEXT: vpackuswb %xmm3, %xmm0, %xmm06823; AVX2-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm16824; AVX2-NEXT: vpmovmskb %xmm1, %eax6825; AVX2-NEXT: xorl $65535, %eax # imm = 0xFFFF6826; AVX2-NEXT: testb $1, %al6827; AVX2-NEXT: jne .LBB16_16828; AVX2-NEXT: # %bb.2: # %else6829; AVX2-NEXT: testb $2, %al6830; AVX2-NEXT: jne .LBB16_36831; AVX2-NEXT: .LBB16_4: # %else26832; AVX2-NEXT: testb $4, %al6833; AVX2-NEXT: jne .LBB16_56834; AVX2-NEXT: .LBB16_6: # %else46835; AVX2-NEXT: testb $8, %al6836; AVX2-NEXT: jne .LBB16_76837; AVX2-NEXT: .LBB16_8: # %else66838; AVX2-NEXT: testb $16, %al6839; AVX2-NEXT: jne .LBB16_96840; AVX2-NEXT: .LBB16_10: # %else86841; AVX2-NEXT: testb $32, %al6842; AVX2-NEXT: jne .LBB16_116843; AVX2-NEXT: .LBB16_12: # %else106844; AVX2-NEXT: testb $64, %al6845; AVX2-NEXT: jne .LBB16_136846; AVX2-NEXT: .LBB16_14: # %else126847; AVX2-NEXT: testb %al, %al6848; AVX2-NEXT: js .LBB16_156849; AVX2-NEXT: .LBB16_16: # %else146850; AVX2-NEXT: testl $256, %eax # imm = 0x1006851; AVX2-NEXT: jne .LBB16_176852; AVX2-NEXT: .LBB16_18: # %else166853; AVX2-NEXT: testl $512, %eax # imm = 0x2006854; AVX2-NEXT: jne .LBB16_196855; AVX2-NEXT: .LBB16_20: # %else186856; AVX2-NEXT: testl $1024, %eax # imm = 0x4006857; AVX2-NEXT: jne .LBB16_216858; AVX2-NEXT: .LBB16_22: # %else206859; AVX2-NEXT: testl $2048, %eax # imm = 0x8006860; AVX2-NEXT: jne .LBB16_236861; AVX2-NEXT: .LBB16_24: # %else226862; AVX2-NEXT: testl $4096, %eax # imm = 0x10006863; AVX2-NEXT: jne .LBB16_256864; AVX2-NEXT: .LBB16_26: # %else246865; AVX2-NEXT: testl $8192, %eax # imm = 0x20006866; AVX2-NEXT: jne .LBB16_276867; AVX2-NEXT: .LBB16_28: # %else266868; AVX2-NEXT: testl $16384, %eax # imm = 0x40006869; AVX2-NEXT: jne .LBB16_296870; AVX2-NEXT: .LBB16_30: # %else286871; AVX2-NEXT: testl $32768, %eax # imm = 0x80006872; AVX2-NEXT: jne .LBB16_316873; AVX2-NEXT: .LBB16_32: # %else306874; AVX2-NEXT: vzeroupper6875; AVX2-NEXT: retq6876; AVX2-NEXT: .LBB16_1: # %cond.store6877; AVX2-NEXT: vpextrb $0, %xmm0, (%rdi)6878; AVX2-NEXT: testb $2, %al6879; AVX2-NEXT: je .LBB16_46880; AVX2-NEXT: .LBB16_3: # %cond.store16881; AVX2-NEXT: vpextrb $1, %xmm0, 1(%rdi)6882; AVX2-NEXT: testb $4, %al6883; AVX2-NEXT: je .LBB16_66884; AVX2-NEXT: .LBB16_5: # %cond.store36885; AVX2-NEXT: vpextrb $2, %xmm0, 2(%rdi)6886; AVX2-NEXT: testb $8, %al6887; AVX2-NEXT: je .LBB16_86888; AVX2-NEXT: .LBB16_7: # %cond.store56889; AVX2-NEXT: vpextrb $3, %xmm0, 3(%rdi)6890; AVX2-NEXT: testb $16, %al6891; AVX2-NEXT: je .LBB16_106892; AVX2-NEXT: .LBB16_9: # %cond.store76893; AVX2-NEXT: vpextrb $4, %xmm0, 4(%rdi)6894; AVX2-NEXT: testb $32, %al6895; AVX2-NEXT: je .LBB16_126896; AVX2-NEXT: .LBB16_11: # %cond.store96897; AVX2-NEXT: vpextrb $5, %xmm0, 5(%rdi)6898; AVX2-NEXT: testb $64, %al6899; AVX2-NEXT: je .LBB16_146900; AVX2-NEXT: .LBB16_13: # %cond.store116901; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)6902; AVX2-NEXT: testb %al, %al6903; AVX2-NEXT: jns .LBB16_166904; AVX2-NEXT: .LBB16_15: # %cond.store136905; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)6906; AVX2-NEXT: testl $256, %eax # imm = 0x1006907; AVX2-NEXT: je .LBB16_186908; AVX2-NEXT: .LBB16_17: # %cond.store156909; AVX2-NEXT: vpextrb $8, %xmm0, 8(%rdi)6910; AVX2-NEXT: testl $512, %eax # imm = 0x2006911; AVX2-NEXT: je .LBB16_206912; AVX2-NEXT: .LBB16_19: # %cond.store176913; AVX2-NEXT: vpextrb $9, %xmm0, 9(%rdi)6914; AVX2-NEXT: testl $1024, %eax # imm = 0x4006915; AVX2-NEXT: je .LBB16_226916; AVX2-NEXT: .LBB16_21: # %cond.store196917; AVX2-NEXT: vpextrb $10, %xmm0, 10(%rdi)6918; AVX2-NEXT: testl $2048, %eax # imm = 0x8006919; AVX2-NEXT: je .LBB16_246920; AVX2-NEXT: .LBB16_23: # %cond.store216921; AVX2-NEXT: vpextrb $11, %xmm0, 11(%rdi)6922; AVX2-NEXT: testl $4096, %eax # imm = 0x10006923; AVX2-NEXT: je .LBB16_266924; AVX2-NEXT: .LBB16_25: # %cond.store236925; AVX2-NEXT: vpextrb $12, %xmm0, 12(%rdi)6926; AVX2-NEXT: testl $8192, %eax # imm = 0x20006927; AVX2-NEXT: je .LBB16_286928; AVX2-NEXT: .LBB16_27: # %cond.store256929; AVX2-NEXT: vpextrb $13, %xmm0, 13(%rdi)6930; AVX2-NEXT: testl $16384, %eax # imm = 0x40006931; AVX2-NEXT: je .LBB16_306932; AVX2-NEXT: .LBB16_29: # %cond.store276933; AVX2-NEXT: vpextrb $14, %xmm0, 14(%rdi)6934; AVX2-NEXT: testl $32768, %eax # imm = 0x80006935; AVX2-NEXT: je .LBB16_326936; AVX2-NEXT: .LBB16_31: # %cond.store296937; AVX2-NEXT: vpextrb $15, %xmm0, 15(%rdi)6938; AVX2-NEXT: vzeroupper6939; AVX2-NEXT: retq6940;6941; AVX512F-LABEL: truncstore_v16i16_v16i8:6942; AVX512F: # %bb.0:6943; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm26944; AVX512F-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm16945; 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],zero6946; AVX512F-NEXT: vpmovdb %zmm0, %xmm06947; AVX512F-NEXT: vpmovmskb %xmm1, %eax6948; AVX512F-NEXT: xorl $65535, %eax # imm = 0xFFFF6949; AVX512F-NEXT: testb $1, %al6950; AVX512F-NEXT: jne .LBB16_16951; AVX512F-NEXT: # %bb.2: # %else6952; AVX512F-NEXT: testb $2, %al6953; AVX512F-NEXT: jne .LBB16_36954; AVX512F-NEXT: .LBB16_4: # %else26955; AVX512F-NEXT: testb $4, %al6956; AVX512F-NEXT: jne .LBB16_56957; AVX512F-NEXT: .LBB16_6: # %else46958; AVX512F-NEXT: testb $8, %al6959; AVX512F-NEXT: jne .LBB16_76960; AVX512F-NEXT: .LBB16_8: # %else66961; AVX512F-NEXT: testb $16, %al6962; AVX512F-NEXT: jne .LBB16_96963; AVX512F-NEXT: .LBB16_10: # %else86964; AVX512F-NEXT: testb $32, %al6965; AVX512F-NEXT: jne .LBB16_116966; AVX512F-NEXT: .LBB16_12: # %else106967; AVX512F-NEXT: testb $64, %al6968; AVX512F-NEXT: jne .LBB16_136969; AVX512F-NEXT: .LBB16_14: # %else126970; AVX512F-NEXT: testb %al, %al6971; AVX512F-NEXT: js .LBB16_156972; AVX512F-NEXT: .LBB16_16: # %else146973; AVX512F-NEXT: testl $256, %eax # imm = 0x1006974; AVX512F-NEXT: jne .LBB16_176975; AVX512F-NEXT: .LBB16_18: # %else166976; AVX512F-NEXT: testl $512, %eax # imm = 0x2006977; AVX512F-NEXT: jne .LBB16_196978; AVX512F-NEXT: .LBB16_20: # %else186979; AVX512F-NEXT: testl $1024, %eax # imm = 0x4006980; AVX512F-NEXT: jne .LBB16_216981; AVX512F-NEXT: .LBB16_22: # %else206982; AVX512F-NEXT: testl $2048, %eax # imm = 0x8006983; AVX512F-NEXT: jne .LBB16_236984; AVX512F-NEXT: .LBB16_24: # %else226985; AVX512F-NEXT: testl $4096, %eax # imm = 0x10006986; AVX512F-NEXT: jne .LBB16_256987; AVX512F-NEXT: .LBB16_26: # %else246988; AVX512F-NEXT: testl $8192, %eax # imm = 0x20006989; AVX512F-NEXT: jne .LBB16_276990; AVX512F-NEXT: .LBB16_28: # %else266991; AVX512F-NEXT: testl $16384, %eax # imm = 0x40006992; AVX512F-NEXT: jne .LBB16_296993; AVX512F-NEXT: .LBB16_30: # %else286994; AVX512F-NEXT: testl $32768, %eax # imm = 0x80006995; AVX512F-NEXT: jne .LBB16_316996; AVX512F-NEXT: .LBB16_32: # %else306997; AVX512F-NEXT: vzeroupper6998; AVX512F-NEXT: retq6999; AVX512F-NEXT: .LBB16_1: # %cond.store7000; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)7001; AVX512F-NEXT: testb $2, %al7002; AVX512F-NEXT: je .LBB16_47003; AVX512F-NEXT: .LBB16_3: # %cond.store17004; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)7005; AVX512F-NEXT: testb $4, %al7006; AVX512F-NEXT: je .LBB16_67007; AVX512F-NEXT: .LBB16_5: # %cond.store37008; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)7009; AVX512F-NEXT: testb $8, %al7010; AVX512F-NEXT: je .LBB16_87011; AVX512F-NEXT: .LBB16_7: # %cond.store57012; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)7013; AVX512F-NEXT: testb $16, %al7014; AVX512F-NEXT: je .LBB16_107015; AVX512F-NEXT: .LBB16_9: # %cond.store77016; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)7017; AVX512F-NEXT: testb $32, %al7018; AVX512F-NEXT: je .LBB16_127019; AVX512F-NEXT: .LBB16_11: # %cond.store97020; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)7021; AVX512F-NEXT: testb $64, %al7022; AVX512F-NEXT: je .LBB16_147023; AVX512F-NEXT: .LBB16_13: # %cond.store117024; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)7025; AVX512F-NEXT: testb %al, %al7026; AVX512F-NEXT: jns .LBB16_167027; AVX512F-NEXT: .LBB16_15: # %cond.store137028; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)7029; AVX512F-NEXT: testl $256, %eax # imm = 0x1007030; AVX512F-NEXT: je .LBB16_187031; AVX512F-NEXT: .LBB16_17: # %cond.store157032; AVX512F-NEXT: vpextrb $8, %xmm0, 8(%rdi)7033; AVX512F-NEXT: testl $512, %eax # imm = 0x2007034; AVX512F-NEXT: je .LBB16_207035; AVX512F-NEXT: .LBB16_19: # %cond.store177036; AVX512F-NEXT: vpextrb $9, %xmm0, 9(%rdi)7037; AVX512F-NEXT: testl $1024, %eax # imm = 0x4007038; AVX512F-NEXT: je .LBB16_227039; AVX512F-NEXT: .LBB16_21: # %cond.store197040; AVX512F-NEXT: vpextrb $10, %xmm0, 10(%rdi)7041; AVX512F-NEXT: testl $2048, %eax # imm = 0x8007042; AVX512F-NEXT: je .LBB16_247043; AVX512F-NEXT: .LBB16_23: # %cond.store217044; AVX512F-NEXT: vpextrb $11, %xmm0, 11(%rdi)7045; AVX512F-NEXT: testl $4096, %eax # imm = 0x10007046; AVX512F-NEXT: je .LBB16_267047; AVX512F-NEXT: .LBB16_25: # %cond.store237048; AVX512F-NEXT: vpextrb $12, %xmm0, 12(%rdi)7049; AVX512F-NEXT: testl $8192, %eax # imm = 0x20007050; AVX512F-NEXT: je .LBB16_287051; AVX512F-NEXT: .LBB16_27: # %cond.store257052; AVX512F-NEXT: vpextrb $13, %xmm0, 13(%rdi)7053; AVX512F-NEXT: testl $16384, %eax # imm = 0x40007054; AVX512F-NEXT: je .LBB16_307055; AVX512F-NEXT: .LBB16_29: # %cond.store277056; AVX512F-NEXT: vpextrb $14, %xmm0, 14(%rdi)7057; AVX512F-NEXT: testl $32768, %eax # imm = 0x80007058; AVX512F-NEXT: je .LBB16_327059; AVX512F-NEXT: .LBB16_31: # %cond.store297060; AVX512F-NEXT: vpextrb $15, %xmm0, 15(%rdi)7061; AVX512F-NEXT: vzeroupper7062; AVX512F-NEXT: retq7063;7064; AVX512FVL-LABEL: truncstore_v16i16_v16i8:7065; AVX512FVL: # %bb.0:7066; AVX512FVL-NEXT: vpxor %xmm2, %xmm2, %xmm27067; AVX512FVL-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm17068; 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],zero7069; AVX512FVL-NEXT: vpmovdb %zmm0, %xmm07070; AVX512FVL-NEXT: vpmovmskb %xmm1, %eax7071; AVX512FVL-NEXT: xorl $65535, %eax # imm = 0xFFFF7072; AVX512FVL-NEXT: testb $1, %al7073; AVX512FVL-NEXT: jne .LBB16_17074; AVX512FVL-NEXT: # %bb.2: # %else7075; AVX512FVL-NEXT: testb $2, %al7076; AVX512FVL-NEXT: jne .LBB16_37077; AVX512FVL-NEXT: .LBB16_4: # %else27078; AVX512FVL-NEXT: testb $4, %al7079; AVX512FVL-NEXT: jne .LBB16_57080; AVX512FVL-NEXT: .LBB16_6: # %else47081; AVX512FVL-NEXT: testb $8, %al7082; AVX512FVL-NEXT: jne .LBB16_77083; AVX512FVL-NEXT: .LBB16_8: # %else67084; AVX512FVL-NEXT: testb $16, %al7085; AVX512FVL-NEXT: jne .LBB16_97086; AVX512FVL-NEXT: .LBB16_10: # %else87087; AVX512FVL-NEXT: testb $32, %al7088; AVX512FVL-NEXT: jne .LBB16_117089; AVX512FVL-NEXT: .LBB16_12: # %else107090; AVX512FVL-NEXT: testb $64, %al7091; AVX512FVL-NEXT: jne .LBB16_137092; AVX512FVL-NEXT: .LBB16_14: # %else127093; AVX512FVL-NEXT: testb %al, %al7094; AVX512FVL-NEXT: js .LBB16_157095; AVX512FVL-NEXT: .LBB16_16: # %else147096; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1007097; AVX512FVL-NEXT: jne .LBB16_177098; AVX512FVL-NEXT: .LBB16_18: # %else167099; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2007100; AVX512FVL-NEXT: jne .LBB16_197101; AVX512FVL-NEXT: .LBB16_20: # %else187102; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4007103; AVX512FVL-NEXT: jne .LBB16_217104; AVX512FVL-NEXT: .LBB16_22: # %else207105; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8007106; AVX512FVL-NEXT: jne .LBB16_237107; AVX512FVL-NEXT: .LBB16_24: # %else227108; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10007109; AVX512FVL-NEXT: jne .LBB16_257110; AVX512FVL-NEXT: .LBB16_26: # %else247111; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20007112; AVX512FVL-NEXT: jne .LBB16_277113; AVX512FVL-NEXT: .LBB16_28: # %else267114; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40007115; AVX512FVL-NEXT: jne .LBB16_297116; AVX512FVL-NEXT: .LBB16_30: # %else287117; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80007118; AVX512FVL-NEXT: jne .LBB16_317119; AVX512FVL-NEXT: .LBB16_32: # %else307120; AVX512FVL-NEXT: vzeroupper7121; AVX512FVL-NEXT: retq7122; AVX512FVL-NEXT: .LBB16_1: # %cond.store7123; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)7124; AVX512FVL-NEXT: testb $2, %al7125; AVX512FVL-NEXT: je .LBB16_47126; AVX512FVL-NEXT: .LBB16_3: # %cond.store17127; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)7128; AVX512FVL-NEXT: testb $4, %al7129; AVX512FVL-NEXT: je .LBB16_67130; AVX512FVL-NEXT: .LBB16_5: # %cond.store37131; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)7132; AVX512FVL-NEXT: testb $8, %al7133; AVX512FVL-NEXT: je .LBB16_87134; AVX512FVL-NEXT: .LBB16_7: # %cond.store57135; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)7136; AVX512FVL-NEXT: testb $16, %al7137; AVX512FVL-NEXT: je .LBB16_107138; AVX512FVL-NEXT: .LBB16_9: # %cond.store77139; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)7140; AVX512FVL-NEXT: testb $32, %al7141; AVX512FVL-NEXT: je .LBB16_127142; AVX512FVL-NEXT: .LBB16_11: # %cond.store97143; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)7144; AVX512FVL-NEXT: testb $64, %al7145; AVX512FVL-NEXT: je .LBB16_147146; AVX512FVL-NEXT: .LBB16_13: # %cond.store117147; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)7148; AVX512FVL-NEXT: testb %al, %al7149; AVX512FVL-NEXT: jns .LBB16_167150; AVX512FVL-NEXT: .LBB16_15: # %cond.store137151; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)7152; AVX512FVL-NEXT: testl $256, %eax # imm = 0x1007153; AVX512FVL-NEXT: je .LBB16_187154; AVX512FVL-NEXT: .LBB16_17: # %cond.store157155; AVX512FVL-NEXT: vpextrb $8, %xmm0, 8(%rdi)7156; AVX512FVL-NEXT: testl $512, %eax # imm = 0x2007157; AVX512FVL-NEXT: je .LBB16_207158; AVX512FVL-NEXT: .LBB16_19: # %cond.store177159; AVX512FVL-NEXT: vpextrb $9, %xmm0, 9(%rdi)7160; AVX512FVL-NEXT: testl $1024, %eax # imm = 0x4007161; AVX512FVL-NEXT: je .LBB16_227162; AVX512FVL-NEXT: .LBB16_21: # %cond.store197163; AVX512FVL-NEXT: vpextrb $10, %xmm0, 10(%rdi)7164; AVX512FVL-NEXT: testl $2048, %eax # imm = 0x8007165; AVX512FVL-NEXT: je .LBB16_247166; AVX512FVL-NEXT: .LBB16_23: # %cond.store217167; AVX512FVL-NEXT: vpextrb $11, %xmm0, 11(%rdi)7168; AVX512FVL-NEXT: testl $4096, %eax # imm = 0x10007169; AVX512FVL-NEXT: je .LBB16_267170; AVX512FVL-NEXT: .LBB16_25: # %cond.store237171; AVX512FVL-NEXT: vpextrb $12, %xmm0, 12(%rdi)7172; AVX512FVL-NEXT: testl $8192, %eax # imm = 0x20007173; AVX512FVL-NEXT: je .LBB16_287174; AVX512FVL-NEXT: .LBB16_27: # %cond.store257175; AVX512FVL-NEXT: vpextrb $13, %xmm0, 13(%rdi)7176; AVX512FVL-NEXT: testl $16384, %eax # imm = 0x40007177; AVX512FVL-NEXT: je .LBB16_307178; AVX512FVL-NEXT: .LBB16_29: # %cond.store277179; AVX512FVL-NEXT: vpextrb $14, %xmm0, 14(%rdi)7180; AVX512FVL-NEXT: testl $32768, %eax # imm = 0x80007181; AVX512FVL-NEXT: je .LBB16_327182; AVX512FVL-NEXT: .LBB16_31: # %cond.store297183; AVX512FVL-NEXT: vpextrb $15, %xmm0, 15(%rdi)7184; AVX512FVL-NEXT: vzeroupper7185; AVX512FVL-NEXT: retq7186;7187; AVX512BW-LABEL: truncstore_v16i16_v16i8:7188; AVX512BW: # %bb.0:7189; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm17190; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07191; AVX512BW-NEXT: vptestmb %zmm1, %zmm1, %k07192; AVX512BW-NEXT: kmovw %k0, %k17193; AVX512BW-NEXT: vpmovwb %zmm0, %ymm07194; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}7195; AVX512BW-NEXT: vzeroupper7196; AVX512BW-NEXT: retq7197;7198; AVX512BWVL-LABEL: truncstore_v16i16_v16i8:7199; AVX512BWVL: # %bb.0:7200; AVX512BWVL-NEXT: vptestmb %xmm1, %xmm1, %k17201; AVX512BWVL-NEXT: vpmovwb %ymm0, (%rdi) {%k1}7202; AVX512BWVL-NEXT: vzeroupper7203; AVX512BWVL-NEXT: retq7204 %a = icmp ne <16 x i8> %mask, zeroinitializer7205 %b = trunc <16 x i16> %x to <16 x i8>7206 call void @llvm.masked.store.v16i8.p0(<16 x i8> %b, ptr %p, i32 1, <16 x i1> %a)7207 ret void7208}7209 7210define void @truncstore_v8i16_v8i8(<8 x i16> %x, ptr %p, <8 x i16> %mask) {7211; SSE2-LABEL: truncstore_v8i16_v8i8:7212; SSE2: # %bb.0:7213; SSE2-NEXT: pxor %xmm2, %xmm27214; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm07215; SSE2-NEXT: packuswb %xmm0, %xmm07216; SSE2-NEXT: pcmpeqw %xmm1, %xmm27217; SSE2-NEXT: packsswb %xmm2, %xmm27218; SSE2-NEXT: pmovmskb %xmm2, %eax7219; SSE2-NEXT: notl %eax7220; SSE2-NEXT: testb $1, %al7221; SSE2-NEXT: movd %xmm0, %ecx7222; SSE2-NEXT: jne .LBB17_17223; SSE2-NEXT: # %bb.2: # %else7224; SSE2-NEXT: testb $2, %al7225; SSE2-NEXT: jne .LBB17_37226; SSE2-NEXT: .LBB17_4: # %else27227; SSE2-NEXT: testb $4, %al7228; SSE2-NEXT: jne .LBB17_57229; SSE2-NEXT: .LBB17_6: # %else47230; SSE2-NEXT: testb $8, %al7231; SSE2-NEXT: je .LBB17_87232; SSE2-NEXT: .LBB17_7: # %cond.store57233; SSE2-NEXT: shrl $24, %ecx7234; SSE2-NEXT: movb %cl, 3(%rdi)7235; SSE2-NEXT: .LBB17_8: # %else67236; SSE2-NEXT: testb $16, %al7237; SSE2-NEXT: pextrw $2, %xmm0, %ecx7238; SSE2-NEXT: je .LBB17_107239; SSE2-NEXT: # %bb.9: # %cond.store77240; SSE2-NEXT: movb %cl, 4(%rdi)7241; SSE2-NEXT: .LBB17_10: # %else87242; SSE2-NEXT: testb $32, %al7243; SSE2-NEXT: je .LBB17_127244; SSE2-NEXT: # %bb.11: # %cond.store97245; SSE2-NEXT: movb %ch, 5(%rdi)7246; SSE2-NEXT: .LBB17_12: # %else107247; SSE2-NEXT: testb $64, %al7248; SSE2-NEXT: pextrw $3, %xmm0, %ecx7249; SSE2-NEXT: jne .LBB17_137250; SSE2-NEXT: # %bb.14: # %else127251; SSE2-NEXT: testb $-128, %al7252; SSE2-NEXT: jne .LBB17_157253; SSE2-NEXT: .LBB17_16: # %else147254; SSE2-NEXT: retq7255; SSE2-NEXT: .LBB17_1: # %cond.store7256; SSE2-NEXT: movb %cl, (%rdi)7257; SSE2-NEXT: testb $2, %al7258; SSE2-NEXT: je .LBB17_47259; SSE2-NEXT: .LBB17_3: # %cond.store17260; SSE2-NEXT: movb %ch, 1(%rdi)7261; SSE2-NEXT: testb $4, %al7262; SSE2-NEXT: je .LBB17_67263; SSE2-NEXT: .LBB17_5: # %cond.store37264; SSE2-NEXT: movl %ecx, %edx7265; SSE2-NEXT: shrl $16, %edx7266; SSE2-NEXT: movb %dl, 2(%rdi)7267; SSE2-NEXT: testb $8, %al7268; SSE2-NEXT: jne .LBB17_77269; SSE2-NEXT: jmp .LBB17_87270; SSE2-NEXT: .LBB17_13: # %cond.store117271; SSE2-NEXT: movb %cl, 6(%rdi)7272; SSE2-NEXT: testb $-128, %al7273; SSE2-NEXT: je .LBB17_167274; SSE2-NEXT: .LBB17_15: # %cond.store137275; SSE2-NEXT: movb %ch, 7(%rdi)7276; SSE2-NEXT: retq7277;7278; SSE4-LABEL: truncstore_v8i16_v8i8:7279; SSE4: # %bb.0:7280; SSE4-NEXT: pxor %xmm2, %xmm27281; SSE4-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]7282; SSE4-NEXT: pcmpeqw %xmm1, %xmm27283; SSE4-NEXT: packsswb %xmm2, %xmm27284; SSE4-NEXT: pmovmskb %xmm2, %eax7285; SSE4-NEXT: notl %eax7286; SSE4-NEXT: testb $1, %al7287; SSE4-NEXT: jne .LBB17_17288; SSE4-NEXT: # %bb.2: # %else7289; SSE4-NEXT: testb $2, %al7290; SSE4-NEXT: jne .LBB17_37291; SSE4-NEXT: .LBB17_4: # %else27292; SSE4-NEXT: testb $4, %al7293; SSE4-NEXT: jne .LBB17_57294; SSE4-NEXT: .LBB17_6: # %else47295; SSE4-NEXT: testb $8, %al7296; SSE4-NEXT: jne .LBB17_77297; SSE4-NEXT: .LBB17_8: # %else67298; SSE4-NEXT: testb $16, %al7299; SSE4-NEXT: jne .LBB17_97300; SSE4-NEXT: .LBB17_10: # %else87301; SSE4-NEXT: testb $32, %al7302; SSE4-NEXT: jne .LBB17_117303; SSE4-NEXT: .LBB17_12: # %else107304; SSE4-NEXT: testb $64, %al7305; SSE4-NEXT: jne .LBB17_137306; SSE4-NEXT: .LBB17_14: # %else127307; SSE4-NEXT: testb $-128, %al7308; SSE4-NEXT: jne .LBB17_157309; SSE4-NEXT: .LBB17_16: # %else147310; SSE4-NEXT: retq7311; SSE4-NEXT: .LBB17_1: # %cond.store7312; SSE4-NEXT: pextrb $0, %xmm0, (%rdi)7313; SSE4-NEXT: testb $2, %al7314; SSE4-NEXT: je .LBB17_47315; SSE4-NEXT: .LBB17_3: # %cond.store17316; SSE4-NEXT: pextrb $1, %xmm0, 1(%rdi)7317; SSE4-NEXT: testb $4, %al7318; SSE4-NEXT: je .LBB17_67319; SSE4-NEXT: .LBB17_5: # %cond.store37320; SSE4-NEXT: pextrb $2, %xmm0, 2(%rdi)7321; SSE4-NEXT: testb $8, %al7322; SSE4-NEXT: je .LBB17_87323; SSE4-NEXT: .LBB17_7: # %cond.store57324; SSE4-NEXT: pextrb $3, %xmm0, 3(%rdi)7325; SSE4-NEXT: testb $16, %al7326; SSE4-NEXT: je .LBB17_107327; SSE4-NEXT: .LBB17_9: # %cond.store77328; SSE4-NEXT: pextrb $4, %xmm0, 4(%rdi)7329; SSE4-NEXT: testb $32, %al7330; SSE4-NEXT: je .LBB17_127331; SSE4-NEXT: .LBB17_11: # %cond.store97332; SSE4-NEXT: pextrb $5, %xmm0, 5(%rdi)7333; SSE4-NEXT: testb $64, %al7334; SSE4-NEXT: je .LBB17_147335; SSE4-NEXT: .LBB17_13: # %cond.store117336; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)7337; SSE4-NEXT: testb $-128, %al7338; SSE4-NEXT: je .LBB17_167339; SSE4-NEXT: .LBB17_15: # %cond.store137340; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)7341; SSE4-NEXT: retq7342;7343; AVX-LABEL: truncstore_v8i16_v8i8:7344; AVX: # %bb.0:7345; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm27346; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]7347; AVX-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm17348; AVX-NEXT: vpacksswb %xmm1, %xmm1, %xmm17349; AVX-NEXT: vpmovmskb %xmm1, %eax7350; AVX-NEXT: notl %eax7351; AVX-NEXT: testb $1, %al7352; AVX-NEXT: jne .LBB17_17353; AVX-NEXT: # %bb.2: # %else7354; AVX-NEXT: testb $2, %al7355; AVX-NEXT: jne .LBB17_37356; AVX-NEXT: .LBB17_4: # %else27357; AVX-NEXT: testb $4, %al7358; AVX-NEXT: jne .LBB17_57359; AVX-NEXT: .LBB17_6: # %else47360; AVX-NEXT: testb $8, %al7361; AVX-NEXT: jne .LBB17_77362; AVX-NEXT: .LBB17_8: # %else67363; AVX-NEXT: testb $16, %al7364; AVX-NEXT: jne .LBB17_97365; AVX-NEXT: .LBB17_10: # %else87366; AVX-NEXT: testb $32, %al7367; AVX-NEXT: jne .LBB17_117368; AVX-NEXT: .LBB17_12: # %else107369; AVX-NEXT: testb $64, %al7370; AVX-NEXT: jne .LBB17_137371; AVX-NEXT: .LBB17_14: # %else127372; AVX-NEXT: testb $-128, %al7373; AVX-NEXT: jne .LBB17_157374; AVX-NEXT: .LBB17_16: # %else147375; AVX-NEXT: retq7376; AVX-NEXT: .LBB17_1: # %cond.store7377; AVX-NEXT: vpextrb $0, %xmm0, (%rdi)7378; AVX-NEXT: testb $2, %al7379; AVX-NEXT: je .LBB17_47380; AVX-NEXT: .LBB17_3: # %cond.store17381; AVX-NEXT: vpextrb $1, %xmm0, 1(%rdi)7382; AVX-NEXT: testb $4, %al7383; AVX-NEXT: je .LBB17_67384; AVX-NEXT: .LBB17_5: # %cond.store37385; AVX-NEXT: vpextrb $2, %xmm0, 2(%rdi)7386; AVX-NEXT: testb $8, %al7387; AVX-NEXT: je .LBB17_87388; AVX-NEXT: .LBB17_7: # %cond.store57389; AVX-NEXT: vpextrb $3, %xmm0, 3(%rdi)7390; AVX-NEXT: testb $16, %al7391; AVX-NEXT: je .LBB17_107392; AVX-NEXT: .LBB17_9: # %cond.store77393; AVX-NEXT: vpextrb $4, %xmm0, 4(%rdi)7394; AVX-NEXT: testb $32, %al7395; AVX-NEXT: je .LBB17_127396; AVX-NEXT: .LBB17_11: # %cond.store97397; AVX-NEXT: vpextrb $5, %xmm0, 5(%rdi)7398; AVX-NEXT: testb $64, %al7399; AVX-NEXT: je .LBB17_147400; AVX-NEXT: .LBB17_13: # %cond.store117401; AVX-NEXT: vpextrb $6, %xmm0, 6(%rdi)7402; AVX-NEXT: testb $-128, %al7403; AVX-NEXT: je .LBB17_167404; AVX-NEXT: .LBB17_15: # %cond.store137405; AVX-NEXT: vpextrb $7, %xmm0, 7(%rdi)7406; AVX-NEXT: retq7407;7408; AVX512F-LABEL: truncstore_v8i16_v8i8:7409; AVX512F: # %bb.0:7410; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm27411; AVX512F-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm17412; AVX512F-NEXT: vpternlogq {{.*#+}} zmm1 = ~zmm17413; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm17414; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k07415; AVX512F-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]7416; AVX512F-NEXT: kmovw %k0, %eax7417; AVX512F-NEXT: testb $1, %al7418; AVX512F-NEXT: jne .LBB17_17419; AVX512F-NEXT: # %bb.2: # %else7420; AVX512F-NEXT: testb $2, %al7421; AVX512F-NEXT: jne .LBB17_37422; AVX512F-NEXT: .LBB17_4: # %else27423; AVX512F-NEXT: testb $4, %al7424; AVX512F-NEXT: jne .LBB17_57425; AVX512F-NEXT: .LBB17_6: # %else47426; AVX512F-NEXT: testb $8, %al7427; AVX512F-NEXT: jne .LBB17_77428; AVX512F-NEXT: .LBB17_8: # %else67429; AVX512F-NEXT: testb $16, %al7430; AVX512F-NEXT: jne .LBB17_97431; AVX512F-NEXT: .LBB17_10: # %else87432; AVX512F-NEXT: testb $32, %al7433; AVX512F-NEXT: jne .LBB17_117434; AVX512F-NEXT: .LBB17_12: # %else107435; AVX512F-NEXT: testb $64, %al7436; AVX512F-NEXT: jne .LBB17_137437; AVX512F-NEXT: .LBB17_14: # %else127438; AVX512F-NEXT: testb $-128, %al7439; AVX512F-NEXT: jne .LBB17_157440; AVX512F-NEXT: .LBB17_16: # %else147441; AVX512F-NEXT: vzeroupper7442; AVX512F-NEXT: retq7443; AVX512F-NEXT: .LBB17_1: # %cond.store7444; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi)7445; AVX512F-NEXT: testb $2, %al7446; AVX512F-NEXT: je .LBB17_47447; AVX512F-NEXT: .LBB17_3: # %cond.store17448; AVX512F-NEXT: vpextrb $1, %xmm0, 1(%rdi)7449; AVX512F-NEXT: testb $4, %al7450; AVX512F-NEXT: je .LBB17_67451; AVX512F-NEXT: .LBB17_5: # %cond.store37452; AVX512F-NEXT: vpextrb $2, %xmm0, 2(%rdi)7453; AVX512F-NEXT: testb $8, %al7454; AVX512F-NEXT: je .LBB17_87455; AVX512F-NEXT: .LBB17_7: # %cond.store57456; AVX512F-NEXT: vpextrb $3, %xmm0, 3(%rdi)7457; AVX512F-NEXT: testb $16, %al7458; AVX512F-NEXT: je .LBB17_107459; AVX512F-NEXT: .LBB17_9: # %cond.store77460; AVX512F-NEXT: vpextrb $4, %xmm0, 4(%rdi)7461; AVX512F-NEXT: testb $32, %al7462; AVX512F-NEXT: je .LBB17_127463; AVX512F-NEXT: .LBB17_11: # %cond.store97464; AVX512F-NEXT: vpextrb $5, %xmm0, 5(%rdi)7465; AVX512F-NEXT: testb $64, %al7466; AVX512F-NEXT: je .LBB17_147467; AVX512F-NEXT: .LBB17_13: # %cond.store117468; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)7469; AVX512F-NEXT: testb $-128, %al7470; AVX512F-NEXT: je .LBB17_167471; AVX512F-NEXT: .LBB17_15: # %cond.store137472; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)7473; AVX512F-NEXT: vzeroupper7474; AVX512F-NEXT: retq7475;7476; AVX512FVL-LABEL: truncstore_v8i16_v8i8:7477; AVX512FVL: # %bb.0:7478; AVX512FVL-NEXT: vpxor %xmm2, %xmm2, %xmm27479; AVX512FVL-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm17480; AVX512FVL-NEXT: vpternlogq {{.*#+}} xmm1 = ~xmm17481; AVX512FVL-NEXT: vpmovsxwd %xmm1, %ymm17482; AVX512FVL-NEXT: vptestmd %ymm1, %ymm1, %k07483; AVX512FVL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]7484; AVX512FVL-NEXT: kmovw %k0, %eax7485; AVX512FVL-NEXT: testb $1, %al7486; AVX512FVL-NEXT: jne .LBB17_17487; AVX512FVL-NEXT: # %bb.2: # %else7488; AVX512FVL-NEXT: testb $2, %al7489; AVX512FVL-NEXT: jne .LBB17_37490; AVX512FVL-NEXT: .LBB17_4: # %else27491; AVX512FVL-NEXT: testb $4, %al7492; AVX512FVL-NEXT: jne .LBB17_57493; AVX512FVL-NEXT: .LBB17_6: # %else47494; AVX512FVL-NEXT: testb $8, %al7495; AVX512FVL-NEXT: jne .LBB17_77496; AVX512FVL-NEXT: .LBB17_8: # %else67497; AVX512FVL-NEXT: testb $16, %al7498; AVX512FVL-NEXT: jne .LBB17_97499; AVX512FVL-NEXT: .LBB17_10: # %else87500; AVX512FVL-NEXT: testb $32, %al7501; AVX512FVL-NEXT: jne .LBB17_117502; AVX512FVL-NEXT: .LBB17_12: # %else107503; AVX512FVL-NEXT: testb $64, %al7504; AVX512FVL-NEXT: jne .LBB17_137505; AVX512FVL-NEXT: .LBB17_14: # %else127506; AVX512FVL-NEXT: testb $-128, %al7507; AVX512FVL-NEXT: jne .LBB17_157508; AVX512FVL-NEXT: .LBB17_16: # %else147509; AVX512FVL-NEXT: vzeroupper7510; AVX512FVL-NEXT: retq7511; AVX512FVL-NEXT: .LBB17_1: # %cond.store7512; AVX512FVL-NEXT: vpextrb $0, %xmm0, (%rdi)7513; AVX512FVL-NEXT: testb $2, %al7514; AVX512FVL-NEXT: je .LBB17_47515; AVX512FVL-NEXT: .LBB17_3: # %cond.store17516; AVX512FVL-NEXT: vpextrb $1, %xmm0, 1(%rdi)7517; AVX512FVL-NEXT: testb $4, %al7518; AVX512FVL-NEXT: je .LBB17_67519; AVX512FVL-NEXT: .LBB17_5: # %cond.store37520; AVX512FVL-NEXT: vpextrb $2, %xmm0, 2(%rdi)7521; AVX512FVL-NEXT: testb $8, %al7522; AVX512FVL-NEXT: je .LBB17_87523; AVX512FVL-NEXT: .LBB17_7: # %cond.store57524; AVX512FVL-NEXT: vpextrb $3, %xmm0, 3(%rdi)7525; AVX512FVL-NEXT: testb $16, %al7526; AVX512FVL-NEXT: je .LBB17_107527; AVX512FVL-NEXT: .LBB17_9: # %cond.store77528; AVX512FVL-NEXT: vpextrb $4, %xmm0, 4(%rdi)7529; AVX512FVL-NEXT: testb $32, %al7530; AVX512FVL-NEXT: je .LBB17_127531; AVX512FVL-NEXT: .LBB17_11: # %cond.store97532; AVX512FVL-NEXT: vpextrb $5, %xmm0, 5(%rdi)7533; AVX512FVL-NEXT: testb $64, %al7534; AVX512FVL-NEXT: je .LBB17_147535; AVX512FVL-NEXT: .LBB17_13: # %cond.store117536; AVX512FVL-NEXT: vpextrb $6, %xmm0, 6(%rdi)7537; AVX512FVL-NEXT: testb $-128, %al7538; AVX512FVL-NEXT: je .LBB17_167539; AVX512FVL-NEXT: .LBB17_15: # %cond.store137540; AVX512FVL-NEXT: vpextrb $7, %xmm0, 7(%rdi)7541; AVX512FVL-NEXT: vzeroupper7542; AVX512FVL-NEXT: retq7543;7544; AVX512BW-LABEL: truncstore_v8i16_v8i8:7545; AVX512BW: # %bb.0:7546; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm17547; AVX512BW-NEXT: vptestmw %zmm1, %zmm1, %k07548; AVX512BW-NEXT: kshiftlq $56, %k0, %k07549; AVX512BW-NEXT: kshiftrq $56, %k0, %k17550; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]7551; AVX512BW-NEXT: vmovdqu8 %zmm0, (%rdi) {%k1}7552; AVX512BW-NEXT: vzeroupper7553; AVX512BW-NEXT: retq7554;7555; AVX512BWVL-LABEL: truncstore_v8i16_v8i8:7556; AVX512BWVL: # %bb.0:7557; AVX512BWVL-NEXT: vptestmw %xmm1, %xmm1, %k17558; AVX512BWVL-NEXT: vpmovwb %xmm0, (%rdi) {%k1}7559; AVX512BWVL-NEXT: retq7560 %a = icmp ne <8 x i16> %mask, zeroinitializer7561 %b = trunc <8 x i16> %x to <8 x i8>7562 call void @llvm.masked.store.v8i8.p0(<8 x i8> %b, ptr %p, i32 1, <8 x i1> %a)7563 ret void7564}7565 7566declare void @llvm.masked.store.v8i32.p0(<8 x i32>, ptr, i32, <8 x i1>)7567declare void @llvm.masked.store.v8i16.p0(<8 x i16>, ptr, i32, <8 x i1>)7568declare void @llvm.masked.store.v8i8.p0(<8 x i8>, ptr, i32, <8 x i1>)7569declare void @llvm.masked.store.v4i32.p0(<4 x i32>, ptr, i32, <4 x i1>)7570declare void @llvm.masked.store.v4i16.p0(<4 x i16>, ptr, i32, <4 x i1>)7571declare void @llvm.masked.store.v4i8.p0(<4 x i8>, ptr, i32, <4 x i1>)7572declare void @llvm.masked.store.v2i32.p0(<2 x i32>, ptr, i32, <2 x i1>)7573declare void @llvm.masked.store.v2i16.p0(<2 x i16>, ptr, i32, <2 x i1>)7574declare void @llvm.masked.store.v2i8.p0(<2 x i8>, ptr, i32, <2 x i1>)7575declare void @llvm.masked.store.v16i16.p0(<16 x i16>, ptr, i32, <16 x i1>)7576declare void @llvm.masked.store.v16i8.p0(<16 x i8>, ptr, i32, <16 x i1>)7577declare void @llvm.masked.store.v32i8.p0(<32 x i8>, ptr, i32, <32 x i1>)7578