brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.1 KiB · 656f1e0 Raw
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