brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.2 KiB · ac4b25b Raw
903 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE414; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,SSE425; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX27; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+xop | FileCheck %s --check-prefix=XOP8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+xop | FileCheck %s --check-prefix=XOP9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX,AVX51210; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefixes=AVX,AVX51211 12;13; Equal14;15 16define <2 x i64> @eq_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {17; SSE2-LABEL: eq_v2i64:18; SSE2:       # %bb.0:19; SSE2-NEXT:    pcmpeqd %xmm1, %xmm020; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]21; SSE2-NEXT:    pand %xmm1, %xmm022; SSE2-NEXT:    retq23;24; SSE41-LABEL: eq_v2i64:25; SSE41:       # %bb.0:26; SSE41-NEXT:    pcmpeqq %xmm1, %xmm027; SSE41-NEXT:    retq28;29; SSE42-LABEL: eq_v2i64:30; SSE42:       # %bb.0:31; SSE42-NEXT:    pcmpeqq %xmm1, %xmm032; SSE42-NEXT:    retq33;34; AVX-LABEL: eq_v2i64:35; AVX:       # %bb.0:36; AVX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm037; AVX-NEXT:    retq38;39; XOP-LABEL: eq_v2i64:40; XOP:       # %bb.0:41; XOP-NEXT:    vpcomeqq %xmm1, %xmm0, %xmm042; XOP-NEXT:    retq43  %1 = icmp eq <2 x i64> %a, %b44  %2 = sext <2 x i1> %1 to <2 x i64>45  ret <2 x i64> %246}47 48define <4 x i32> @eq_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {49; SSE-LABEL: eq_v4i32:50; SSE:       # %bb.0:51; SSE-NEXT:    pcmpeqd %xmm1, %xmm052; SSE-NEXT:    retq53;54; AVX-LABEL: eq_v4i32:55; AVX:       # %bb.0:56; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm057; AVX-NEXT:    retq58;59; XOP-LABEL: eq_v4i32:60; XOP:       # %bb.0:61; XOP-NEXT:    vpcomeqd %xmm1, %xmm0, %xmm062; XOP-NEXT:    retq63  %1 = icmp eq <4 x i32> %a, %b64  %2 = sext <4 x i1> %1 to <4 x i32>65  ret <4 x i32> %266}67 68define <8 x i16> @eq_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {69; SSE-LABEL: eq_v8i16:70; SSE:       # %bb.0:71; SSE-NEXT:    pcmpeqw %xmm1, %xmm072; SSE-NEXT:    retq73;74; AVX-LABEL: eq_v8i16:75; AVX:       # %bb.0:76; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm077; AVX-NEXT:    retq78;79; XOP-LABEL: eq_v8i16:80; XOP:       # %bb.0:81; XOP-NEXT:    vpcomeqw %xmm1, %xmm0, %xmm082; XOP-NEXT:    retq83  %1 = icmp eq <8 x i16> %a, %b84  %2 = sext <8 x i1> %1 to <8 x i16>85  ret <8 x i16> %286}87 88define <16 x i8> @eq_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {89; SSE-LABEL: eq_v16i8:90; SSE:       # %bb.0:91; SSE-NEXT:    pcmpeqb %xmm1, %xmm092; SSE-NEXT:    retq93;94; AVX-LABEL: eq_v16i8:95; AVX:       # %bb.0:96; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm097; AVX-NEXT:    retq98;99; XOP-LABEL: eq_v16i8:100; XOP:       # %bb.0:101; XOP-NEXT:    vpcomeqb %xmm1, %xmm0, %xmm0102; XOP-NEXT:    retq103  %1 = icmp eq <16 x i8> %a, %b104  %2 = sext <16 x i1> %1 to <16 x i8>105  ret <16 x i8> %2106}107 108;109; Not Equal110;111 112define <2 x i64> @ne_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {113; SSE2-LABEL: ne_v2i64:114; SSE2:       # %bb.0:115; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0116; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]117; SSE2-NEXT:    pand %xmm1, %xmm0118; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1119; SSE2-NEXT:    pxor %xmm1, %xmm0120; SSE2-NEXT:    retq121;122; SSE41-LABEL: ne_v2i64:123; SSE41:       # %bb.0:124; SSE41-NEXT:    pcmpeqq %xmm1, %xmm0125; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1126; SSE41-NEXT:    pxor %xmm1, %xmm0127; SSE41-NEXT:    retq128;129; SSE42-LABEL: ne_v2i64:130; SSE42:       # %bb.0:131; SSE42-NEXT:    pcmpeqq %xmm1, %xmm0132; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1133; SSE42-NEXT:    pxor %xmm1, %xmm0134; SSE42-NEXT:    retq135;136; AVX1-LABEL: ne_v2i64:137; AVX1:       # %bb.0:138; AVX1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0139; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1140; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0141; AVX1-NEXT:    retq142;143; AVX2-LABEL: ne_v2i64:144; AVX2:       # %bb.0:145; AVX2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0146; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1147; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0148; AVX2-NEXT:    retq149;150; XOP-LABEL: ne_v2i64:151; XOP:       # %bb.0:152; XOP-NEXT:    vpcomneqq %xmm1, %xmm0, %xmm0153; XOP-NEXT:    retq154;155; AVX512-LABEL: ne_v2i64:156; AVX512:       # %bb.0:157; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0158; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0159; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0160; AVX512-NEXT:    vzeroupper161; AVX512-NEXT:    retq162  %1 = icmp ne <2 x i64> %a, %b163  %2 = sext <2 x i1> %1 to <2 x i64>164  ret <2 x i64> %2165}166 167define <4 x i32> @ne_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {168; SSE-LABEL: ne_v4i32:169; SSE:       # %bb.0:170; SSE-NEXT:    pcmpeqd %xmm1, %xmm0171; SSE-NEXT:    pcmpeqd %xmm1, %xmm1172; SSE-NEXT:    pxor %xmm1, %xmm0173; SSE-NEXT:    retq174;175; AVX1-LABEL: ne_v4i32:176; AVX1:       # %bb.0:177; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0178; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1179; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0180; AVX1-NEXT:    retq181;182; AVX2-LABEL: ne_v4i32:183; AVX2:       # %bb.0:184; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0185; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1186; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0187; AVX2-NEXT:    retq188;189; XOP-LABEL: ne_v4i32:190; XOP:       # %bb.0:191; XOP-NEXT:    vpcomneqd %xmm1, %xmm0, %xmm0192; XOP-NEXT:    retq193;194; AVX512-LABEL: ne_v4i32:195; AVX512:       # %bb.0:196; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0197; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0198; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0199; AVX512-NEXT:    vzeroupper200; AVX512-NEXT:    retq201  %1 = icmp ne <4 x i32> %a, %b202  %2 = sext <4 x i1> %1 to <4 x i32>203  ret <4 x i32> %2204}205 206define <8 x i16> @ne_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {207; SSE-LABEL: ne_v8i16:208; SSE:       # %bb.0:209; SSE-NEXT:    pcmpeqw %xmm1, %xmm0210; SSE-NEXT:    pcmpeqd %xmm1, %xmm1211; SSE-NEXT:    pxor %xmm1, %xmm0212; SSE-NEXT:    retq213;214; AVX1-LABEL: ne_v8i16:215; AVX1:       # %bb.0:216; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0217; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1218; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0219; AVX1-NEXT:    retq220;221; AVX2-LABEL: ne_v8i16:222; AVX2:       # %bb.0:223; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0224; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1225; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0226; AVX2-NEXT:    retq227;228; XOP-LABEL: ne_v8i16:229; XOP:       # %bb.0:230; XOP-NEXT:    vpcomneqw %xmm1, %xmm0, %xmm0231; XOP-NEXT:    retq232;233; AVX512-LABEL: ne_v8i16:234; AVX512:       # %bb.0:235; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0236; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0237; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0238; AVX512-NEXT:    vzeroupper239; AVX512-NEXT:    retq240  %1 = icmp ne <8 x i16> %a, %b241  %2 = sext <8 x i1> %1 to <8 x i16>242  ret <8 x i16> %2243}244 245define <16 x i8> @ne_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {246; SSE-LABEL: ne_v16i8:247; SSE:       # %bb.0:248; SSE-NEXT:    pcmpeqb %xmm1, %xmm0249; SSE-NEXT:    pcmpeqd %xmm1, %xmm1250; SSE-NEXT:    pxor %xmm1, %xmm0251; SSE-NEXT:    retq252;253; AVX1-LABEL: ne_v16i8:254; AVX1:       # %bb.0:255; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0256; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1257; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0258; AVX1-NEXT:    retq259;260; AVX2-LABEL: ne_v16i8:261; AVX2:       # %bb.0:262; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0263; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1264; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0265; AVX2-NEXT:    retq266;267; XOP-LABEL: ne_v16i8:268; XOP:       # %bb.0:269; XOP-NEXT:    vpcomneqb %xmm1, %xmm0, %xmm0270; XOP-NEXT:    retq271;272; AVX512-LABEL: ne_v16i8:273; AVX512:       # %bb.0:274; AVX512-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0275; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0276; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0277; AVX512-NEXT:    vzeroupper278; AVX512-NEXT:    retq279  %1 = icmp ne <16 x i8> %a, %b280  %2 = sext <16 x i1> %1 to <16 x i8>281  ret <16 x i8> %2282}283 284;285; Greater Than Or Equal286;287 288define <2 x i64> @ge_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {289; SSE2-LABEL: ge_v2i64:290; SSE2:       # %bb.0:291; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]292; SSE2-NEXT:    pxor %xmm2, %xmm0293; SSE2-NEXT:    pxor %xmm2, %xmm1294; SSE2-NEXT:    movdqa %xmm1, %xmm2295; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2296; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]297; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1298; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]299; SSE2-NEXT:    pand %xmm3, %xmm0300; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]301; SSE2-NEXT:    por %xmm0, %xmm1302; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0303; SSE2-NEXT:    pxor %xmm1, %xmm0304; SSE2-NEXT:    retq305;306; SSE41-LABEL: ge_v2i64:307; SSE41:       # %bb.0:308; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm2 = [2147483648,2147483648]309; SSE41-NEXT:    pxor %xmm2, %xmm0310; SSE41-NEXT:    pxor %xmm2, %xmm1311; SSE41-NEXT:    movdqa %xmm1, %xmm2312; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2313; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]314; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1315; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]316; SSE41-NEXT:    pand %xmm3, %xmm0317; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]318; SSE41-NEXT:    por %xmm0, %xmm1319; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0320; SSE41-NEXT:    pxor %xmm1, %xmm0321; SSE41-NEXT:    retq322;323; SSE42-LABEL: ge_v2i64:324; SSE42:       # %bb.0:325; SSE42-NEXT:    pcmpgtq %xmm0, %xmm1326; SSE42-NEXT:    pcmpeqd %xmm0, %xmm0327; SSE42-NEXT:    pxor %xmm1, %xmm0328; SSE42-NEXT:    retq329;330; AVX1-LABEL: ge_v2i64:331; AVX1:       # %bb.0:332; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0333; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1334; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0335; AVX1-NEXT:    retq336;337; AVX2-LABEL: ge_v2i64:338; AVX2:       # %bb.0:339; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0340; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1341; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0342; AVX2-NEXT:    retq343;344; XOP-LABEL: ge_v2i64:345; XOP:       # %bb.0:346; XOP-NEXT:    vpcomgeq %xmm1, %xmm0, %xmm0347; XOP-NEXT:    retq348;349; AVX512-LABEL: ge_v2i64:350; AVX512:       # %bb.0:351; AVX512-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0352; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0353; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0354; AVX512-NEXT:    vzeroupper355; AVX512-NEXT:    retq356  %1 = icmp sge <2 x i64> %a, %b357  %2 = sext <2 x i1> %1 to <2 x i64>358  ret <2 x i64> %2359}360 361define <4 x i32> @ge_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {362; SSE-LABEL: ge_v4i32:363; SSE:       # %bb.0:364; SSE-NEXT:    pcmpgtd %xmm0, %xmm1365; SSE-NEXT:    pcmpeqd %xmm0, %xmm0366; SSE-NEXT:    pxor %xmm1, %xmm0367; SSE-NEXT:    retq368;369; AVX1-LABEL: ge_v4i32:370; AVX1:       # %bb.0:371; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0372; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1373; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0374; AVX1-NEXT:    retq375;376; AVX2-LABEL: ge_v4i32:377; AVX2:       # %bb.0:378; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0379; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1380; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0381; AVX2-NEXT:    retq382;383; XOP-LABEL: ge_v4i32:384; XOP:       # %bb.0:385; XOP-NEXT:    vpcomged %xmm1, %xmm0, %xmm0386; XOP-NEXT:    retq387;388; AVX512-LABEL: ge_v4i32:389; AVX512:       # %bb.0:390; AVX512-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0391; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0392; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0393; AVX512-NEXT:    vzeroupper394; AVX512-NEXT:    retq395  %1 = icmp sge <4 x i32> %a, %b396  %2 = sext <4 x i1> %1 to <4 x i32>397  ret <4 x i32> %2398}399 400define <8 x i16> @ge_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {401; SSE-LABEL: ge_v8i16:402; SSE:       # %bb.0:403; SSE-NEXT:    pcmpgtw %xmm0, %xmm1404; SSE-NEXT:    pcmpeqd %xmm0, %xmm0405; SSE-NEXT:    pxor %xmm1, %xmm0406; SSE-NEXT:    retq407;408; AVX1-LABEL: ge_v8i16:409; AVX1:       # %bb.0:410; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0411; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1412; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0413; AVX1-NEXT:    retq414;415; AVX2-LABEL: ge_v8i16:416; AVX2:       # %bb.0:417; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0418; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1419; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0420; AVX2-NEXT:    retq421;422; XOP-LABEL: ge_v8i16:423; XOP:       # %bb.0:424; XOP-NEXT:    vpcomgew %xmm1, %xmm0, %xmm0425; XOP-NEXT:    retq426;427; AVX512-LABEL: ge_v8i16:428; AVX512:       # %bb.0:429; AVX512-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0430; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0431; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0432; AVX512-NEXT:    vzeroupper433; AVX512-NEXT:    retq434  %1 = icmp sge <8 x i16> %a, %b435  %2 = sext <8 x i1> %1 to <8 x i16>436  ret <8 x i16> %2437}438 439define <16 x i8> @ge_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {440; SSE-LABEL: ge_v16i8:441; SSE:       # %bb.0:442; SSE-NEXT:    pcmpgtb %xmm0, %xmm1443; SSE-NEXT:    pcmpeqd %xmm0, %xmm0444; SSE-NEXT:    pxor %xmm1, %xmm0445; SSE-NEXT:    retq446;447; AVX1-LABEL: ge_v16i8:448; AVX1:       # %bb.0:449; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0450; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1451; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0452; AVX1-NEXT:    retq453;454; AVX2-LABEL: ge_v16i8:455; AVX2:       # %bb.0:456; AVX2-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0457; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1458; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0459; AVX2-NEXT:    retq460;461; XOP-LABEL: ge_v16i8:462; XOP:       # %bb.0:463; XOP-NEXT:    vpcomgeb %xmm1, %xmm0, %xmm0464; XOP-NEXT:    retq465;466; AVX512-LABEL: ge_v16i8:467; AVX512:       # %bb.0:468; AVX512-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0469; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0470; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0471; AVX512-NEXT:    vzeroupper472; AVX512-NEXT:    retq473  %1 = icmp sge <16 x i8> %a, %b474  %2 = sext <16 x i1> %1 to <16 x i8>475  ret <16 x i8> %2476}477 478;479; Greater Than480;481 482define <2 x i64> @gt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {483; SSE2-LABEL: gt_v2i64:484; SSE2:       # %bb.0:485; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]486; SSE2-NEXT:    pxor %xmm2, %xmm1487; SSE2-NEXT:    pxor %xmm2, %xmm0488; SSE2-NEXT:    movdqa %xmm0, %xmm2489; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2490; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]491; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0492; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]493; SSE2-NEXT:    pand %xmm3, %xmm1494; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]495; SSE2-NEXT:    por %xmm1, %xmm0496; SSE2-NEXT:    retq497;498; SSE41-LABEL: gt_v2i64:499; SSE41:       # %bb.0:500; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm2 = [2147483648,2147483648]501; SSE41-NEXT:    pxor %xmm2, %xmm1502; SSE41-NEXT:    pxor %xmm2, %xmm0503; SSE41-NEXT:    movdqa %xmm0, %xmm2504; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2505; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]506; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0507; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]508; SSE41-NEXT:    pand %xmm3, %xmm1509; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]510; SSE41-NEXT:    por %xmm1, %xmm0511; SSE41-NEXT:    retq512;513; SSE42-LABEL: gt_v2i64:514; SSE42:       # %bb.0:515; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0516; SSE42-NEXT:    retq517;518; AVX-LABEL: gt_v2i64:519; AVX:       # %bb.0:520; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0521; AVX-NEXT:    retq522;523; XOP-LABEL: gt_v2i64:524; XOP:       # %bb.0:525; XOP-NEXT:    vpcomgtq %xmm1, %xmm0, %xmm0526; XOP-NEXT:    retq527  %1 = icmp sgt <2 x i64> %a, %b528  %2 = sext <2 x i1> %1 to <2 x i64>529  ret <2 x i64> %2530}531 532define <4 x i32> @gt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {533; SSE-LABEL: gt_v4i32:534; SSE:       # %bb.0:535; SSE-NEXT:    pcmpgtd %xmm1, %xmm0536; SSE-NEXT:    retq537;538; AVX-LABEL: gt_v4i32:539; AVX:       # %bb.0:540; AVX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0541; AVX-NEXT:    retq542;543; XOP-LABEL: gt_v4i32:544; XOP:       # %bb.0:545; XOP-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm0546; XOP-NEXT:    retq547  %1 = icmp sgt <4 x i32> %a, %b548  %2 = sext <4 x i1> %1 to <4 x i32>549  ret <4 x i32> %2550}551 552define <8 x i16> @gt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {553; SSE-LABEL: gt_v8i16:554; SSE:       # %bb.0:555; SSE-NEXT:    pcmpgtw %xmm1, %xmm0556; SSE-NEXT:    retq557;558; AVX-LABEL: gt_v8i16:559; AVX:       # %bb.0:560; AVX-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0561; AVX-NEXT:    retq562;563; XOP-LABEL: gt_v8i16:564; XOP:       # %bb.0:565; XOP-NEXT:    vpcomgtw %xmm1, %xmm0, %xmm0566; XOP-NEXT:    retq567  %1 = icmp sgt <8 x i16> %a, %b568  %2 = sext <8 x i1> %1 to <8 x i16>569  ret <8 x i16> %2570}571 572define <16 x i8> @gt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {573; SSE-LABEL: gt_v16i8:574; SSE:       # %bb.0:575; SSE-NEXT:    pcmpgtb %xmm1, %xmm0576; SSE-NEXT:    retq577;578; AVX-LABEL: gt_v16i8:579; AVX:       # %bb.0:580; AVX-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0581; AVX-NEXT:    retq582;583; XOP-LABEL: gt_v16i8:584; XOP:       # %bb.0:585; XOP-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm0586; XOP-NEXT:    retq587  %1 = icmp sgt <16 x i8> %a, %b588  %2 = sext <16 x i1> %1 to <16 x i8>589  ret <16 x i8> %2590}591 592;593; Less Than Or Equal594;595 596define <2 x i64> @le_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {597; SSE2-LABEL: le_v2i64:598; SSE2:       # %bb.0:599; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]600; SSE2-NEXT:    pxor %xmm2, %xmm1601; SSE2-NEXT:    pxor %xmm2, %xmm0602; SSE2-NEXT:    movdqa %xmm0, %xmm2603; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2604; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]605; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0606; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]607; SSE2-NEXT:    pand %xmm3, %xmm0608; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]609; SSE2-NEXT:    por %xmm0, %xmm1610; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0611; SSE2-NEXT:    pxor %xmm1, %xmm0612; SSE2-NEXT:    retq613;614; SSE41-LABEL: le_v2i64:615; SSE41:       # %bb.0:616; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm2 = [2147483648,2147483648]617; SSE41-NEXT:    pxor %xmm2, %xmm1618; SSE41-NEXT:    pxor %xmm2, %xmm0619; SSE41-NEXT:    movdqa %xmm0, %xmm2620; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2621; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]622; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0623; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]624; SSE41-NEXT:    pand %xmm3, %xmm0625; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]626; SSE41-NEXT:    por %xmm0, %xmm1627; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0628; SSE41-NEXT:    pxor %xmm1, %xmm0629; SSE41-NEXT:    retq630;631; SSE42-LABEL: le_v2i64:632; SSE42:       # %bb.0:633; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0634; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1635; SSE42-NEXT:    pxor %xmm1, %xmm0636; SSE42-NEXT:    retq637;638; AVX1-LABEL: le_v2i64:639; AVX1:       # %bb.0:640; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0641; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1642; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0643; AVX1-NEXT:    retq644;645; AVX2-LABEL: le_v2i64:646; AVX2:       # %bb.0:647; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0648; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1649; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0650; AVX2-NEXT:    retq651;652; XOP-LABEL: le_v2i64:653; XOP:       # %bb.0:654; XOP-NEXT:    vpcomleq %xmm1, %xmm0, %xmm0655; XOP-NEXT:    retq656;657; AVX512-LABEL: le_v2i64:658; AVX512:       # %bb.0:659; AVX512-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0660; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0661; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0662; AVX512-NEXT:    vzeroupper663; AVX512-NEXT:    retq664  %1 = icmp sle <2 x i64> %a, %b665  %2 = sext <2 x i1> %1 to <2 x i64>666  ret <2 x i64> %2667}668 669define <4 x i32> @le_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {670; SSE-LABEL: le_v4i32:671; SSE:       # %bb.0:672; SSE-NEXT:    pcmpgtd %xmm1, %xmm0673; SSE-NEXT:    pcmpeqd %xmm1, %xmm1674; SSE-NEXT:    pxor %xmm1, %xmm0675; SSE-NEXT:    retq676;677; AVX1-LABEL: le_v4i32:678; AVX1:       # %bb.0:679; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0680; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1681; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0682; AVX1-NEXT:    retq683;684; AVX2-LABEL: le_v4i32:685; AVX2:       # %bb.0:686; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0687; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1688; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0689; AVX2-NEXT:    retq690;691; XOP-LABEL: le_v4i32:692; XOP:       # %bb.0:693; XOP-NEXT:    vpcomled %xmm1, %xmm0, %xmm0694; XOP-NEXT:    retq695;696; AVX512-LABEL: le_v4i32:697; AVX512:       # %bb.0:698; AVX512-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0699; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0700; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0701; AVX512-NEXT:    vzeroupper702; AVX512-NEXT:    retq703  %1 = icmp sle <4 x i32> %a, %b704  %2 = sext <4 x i1> %1 to <4 x i32>705  ret <4 x i32> %2706}707 708define <8 x i16> @le_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {709; SSE-LABEL: le_v8i16:710; SSE:       # %bb.0:711; SSE-NEXT:    pcmpgtw %xmm1, %xmm0712; SSE-NEXT:    pcmpeqd %xmm1, %xmm1713; SSE-NEXT:    pxor %xmm1, %xmm0714; SSE-NEXT:    retq715;716; AVX1-LABEL: le_v8i16:717; AVX1:       # %bb.0:718; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0719; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1720; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0721; AVX1-NEXT:    retq722;723; AVX2-LABEL: le_v8i16:724; AVX2:       # %bb.0:725; AVX2-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0726; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1727; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0728; AVX2-NEXT:    retq729;730; XOP-LABEL: le_v8i16:731; XOP:       # %bb.0:732; XOP-NEXT:    vpcomlew %xmm1, %xmm0, %xmm0733; XOP-NEXT:    retq734;735; AVX512-LABEL: le_v8i16:736; AVX512:       # %bb.0:737; AVX512-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0738; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0739; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0740; AVX512-NEXT:    vzeroupper741; AVX512-NEXT:    retq742  %1 = icmp sle <8 x i16> %a, %b743  %2 = sext <8 x i1> %1 to <8 x i16>744  ret <8 x i16> %2745}746 747define <16 x i8> @le_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {748; SSE-LABEL: le_v16i8:749; SSE:       # %bb.0:750; SSE-NEXT:    pcmpgtb %xmm1, %xmm0751; SSE-NEXT:    pcmpeqd %xmm1, %xmm1752; SSE-NEXT:    pxor %xmm1, %xmm0753; SSE-NEXT:    retq754;755; AVX1-LABEL: le_v16i8:756; AVX1:       # %bb.0:757; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0758; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1759; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0760; AVX1-NEXT:    retq761;762; AVX2-LABEL: le_v16i8:763; AVX2:       # %bb.0:764; AVX2-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0765; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1766; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0767; AVX2-NEXT:    retq768;769; XOP-LABEL: le_v16i8:770; XOP:       # %bb.0:771; XOP-NEXT:    vpcomleb %xmm1, %xmm0, %xmm0772; XOP-NEXT:    retq773;774; AVX512-LABEL: le_v16i8:775; AVX512:       # %bb.0:776; AVX512-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0777; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0778; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0779; AVX512-NEXT:    vzeroupper780; AVX512-NEXT:    retq781  %1 = icmp sle <16 x i8> %a, %b782  %2 = sext <16 x i1> %1 to <16 x i8>783  ret <16 x i8> %2784}785 786;787; Less Than788;789 790define <2 x i64> @lt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {791; SSE2-LABEL: lt_v2i64:792; SSE2:       # %bb.0:793; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]794; SSE2-NEXT:    pxor %xmm2, %xmm0795; SSE2-NEXT:    pxor %xmm2, %xmm1796; SSE2-NEXT:    movdqa %xmm1, %xmm2797; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2798; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]799; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1800; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]801; SSE2-NEXT:    pand %xmm3, %xmm1802; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]803; SSE2-NEXT:    por %xmm1, %xmm0804; SSE2-NEXT:    retq805;806; SSE41-LABEL: lt_v2i64:807; SSE41:       # %bb.0:808; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm2 = [2147483648,2147483648]809; SSE41-NEXT:    pxor %xmm2, %xmm0810; SSE41-NEXT:    pxor %xmm2, %xmm1811; SSE41-NEXT:    movdqa %xmm1, %xmm2812; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2813; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]814; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1815; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]816; SSE41-NEXT:    pand %xmm3, %xmm1817; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]818; SSE41-NEXT:    por %xmm1, %xmm0819; SSE41-NEXT:    retq820;821; SSE42-LABEL: lt_v2i64:822; SSE42:       # %bb.0:823; SSE42-NEXT:    pcmpgtq %xmm0, %xmm1824; SSE42-NEXT:    movdqa %xmm1, %xmm0825; SSE42-NEXT:    retq826;827; AVX-LABEL: lt_v2i64:828; AVX:       # %bb.0:829; AVX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0830; AVX-NEXT:    retq831;832; XOP-LABEL: lt_v2i64:833; XOP:       # %bb.0:834; XOP-NEXT:    vpcomltq %xmm1, %xmm0, %xmm0835; XOP-NEXT:    retq836  %1 = icmp slt <2 x i64> %a, %b837  %2 = sext <2 x i1> %1 to <2 x i64>838  ret <2 x i64> %2839}840 841define <4 x i32> @lt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {842; SSE-LABEL: lt_v4i32:843; SSE:       # %bb.0:844; SSE-NEXT:    pcmpgtd %xmm0, %xmm1845; SSE-NEXT:    movdqa %xmm1, %xmm0846; SSE-NEXT:    retq847;848; AVX-LABEL: lt_v4i32:849; AVX:       # %bb.0:850; AVX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0851; AVX-NEXT:    retq852;853; XOP-LABEL: lt_v4i32:854; XOP:       # %bb.0:855; XOP-NEXT:    vpcomltd %xmm1, %xmm0, %xmm0856; XOP-NEXT:    retq857  %1 = icmp slt <4 x i32> %a, %b858  %2 = sext <4 x i1> %1 to <4 x i32>859  ret <4 x i32> %2860}861 862define <8 x i16> @lt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {863; SSE-LABEL: lt_v8i16:864; SSE:       # %bb.0:865; SSE-NEXT:    pcmpgtw %xmm0, %xmm1866; SSE-NEXT:    movdqa %xmm1, %xmm0867; SSE-NEXT:    retq868;869; AVX-LABEL: lt_v8i16:870; AVX:       # %bb.0:871; AVX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0872; AVX-NEXT:    retq873;874; XOP-LABEL: lt_v8i16:875; XOP:       # %bb.0:876; XOP-NEXT:    vpcomltw %xmm1, %xmm0, %xmm0877; XOP-NEXT:    retq878  %1 = icmp slt <8 x i16> %a, %b879  %2 = sext <8 x i1> %1 to <8 x i16>880  ret <8 x i16> %2881}882 883define <16 x i8> @lt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {884; SSE-LABEL: lt_v16i8:885; SSE:       # %bb.0:886; SSE-NEXT:    pcmpgtb %xmm0, %xmm1887; SSE-NEXT:    movdqa %xmm1, %xmm0888; SSE-NEXT:    retq889;890; AVX-LABEL: lt_v16i8:891; AVX:       # %bb.0:892; AVX-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0893; AVX-NEXT:    retq894;895; XOP-LABEL: lt_v16i8:896; XOP:       # %bb.0:897; XOP-NEXT:    vpcomltb %xmm1, %xmm0, %xmm0898; XOP-NEXT:    retq899  %1 = icmp slt <16 x i8> %a, %b900  %2 = sext <16 x i1> %1 to <16 x i8>901  ret <16 x i8> %2902}903