2297 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=+avx512f | FileCheck %s --check-prefixes=AVX,AVX5128; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefixes=AVX,AVX5129 10;11; Unsigned Maximum (GT)12;13 14define <2 x i64> @max_gt_v2i64(<2 x i64> %a, <2 x i64> %b) {15; SSE2-LABEL: max_gt_v2i64:16; SSE2: # %bb.0:17; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]18; SSE2-NEXT: movdqa %xmm1, %xmm319; SSE2-NEXT: pxor %xmm2, %xmm320; SSE2-NEXT: pxor %xmm0, %xmm221; SSE2-NEXT: movdqa %xmm2, %xmm422; SSE2-NEXT: pcmpgtd %xmm3, %xmm423; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]24; SSE2-NEXT: pcmpeqd %xmm3, %xmm225; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]26; SSE2-NEXT: pand %xmm5, %xmm227; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]28; SSE2-NEXT: por %xmm2, %xmm329; SSE2-NEXT: pand %xmm3, %xmm030; SSE2-NEXT: pandn %xmm1, %xmm331; SSE2-NEXT: por %xmm3, %xmm032; SSE2-NEXT: retq33;34; SSE41-LABEL: max_gt_v2i64:35; SSE41: # %bb.0:36; SSE41-NEXT: movdqa %xmm0, %xmm237; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]38; SSE41-NEXT: movdqa %xmm1, %xmm039; SSE41-NEXT: pxor %xmm3, %xmm040; SSE41-NEXT: pxor %xmm2, %xmm341; SSE41-NEXT: movdqa %xmm3, %xmm442; SSE41-NEXT: pcmpeqd %xmm0, %xmm443; SSE41-NEXT: pcmpgtd %xmm0, %xmm344; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]45; SSE41-NEXT: pand %xmm4, %xmm046; SSE41-NEXT: por %xmm3, %xmm047; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm148; SSE41-NEXT: movapd %xmm1, %xmm049; SSE41-NEXT: retq50;51; SSE42-LABEL: max_gt_v2i64:52; SSE42: # %bb.0:53; SSE42-NEXT: movdqa %xmm0, %xmm254; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]55; SSE42-NEXT: movdqa %xmm1, %xmm356; SSE42-NEXT: pxor %xmm0, %xmm357; SSE42-NEXT: pxor %xmm2, %xmm058; SSE42-NEXT: pcmpgtq %xmm3, %xmm059; SSE42-NEXT: blendvpd %xmm0, %xmm2, %xmm160; SSE42-NEXT: movapd %xmm1, %xmm061; SSE42-NEXT: retq62;63; AVX1-LABEL: max_gt_v2i64:64; AVX1: # %bb.0:65; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]66; AVX1-NEXT: # xmm2 = mem[0,0]67; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm368; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm269; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm270; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm071; AVX1-NEXT: retq72;73; AVX2-LABEL: max_gt_v2i64:74; AVX2: # %bb.0:75; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]76; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm377; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm278; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm279; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm080; AVX2-NEXT: retq81;82; AVX512-LABEL: max_gt_v2i64:83; AVX512: # %bb.0:84; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm185; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm086; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm087; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm088; AVX512-NEXT: vzeroupper89; AVX512-NEXT: retq90 %1 = icmp ugt <2 x i64> %a, %b91 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b92 ret <2 x i64> %293}94 95define <4 x i64> @max_gt_v4i64(<4 x i64> %a, <4 x i64> %b) {96; SSE2-LABEL: max_gt_v4i64:97; SSE2: # %bb.0:98; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]99; SSE2-NEXT: movdqa %xmm2, %xmm5100; SSE2-NEXT: pxor %xmm4, %xmm5101; SSE2-NEXT: movdqa %xmm0, %xmm6102; SSE2-NEXT: pxor %xmm4, %xmm6103; SSE2-NEXT: movdqa %xmm6, %xmm7104; SSE2-NEXT: pcmpgtd %xmm5, %xmm7105; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]106; SSE2-NEXT: pcmpeqd %xmm5, %xmm6107; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]108; SSE2-NEXT: pand %xmm8, %xmm5109; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]110; SSE2-NEXT: por %xmm5, %xmm6111; SSE2-NEXT: pand %xmm6, %xmm0112; SSE2-NEXT: pandn %xmm2, %xmm6113; SSE2-NEXT: por %xmm6, %xmm0114; SSE2-NEXT: movdqa %xmm3, %xmm2115; SSE2-NEXT: pxor %xmm4, %xmm2116; SSE2-NEXT: pxor %xmm1, %xmm4117; SSE2-NEXT: movdqa %xmm4, %xmm5118; SSE2-NEXT: pcmpgtd %xmm2, %xmm5119; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]120; SSE2-NEXT: pcmpeqd %xmm2, %xmm4121; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]122; SSE2-NEXT: pand %xmm6, %xmm2123; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]124; SSE2-NEXT: por %xmm2, %xmm4125; SSE2-NEXT: pand %xmm4, %xmm1126; SSE2-NEXT: pandn %xmm3, %xmm4127; SSE2-NEXT: por %xmm4, %xmm1128; SSE2-NEXT: retq129;130; SSE41-LABEL: max_gt_v4i64:131; SSE41: # %bb.0:132; SSE41-NEXT: movdqa %xmm0, %xmm4133; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]134; SSE41-NEXT: movdqa %xmm2, %xmm0135; SSE41-NEXT: pxor %xmm5, %xmm0136; SSE41-NEXT: movdqa %xmm4, %xmm6137; SSE41-NEXT: pxor %xmm5, %xmm6138; SSE41-NEXT: movdqa %xmm6, %xmm7139; SSE41-NEXT: pcmpeqd %xmm0, %xmm7140; SSE41-NEXT: pcmpgtd %xmm0, %xmm6141; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]142; SSE41-NEXT: pand %xmm7, %xmm0143; SSE41-NEXT: por %xmm6, %xmm0144; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2145; SSE41-NEXT: movdqa %xmm3, %xmm0146; SSE41-NEXT: pxor %xmm5, %xmm0147; SSE41-NEXT: pxor %xmm1, %xmm5148; SSE41-NEXT: movdqa %xmm5, %xmm4149; SSE41-NEXT: pcmpeqd %xmm0, %xmm4150; SSE41-NEXT: pcmpgtd %xmm0, %xmm5151; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]152; SSE41-NEXT: pand %xmm4, %xmm0153; SSE41-NEXT: por %xmm5, %xmm0154; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm3155; SSE41-NEXT: movapd %xmm2, %xmm0156; SSE41-NEXT: movapd %xmm3, %xmm1157; SSE41-NEXT: retq158;159; SSE42-LABEL: max_gt_v4i64:160; SSE42: # %bb.0:161; SSE42-NEXT: movdqa %xmm0, %xmm4162; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]163; SSE42-NEXT: movdqa %xmm2, %xmm6164; SSE42-NEXT: pxor %xmm5, %xmm6165; SSE42-NEXT: pxor %xmm5, %xmm0166; SSE42-NEXT: pcmpgtq %xmm6, %xmm0167; SSE42-NEXT: blendvpd %xmm0, %xmm4, %xmm2168; SSE42-NEXT: movdqa %xmm3, %xmm0169; SSE42-NEXT: pxor %xmm5, %xmm0170; SSE42-NEXT: pxor %xmm1, %xmm5171; SSE42-NEXT: pcmpgtq %xmm0, %xmm5172; SSE42-NEXT: movdqa %xmm5, %xmm0173; SSE42-NEXT: blendvpd %xmm0, %xmm1, %xmm3174; SSE42-NEXT: movapd %xmm2, %xmm0175; SSE42-NEXT: movapd %xmm3, %xmm1176; SSE42-NEXT: retq177;178; AVX1-LABEL: max_gt_v4i64:179; AVX1: # %bb.0:180; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2181; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]182; AVX1-NEXT: # xmm3 = mem[0,0]183; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2184; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4185; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4186; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2187; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4188; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3189; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3190; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2191; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0192; AVX1-NEXT: retq193;194; AVX2-LABEL: max_gt_v4i64:195; AVX2: # %bb.0:196; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]197; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3198; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2199; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2200; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0201; AVX2-NEXT: retq202;203; AVX512-LABEL: max_gt_v4i64:204; AVX512: # %bb.0:205; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1206; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0207; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0208; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0209; AVX512-NEXT: retq210 %1 = icmp ugt <4 x i64> %a, %b211 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b212 ret <4 x i64> %2213}214 215define <4 x i32> @max_gt_v4i32(<4 x i32> %a, <4 x i32> %b) {216; SSE2-LABEL: max_gt_v4i32:217; SSE2: # %bb.0:218; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]219; SSE2-NEXT: movdqa %xmm1, %xmm3220; SSE2-NEXT: pxor %xmm2, %xmm3221; SSE2-NEXT: pxor %xmm0, %xmm2222; SSE2-NEXT: pcmpgtd %xmm3, %xmm2223; SSE2-NEXT: pand %xmm2, %xmm0224; SSE2-NEXT: pandn %xmm1, %xmm2225; SSE2-NEXT: por %xmm2, %xmm0226; SSE2-NEXT: retq227;228; SSE41-LABEL: max_gt_v4i32:229; SSE41: # %bb.0:230; SSE41-NEXT: pmaxud %xmm1, %xmm0231; SSE41-NEXT: retq232;233; SSE42-LABEL: max_gt_v4i32:234; SSE42: # %bb.0:235; SSE42-NEXT: pmaxud %xmm1, %xmm0236; SSE42-NEXT: retq237;238; AVX-LABEL: max_gt_v4i32:239; AVX: # %bb.0:240; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0241; AVX-NEXT: retq242 %1 = icmp ugt <4 x i32> %a, %b243 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b244 ret <4 x i32> %2245}246 247define <8 x i32> @max_gt_v8i32(<8 x i32> %a, <8 x i32> %b) {248; SSE2-LABEL: max_gt_v8i32:249; SSE2: # %bb.0:250; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]251; SSE2-NEXT: movdqa %xmm2, %xmm5252; SSE2-NEXT: pxor %xmm4, %xmm5253; SSE2-NEXT: movdqa %xmm0, %xmm6254; SSE2-NEXT: pxor %xmm4, %xmm6255; SSE2-NEXT: pcmpgtd %xmm5, %xmm6256; SSE2-NEXT: pand %xmm6, %xmm0257; SSE2-NEXT: pandn %xmm2, %xmm6258; SSE2-NEXT: por %xmm6, %xmm0259; SSE2-NEXT: movdqa %xmm3, %xmm2260; SSE2-NEXT: pxor %xmm4, %xmm2261; SSE2-NEXT: pxor %xmm1, %xmm4262; SSE2-NEXT: pcmpgtd %xmm2, %xmm4263; SSE2-NEXT: pand %xmm4, %xmm1264; SSE2-NEXT: pandn %xmm3, %xmm4265; SSE2-NEXT: por %xmm4, %xmm1266; SSE2-NEXT: retq267;268; SSE41-LABEL: max_gt_v8i32:269; SSE41: # %bb.0:270; SSE41-NEXT: pmaxud %xmm2, %xmm0271; SSE41-NEXT: pmaxud %xmm3, %xmm1272; SSE41-NEXT: retq273;274; SSE42-LABEL: max_gt_v8i32:275; SSE42: # %bb.0:276; SSE42-NEXT: pmaxud %xmm2, %xmm0277; SSE42-NEXT: pmaxud %xmm3, %xmm1278; SSE42-NEXT: retq279;280; AVX1-LABEL: max_gt_v8i32:281; AVX1: # %bb.0:282; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2283; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3284; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2285; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0286; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0287; AVX1-NEXT: retq288;289; AVX2-LABEL: max_gt_v8i32:290; AVX2: # %bb.0:291; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0292; AVX2-NEXT: retq293;294; AVX512-LABEL: max_gt_v8i32:295; AVX512: # %bb.0:296; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0297; AVX512-NEXT: retq298 %1 = icmp ugt <8 x i32> %a, %b299 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b300 ret <8 x i32> %2301}302 303define <8 x i16> @max_gt_v8i16(<8 x i16> %a, <8 x i16> %b) {304; SSE2-LABEL: max_gt_v8i16:305; SSE2: # %bb.0:306; SSE2-NEXT: psubusw %xmm0, %xmm1307; SSE2-NEXT: paddw %xmm1, %xmm0308; SSE2-NEXT: retq309;310; SSE41-LABEL: max_gt_v8i16:311; SSE41: # %bb.0:312; SSE41-NEXT: pmaxuw %xmm1, %xmm0313; SSE41-NEXT: retq314;315; SSE42-LABEL: max_gt_v8i16:316; SSE42: # %bb.0:317; SSE42-NEXT: pmaxuw %xmm1, %xmm0318; SSE42-NEXT: retq319;320; AVX-LABEL: max_gt_v8i16:321; AVX: # %bb.0:322; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0323; AVX-NEXT: retq324 %1 = icmp ugt <8 x i16> %a, %b325 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b326 ret <8 x i16> %2327}328 329define <16 x i16> @max_gt_v16i16(<16 x i16> %a, <16 x i16> %b) {330; SSE2-LABEL: max_gt_v16i16:331; SSE2: # %bb.0:332; SSE2-NEXT: psubusw %xmm0, %xmm2333; SSE2-NEXT: paddw %xmm2, %xmm0334; SSE2-NEXT: psubusw %xmm1, %xmm3335; SSE2-NEXT: paddw %xmm3, %xmm1336; SSE2-NEXT: retq337;338; SSE41-LABEL: max_gt_v16i16:339; SSE41: # %bb.0:340; SSE41-NEXT: pmaxuw %xmm2, %xmm0341; SSE41-NEXT: pmaxuw %xmm3, %xmm1342; SSE41-NEXT: retq343;344; SSE42-LABEL: max_gt_v16i16:345; SSE42: # %bb.0:346; SSE42-NEXT: pmaxuw %xmm2, %xmm0347; SSE42-NEXT: pmaxuw %xmm3, %xmm1348; SSE42-NEXT: retq349;350; AVX1-LABEL: max_gt_v16i16:351; AVX1: # %bb.0:352; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2353; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3354; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2355; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0356; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0357; AVX1-NEXT: retq358;359; AVX2-LABEL: max_gt_v16i16:360; AVX2: # %bb.0:361; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0362; AVX2-NEXT: retq363;364; AVX512-LABEL: max_gt_v16i16:365; AVX512: # %bb.0:366; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0367; AVX512-NEXT: retq368 %1 = icmp ugt <16 x i16> %a, %b369 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b370 ret <16 x i16> %2371}372 373define <16 x i8> @max_gt_v16i8(<16 x i8> %a, <16 x i8> %b) {374; SSE-LABEL: max_gt_v16i8:375; SSE: # %bb.0:376; SSE-NEXT: pmaxub %xmm1, %xmm0377; SSE-NEXT: retq378;379; AVX-LABEL: max_gt_v16i8:380; AVX: # %bb.0:381; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0382; AVX-NEXT: retq383 %1 = icmp ugt <16 x i8> %a, %b384 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b385 ret <16 x i8> %2386}387 388define <32 x i8> @max_gt_v32i8(<32 x i8> %a, <32 x i8> %b) {389; SSE-LABEL: max_gt_v32i8:390; SSE: # %bb.0:391; SSE-NEXT: pmaxub %xmm2, %xmm0392; SSE-NEXT: pmaxub %xmm3, %xmm1393; SSE-NEXT: retq394;395; AVX1-LABEL: max_gt_v32i8:396; AVX1: # %bb.0:397; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2398; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3399; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2400; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0401; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0402; AVX1-NEXT: retq403;404; AVX2-LABEL: max_gt_v32i8:405; AVX2: # %bb.0:406; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0407; AVX2-NEXT: retq408;409; AVX512-LABEL: max_gt_v32i8:410; AVX512: # %bb.0:411; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0412; AVX512-NEXT: retq413 %1 = icmp ugt <32 x i8> %a, %b414 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b415 ret <32 x i8> %2416}417 418;419; Unsigned Maximum (GE)420;421 422define <2 x i64> @max_ge_v2i64(<2 x i64> %a, <2 x i64> %b) {423; SSE2-LABEL: max_ge_v2i64:424; SSE2: # %bb.0:425; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]426; SSE2-NEXT: movdqa %xmm1, %xmm3427; SSE2-NEXT: pxor %xmm2, %xmm3428; SSE2-NEXT: pxor %xmm0, %xmm2429; SSE2-NEXT: movdqa %xmm2, %xmm4430; SSE2-NEXT: pcmpgtd %xmm3, %xmm4431; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]432; SSE2-NEXT: pcmpeqd %xmm3, %xmm2433; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]434; SSE2-NEXT: pand %xmm5, %xmm2435; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]436; SSE2-NEXT: por %xmm2, %xmm3437; SSE2-NEXT: pand %xmm3, %xmm0438; SSE2-NEXT: pandn %xmm1, %xmm3439; SSE2-NEXT: por %xmm3, %xmm0440; SSE2-NEXT: retq441;442; SSE41-LABEL: max_ge_v2i64:443; SSE41: # %bb.0:444; SSE41-NEXT: movdqa %xmm0, %xmm2445; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]446; SSE41-NEXT: movdqa %xmm1, %xmm0447; SSE41-NEXT: pxor %xmm3, %xmm0448; SSE41-NEXT: pxor %xmm2, %xmm3449; SSE41-NEXT: movdqa %xmm3, %xmm4450; SSE41-NEXT: pcmpeqd %xmm0, %xmm4451; SSE41-NEXT: pcmpgtd %xmm0, %xmm3452; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]453; SSE41-NEXT: pand %xmm4, %xmm0454; SSE41-NEXT: por %xmm3, %xmm0455; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm1456; SSE41-NEXT: movapd %xmm1, %xmm0457; SSE41-NEXT: retq458;459; SSE42-LABEL: max_ge_v2i64:460; SSE42: # %bb.0:461; SSE42-NEXT: movdqa %xmm0, %xmm2462; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]463; SSE42-NEXT: movdqa %xmm1, %xmm3464; SSE42-NEXT: pxor %xmm0, %xmm3465; SSE42-NEXT: pxor %xmm2, %xmm0466; SSE42-NEXT: pcmpgtq %xmm3, %xmm0467; SSE42-NEXT: blendvpd %xmm0, %xmm2, %xmm1468; SSE42-NEXT: movapd %xmm1, %xmm0469; SSE42-NEXT: retq470;471; AVX1-LABEL: max_ge_v2i64:472; AVX1: # %bb.0:473; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]474; AVX1-NEXT: # xmm2 = mem[0,0]475; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3476; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2477; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2478; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0479; AVX1-NEXT: retq480;481; AVX2-LABEL: max_ge_v2i64:482; AVX2: # %bb.0:483; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]484; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3485; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2486; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2487; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0488; AVX2-NEXT: retq489;490; AVX512-LABEL: max_ge_v2i64:491; AVX512: # %bb.0:492; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1493; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0494; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0495; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0496; AVX512-NEXT: vzeroupper497; AVX512-NEXT: retq498 %1 = icmp uge <2 x i64> %a, %b499 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b500 ret <2 x i64> %2501}502 503define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) {504; SSE2-LABEL: max_ge_v4i64:505; SSE2: # %bb.0:506; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]507; SSE2-NEXT: movdqa %xmm2, %xmm5508; SSE2-NEXT: pxor %xmm4, %xmm5509; SSE2-NEXT: movdqa %xmm0, %xmm6510; SSE2-NEXT: pxor %xmm4, %xmm6511; SSE2-NEXT: movdqa %xmm6, %xmm7512; SSE2-NEXT: pcmpgtd %xmm5, %xmm7513; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]514; SSE2-NEXT: pcmpeqd %xmm5, %xmm6515; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]516; SSE2-NEXT: pand %xmm8, %xmm5517; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]518; SSE2-NEXT: por %xmm5, %xmm6519; SSE2-NEXT: pand %xmm6, %xmm0520; SSE2-NEXT: pandn %xmm2, %xmm6521; SSE2-NEXT: por %xmm6, %xmm0522; SSE2-NEXT: movdqa %xmm3, %xmm2523; SSE2-NEXT: pxor %xmm4, %xmm2524; SSE2-NEXT: pxor %xmm1, %xmm4525; SSE2-NEXT: movdqa %xmm4, %xmm5526; SSE2-NEXT: pcmpgtd %xmm2, %xmm5527; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]528; SSE2-NEXT: pcmpeqd %xmm2, %xmm4529; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]530; SSE2-NEXT: pand %xmm6, %xmm2531; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]532; SSE2-NEXT: por %xmm2, %xmm4533; SSE2-NEXT: pand %xmm4, %xmm1534; SSE2-NEXT: pandn %xmm3, %xmm4535; SSE2-NEXT: por %xmm4, %xmm1536; SSE2-NEXT: retq537;538; SSE41-LABEL: max_ge_v4i64:539; SSE41: # %bb.0:540; SSE41-NEXT: movdqa %xmm0, %xmm4541; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]542; SSE41-NEXT: movdqa %xmm2, %xmm0543; SSE41-NEXT: pxor %xmm5, %xmm0544; SSE41-NEXT: movdqa %xmm4, %xmm6545; SSE41-NEXT: pxor %xmm5, %xmm6546; SSE41-NEXT: movdqa %xmm6, %xmm7547; SSE41-NEXT: pcmpeqd %xmm0, %xmm7548; SSE41-NEXT: pcmpgtd %xmm0, %xmm6549; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]550; SSE41-NEXT: pand %xmm7, %xmm0551; SSE41-NEXT: por %xmm6, %xmm0552; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2553; SSE41-NEXT: movdqa %xmm3, %xmm0554; SSE41-NEXT: pxor %xmm5, %xmm0555; SSE41-NEXT: pxor %xmm1, %xmm5556; SSE41-NEXT: movdqa %xmm5, %xmm4557; SSE41-NEXT: pcmpeqd %xmm0, %xmm4558; SSE41-NEXT: pcmpgtd %xmm0, %xmm5559; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]560; SSE41-NEXT: pand %xmm4, %xmm0561; SSE41-NEXT: por %xmm5, %xmm0562; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm3563; SSE41-NEXT: movapd %xmm2, %xmm0564; SSE41-NEXT: movapd %xmm3, %xmm1565; SSE41-NEXT: retq566;567; SSE42-LABEL: max_ge_v4i64:568; SSE42: # %bb.0:569; SSE42-NEXT: movdqa %xmm0, %xmm4570; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]571; SSE42-NEXT: movdqa %xmm2, %xmm6572; SSE42-NEXT: pxor %xmm5, %xmm6573; SSE42-NEXT: pxor %xmm5, %xmm0574; SSE42-NEXT: pcmpgtq %xmm6, %xmm0575; SSE42-NEXT: blendvpd %xmm0, %xmm4, %xmm2576; SSE42-NEXT: movdqa %xmm3, %xmm0577; SSE42-NEXT: pxor %xmm5, %xmm0578; SSE42-NEXT: pxor %xmm1, %xmm5579; SSE42-NEXT: pcmpgtq %xmm0, %xmm5580; SSE42-NEXT: movdqa %xmm5, %xmm0581; SSE42-NEXT: blendvpd %xmm0, %xmm1, %xmm3582; SSE42-NEXT: movapd %xmm2, %xmm0583; SSE42-NEXT: movapd %xmm3, %xmm1584; SSE42-NEXT: retq585;586; AVX1-LABEL: max_ge_v4i64:587; AVX1: # %bb.0:588; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2589; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]590; AVX1-NEXT: # xmm3 = mem[0,0]591; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2592; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4593; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4594; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2595; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4596; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3597; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3598; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2599; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0600; AVX1-NEXT: retq601;602; AVX2-LABEL: max_ge_v4i64:603; AVX2: # %bb.0:604; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]605; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3606; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2607; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2608; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0609; AVX2-NEXT: retq610;611; AVX512-LABEL: max_ge_v4i64:612; AVX512: # %bb.0:613; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1614; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0615; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0616; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0617; AVX512-NEXT: retq618 %1 = icmp uge <4 x i64> %a, %b619 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b620 ret <4 x i64> %2621}622 623define <4 x i32> @max_ge_v4i32(<4 x i32> %a, <4 x i32> %b) {624; SSE2-LABEL: max_ge_v4i32:625; SSE2: # %bb.0:626; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]627; SSE2-NEXT: movdqa %xmm1, %xmm3628; SSE2-NEXT: pxor %xmm2, %xmm3629; SSE2-NEXT: pxor %xmm0, %xmm2630; SSE2-NEXT: pcmpgtd %xmm3, %xmm2631; SSE2-NEXT: pand %xmm2, %xmm0632; SSE2-NEXT: pandn %xmm1, %xmm2633; SSE2-NEXT: por %xmm2, %xmm0634; SSE2-NEXT: retq635;636; SSE41-LABEL: max_ge_v4i32:637; SSE41: # %bb.0:638; SSE41-NEXT: pmaxud %xmm1, %xmm0639; SSE41-NEXT: retq640;641; SSE42-LABEL: max_ge_v4i32:642; SSE42: # %bb.0:643; SSE42-NEXT: pmaxud %xmm1, %xmm0644; SSE42-NEXT: retq645;646; AVX-LABEL: max_ge_v4i32:647; AVX: # %bb.0:648; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0649; AVX-NEXT: retq650 %1 = icmp uge <4 x i32> %a, %b651 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b652 ret <4 x i32> %2653}654 655define <8 x i32> @max_ge_v8i32(<8 x i32> %a, <8 x i32> %b) {656; SSE2-LABEL: max_ge_v8i32:657; SSE2: # %bb.0:658; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]659; SSE2-NEXT: movdqa %xmm2, %xmm5660; SSE2-NEXT: pxor %xmm4, %xmm5661; SSE2-NEXT: movdqa %xmm0, %xmm6662; SSE2-NEXT: pxor %xmm4, %xmm6663; SSE2-NEXT: pcmpgtd %xmm5, %xmm6664; SSE2-NEXT: pand %xmm6, %xmm0665; SSE2-NEXT: pandn %xmm2, %xmm6666; SSE2-NEXT: por %xmm6, %xmm0667; SSE2-NEXT: movdqa %xmm3, %xmm2668; SSE2-NEXT: pxor %xmm4, %xmm2669; SSE2-NEXT: pxor %xmm1, %xmm4670; SSE2-NEXT: pcmpgtd %xmm2, %xmm4671; SSE2-NEXT: pand %xmm4, %xmm1672; SSE2-NEXT: pandn %xmm3, %xmm4673; SSE2-NEXT: por %xmm4, %xmm1674; SSE2-NEXT: retq675;676; SSE41-LABEL: max_ge_v8i32:677; SSE41: # %bb.0:678; SSE41-NEXT: pmaxud %xmm2, %xmm0679; SSE41-NEXT: pmaxud %xmm3, %xmm1680; SSE41-NEXT: retq681;682; SSE42-LABEL: max_ge_v8i32:683; SSE42: # %bb.0:684; SSE42-NEXT: pmaxud %xmm2, %xmm0685; SSE42-NEXT: pmaxud %xmm3, %xmm1686; SSE42-NEXT: retq687;688; AVX1-LABEL: max_ge_v8i32:689; AVX1: # %bb.0:690; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2691; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3692; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2693; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0694; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0695; AVX1-NEXT: retq696;697; AVX2-LABEL: max_ge_v8i32:698; AVX2: # %bb.0:699; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0700; AVX2-NEXT: retq701;702; AVX512-LABEL: max_ge_v8i32:703; AVX512: # %bb.0:704; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0705; AVX512-NEXT: retq706 %1 = icmp uge <8 x i32> %a, %b707 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b708 ret <8 x i32> %2709}710 711define <8 x i16> @max_ge_v8i16(<8 x i16> %a, <8 x i16> %b) {712; SSE2-LABEL: max_ge_v8i16:713; SSE2: # %bb.0:714; SSE2-NEXT: psubusw %xmm0, %xmm1715; SSE2-NEXT: paddw %xmm1, %xmm0716; SSE2-NEXT: retq717;718; SSE41-LABEL: max_ge_v8i16:719; SSE41: # %bb.0:720; SSE41-NEXT: pmaxuw %xmm1, %xmm0721; SSE41-NEXT: retq722;723; SSE42-LABEL: max_ge_v8i16:724; SSE42: # %bb.0:725; SSE42-NEXT: pmaxuw %xmm1, %xmm0726; SSE42-NEXT: retq727;728; AVX-LABEL: max_ge_v8i16:729; AVX: # %bb.0:730; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0731; AVX-NEXT: retq732 %1 = icmp uge <8 x i16> %a, %b733 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b734 ret <8 x i16> %2735}736 737define <16 x i16> @max_ge_v16i16(<16 x i16> %a, <16 x i16> %b) {738; SSE2-LABEL: max_ge_v16i16:739; SSE2: # %bb.0:740; SSE2-NEXT: psubusw %xmm0, %xmm2741; SSE2-NEXT: paddw %xmm2, %xmm0742; SSE2-NEXT: psubusw %xmm1, %xmm3743; SSE2-NEXT: paddw %xmm3, %xmm1744; SSE2-NEXT: retq745;746; SSE41-LABEL: max_ge_v16i16:747; SSE41: # %bb.0:748; SSE41-NEXT: pmaxuw %xmm2, %xmm0749; SSE41-NEXT: pmaxuw %xmm3, %xmm1750; SSE41-NEXT: retq751;752; SSE42-LABEL: max_ge_v16i16:753; SSE42: # %bb.0:754; SSE42-NEXT: pmaxuw %xmm2, %xmm0755; SSE42-NEXT: pmaxuw %xmm3, %xmm1756; SSE42-NEXT: retq757;758; AVX1-LABEL: max_ge_v16i16:759; AVX1: # %bb.0:760; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2761; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3762; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2763; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0764; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0765; AVX1-NEXT: retq766;767; AVX2-LABEL: max_ge_v16i16:768; AVX2: # %bb.0:769; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0770; AVX2-NEXT: retq771;772; AVX512-LABEL: max_ge_v16i16:773; AVX512: # %bb.0:774; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0775; AVX512-NEXT: retq776 %1 = icmp uge <16 x i16> %a, %b777 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b778 ret <16 x i16> %2779}780 781define <16 x i8> @max_ge_v16i8(<16 x i8> %a, <16 x i8> %b) {782; SSE-LABEL: max_ge_v16i8:783; SSE: # %bb.0:784; SSE-NEXT: pmaxub %xmm1, %xmm0785; SSE-NEXT: retq786;787; AVX-LABEL: max_ge_v16i8:788; AVX: # %bb.0:789; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0790; AVX-NEXT: retq791 %1 = icmp uge <16 x i8> %a, %b792 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b793 ret <16 x i8> %2794}795 796define <32 x i8> @max_ge_v32i8(<32 x i8> %a, <32 x i8> %b) {797; SSE-LABEL: max_ge_v32i8:798; SSE: # %bb.0:799; SSE-NEXT: pmaxub %xmm2, %xmm0800; SSE-NEXT: pmaxub %xmm3, %xmm1801; SSE-NEXT: retq802;803; AVX1-LABEL: max_ge_v32i8:804; AVX1: # %bb.0:805; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2806; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3807; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2808; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0809; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0810; AVX1-NEXT: retq811;812; AVX2-LABEL: max_ge_v32i8:813; AVX2: # %bb.0:814; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0815; AVX2-NEXT: retq816;817; AVX512-LABEL: max_ge_v32i8:818; AVX512: # %bb.0:819; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0820; AVX512-NEXT: retq821 %1 = icmp uge <32 x i8> %a, %b822 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b823 ret <32 x i8> %2824}825 826;827; Unsigned Minimum (LT)828;829 830define <2 x i64> @min_lt_v2i64(<2 x i64> %a, <2 x i64> %b) {831; SSE2-LABEL: min_lt_v2i64:832; SSE2: # %bb.0:833; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]834; SSE2-NEXT: movdqa %xmm0, %xmm3835; SSE2-NEXT: pxor %xmm2, %xmm3836; SSE2-NEXT: pxor %xmm1, %xmm2837; SSE2-NEXT: movdqa %xmm2, %xmm4838; SSE2-NEXT: pcmpgtd %xmm3, %xmm4839; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]840; SSE2-NEXT: pcmpeqd %xmm3, %xmm2841; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]842; SSE2-NEXT: pand %xmm5, %xmm2843; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]844; SSE2-NEXT: por %xmm2, %xmm3845; SSE2-NEXT: pand %xmm3, %xmm0846; SSE2-NEXT: pandn %xmm1, %xmm3847; SSE2-NEXT: por %xmm3, %xmm0848; SSE2-NEXT: retq849;850; SSE41-LABEL: min_lt_v2i64:851; SSE41: # %bb.0:852; SSE41-NEXT: movdqa %xmm0, %xmm2853; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]854; SSE41-NEXT: pxor %xmm3, %xmm0855; SSE41-NEXT: pxor %xmm1, %xmm3856; SSE41-NEXT: movdqa %xmm3, %xmm4857; SSE41-NEXT: pcmpeqd %xmm0, %xmm4858; SSE41-NEXT: pcmpgtd %xmm0, %xmm3859; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]860; SSE41-NEXT: pand %xmm4, %xmm0861; SSE41-NEXT: por %xmm3, %xmm0862; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm1863; SSE41-NEXT: movapd %xmm1, %xmm0864; SSE41-NEXT: retq865;866; SSE42-LABEL: min_lt_v2i64:867; SSE42: # %bb.0:868; SSE42-NEXT: movdqa %xmm0, %xmm2869; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]870; SSE42-NEXT: movdqa %xmm2, %xmm3871; SSE42-NEXT: pxor %xmm0, %xmm3872; SSE42-NEXT: pxor %xmm1, %xmm0873; SSE42-NEXT: pcmpgtq %xmm3, %xmm0874; SSE42-NEXT: blendvpd %xmm0, %xmm2, %xmm1875; SSE42-NEXT: movapd %xmm1, %xmm0876; SSE42-NEXT: retq877;878; AVX1-LABEL: min_lt_v2i64:879; AVX1: # %bb.0:880; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]881; AVX1-NEXT: # xmm2 = mem[0,0]882; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3883; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2884; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2885; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0886; AVX1-NEXT: retq887;888; AVX2-LABEL: min_lt_v2i64:889; AVX2: # %bb.0:890; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]891; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3892; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2893; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2894; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0895; AVX2-NEXT: retq896;897; AVX512-LABEL: min_lt_v2i64:898; AVX512: # %bb.0:899; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1900; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0901; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0902; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0903; AVX512-NEXT: vzeroupper904; AVX512-NEXT: retq905 %1 = icmp ult <2 x i64> %a, %b906 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b907 ret <2 x i64> %2908}909 910define <4 x i64> @min_lt_v4i64(<4 x i64> %a, <4 x i64> %b) {911; SSE2-LABEL: min_lt_v4i64:912; SSE2: # %bb.0:913; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]914; SSE2-NEXT: movdqa %xmm0, %xmm5915; SSE2-NEXT: pxor %xmm4, %xmm5916; SSE2-NEXT: movdqa %xmm2, %xmm6917; SSE2-NEXT: pxor %xmm4, %xmm6918; SSE2-NEXT: movdqa %xmm6, %xmm7919; SSE2-NEXT: pcmpgtd %xmm5, %xmm7920; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]921; SSE2-NEXT: pcmpeqd %xmm5, %xmm6922; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]923; SSE2-NEXT: pand %xmm8, %xmm5924; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]925; SSE2-NEXT: por %xmm5, %xmm6926; SSE2-NEXT: pand %xmm6, %xmm0927; SSE2-NEXT: pandn %xmm2, %xmm6928; SSE2-NEXT: por %xmm6, %xmm0929; SSE2-NEXT: movdqa %xmm1, %xmm2930; SSE2-NEXT: pxor %xmm4, %xmm2931; SSE2-NEXT: pxor %xmm3, %xmm4932; SSE2-NEXT: movdqa %xmm4, %xmm5933; SSE2-NEXT: pcmpgtd %xmm2, %xmm5934; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]935; SSE2-NEXT: pcmpeqd %xmm2, %xmm4936; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]937; SSE2-NEXT: pand %xmm6, %xmm2938; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]939; SSE2-NEXT: por %xmm2, %xmm4940; SSE2-NEXT: pand %xmm4, %xmm1941; SSE2-NEXT: pandn %xmm3, %xmm4942; SSE2-NEXT: por %xmm4, %xmm1943; SSE2-NEXT: retq944;945; SSE41-LABEL: min_lt_v4i64:946; SSE41: # %bb.0:947; SSE41-NEXT: movdqa %xmm0, %xmm4948; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]949; SSE41-NEXT: pxor %xmm5, %xmm0950; SSE41-NEXT: movdqa %xmm2, %xmm6951; SSE41-NEXT: pxor %xmm5, %xmm6952; SSE41-NEXT: movdqa %xmm6, %xmm7953; SSE41-NEXT: pcmpeqd %xmm0, %xmm7954; SSE41-NEXT: pcmpgtd %xmm0, %xmm6955; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]956; SSE41-NEXT: pand %xmm7, %xmm0957; SSE41-NEXT: por %xmm6, %xmm0958; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2959; SSE41-NEXT: movdqa %xmm1, %xmm0960; SSE41-NEXT: pxor %xmm5, %xmm0961; SSE41-NEXT: pxor %xmm3, %xmm5962; SSE41-NEXT: movdqa %xmm5, %xmm4963; SSE41-NEXT: pcmpeqd %xmm0, %xmm4964; SSE41-NEXT: pcmpgtd %xmm0, %xmm5965; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]966; SSE41-NEXT: pand %xmm4, %xmm0967; SSE41-NEXT: por %xmm5, %xmm0968; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm3969; SSE41-NEXT: movapd %xmm2, %xmm0970; SSE41-NEXT: movapd %xmm3, %xmm1971; SSE41-NEXT: retq972;973; SSE42-LABEL: min_lt_v4i64:974; SSE42: # %bb.0:975; SSE42-NEXT: movdqa %xmm0, %xmm4976; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]977; SSE42-NEXT: movdqa %xmm0, %xmm6978; SSE42-NEXT: pxor %xmm5, %xmm6979; SSE42-NEXT: movdqa %xmm2, %xmm0980; SSE42-NEXT: pxor %xmm5, %xmm0981; SSE42-NEXT: pcmpgtq %xmm6, %xmm0982; SSE42-NEXT: blendvpd %xmm0, %xmm4, %xmm2983; SSE42-NEXT: movdqa %xmm1, %xmm0984; SSE42-NEXT: pxor %xmm5, %xmm0985; SSE42-NEXT: pxor %xmm3, %xmm5986; SSE42-NEXT: pcmpgtq %xmm0, %xmm5987; SSE42-NEXT: movdqa %xmm5, %xmm0988; SSE42-NEXT: blendvpd %xmm0, %xmm1, %xmm3989; SSE42-NEXT: movapd %xmm2, %xmm0990; SSE42-NEXT: movapd %xmm3, %xmm1991; SSE42-NEXT: retq992;993; AVX1-LABEL: min_lt_v4i64:994; AVX1: # %bb.0:995; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2996; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]997; AVX1-NEXT: # xmm3 = mem[0,0]998; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2999; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm41000; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm41001; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm21002; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm41003; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm31004; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm31005; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm21006; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm01007; AVX1-NEXT: retq1008;1009; AVX2-LABEL: min_lt_v4i64:1010; AVX2: # %bb.0:1011; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1012; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm31013; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm21014; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm21015; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm01016; AVX2-NEXT: retq1017;1018; AVX512-LABEL: min_lt_v4i64:1019; AVX512: # %bb.0:1020; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm11021; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01022; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm01023; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01024; AVX512-NEXT: retq1025 %1 = icmp ult <4 x i64> %a, %b1026 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b1027 ret <4 x i64> %21028}1029 1030define <4 x i32> @min_lt_v4i32(<4 x i32> %a, <4 x i32> %b) {1031; SSE2-LABEL: min_lt_v4i32:1032; SSE2: # %bb.0:1033; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]1034; SSE2-NEXT: movdqa %xmm0, %xmm31035; SSE2-NEXT: pxor %xmm2, %xmm31036; SSE2-NEXT: pxor %xmm1, %xmm21037; SSE2-NEXT: pcmpgtd %xmm3, %xmm21038; SSE2-NEXT: pand %xmm2, %xmm01039; SSE2-NEXT: pandn %xmm1, %xmm21040; SSE2-NEXT: por %xmm2, %xmm01041; SSE2-NEXT: retq1042;1043; SSE41-LABEL: min_lt_v4i32:1044; SSE41: # %bb.0:1045; SSE41-NEXT: pminud %xmm1, %xmm01046; SSE41-NEXT: retq1047;1048; SSE42-LABEL: min_lt_v4i32:1049; SSE42: # %bb.0:1050; SSE42-NEXT: pminud %xmm1, %xmm01051; SSE42-NEXT: retq1052;1053; AVX-LABEL: min_lt_v4i32:1054; AVX: # %bb.0:1055; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm01056; AVX-NEXT: retq1057 %1 = icmp ult <4 x i32> %a, %b1058 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b1059 ret <4 x i32> %21060}1061 1062define <8 x i32> @min_lt_v8i32(<8 x i32> %a, <8 x i32> %b) {1063; SSE2-LABEL: min_lt_v8i32:1064; SSE2: # %bb.0:1065; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]1066; SSE2-NEXT: movdqa %xmm0, %xmm51067; SSE2-NEXT: pxor %xmm4, %xmm51068; SSE2-NEXT: movdqa %xmm2, %xmm61069; SSE2-NEXT: pxor %xmm4, %xmm61070; SSE2-NEXT: pcmpgtd %xmm5, %xmm61071; SSE2-NEXT: pand %xmm6, %xmm01072; SSE2-NEXT: pandn %xmm2, %xmm61073; SSE2-NEXT: por %xmm6, %xmm01074; SSE2-NEXT: movdqa %xmm1, %xmm21075; SSE2-NEXT: pxor %xmm4, %xmm21076; SSE2-NEXT: pxor %xmm3, %xmm41077; SSE2-NEXT: pcmpgtd %xmm2, %xmm41078; SSE2-NEXT: pand %xmm4, %xmm11079; SSE2-NEXT: pandn %xmm3, %xmm41080; SSE2-NEXT: por %xmm4, %xmm11081; SSE2-NEXT: retq1082;1083; SSE41-LABEL: min_lt_v8i32:1084; SSE41: # %bb.0:1085; SSE41-NEXT: pminud %xmm2, %xmm01086; SSE41-NEXT: pminud %xmm3, %xmm11087; SSE41-NEXT: retq1088;1089; SSE42-LABEL: min_lt_v8i32:1090; SSE42: # %bb.0:1091; SSE42-NEXT: pminud %xmm2, %xmm01092; SSE42-NEXT: pminud %xmm3, %xmm11093; SSE42-NEXT: retq1094;1095; AVX1-LABEL: min_lt_v8i32:1096; AVX1: # %bb.0:1097; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21098; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31099; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm21100; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm01101; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01102; AVX1-NEXT: retq1103;1104; AVX2-LABEL: min_lt_v8i32:1105; AVX2: # %bb.0:1106; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm01107; AVX2-NEXT: retq1108;1109; AVX512-LABEL: min_lt_v8i32:1110; AVX512: # %bb.0:1111; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm01112; AVX512-NEXT: retq1113 %1 = icmp ult <8 x i32> %a, %b1114 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b1115 ret <8 x i32> %21116}1117 1118define <8 x i16> @min_lt_v8i16(<8 x i16> %a, <8 x i16> %b) {1119; SSE2-LABEL: min_lt_v8i16:1120; SSE2: # %bb.0:1121; SSE2-NEXT: movdqa %xmm0, %xmm21122; SSE2-NEXT: psubusw %xmm1, %xmm21123; SSE2-NEXT: psubw %xmm2, %xmm01124; SSE2-NEXT: retq1125;1126; SSE41-LABEL: min_lt_v8i16:1127; SSE41: # %bb.0:1128; SSE41-NEXT: pminuw %xmm1, %xmm01129; SSE41-NEXT: retq1130;1131; SSE42-LABEL: min_lt_v8i16:1132; SSE42: # %bb.0:1133; SSE42-NEXT: pminuw %xmm1, %xmm01134; SSE42-NEXT: retq1135;1136; AVX-LABEL: min_lt_v8i16:1137; AVX: # %bb.0:1138; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm01139; AVX-NEXT: retq1140 %1 = icmp ult <8 x i16> %a, %b1141 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b1142 ret <8 x i16> %21143}1144 1145define <16 x i16> @min_lt_v16i16(<16 x i16> %a, <16 x i16> %b) {1146; SSE2-LABEL: min_lt_v16i16:1147; SSE2: # %bb.0:1148; SSE2-NEXT: movdqa %xmm0, %xmm41149; SSE2-NEXT: psubusw %xmm2, %xmm41150; SSE2-NEXT: psubw %xmm4, %xmm01151; SSE2-NEXT: movdqa %xmm1, %xmm21152; SSE2-NEXT: psubusw %xmm3, %xmm21153; SSE2-NEXT: psubw %xmm2, %xmm11154; SSE2-NEXT: retq1155;1156; SSE41-LABEL: min_lt_v16i16:1157; SSE41: # %bb.0:1158; SSE41-NEXT: pminuw %xmm2, %xmm01159; SSE41-NEXT: pminuw %xmm3, %xmm11160; SSE41-NEXT: retq1161;1162; SSE42-LABEL: min_lt_v16i16:1163; SSE42: # %bb.0:1164; SSE42-NEXT: pminuw %xmm2, %xmm01165; SSE42-NEXT: pminuw %xmm3, %xmm11166; SSE42-NEXT: retq1167;1168; AVX1-LABEL: min_lt_v16i16:1169; AVX1: # %bb.0:1170; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21171; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31172; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm21173; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm01174; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01175; AVX1-NEXT: retq1176;1177; AVX2-LABEL: min_lt_v16i16:1178; AVX2: # %bb.0:1179; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm01180; AVX2-NEXT: retq1181;1182; AVX512-LABEL: min_lt_v16i16:1183; AVX512: # %bb.0:1184; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm01185; AVX512-NEXT: retq1186 %1 = icmp ult <16 x i16> %a, %b1187 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b1188 ret <16 x i16> %21189}1190 1191define <16 x i8> @min_lt_v16i8(<16 x i8> %a, <16 x i8> %b) {1192; SSE-LABEL: min_lt_v16i8:1193; SSE: # %bb.0:1194; SSE-NEXT: pminub %xmm1, %xmm01195; SSE-NEXT: retq1196;1197; AVX-LABEL: min_lt_v16i8:1198; AVX: # %bb.0:1199; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm01200; AVX-NEXT: retq1201 %1 = icmp ult <16 x i8> %a, %b1202 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b1203 ret <16 x i8> %21204}1205 1206define <32 x i8> @min_lt_v32i8(<32 x i8> %a, <32 x i8> %b) {1207; SSE-LABEL: min_lt_v32i8:1208; SSE: # %bb.0:1209; SSE-NEXT: pminub %xmm2, %xmm01210; SSE-NEXT: pminub %xmm3, %xmm11211; SSE-NEXT: retq1212;1213; AVX1-LABEL: min_lt_v32i8:1214; AVX1: # %bb.0:1215; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21216; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31217; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm21218; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm01219; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01220; AVX1-NEXT: retq1221;1222; AVX2-LABEL: min_lt_v32i8:1223; AVX2: # %bb.0:1224; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm01225; AVX2-NEXT: retq1226;1227; AVX512-LABEL: min_lt_v32i8:1228; AVX512: # %bb.0:1229; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm01230; AVX512-NEXT: retq1231 %1 = icmp ult <32 x i8> %a, %b1232 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b1233 ret <32 x i8> %21234}1235 1236;1237; Unsigned Minimum (LE)1238;1239 1240define <2 x i64> @min_le_v2i64(<2 x i64> %a, <2 x i64> %b) {1241; SSE2-LABEL: min_le_v2i64:1242; SSE2: # %bb.0:1243; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]1244; SSE2-NEXT: movdqa %xmm0, %xmm31245; SSE2-NEXT: pxor %xmm2, %xmm31246; SSE2-NEXT: pxor %xmm1, %xmm21247; SSE2-NEXT: movdqa %xmm2, %xmm41248; SSE2-NEXT: pcmpgtd %xmm3, %xmm41249; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1250; SSE2-NEXT: pcmpeqd %xmm3, %xmm21251; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1252; SSE2-NEXT: pand %xmm5, %xmm21253; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]1254; SSE2-NEXT: por %xmm2, %xmm31255; SSE2-NEXT: pand %xmm3, %xmm01256; SSE2-NEXT: pandn %xmm1, %xmm31257; SSE2-NEXT: por %xmm3, %xmm01258; SSE2-NEXT: retq1259;1260; SSE41-LABEL: min_le_v2i64:1261; SSE41: # %bb.0:1262; SSE41-NEXT: movdqa %xmm0, %xmm21263; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]1264; SSE41-NEXT: pxor %xmm3, %xmm01265; SSE41-NEXT: pxor %xmm1, %xmm31266; SSE41-NEXT: movdqa %xmm3, %xmm41267; SSE41-NEXT: pcmpeqd %xmm0, %xmm41268; SSE41-NEXT: pcmpgtd %xmm0, %xmm31269; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]1270; SSE41-NEXT: pand %xmm4, %xmm01271; SSE41-NEXT: por %xmm3, %xmm01272; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm11273; SSE41-NEXT: movapd %xmm1, %xmm01274; SSE41-NEXT: retq1275;1276; SSE42-LABEL: min_le_v2i64:1277; SSE42: # %bb.0:1278; SSE42-NEXT: movdqa %xmm0, %xmm21279; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]1280; SSE42-NEXT: movdqa %xmm2, %xmm31281; SSE42-NEXT: pxor %xmm0, %xmm31282; SSE42-NEXT: pxor %xmm1, %xmm01283; SSE42-NEXT: pcmpgtq %xmm3, %xmm01284; SSE42-NEXT: blendvpd %xmm0, %xmm2, %xmm11285; SSE42-NEXT: movapd %xmm1, %xmm01286; SSE42-NEXT: retq1287;1288; AVX1-LABEL: min_le_v2i64:1289; AVX1: # %bb.0:1290; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]1291; AVX1-NEXT: # xmm2 = mem[0,0]1292; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm31293; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm21294; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm21295; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm01296; AVX1-NEXT: retq1297;1298; AVX2-LABEL: min_le_v2i64:1299; AVX2: # %bb.0:1300; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]1301; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm31302; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm21303; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm21304; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm01305; AVX2-NEXT: retq1306;1307; AVX512-LABEL: min_le_v2i64:1308; AVX512: # %bb.0:1309; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11310; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm01311; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm01312; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01313; AVX512-NEXT: vzeroupper1314; AVX512-NEXT: retq1315 %1 = icmp ule <2 x i64> %a, %b1316 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b1317 ret <2 x i64> %21318}1319 1320define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) {1321; SSE2-LABEL: min_le_v4i64:1322; SSE2: # %bb.0:1323; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]1324; SSE2-NEXT: movdqa %xmm0, %xmm51325; SSE2-NEXT: pxor %xmm4, %xmm51326; SSE2-NEXT: movdqa %xmm2, %xmm61327; SSE2-NEXT: pxor %xmm4, %xmm61328; SSE2-NEXT: movdqa %xmm6, %xmm71329; SSE2-NEXT: pcmpgtd %xmm5, %xmm71330; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]1331; SSE2-NEXT: pcmpeqd %xmm5, %xmm61332; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]1333; SSE2-NEXT: pand %xmm8, %xmm51334; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]1335; SSE2-NEXT: por %xmm5, %xmm61336; SSE2-NEXT: pand %xmm6, %xmm01337; SSE2-NEXT: pandn %xmm2, %xmm61338; SSE2-NEXT: por %xmm6, %xmm01339; SSE2-NEXT: movdqa %xmm1, %xmm21340; SSE2-NEXT: pxor %xmm4, %xmm21341; SSE2-NEXT: pxor %xmm3, %xmm41342; SSE2-NEXT: movdqa %xmm4, %xmm51343; SSE2-NEXT: pcmpgtd %xmm2, %xmm51344; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]1345; SSE2-NEXT: pcmpeqd %xmm2, %xmm41346; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]1347; SSE2-NEXT: pand %xmm6, %xmm21348; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]1349; SSE2-NEXT: por %xmm2, %xmm41350; SSE2-NEXT: pand %xmm4, %xmm11351; SSE2-NEXT: pandn %xmm3, %xmm41352; SSE2-NEXT: por %xmm4, %xmm11353; SSE2-NEXT: retq1354;1355; SSE41-LABEL: min_le_v4i64:1356; SSE41: # %bb.0:1357; SSE41-NEXT: movdqa %xmm0, %xmm41358; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]1359; SSE41-NEXT: pxor %xmm5, %xmm01360; SSE41-NEXT: movdqa %xmm2, %xmm61361; SSE41-NEXT: pxor %xmm5, %xmm61362; SSE41-NEXT: movdqa %xmm6, %xmm71363; SSE41-NEXT: pcmpeqd %xmm0, %xmm71364; SSE41-NEXT: pcmpgtd %xmm0, %xmm61365; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]1366; SSE41-NEXT: pand %xmm7, %xmm01367; SSE41-NEXT: por %xmm6, %xmm01368; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm21369; SSE41-NEXT: movdqa %xmm1, %xmm01370; SSE41-NEXT: pxor %xmm5, %xmm01371; SSE41-NEXT: pxor %xmm3, %xmm51372; SSE41-NEXT: movdqa %xmm5, %xmm41373; SSE41-NEXT: pcmpeqd %xmm0, %xmm41374; SSE41-NEXT: pcmpgtd %xmm0, %xmm51375; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]1376; SSE41-NEXT: pand %xmm4, %xmm01377; SSE41-NEXT: por %xmm5, %xmm01378; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm31379; SSE41-NEXT: movapd %xmm2, %xmm01380; SSE41-NEXT: movapd %xmm3, %xmm11381; SSE41-NEXT: retq1382;1383; SSE42-LABEL: min_le_v4i64:1384; SSE42: # %bb.0:1385; SSE42-NEXT: movdqa %xmm0, %xmm41386; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]1387; SSE42-NEXT: movdqa %xmm0, %xmm61388; SSE42-NEXT: pxor %xmm5, %xmm61389; SSE42-NEXT: movdqa %xmm2, %xmm01390; SSE42-NEXT: pxor %xmm5, %xmm01391; SSE42-NEXT: pcmpgtq %xmm6, %xmm01392; SSE42-NEXT: blendvpd %xmm0, %xmm4, %xmm21393; SSE42-NEXT: movdqa %xmm1, %xmm01394; SSE42-NEXT: pxor %xmm5, %xmm01395; SSE42-NEXT: pxor %xmm3, %xmm51396; SSE42-NEXT: pcmpgtq %xmm0, %xmm51397; SSE42-NEXT: movdqa %xmm5, %xmm01398; SSE42-NEXT: blendvpd %xmm0, %xmm1, %xmm31399; SSE42-NEXT: movapd %xmm2, %xmm01400; SSE42-NEXT: movapd %xmm3, %xmm11401; SSE42-NEXT: retq1402;1403; AVX1-LABEL: min_le_v4i64:1404; AVX1: # %bb.0:1405; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21406; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]1407; AVX1-NEXT: # xmm3 = mem[0,0]1408; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm21409; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm41410; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm41411; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm21412; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm41413; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm31414; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm31415; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm21416; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm01417; AVX1-NEXT: retq1418;1419; AVX2-LABEL: min_le_v4i64:1420; AVX2: # %bb.0:1421; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1422; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm31423; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm21424; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm21425; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm01426; AVX2-NEXT: retq1427;1428; AVX512-LABEL: min_le_v4i64:1429; AVX512: # %bb.0:1430; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm11431; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01432; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm01433; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01434; AVX512-NEXT: retq1435 %1 = icmp ule <4 x i64> %a, %b1436 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b1437 ret <4 x i64> %21438}1439 1440define <4 x i32> @min_le_v4i32(<4 x i32> %a, <4 x i32> %b) {1441; SSE2-LABEL: min_le_v4i32:1442; SSE2: # %bb.0:1443; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]1444; SSE2-NEXT: movdqa %xmm0, %xmm31445; SSE2-NEXT: pxor %xmm2, %xmm31446; SSE2-NEXT: pxor %xmm1, %xmm21447; SSE2-NEXT: pcmpgtd %xmm3, %xmm21448; SSE2-NEXT: pand %xmm2, %xmm01449; SSE2-NEXT: pandn %xmm1, %xmm21450; SSE2-NEXT: por %xmm2, %xmm01451; SSE2-NEXT: retq1452;1453; SSE41-LABEL: min_le_v4i32:1454; SSE41: # %bb.0:1455; SSE41-NEXT: pminud %xmm1, %xmm01456; SSE41-NEXT: retq1457;1458; SSE42-LABEL: min_le_v4i32:1459; SSE42: # %bb.0:1460; SSE42-NEXT: pminud %xmm1, %xmm01461; SSE42-NEXT: retq1462;1463; AVX-LABEL: min_le_v4i32:1464; AVX: # %bb.0:1465; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm01466; AVX-NEXT: retq1467 %1 = icmp ule <4 x i32> %a, %b1468 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b1469 ret <4 x i32> %21470}1471 1472define <8 x i32> @min_le_v8i32(<8 x i32> %a, <8 x i32> %b) {1473; SSE2-LABEL: min_le_v8i32:1474; SSE2: # %bb.0:1475; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]1476; SSE2-NEXT: movdqa %xmm0, %xmm51477; SSE2-NEXT: pxor %xmm4, %xmm51478; SSE2-NEXT: movdqa %xmm2, %xmm61479; SSE2-NEXT: pxor %xmm4, %xmm61480; SSE2-NEXT: pcmpgtd %xmm5, %xmm61481; SSE2-NEXT: pand %xmm6, %xmm01482; SSE2-NEXT: pandn %xmm2, %xmm61483; SSE2-NEXT: por %xmm6, %xmm01484; SSE2-NEXT: movdqa %xmm1, %xmm21485; SSE2-NEXT: pxor %xmm4, %xmm21486; SSE2-NEXT: pxor %xmm3, %xmm41487; SSE2-NEXT: pcmpgtd %xmm2, %xmm41488; SSE2-NEXT: pand %xmm4, %xmm11489; SSE2-NEXT: pandn %xmm3, %xmm41490; SSE2-NEXT: por %xmm4, %xmm11491; SSE2-NEXT: retq1492;1493; SSE41-LABEL: min_le_v8i32:1494; SSE41: # %bb.0:1495; SSE41-NEXT: pminud %xmm2, %xmm01496; SSE41-NEXT: pminud %xmm3, %xmm11497; SSE41-NEXT: retq1498;1499; SSE42-LABEL: min_le_v8i32:1500; SSE42: # %bb.0:1501; SSE42-NEXT: pminud %xmm2, %xmm01502; SSE42-NEXT: pminud %xmm3, %xmm11503; SSE42-NEXT: retq1504;1505; AVX1-LABEL: min_le_v8i32:1506; AVX1: # %bb.0:1507; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21508; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31509; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm21510; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm01511; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01512; AVX1-NEXT: retq1513;1514; AVX2-LABEL: min_le_v8i32:1515; AVX2: # %bb.0:1516; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm01517; AVX2-NEXT: retq1518;1519; AVX512-LABEL: min_le_v8i32:1520; AVX512: # %bb.0:1521; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm01522; AVX512-NEXT: retq1523 %1 = icmp ule <8 x i32> %a, %b1524 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b1525 ret <8 x i32> %21526}1527 1528define <8 x i16> @min_le_v8i16(<8 x i16> %a, <8 x i16> %b) {1529; SSE2-LABEL: min_le_v8i16:1530; SSE2: # %bb.0:1531; SSE2-NEXT: movdqa %xmm0, %xmm21532; SSE2-NEXT: psubusw %xmm1, %xmm21533; SSE2-NEXT: psubw %xmm2, %xmm01534; SSE2-NEXT: retq1535;1536; SSE41-LABEL: min_le_v8i16:1537; SSE41: # %bb.0:1538; SSE41-NEXT: pminuw %xmm1, %xmm01539; SSE41-NEXT: retq1540;1541; SSE42-LABEL: min_le_v8i16:1542; SSE42: # %bb.0:1543; SSE42-NEXT: pminuw %xmm1, %xmm01544; SSE42-NEXT: retq1545;1546; AVX-LABEL: min_le_v8i16:1547; AVX: # %bb.0:1548; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm01549; AVX-NEXT: retq1550 %1 = icmp ule <8 x i16> %a, %b1551 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b1552 ret <8 x i16> %21553}1554 1555define <16 x i16> @min_le_v16i16(<16 x i16> %a, <16 x i16> %b) {1556; SSE2-LABEL: min_le_v16i16:1557; SSE2: # %bb.0:1558; SSE2-NEXT: movdqa %xmm0, %xmm41559; SSE2-NEXT: psubusw %xmm2, %xmm41560; SSE2-NEXT: psubw %xmm4, %xmm01561; SSE2-NEXT: movdqa %xmm1, %xmm21562; SSE2-NEXT: psubusw %xmm3, %xmm21563; SSE2-NEXT: psubw %xmm2, %xmm11564; SSE2-NEXT: retq1565;1566; SSE41-LABEL: min_le_v16i16:1567; SSE41: # %bb.0:1568; SSE41-NEXT: pminuw %xmm2, %xmm01569; SSE41-NEXT: pminuw %xmm3, %xmm11570; SSE41-NEXT: retq1571;1572; SSE42-LABEL: min_le_v16i16:1573; SSE42: # %bb.0:1574; SSE42-NEXT: pminuw %xmm2, %xmm01575; SSE42-NEXT: pminuw %xmm3, %xmm11576; SSE42-NEXT: retq1577;1578; AVX1-LABEL: min_le_v16i16:1579; AVX1: # %bb.0:1580; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21581; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31582; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm21583; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm01584; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01585; AVX1-NEXT: retq1586;1587; AVX2-LABEL: min_le_v16i16:1588; AVX2: # %bb.0:1589; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm01590; AVX2-NEXT: retq1591;1592; AVX512-LABEL: min_le_v16i16:1593; AVX512: # %bb.0:1594; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm01595; AVX512-NEXT: retq1596 %1 = icmp ule <16 x i16> %a, %b1597 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b1598 ret <16 x i16> %21599}1600 1601define <16 x i8> @min_le_v16i8(<16 x i8> %a, <16 x i8> %b) {1602; SSE-LABEL: min_le_v16i8:1603; SSE: # %bb.0:1604; SSE-NEXT: pminub %xmm1, %xmm01605; SSE-NEXT: retq1606;1607; AVX-LABEL: min_le_v16i8:1608; AVX: # %bb.0:1609; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm01610; AVX-NEXT: retq1611 %1 = icmp ule <16 x i8> %a, %b1612 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b1613 ret <16 x i8> %21614}1615 1616define <32 x i8> @min_le_v32i8(<32 x i8> %a, <32 x i8> %b) {1617; SSE-LABEL: min_le_v32i8:1618; SSE: # %bb.0:1619; SSE-NEXT: pminub %xmm2, %xmm01620; SSE-NEXT: pminub %xmm3, %xmm11621; SSE-NEXT: retq1622;1623; AVX1-LABEL: min_le_v32i8:1624; AVX1: # %bb.0:1625; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21626; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31627; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm21628; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm01629; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01630; AVX1-NEXT: retq1631;1632; AVX2-LABEL: min_le_v32i8:1633; AVX2: # %bb.0:1634; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm01635; AVX2-NEXT: retq1636;1637; AVX512-LABEL: min_le_v32i8:1638; AVX512: # %bb.0:1639; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm01640; AVX512-NEXT: retq1641 %1 = icmp ule <32 x i8> %a, %b1642 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b1643 ret <32 x i8> %21644}1645 1646;1647; Constant Folding1648;1649 1650define <2 x i64> @max_gt_v2i64c() {1651; SSE-LABEL: max_gt_v2i64c:1652; SSE: # %bb.0:1653; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7]1654; SSE-NEXT: retq1655;1656; AVX1-LABEL: max_gt_v2i64c:1657; AVX1: # %bb.0:1658; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]1659; AVX1-NEXT: retq1660;1661; AVX2-LABEL: max_gt_v2i64c:1662; AVX2: # %bb.0:1663; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]1664; AVX2-NEXT: retq1665;1666; AVX512-LABEL: max_gt_v2i64c:1667; AVX512: # %bb.0:1668; AVX512-NEXT: vpmovsxbq {{.*#+}} xmm0 = [18446744073709551615,7]1669; AVX512-NEXT: retq1670 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 01671 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 01672 %3 = icmp ugt <2 x i64> %1, %21673 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %21674 ret <2 x i64> %41675}1676 1677define <4 x i64> @max_gt_v4i64c() {1678; SSE-LABEL: max_gt_v4i64c:1679; SSE: # %bb.0:1680; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7]1681; SSE-NEXT: pcmpeqd %xmm0, %xmm01682; SSE-NEXT: retq1683;1684; AVX1-LABEL: max_gt_v4i64c:1685; AVX1: # %bb.0:1686; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1687; AVX1-NEXT: retq1688;1689; AVX2-LABEL: max_gt_v4i64c:1690; AVX2: # %bb.0:1691; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1692; AVX2-NEXT: retq1693;1694; AVX512-LABEL: max_gt_v4i64c:1695; AVX512: # %bb.0:1696; AVX512-NEXT: vpmovsxbq {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1697; AVX512-NEXT: retq1698 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 01699 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 01700 %3 = icmp ugt <4 x i64> %1, %21701 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %21702 ret <4 x i64> %41703}1704 1705define <4 x i32> @max_gt_v4i32c() {1706; SSE-LABEL: max_gt_v4i32c:1707; SSE: # %bb.0:1708; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1709; SSE-NEXT: retq1710;1711; AVX1-LABEL: max_gt_v4i32c:1712; AVX1: # %bb.0:1713; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1714; AVX1-NEXT: retq1715;1716; AVX2-LABEL: max_gt_v4i32c:1717; AVX2: # %bb.0:1718; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1719; AVX2-NEXT: retq1720;1721; AVX512-LABEL: max_gt_v4i32c:1722; AVX512: # %bb.0:1723; AVX512-NEXT: vpmovsxbd {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1724; AVX512-NEXT: retq1725 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 01726 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 01727 %3 = icmp ugt <4 x i32> %1, %21728 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %21729 ret <4 x i32> %41730}1731 1732define <8 x i32> @max_gt_v8i32c() {1733; SSE-LABEL: max_gt_v8i32c:1734; SSE: # %bb.0:1735; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]1736; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7]1737; SSE-NEXT: retq1738;1739; AVX1-LABEL: max_gt_v8i32c:1740; AVX1: # %bb.0:1741; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1742; AVX1-NEXT: retq1743;1744; AVX2-LABEL: max_gt_v8i32c:1745; AVX2: # %bb.0:1746; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1747; AVX2-NEXT: retq1748;1749; AVX512-LABEL: max_gt_v8i32c:1750; AVX512: # %bb.0:1751; AVX512-NEXT: vpmovsxbd {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1752; AVX512-NEXT: retq1753 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 01754 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 01755 %3 = icmp ugt <8 x i32> %1, %21756 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %21757 ret <8 x i32> %41758}1759 1760define <8 x i16> @max_gt_v8i16c() {1761; SSE-LABEL: max_gt_v8i16c:1762; SSE: # %bb.0:1763; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]1764; SSE-NEXT: retq1765;1766; AVX-LABEL: max_gt_v8i16c:1767; AVX: # %bb.0:1768; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]1769; AVX-NEXT: retq1770 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 01771 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 01772 %3 = icmp ugt <8 x i16> %1, %21773 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %21774 ret <8 x i16> %41775}1776 1777define <16 x i16> @max_gt_v16i16c() {1778; SSE-LABEL: max_gt_v16i16c:1779; SSE: # %bb.0:1780; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]1781; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]1782; SSE-NEXT: retq1783;1784; AVX-LABEL: max_gt_v16i16c:1785; AVX: # %bb.0:1786; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]1787; AVX-NEXT: retq1788 %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 01789 %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 01790 %3 = icmp ugt <16 x i16> %1, %21791 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %21792 ret <16 x i16> %41793}1794 1795define <16 x i8> @max_gt_v16i8c() {1796; SSE-LABEL: max_gt_v16i8c:1797; SSE: # %bb.0:1798; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]1799; SSE-NEXT: retq1800;1801; AVX-LABEL: max_gt_v16i8c:1802; AVX: # %bb.0:1803; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]1804; AVX-NEXT: retq1805 %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 01806 %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 01807 %3 = icmp ugt <16 x i8> %1, %21808 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %21809 ret <16 x i8> %41810}1811 1812define <2 x i64> @max_ge_v2i64c() {1813; SSE-LABEL: max_ge_v2i64c:1814; SSE: # %bb.0:1815; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7]1816; SSE-NEXT: retq1817;1818; AVX1-LABEL: max_ge_v2i64c:1819; AVX1: # %bb.0:1820; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]1821; AVX1-NEXT: retq1822;1823; AVX2-LABEL: max_ge_v2i64c:1824; AVX2: # %bb.0:1825; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]1826; AVX2-NEXT: retq1827;1828; AVX512-LABEL: max_ge_v2i64c:1829; AVX512: # %bb.0:1830; AVX512-NEXT: vpmovsxbq {{.*#+}} xmm0 = [18446744073709551615,7]1831; AVX512-NEXT: retq1832 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 01833 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 01834 %3 = icmp uge <2 x i64> %1, %21835 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %21836 ret <2 x i64> %41837}1838 1839define <4 x i64> @max_ge_v4i64c() {1840; SSE-LABEL: max_ge_v4i64c:1841; SSE: # %bb.0:1842; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7]1843; SSE-NEXT: pcmpeqd %xmm0, %xmm01844; SSE-NEXT: retq1845;1846; AVX1-LABEL: max_ge_v4i64c:1847; AVX1: # %bb.0:1848; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1849; AVX1-NEXT: retq1850;1851; AVX2-LABEL: max_ge_v4i64c:1852; AVX2: # %bb.0:1853; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1854; AVX2-NEXT: retq1855;1856; AVX512-LABEL: max_ge_v4i64c:1857; AVX512: # %bb.0:1858; AVX512-NEXT: vpmovsxbq {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1859; AVX512-NEXT: retq1860 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 01861 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 01862 %3 = icmp uge <4 x i64> %1, %21863 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %21864 ret <4 x i64> %41865}1866 1867define <4 x i32> @max_ge_v4i32c() {1868; SSE-LABEL: max_ge_v4i32c:1869; SSE: # %bb.0:1870; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1871; SSE-NEXT: retq1872;1873; AVX1-LABEL: max_ge_v4i32c:1874; AVX1: # %bb.0:1875; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1876; AVX1-NEXT: retq1877;1878; AVX2-LABEL: max_ge_v4i32c:1879; AVX2: # %bb.0:1880; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1881; AVX2-NEXT: retq1882;1883; AVX512-LABEL: max_ge_v4i32c:1884; AVX512: # %bb.0:1885; AVX512-NEXT: vpmovsxbd {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1886; AVX512-NEXT: retq1887 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 01888 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 01889 %3 = icmp uge <4 x i32> %1, %21890 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %21891 ret <4 x i32> %41892}1893 1894define <8 x i32> @max_ge_v8i32c() {1895; SSE-LABEL: max_ge_v8i32c:1896; SSE: # %bb.0:1897; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]1898; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7]1899; SSE-NEXT: retq1900;1901; AVX1-LABEL: max_ge_v8i32c:1902; AVX1: # %bb.0:1903; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1904; AVX1-NEXT: retq1905;1906; AVX2-LABEL: max_ge_v8i32c:1907; AVX2: # %bb.0:1908; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1909; AVX2-NEXT: retq1910;1911; AVX512-LABEL: max_ge_v8i32c:1912; AVX512: # %bb.0:1913; AVX512-NEXT: vpmovsxbd {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1914; AVX512-NEXT: retq1915 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 01916 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 01917 %3 = icmp uge <8 x i32> %1, %21918 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %21919 ret <8 x i32> %41920}1921 1922define <8 x i16> @max_ge_v8i16c() {1923; SSE-LABEL: max_ge_v8i16c:1924; SSE: # %bb.0:1925; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]1926; SSE-NEXT: retq1927;1928; AVX-LABEL: max_ge_v8i16c:1929; AVX: # %bb.0:1930; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]1931; AVX-NEXT: retq1932 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 01933 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 01934 %3 = icmp uge <8 x i16> %1, %21935 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %21936 ret <8 x i16> %41937}1938 1939define <16 x i16> @max_ge_v16i16c() {1940; SSE-LABEL: max_ge_v16i16c:1941; SSE: # %bb.0:1942; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]1943; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]1944; SSE-NEXT: retq1945;1946; AVX-LABEL: max_ge_v16i16c:1947; AVX: # %bb.0:1948; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]1949; AVX-NEXT: retq1950 %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 01951 %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 01952 %3 = icmp uge <16 x i16> %1, %21953 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %21954 ret <16 x i16> %41955}1956 1957define <16 x i8> @max_ge_v16i8c() {1958; SSE-LABEL: max_ge_v16i8c:1959; SSE: # %bb.0:1960; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]1961; SSE-NEXT: retq1962;1963; AVX-LABEL: max_ge_v16i8c:1964; AVX: # %bb.0:1965; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]1966; AVX-NEXT: retq1967 %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 01968 %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 01969 %3 = icmp uge <16 x i8> %1, %21970 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %21971 ret <16 x i8> %41972}1973 1974define <2 x i64> @min_lt_v2i64c() {1975; SSE-LABEL: min_lt_v2i64c:1976; SSE: # %bb.0:1977; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1]1978; SSE-NEXT: retq1979;1980; AVX1-LABEL: min_lt_v2i64c:1981; AVX1: # %bb.0:1982; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]1983; AVX1-NEXT: retq1984;1985; AVX2-LABEL: min_lt_v2i64c:1986; AVX2: # %bb.0:1987; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]1988; AVX2-NEXT: retq1989;1990; AVX512-LABEL: min_lt_v2i64c:1991; AVX512: # %bb.0:1992; AVX512-NEXT: vpmovsxbq {{.*#+}} xmm0 = [18446744073709551609,1]1993; AVX512-NEXT: retq1994 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 01995 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 01996 %3 = icmp ult <2 x i64> %1, %21997 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %21998 ret <2 x i64> %41999}2000 2001define <4 x i64> @min_lt_v4i64c() {2002; SSE-LABEL: min_lt_v4i64c:2003; SSE: # %bb.0:2004; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]2005; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1]2006; SSE-NEXT: retq2007;2008; AVX1-LABEL: min_lt_v4i64c:2009; AVX1: # %bb.0:2010; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]2011; AVX1-NEXT: retq2012;2013; AVX2-LABEL: min_lt_v4i64c:2014; AVX2: # %bb.0:2015; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]2016; AVX2-NEXT: retq2017;2018; AVX512-LABEL: min_lt_v4i64c:2019; AVX512: # %bb.0:2020; AVX512-NEXT: vpmovsxbq {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]2021; AVX512-NEXT: retq2022 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 02023 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 02024 %3 = icmp ult <4 x i64> %1, %22025 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %22026 ret <4 x i64> %42027}2028 2029define <4 x i32> @min_lt_v4i32c() {2030; SSE-LABEL: min_lt_v4i32c:2031; SSE: # %bb.0:2032; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2033; SSE-NEXT: retq2034;2035; AVX1-LABEL: min_lt_v4i32c:2036; AVX1: # %bb.0:2037; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2038; AVX1-NEXT: retq2039;2040; AVX2-LABEL: min_lt_v4i32c:2041; AVX2: # %bb.0:2042; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2043; AVX2-NEXT: retq2044;2045; AVX512-LABEL: min_lt_v4i32c:2046; AVX512: # %bb.0:2047; AVX512-NEXT: vpmovsxbd {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2048; AVX512-NEXT: retq2049 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 02050 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 02051 %3 = icmp ult <4 x i32> %1, %22052 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %22053 ret <4 x i32> %42054}2055 2056define <8 x i32> @min_lt_v8i32c() {2057; SSE-LABEL: min_lt_v8i32c:2058; SSE: # %bb.0:2059; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]2060; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1]2061; SSE-NEXT: retq2062;2063; AVX1-LABEL: min_lt_v8i32c:2064; AVX1: # %bb.0:2065; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]2066; AVX1-NEXT: retq2067;2068; AVX2-LABEL: min_lt_v8i32c:2069; AVX2: # %bb.0:2070; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]2071; AVX2-NEXT: retq2072;2073; AVX512-LABEL: min_lt_v8i32c:2074; AVX512: # %bb.0:2075; AVX512-NEXT: vpmovsxbd {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]2076; AVX512-NEXT: retq2077 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 02078 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 02079 %3 = icmp ult <8 x i32> %1, %22080 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %22081 ret <8 x i32> %42082}2083 2084define <8 x i16> @min_lt_v8i16c() {2085; SSE-LABEL: min_lt_v8i16c:2086; SSE: # %bb.0:2087; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1]2088; SSE-NEXT: retq2089;2090; AVX-LABEL: min_lt_v8i16c:2091; AVX: # %bb.0:2092; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1]2093; AVX-NEXT: retq2094 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 02095 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 1, i32 02096 %3 = icmp ult <8 x i16> %1, %22097 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %22098 ret <8 x i16> %42099}2100 2101define <16 x i16> @min_lt_v16i16c() {2102; SSE-LABEL: min_lt_v16i16c:2103; SSE: # %bb.0:2104; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,65530,65531,65532,65531,65530,65529,0]2105; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]2106; SSE-NEXT: retq2107;2108; AVX-LABEL: min_lt_v16i16c:2109; AVX: # %bb.0:2110; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [1,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]2111; AVX-NEXT: retq2112 %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 02113 %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 1, i32 02114 %3 = icmp ult <16 x i16> %1, %22115 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %22116 ret <16 x i16> %42117}2118 2119define <16 x i8> @min_lt_v16i8c() {2120; SSE-LABEL: min_lt_v16i8c:2121; SSE: # %bb.0:2122; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]2123; SSE-NEXT: retq2124;2125; AVX-LABEL: min_lt_v16i8c:2126; AVX: # %bb.0:2127; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]2128; AVX-NEXT: retq2129 %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 02130 %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 1, i32 02131 %3 = icmp ult <16 x i8> %1, %22132 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %22133 ret <16 x i8> %42134}2135 2136define <2 x i64> @min_le_v2i64c() {2137; SSE-LABEL: min_le_v2i64c:2138; SSE: # %bb.0:2139; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1]2140; SSE-NEXT: retq2141;2142; AVX1-LABEL: min_le_v2i64c:2143; AVX1: # %bb.0:2144; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]2145; AVX1-NEXT: retq2146;2147; AVX2-LABEL: min_le_v2i64c:2148; AVX2: # %bb.0:2149; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]2150; AVX2-NEXT: retq2151;2152; AVX512-LABEL: min_le_v2i64c:2153; AVX512: # %bb.0:2154; AVX512-NEXT: vpmovsxbq {{.*#+}} xmm0 = [18446744073709551609,1]2155; AVX512-NEXT: retq2156 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 02157 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 02158 %3 = icmp ule <2 x i64> %1, %22159 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %22160 ret <2 x i64> %42161}2162 2163define <4 x i64> @min_le_v4i64c() {2164; SSE-LABEL: min_le_v4i64c:2165; SSE: # %bb.0:2166; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]2167; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1]2168; SSE-NEXT: retq2169;2170; AVX1-LABEL: min_le_v4i64c:2171; AVX1: # %bb.0:2172; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]2173; AVX1-NEXT: retq2174;2175; AVX2-LABEL: min_le_v4i64c:2176; AVX2: # %bb.0:2177; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]2178; AVX2-NEXT: retq2179;2180; AVX512-LABEL: min_le_v4i64c:2181; AVX512: # %bb.0:2182; AVX512-NEXT: vpmovsxbq {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]2183; AVX512-NEXT: retq2184 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 02185 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 02186 %3 = icmp ule <4 x i64> %1, %22187 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %22188 ret <4 x i64> %42189}2190 2191define <4 x i32> @min_le_v4i32c() {2192; SSE-LABEL: min_le_v4i32c:2193; SSE: # %bb.0:2194; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2195; SSE-NEXT: retq2196;2197; AVX1-LABEL: min_le_v4i32c:2198; AVX1: # %bb.0:2199; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2200; AVX1-NEXT: retq2201;2202; AVX2-LABEL: min_le_v4i32c:2203; AVX2: # %bb.0:2204; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2205; AVX2-NEXT: retq2206;2207; AVX512-LABEL: min_le_v4i32c:2208; AVX512: # %bb.0:2209; AVX512-NEXT: vpmovsxbd {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2210; AVX512-NEXT: retq2211 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 02212 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 02213 %3 = icmp ule <4 x i32> %1, %22214 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %22215 ret <4 x i32> %42216}2217 2218define <8 x i32> @min_le_v8i32c() {2219; SSE-LABEL: min_le_v8i32c:2220; SSE: # %bb.0:2221; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]2222; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1]2223; SSE-NEXT: retq2224;2225; AVX1-LABEL: min_le_v8i32c:2226; AVX1: # %bb.0:2227; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]2228; AVX1-NEXT: retq2229;2230; AVX2-LABEL: min_le_v8i32c:2231; AVX2: # %bb.0:2232; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]2233; AVX2-NEXT: retq2234;2235; AVX512-LABEL: min_le_v8i32c:2236; AVX512: # %bb.0:2237; AVX512-NEXT: vpmovsxbd {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]2238; AVX512-NEXT: retq2239 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 02240 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 02241 %3 = icmp ule <8 x i32> %1, %22242 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %22243 ret <8 x i32> %42244}2245 2246define <8 x i16> @min_le_v8i16c() {2247; SSE-LABEL: min_le_v8i16c:2248; SSE: # %bb.0:2249; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]2250; SSE-NEXT: retq2251;2252; AVX-LABEL: min_le_v8i16c:2253; AVX: # %bb.0:2254; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]2255; AVX-NEXT: retq2256 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 02257 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 02258 %3 = icmp ule <8 x i16> %1, %22259 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %22260 ret <8 x i16> %42261}2262 2263define <16 x i16> @min_le_v16i16c() {2264; SSE-LABEL: min_le_v16i16c:2265; SSE: # %bb.0:2266; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65530,65531,65532,65531,65530,65529,0]2267; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]2268; SSE-NEXT: retq2269;2270; AVX-LABEL: min_le_v16i16c:2271; AVX: # %bb.0:2272; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65529,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]2273; AVX-NEXT: retq2274 %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 02275 %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 02276 %3 = icmp ule <16 x i16> %1, %22277 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %22278 ret <16 x i16> %42279}2280 2281define <16 x i8> @min_le_v16i8c() {2282; SSE-LABEL: min_le_v16i8c:2283; SSE: # %bb.0:2284; SSE-NEXT: movaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]2285; SSE-NEXT: retq2286;2287; AVX-LABEL: min_le_v16i8c:2288; AVX: # %bb.0:2289; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]2290; AVX-NEXT: retq2291 %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 02292 %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 02293 %3 = icmp ule <16 x i8> %1, %22294 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %22295 ret <16 x i8> %42296}2297