brintos

brintos / llvm-project-archived public Read only

0
0
Text · 33.6 KiB · 9a0756e Raw
1134 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 = [9223372039002259456,9223372039002259456]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:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]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:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]326; SSE42-NEXT:    pxor %xmm2, %xmm0327; SSE42-NEXT:    pxor %xmm1, %xmm2328; SSE42-NEXT:    pcmpgtq %xmm0, %xmm2329; SSE42-NEXT:    pcmpeqd %xmm0, %xmm0330; SSE42-NEXT:    pxor %xmm2, %xmm0331; SSE42-NEXT:    retq332;333; AVX1-LABEL: ge_v2i64:334; AVX1:       # %bb.0:335; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]336; AVX1-NEXT:    # xmm2 = mem[0,0]337; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0338; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1339; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0340; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1341; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0342; AVX1-NEXT:    retq343;344; AVX2-LABEL: ge_v2i64:345; AVX2:       # %bb.0:346; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]347; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0348; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1349; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0350; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1351; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0352; AVX2-NEXT:    retq353;354; XOP-LABEL: ge_v2i64:355; XOP:       # %bb.0:356; XOP-NEXT:    vpcomgeuq %xmm1, %xmm0, %xmm0357; XOP-NEXT:    retq358;359; AVX512-LABEL: ge_v2i64:360; AVX512:       # %bb.0:361; AVX512-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1362; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0363; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm1364; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0365; AVX512-NEXT:    vzeroupper366; AVX512-NEXT:    retq367  %1 = icmp uge <2 x i64> %a, %b368  %2 = sext <2 x i1> %1 to <2 x i64>369  ret <2 x i64> %2370}371 372define <4 x i32> @ge_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {373; SSE2-LABEL: ge_v4i32:374; SSE2:       # %bb.0:375; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]376; SSE2-NEXT:    pxor %xmm2, %xmm0377; SSE2-NEXT:    pxor %xmm1, %xmm2378; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2379; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0380; SSE2-NEXT:    pxor %xmm2, %xmm0381; SSE2-NEXT:    retq382;383; SSE41-LABEL: ge_v4i32:384; SSE41:       # %bb.0:385; SSE41-NEXT:    pmaxud %xmm0, %xmm1386; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0387; SSE41-NEXT:    retq388;389; SSE42-LABEL: ge_v4i32:390; SSE42:       # %bb.0:391; SSE42-NEXT:    pmaxud %xmm0, %xmm1392; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0393; SSE42-NEXT:    retq394;395; AVX-LABEL: ge_v4i32:396; AVX:       # %bb.0:397; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1398; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0399; AVX-NEXT:    retq400;401; XOP-LABEL: ge_v4i32:402; XOP:       # %bb.0:403; XOP-NEXT:    vpcomgeud %xmm1, %xmm0, %xmm0404; XOP-NEXT:    retq405  %1 = icmp uge <4 x i32> %a, %b406  %2 = sext <4 x i1> %1 to <4 x i32>407  ret <4 x i32> %2408}409 410define <8 x i16> @ge_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {411; SSE2-LABEL: ge_v8i16:412; SSE2:       # %bb.0:413; SSE2-NEXT:    psubusw %xmm0, %xmm1414; SSE2-NEXT:    pxor %xmm0, %xmm0415; SSE2-NEXT:    pcmpeqw %xmm1, %xmm0416; SSE2-NEXT:    retq417;418; SSE41-LABEL: ge_v8i16:419; SSE41:       # %bb.0:420; SSE41-NEXT:    pmaxuw %xmm0, %xmm1421; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0422; SSE41-NEXT:    retq423;424; SSE42-LABEL: ge_v8i16:425; SSE42:       # %bb.0:426; SSE42-NEXT:    pmaxuw %xmm0, %xmm1427; SSE42-NEXT:    pcmpeqw %xmm1, %xmm0428; SSE42-NEXT:    retq429;430; AVX-LABEL: ge_v8i16:431; AVX:       # %bb.0:432; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm1433; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0434; AVX-NEXT:    retq435;436; XOP-LABEL: ge_v8i16:437; XOP:       # %bb.0:438; XOP-NEXT:    vpcomgeuw %xmm1, %xmm0, %xmm0439; XOP-NEXT:    retq440  %1 = icmp uge <8 x i16> %a, %b441  %2 = sext <8 x i1> %1 to <8 x i16>442  ret <8 x i16> %2443}444 445define <16 x i8> @ge_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {446; SSE-LABEL: ge_v16i8:447; SSE:       # %bb.0:448; SSE-NEXT:    pmaxub %xmm0, %xmm1449; SSE-NEXT:    pcmpeqb %xmm1, %xmm0450; SSE-NEXT:    retq451;452; AVX-LABEL: ge_v16i8:453; AVX:       # %bb.0:454; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm1455; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0456; AVX-NEXT:    retq457;458; XOP-LABEL: ge_v16i8:459; XOP:       # %bb.0:460; XOP-NEXT:    vpcomgeub %xmm1, %xmm0, %xmm0461; XOP-NEXT:    retq462  %1 = icmp uge <16 x i8> %a, %b463  %2 = sext <16 x i1> %1 to <16 x i8>464  ret <16 x i8> %2465}466 467;468; Greater Than469;470 471define <2 x i64> @gt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {472; SSE2-LABEL: gt_v2i64:473; SSE2:       # %bb.0:474; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]475; SSE2-NEXT:    pxor %xmm2, %xmm1476; SSE2-NEXT:    pxor %xmm2, %xmm0477; SSE2-NEXT:    movdqa %xmm0, %xmm2478; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2479; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]480; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0481; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]482; SSE2-NEXT:    pand %xmm3, %xmm1483; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]484; SSE2-NEXT:    por %xmm1, %xmm0485; SSE2-NEXT:    retq486;487; SSE41-LABEL: gt_v2i64:488; SSE41:       # %bb.0:489; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]490; SSE41-NEXT:    pxor %xmm2, %xmm1491; SSE41-NEXT:    pxor %xmm2, %xmm0492; SSE41-NEXT:    movdqa %xmm0, %xmm2493; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2494; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]495; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0496; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]497; SSE41-NEXT:    pand %xmm3, %xmm1498; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]499; SSE41-NEXT:    por %xmm1, %xmm0500; SSE41-NEXT:    retq501;502; SSE42-LABEL: gt_v2i64:503; SSE42:       # %bb.0:504; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]505; SSE42-NEXT:    pxor %xmm2, %xmm1506; SSE42-NEXT:    pxor %xmm2, %xmm0507; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0508; SSE42-NEXT:    retq509;510; AVX1-LABEL: gt_v2i64:511; AVX1:       # %bb.0:512; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]513; AVX1-NEXT:    # xmm2 = mem[0,0]514; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1515; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0516; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0517; AVX1-NEXT:    retq518;519; AVX2-LABEL: gt_v2i64:520; AVX2:       # %bb.0:521; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]522; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1523; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0524; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0525; AVX2-NEXT:    retq526;527; XOP-LABEL: gt_v2i64:528; XOP:       # %bb.0:529; XOP-NEXT:    vpcomgtuq %xmm1, %xmm0, %xmm0530; XOP-NEXT:    retq531;532; AVX512-LABEL: gt_v2i64:533; AVX512:       # %bb.0:534; AVX512-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1535; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0536; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm1537; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0538; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0539; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0540; AVX512-NEXT:    vzeroupper541; AVX512-NEXT:    retq542  %1 = icmp ugt <2 x i64> %a, %b543  %2 = sext <2 x i1> %1 to <2 x i64>544  ret <2 x i64> %2545}546 547define <4 x i32> @gt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {548; SSE2-LABEL: gt_v4i32:549; SSE2:       # %bb.0:550; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]551; SSE2-NEXT:    pxor %xmm2, %xmm1552; SSE2-NEXT:    pxor %xmm2, %xmm0553; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0554; SSE2-NEXT:    retq555;556; SSE41-LABEL: gt_v4i32:557; SSE41:       # %bb.0:558; SSE41-NEXT:    pminud %xmm0, %xmm1559; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0560; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1561; SSE41-NEXT:    pxor %xmm1, %xmm0562; SSE41-NEXT:    retq563;564; SSE42-LABEL: gt_v4i32:565; SSE42:       # %bb.0:566; SSE42-NEXT:    pminud %xmm0, %xmm1567; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0568; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1569; SSE42-NEXT:    pxor %xmm1, %xmm0570; SSE42-NEXT:    retq571;572; AVX1-LABEL: gt_v4i32:573; AVX1:       # %bb.0:574; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm1575; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0576; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1577; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0578; AVX1-NEXT:    retq579;580; AVX2-LABEL: gt_v4i32:581; AVX2:       # %bb.0:582; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm1583; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0584; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1585; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0586; AVX2-NEXT:    retq587;588; XOP-LABEL: gt_v4i32:589; XOP:       # %bb.0:590; XOP-NEXT:    vpcomgtud %xmm1, %xmm0, %xmm0591; XOP-NEXT:    retq592;593; AVX512-LABEL: gt_v4i32:594; AVX512:       # %bb.0:595; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm1596; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0597; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0598; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0599; AVX512-NEXT:    vzeroupper600; AVX512-NEXT:    retq601  %1 = icmp ugt <4 x i32> %a, %b602  %2 = sext <4 x i1> %1 to <4 x i32>603  ret <4 x i32> %2604}605 606define <8 x i16> @gt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {607; SSE2-LABEL: gt_v8i16:608; SSE2:       # %bb.0:609; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]610; SSE2-NEXT:    pxor %xmm2, %xmm1611; SSE2-NEXT:    pxor %xmm2, %xmm0612; SSE2-NEXT:    pcmpgtw %xmm1, %xmm0613; SSE2-NEXT:    retq614;615; SSE41-LABEL: gt_v8i16:616; SSE41:       # %bb.0:617; SSE41-NEXT:    pminuw %xmm0, %xmm1618; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0619; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1620; SSE41-NEXT:    pxor %xmm1, %xmm0621; SSE41-NEXT:    retq622;623; SSE42-LABEL: gt_v8i16:624; SSE42:       # %bb.0:625; SSE42-NEXT:    pminuw %xmm0, %xmm1626; SSE42-NEXT:    pcmpeqw %xmm1, %xmm0627; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1628; SSE42-NEXT:    pxor %xmm1, %xmm0629; SSE42-NEXT:    retq630;631; AVX1-LABEL: gt_v8i16:632; AVX1:       # %bb.0:633; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm1634; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0635; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1636; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0637; AVX1-NEXT:    retq638;639; AVX2-LABEL: gt_v8i16:640; AVX2:       # %bb.0:641; AVX2-NEXT:    vpminuw %xmm1, %xmm0, %xmm1642; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0643; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1644; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0645; AVX2-NEXT:    retq646;647; XOP-LABEL: gt_v8i16:648; XOP:       # %bb.0:649; XOP-NEXT:    vpcomgtuw %xmm1, %xmm0, %xmm0650; XOP-NEXT:    retq651;652; AVX512-LABEL: gt_v8i16:653; AVX512:       # %bb.0:654; AVX512-NEXT:    vpminuw %xmm1, %xmm0, %xmm1655; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0656; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0657; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0658; AVX512-NEXT:    vzeroupper659; AVX512-NEXT:    retq660  %1 = icmp ugt <8 x i16> %a, %b661  %2 = sext <8 x i1> %1 to <8 x i16>662  ret <8 x i16> %2663}664 665define <16 x i8> @gt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {666; SSE-LABEL: gt_v16i8:667; SSE:       # %bb.0:668; SSE-NEXT:    pminub %xmm0, %xmm1669; SSE-NEXT:    pcmpeqb %xmm1, %xmm0670; SSE-NEXT:    pcmpeqd %xmm1, %xmm1671; SSE-NEXT:    pxor %xmm1, %xmm0672; SSE-NEXT:    retq673;674; AVX1-LABEL: gt_v16i8:675; AVX1:       # %bb.0:676; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm1677; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0678; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1679; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0680; AVX1-NEXT:    retq681;682; AVX2-LABEL: gt_v16i8:683; AVX2:       # %bb.0:684; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm1685; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0686; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1687; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0688; AVX2-NEXT:    retq689;690; XOP-LABEL: gt_v16i8:691; XOP:       # %bb.0:692; XOP-NEXT:    vpcomgtub %xmm1, %xmm0, %xmm0693; XOP-NEXT:    retq694;695; AVX512-LABEL: gt_v16i8:696; AVX512:       # %bb.0:697; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm1698; AVX512-NEXT:    vpcmpeqb %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 ugt <16 x i8> %a, %b704  %2 = sext <16 x i1> %1 to <16 x i8>705  ret <16 x i8> %2706}707 708;709; Less Than Or Equal710;711 712define <2 x i64> @le_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {713; SSE2-LABEL: le_v2i64:714; SSE2:       # %bb.0:715; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]716; SSE2-NEXT:    pxor %xmm2, %xmm1717; SSE2-NEXT:    pxor %xmm2, %xmm0718; SSE2-NEXT:    movdqa %xmm0, %xmm2719; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2720; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]721; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0722; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]723; SSE2-NEXT:    pand %xmm3, %xmm0724; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]725; SSE2-NEXT:    por %xmm0, %xmm1726; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0727; SSE2-NEXT:    pxor %xmm1, %xmm0728; SSE2-NEXT:    retq729;730; SSE41-LABEL: le_v2i64:731; SSE41:       # %bb.0:732; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]733; SSE41-NEXT:    pxor %xmm2, %xmm1734; SSE41-NEXT:    pxor %xmm2, %xmm0735; SSE41-NEXT:    movdqa %xmm0, %xmm2736; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2737; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]738; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0739; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]740; SSE41-NEXT:    pand %xmm3, %xmm0741; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]742; SSE41-NEXT:    por %xmm0, %xmm1743; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0744; SSE41-NEXT:    pxor %xmm1, %xmm0745; SSE41-NEXT:    retq746;747; SSE42-LABEL: le_v2i64:748; SSE42:       # %bb.0:749; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]750; SSE42-NEXT:    pxor %xmm2, %xmm1751; SSE42-NEXT:    pxor %xmm2, %xmm0752; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0753; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1754; SSE42-NEXT:    pxor %xmm1, %xmm0755; SSE42-NEXT:    retq756;757; AVX1-LABEL: le_v2i64:758; AVX1:       # %bb.0:759; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]760; AVX1-NEXT:    # xmm2 = mem[0,0]761; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1762; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0763; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0764; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1765; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0766; AVX1-NEXT:    retq767;768; AVX2-LABEL: le_v2i64:769; AVX2:       # %bb.0:770; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]771; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1772; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0773; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0774; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1775; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0776; AVX2-NEXT:    retq777;778; XOP-LABEL: le_v2i64:779; XOP:       # %bb.0:780; XOP-NEXT:    vpcomleuq %xmm1, %xmm0, %xmm0781; XOP-NEXT:    retq782;783; AVX512-LABEL: le_v2i64:784; AVX512:       # %bb.0:785; AVX512-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1786; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0787; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm1788; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0789; AVX512-NEXT:    vzeroupper790; AVX512-NEXT:    retq791  %1 = icmp ule <2 x i64> %a, %b792  %2 = sext <2 x i1> %1 to <2 x i64>793  ret <2 x i64> %2794}795 796define <4 x i32> @le_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {797; SSE2-LABEL: le_v4i32:798; SSE2:       # %bb.0:799; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]800; SSE2-NEXT:    pxor %xmm2, %xmm1801; SSE2-NEXT:    pxor %xmm2, %xmm0802; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0803; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1804; SSE2-NEXT:    pxor %xmm1, %xmm0805; SSE2-NEXT:    retq806;807; SSE41-LABEL: le_v4i32:808; SSE41:       # %bb.0:809; SSE41-NEXT:    pminud %xmm0, %xmm1810; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0811; SSE41-NEXT:    retq812;813; SSE42-LABEL: le_v4i32:814; SSE42:       # %bb.0:815; SSE42-NEXT:    pminud %xmm0, %xmm1816; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0817; SSE42-NEXT:    retq818;819; AVX-LABEL: le_v4i32:820; AVX:       # %bb.0:821; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm1822; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0823; AVX-NEXT:    retq824;825; XOP-LABEL: le_v4i32:826; XOP:       # %bb.0:827; XOP-NEXT:    vpcomleud %xmm1, %xmm0, %xmm0828; XOP-NEXT:    retq829  %1 = icmp ule <4 x i32> %a, %b830  %2 = sext <4 x i1> %1 to <4 x i32>831  ret <4 x i32> %2832}833 834define <8 x i16> @le_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {835; SSE2-LABEL: le_v8i16:836; SSE2:       # %bb.0:837; SSE2-NEXT:    psubusw %xmm1, %xmm0838; SSE2-NEXT:    pxor %xmm1, %xmm1839; SSE2-NEXT:    pcmpeqw %xmm1, %xmm0840; SSE2-NEXT:    retq841;842; SSE41-LABEL: le_v8i16:843; SSE41:       # %bb.0:844; SSE41-NEXT:    pminuw %xmm0, %xmm1845; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0846; SSE41-NEXT:    retq847;848; SSE42-LABEL: le_v8i16:849; SSE42:       # %bb.0:850; SSE42-NEXT:    pminuw %xmm0, %xmm1851; SSE42-NEXT:    pcmpeqw %xmm1, %xmm0852; SSE42-NEXT:    retq853;854; AVX-LABEL: le_v8i16:855; AVX:       # %bb.0:856; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm1857; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0858; AVX-NEXT:    retq859;860; XOP-LABEL: le_v8i16:861; XOP:       # %bb.0:862; XOP-NEXT:    vpcomleuw %xmm1, %xmm0, %xmm0863; XOP-NEXT:    retq864  %1 = icmp ule <8 x i16> %a, %b865  %2 = sext <8 x i1> %1 to <8 x i16>866  ret <8 x i16> %2867}868 869define <16 x i8> @le_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {870; SSE-LABEL: le_v16i8:871; SSE:       # %bb.0:872; SSE-NEXT:    pminub %xmm0, %xmm1873; SSE-NEXT:    pcmpeqb %xmm1, %xmm0874; SSE-NEXT:    retq875;876; AVX-LABEL: le_v16i8:877; AVX:       # %bb.0:878; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm1879; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0880; AVX-NEXT:    retq881;882; XOP-LABEL: le_v16i8:883; XOP:       # %bb.0:884; XOP-NEXT:    vpcomleub %xmm1, %xmm0, %xmm0885; XOP-NEXT:    retq886  %1 = icmp ule <16 x i8> %a, %b887  %2 = sext <16 x i1> %1 to <16 x i8>888  ret <16 x i8> %2889}890 891;892; Less Than893;894 895define <2 x i64> @lt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {896; SSE2-LABEL: lt_v2i64:897; SSE2:       # %bb.0:898; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]899; SSE2-NEXT:    pxor %xmm2, %xmm0900; SSE2-NEXT:    pxor %xmm2, %xmm1901; SSE2-NEXT:    movdqa %xmm1, %xmm2902; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2903; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]904; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1905; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]906; SSE2-NEXT:    pand %xmm3, %xmm1907; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]908; SSE2-NEXT:    por %xmm1, %xmm0909; SSE2-NEXT:    retq910;911; SSE41-LABEL: lt_v2i64:912; SSE41:       # %bb.0:913; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]914; SSE41-NEXT:    pxor %xmm2, %xmm0915; SSE41-NEXT:    pxor %xmm2, %xmm1916; SSE41-NEXT:    movdqa %xmm1, %xmm2917; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2918; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]919; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1920; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]921; SSE41-NEXT:    pand %xmm3, %xmm1922; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]923; SSE41-NEXT:    por %xmm1, %xmm0924; SSE41-NEXT:    retq925;926; SSE42-LABEL: lt_v2i64:927; SSE42:       # %bb.0:928; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]929; SSE42-NEXT:    pxor %xmm2, %xmm0930; SSE42-NEXT:    pxor %xmm1, %xmm2931; SSE42-NEXT:    pcmpgtq %xmm0, %xmm2932; SSE42-NEXT:    movdqa %xmm2, %xmm0933; SSE42-NEXT:    retq934;935; AVX1-LABEL: lt_v2i64:936; AVX1:       # %bb.0:937; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]938; AVX1-NEXT:    # xmm2 = mem[0,0]939; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0940; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1941; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0942; AVX1-NEXT:    retq943;944; AVX2-LABEL: lt_v2i64:945; AVX2:       # %bb.0:946; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]947; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0948; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1949; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0950; AVX2-NEXT:    retq951;952; XOP-LABEL: lt_v2i64:953; XOP:       # %bb.0:954; XOP-NEXT:    vpcomltuq %xmm1, %xmm0, %xmm0955; XOP-NEXT:    retq956;957; AVX512-LABEL: lt_v2i64:958; AVX512:       # %bb.0:959; AVX512-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1960; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0961; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm1962; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0963; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0964; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0965; AVX512-NEXT:    vzeroupper966; AVX512-NEXT:    retq967  %1 = icmp ult <2 x i64> %a, %b968  %2 = sext <2 x i1> %1 to <2 x i64>969  ret <2 x i64> %2970}971 972define <4 x i32> @lt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {973; SSE2-LABEL: lt_v4i32:974; SSE2:       # %bb.0:975; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]976; SSE2-NEXT:    pxor %xmm2, %xmm0977; SSE2-NEXT:    pxor %xmm1, %xmm2978; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2979; SSE2-NEXT:    movdqa %xmm2, %xmm0980; SSE2-NEXT:    retq981;982; SSE41-LABEL: lt_v4i32:983; SSE41:       # %bb.0:984; SSE41-NEXT:    pmaxud %xmm0, %xmm1985; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0986; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1987; SSE41-NEXT:    pxor %xmm1, %xmm0988; SSE41-NEXT:    retq989;990; SSE42-LABEL: lt_v4i32:991; SSE42:       # %bb.0:992; SSE42-NEXT:    pmaxud %xmm0, %xmm1993; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0994; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1995; SSE42-NEXT:    pxor %xmm1, %xmm0996; SSE42-NEXT:    retq997;998; AVX1-LABEL: lt_v4i32:999; AVX1:       # %bb.0:1000; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm11001; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm01002; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11003; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm01004; AVX1-NEXT:    retq1005;1006; AVX2-LABEL: lt_v4i32:1007; AVX2:       # %bb.0:1008; AVX2-NEXT:    vpmaxud %xmm1, %xmm0, %xmm11009; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm01010; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11011; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm01012; AVX2-NEXT:    retq1013;1014; XOP-LABEL: lt_v4i32:1015; XOP:       # %bb.0:1016; XOP-NEXT:    vpcomltud %xmm1, %xmm0, %xmm01017; XOP-NEXT:    retq1018;1019; AVX512-LABEL: lt_v4i32:1020; AVX512:       # %bb.0:1021; AVX512-NEXT:    vpmaxud %xmm1, %xmm0, %xmm11022; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm01023; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm01024; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01025; AVX512-NEXT:    vzeroupper1026; AVX512-NEXT:    retq1027  %1 = icmp ult <4 x i32> %a, %b1028  %2 = sext <4 x i1> %1 to <4 x i32>1029  ret <4 x i32> %21030}1031 1032define <8 x i16> @lt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {1033; SSE2-LABEL: lt_v8i16:1034; SSE2:       # %bb.0:1035; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]1036; SSE2-NEXT:    pxor %xmm2, %xmm01037; SSE2-NEXT:    pxor %xmm1, %xmm21038; SSE2-NEXT:    pcmpgtw %xmm0, %xmm21039; SSE2-NEXT:    movdqa %xmm2, %xmm01040; SSE2-NEXT:    retq1041;1042; SSE41-LABEL: lt_v8i16:1043; SSE41:       # %bb.0:1044; SSE41-NEXT:    pmaxuw %xmm0, %xmm11045; SSE41-NEXT:    pcmpeqw %xmm1, %xmm01046; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11047; SSE41-NEXT:    pxor %xmm1, %xmm01048; SSE41-NEXT:    retq1049;1050; SSE42-LABEL: lt_v8i16:1051; SSE42:       # %bb.0:1052; SSE42-NEXT:    pmaxuw %xmm0, %xmm11053; SSE42-NEXT:    pcmpeqw %xmm1, %xmm01054; SSE42-NEXT:    pcmpeqd %xmm1, %xmm11055; SSE42-NEXT:    pxor %xmm1, %xmm01056; SSE42-NEXT:    retq1057;1058; AVX1-LABEL: lt_v8i16:1059; AVX1:       # %bb.0:1060; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm11061; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm01062; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11063; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm01064; AVX1-NEXT:    retq1065;1066; AVX2-LABEL: lt_v8i16:1067; AVX2:       # %bb.0:1068; AVX2-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm11069; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm01070; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11071; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm01072; AVX2-NEXT:    retq1073;1074; XOP-LABEL: lt_v8i16:1075; XOP:       # %bb.0:1076; XOP-NEXT:    vpcomltuw %xmm1, %xmm0, %xmm01077; XOP-NEXT:    retq1078;1079; AVX512-LABEL: lt_v8i16:1080; AVX512:       # %bb.0:1081; AVX512-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm11082; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm01083; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm01084; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01085; AVX512-NEXT:    vzeroupper1086; AVX512-NEXT:    retq1087  %1 = icmp ult <8 x i16> %a, %b1088  %2 = sext <8 x i1> %1 to <8 x i16>1089  ret <8 x i16> %21090}1091 1092define <16 x i8> @lt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {1093; SSE-LABEL: lt_v16i8:1094; SSE:       # %bb.0:1095; SSE-NEXT:    pmaxub %xmm0, %xmm11096; SSE-NEXT:    pcmpeqb %xmm1, %xmm01097; SSE-NEXT:    pcmpeqd %xmm1, %xmm11098; SSE-NEXT:    pxor %xmm1, %xmm01099; SSE-NEXT:    retq1100;1101; AVX1-LABEL: lt_v16i8:1102; AVX1:       # %bb.0:1103; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm11104; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm01105; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11106; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm01107; AVX1-NEXT:    retq1108;1109; AVX2-LABEL: lt_v16i8:1110; AVX2:       # %bb.0:1111; AVX2-NEXT:    vpmaxub %xmm1, %xmm0, %xmm11112; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm01113; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11114; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm01115; AVX2-NEXT:    retq1116;1117; XOP-LABEL: lt_v16i8:1118; XOP:       # %bb.0:1119; XOP-NEXT:    vpcomltub %xmm1, %xmm0, %xmm01120; XOP-NEXT:    retq1121;1122; AVX512-LABEL: lt_v16i8:1123; AVX512:       # %bb.0:1124; AVX512-NEXT:    vpmaxub %xmm1, %xmm0, %xmm11125; AVX512-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm01126; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm01127; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01128; AVX512-NEXT:    vzeroupper1129; AVX512-NEXT:    retq1130  %1 = icmp ult <16 x i8> %a, %b1131  %2 = sext <16 x i1> %1 to <16 x i8>1132  ret <16 x i8> %21133}1134