471 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-prefix=SSE2-SSSE33; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+SSSE3 | FileCheck %s --check-prefix=SSE2-SSSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX12,AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX12,AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX512,AVX512F7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX512,AVX512BW8 9define i16 @v16i16(<16 x i16> %a, <16 x i16> %b) {10; SSE2-SSSE3-LABEL: v16i16:11; SSE2-SSSE3: # %bb.0:12; SSE2-SSSE3-NEXT: pcmpgtw %xmm3, %xmm113; SSE2-SSSE3-NEXT: pcmpgtw %xmm2, %xmm014; SSE2-SSSE3-NEXT: packsswb %xmm1, %xmm015; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %eax16; SSE2-SSSE3-NEXT: # kill: def $ax killed $ax killed $eax17; SSE2-SSSE3-NEXT: retq18;19; AVX1-LABEL: v16i16:20; AVX1: # %bb.0:21; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm222; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm323; AVX1-NEXT: vpcmpgtw %xmm2, %xmm3, %xmm224; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm025; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm026; AVX1-NEXT: vpmovmskb %xmm0, %eax27; AVX1-NEXT: # kill: def $ax killed $ax killed $eax28; AVX1-NEXT: vzeroupper29; AVX1-NEXT: retq30;31; AVX2-LABEL: v16i16:32; AVX2: # %bb.0:33; AVX2-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm034; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm135; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm036; AVX2-NEXT: vpmovmskb %xmm0, %eax37; AVX2-NEXT: # kill: def $ax killed $ax killed $eax38; AVX2-NEXT: vzeroupper39; AVX2-NEXT: retq40;41; AVX512F-LABEL: v16i16:42; AVX512F: # %bb.0:43; AVX512F-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm044; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm045; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k046; AVX512F-NEXT: kmovw %k0, %eax47; AVX512F-NEXT: # kill: def $ax killed $ax killed $eax48; AVX512F-NEXT: vzeroupper49; AVX512F-NEXT: retq50;51; AVX512BW-LABEL: v16i16:52; AVX512BW: # %bb.0:53; AVX512BW-NEXT: vpcmpgtw %ymm1, %ymm0, %k054; AVX512BW-NEXT: kmovd %k0, %eax55; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax56; AVX512BW-NEXT: vzeroupper57; AVX512BW-NEXT: retq58 %x = icmp sgt <16 x i16> %a, %b59 %res = bitcast <16 x i1> %x to i1660 ret i16 %res61}62 63define i8 @v8i32(<8 x i32> %a, <8 x i32> %b) {64; SSE2-SSSE3-LABEL: v8i32:65; SSE2-SSSE3: # %bb.0:66; SSE2-SSSE3-NEXT: pcmpgtd %xmm3, %xmm167; SSE2-SSSE3-NEXT: pcmpgtd %xmm2, %xmm068; SSE2-SSSE3-NEXT: packssdw %xmm1, %xmm069; SSE2-SSSE3-NEXT: packsswb %xmm0, %xmm070; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %eax71; SSE2-SSSE3-NEXT: # kill: def $al killed $al killed $eax72; SSE2-SSSE3-NEXT: retq73;74; AVX1-LABEL: v8i32:75; AVX1: # %bb.0:76; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm277; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm378; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm279; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm080; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm081; AVX1-NEXT: vmovmskps %ymm0, %eax82; AVX1-NEXT: # kill: def $al killed $al killed $eax83; AVX1-NEXT: vzeroupper84; AVX1-NEXT: retq85;86; AVX2-LABEL: v8i32:87; AVX2: # %bb.0:88; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm089; AVX2-NEXT: vmovmskps %ymm0, %eax90; AVX2-NEXT: # kill: def $al killed $al killed $eax91; AVX2-NEXT: vzeroupper92; AVX2-NEXT: retq93;94; AVX512F-LABEL: v8i32:95; AVX512F: # %bb.0:96; AVX512F-NEXT: vpcmpgtd %ymm1, %ymm0, %k097; AVX512F-NEXT: kmovw %k0, %eax98; AVX512F-NEXT: # kill: def $al killed $al killed $eax99; AVX512F-NEXT: vzeroupper100; AVX512F-NEXT: retq101;102; AVX512BW-LABEL: v8i32:103; AVX512BW: # %bb.0:104; AVX512BW-NEXT: vpcmpgtd %ymm1, %ymm0, %k0105; AVX512BW-NEXT: kmovd %k0, %eax106; AVX512BW-NEXT: # kill: def $al killed $al killed $eax107; AVX512BW-NEXT: vzeroupper108; AVX512BW-NEXT: retq109 %x = icmp sgt <8 x i32> %a, %b110 %res = bitcast <8 x i1> %x to i8111 ret i8 %res112}113 114define i8 @v8f32(<8 x float> %a, <8 x float> %b) {115; SSE2-SSSE3-LABEL: v8f32:116; SSE2-SSSE3: # %bb.0:117; SSE2-SSSE3-NEXT: cmpltps %xmm1, %xmm3118; SSE2-SSSE3-NEXT: cmpltps %xmm0, %xmm2119; SSE2-SSSE3-NEXT: packssdw %xmm3, %xmm2120; SSE2-SSSE3-NEXT: packsswb %xmm2, %xmm2121; SSE2-SSSE3-NEXT: pmovmskb %xmm2, %eax122; SSE2-SSSE3-NEXT: # kill: def $al killed $al killed $eax123; SSE2-SSSE3-NEXT: retq124;125; AVX12-LABEL: v8f32:126; AVX12: # %bb.0:127; AVX12-NEXT: vcmpltps %ymm0, %ymm1, %ymm0128; AVX12-NEXT: vmovmskps %ymm0, %eax129; AVX12-NEXT: # kill: def $al killed $al killed $eax130; AVX12-NEXT: vzeroupper131; AVX12-NEXT: retq132;133; AVX512F-LABEL: v8f32:134; AVX512F: # %bb.0:135; AVX512F-NEXT: vcmpltps %ymm0, %ymm1, %k0136; AVX512F-NEXT: kmovw %k0, %eax137; AVX512F-NEXT: # kill: def $al killed $al killed $eax138; AVX512F-NEXT: vzeroupper139; AVX512F-NEXT: retq140;141; AVX512BW-LABEL: v8f32:142; AVX512BW: # %bb.0:143; AVX512BW-NEXT: vcmpltps %ymm0, %ymm1, %k0144; AVX512BW-NEXT: kmovd %k0, %eax145; AVX512BW-NEXT: # kill: def $al killed $al killed $eax146; AVX512BW-NEXT: vzeroupper147; AVX512BW-NEXT: retq148 %x = fcmp ogt <8 x float> %a, %b149 %res = bitcast <8 x i1> %x to i8150 ret i8 %res151}152 153define i32 @v32i8(<32 x i8> %a, <32 x i8> %b) {154; SSE2-SSSE3-LABEL: v32i8:155; SSE2-SSSE3: # %bb.0:156; SSE2-SSSE3-NEXT: pcmpgtb %xmm2, %xmm0157; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %ecx158; SSE2-SSSE3-NEXT: pcmpgtb %xmm3, %xmm1159; SSE2-SSSE3-NEXT: pmovmskb %xmm1, %eax160; SSE2-SSSE3-NEXT: shll $16, %eax161; SSE2-SSSE3-NEXT: orl %ecx, %eax162; SSE2-SSSE3-NEXT: retq163;164; AVX1-LABEL: v32i8:165; AVX1: # %bb.0:166; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm2167; AVX1-NEXT: vpmovmskb %xmm2, %ecx168; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1169; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0170; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0171; AVX1-NEXT: vpmovmskb %xmm0, %eax172; AVX1-NEXT: shll $16, %eax173; AVX1-NEXT: orl %ecx, %eax174; AVX1-NEXT: vzeroupper175; AVX1-NEXT: retq176;177; AVX2-LABEL: v32i8:178; AVX2: # %bb.0:179; AVX2-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0180; AVX2-NEXT: vpmovmskb %ymm0, %eax181; AVX2-NEXT: vzeroupper182; AVX2-NEXT: retq183;184; AVX512F-LABEL: v32i8:185; AVX512F: # %bb.0:186; AVX512F-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0187; AVX512F-NEXT: vpmovmskb %ymm0, %eax188; AVX512F-NEXT: vzeroupper189; AVX512F-NEXT: retq190;191; AVX512BW-LABEL: v32i8:192; AVX512BW: # %bb.0:193; AVX512BW-NEXT: vpcmpgtb %ymm1, %ymm0, %k0194; AVX512BW-NEXT: kmovd %k0, %eax195; AVX512BW-NEXT: vzeroupper196; AVX512BW-NEXT: retq197 %x = icmp sgt <32 x i8> %a, %b198 %res = bitcast <32 x i1> %x to i32199 ret i32 %res200}201 202define i4 @v4i64(<4 x i64> %a, <4 x i64> %b) {203; SSE2-SSSE3-LABEL: v4i64:204; SSE2-SSSE3: # %bb.0:205; SSE2-SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]206; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm3207; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm1208; SSE2-SSSE3-NEXT: movdqa %xmm1, %xmm5209; SSE2-SSSE3-NEXT: pcmpgtd %xmm3, %xmm5210; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm2211; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm0212; SSE2-SSSE3-NEXT: movdqa %xmm0, %xmm4213; SSE2-SSSE3-NEXT: pcmpgtd %xmm2, %xmm4214; SSE2-SSSE3-NEXT: movdqa %xmm4, %xmm6215; SSE2-SSSE3-NEXT: shufps {{.*#+}} xmm6 = xmm6[0,2],xmm5[0,2]216; SSE2-SSSE3-NEXT: pcmpeqd %xmm3, %xmm1217; SSE2-SSSE3-NEXT: pcmpeqd %xmm2, %xmm0218; SSE2-SSSE3-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]219; SSE2-SSSE3-NEXT: andps %xmm6, %xmm0220; SSE2-SSSE3-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm5[1,3]221; SSE2-SSSE3-NEXT: orps %xmm0, %xmm4222; SSE2-SSSE3-NEXT: movmskps %xmm4, %eax223; SSE2-SSSE3-NEXT: # kill: def $al killed $al killed $eax224; SSE2-SSSE3-NEXT: retq225;226; AVX1-LABEL: v4i64:227; AVX1: # %bb.0:228; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2229; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3230; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2231; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0232; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0233; AVX1-NEXT: vmovmskpd %ymm0, %eax234; AVX1-NEXT: # kill: def $al killed $al killed $eax235; AVX1-NEXT: vzeroupper236; AVX1-NEXT: retq237;238; AVX2-LABEL: v4i64:239; AVX2: # %bb.0:240; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0241; AVX2-NEXT: vmovmskpd %ymm0, %eax242; AVX2-NEXT: # kill: def $al killed $al killed $eax243; AVX2-NEXT: vzeroupper244; AVX2-NEXT: retq245;246; AVX512F-LABEL: v4i64:247; AVX512F: # %bb.0:248; AVX512F-NEXT: vpcmpgtq %ymm1, %ymm0, %k0249; AVX512F-NEXT: kmovw %k0, %eax250; AVX512F-NEXT: # kill: def $al killed $al killed $eax251; AVX512F-NEXT: vzeroupper252; AVX512F-NEXT: retq253;254; AVX512BW-LABEL: v4i64:255; AVX512BW: # %bb.0:256; AVX512BW-NEXT: vpcmpgtq %ymm1, %ymm0, %k0257; AVX512BW-NEXT: kmovd %k0, %eax258; AVX512BW-NEXT: # kill: def $al killed $al killed $eax259; AVX512BW-NEXT: vzeroupper260; AVX512BW-NEXT: retq261 %x = icmp sgt <4 x i64> %a, %b262 %res = bitcast <4 x i1> %x to i4263 ret i4 %res264}265 266define i4 @v4f64(<4 x double> %a, <4 x double> %b) {267; SSE2-SSSE3-LABEL: v4f64:268; SSE2-SSSE3: # %bb.0:269; SSE2-SSSE3-NEXT: cmpltpd %xmm1, %xmm3270; SSE2-SSSE3-NEXT: cmpltpd %xmm0, %xmm2271; SSE2-SSSE3-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]272; SSE2-SSSE3-NEXT: movmskps %xmm2, %eax273; SSE2-SSSE3-NEXT: # kill: def $al killed $al killed $eax274; SSE2-SSSE3-NEXT: retq275;276; AVX12-LABEL: v4f64:277; AVX12: # %bb.0:278; AVX12-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0279; AVX12-NEXT: vmovmskpd %ymm0, %eax280; AVX12-NEXT: # kill: def $al killed $al killed $eax281; AVX12-NEXT: vzeroupper282; AVX12-NEXT: retq283;284; AVX512F-LABEL: v4f64:285; AVX512F: # %bb.0:286; AVX512F-NEXT: vcmpltpd %ymm0, %ymm1, %k0287; AVX512F-NEXT: kmovw %k0, %eax288; AVX512F-NEXT: # kill: def $al killed $al killed $eax289; AVX512F-NEXT: vzeroupper290; AVX512F-NEXT: retq291;292; AVX512BW-LABEL: v4f64:293; AVX512BW: # %bb.0:294; AVX512BW-NEXT: vcmpltpd %ymm0, %ymm1, %k0295; AVX512BW-NEXT: kmovd %k0, %eax296; AVX512BW-NEXT: # kill: def $al killed $al killed $eax297; AVX512BW-NEXT: vzeroupper298; AVX512BW-NEXT: retq299 %x = fcmp ogt <4 x double> %a, %b300 %res = bitcast <4 x i1> %x to i4301 ret i4 %res302}303 304define void @bitcast_32i8_store(ptr %p, <32 x i8> %a0) {305; SSE2-SSSE3-LABEL: bitcast_32i8_store:306; SSE2-SSSE3: # %bb.0:307; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %eax308; SSE2-SSSE3-NEXT: pmovmskb %xmm1, %ecx309; SSE2-SSSE3-NEXT: shll $16, %ecx310; SSE2-SSSE3-NEXT: orl %eax, %ecx311; SSE2-SSSE3-NEXT: movl %ecx, (%rdi)312; SSE2-SSSE3-NEXT: retq313;314; AVX1-LABEL: bitcast_32i8_store:315; AVX1: # %bb.0:316; AVX1-NEXT: vpmovmskb %xmm0, %eax317; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0318; AVX1-NEXT: vpmovmskb %xmm0, %ecx319; AVX1-NEXT: shll $16, %ecx320; AVX1-NEXT: orl %eax, %ecx321; AVX1-NEXT: movl %ecx, (%rdi)322; AVX1-NEXT: vzeroupper323; AVX1-NEXT: retq324;325; AVX2-LABEL: bitcast_32i8_store:326; AVX2: # %bb.0:327; AVX2-NEXT: vpmovmskb %ymm0, %eax328; AVX2-NEXT: movl %eax, (%rdi)329; AVX2-NEXT: vzeroupper330; AVX2-NEXT: retq331;332; AVX512F-LABEL: bitcast_32i8_store:333; AVX512F: # %bb.0:334; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1335; AVX512F-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0336; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm1337; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0338; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0339; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0340; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k1341; AVX512F-NEXT: kmovw %k1, 2(%rdi)342; AVX512F-NEXT: kmovw %k0, (%rdi)343; AVX512F-NEXT: vzeroupper344; AVX512F-NEXT: retq345;346; AVX512BW-LABEL: bitcast_32i8_store:347; AVX512BW: # %bb.0:348; AVX512BW-NEXT: vpmovb2m %ymm0, %k0349; AVX512BW-NEXT: kmovd %k0, (%rdi)350; AVX512BW-NEXT: vzeroupper351; AVX512BW-NEXT: retq352 %a1 = icmp slt <32 x i8> %a0, zeroinitializer353 %a2 = bitcast <32 x i1> %a1 to i32354 store i32 %a2, ptr %p355 ret void356}357 358define void @bitcast_16i16_store(ptr %p, <16 x i16> %a0) {359; SSE2-SSSE3-LABEL: bitcast_16i16_store:360; SSE2-SSSE3: # %bb.0:361; SSE2-SSSE3-NEXT: packsswb %xmm1, %xmm0362; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %eax363; SSE2-SSSE3-NEXT: movw %ax, (%rdi)364; SSE2-SSSE3-NEXT: retq365;366; AVX1-LABEL: bitcast_16i16_store:367; AVX1: # %bb.0:368; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1369; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0370; AVX1-NEXT: vpmovmskb %xmm0, %eax371; AVX1-NEXT: movw %ax, (%rdi)372; AVX1-NEXT: vzeroupper373; AVX1-NEXT: retq374;375; AVX2-LABEL: bitcast_16i16_store:376; AVX2: # %bb.0:377; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1378; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0379; AVX2-NEXT: vpmovmskb %xmm0, %eax380; AVX2-NEXT: movw %ax, (%rdi)381; AVX2-NEXT: vzeroupper382; AVX2-NEXT: retq383;384; AVX512F-LABEL: bitcast_16i16_store:385; AVX512F: # %bb.0:386; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1387; AVX512F-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0388; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0389; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0390; AVX512F-NEXT: kmovw %k0, (%rdi)391; AVX512F-NEXT: vzeroupper392; AVX512F-NEXT: retq393;394; AVX512BW-LABEL: bitcast_16i16_store:395; AVX512BW: # %bb.0:396; AVX512BW-NEXT: vpmovw2m %ymm0, %k0397; AVX512BW-NEXT: kmovw %k0, (%rdi)398; AVX512BW-NEXT: vzeroupper399; AVX512BW-NEXT: retq400 %a1 = icmp slt <16 x i16> %a0, zeroinitializer401 %a2 = bitcast <16 x i1> %a1 to i16402 store i16 %a2, ptr %p403 ret void404}405 406define void @bitcast_8i32_store(ptr %p, <8 x i32> %a0) {407; SSE2-SSSE3-LABEL: bitcast_8i32_store:408; SSE2-SSSE3: # %bb.0:409; SSE2-SSSE3-NEXT: packssdw %xmm1, %xmm0410; SSE2-SSSE3-NEXT: packsswb %xmm0, %xmm0411; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %eax412; SSE2-SSSE3-NEXT: movb %al, (%rdi)413; SSE2-SSSE3-NEXT: retq414;415; AVX12-LABEL: bitcast_8i32_store:416; AVX12: # %bb.0:417; AVX12-NEXT: vmovmskps %ymm0, %eax418; AVX12-NEXT: movb %al, (%rdi)419; AVX12-NEXT: vzeroupper420; AVX12-NEXT: retq421;422; AVX512-LABEL: bitcast_8i32_store:423; AVX512: # %bb.0:424; AVX512-NEXT: vmovmskps %ymm0, %eax425; AVX512-NEXT: movb %al, (%rdi)426; AVX512-NEXT: vzeroupper427; AVX512-NEXT: retq428 %a1 = icmp slt <8 x i32> %a0, zeroinitializer429 %a2 = bitcast <8 x i1> %a1 to i8430 store i8 %a2, ptr %p431 ret void432}433 434define void @bitcast_4i64_store(ptr %p, <4 x i64> %a0) {435; SSE2-SSSE3-LABEL: bitcast_4i64_store:436; SSE2-SSSE3: # %bb.0:437; SSE2-SSSE3-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]438; SSE2-SSSE3-NEXT: movmskps %xmm0, %eax439; SSE2-SSSE3-NEXT: movb %al, (%rdi)440; SSE2-SSSE3-NEXT: retq441;442; AVX12-LABEL: bitcast_4i64_store:443; AVX12: # %bb.0:444; AVX12-NEXT: vmovmskpd %ymm0, %eax445; AVX12-NEXT: movb %al, (%rdi)446; AVX12-NEXT: vzeroupper447; AVX12-NEXT: retq448;449; AVX512F-LABEL: bitcast_4i64_store:450; AVX512F: # %bb.0:451; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1452; AVX512F-NEXT: vpcmpgtq %ymm0, %ymm1, %k0453; AVX512F-NEXT: kmovw %k0, %eax454; AVX512F-NEXT: movb %al, (%rdi)455; AVX512F-NEXT: vzeroupper456; AVX512F-NEXT: retq457;458; AVX512BW-LABEL: bitcast_4i64_store:459; AVX512BW: # %bb.0:460; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1461; AVX512BW-NEXT: vpcmpgtq %ymm0, %ymm1, %k0462; AVX512BW-NEXT: kmovd %k0, %eax463; AVX512BW-NEXT: movb %al, (%rdi)464; AVX512BW-NEXT: vzeroupper465; AVX512BW-NEXT: retq466 %a1 = icmp slt <4 x i64> %a0, zeroinitializer467 %a2 = bitcast <4 x i1> %a1 to i4468 store i4 %a2, ptr %p469 ret void470}471