2298 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=SSE --check-prefix=SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE424; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512DQ8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW9 10;11; 128-bit vector comparisons12;13 14define <2 x i1> @test_cmp_v2f64(<2 x double> %a0, <2 x double> %a1) nounwind {15; SSE-LABEL: test_cmp_v2f64:16; SSE: # %bb.0:17; SSE-NEXT: cmpltpd %xmm0, %xmm118; SSE-NEXT: movapd %xmm1, %xmm019; SSE-NEXT: retq20;21; AVX-LABEL: test_cmp_v2f64:22; AVX: # %bb.0:23; AVX-NEXT: vcmpltpd %xmm0, %xmm1, %xmm024; AVX-NEXT: retq25 %1 = fcmp ogt <2 x double> %a0, %a126 ret <2 x i1> %127}28 29define <4 x i1> @test_cmp_v4f32(<4 x float> %a0, <4 x float> %a1) nounwind {30; SSE-LABEL: test_cmp_v4f32:31; SSE: # %bb.0:32; SSE-NEXT: cmpltps %xmm0, %xmm133; SSE-NEXT: movaps %xmm1, %xmm034; SSE-NEXT: retq35;36; AVX-LABEL: test_cmp_v4f32:37; AVX: # %bb.0:38; AVX-NEXT: vcmpltps %xmm0, %xmm1, %xmm039; AVX-NEXT: retq40 %1 = fcmp ogt <4 x float> %a0, %a141 ret <4 x i1> %142}43 44define <2 x i1> @test_cmp_v2i64(<2 x i64> %a0, <2 x i64> %a1) nounwind {45; SSE2-LABEL: test_cmp_v2i64:46; SSE2: # %bb.0:47; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648]48; SSE2-NEXT: pxor %xmm2, %xmm149; SSE2-NEXT: pxor %xmm2, %xmm050; SSE2-NEXT: movdqa %xmm0, %xmm251; SSE2-NEXT: pcmpgtd %xmm1, %xmm252; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]53; SSE2-NEXT: pcmpeqd %xmm1, %xmm054; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]55; SSE2-NEXT: pand %xmm3, %xmm156; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]57; SSE2-NEXT: por %xmm1, %xmm058; SSE2-NEXT: retq59;60; SSE42-LABEL: test_cmp_v2i64:61; SSE42: # %bb.0:62; SSE42-NEXT: pcmpgtq %xmm1, %xmm063; SSE42-NEXT: retq64;65; AVX-LABEL: test_cmp_v2i64:66; AVX: # %bb.0:67; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm068; AVX-NEXT: retq69 %1 = icmp sgt <2 x i64> %a0, %a170 ret <2 x i1> %171}72 73define <4 x i1> @test_cmp_v4i32(<4 x i32> %a0, <4 x i32> %a1) nounwind {74; SSE-LABEL: test_cmp_v4i32:75; SSE: # %bb.0:76; SSE-NEXT: pcmpgtd %xmm1, %xmm077; SSE-NEXT: retq78;79; AVX-LABEL: test_cmp_v4i32:80; AVX: # %bb.0:81; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm082; AVX-NEXT: retq83 %1 = icmp sgt <4 x i32> %a0, %a184 ret <4 x i1> %185}86 87define <8 x i1> @test_cmp_v8i16(<8 x i16> %a0, <8 x i16> %a1) nounwind {88; SSE-LABEL: test_cmp_v8i16:89; SSE: # %bb.0:90; SSE-NEXT: pcmpgtw %xmm1, %xmm091; SSE-NEXT: retq92;93; AVX-LABEL: test_cmp_v8i16:94; AVX: # %bb.0:95; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm096; AVX-NEXT: retq97 %1 = icmp sgt <8 x i16> %a0, %a198 ret <8 x i1> %199}100 101define <16 x i1> @test_cmp_v16i8(<16 x i8> %a0, <16 x i8> %a1) nounwind {102; SSE-LABEL: test_cmp_v16i8:103; SSE: # %bb.0:104; SSE-NEXT: pcmpgtb %xmm1, %xmm0105; SSE-NEXT: retq106;107; AVX-LABEL: test_cmp_v16i8:108; AVX: # %bb.0:109; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0110; AVX-NEXT: retq111 %1 = icmp sgt <16 x i8> %a0, %a1112 ret <16 x i1> %1113}114 115;116; 256-bit vector comparisons117;118 119define <4 x i1> @test_cmp_v4f64(<4 x double> %a0, <4 x double> %a1) nounwind {120; SSE-LABEL: test_cmp_v4f64:121; SSE: # %bb.0:122; SSE-NEXT: cmpltpd %xmm1, %xmm3123; SSE-NEXT: cmpltpd %xmm0, %xmm2124; SSE-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]125; SSE-NEXT: movaps %xmm2, %xmm0126; SSE-NEXT: retq127;128; AVX1-LABEL: test_cmp_v4f64:129; AVX1: # %bb.0:130; AVX1-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0131; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1132; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0133; AVX1-NEXT: vzeroupper134; AVX1-NEXT: retq135;136; AVX2-LABEL: test_cmp_v4f64:137; AVX2: # %bb.0:138; AVX2-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0139; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm1140; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0141; AVX2-NEXT: vzeroupper142; AVX2-NEXT: retq143;144; AVX512-LABEL: test_cmp_v4f64:145; AVX512: # %bb.0:146; AVX512-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0147; AVX512-NEXT: vpmovqd %zmm0, %ymm0148; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0149; AVX512-NEXT: vzeroupper150; AVX512-NEXT: retq151 %1 = fcmp ogt <4 x double> %a0, %a1152 ret <4 x i1> %1153}154 155define <8 x i1> @test_cmp_v8f32(<8 x float> %a0, <8 x float> %a1) nounwind {156; SSE-LABEL: test_cmp_v8f32:157; SSE: # %bb.0:158; SSE-NEXT: cmpltps %xmm1, %xmm3159; SSE-NEXT: cmpltps %xmm0, %xmm2160; SSE-NEXT: packssdw %xmm3, %xmm2161; SSE-NEXT: movdqa %xmm2, %xmm0162; SSE-NEXT: retq163;164; AVX1-LABEL: test_cmp_v8f32:165; AVX1: # %bb.0:166; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm0167; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1168; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0169; AVX1-NEXT: vzeroupper170; AVX1-NEXT: retq171;172; AVX2-LABEL: test_cmp_v8f32:173; AVX2: # %bb.0:174; AVX2-NEXT: vcmpltps %ymm0, %ymm1, %ymm0175; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm1176; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0177; AVX2-NEXT: vzeroupper178; AVX2-NEXT: retq179;180; AVX512-LABEL: test_cmp_v8f32:181; AVX512: # %bb.0:182; AVX512-NEXT: vcmpltps %ymm0, %ymm1, %ymm0183; AVX512-NEXT: vpmovdw %zmm0, %ymm0184; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0185; AVX512-NEXT: vzeroupper186; AVX512-NEXT: retq187 %1 = fcmp ogt <8 x float> %a0, %a1188 ret <8 x i1> %1189}190 191define <4 x i1> @test_cmp_v4i64(<4 x i64> %a0, <4 x i64> %a1) nounwind {192; SSE2-LABEL: test_cmp_v4i64:193; SSE2: # %bb.0:194; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]195; SSE2-NEXT: pxor %xmm4, %xmm3196; SSE2-NEXT: pxor %xmm4, %xmm1197; SSE2-NEXT: movdqa %xmm1, %xmm5198; SSE2-NEXT: pcmpgtd %xmm3, %xmm5199; SSE2-NEXT: pxor %xmm4, %xmm2200; SSE2-NEXT: pxor %xmm4, %xmm0201; SSE2-NEXT: movdqa %xmm0, %xmm4202; SSE2-NEXT: pcmpgtd %xmm2, %xmm4203; SSE2-NEXT: movdqa %xmm4, %xmm6204; SSE2-NEXT: shufps {{.*#+}} xmm6 = xmm6[0,2],xmm5[0,2]205; SSE2-NEXT: pcmpeqd %xmm3, %xmm1206; SSE2-NEXT: pcmpeqd %xmm2, %xmm0207; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]208; SSE2-NEXT: andps %xmm6, %xmm0209; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm5[1,3]210; SSE2-NEXT: orps %xmm4, %xmm0211; SSE2-NEXT: retq212;213; SSE42-LABEL: test_cmp_v4i64:214; SSE42: # %bb.0:215; SSE42-NEXT: pcmpgtq %xmm3, %xmm1216; SSE42-NEXT: pcmpgtq %xmm2, %xmm0217; SSE42-NEXT: packssdw %xmm1, %xmm0218; SSE42-NEXT: retq219;220; AVX1-LABEL: test_cmp_v4i64:221; AVX1: # %bb.0:222; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2223; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3224; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2225; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0226; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0227; AVX1-NEXT: vzeroupper228; AVX1-NEXT: retq229;230; AVX2-LABEL: test_cmp_v4i64:231; AVX2: # %bb.0:232; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0233; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1234; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0235; AVX2-NEXT: vzeroupper236; AVX2-NEXT: retq237;238; AVX512-LABEL: test_cmp_v4i64:239; AVX512: # %bb.0:240; AVX512-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0241; AVX512-NEXT: vpmovqd %zmm0, %ymm0242; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0243; AVX512-NEXT: vzeroupper244; AVX512-NEXT: retq245 %1 = icmp sgt <4 x i64> %a0, %a1246 ret <4 x i1> %1247}248 249define <8 x i1> @test_cmp_v8i32(<8 x i32> %a0, <8 x i32> %a1) nounwind {250; SSE-LABEL: test_cmp_v8i32:251; SSE: # %bb.0:252; SSE-NEXT: pcmpgtd %xmm3, %xmm1253; SSE-NEXT: pcmpgtd %xmm2, %xmm0254; SSE-NEXT: packssdw %xmm1, %xmm0255; SSE-NEXT: retq256;257; AVX1-LABEL: test_cmp_v8i32:258; AVX1: # %bb.0:259; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2260; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3261; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2262; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0263; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0264; AVX1-NEXT: vzeroupper265; AVX1-NEXT: retq266;267; AVX2-LABEL: test_cmp_v8i32:268; AVX2: # %bb.0:269; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0270; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1271; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0272; AVX2-NEXT: vzeroupper273; AVX2-NEXT: retq274;275; AVX512-LABEL: test_cmp_v8i32:276; AVX512: # %bb.0:277; AVX512-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0278; AVX512-NEXT: vpmovdw %zmm0, %ymm0279; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0280; AVX512-NEXT: vzeroupper281; AVX512-NEXT: retq282 %1 = icmp sgt <8 x i32> %a0, %a1283 ret <8 x i1> %1284}285 286define <16 x i1> @test_cmp_v16i16(<16 x i16> %a0, <16 x i16> %a1) nounwind {287; SSE-LABEL: test_cmp_v16i16:288; SSE: # %bb.0:289; SSE-NEXT: pcmpgtw %xmm3, %xmm1290; SSE-NEXT: pcmpgtw %xmm2, %xmm0291; SSE-NEXT: packsswb %xmm1, %xmm0292; SSE-NEXT: retq293;294; AVX1-LABEL: test_cmp_v16i16:295; AVX1: # %bb.0:296; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2297; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3298; AVX1-NEXT: vpcmpgtw %xmm2, %xmm3, %xmm2299; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0300; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0301; AVX1-NEXT: vzeroupper302; AVX1-NEXT: retq303;304; AVX2-LABEL: test_cmp_v16i16:305; AVX2: # %bb.0:306; AVX2-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0307; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1308; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0309; AVX2-NEXT: vzeroupper310; AVX2-NEXT: retq311;312; AVX512F-LABEL: test_cmp_v16i16:313; AVX512F: # %bb.0:314; AVX512F-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0315; 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],zero316; AVX512F-NEXT: vpmovdb %zmm0, %xmm0317; AVX512F-NEXT: vzeroupper318; AVX512F-NEXT: retq319;320; AVX512DQ-LABEL: test_cmp_v16i16:321; AVX512DQ: # %bb.0:322; AVX512DQ-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0323; AVX512DQ-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],zero324; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0325; AVX512DQ-NEXT: vzeroupper326; AVX512DQ-NEXT: retq327;328; AVX512BW-LABEL: test_cmp_v16i16:329; AVX512BW: # %bb.0:330; AVX512BW-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0331; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0332; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0333; AVX512BW-NEXT: vzeroupper334; AVX512BW-NEXT: retq335 %1 = icmp sgt <16 x i16> %a0, %a1336 ret <16 x i1> %1337}338 339define <32 x i1> @test_cmp_v32i8(<32 x i8> %a0, <32 x i8> %a1) nounwind {340; SSE-LABEL: test_cmp_v32i8:341; SSE: # %bb.0:342; SSE-NEXT: movq %rdi, %rax343; SSE-NEXT: pcmpgtb %xmm2, %xmm0344; SSE-NEXT: pmovmskb %xmm0, %ecx345; SSE-NEXT: pcmpgtb %xmm3, %xmm1346; SSE-NEXT: pmovmskb %xmm1, %edx347; SSE-NEXT: shll $16, %edx348; SSE-NEXT: orl %ecx, %edx349; SSE-NEXT: movl %edx, (%rdi)350; SSE-NEXT: retq351;352; AVX1-LABEL: test_cmp_v32i8:353; AVX1: # %bb.0:354; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2355; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3356; AVX1-NEXT: vpcmpgtb %xmm2, %xmm3, %xmm2357; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0358; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0359; AVX1-NEXT: retq360;361; AVX2-LABEL: test_cmp_v32i8:362; AVX2: # %bb.0:363; AVX2-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0364; AVX2-NEXT: retq365;366; AVX512-LABEL: test_cmp_v32i8:367; AVX512: # %bb.0:368; AVX512-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0369; AVX512-NEXT: retq370 %1 = icmp sgt <32 x i8> %a0, %a1371 ret <32 x i1> %1372}373 374;375; 512-bit vector comparisons376;377 378define <8 x i1> @test_cmp_v8f64(<8 x double> %a0, <8 x double> %a1) nounwind {379; SSE-LABEL: test_cmp_v8f64:380; SSE: # %bb.0:381; SSE-NEXT: cmpltpd %xmm3, %xmm7382; SSE-NEXT: cmpltpd %xmm2, %xmm6383; SSE-NEXT: packssdw %xmm7, %xmm6384; SSE-NEXT: cmpltpd %xmm1, %xmm5385; SSE-NEXT: cmpltpd %xmm0, %xmm4386; SSE-NEXT: packssdw %xmm5, %xmm4387; SSE-NEXT: packssdw %xmm6, %xmm4388; SSE-NEXT: movdqa %xmm4, %xmm0389; SSE-NEXT: retq390;391; AVX1-LABEL: test_cmp_v8f64:392; AVX1: # %bb.0:393; AVX1-NEXT: vcmpltpd %ymm1, %ymm3, %ymm1394; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3395; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1396; AVX1-NEXT: vcmpltpd %ymm0, %ymm2, %ymm0397; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2398; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0399; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0400; AVX1-NEXT: vzeroupper401; AVX1-NEXT: retq402;403; AVX2-LABEL: test_cmp_v8f64:404; AVX2: # %bb.0:405; AVX2-NEXT: vcmpltpd %ymm1, %ymm3, %ymm1406; AVX2-NEXT: vcmpltpd %ymm0, %ymm2, %ymm0407; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0408; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1409; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0410; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]411; AVX2-NEXT: vzeroupper412; AVX2-NEXT: retq413;414; AVX512F-LABEL: test_cmp_v8f64:415; AVX512F: # %bb.0:416; AVX512F-NEXT: vcmpltpd %zmm0, %zmm1, %k1417; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}418; AVX512F-NEXT: vpmovdw %zmm0, %ymm0419; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0420; AVX512F-NEXT: vzeroupper421; AVX512F-NEXT: retq422;423; AVX512DQ-LABEL: test_cmp_v8f64:424; AVX512DQ: # %bb.0:425; AVX512DQ-NEXT: vcmpltpd %zmm0, %zmm1, %k0426; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0427; AVX512DQ-NEXT: vpmovdw %zmm0, %ymm0428; AVX512DQ-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0429; AVX512DQ-NEXT: vzeroupper430; AVX512DQ-NEXT: retq431;432; AVX512BW-LABEL: test_cmp_v8f64:433; AVX512BW: # %bb.0:434; AVX512BW-NEXT: vcmpltpd %zmm0, %zmm1, %k0435; AVX512BW-NEXT: vpmovm2w %k0, %zmm0436; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0437; AVX512BW-NEXT: vzeroupper438; AVX512BW-NEXT: retq439 %1 = fcmp ogt <8 x double> %a0, %a1440 ret <8 x i1> %1441}442 443define <16 x i1> @test_cmp_v16f32(<16 x float> %a0, <16 x float> %a1) nounwind {444; SSE-LABEL: test_cmp_v16f32:445; SSE: # %bb.0:446; SSE-NEXT: cmpltps %xmm3, %xmm7447; SSE-NEXT: cmpltps %xmm2, %xmm6448; SSE-NEXT: packssdw %xmm7, %xmm6449; SSE-NEXT: cmpltps %xmm1, %xmm5450; SSE-NEXT: cmpltps %xmm0, %xmm4451; SSE-NEXT: packssdw %xmm5, %xmm4452; SSE-NEXT: packsswb %xmm6, %xmm4453; SSE-NEXT: movdqa %xmm4, %xmm0454; SSE-NEXT: retq455;456; AVX1-LABEL: test_cmp_v16f32:457; AVX1: # %bb.0:458; AVX1-NEXT: vcmpltps %ymm1, %ymm3, %ymm1459; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3460; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1461; AVX1-NEXT: vcmpltps %ymm0, %ymm2, %ymm0462; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2463; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0464; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0465; AVX1-NEXT: vzeroupper466; AVX1-NEXT: retq467;468; AVX2-LABEL: test_cmp_v16f32:469; AVX2: # %bb.0:470; AVX2-NEXT: vcmpltps %ymm1, %ymm3, %ymm1471; AVX2-NEXT: vcmpltps %ymm0, %ymm2, %ymm0472; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0473; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1474; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0475; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]476; AVX2-NEXT: vzeroupper477; AVX2-NEXT: retq478;479; AVX512F-LABEL: test_cmp_v16f32:480; AVX512F: # %bb.0:481; AVX512F-NEXT: vcmpltps %zmm0, %zmm1, %k1482; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}483; AVX512F-NEXT: vpmovdb %zmm0, %xmm0484; AVX512F-NEXT: vzeroupper485; AVX512F-NEXT: retq486;487; AVX512DQ-LABEL: test_cmp_v16f32:488; AVX512DQ: # %bb.0:489; AVX512DQ-NEXT: vcmpltps %zmm0, %zmm1, %k0490; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0491; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0492; AVX512DQ-NEXT: vzeroupper493; AVX512DQ-NEXT: retq494;495; AVX512BW-LABEL: test_cmp_v16f32:496; AVX512BW: # %bb.0:497; AVX512BW-NEXT: vcmpltps %zmm0, %zmm1, %k0498; AVX512BW-NEXT: vpmovm2b %k0, %zmm0499; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0500; AVX512BW-NEXT: vzeroupper501; AVX512BW-NEXT: retq502 %1 = fcmp ogt <16 x float> %a0, %a1503 ret <16 x i1> %1504}505 506define <8 x i1> @test_cmp_v8i64(<8 x i64> %a0, <8 x i64> %a1) nounwind {507; SSE2-LABEL: test_cmp_v8i64:508; SSE2: # %bb.0:509; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648]510; SSE2-NEXT: pxor %xmm8, %xmm7511; SSE2-NEXT: pxor %xmm8, %xmm3512; SSE2-NEXT: movdqa %xmm3, %xmm9513; SSE2-NEXT: pcmpgtd %xmm7, %xmm9514; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]515; SSE2-NEXT: pcmpeqd %xmm7, %xmm3516; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]517; SSE2-NEXT: pand %xmm10, %xmm3518; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]519; SSE2-NEXT: por %xmm3, %xmm7520; SSE2-NEXT: pxor %xmm8, %xmm6521; SSE2-NEXT: pxor %xmm8, %xmm2522; SSE2-NEXT: movdqa %xmm2, %xmm3523; SSE2-NEXT: pcmpgtd %xmm6, %xmm3524; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm3[0,0,2,2]525; SSE2-NEXT: pcmpeqd %xmm6, %xmm2526; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]527; SSE2-NEXT: pand %xmm9, %xmm6528; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]529; SSE2-NEXT: por %xmm6, %xmm2530; SSE2-NEXT: packssdw %xmm7, %xmm2531; SSE2-NEXT: pxor %xmm8, %xmm5532; SSE2-NEXT: pxor %xmm8, %xmm1533; SSE2-NEXT: movdqa %xmm1, %xmm3534; SSE2-NEXT: pcmpgtd %xmm5, %xmm3535; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]536; SSE2-NEXT: pcmpeqd %xmm5, %xmm1537; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]538; SSE2-NEXT: pand %xmm6, %xmm1539; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]540; SSE2-NEXT: por %xmm1, %xmm3541; SSE2-NEXT: pxor %xmm8, %xmm4542; SSE2-NEXT: pxor %xmm8, %xmm0543; SSE2-NEXT: movdqa %xmm0, %xmm1544; SSE2-NEXT: pcmpgtd %xmm4, %xmm1545; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]546; SSE2-NEXT: pcmpeqd %xmm4, %xmm0547; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]548; SSE2-NEXT: pand %xmm5, %xmm4549; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]550; SSE2-NEXT: por %xmm4, %xmm0551; SSE2-NEXT: packssdw %xmm3, %xmm0552; SSE2-NEXT: packssdw %xmm2, %xmm0553; SSE2-NEXT: retq554;555; SSE42-LABEL: test_cmp_v8i64:556; SSE42: # %bb.0:557; SSE42-NEXT: pcmpgtq %xmm7, %xmm3558; SSE42-NEXT: pcmpgtq %xmm6, %xmm2559; SSE42-NEXT: packssdw %xmm3, %xmm2560; SSE42-NEXT: pcmpgtq %xmm5, %xmm1561; SSE42-NEXT: pcmpgtq %xmm4, %xmm0562; SSE42-NEXT: packssdw %xmm1, %xmm0563; SSE42-NEXT: packssdw %xmm2, %xmm0564; SSE42-NEXT: retq565;566; AVX1-LABEL: test_cmp_v8i64:567; AVX1: # %bb.0:568; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4569; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5570; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4571; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm1572; AVX1-NEXT: vpackssdw %xmm4, %xmm1, %xmm1573; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3574; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4575; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3576; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm0577; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0578; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0579; AVX1-NEXT: vzeroupper580; AVX1-NEXT: retq581;582; AVX2-LABEL: test_cmp_v8i64:583; AVX2: # %bb.0:584; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm1585; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm0586; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0587; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1588; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0589; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]590; AVX2-NEXT: vzeroupper591; AVX2-NEXT: retq592;593; AVX512F-LABEL: test_cmp_v8i64:594; AVX512F: # %bb.0:595; AVX512F-NEXT: vpcmpgtq %zmm1, %zmm0, %k1596; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}597; AVX512F-NEXT: vpmovdw %zmm0, %ymm0598; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0599; AVX512F-NEXT: vzeroupper600; AVX512F-NEXT: retq601;602; AVX512DQ-LABEL: test_cmp_v8i64:603; AVX512DQ: # %bb.0:604; AVX512DQ-NEXT: vpcmpgtq %zmm1, %zmm0, %k0605; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0606; AVX512DQ-NEXT: vpmovdw %zmm0, %ymm0607; AVX512DQ-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0608; AVX512DQ-NEXT: vzeroupper609; AVX512DQ-NEXT: retq610;611; AVX512BW-LABEL: test_cmp_v8i64:612; AVX512BW: # %bb.0:613; AVX512BW-NEXT: vpcmpgtq %zmm1, %zmm0, %k0614; AVX512BW-NEXT: vpmovm2w %k0, %zmm0615; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0616; AVX512BW-NEXT: vzeroupper617; AVX512BW-NEXT: retq618 %1 = icmp sgt <8 x i64> %a0, %a1619 ret <8 x i1> %1620}621 622define <16 x i1> @test_cmp_v16i32(<16 x i32> %a0, <16 x i32> %a1) nounwind {623; SSE-LABEL: test_cmp_v16i32:624; SSE: # %bb.0:625; SSE-NEXT: pcmpgtd %xmm7, %xmm3626; SSE-NEXT: pcmpgtd %xmm6, %xmm2627; SSE-NEXT: packssdw %xmm3, %xmm2628; SSE-NEXT: pcmpgtd %xmm5, %xmm1629; SSE-NEXT: pcmpgtd %xmm4, %xmm0630; SSE-NEXT: packssdw %xmm1, %xmm0631; SSE-NEXT: packsswb %xmm2, %xmm0632; SSE-NEXT: retq633;634; AVX1-LABEL: test_cmp_v16i32:635; AVX1: # %bb.0:636; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4637; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5638; AVX1-NEXT: vpcmpgtd %xmm4, %xmm5, %xmm4639; AVX1-NEXT: vpcmpgtd %xmm3, %xmm1, %xmm1640; AVX1-NEXT: vpackssdw %xmm4, %xmm1, %xmm1641; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3642; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4643; AVX1-NEXT: vpcmpgtd %xmm3, %xmm4, %xmm3644; AVX1-NEXT: vpcmpgtd %xmm2, %xmm0, %xmm0645; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0646; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0647; AVX1-NEXT: vzeroupper648; AVX1-NEXT: retq649;650; AVX2-LABEL: test_cmp_v16i32:651; AVX2: # %bb.0:652; AVX2-NEXT: vpcmpgtd %ymm3, %ymm1, %ymm1653; AVX2-NEXT: vpcmpgtd %ymm2, %ymm0, %ymm0654; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0655; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1656; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0657; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]658; AVX2-NEXT: vzeroupper659; AVX2-NEXT: retq660;661; AVX512F-LABEL: test_cmp_v16i32:662; AVX512F: # %bb.0:663; AVX512F-NEXT: vpcmpgtd %zmm1, %zmm0, %k1664; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}665; AVX512F-NEXT: vpmovdb %zmm0, %xmm0666; AVX512F-NEXT: vzeroupper667; AVX512F-NEXT: retq668;669; AVX512DQ-LABEL: test_cmp_v16i32:670; AVX512DQ: # %bb.0:671; AVX512DQ-NEXT: vpcmpgtd %zmm1, %zmm0, %k0672; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0673; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0674; AVX512DQ-NEXT: vzeroupper675; AVX512DQ-NEXT: retq676;677; AVX512BW-LABEL: test_cmp_v16i32:678; AVX512BW: # %bb.0:679; AVX512BW-NEXT: vpcmpgtd %zmm1, %zmm0, %k0680; AVX512BW-NEXT: vpmovm2b %k0, %zmm0681; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0682; AVX512BW-NEXT: vzeroupper683; AVX512BW-NEXT: retq684 %1 = icmp sgt <16 x i32> %a0, %a1685 ret <16 x i1> %1686}687 688define <32 x i1> @test_cmp_v32i16(<32 x i16> %a0, <32 x i16> %a1) nounwind {689; SSE-LABEL: test_cmp_v32i16:690; SSE: # %bb.0:691; SSE-NEXT: movq %rdi, %rax692; SSE-NEXT: pcmpgtw %xmm5, %xmm1693; SSE-NEXT: pcmpgtw %xmm4, %xmm0694; SSE-NEXT: packsswb %xmm1, %xmm0695; SSE-NEXT: pmovmskb %xmm0, %ecx696; SSE-NEXT: pcmpgtw %xmm7, %xmm3697; SSE-NEXT: pcmpgtw %xmm6, %xmm2698; SSE-NEXT: packsswb %xmm3, %xmm2699; SSE-NEXT: pmovmskb %xmm2, %edx700; SSE-NEXT: shll $16, %edx701; SSE-NEXT: orl %ecx, %edx702; SSE-NEXT: movl %edx, (%rdi)703; SSE-NEXT: retq704;705; AVX1-LABEL: test_cmp_v32i16:706; AVX1: # %bb.0:707; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4708; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5709; AVX1-NEXT: vpcmpgtw %xmm4, %xmm5, %xmm4710; AVX1-NEXT: vpcmpgtw %xmm3, %xmm1, %xmm1711; AVX1-NEXT: vpacksswb %xmm4, %xmm1, %xmm1712; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3713; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4714; AVX1-NEXT: vpcmpgtw %xmm3, %xmm4, %xmm3715; AVX1-NEXT: vpcmpgtw %xmm2, %xmm0, %xmm0716; AVX1-NEXT: vpacksswb %xmm3, %xmm0, %xmm0717; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0718; AVX1-NEXT: retq719;720; AVX2-LABEL: test_cmp_v32i16:721; AVX2: # %bb.0:722; AVX2-NEXT: vpcmpgtw %ymm3, %ymm1, %ymm1723; AVX2-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm0724; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0725; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]726; AVX2-NEXT: retq727;728; AVX512F-LABEL: test_cmp_v32i16:729; AVX512F: # %bb.0:730; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2731; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3732; AVX512F-NEXT: vpcmpgtw %ymm2, %ymm3, %ymm2733; AVX512F-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0734; AVX512F-NEXT: vpacksswb %ymm2, %ymm0, %ymm0735; AVX512F-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]736; AVX512F-NEXT: retq737;738; AVX512DQ-LABEL: test_cmp_v32i16:739; AVX512DQ: # %bb.0:740; AVX512DQ-NEXT: vextracti64x4 $1, %zmm1, %ymm2741; AVX512DQ-NEXT: vextracti64x4 $1, %zmm0, %ymm3742; AVX512DQ-NEXT: vpcmpgtw %ymm2, %ymm3, %ymm2743; AVX512DQ-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0744; AVX512DQ-NEXT: vpacksswb %ymm2, %ymm0, %ymm0745; AVX512DQ-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]746; AVX512DQ-NEXT: retq747;748; AVX512BW-LABEL: test_cmp_v32i16:749; AVX512BW: # %bb.0:750; AVX512BW-NEXT: vpcmpgtw %zmm1, %zmm0, %k0751; AVX512BW-NEXT: vpmovm2b %k0, %zmm0752; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0753; AVX512BW-NEXT: retq754 %1 = icmp sgt <32 x i16> %a0, %a1755 ret <32 x i1> %1756}757 758define <64 x i1> @test_cmp_v64i8(<64 x i8> %a0, <64 x i8> %a1) nounwind {759; SSE-LABEL: test_cmp_v64i8:760; SSE: # %bb.0:761; SSE-NEXT: movq %rdi, %rax762; SSE-NEXT: pcmpgtb %xmm4, %xmm0763; SSE-NEXT: pmovmskb %xmm0, %ecx764; SSE-NEXT: pcmpgtb %xmm5, %xmm1765; SSE-NEXT: pmovmskb %xmm1, %edx766; SSE-NEXT: shll $16, %edx767; SSE-NEXT: orl %ecx, %edx768; SSE-NEXT: pcmpgtb %xmm6, %xmm2769; SSE-NEXT: pmovmskb %xmm2, %ecx770; SSE-NEXT: pcmpgtb %xmm7, %xmm3771; SSE-NEXT: pmovmskb %xmm3, %esi772; SSE-NEXT: shll $16, %esi773; SSE-NEXT: orl %ecx, %esi774; SSE-NEXT: shlq $32, %rsi775; SSE-NEXT: orq %rdx, %rsi776; SSE-NEXT: movq %rsi, (%rdi)777; SSE-NEXT: retq778;779; AVX1-LABEL: test_cmp_v64i8:780; AVX1: # %bb.0:781; AVX1-NEXT: movq %rdi, %rax782; AVX1-NEXT: vpcmpgtb %xmm2, %xmm0, %xmm4783; AVX1-NEXT: vpmovmskb %xmm4, %ecx784; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2785; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0786; AVX1-NEXT: vpcmpgtb %xmm2, %xmm0, %xmm0787; AVX1-NEXT: vpmovmskb %xmm0, %edx788; AVX1-NEXT: shll $16, %edx789; AVX1-NEXT: orl %ecx, %edx790; AVX1-NEXT: vpcmpgtb %xmm3, %xmm1, %xmm0791; AVX1-NEXT: vpmovmskb %xmm0, %ecx792; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0793; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1794; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0795; AVX1-NEXT: vpmovmskb %xmm0, %esi796; AVX1-NEXT: shll $16, %esi797; AVX1-NEXT: orl %ecx, %esi798; AVX1-NEXT: shlq $32, %rsi799; AVX1-NEXT: orq %rdx, %rsi800; AVX1-NEXT: movq %rsi, (%rdi)801; AVX1-NEXT: vzeroupper802; AVX1-NEXT: retq803;804; AVX2-LABEL: test_cmp_v64i8:805; AVX2: # %bb.0:806; AVX2-NEXT: movq %rdi, %rax807; AVX2-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm0808; AVX2-NEXT: vpmovmskb %ymm0, %ecx809; AVX2-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm0810; AVX2-NEXT: vpmovmskb %ymm0, %edx811; AVX2-NEXT: shlq $32, %rdx812; AVX2-NEXT: orq %rcx, %rdx813; AVX2-NEXT: movq %rdx, (%rdi)814; AVX2-NEXT: vzeroupper815; AVX2-NEXT: retq816;817; AVX512F-LABEL: test_cmp_v64i8:818; AVX512F: # %bb.0:819; AVX512F-NEXT: movq %rdi, %rax820; AVX512F-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm2821; AVX512F-NEXT: vpmovsxbd %xmm2, %zmm3822; AVX512F-NEXT: vptestmd %zmm3, %zmm3, %k0823; AVX512F-NEXT: vextracti128 $1, %ymm2, %xmm2824; AVX512F-NEXT: vpmovsxbd %xmm2, %zmm2825; AVX512F-NEXT: vptestmd %zmm2, %zmm2, %k1826; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm1827; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm0828; AVX512F-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0829; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm1830; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k2831; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0832; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0833; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k3834; AVX512F-NEXT: kmovw %k3, 6(%rdi)835; AVX512F-NEXT: kmovw %k2, 4(%rdi)836; AVX512F-NEXT: kmovw %k1, 2(%rdi)837; AVX512F-NEXT: kmovw %k0, (%rdi)838; AVX512F-NEXT: vzeroupper839; AVX512F-NEXT: retq840;841; AVX512DQ-LABEL: test_cmp_v64i8:842; AVX512DQ: # %bb.0:843; AVX512DQ-NEXT: movq %rdi, %rax844; AVX512DQ-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm2845; AVX512DQ-NEXT: vpmovsxbd %xmm2, %zmm3846; AVX512DQ-NEXT: vpmovd2m %zmm3, %k0847; AVX512DQ-NEXT: vextracti128 $1, %ymm2, %xmm2848; AVX512DQ-NEXT: vpmovsxbd %xmm2, %zmm2849; AVX512DQ-NEXT: vpmovd2m %zmm2, %k1850; AVX512DQ-NEXT: vextracti64x4 $1, %zmm1, %ymm1851; AVX512DQ-NEXT: vextracti64x4 $1, %zmm0, %ymm0852; AVX512DQ-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0853; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm1854; AVX512DQ-NEXT: vpmovd2m %zmm1, %k2855; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm0856; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm0857; AVX512DQ-NEXT: vpmovd2m %zmm0, %k3858; AVX512DQ-NEXT: kmovw %k3, 6(%rdi)859; AVX512DQ-NEXT: kmovw %k2, 4(%rdi)860; AVX512DQ-NEXT: kmovw %k1, 2(%rdi)861; AVX512DQ-NEXT: kmovw %k0, (%rdi)862; AVX512DQ-NEXT: vzeroupper863; AVX512DQ-NEXT: retq864;865; AVX512BW-LABEL: test_cmp_v64i8:866; AVX512BW: # %bb.0:867; AVX512BW-NEXT: vpcmpgtb %zmm1, %zmm0, %k0868; AVX512BW-NEXT: vpmovm2b %k0, %zmm0869; AVX512BW-NEXT: retq870 %1 = icmp sgt <64 x i8> %a0, %a1871 ret <64 x i1> %1872}873 874;875; 1024-bit vector comparisons876;877 878define <16 x i1> @test_cmp_v16f64(<16 x double> %a0, <16 x double> %a1) nounwind {879; SSE-LABEL: test_cmp_v16f64:880; SSE: # %bb.0:881; SSE-NEXT: movapd %xmm0, %xmm8882; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0883; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm11884; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm10885; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12886; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm9887; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13888; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm14889; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm15890; SSE-NEXT: cmpltpd %xmm7, %xmm15891; SSE-NEXT: cmpltpd %xmm6, %xmm14892; SSE-NEXT: packssdw %xmm15, %xmm14893; SSE-NEXT: cmpltpd %xmm5, %xmm13894; SSE-NEXT: cmpltpd %xmm4, %xmm9895; SSE-NEXT: packssdw %xmm13, %xmm9896; SSE-NEXT: packssdw %xmm14, %xmm9897; SSE-NEXT: cmpltpd %xmm3, %xmm12898; SSE-NEXT: cmpltpd %xmm2, %xmm10899; SSE-NEXT: packssdw %xmm12, %xmm10900; SSE-NEXT: cmpltpd %xmm1, %xmm11901; SSE-NEXT: cmpltpd %xmm8, %xmm0902; SSE-NEXT: packssdw %xmm11, %xmm0903; SSE-NEXT: packssdw %xmm10, %xmm0904; SSE-NEXT: packsswb %xmm9, %xmm0905; SSE-NEXT: retq906;907; AVX1-LABEL: test_cmp_v16f64:908; AVX1: # %bb.0:909; AVX1-NEXT: vcmpltpd %ymm3, %ymm7, %ymm3910; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm7911; AVX1-NEXT: vpackssdw %xmm7, %xmm3, %xmm3912; AVX1-NEXT: vcmpltpd %ymm2, %ymm6, %ymm2913; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6914; AVX1-NEXT: vpackssdw %xmm6, %xmm2, %xmm2915; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm2916; AVX1-NEXT: vcmpltpd %ymm1, %ymm5, %ymm1917; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3918; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1919; AVX1-NEXT: vcmpltpd %ymm0, %ymm4, %ymm0920; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3921; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0922; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0923; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0924; AVX1-NEXT: vzeroupper925; AVX1-NEXT: retq926;927; AVX2-LABEL: test_cmp_v16f64:928; AVX2: # %bb.0:929; AVX2-NEXT: vcmpltpd %ymm3, %ymm7, %ymm3930; AVX2-NEXT: vcmpltpd %ymm2, %ymm6, %ymm2931; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm2932; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]933; AVX2-NEXT: vcmpltpd %ymm1, %ymm5, %ymm1934; AVX2-NEXT: vcmpltpd %ymm0, %ymm4, %ymm0935; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0936; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]937; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm0938; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1939; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0940; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]941; AVX2-NEXT: vzeroupper942; AVX2-NEXT: retq943;944; AVX512F-LABEL: test_cmp_v16f64:945; AVX512F: # %bb.0:946; AVX512F-NEXT: vcmpltpd %zmm0, %zmm2, %k0947; AVX512F-NEXT: vcmpltpd %zmm1, %zmm3, %k1948; AVX512F-NEXT: kunpckbw %k0, %k1, %k1949; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}950; AVX512F-NEXT: vpmovdb %zmm0, %xmm0951; AVX512F-NEXT: vzeroupper952; AVX512F-NEXT: retq953;954; AVX512DQ-LABEL: test_cmp_v16f64:955; AVX512DQ: # %bb.0:956; AVX512DQ-NEXT: vcmpltpd %zmm0, %zmm2, %k0957; AVX512DQ-NEXT: vcmpltpd %zmm1, %zmm3, %k1958; AVX512DQ-NEXT: kunpckbw %k0, %k1, %k0959; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0960; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0961; AVX512DQ-NEXT: vzeroupper962; AVX512DQ-NEXT: retq963;964; AVX512BW-LABEL: test_cmp_v16f64:965; AVX512BW: # %bb.0:966; AVX512BW-NEXT: vcmpltpd %zmm0, %zmm2, %k0967; AVX512BW-NEXT: vcmpltpd %zmm1, %zmm3, %k1968; AVX512BW-NEXT: kunpckbw %k0, %k1, %k0969; AVX512BW-NEXT: vpmovm2b %k0, %zmm0970; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0971; AVX512BW-NEXT: vzeroupper972; AVX512BW-NEXT: retq973 %1 = fcmp ogt <16 x double> %a0, %a1974 ret <16 x i1> %1975}976 977define <32 x i1> @test_cmp_v32f32(<32 x float> %a0, <32 x float> %a1) nounwind {978; SSE-LABEL: test_cmp_v32f32:979; SSE: # %bb.0:980; SSE-NEXT: movq %rdi, %rax981; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm8982; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm10983; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm9984; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm11985; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm12986; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm13987; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm14988; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm15989; SSE-NEXT: cmpltps %xmm3, %xmm15990; SSE-NEXT: cmpltps %xmm2, %xmm14991; SSE-NEXT: packssdw %xmm15, %xmm14992; SSE-NEXT: cmpltps %xmm1, %xmm13993; SSE-NEXT: cmpltps %xmm0, %xmm12994; SSE-NEXT: packssdw %xmm13, %xmm12995; SSE-NEXT: packsswb %xmm14, %xmm12996; SSE-NEXT: pmovmskb %xmm12, %ecx997; SSE-NEXT: cmpltps %xmm7, %xmm11998; SSE-NEXT: cmpltps %xmm6, %xmm9999; SSE-NEXT: packssdw %xmm11, %xmm91000; SSE-NEXT: cmpltps %xmm5, %xmm101001; SSE-NEXT: cmpltps %xmm4, %xmm81002; SSE-NEXT: packssdw %xmm10, %xmm81003; SSE-NEXT: packsswb %xmm9, %xmm81004; SSE-NEXT: pmovmskb %xmm8, %edx1005; SSE-NEXT: shll $16, %edx1006; SSE-NEXT: orl %ecx, %edx1007; SSE-NEXT: movl %edx, (%rdi)1008; SSE-NEXT: retq1009;1010; AVX1-LABEL: test_cmp_v32f32:1011; AVX1: # %bb.0:1012; AVX1-NEXT: vcmpltps %ymm3, %ymm7, %ymm31013; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm71014; AVX1-NEXT: vpackssdw %xmm7, %xmm3, %xmm31015; AVX1-NEXT: vcmpltps %ymm2, %ymm6, %ymm21016; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm61017; AVX1-NEXT: vpackssdw %xmm6, %xmm2, %xmm21018; AVX1-NEXT: vpacksswb %xmm3, %xmm2, %xmm21019; AVX1-NEXT: vcmpltps %ymm1, %ymm5, %ymm11020; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm31021; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm11022; AVX1-NEXT: vcmpltps %ymm0, %ymm4, %ymm01023; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31024; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm01025; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm01026; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01027; AVX1-NEXT: retq1028;1029; AVX2-LABEL: test_cmp_v32f32:1030; AVX2: # %bb.0:1031; AVX2-NEXT: vcmpltps %ymm3, %ymm7, %ymm31032; AVX2-NEXT: vcmpltps %ymm2, %ymm6, %ymm21033; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm21034; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]1035; AVX2-NEXT: vcmpltps %ymm1, %ymm5, %ymm11036; AVX2-NEXT: vcmpltps %ymm0, %ymm4, %ymm01037; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm01038; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1039; AVX2-NEXT: vpacksswb %ymm2, %ymm0, %ymm01040; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1041; AVX2-NEXT: retq1042;1043; AVX512F-LABEL: test_cmp_v32f32:1044; AVX512F: # %bb.0:1045; AVX512F-NEXT: vcmpltps %zmm1, %zmm3, %k11046; AVX512F-NEXT: vcmpltps %zmm0, %zmm2, %k21047; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}1048; AVX512F-NEXT: vpmovdb %zmm0, %xmm01049; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}1050; AVX512F-NEXT: vpmovdb %zmm1, %xmm11051; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm01052; AVX512F-NEXT: retq1053;1054; AVX512DQ-LABEL: test_cmp_v32f32:1055; AVX512DQ: # %bb.0:1056; AVX512DQ-NEXT: vcmpltps %zmm1, %zmm3, %k01057; AVX512DQ-NEXT: vcmpltps %zmm0, %zmm2, %k11058; AVX512DQ-NEXT: vpmovm2d %k1, %zmm01059; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm01060; AVX512DQ-NEXT: vpmovm2d %k0, %zmm11061; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm11062; AVX512DQ-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm01063; AVX512DQ-NEXT: retq1064;1065; AVX512BW-LABEL: test_cmp_v32f32:1066; AVX512BW: # %bb.0:1067; AVX512BW-NEXT: vcmpltps %zmm0, %zmm2, %k01068; AVX512BW-NEXT: vcmpltps %zmm1, %zmm3, %k11069; AVX512BW-NEXT: kunpckwd %k0, %k1, %k01070; AVX512BW-NEXT: vpmovm2b %k0, %zmm01071; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01072; AVX512BW-NEXT: retq1073 %1 = fcmp ogt <32 x float> %a0, %a11074 ret <32 x i1> %11075}1076 1077define <16 x i1> @test_cmp_v16i64(<16 x i64> %a0, <16 x i64> %a1) nounwind {1078; SSE2-LABEL: test_cmp_v16i64:1079; SSE2: # %bb.0:1080; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648]1081; SSE2-NEXT: pxor %xmm8, %xmm71082; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm91083; SSE2-NEXT: pxor %xmm8, %xmm91084; SSE2-NEXT: movdqa %xmm7, %xmm101085; SSE2-NEXT: pcmpgtd %xmm9, %xmm101086; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]1087; SSE2-NEXT: pcmpeqd %xmm7, %xmm91088; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]1089; SSE2-NEXT: pand %xmm11, %xmm71090; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]1091; SSE2-NEXT: por %xmm7, %xmm91092; SSE2-NEXT: pxor %xmm8, %xmm61093; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm71094; SSE2-NEXT: pxor %xmm8, %xmm71095; SSE2-NEXT: movdqa %xmm6, %xmm101096; SSE2-NEXT: pcmpgtd %xmm7, %xmm101097; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]1098; SSE2-NEXT: pcmpeqd %xmm6, %xmm71099; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]1100; SSE2-NEXT: pand %xmm11, %xmm71101; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm10[1,1,3,3]1102; SSE2-NEXT: por %xmm7, %xmm61103; SSE2-NEXT: packssdw %xmm9, %xmm61104; SSE2-NEXT: pxor %xmm8, %xmm51105; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm71106; SSE2-NEXT: pxor %xmm8, %xmm71107; SSE2-NEXT: movdqa %xmm5, %xmm91108; SSE2-NEXT: pcmpgtd %xmm7, %xmm91109; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]1110; SSE2-NEXT: pcmpeqd %xmm5, %xmm71111; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]1112; SSE2-NEXT: pand %xmm10, %xmm51113; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]1114; SSE2-NEXT: por %xmm5, %xmm71115; SSE2-NEXT: pxor %xmm8, %xmm41116; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm51117; SSE2-NEXT: pxor %xmm8, %xmm51118; SSE2-NEXT: movdqa %xmm4, %xmm91119; SSE2-NEXT: pcmpgtd %xmm5, %xmm91120; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]1121; SSE2-NEXT: pcmpeqd %xmm4, %xmm51122; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]1123; SSE2-NEXT: pand %xmm10, %xmm51124; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]1125; SSE2-NEXT: por %xmm5, %xmm41126; SSE2-NEXT: packssdw %xmm7, %xmm41127; SSE2-NEXT: packssdw %xmm6, %xmm41128; SSE2-NEXT: pxor %xmm8, %xmm31129; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm51130; SSE2-NEXT: pxor %xmm8, %xmm51131; SSE2-NEXT: movdqa %xmm3, %xmm61132; SSE2-NEXT: pcmpgtd %xmm5, %xmm61133; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]1134; SSE2-NEXT: pcmpeqd %xmm3, %xmm51135; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]1136; SSE2-NEXT: pand %xmm7, %xmm31137; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]1138; SSE2-NEXT: por %xmm3, %xmm51139; SSE2-NEXT: pxor %xmm8, %xmm21140; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm31141; SSE2-NEXT: pxor %xmm8, %xmm31142; SSE2-NEXT: movdqa %xmm2, %xmm61143; SSE2-NEXT: pcmpgtd %xmm3, %xmm61144; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]1145; SSE2-NEXT: pcmpeqd %xmm2, %xmm31146; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]1147; SSE2-NEXT: pand %xmm7, %xmm31148; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]1149; SSE2-NEXT: por %xmm3, %xmm21150; SSE2-NEXT: packssdw %xmm5, %xmm21151; SSE2-NEXT: pxor %xmm8, %xmm11152; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm31153; SSE2-NEXT: pxor %xmm8, %xmm31154; SSE2-NEXT: movdqa %xmm1, %xmm51155; SSE2-NEXT: pcmpgtd %xmm3, %xmm51156; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]1157; SSE2-NEXT: pcmpeqd %xmm1, %xmm31158; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]1159; SSE2-NEXT: pand %xmm6, %xmm11160; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]1161; SSE2-NEXT: por %xmm1, %xmm31162; SSE2-NEXT: pxor %xmm8, %xmm01163; SSE2-NEXT: pxor {{[0-9]+}}(%rsp), %xmm81164; SSE2-NEXT: movdqa %xmm0, %xmm11165; SSE2-NEXT: pcmpgtd %xmm8, %xmm11166; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]1167; SSE2-NEXT: pcmpeqd %xmm0, %xmm81168; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm8[1,1,3,3]1169; SSE2-NEXT: pand %xmm5, %xmm61170; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]1171; SSE2-NEXT: por %xmm6, %xmm01172; SSE2-NEXT: packssdw %xmm3, %xmm01173; SSE2-NEXT: packssdw %xmm2, %xmm01174; SSE2-NEXT: packsswb %xmm4, %xmm01175; SSE2-NEXT: retq1176;1177; SSE42-LABEL: test_cmp_v16i64:1178; SSE42: # %bb.0:1179; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm71180; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm61181; SSE42-NEXT: packssdw %xmm7, %xmm61182; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm51183; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm41184; SSE42-NEXT: packssdw %xmm5, %xmm41185; SSE42-NEXT: packssdw %xmm6, %xmm41186; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm31187; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm21188; SSE42-NEXT: packssdw %xmm3, %xmm21189; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm11190; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm01191; SSE42-NEXT: packssdw %xmm1, %xmm01192; SSE42-NEXT: packssdw %xmm2, %xmm01193; SSE42-NEXT: packsswb %xmm4, %xmm01194; SSE42-NEXT: retq1195;1196; AVX1-LABEL: test_cmp_v16i64:1197; AVX1: # %bb.0:1198; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm81199; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm91200; AVX1-NEXT: vpcmpgtq %xmm8, %xmm9, %xmm81201; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm31202; AVX1-NEXT: vpackssdw %xmm8, %xmm3, %xmm31203; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm71204; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm81205; AVX1-NEXT: vpcmpgtq %xmm7, %xmm8, %xmm71206; AVX1-NEXT: vpcmpgtq %xmm6, %xmm2, %xmm21207; AVX1-NEXT: vpackssdw %xmm7, %xmm2, %xmm21208; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm21209; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm31210; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm61211; AVX1-NEXT: vpcmpgtq %xmm3, %xmm6, %xmm31212; AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm11213; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm11214; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm31215; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm51216; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm31217; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm01218; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm01219; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm01220; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm01221; AVX1-NEXT: vzeroupper1222; AVX1-NEXT: retq1223;1224; AVX2-LABEL: test_cmp_v16i64:1225; AVX2: # %bb.0:1226; AVX2-NEXT: vpcmpgtq %ymm7, %ymm3, %ymm31227; AVX2-NEXT: vpcmpgtq %ymm6, %ymm2, %ymm21228; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm21229; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]1230; AVX2-NEXT: vpcmpgtq %ymm5, %ymm1, %ymm11231; AVX2-NEXT: vpcmpgtq %ymm4, %ymm0, %ymm01232; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm01233; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1234; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm01235; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm11236; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm01237; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]1238; AVX2-NEXT: vzeroupper1239; AVX2-NEXT: retq1240;1241; AVX512F-LABEL: test_cmp_v16i64:1242; AVX512F: # %bb.0:1243; AVX512F-NEXT: vpcmpgtq %zmm2, %zmm0, %k01244; AVX512F-NEXT: vpcmpgtq %zmm3, %zmm1, %k11245; AVX512F-NEXT: kunpckbw %k0, %k1, %k11246; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}1247; AVX512F-NEXT: vpmovdb %zmm0, %xmm01248; AVX512F-NEXT: vzeroupper1249; AVX512F-NEXT: retq1250;1251; AVX512DQ-LABEL: test_cmp_v16i64:1252; AVX512DQ: # %bb.0:1253; AVX512DQ-NEXT: vpcmpgtq %zmm2, %zmm0, %k01254; AVX512DQ-NEXT: vpcmpgtq %zmm3, %zmm1, %k11255; AVX512DQ-NEXT: kunpckbw %k0, %k1, %k01256; AVX512DQ-NEXT: vpmovm2d %k0, %zmm01257; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm01258; AVX512DQ-NEXT: vzeroupper1259; AVX512DQ-NEXT: retq1260;1261; AVX512BW-LABEL: test_cmp_v16i64:1262; AVX512BW: # %bb.0:1263; AVX512BW-NEXT: vpcmpgtq %zmm2, %zmm0, %k01264; AVX512BW-NEXT: vpcmpgtq %zmm3, %zmm1, %k11265; AVX512BW-NEXT: kunpckbw %k0, %k1, %k01266; AVX512BW-NEXT: vpmovm2b %k0, %zmm01267; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01268; AVX512BW-NEXT: vzeroupper1269; AVX512BW-NEXT: retq1270 %1 = icmp sgt <16 x i64> %a0, %a11271 ret <16 x i1> %11272}1273 1274define <32 x i1> @test_cmp_v32i32(<32 x i32> %a0, <32 x i32> %a1) nounwind {1275; SSE-LABEL: test_cmp_v32i32:1276; SSE: # %bb.0:1277; SSE-NEXT: movq %rdi, %rax1278; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm31279; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm21280; SSE-NEXT: packssdw %xmm3, %xmm21281; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm11282; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm01283; SSE-NEXT: packssdw %xmm1, %xmm01284; SSE-NEXT: packsswb %xmm2, %xmm01285; SSE-NEXT: pmovmskb %xmm0, %ecx1286; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm71287; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm61288; SSE-NEXT: packssdw %xmm7, %xmm61289; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm51290; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm41291; SSE-NEXT: packssdw %xmm5, %xmm41292; SSE-NEXT: packsswb %xmm6, %xmm41293; SSE-NEXT: pmovmskb %xmm4, %edx1294; SSE-NEXT: shll $16, %edx1295; SSE-NEXT: orl %ecx, %edx1296; SSE-NEXT: movl %edx, (%rdi)1297; SSE-NEXT: retq1298;1299; AVX1-LABEL: test_cmp_v32i32:1300; AVX1: # %bb.0:1301; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm81302; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm91303; AVX1-NEXT: vpcmpgtd %xmm8, %xmm9, %xmm81304; AVX1-NEXT: vpcmpgtd %xmm7, %xmm3, %xmm31305; AVX1-NEXT: vpackssdw %xmm8, %xmm3, %xmm31306; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm71307; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm81308; AVX1-NEXT: vpcmpgtd %xmm7, %xmm8, %xmm71309; AVX1-NEXT: vpcmpgtd %xmm6, %xmm2, %xmm21310; AVX1-NEXT: vpackssdw %xmm7, %xmm2, %xmm21311; AVX1-NEXT: vpacksswb %xmm3, %xmm2, %xmm21312; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm31313; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm61314; AVX1-NEXT: vpcmpgtd %xmm3, %xmm6, %xmm31315; AVX1-NEXT: vpcmpgtd %xmm5, %xmm1, %xmm11316; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm11317; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm31318; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm51319; AVX1-NEXT: vpcmpgtd %xmm3, %xmm5, %xmm31320; AVX1-NEXT: vpcmpgtd %xmm4, %xmm0, %xmm01321; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm01322; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm01323; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01324; AVX1-NEXT: retq1325;1326; AVX2-LABEL: test_cmp_v32i32:1327; AVX2: # %bb.0:1328; AVX2-NEXT: vpcmpgtd %ymm7, %ymm3, %ymm31329; AVX2-NEXT: vpcmpgtd %ymm6, %ymm2, %ymm21330; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm21331; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]1332; AVX2-NEXT: vpcmpgtd %ymm5, %ymm1, %ymm11333; AVX2-NEXT: vpcmpgtd %ymm4, %ymm0, %ymm01334; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm01335; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1336; AVX2-NEXT: vpacksswb %ymm2, %ymm0, %ymm01337; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1338; AVX2-NEXT: retq1339;1340; AVX512F-LABEL: test_cmp_v32i32:1341; AVX512F: # %bb.0:1342; AVX512F-NEXT: vpcmpgtd %zmm3, %zmm1, %k11343; AVX512F-NEXT: vpcmpgtd %zmm2, %zmm0, %k21344; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}1345; AVX512F-NEXT: vpmovdb %zmm0, %xmm01346; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}1347; AVX512F-NEXT: vpmovdb %zmm1, %xmm11348; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm01349; AVX512F-NEXT: retq1350;1351; AVX512DQ-LABEL: test_cmp_v32i32:1352; AVX512DQ: # %bb.0:1353; AVX512DQ-NEXT: vpcmpgtd %zmm3, %zmm1, %k01354; AVX512DQ-NEXT: vpcmpgtd %zmm2, %zmm0, %k11355; AVX512DQ-NEXT: vpmovm2d %k1, %zmm01356; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm01357; AVX512DQ-NEXT: vpmovm2d %k0, %zmm11358; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm11359; AVX512DQ-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm01360; AVX512DQ-NEXT: retq1361;1362; AVX512BW-LABEL: test_cmp_v32i32:1363; AVX512BW: # %bb.0:1364; AVX512BW-NEXT: vpcmpgtd %zmm2, %zmm0, %k01365; AVX512BW-NEXT: vpcmpgtd %zmm3, %zmm1, %k11366; AVX512BW-NEXT: kunpckwd %k0, %k1, %k01367; AVX512BW-NEXT: vpmovm2b %k0, %zmm01368; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01369; AVX512BW-NEXT: retq1370 %1 = icmp sgt <32 x i32> %a0, %a11371 ret <32 x i1> %11372}1373 1374define <64 x i1> @test_cmp_v64i16(<64 x i16> %a0, <64 x i16> %a1) nounwind {1375; SSE-LABEL: test_cmp_v64i16:1376; SSE: # %bb.0:1377; SSE-NEXT: movq %rdi, %rax1378; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm11379; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm01380; SSE-NEXT: packsswb %xmm1, %xmm01381; SSE-NEXT: pmovmskb %xmm0, %ecx1382; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm31383; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm21384; SSE-NEXT: packsswb %xmm3, %xmm21385; SSE-NEXT: pmovmskb %xmm2, %edx1386; SSE-NEXT: shll $16, %edx1387; SSE-NEXT: orl %ecx, %edx1388; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm51389; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm41390; SSE-NEXT: packsswb %xmm5, %xmm41391; SSE-NEXT: pmovmskb %xmm4, %ecx1392; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm71393; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm61394; SSE-NEXT: packsswb %xmm7, %xmm61395; SSE-NEXT: pmovmskb %xmm6, %esi1396; SSE-NEXT: shll $16, %esi1397; SSE-NEXT: orl %ecx, %esi1398; SSE-NEXT: shlq $32, %rsi1399; SSE-NEXT: orq %rdx, %rsi1400; SSE-NEXT: movq %rsi, (%rdi)1401; SSE-NEXT: retq1402;1403; AVX1-LABEL: test_cmp_v64i16:1404; AVX1: # %bb.0:1405; AVX1-NEXT: movq %rdi, %rax1406; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm81407; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm91408; AVX1-NEXT: vpcmpgtw %xmm8, %xmm9, %xmm81409; AVX1-NEXT: vpcmpgtw %xmm4, %xmm0, %xmm01410; AVX1-NEXT: vpacksswb %xmm8, %xmm0, %xmm01411; AVX1-NEXT: vpmovmskb %xmm0, %ecx1412; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm01413; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm41414; AVX1-NEXT: vpcmpgtw %xmm0, %xmm4, %xmm01415; AVX1-NEXT: vpcmpgtw %xmm5, %xmm1, %xmm11416; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm01417; AVX1-NEXT: vpmovmskb %xmm0, %edx1418; AVX1-NEXT: shll $16, %edx1419; AVX1-NEXT: orl %ecx, %edx1420; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm01421; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm11422; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm01423; AVX1-NEXT: vpcmpgtw %xmm6, %xmm2, %xmm11424; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm01425; AVX1-NEXT: vpmovmskb %xmm0, %ecx1426; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm01427; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm11428; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm01429; AVX1-NEXT: vpcmpgtw %xmm7, %xmm3, %xmm11430; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm01431; AVX1-NEXT: vpmovmskb %xmm0, %esi1432; AVX1-NEXT: shll $16, %esi1433; AVX1-NEXT: orl %ecx, %esi1434; AVX1-NEXT: shlq $32, %rsi1435; AVX1-NEXT: orq %rdx, %rsi1436; AVX1-NEXT: movq %rsi, (%rdi)1437; AVX1-NEXT: vzeroupper1438; AVX1-NEXT: retq1439;1440; AVX2-LABEL: test_cmp_v64i16:1441; AVX2: # %bb.0:1442; AVX2-NEXT: movq %rdi, %rax1443; AVX2-NEXT: vpcmpgtw %ymm5, %ymm1, %ymm11444; AVX2-NEXT: vpcmpgtw %ymm4, %ymm0, %ymm01445; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm01446; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1447; AVX2-NEXT: vpmovmskb %ymm0, %ecx1448; AVX2-NEXT: vpcmpgtw %ymm7, %ymm3, %ymm01449; AVX2-NEXT: vpcmpgtw %ymm6, %ymm2, %ymm11450; AVX2-NEXT: vpacksswb %ymm0, %ymm1, %ymm01451; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1452; AVX2-NEXT: vpmovmskb %ymm0, %edx1453; AVX2-NEXT: shlq $32, %rdx1454; AVX2-NEXT: orq %rcx, %rdx1455; AVX2-NEXT: movq %rdx, (%rdi)1456; AVX2-NEXT: vzeroupper1457; AVX2-NEXT: retq1458;1459; AVX512F-LABEL: test_cmp_v64i16:1460; AVX512F: # %bb.0:1461; AVX512F-NEXT: movq %rdi, %rax1462; AVX512F-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm41463; AVX512F-NEXT: vpmovsxwd %ymm4, %zmm41464; AVX512F-NEXT: vptestmd %zmm4, %zmm4, %k01465; AVX512F-NEXT: vextracti64x4 $1, %zmm2, %ymm21466; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm01467; AVX512F-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm01468; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm01469; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k11470; AVX512F-NEXT: vpcmpgtw %ymm3, %ymm1, %ymm01471; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm01472; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k21473; AVX512F-NEXT: vextracti64x4 $1, %zmm3, %ymm01474; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm11475; AVX512F-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01476; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm01477; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k31478; AVX512F-NEXT: kmovw %k3, 6(%rdi)1479; AVX512F-NEXT: kmovw %k2, 4(%rdi)1480; AVX512F-NEXT: kmovw %k1, 2(%rdi)1481; AVX512F-NEXT: kmovw %k0, (%rdi)1482; AVX512F-NEXT: vzeroupper1483; AVX512F-NEXT: retq1484;1485; AVX512DQ-LABEL: test_cmp_v64i16:1486; AVX512DQ: # %bb.0:1487; AVX512DQ-NEXT: movq %rdi, %rax1488; AVX512DQ-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm41489; AVX512DQ-NEXT: vpmovsxwd %ymm4, %zmm41490; AVX512DQ-NEXT: vpmovd2m %zmm4, %k01491; AVX512DQ-NEXT: vextracti64x4 $1, %zmm2, %ymm21492; AVX512DQ-NEXT: vextracti64x4 $1, %zmm0, %ymm01493; AVX512DQ-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm01494; AVX512DQ-NEXT: vpmovsxwd %ymm0, %zmm01495; AVX512DQ-NEXT: vpmovd2m %zmm0, %k11496; AVX512DQ-NEXT: vpcmpgtw %ymm3, %ymm1, %ymm01497; AVX512DQ-NEXT: vpmovsxwd %ymm0, %zmm01498; AVX512DQ-NEXT: vpmovd2m %zmm0, %k21499; AVX512DQ-NEXT: vextracti64x4 $1, %zmm3, %ymm01500; AVX512DQ-NEXT: vextracti64x4 $1, %zmm1, %ymm11501; AVX512DQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01502; AVX512DQ-NEXT: vpmovsxwd %ymm0, %zmm01503; AVX512DQ-NEXT: vpmovd2m %zmm0, %k31504; AVX512DQ-NEXT: kmovw %k3, 6(%rdi)1505; AVX512DQ-NEXT: kmovw %k2, 4(%rdi)1506; AVX512DQ-NEXT: kmovw %k1, 2(%rdi)1507; AVX512DQ-NEXT: kmovw %k0, (%rdi)1508; AVX512DQ-NEXT: vzeroupper1509; AVX512DQ-NEXT: retq1510;1511; AVX512BW-LABEL: test_cmp_v64i16:1512; AVX512BW: # %bb.0:1513; AVX512BW-NEXT: vpcmpgtw %zmm2, %zmm0, %k01514; AVX512BW-NEXT: vpcmpgtw %zmm3, %zmm1, %k11515; AVX512BW-NEXT: kunpckdq %k0, %k1, %k01516; AVX512BW-NEXT: vpmovm2b %k0, %zmm01517; AVX512BW-NEXT: retq1518 %1 = icmp sgt <64 x i16> %a0, %a11519 ret <64 x i1> %11520}1521 1522define <128 x i1> @test_cmp_v128i8(<128 x i8> %a0, <128 x i8> %a1) nounwind {1523; SSE-LABEL: test_cmp_v128i8:1524; SSE: # %bb.0:1525; SSE-NEXT: movq %rdi, %rax1526; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm01527; SSE-NEXT: pmovmskb %xmm0, %ecx1528; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm11529; SSE-NEXT: pmovmskb %xmm1, %edx1530; SSE-NEXT: shll $16, %edx1531; SSE-NEXT: orl %ecx, %edx1532; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm21533; SSE-NEXT: pmovmskb %xmm2, %esi1534; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm31535; SSE-NEXT: pmovmskb %xmm3, %ecx1536; SSE-NEXT: shll $16, %ecx1537; SSE-NEXT: orl %esi, %ecx1538; SSE-NEXT: shlq $32, %rcx1539; SSE-NEXT: orq %rdx, %rcx1540; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm41541; SSE-NEXT: pmovmskb %xmm4, %edx1542; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm51543; SSE-NEXT: pmovmskb %xmm5, %esi1544; SSE-NEXT: shll $16, %esi1545; SSE-NEXT: orl %edx, %esi1546; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm61547; SSE-NEXT: pmovmskb %xmm6, %edx1548; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm71549; SSE-NEXT: pmovmskb %xmm7, %edi1550; SSE-NEXT: shll $16, %edi1551; SSE-NEXT: orl %edx, %edi1552; SSE-NEXT: shlq $32, %rdi1553; SSE-NEXT: orq %rsi, %rdi1554; SSE-NEXT: movq %rdi, 8(%rax)1555; SSE-NEXT: movq %rcx, (%rax)1556; SSE-NEXT: retq1557;1558; AVX1-LABEL: test_cmp_v128i8:1559; AVX1: # %bb.0:1560; AVX1-NEXT: movq %rdi, %rax1561; AVX1-NEXT: vpcmpgtb %xmm4, %xmm0, %xmm81562; AVX1-NEXT: vpmovmskb %xmm8, %ecx1563; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm41564; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01565; AVX1-NEXT: vpcmpgtb %xmm4, %xmm0, %xmm01566; AVX1-NEXT: vpmovmskb %xmm0, %edx1567; AVX1-NEXT: shll $16, %edx1568; AVX1-NEXT: orl %ecx, %edx1569; AVX1-NEXT: vpcmpgtb %xmm5, %xmm1, %xmm01570; AVX1-NEXT: vpmovmskb %xmm0, %esi1571; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm01572; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm11573; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm01574; AVX1-NEXT: vpmovmskb %xmm0, %ecx1575; AVX1-NEXT: shll $16, %ecx1576; AVX1-NEXT: orl %esi, %ecx1577; AVX1-NEXT: shlq $32, %rcx1578; AVX1-NEXT: orq %rdx, %rcx1579; AVX1-NEXT: vpcmpgtb %xmm6, %xmm2, %xmm01580; AVX1-NEXT: vpmovmskb %xmm0, %edx1581; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm01582; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm11583; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm01584; AVX1-NEXT: vpmovmskb %xmm0, %esi1585; AVX1-NEXT: shll $16, %esi1586; AVX1-NEXT: orl %edx, %esi1587; AVX1-NEXT: vpcmpgtb %xmm7, %xmm3, %xmm01588; AVX1-NEXT: vpmovmskb %xmm0, %edx1589; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm01590; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm11591; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm01592; AVX1-NEXT: vpmovmskb %xmm0, %edi1593; AVX1-NEXT: shll $16, %edi1594; AVX1-NEXT: orl %edx, %edi1595; AVX1-NEXT: shlq $32, %rdi1596; AVX1-NEXT: orq %rsi, %rdi1597; AVX1-NEXT: movq %rdi, 8(%rax)1598; AVX1-NEXT: movq %rcx, (%rax)1599; AVX1-NEXT: vzeroupper1600; AVX1-NEXT: retq1601;1602; AVX2-LABEL: test_cmp_v128i8:1603; AVX2: # %bb.0:1604; AVX2-NEXT: movq %rdi, %rax1605; AVX2-NEXT: vpcmpgtb %ymm4, %ymm0, %ymm01606; AVX2-NEXT: vpmovmskb %ymm0, %ecx1607; AVX2-NEXT: vpcmpgtb %ymm5, %ymm1, %ymm01608; AVX2-NEXT: vpmovmskb %ymm0, %edx1609; AVX2-NEXT: shlq $32, %rdx1610; AVX2-NEXT: orq %rcx, %rdx1611; AVX2-NEXT: vpcmpgtb %ymm6, %ymm2, %ymm01612; AVX2-NEXT: vpmovmskb %ymm0, %ecx1613; AVX2-NEXT: vpcmpgtb %ymm7, %ymm3, %ymm01614; AVX2-NEXT: vpmovmskb %ymm0, %esi1615; AVX2-NEXT: shlq $32, %rsi1616; AVX2-NEXT: orq %rcx, %rsi1617; AVX2-NEXT: movq %rsi, 8(%rdi)1618; AVX2-NEXT: movq %rdx, (%rdi)1619; AVX2-NEXT: vzeroupper1620; AVX2-NEXT: retq1621;1622; AVX512F-LABEL: test_cmp_v128i8:1623; AVX512F: # %bb.0:1624; AVX512F-NEXT: movq %rdi, %rax1625; AVX512F-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm41626; AVX512F-NEXT: vpmovsxbd %xmm4, %zmm51627; AVX512F-NEXT: vptestmd %zmm5, %zmm5, %k01628; AVX512F-NEXT: vextracti128 $1, %ymm4, %xmm41629; AVX512F-NEXT: vpmovsxbd %xmm4, %zmm41630; AVX512F-NEXT: vptestmd %zmm4, %zmm4, %k11631; AVX512F-NEXT: vextracti64x4 $1, %zmm2, %ymm21632; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm01633; AVX512F-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm01634; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm21635; AVX512F-NEXT: vptestmd %zmm2, %zmm2, %k21636; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm01637; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm01638; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k31639; AVX512F-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm01640; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm21641; AVX512F-NEXT: vptestmd %zmm2, %zmm2, %k41642; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm01643; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm01644; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k51645; AVX512F-NEXT: vextracti64x4 $1, %zmm3, %ymm01646; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm11647; AVX512F-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm01648; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm11649; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k61650; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm01651; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm01652; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k71653; AVX512F-NEXT: kmovw %k7, 14(%rdi)1654; AVX512F-NEXT: kmovw %k6, 12(%rdi)1655; AVX512F-NEXT: kmovw %k5, 10(%rdi)1656; AVX512F-NEXT: kmovw %k4, 8(%rdi)1657; AVX512F-NEXT: kmovw %k3, 6(%rdi)1658; AVX512F-NEXT: kmovw %k2, 4(%rdi)1659; AVX512F-NEXT: kmovw %k1, 2(%rdi)1660; AVX512F-NEXT: kmovw %k0, (%rdi)1661; AVX512F-NEXT: vzeroupper1662; AVX512F-NEXT: retq1663;1664; AVX512DQ-LABEL: test_cmp_v128i8:1665; AVX512DQ: # %bb.0:1666; AVX512DQ-NEXT: movq %rdi, %rax1667; AVX512DQ-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm41668; AVX512DQ-NEXT: vpmovsxbd %xmm4, %zmm51669; AVX512DQ-NEXT: vpmovd2m %zmm5, %k01670; AVX512DQ-NEXT: vextracti128 $1, %ymm4, %xmm41671; AVX512DQ-NEXT: vpmovsxbd %xmm4, %zmm41672; AVX512DQ-NEXT: vpmovd2m %zmm4, %k11673; AVX512DQ-NEXT: vextracti64x4 $1, %zmm2, %ymm21674; AVX512DQ-NEXT: vextracti64x4 $1, %zmm0, %ymm01675; AVX512DQ-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm01676; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm21677; AVX512DQ-NEXT: vpmovd2m %zmm2, %k21678; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm01679; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm01680; AVX512DQ-NEXT: vpmovd2m %zmm0, %k31681; AVX512DQ-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm01682; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm21683; AVX512DQ-NEXT: vpmovd2m %zmm2, %k41684; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm01685; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm01686; AVX512DQ-NEXT: vpmovd2m %zmm0, %k51687; AVX512DQ-NEXT: vextracti64x4 $1, %zmm3, %ymm01688; AVX512DQ-NEXT: vextracti64x4 $1, %zmm1, %ymm11689; AVX512DQ-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm01690; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm11691; AVX512DQ-NEXT: vpmovd2m %zmm1, %k61692; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm01693; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm01694; AVX512DQ-NEXT: vpmovd2m %zmm0, %k71695; AVX512DQ-NEXT: kmovw %k7, 14(%rdi)1696; AVX512DQ-NEXT: kmovw %k6, 12(%rdi)1697; AVX512DQ-NEXT: kmovw %k5, 10(%rdi)1698; AVX512DQ-NEXT: kmovw %k4, 8(%rdi)1699; AVX512DQ-NEXT: kmovw %k3, 6(%rdi)1700; AVX512DQ-NEXT: kmovw %k2, 4(%rdi)1701; AVX512DQ-NEXT: kmovw %k1, 2(%rdi)1702; AVX512DQ-NEXT: kmovw %k0, (%rdi)1703; AVX512DQ-NEXT: vzeroupper1704; AVX512DQ-NEXT: retq1705;1706; AVX512BW-LABEL: test_cmp_v128i8:1707; AVX512BW: # %bb.0:1708; AVX512BW-NEXT: movq %rdi, %rax1709; AVX512BW-NEXT: vpcmpgtb %zmm2, %zmm0, %k01710; AVX512BW-NEXT: vpcmpgtb %zmm3, %zmm1, %k11711; AVX512BW-NEXT: kmovq %k1, 8(%rdi)1712; AVX512BW-NEXT: kmovq %k0, (%rdi)1713; AVX512BW-NEXT: vzeroupper1714; AVX512BW-NEXT: retq1715 %1 = icmp sgt <128 x i8> %a0, %a11716 ret <128 x i1> %11717}1718 1719;1720; 2048-bit vector comparisons1721;1722 1723define <32 x i1> @test_cmp_v32f64(<32 x double> %a0, <32 x double> %a1) nounwind {1724; SSE-LABEL: test_cmp_v32f64:1725; SSE: # %bb.0:1726; SSE-NEXT: movq %rdi, %rax1727; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm81728; SSE-NEXT: cmpltpd %xmm7, %xmm81729; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm71730; SSE-NEXT: cmpltpd %xmm6, %xmm71731; SSE-NEXT: packssdw %xmm8, %xmm71732; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm61733; SSE-NEXT: cmpltpd %xmm5, %xmm61734; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm51735; SSE-NEXT: cmpltpd %xmm4, %xmm51736; SSE-NEXT: packssdw %xmm6, %xmm51737; SSE-NEXT: packssdw %xmm7, %xmm51738; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm41739; SSE-NEXT: cmpltpd %xmm3, %xmm41740; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm31741; SSE-NEXT: cmpltpd %xmm2, %xmm31742; SSE-NEXT: packssdw %xmm4, %xmm31743; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm21744; SSE-NEXT: cmpltpd %xmm1, %xmm21745; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm41746; SSE-NEXT: cmpltpd %xmm0, %xmm41747; SSE-NEXT: packssdw %xmm2, %xmm41748; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm01749; SSE-NEXT: packssdw %xmm3, %xmm41750; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm11751; SSE-NEXT: packsswb %xmm5, %xmm41752; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm21753; SSE-NEXT: pmovmskb %xmm4, %ecx1754; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm31755; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm31756; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm21757; SSE-NEXT: packssdw %xmm3, %xmm21758; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm31759; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm31760; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm11761; SSE-NEXT: packssdw %xmm3, %xmm11762; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm31763; SSE-NEXT: packssdw %xmm2, %xmm11764; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm21765; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm21766; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm31767; SSE-NEXT: packssdw %xmm2, %xmm31768; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm21769; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm21770; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm01771; SSE-NEXT: packssdw %xmm2, %xmm01772; SSE-NEXT: packssdw %xmm3, %xmm01773; SSE-NEXT: packsswb %xmm1, %xmm01774; SSE-NEXT: pmovmskb %xmm0, %edx1775; SSE-NEXT: shll $16, %edx1776; SSE-NEXT: orl %ecx, %edx1777; SSE-NEXT: movl %edx, (%rdi)1778; SSE-NEXT: retq1779;1780; AVX1-LABEL: test_cmp_v32f64:1781; AVX1: # %bb.0:1782; AVX1-NEXT: pushq %rbp1783; AVX1-NEXT: movq %rsp, %rbp1784; AVX1-NEXT: andq $-32, %rsp1785; AVX1-NEXT: subq $32, %rsp1786; AVX1-NEXT: vmovapd 16(%rbp), %ymm81787; AVX1-NEXT: vmovapd 48(%rbp), %ymm91788; AVX1-NEXT: vmovapd 80(%rbp), %ymm101789; AVX1-NEXT: vmovapd 112(%rbp), %ymm111790; AVX1-NEXT: vmovapd 144(%rbp), %ymm121791; AVX1-NEXT: vmovapd 176(%rbp), %ymm131792; AVX1-NEXT: vmovapd 208(%rbp), %ymm141793; AVX1-NEXT: vmovapd 240(%rbp), %ymm151794; AVX1-NEXT: vcmpltpd %ymm7, %ymm15, %ymm71795; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm151796; AVX1-NEXT: vpackssdw %xmm15, %xmm7, %xmm71797; AVX1-NEXT: vcmpltpd %ymm6, %ymm14, %ymm61798; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm141799; AVX1-NEXT: vpackssdw %xmm14, %xmm6, %xmm61800; AVX1-NEXT: vpackssdw %xmm7, %xmm6, %xmm61801; AVX1-NEXT: vcmpltpd %ymm5, %ymm13, %ymm51802; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm71803; AVX1-NEXT: vpackssdw %xmm7, %xmm5, %xmm51804; AVX1-NEXT: vcmpltpd %ymm4, %ymm12, %ymm41805; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm71806; AVX1-NEXT: vpackssdw %xmm7, %xmm4, %xmm41807; AVX1-NEXT: vpackssdw %xmm5, %xmm4, %xmm41808; AVX1-NEXT: vpacksswb %xmm6, %xmm4, %xmm41809; AVX1-NEXT: vcmpltpd %ymm3, %ymm11, %ymm31810; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm51811; AVX1-NEXT: vpackssdw %xmm5, %xmm3, %xmm31812; AVX1-NEXT: vcmpltpd %ymm2, %ymm10, %ymm21813; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm51814; AVX1-NEXT: vpackssdw %xmm5, %xmm2, %xmm21815; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm21816; AVX1-NEXT: vcmpltpd %ymm1, %ymm9, %ymm11817; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm31818; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm11819; AVX1-NEXT: vcmpltpd %ymm0, %ymm8, %ymm01820; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31821; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm01822; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm01823; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm01824; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm01825; AVX1-NEXT: movq %rbp, %rsp1826; AVX1-NEXT: popq %rbp1827; AVX1-NEXT: retq1828;1829; AVX2-LABEL: test_cmp_v32f64:1830; AVX2: # %bb.0:1831; AVX2-NEXT: pushq %rbp1832; AVX2-NEXT: movq %rsp, %rbp1833; AVX2-NEXT: andq $-32, %rsp1834; AVX2-NEXT: subq $32, %rsp1835; AVX2-NEXT: vmovapd 16(%rbp), %ymm81836; AVX2-NEXT: vmovapd 48(%rbp), %ymm91837; AVX2-NEXT: vmovapd 80(%rbp), %ymm101838; AVX2-NEXT: vmovapd 112(%rbp), %ymm111839; AVX2-NEXT: vmovapd 144(%rbp), %ymm121840; AVX2-NEXT: vmovapd 176(%rbp), %ymm131841; AVX2-NEXT: vmovapd 208(%rbp), %ymm141842; AVX2-NEXT: vmovapd 240(%rbp), %ymm151843; AVX2-NEXT: vcmpltpd %ymm7, %ymm15, %ymm71844; AVX2-NEXT: vcmpltpd %ymm6, %ymm14, %ymm61845; AVX2-NEXT: vpackssdw %ymm7, %ymm6, %ymm61846; AVX2-NEXT: vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]1847; AVX2-NEXT: vcmpltpd %ymm5, %ymm13, %ymm51848; AVX2-NEXT: vcmpltpd %ymm4, %ymm12, %ymm41849; AVX2-NEXT: vpackssdw %ymm5, %ymm4, %ymm41850; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]1851; AVX2-NEXT: vpackssdw %ymm6, %ymm4, %ymm41852; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]1853; AVX2-NEXT: vcmpltpd %ymm3, %ymm11, %ymm31854; AVX2-NEXT: vcmpltpd %ymm2, %ymm10, %ymm21855; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm21856; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]1857; AVX2-NEXT: vcmpltpd %ymm1, %ymm9, %ymm11858; AVX2-NEXT: vcmpltpd %ymm0, %ymm8, %ymm01859; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm01860; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1861; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm01862; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1863; AVX2-NEXT: vpacksswb %ymm4, %ymm0, %ymm01864; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1865; AVX2-NEXT: movq %rbp, %rsp1866; AVX2-NEXT: popq %rbp1867; AVX2-NEXT: retq1868;1869; AVX512F-LABEL: test_cmp_v32f64:1870; AVX512F: # %bb.0:1871; AVX512F-NEXT: vcmpltpd %zmm2, %zmm6, %k01872; AVX512F-NEXT: vcmpltpd %zmm3, %zmm7, %k11873; AVX512F-NEXT: kunpckbw %k0, %k1, %k11874; AVX512F-NEXT: vcmpltpd %zmm0, %zmm4, %k01875; AVX512F-NEXT: vcmpltpd %zmm1, %zmm5, %k21876; AVX512F-NEXT: kunpckbw %k0, %k2, %k21877; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}1878; AVX512F-NEXT: vpmovdb %zmm0, %xmm01879; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}1880; AVX512F-NEXT: vpmovdb %zmm1, %xmm11881; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm01882; AVX512F-NEXT: retq1883;1884; AVX512DQ-LABEL: test_cmp_v32f64:1885; AVX512DQ: # %bb.0:1886; AVX512DQ-NEXT: vcmpltpd %zmm2, %zmm6, %k01887; AVX512DQ-NEXT: vcmpltpd %zmm3, %zmm7, %k11888; AVX512DQ-NEXT: kunpckbw %k0, %k1, %k01889; AVX512DQ-NEXT: vcmpltpd %zmm0, %zmm4, %k11890; AVX512DQ-NEXT: vcmpltpd %zmm1, %zmm5, %k21891; AVX512DQ-NEXT: kunpckbw %k1, %k2, %k11892; AVX512DQ-NEXT: vpmovm2d %k1, %zmm01893; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm01894; AVX512DQ-NEXT: vpmovm2d %k0, %zmm11895; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm11896; AVX512DQ-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm01897; AVX512DQ-NEXT: retq1898;1899; AVX512BW-LABEL: test_cmp_v32f64:1900; AVX512BW: # %bb.0:1901; AVX512BW-NEXT: vcmpltpd %zmm0, %zmm4, %k01902; AVX512BW-NEXT: vcmpltpd %zmm1, %zmm5, %k11903; AVX512BW-NEXT: kunpckbw %k0, %k1, %k01904; AVX512BW-NEXT: vcmpltpd %zmm2, %zmm6, %k11905; AVX512BW-NEXT: vcmpltpd %zmm3, %zmm7, %k21906; AVX512BW-NEXT: kunpckbw %k1, %k2, %k11907; AVX512BW-NEXT: kunpckwd %k0, %k1, %k01908; AVX512BW-NEXT: vpmovm2b %k0, %zmm01909; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01910; AVX512BW-NEXT: retq1911 %1 = fcmp ogt <32 x double> %a0, %a11912 ret <32 x i1> %11913}1914 1915define <32 x i1> @test_cmp_v32i64(<32 x i64> %a0, <32 x i64> %a1) nounwind {1916; SSE2-LABEL: test_cmp_v32i64:1917; SSE2: # %bb.0:1918; SSE2-NEXT: movq %rdi, %rax1919; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648]1920; SSE2-NEXT: pxor %xmm8, %xmm71921; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm91922; SSE2-NEXT: pxor %xmm8, %xmm91923; SSE2-NEXT: movdqa %xmm7, %xmm101924; SSE2-NEXT: pcmpgtd %xmm9, %xmm101925; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]1926; SSE2-NEXT: pcmpeqd %xmm7, %xmm91927; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]1928; SSE2-NEXT: pand %xmm11, %xmm71929; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]1930; SSE2-NEXT: por %xmm7, %xmm91931; SSE2-NEXT: pxor %xmm8, %xmm61932; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm71933; SSE2-NEXT: pxor %xmm8, %xmm71934; SSE2-NEXT: movdqa %xmm6, %xmm101935; SSE2-NEXT: pcmpgtd %xmm7, %xmm101936; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]1937; SSE2-NEXT: pcmpeqd %xmm6, %xmm71938; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]1939; SSE2-NEXT: pand %xmm11, %xmm71940; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm10[1,1,3,3]1941; SSE2-NEXT: por %xmm7, %xmm61942; SSE2-NEXT: packssdw %xmm9, %xmm61943; SSE2-NEXT: pxor %xmm8, %xmm51944; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm71945; SSE2-NEXT: pxor %xmm8, %xmm71946; SSE2-NEXT: movdqa %xmm5, %xmm91947; SSE2-NEXT: pcmpgtd %xmm7, %xmm91948; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]1949; SSE2-NEXT: pcmpeqd %xmm5, %xmm71950; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]1951; SSE2-NEXT: pand %xmm10, %xmm51952; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]1953; SSE2-NEXT: por %xmm5, %xmm71954; SSE2-NEXT: pxor %xmm8, %xmm41955; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm51956; SSE2-NEXT: pxor %xmm8, %xmm51957; SSE2-NEXT: movdqa %xmm4, %xmm91958; SSE2-NEXT: pcmpgtd %xmm5, %xmm91959; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]1960; SSE2-NEXT: pcmpeqd %xmm4, %xmm51961; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]1962; SSE2-NEXT: pand %xmm10, %xmm51963; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]1964; SSE2-NEXT: por %xmm5, %xmm41965; SSE2-NEXT: packssdw %xmm7, %xmm41966; SSE2-NEXT: packssdw %xmm6, %xmm41967; SSE2-NEXT: pxor %xmm8, %xmm31968; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm51969; SSE2-NEXT: pxor %xmm8, %xmm51970; SSE2-NEXT: movdqa %xmm3, %xmm61971; SSE2-NEXT: pcmpgtd %xmm5, %xmm61972; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]1973; SSE2-NEXT: pcmpeqd %xmm3, %xmm51974; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]1975; SSE2-NEXT: pand %xmm7, %xmm31976; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]1977; SSE2-NEXT: por %xmm3, %xmm51978; SSE2-NEXT: pxor %xmm8, %xmm21979; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm31980; SSE2-NEXT: pxor %xmm8, %xmm31981; SSE2-NEXT: movdqa %xmm2, %xmm61982; SSE2-NEXT: pcmpgtd %xmm3, %xmm61983; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]1984; SSE2-NEXT: pcmpeqd %xmm2, %xmm31985; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]1986; SSE2-NEXT: pand %xmm7, %xmm31987; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]1988; SSE2-NEXT: por %xmm3, %xmm21989; SSE2-NEXT: packssdw %xmm5, %xmm21990; SSE2-NEXT: pxor %xmm8, %xmm11991; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm31992; SSE2-NEXT: pxor %xmm8, %xmm31993; SSE2-NEXT: movdqa %xmm1, %xmm51994; SSE2-NEXT: pcmpgtd %xmm3, %xmm51995; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]1996; SSE2-NEXT: pcmpeqd %xmm1, %xmm31997; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]1998; SSE2-NEXT: pand %xmm6, %xmm11999; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]2000; SSE2-NEXT: por %xmm1, %xmm32001; SSE2-NEXT: pxor %xmm8, %xmm02002; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm12003; SSE2-NEXT: pxor %xmm8, %xmm12004; SSE2-NEXT: movdqa %xmm0, %xmm52005; SSE2-NEXT: pcmpgtd %xmm1, %xmm52006; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]2007; SSE2-NEXT: pcmpeqd %xmm0, %xmm12008; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]2009; SSE2-NEXT: pand %xmm6, %xmm02010; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]2011; SSE2-NEXT: por %xmm0, %xmm12012; SSE2-NEXT: packssdw %xmm3, %xmm12013; SSE2-NEXT: packssdw %xmm2, %xmm12014; SSE2-NEXT: packsswb %xmm4, %xmm12015; SSE2-NEXT: pmovmskb %xmm1, %ecx2016; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm02017; SSE2-NEXT: pxor %xmm8, %xmm02018; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm12019; SSE2-NEXT: pxor %xmm8, %xmm12020; SSE2-NEXT: movdqa %xmm1, %xmm22021; SSE2-NEXT: pcmpgtd %xmm0, %xmm22022; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]2023; SSE2-NEXT: pcmpeqd %xmm0, %xmm12024; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]2025; SSE2-NEXT: pand %xmm3, %xmm02026; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]2027; SSE2-NEXT: por %xmm0, %xmm22028; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm02029; SSE2-NEXT: pxor %xmm8, %xmm02030; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm12031; SSE2-NEXT: pxor %xmm8, %xmm12032; SSE2-NEXT: movdqa %xmm1, %xmm32033; SSE2-NEXT: pcmpgtd %xmm0, %xmm32034; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]2035; SSE2-NEXT: pcmpeqd %xmm0, %xmm12036; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]2037; SSE2-NEXT: pand %xmm4, %xmm02038; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]2039; SSE2-NEXT: por %xmm0, %xmm12040; SSE2-NEXT: packssdw %xmm2, %xmm12041; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm02042; SSE2-NEXT: pxor %xmm8, %xmm02043; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm22044; SSE2-NEXT: pxor %xmm8, %xmm22045; SSE2-NEXT: movdqa %xmm2, %xmm32046; SSE2-NEXT: pcmpgtd %xmm0, %xmm32047; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]2048; SSE2-NEXT: pcmpeqd %xmm0, %xmm22049; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]2050; SSE2-NEXT: pand %xmm4, %xmm02051; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]2052; SSE2-NEXT: por %xmm0, %xmm22053; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm02054; SSE2-NEXT: pxor %xmm8, %xmm02055; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm32056; SSE2-NEXT: pxor %xmm8, %xmm32057; SSE2-NEXT: movdqa %xmm3, %xmm42058; SSE2-NEXT: pcmpgtd %xmm0, %xmm42059; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]2060; SSE2-NEXT: pcmpeqd %xmm0, %xmm32061; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]2062; SSE2-NEXT: pand %xmm5, %xmm32063; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]2064; SSE2-NEXT: por %xmm3, %xmm02065; SSE2-NEXT: packssdw %xmm2, %xmm02066; SSE2-NEXT: packssdw %xmm1, %xmm02067; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm12068; SSE2-NEXT: pxor %xmm8, %xmm12069; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm22070; SSE2-NEXT: pxor %xmm8, %xmm22071; SSE2-NEXT: movdqa %xmm2, %xmm32072; SSE2-NEXT: pcmpgtd %xmm1, %xmm32073; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]2074; SSE2-NEXT: pcmpeqd %xmm1, %xmm22075; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]2076; SSE2-NEXT: pand %xmm4, %xmm12077; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]2078; SSE2-NEXT: por %xmm1, %xmm22079; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm12080; SSE2-NEXT: pxor %xmm8, %xmm12081; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm32082; SSE2-NEXT: pxor %xmm8, %xmm32083; SSE2-NEXT: movdqa %xmm3, %xmm42084; SSE2-NEXT: pcmpgtd %xmm1, %xmm42085; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]2086; SSE2-NEXT: pcmpeqd %xmm1, %xmm32087; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]2088; SSE2-NEXT: pand %xmm5, %xmm32089; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]2090; SSE2-NEXT: por %xmm3, %xmm12091; SSE2-NEXT: packssdw %xmm2, %xmm12092; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm22093; SSE2-NEXT: pxor %xmm8, %xmm22094; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm32095; SSE2-NEXT: pxor %xmm8, %xmm32096; SSE2-NEXT: movdqa %xmm3, %xmm42097; SSE2-NEXT: pcmpgtd %xmm2, %xmm42098; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]2099; SSE2-NEXT: pcmpeqd %xmm2, %xmm32100; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]2101; SSE2-NEXT: pand %xmm5, %xmm22102; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]2103; SSE2-NEXT: por %xmm2, %xmm32104; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm22105; SSE2-NEXT: pxor %xmm8, %xmm22106; SSE2-NEXT: pxor {{[0-9]+}}(%rsp), %xmm82107; SSE2-NEXT: movdqa %xmm8, %xmm42108; SSE2-NEXT: pcmpgtd %xmm2, %xmm42109; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]2110; SSE2-NEXT: pcmpeqd %xmm2, %xmm82111; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm8[1,1,3,3]2112; SSE2-NEXT: pand %xmm5, %xmm22113; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]2114; SSE2-NEXT: por %xmm2, %xmm42115; SSE2-NEXT: packssdw %xmm3, %xmm42116; SSE2-NEXT: packssdw %xmm1, %xmm42117; SSE2-NEXT: packsswb %xmm0, %xmm42118; SSE2-NEXT: pmovmskb %xmm4, %edx2119; SSE2-NEXT: shll $16, %edx2120; SSE2-NEXT: orl %ecx, %edx2121; SSE2-NEXT: movl %edx, (%rdi)2122; SSE2-NEXT: retq2123;2124; SSE42-LABEL: test_cmp_v32i64:2125; SSE42: # %bb.0:2126; SSE42-NEXT: movq %rdi, %rax2127; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm82128; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm112129; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm102130; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm122131; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm92132; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm142133; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm132134; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm152135; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm72136; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm62137; SSE42-NEXT: packssdw %xmm7, %xmm62138; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm52139; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm42140; SSE42-NEXT: packssdw %xmm5, %xmm42141; SSE42-NEXT: packssdw %xmm6, %xmm42142; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm32143; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm22144; SSE42-NEXT: packssdw %xmm3, %xmm22145; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm12146; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm02147; SSE42-NEXT: packssdw %xmm1, %xmm02148; SSE42-NEXT: packssdw %xmm2, %xmm02149; SSE42-NEXT: packsswb %xmm4, %xmm02150; SSE42-NEXT: pmovmskb %xmm0, %ecx2151; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm152152; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm132153; SSE42-NEXT: packssdw %xmm15, %xmm132154; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm142155; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm92156; SSE42-NEXT: packssdw %xmm14, %xmm92157; SSE42-NEXT: packssdw %xmm13, %xmm92158; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm122159; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm102160; SSE42-NEXT: packssdw %xmm12, %xmm102161; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm112162; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm82163; SSE42-NEXT: packssdw %xmm11, %xmm82164; SSE42-NEXT: packssdw %xmm10, %xmm82165; SSE42-NEXT: packsswb %xmm9, %xmm82166; SSE42-NEXT: pmovmskb %xmm8, %edx2167; SSE42-NEXT: shll $16, %edx2168; SSE42-NEXT: orl %ecx, %edx2169; SSE42-NEXT: movl %edx, (%rdi)2170; SSE42-NEXT: retq2171;2172; AVX1-LABEL: test_cmp_v32i64:2173; AVX1: # %bb.0:2174; AVX1-NEXT: pushq %rbp2175; AVX1-NEXT: movq %rsp, %rbp2176; AVX1-NEXT: andq $-32, %rsp2177; AVX1-NEXT: subq $32, %rsp2178; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm82179; AVX1-NEXT: vpcmpgtq 256(%rbp), %xmm8, %xmm82180; AVX1-NEXT: vpcmpgtq 240(%rbp), %xmm7, %xmm72181; AVX1-NEXT: vpackssdw %xmm8, %xmm7, %xmm72182; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm82183; AVX1-NEXT: vpcmpgtq 224(%rbp), %xmm8, %xmm82184; AVX1-NEXT: vpcmpgtq 208(%rbp), %xmm6, %xmm62185; AVX1-NEXT: vpackssdw %xmm8, %xmm6, %xmm62186; AVX1-NEXT: vpackssdw %xmm7, %xmm6, %xmm62187; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm72188; AVX1-NEXT: vpcmpgtq 192(%rbp), %xmm7, %xmm72189; AVX1-NEXT: vpcmpgtq 176(%rbp), %xmm5, %xmm52190; AVX1-NEXT: vpackssdw %xmm7, %xmm5, %xmm52191; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm72192; AVX1-NEXT: vpcmpgtq 160(%rbp), %xmm7, %xmm72193; AVX1-NEXT: vpcmpgtq 144(%rbp), %xmm4, %xmm42194; AVX1-NEXT: vpackssdw %xmm7, %xmm4, %xmm42195; AVX1-NEXT: vpackssdw %xmm5, %xmm4, %xmm42196; AVX1-NEXT: vpacksswb %xmm6, %xmm4, %xmm42197; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm52198; AVX1-NEXT: vpcmpgtq 128(%rbp), %xmm5, %xmm52199; AVX1-NEXT: vpcmpgtq 112(%rbp), %xmm3, %xmm32200; AVX1-NEXT: vpackssdw %xmm5, %xmm3, %xmm32201; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm52202; AVX1-NEXT: vpcmpgtq 96(%rbp), %xmm5, %xmm52203; AVX1-NEXT: vpcmpgtq 80(%rbp), %xmm2, %xmm22204; AVX1-NEXT: vpackssdw %xmm5, %xmm2, %xmm22205; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm22206; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm32207; AVX1-NEXT: vpcmpgtq 64(%rbp), %xmm3, %xmm32208; AVX1-NEXT: vpcmpgtq 48(%rbp), %xmm1, %xmm12209; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm12210; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm32211; AVX1-NEXT: vpcmpgtq 32(%rbp), %xmm3, %xmm32212; AVX1-NEXT: vpcmpgtq 16(%rbp), %xmm0, %xmm02213; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm02214; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm02215; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm02216; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm02217; AVX1-NEXT: movq %rbp, %rsp2218; AVX1-NEXT: popq %rbp2219; AVX1-NEXT: retq2220;2221; AVX2-LABEL: test_cmp_v32i64:2222; AVX2: # %bb.0:2223; AVX2-NEXT: pushq %rbp2224; AVX2-NEXT: movq %rsp, %rbp2225; AVX2-NEXT: andq $-32, %rsp2226; AVX2-NEXT: subq $32, %rsp2227; AVX2-NEXT: vpcmpgtq 240(%rbp), %ymm7, %ymm72228; AVX2-NEXT: vpcmpgtq 208(%rbp), %ymm6, %ymm62229; AVX2-NEXT: vpackssdw %ymm7, %ymm6, %ymm62230; AVX2-NEXT: vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]2231; AVX2-NEXT: vpcmpgtq 176(%rbp), %ymm5, %ymm52232; AVX2-NEXT: vpcmpgtq 144(%rbp), %ymm4, %ymm42233; AVX2-NEXT: vpackssdw %ymm5, %ymm4, %ymm42234; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]2235; AVX2-NEXT: vpackssdw %ymm6, %ymm4, %ymm42236; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]2237; AVX2-NEXT: vpcmpgtq 112(%rbp), %ymm3, %ymm32238; AVX2-NEXT: vpcmpgtq 80(%rbp), %ymm2, %ymm22239; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm22240; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]2241; AVX2-NEXT: vpcmpgtq 48(%rbp), %ymm1, %ymm12242; AVX2-NEXT: vpcmpgtq 16(%rbp), %ymm0, %ymm02243; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm02244; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2245; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm02246; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2247; AVX2-NEXT: vpacksswb %ymm4, %ymm0, %ymm02248; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2249; AVX2-NEXT: movq %rbp, %rsp2250; AVX2-NEXT: popq %rbp2251; AVX2-NEXT: retq2252;2253; AVX512F-LABEL: test_cmp_v32i64:2254; AVX512F: # %bb.0:2255; AVX512F-NEXT: vpcmpgtq %zmm6, %zmm2, %k02256; AVX512F-NEXT: vpcmpgtq %zmm7, %zmm3, %k12257; AVX512F-NEXT: kunpckbw %k0, %k1, %k12258; AVX512F-NEXT: vpcmpgtq %zmm4, %zmm0, %k02259; AVX512F-NEXT: vpcmpgtq %zmm5, %zmm1, %k22260; AVX512F-NEXT: kunpckbw %k0, %k2, %k22261; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}2262; AVX512F-NEXT: vpmovdb %zmm0, %xmm02263; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}2264; AVX512F-NEXT: vpmovdb %zmm1, %xmm12265; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm02266; AVX512F-NEXT: retq2267;2268; AVX512DQ-LABEL: test_cmp_v32i64:2269; AVX512DQ: # %bb.0:2270; AVX512DQ-NEXT: vpcmpgtq %zmm6, %zmm2, %k02271; AVX512DQ-NEXT: vpcmpgtq %zmm7, %zmm3, %k12272; AVX512DQ-NEXT: kunpckbw %k0, %k1, %k02273; AVX512DQ-NEXT: vpcmpgtq %zmm4, %zmm0, %k12274; AVX512DQ-NEXT: vpcmpgtq %zmm5, %zmm1, %k22275; AVX512DQ-NEXT: kunpckbw %k1, %k2, %k12276; AVX512DQ-NEXT: vpmovm2d %k1, %zmm02277; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm02278; AVX512DQ-NEXT: vpmovm2d %k0, %zmm12279; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm12280; AVX512DQ-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm02281; AVX512DQ-NEXT: retq2282;2283; AVX512BW-LABEL: test_cmp_v32i64:2284; AVX512BW: # %bb.0:2285; AVX512BW-NEXT: vpcmpgtq %zmm4, %zmm0, %k02286; AVX512BW-NEXT: vpcmpgtq %zmm5, %zmm1, %k12287; AVX512BW-NEXT: kunpckbw %k0, %k1, %k02288; AVX512BW-NEXT: vpcmpgtq %zmm6, %zmm2, %k12289; AVX512BW-NEXT: vpcmpgtq %zmm7, %zmm3, %k22290; AVX512BW-NEXT: kunpckbw %k1, %k2, %k12291; AVX512BW-NEXT: kunpckwd %k0, %k1, %k02292; AVX512BW-NEXT: vpmovm2b %k0, %zmm02293; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm02294; AVX512BW-NEXT: retq2295 %1 = icmp sgt <32 x i64> %a0, %a12296 ret <32 x i1> %12297}2298