2185 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; Signed 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 = [2147483648,2147483648]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: pmovzxdq {{.*#+}} xmm3 = [2147483648,2147483648]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: pcmpgtq %xmm1, %xmm055; SSE42-NEXT: blendvpd %xmm0, %xmm2, %xmm156; SSE42-NEXT: movapd %xmm1, %xmm057; SSE42-NEXT: retq58;59; AVX1-LABEL: max_gt_v2i64:60; AVX1: # %bb.0:61; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm262; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm063; AVX1-NEXT: retq64;65; AVX2-LABEL: max_gt_v2i64:66; AVX2: # %bb.0:67; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm268; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm069; AVX2-NEXT: retq70;71; AVX512-LABEL: max_gt_v2i64:72; AVX512: # %bb.0:73; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm174; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm075; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm076; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm077; AVX512-NEXT: vzeroupper78; AVX512-NEXT: retq79 %1 = icmp sgt <2 x i64> %a, %b80 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b81 ret <2 x i64> %282}83 84define <4 x i64> @max_gt_v4i64(<4 x i64> %a, <4 x i64> %b) {85; SSE2-LABEL: max_gt_v4i64:86; SSE2: # %bb.0:87; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]88; SSE2-NEXT: movdqa %xmm2, %xmm589; SSE2-NEXT: pxor %xmm4, %xmm590; SSE2-NEXT: movdqa %xmm0, %xmm691; SSE2-NEXT: pxor %xmm4, %xmm692; SSE2-NEXT: movdqa %xmm6, %xmm793; SSE2-NEXT: pcmpgtd %xmm5, %xmm794; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]95; SSE2-NEXT: pcmpeqd %xmm5, %xmm696; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]97; SSE2-NEXT: pand %xmm8, %xmm598; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]99; SSE2-NEXT: por %xmm5, %xmm6100; SSE2-NEXT: pand %xmm6, %xmm0101; SSE2-NEXT: pandn %xmm2, %xmm6102; SSE2-NEXT: por %xmm6, %xmm0103; SSE2-NEXT: movdqa %xmm3, %xmm2104; SSE2-NEXT: pxor %xmm4, %xmm2105; SSE2-NEXT: pxor %xmm1, %xmm4106; SSE2-NEXT: movdqa %xmm4, %xmm5107; SSE2-NEXT: pcmpgtd %xmm2, %xmm5108; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]109; SSE2-NEXT: pcmpeqd %xmm2, %xmm4110; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]111; SSE2-NEXT: pand %xmm6, %xmm2112; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]113; SSE2-NEXT: por %xmm2, %xmm4114; SSE2-NEXT: pand %xmm4, %xmm1115; SSE2-NEXT: pandn %xmm3, %xmm4116; SSE2-NEXT: por %xmm4, %xmm1117; SSE2-NEXT: retq118;119; SSE41-LABEL: max_gt_v4i64:120; SSE41: # %bb.0:121; SSE41-NEXT: movdqa %xmm0, %xmm4122; SSE41-NEXT: pmovzxdq {{.*#+}} xmm5 = [2147483648,2147483648]123; SSE41-NEXT: movdqa %xmm2, %xmm0124; SSE41-NEXT: pxor %xmm5, %xmm0125; SSE41-NEXT: movdqa %xmm4, %xmm6126; SSE41-NEXT: pxor %xmm5, %xmm6127; SSE41-NEXT: movdqa %xmm6, %xmm7128; SSE41-NEXT: pcmpeqd %xmm0, %xmm7129; SSE41-NEXT: pcmpgtd %xmm0, %xmm6130; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]131; SSE41-NEXT: pand %xmm7, %xmm0132; SSE41-NEXT: por %xmm6, %xmm0133; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2134; SSE41-NEXT: movdqa %xmm3, %xmm0135; SSE41-NEXT: pxor %xmm5, %xmm0136; SSE41-NEXT: pxor %xmm1, %xmm5137; SSE41-NEXT: movdqa %xmm5, %xmm4138; SSE41-NEXT: pcmpeqd %xmm0, %xmm4139; SSE41-NEXT: pcmpgtd %xmm0, %xmm5140; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]141; SSE41-NEXT: pand %xmm4, %xmm0142; SSE41-NEXT: por %xmm5, %xmm0143; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm3144; SSE41-NEXT: movapd %xmm2, %xmm0145; SSE41-NEXT: movapd %xmm3, %xmm1146; SSE41-NEXT: retq147;148; SSE42-LABEL: max_gt_v4i64:149; SSE42: # %bb.0:150; SSE42-NEXT: movdqa %xmm0, %xmm4151; SSE42-NEXT: pcmpgtq %xmm2, %xmm0152; SSE42-NEXT: blendvpd %xmm0, %xmm4, %xmm2153; SSE42-NEXT: movdqa %xmm1, %xmm0154; SSE42-NEXT: pcmpgtq %xmm3, %xmm0155; SSE42-NEXT: blendvpd %xmm0, %xmm1, %xmm3156; SSE42-NEXT: movapd %xmm2, %xmm0157; SSE42-NEXT: movapd %xmm3, %xmm1158; SSE42-NEXT: retq159;160; AVX1-LABEL: max_gt_v4i64:161; AVX1: # %bb.0:162; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2163; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3164; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2165; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3166; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2167; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0168; AVX1-NEXT: retq169;170; AVX2-LABEL: max_gt_v4i64:171; AVX2: # %bb.0:172; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2173; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0174; AVX2-NEXT: retq175;176; AVX512-LABEL: max_gt_v4i64:177; AVX512: # %bb.0:178; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1179; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0180; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0181; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0182; AVX512-NEXT: retq183 %1 = icmp sgt <4 x i64> %a, %b184 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b185 ret <4 x i64> %2186}187 188define <4 x i32> @max_gt_v4i32(<4 x i32> %a, <4 x i32> %b) {189; SSE2-LABEL: max_gt_v4i32:190; SSE2: # %bb.0:191; SSE2-NEXT: movdqa %xmm0, %xmm2192; SSE2-NEXT: pcmpgtd %xmm1, %xmm2193; SSE2-NEXT: pand %xmm2, %xmm0194; SSE2-NEXT: pandn %xmm1, %xmm2195; SSE2-NEXT: por %xmm2, %xmm0196; SSE2-NEXT: retq197;198; SSE41-LABEL: max_gt_v4i32:199; SSE41: # %bb.0:200; SSE41-NEXT: pmaxsd %xmm1, %xmm0201; SSE41-NEXT: retq202;203; SSE42-LABEL: max_gt_v4i32:204; SSE42: # %bb.0:205; SSE42-NEXT: pmaxsd %xmm1, %xmm0206; SSE42-NEXT: retq207;208; AVX-LABEL: max_gt_v4i32:209; AVX: # %bb.0:210; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0211; AVX-NEXT: retq212 %1 = icmp sgt <4 x i32> %a, %b213 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b214 ret <4 x i32> %2215}216 217define <8 x i32> @max_gt_v8i32(<8 x i32> %a, <8 x i32> %b) {218; SSE2-LABEL: max_gt_v8i32:219; SSE2: # %bb.0:220; SSE2-NEXT: movdqa %xmm0, %xmm4221; SSE2-NEXT: pcmpgtd %xmm2, %xmm4222; SSE2-NEXT: pand %xmm4, %xmm0223; SSE2-NEXT: pandn %xmm2, %xmm4224; SSE2-NEXT: por %xmm4, %xmm0225; SSE2-NEXT: movdqa %xmm1, %xmm2226; SSE2-NEXT: pcmpgtd %xmm3, %xmm2227; SSE2-NEXT: pand %xmm2, %xmm1228; SSE2-NEXT: pandn %xmm3, %xmm2229; SSE2-NEXT: por %xmm2, %xmm1230; SSE2-NEXT: retq231;232; SSE41-LABEL: max_gt_v8i32:233; SSE41: # %bb.0:234; SSE41-NEXT: pmaxsd %xmm2, %xmm0235; SSE41-NEXT: pmaxsd %xmm3, %xmm1236; SSE41-NEXT: retq237;238; SSE42-LABEL: max_gt_v8i32:239; SSE42: # %bb.0:240; SSE42-NEXT: pmaxsd %xmm2, %xmm0241; SSE42-NEXT: pmaxsd %xmm3, %xmm1242; SSE42-NEXT: retq243;244; AVX1-LABEL: max_gt_v8i32:245; AVX1: # %bb.0:246; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2247; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3248; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2249; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0250; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0251; AVX1-NEXT: retq252;253; AVX2-LABEL: max_gt_v8i32:254; AVX2: # %bb.0:255; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0256; AVX2-NEXT: retq257;258; AVX512-LABEL: max_gt_v8i32:259; AVX512: # %bb.0:260; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0261; AVX512-NEXT: retq262 %1 = icmp sgt <8 x i32> %a, %b263 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b264 ret <8 x i32> %2265}266 267define <8 x i16> @max_gt_v8i16(<8 x i16> %a, <8 x i16> %b) {268; SSE-LABEL: max_gt_v8i16:269; SSE: # %bb.0:270; SSE-NEXT: pmaxsw %xmm1, %xmm0271; SSE-NEXT: retq272;273; AVX-LABEL: max_gt_v8i16:274; AVX: # %bb.0:275; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0276; AVX-NEXT: retq277 %1 = icmp sgt <8 x i16> %a, %b278 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b279 ret <8 x i16> %2280}281 282define <16 x i16> @max_gt_v16i16(<16 x i16> %a, <16 x i16> %b) {283; SSE-LABEL: max_gt_v16i16:284; SSE: # %bb.0:285; SSE-NEXT: pmaxsw %xmm2, %xmm0286; SSE-NEXT: pmaxsw %xmm3, %xmm1287; SSE-NEXT: retq288;289; AVX1-LABEL: max_gt_v16i16:290; AVX1: # %bb.0:291; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2292; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3293; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2294; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0295; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0296; AVX1-NEXT: retq297;298; AVX2-LABEL: max_gt_v16i16:299; AVX2: # %bb.0:300; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0301; AVX2-NEXT: retq302;303; AVX512-LABEL: max_gt_v16i16:304; AVX512: # %bb.0:305; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0306; AVX512-NEXT: retq307 %1 = icmp sgt <16 x i16> %a, %b308 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b309 ret <16 x i16> %2310}311 312define <16 x i8> @max_gt_v16i8(<16 x i8> %a, <16 x i8> %b) {313; SSE2-LABEL: max_gt_v16i8:314; SSE2: # %bb.0:315; SSE2-NEXT: movdqa %xmm0, %xmm2316; SSE2-NEXT: pcmpgtb %xmm1, %xmm2317; SSE2-NEXT: pand %xmm2, %xmm0318; SSE2-NEXT: pandn %xmm1, %xmm2319; SSE2-NEXT: por %xmm2, %xmm0320; SSE2-NEXT: retq321;322; SSE41-LABEL: max_gt_v16i8:323; SSE41: # %bb.0:324; SSE41-NEXT: pmaxsb %xmm1, %xmm0325; SSE41-NEXT: retq326;327; SSE42-LABEL: max_gt_v16i8:328; SSE42: # %bb.0:329; SSE42-NEXT: pmaxsb %xmm1, %xmm0330; SSE42-NEXT: retq331;332; AVX-LABEL: max_gt_v16i8:333; AVX: # %bb.0:334; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0335; AVX-NEXT: retq336 %1 = icmp sgt <16 x i8> %a, %b337 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b338 ret <16 x i8> %2339}340 341define <32 x i8> @max_gt_v32i8(<32 x i8> %a, <32 x i8> %b) {342; SSE2-LABEL: max_gt_v32i8:343; SSE2: # %bb.0:344; SSE2-NEXT: movdqa %xmm0, %xmm4345; SSE2-NEXT: pcmpgtb %xmm2, %xmm4346; SSE2-NEXT: pand %xmm4, %xmm0347; SSE2-NEXT: pandn %xmm2, %xmm4348; SSE2-NEXT: por %xmm4, %xmm0349; SSE2-NEXT: movdqa %xmm1, %xmm2350; SSE2-NEXT: pcmpgtb %xmm3, %xmm2351; SSE2-NEXT: pand %xmm2, %xmm1352; SSE2-NEXT: pandn %xmm3, %xmm2353; SSE2-NEXT: por %xmm2, %xmm1354; SSE2-NEXT: retq355;356; SSE41-LABEL: max_gt_v32i8:357; SSE41: # %bb.0:358; SSE41-NEXT: pmaxsb %xmm2, %xmm0359; SSE41-NEXT: pmaxsb %xmm3, %xmm1360; SSE41-NEXT: retq361;362; SSE42-LABEL: max_gt_v32i8:363; SSE42: # %bb.0:364; SSE42-NEXT: pmaxsb %xmm2, %xmm0365; SSE42-NEXT: pmaxsb %xmm3, %xmm1366; SSE42-NEXT: retq367;368; AVX1-LABEL: max_gt_v32i8:369; AVX1: # %bb.0:370; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2371; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3372; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2373; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0374; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0375; AVX1-NEXT: retq376;377; AVX2-LABEL: max_gt_v32i8:378; AVX2: # %bb.0:379; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0380; AVX2-NEXT: retq381;382; AVX512-LABEL: max_gt_v32i8:383; AVX512: # %bb.0:384; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0385; AVX512-NEXT: retq386 %1 = icmp sgt <32 x i8> %a, %b387 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b388 ret <32 x i8> %2389}390 391;392; Signed Maximum (GE)393;394 395define <2 x i64> @max_ge_v2i64(<2 x i64> %a, <2 x i64> %b) {396; SSE2-LABEL: max_ge_v2i64:397; SSE2: # %bb.0:398; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648]399; SSE2-NEXT: movdqa %xmm1, %xmm3400; SSE2-NEXT: pxor %xmm2, %xmm3401; SSE2-NEXT: pxor %xmm0, %xmm2402; SSE2-NEXT: movdqa %xmm2, %xmm4403; SSE2-NEXT: pcmpgtd %xmm3, %xmm4404; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]405; SSE2-NEXT: pcmpeqd %xmm3, %xmm2406; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]407; SSE2-NEXT: pand %xmm5, %xmm2408; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]409; SSE2-NEXT: por %xmm2, %xmm3410; SSE2-NEXT: pand %xmm3, %xmm0411; SSE2-NEXT: pandn %xmm1, %xmm3412; SSE2-NEXT: por %xmm3, %xmm0413; SSE2-NEXT: retq414;415; SSE41-LABEL: max_ge_v2i64:416; SSE41: # %bb.0:417; SSE41-NEXT: movdqa %xmm0, %xmm2418; SSE41-NEXT: pmovzxdq {{.*#+}} xmm3 = [2147483648,2147483648]419; SSE41-NEXT: movdqa %xmm1, %xmm0420; SSE41-NEXT: pxor %xmm3, %xmm0421; SSE41-NEXT: pxor %xmm2, %xmm3422; SSE41-NEXT: movdqa %xmm3, %xmm4423; SSE41-NEXT: pcmpeqd %xmm0, %xmm4424; SSE41-NEXT: pcmpgtd %xmm0, %xmm3425; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]426; SSE41-NEXT: pand %xmm4, %xmm0427; SSE41-NEXT: por %xmm3, %xmm0428; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm1429; SSE41-NEXT: movapd %xmm1, %xmm0430; SSE41-NEXT: retq431;432; SSE42-LABEL: max_ge_v2i64:433; SSE42: # %bb.0:434; SSE42-NEXT: movdqa %xmm0, %xmm2435; SSE42-NEXT: pcmpgtq %xmm1, %xmm0436; SSE42-NEXT: blendvpd %xmm0, %xmm2, %xmm1437; SSE42-NEXT: movapd %xmm1, %xmm0438; SSE42-NEXT: retq439;440; AVX1-LABEL: max_ge_v2i64:441; AVX1: # %bb.0:442; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2443; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0444; AVX1-NEXT: retq445;446; AVX2-LABEL: max_ge_v2i64:447; AVX2: # %bb.0:448; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2449; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0450; AVX2-NEXT: retq451;452; AVX512-LABEL: max_ge_v2i64:453; AVX512: # %bb.0:454; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1455; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0456; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0457; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0458; AVX512-NEXT: vzeroupper459; AVX512-NEXT: retq460 %1 = icmp sge <2 x i64> %a, %b461 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b462 ret <2 x i64> %2463}464 465define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) {466; SSE2-LABEL: max_ge_v4i64:467; SSE2: # %bb.0:468; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]469; SSE2-NEXT: movdqa %xmm2, %xmm5470; SSE2-NEXT: pxor %xmm4, %xmm5471; SSE2-NEXT: movdqa %xmm0, %xmm6472; SSE2-NEXT: pxor %xmm4, %xmm6473; SSE2-NEXT: movdqa %xmm6, %xmm7474; SSE2-NEXT: pcmpgtd %xmm5, %xmm7475; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]476; SSE2-NEXT: pcmpeqd %xmm5, %xmm6477; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]478; SSE2-NEXT: pand %xmm8, %xmm5479; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]480; SSE2-NEXT: por %xmm5, %xmm6481; SSE2-NEXT: pand %xmm6, %xmm0482; SSE2-NEXT: pandn %xmm2, %xmm6483; SSE2-NEXT: por %xmm6, %xmm0484; SSE2-NEXT: movdqa %xmm3, %xmm2485; SSE2-NEXT: pxor %xmm4, %xmm2486; SSE2-NEXT: pxor %xmm1, %xmm4487; SSE2-NEXT: movdqa %xmm4, %xmm5488; SSE2-NEXT: pcmpgtd %xmm2, %xmm5489; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]490; SSE2-NEXT: pcmpeqd %xmm2, %xmm4491; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]492; SSE2-NEXT: pand %xmm6, %xmm2493; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]494; SSE2-NEXT: por %xmm2, %xmm4495; SSE2-NEXT: pand %xmm4, %xmm1496; SSE2-NEXT: pandn %xmm3, %xmm4497; SSE2-NEXT: por %xmm4, %xmm1498; SSE2-NEXT: retq499;500; SSE41-LABEL: max_ge_v4i64:501; SSE41: # %bb.0:502; SSE41-NEXT: movdqa %xmm0, %xmm4503; SSE41-NEXT: pmovzxdq {{.*#+}} xmm5 = [2147483648,2147483648]504; SSE41-NEXT: movdqa %xmm2, %xmm0505; SSE41-NEXT: pxor %xmm5, %xmm0506; SSE41-NEXT: movdqa %xmm4, %xmm6507; SSE41-NEXT: pxor %xmm5, %xmm6508; SSE41-NEXT: movdqa %xmm6, %xmm7509; SSE41-NEXT: pcmpeqd %xmm0, %xmm7510; SSE41-NEXT: pcmpgtd %xmm0, %xmm6511; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]512; SSE41-NEXT: pand %xmm7, %xmm0513; SSE41-NEXT: por %xmm6, %xmm0514; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2515; SSE41-NEXT: movdqa %xmm3, %xmm0516; SSE41-NEXT: pxor %xmm5, %xmm0517; SSE41-NEXT: pxor %xmm1, %xmm5518; SSE41-NEXT: movdqa %xmm5, %xmm4519; SSE41-NEXT: pcmpeqd %xmm0, %xmm4520; SSE41-NEXT: pcmpgtd %xmm0, %xmm5521; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]522; SSE41-NEXT: pand %xmm4, %xmm0523; SSE41-NEXT: por %xmm5, %xmm0524; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm3525; SSE41-NEXT: movapd %xmm2, %xmm0526; SSE41-NEXT: movapd %xmm3, %xmm1527; SSE41-NEXT: retq528;529; SSE42-LABEL: max_ge_v4i64:530; SSE42: # %bb.0:531; SSE42-NEXT: movdqa %xmm0, %xmm4532; SSE42-NEXT: pcmpgtq %xmm2, %xmm0533; SSE42-NEXT: blendvpd %xmm0, %xmm4, %xmm2534; SSE42-NEXT: movdqa %xmm1, %xmm0535; SSE42-NEXT: pcmpgtq %xmm3, %xmm0536; SSE42-NEXT: blendvpd %xmm0, %xmm1, %xmm3537; SSE42-NEXT: movapd %xmm2, %xmm0538; SSE42-NEXT: movapd %xmm3, %xmm1539; SSE42-NEXT: retq540;541; AVX1-LABEL: max_ge_v4i64:542; AVX1: # %bb.0:543; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2544; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3545; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2546; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3547; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2548; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0549; AVX1-NEXT: retq550;551; AVX2-LABEL: max_ge_v4i64:552; AVX2: # %bb.0:553; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2554; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0555; AVX2-NEXT: retq556;557; AVX512-LABEL: max_ge_v4i64:558; AVX512: # %bb.0:559; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1560; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0561; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0562; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0563; AVX512-NEXT: retq564 %1 = icmp sge <4 x i64> %a, %b565 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b566 ret <4 x i64> %2567}568 569define <4 x i32> @max_ge_v4i32(<4 x i32> %a, <4 x i32> %b) {570; SSE2-LABEL: max_ge_v4i32:571; SSE2: # %bb.0:572; SSE2-NEXT: movdqa %xmm0, %xmm2573; SSE2-NEXT: pcmpgtd %xmm1, %xmm2574; SSE2-NEXT: pand %xmm2, %xmm0575; SSE2-NEXT: pandn %xmm1, %xmm2576; SSE2-NEXT: por %xmm2, %xmm0577; SSE2-NEXT: retq578;579; SSE41-LABEL: max_ge_v4i32:580; SSE41: # %bb.0:581; SSE41-NEXT: pmaxsd %xmm1, %xmm0582; SSE41-NEXT: retq583;584; SSE42-LABEL: max_ge_v4i32:585; SSE42: # %bb.0:586; SSE42-NEXT: pmaxsd %xmm1, %xmm0587; SSE42-NEXT: retq588;589; AVX-LABEL: max_ge_v4i32:590; AVX: # %bb.0:591; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0592; AVX-NEXT: retq593 %1 = icmp sge <4 x i32> %a, %b594 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b595 ret <4 x i32> %2596}597 598define <8 x i32> @max_ge_v8i32(<8 x i32> %a, <8 x i32> %b) {599; SSE2-LABEL: max_ge_v8i32:600; SSE2: # %bb.0:601; SSE2-NEXT: movdqa %xmm0, %xmm4602; SSE2-NEXT: pcmpgtd %xmm2, %xmm4603; SSE2-NEXT: pand %xmm4, %xmm0604; SSE2-NEXT: pandn %xmm2, %xmm4605; SSE2-NEXT: por %xmm4, %xmm0606; SSE2-NEXT: movdqa %xmm1, %xmm2607; SSE2-NEXT: pcmpgtd %xmm3, %xmm2608; SSE2-NEXT: pand %xmm2, %xmm1609; SSE2-NEXT: pandn %xmm3, %xmm2610; SSE2-NEXT: por %xmm2, %xmm1611; SSE2-NEXT: retq612;613; SSE41-LABEL: max_ge_v8i32:614; SSE41: # %bb.0:615; SSE41-NEXT: pmaxsd %xmm2, %xmm0616; SSE41-NEXT: pmaxsd %xmm3, %xmm1617; SSE41-NEXT: retq618;619; SSE42-LABEL: max_ge_v8i32:620; SSE42: # %bb.0:621; SSE42-NEXT: pmaxsd %xmm2, %xmm0622; SSE42-NEXT: pmaxsd %xmm3, %xmm1623; SSE42-NEXT: retq624;625; AVX1-LABEL: max_ge_v8i32:626; AVX1: # %bb.0:627; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2628; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3629; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2630; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0631; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0632; AVX1-NEXT: retq633;634; AVX2-LABEL: max_ge_v8i32:635; AVX2: # %bb.0:636; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0637; AVX2-NEXT: retq638;639; AVX512-LABEL: max_ge_v8i32:640; AVX512: # %bb.0:641; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0642; AVX512-NEXT: retq643 %1 = icmp sge <8 x i32> %a, %b644 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b645 ret <8 x i32> %2646}647 648define <8 x i16> @max_ge_v8i16(<8 x i16> %a, <8 x i16> %b) {649; SSE-LABEL: max_ge_v8i16:650; SSE: # %bb.0:651; SSE-NEXT: pmaxsw %xmm1, %xmm0652; SSE-NEXT: retq653;654; AVX-LABEL: max_ge_v8i16:655; AVX: # %bb.0:656; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0657; AVX-NEXT: retq658 %1 = icmp sge <8 x i16> %a, %b659 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b660 ret <8 x i16> %2661}662 663define <16 x i16> @max_ge_v16i16(<16 x i16> %a, <16 x i16> %b) {664; SSE-LABEL: max_ge_v16i16:665; SSE: # %bb.0:666; SSE-NEXT: pmaxsw %xmm2, %xmm0667; SSE-NEXT: pmaxsw %xmm3, %xmm1668; SSE-NEXT: retq669;670; AVX1-LABEL: max_ge_v16i16:671; AVX1: # %bb.0:672; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2673; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3674; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2675; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0676; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0677; AVX1-NEXT: retq678;679; AVX2-LABEL: max_ge_v16i16:680; AVX2: # %bb.0:681; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0682; AVX2-NEXT: retq683;684; AVX512-LABEL: max_ge_v16i16:685; AVX512: # %bb.0:686; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0687; AVX512-NEXT: retq688 %1 = icmp sge <16 x i16> %a, %b689 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b690 ret <16 x i16> %2691}692 693define <16 x i8> @max_ge_v16i8(<16 x i8> %a, <16 x i8> %b) {694; SSE2-LABEL: max_ge_v16i8:695; SSE2: # %bb.0:696; SSE2-NEXT: movdqa %xmm0, %xmm2697; SSE2-NEXT: pcmpgtb %xmm1, %xmm2698; SSE2-NEXT: pand %xmm2, %xmm0699; SSE2-NEXT: pandn %xmm1, %xmm2700; SSE2-NEXT: por %xmm2, %xmm0701; SSE2-NEXT: retq702;703; SSE41-LABEL: max_ge_v16i8:704; SSE41: # %bb.0:705; SSE41-NEXT: pmaxsb %xmm1, %xmm0706; SSE41-NEXT: retq707;708; SSE42-LABEL: max_ge_v16i8:709; SSE42: # %bb.0:710; SSE42-NEXT: pmaxsb %xmm1, %xmm0711; SSE42-NEXT: retq712;713; AVX-LABEL: max_ge_v16i8:714; AVX: # %bb.0:715; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0716; AVX-NEXT: retq717 %1 = icmp sge <16 x i8> %a, %b718 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b719 ret <16 x i8> %2720}721 722define <32 x i8> @max_ge_v32i8(<32 x i8> %a, <32 x i8> %b) {723; SSE2-LABEL: max_ge_v32i8:724; SSE2: # %bb.0:725; SSE2-NEXT: movdqa %xmm0, %xmm4726; SSE2-NEXT: pcmpgtb %xmm2, %xmm4727; SSE2-NEXT: pand %xmm4, %xmm0728; SSE2-NEXT: pandn %xmm2, %xmm4729; SSE2-NEXT: por %xmm4, %xmm0730; SSE2-NEXT: movdqa %xmm1, %xmm2731; SSE2-NEXT: pcmpgtb %xmm3, %xmm2732; SSE2-NEXT: pand %xmm2, %xmm1733; SSE2-NEXT: pandn %xmm3, %xmm2734; SSE2-NEXT: por %xmm2, %xmm1735; SSE2-NEXT: retq736;737; SSE41-LABEL: max_ge_v32i8:738; SSE41: # %bb.0:739; SSE41-NEXT: pmaxsb %xmm2, %xmm0740; SSE41-NEXT: pmaxsb %xmm3, %xmm1741; SSE41-NEXT: retq742;743; SSE42-LABEL: max_ge_v32i8:744; SSE42: # %bb.0:745; SSE42-NEXT: pmaxsb %xmm2, %xmm0746; SSE42-NEXT: pmaxsb %xmm3, %xmm1747; SSE42-NEXT: retq748;749; AVX1-LABEL: max_ge_v32i8:750; AVX1: # %bb.0:751; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2752; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3753; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2754; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0755; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0756; AVX1-NEXT: retq757;758; AVX2-LABEL: max_ge_v32i8:759; AVX2: # %bb.0:760; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0761; AVX2-NEXT: retq762;763; AVX512-LABEL: max_ge_v32i8:764; AVX512: # %bb.0:765; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0766; AVX512-NEXT: retq767 %1 = icmp sge <32 x i8> %a, %b768 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b769 ret <32 x i8> %2770}771 772;773; Signed Minimum (LT)774;775 776define <2 x i64> @min_lt_v2i64(<2 x i64> %a, <2 x i64> %b) {777; SSE2-LABEL: min_lt_v2i64:778; SSE2: # %bb.0:779; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648]780; SSE2-NEXT: movdqa %xmm0, %xmm3781; SSE2-NEXT: pxor %xmm2, %xmm3782; SSE2-NEXT: pxor %xmm1, %xmm2783; SSE2-NEXT: movdqa %xmm2, %xmm4784; SSE2-NEXT: pcmpgtd %xmm3, %xmm4785; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]786; SSE2-NEXT: pcmpeqd %xmm3, %xmm2787; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]788; SSE2-NEXT: pand %xmm5, %xmm2789; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]790; SSE2-NEXT: por %xmm2, %xmm3791; SSE2-NEXT: pand %xmm3, %xmm0792; SSE2-NEXT: pandn %xmm1, %xmm3793; SSE2-NEXT: por %xmm3, %xmm0794; SSE2-NEXT: retq795;796; SSE41-LABEL: min_lt_v2i64:797; SSE41: # %bb.0:798; SSE41-NEXT: movdqa %xmm0, %xmm2799; SSE41-NEXT: pmovzxdq {{.*#+}} xmm3 = [2147483648,2147483648]800; SSE41-NEXT: pxor %xmm3, %xmm0801; SSE41-NEXT: pxor %xmm1, %xmm3802; SSE41-NEXT: movdqa %xmm3, %xmm4803; SSE41-NEXT: pcmpeqd %xmm0, %xmm4804; SSE41-NEXT: pcmpgtd %xmm0, %xmm3805; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]806; SSE41-NEXT: pand %xmm4, %xmm0807; SSE41-NEXT: por %xmm3, %xmm0808; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm1809; SSE41-NEXT: movapd %xmm1, %xmm0810; SSE41-NEXT: retq811;812; SSE42-LABEL: min_lt_v2i64:813; SSE42: # %bb.0:814; SSE42-NEXT: movdqa %xmm0, %xmm2815; SSE42-NEXT: movdqa %xmm1, %xmm0816; SSE42-NEXT: pcmpgtq %xmm2, %xmm0817; SSE42-NEXT: blendvpd %xmm0, %xmm2, %xmm1818; SSE42-NEXT: movapd %xmm1, %xmm0819; SSE42-NEXT: retq820;821; AVX1-LABEL: min_lt_v2i64:822; AVX1: # %bb.0:823; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2824; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0825; AVX1-NEXT: retq826;827; AVX2-LABEL: min_lt_v2i64:828; AVX2: # %bb.0:829; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2830; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0831; AVX2-NEXT: retq832;833; AVX512-LABEL: min_lt_v2i64:834; AVX512: # %bb.0:835; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1836; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0837; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0838; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0839; AVX512-NEXT: vzeroupper840; AVX512-NEXT: retq841 %1 = icmp slt <2 x i64> %a, %b842 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b843 ret <2 x i64> %2844}845 846define <4 x i64> @min_lt_v4i64(<4 x i64> %a, <4 x i64> %b) {847; SSE2-LABEL: min_lt_v4i64:848; SSE2: # %bb.0:849; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]850; SSE2-NEXT: movdqa %xmm0, %xmm5851; SSE2-NEXT: pxor %xmm4, %xmm5852; SSE2-NEXT: movdqa %xmm2, %xmm6853; SSE2-NEXT: pxor %xmm4, %xmm6854; SSE2-NEXT: movdqa %xmm6, %xmm7855; SSE2-NEXT: pcmpgtd %xmm5, %xmm7856; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]857; SSE2-NEXT: pcmpeqd %xmm5, %xmm6858; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]859; SSE2-NEXT: pand %xmm8, %xmm5860; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]861; SSE2-NEXT: por %xmm5, %xmm6862; SSE2-NEXT: pand %xmm6, %xmm0863; SSE2-NEXT: pandn %xmm2, %xmm6864; SSE2-NEXT: por %xmm6, %xmm0865; SSE2-NEXT: movdqa %xmm1, %xmm2866; SSE2-NEXT: pxor %xmm4, %xmm2867; SSE2-NEXT: pxor %xmm3, %xmm4868; SSE2-NEXT: movdqa %xmm4, %xmm5869; SSE2-NEXT: pcmpgtd %xmm2, %xmm5870; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]871; SSE2-NEXT: pcmpeqd %xmm2, %xmm4872; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]873; SSE2-NEXT: pand %xmm6, %xmm2874; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]875; SSE2-NEXT: por %xmm2, %xmm4876; SSE2-NEXT: pand %xmm4, %xmm1877; SSE2-NEXT: pandn %xmm3, %xmm4878; SSE2-NEXT: por %xmm4, %xmm1879; SSE2-NEXT: retq880;881; SSE41-LABEL: min_lt_v4i64:882; SSE41: # %bb.0:883; SSE41-NEXT: movdqa %xmm0, %xmm4884; SSE41-NEXT: pmovzxdq {{.*#+}} xmm5 = [2147483648,2147483648]885; SSE41-NEXT: pxor %xmm5, %xmm0886; SSE41-NEXT: movdqa %xmm2, %xmm6887; SSE41-NEXT: pxor %xmm5, %xmm6888; SSE41-NEXT: movdqa %xmm6, %xmm7889; SSE41-NEXT: pcmpeqd %xmm0, %xmm7890; SSE41-NEXT: pcmpgtd %xmm0, %xmm6891; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]892; SSE41-NEXT: pand %xmm7, %xmm0893; SSE41-NEXT: por %xmm6, %xmm0894; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2895; SSE41-NEXT: movdqa %xmm1, %xmm0896; SSE41-NEXT: pxor %xmm5, %xmm0897; SSE41-NEXT: pxor %xmm3, %xmm5898; SSE41-NEXT: movdqa %xmm5, %xmm4899; SSE41-NEXT: pcmpeqd %xmm0, %xmm4900; SSE41-NEXT: pcmpgtd %xmm0, %xmm5901; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]902; SSE41-NEXT: pand %xmm4, %xmm0903; SSE41-NEXT: por %xmm5, %xmm0904; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm3905; SSE41-NEXT: movapd %xmm2, %xmm0906; SSE41-NEXT: movapd %xmm3, %xmm1907; SSE41-NEXT: retq908;909; SSE42-LABEL: min_lt_v4i64:910; SSE42: # %bb.0:911; SSE42-NEXT: movdqa %xmm0, %xmm4912; SSE42-NEXT: movdqa %xmm2, %xmm0913; SSE42-NEXT: pcmpgtq %xmm4, %xmm0914; SSE42-NEXT: blendvpd %xmm0, %xmm4, %xmm2915; SSE42-NEXT: movdqa %xmm3, %xmm0916; SSE42-NEXT: pcmpgtq %xmm1, %xmm0917; SSE42-NEXT: blendvpd %xmm0, %xmm1, %xmm3918; SSE42-NEXT: movapd %xmm2, %xmm0919; SSE42-NEXT: movapd %xmm3, %xmm1920; SSE42-NEXT: retq921;922; AVX1-LABEL: min_lt_v4i64:923; AVX1: # %bb.0:924; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2925; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3926; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2927; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3928; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2929; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0930; AVX1-NEXT: retq931;932; AVX2-LABEL: min_lt_v4i64:933; AVX2: # %bb.0:934; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2935; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0936; AVX2-NEXT: retq937;938; AVX512-LABEL: min_lt_v4i64:939; AVX512: # %bb.0:940; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1941; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0942; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0943; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0944; AVX512-NEXT: retq945 %1 = icmp slt <4 x i64> %a, %b946 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b947 ret <4 x i64> %2948}949 950define <4 x i32> @min_lt_v4i32(<4 x i32> %a, <4 x i32> %b) {951; SSE2-LABEL: min_lt_v4i32:952; SSE2: # %bb.0:953; SSE2-NEXT: movdqa %xmm1, %xmm2954; SSE2-NEXT: pcmpgtd %xmm0, %xmm2955; SSE2-NEXT: pand %xmm2, %xmm0956; SSE2-NEXT: pandn %xmm1, %xmm2957; SSE2-NEXT: por %xmm2, %xmm0958; SSE2-NEXT: retq959;960; SSE41-LABEL: min_lt_v4i32:961; SSE41: # %bb.0:962; SSE41-NEXT: pminsd %xmm1, %xmm0963; SSE41-NEXT: retq964;965; SSE42-LABEL: min_lt_v4i32:966; SSE42: # %bb.0:967; SSE42-NEXT: pminsd %xmm1, %xmm0968; SSE42-NEXT: retq969;970; AVX-LABEL: min_lt_v4i32:971; AVX: # %bb.0:972; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0973; AVX-NEXT: retq974 %1 = icmp slt <4 x i32> %a, %b975 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b976 ret <4 x i32> %2977}978 979define <8 x i32> @min_lt_v8i32(<8 x i32> %a, <8 x i32> %b) {980; SSE2-LABEL: min_lt_v8i32:981; SSE2: # %bb.0:982; SSE2-NEXT: movdqa %xmm2, %xmm4983; SSE2-NEXT: pcmpgtd %xmm0, %xmm4984; SSE2-NEXT: pand %xmm4, %xmm0985; SSE2-NEXT: pandn %xmm2, %xmm4986; SSE2-NEXT: por %xmm4, %xmm0987; SSE2-NEXT: movdqa %xmm3, %xmm2988; SSE2-NEXT: pcmpgtd %xmm1, %xmm2989; SSE2-NEXT: pand %xmm2, %xmm1990; SSE2-NEXT: pandn %xmm3, %xmm2991; SSE2-NEXT: por %xmm2, %xmm1992; SSE2-NEXT: retq993;994; SSE41-LABEL: min_lt_v8i32:995; SSE41: # %bb.0:996; SSE41-NEXT: pminsd %xmm2, %xmm0997; SSE41-NEXT: pminsd %xmm3, %xmm1998; SSE41-NEXT: retq999;1000; SSE42-LABEL: min_lt_v8i32:1001; SSE42: # %bb.0:1002; SSE42-NEXT: pminsd %xmm2, %xmm01003; SSE42-NEXT: pminsd %xmm3, %xmm11004; SSE42-NEXT: retq1005;1006; AVX1-LABEL: min_lt_v8i32:1007; AVX1: # %bb.0:1008; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21009; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31010; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm21011; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm01012; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01013; AVX1-NEXT: retq1014;1015; AVX2-LABEL: min_lt_v8i32:1016; AVX2: # %bb.0:1017; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm01018; AVX2-NEXT: retq1019;1020; AVX512-LABEL: min_lt_v8i32:1021; AVX512: # %bb.0:1022; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm01023; AVX512-NEXT: retq1024 %1 = icmp slt <8 x i32> %a, %b1025 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b1026 ret <8 x i32> %21027}1028 1029define <8 x i16> @min_lt_v8i16(<8 x i16> %a, <8 x i16> %b) {1030; SSE-LABEL: min_lt_v8i16:1031; SSE: # %bb.0:1032; SSE-NEXT: pminsw %xmm1, %xmm01033; SSE-NEXT: retq1034;1035; AVX-LABEL: min_lt_v8i16:1036; AVX: # %bb.0:1037; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm01038; AVX-NEXT: retq1039 %1 = icmp slt <8 x i16> %a, %b1040 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b1041 ret <8 x i16> %21042}1043 1044define <16 x i16> @min_lt_v16i16(<16 x i16> %a, <16 x i16> %b) {1045; SSE-LABEL: min_lt_v16i16:1046; SSE: # %bb.0:1047; SSE-NEXT: pminsw %xmm2, %xmm01048; SSE-NEXT: pminsw %xmm3, %xmm11049; SSE-NEXT: retq1050;1051; AVX1-LABEL: min_lt_v16i16:1052; AVX1: # %bb.0:1053; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21054; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31055; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm21056; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm01057; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01058; AVX1-NEXT: retq1059;1060; AVX2-LABEL: min_lt_v16i16:1061; AVX2: # %bb.0:1062; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm01063; AVX2-NEXT: retq1064;1065; AVX512-LABEL: min_lt_v16i16:1066; AVX512: # %bb.0:1067; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm01068; AVX512-NEXT: retq1069 %1 = icmp slt <16 x i16> %a, %b1070 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b1071 ret <16 x i16> %21072}1073 1074define <16 x i8> @min_lt_v16i8(<16 x i8> %a, <16 x i8> %b) {1075; SSE2-LABEL: min_lt_v16i8:1076; SSE2: # %bb.0:1077; SSE2-NEXT: movdqa %xmm1, %xmm21078; SSE2-NEXT: pcmpgtb %xmm0, %xmm21079; SSE2-NEXT: pand %xmm2, %xmm01080; SSE2-NEXT: pandn %xmm1, %xmm21081; SSE2-NEXT: por %xmm2, %xmm01082; SSE2-NEXT: retq1083;1084; SSE41-LABEL: min_lt_v16i8:1085; SSE41: # %bb.0:1086; SSE41-NEXT: pminsb %xmm1, %xmm01087; SSE41-NEXT: retq1088;1089; SSE42-LABEL: min_lt_v16i8:1090; SSE42: # %bb.0:1091; SSE42-NEXT: pminsb %xmm1, %xmm01092; SSE42-NEXT: retq1093;1094; AVX-LABEL: min_lt_v16i8:1095; AVX: # %bb.0:1096; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm01097; AVX-NEXT: retq1098 %1 = icmp slt <16 x i8> %a, %b1099 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b1100 ret <16 x i8> %21101}1102 1103define <32 x i8> @min_lt_v32i8(<32 x i8> %a, <32 x i8> %b) {1104; SSE2-LABEL: min_lt_v32i8:1105; SSE2: # %bb.0:1106; SSE2-NEXT: movdqa %xmm2, %xmm41107; SSE2-NEXT: pcmpgtb %xmm0, %xmm41108; SSE2-NEXT: pand %xmm4, %xmm01109; SSE2-NEXT: pandn %xmm2, %xmm41110; SSE2-NEXT: por %xmm4, %xmm01111; SSE2-NEXT: movdqa %xmm3, %xmm21112; SSE2-NEXT: pcmpgtb %xmm1, %xmm21113; SSE2-NEXT: pand %xmm2, %xmm11114; SSE2-NEXT: pandn %xmm3, %xmm21115; SSE2-NEXT: por %xmm2, %xmm11116; SSE2-NEXT: retq1117;1118; SSE41-LABEL: min_lt_v32i8:1119; SSE41: # %bb.0:1120; SSE41-NEXT: pminsb %xmm2, %xmm01121; SSE41-NEXT: pminsb %xmm3, %xmm11122; SSE41-NEXT: retq1123;1124; SSE42-LABEL: min_lt_v32i8:1125; SSE42: # %bb.0:1126; SSE42-NEXT: pminsb %xmm2, %xmm01127; SSE42-NEXT: pminsb %xmm3, %xmm11128; SSE42-NEXT: retq1129;1130; AVX1-LABEL: min_lt_v32i8:1131; AVX1: # %bb.0:1132; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21133; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31134; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm21135; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm01136; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01137; AVX1-NEXT: retq1138;1139; AVX2-LABEL: min_lt_v32i8:1140; AVX2: # %bb.0:1141; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm01142; AVX2-NEXT: retq1143;1144; AVX512-LABEL: min_lt_v32i8:1145; AVX512: # %bb.0:1146; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm01147; AVX512-NEXT: retq1148 %1 = icmp slt <32 x i8> %a, %b1149 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b1150 ret <32 x i8> %21151}1152 1153;1154; Signed Minimum (LE)1155;1156 1157define <2 x i64> @min_le_v2i64(<2 x i64> %a, <2 x i64> %b) {1158; SSE2-LABEL: min_le_v2i64:1159; SSE2: # %bb.0:1160; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648]1161; SSE2-NEXT: movdqa %xmm0, %xmm31162; SSE2-NEXT: pxor %xmm2, %xmm31163; SSE2-NEXT: pxor %xmm1, %xmm21164; SSE2-NEXT: movdqa %xmm2, %xmm41165; SSE2-NEXT: pcmpgtd %xmm3, %xmm41166; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1167; SSE2-NEXT: pcmpeqd %xmm3, %xmm21168; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1169; SSE2-NEXT: pand %xmm5, %xmm21170; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]1171; SSE2-NEXT: por %xmm2, %xmm31172; SSE2-NEXT: pand %xmm3, %xmm01173; SSE2-NEXT: pandn %xmm1, %xmm31174; SSE2-NEXT: por %xmm3, %xmm01175; SSE2-NEXT: retq1176;1177; SSE41-LABEL: min_le_v2i64:1178; SSE41: # %bb.0:1179; SSE41-NEXT: movdqa %xmm0, %xmm21180; SSE41-NEXT: pmovzxdq {{.*#+}} xmm3 = [2147483648,2147483648]1181; SSE41-NEXT: pxor %xmm3, %xmm01182; SSE41-NEXT: pxor %xmm1, %xmm31183; SSE41-NEXT: movdqa %xmm3, %xmm41184; SSE41-NEXT: pcmpeqd %xmm0, %xmm41185; SSE41-NEXT: pcmpgtd %xmm0, %xmm31186; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]1187; SSE41-NEXT: pand %xmm4, %xmm01188; SSE41-NEXT: por %xmm3, %xmm01189; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm11190; SSE41-NEXT: movapd %xmm1, %xmm01191; SSE41-NEXT: retq1192;1193; SSE42-LABEL: min_le_v2i64:1194; SSE42: # %bb.0:1195; SSE42-NEXT: movdqa %xmm0, %xmm21196; SSE42-NEXT: movdqa %xmm1, %xmm01197; SSE42-NEXT: pcmpgtq %xmm2, %xmm01198; SSE42-NEXT: blendvpd %xmm0, %xmm2, %xmm11199; SSE42-NEXT: movapd %xmm1, %xmm01200; SSE42-NEXT: retq1201;1202; AVX1-LABEL: min_le_v2i64:1203; AVX1: # %bb.0:1204; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm21205; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm01206; AVX1-NEXT: retq1207;1208; AVX2-LABEL: min_le_v2i64:1209; AVX2: # %bb.0:1210; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm21211; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm01212; AVX2-NEXT: retq1213;1214; AVX512-LABEL: min_le_v2i64:1215; AVX512: # %bb.0:1216; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm11217; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm01218; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm01219; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01220; AVX512-NEXT: vzeroupper1221; AVX512-NEXT: retq1222 %1 = icmp sle <2 x i64> %a, %b1223 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b1224 ret <2 x i64> %21225}1226 1227define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) {1228; SSE2-LABEL: min_le_v4i64:1229; SSE2: # %bb.0:1230; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]1231; SSE2-NEXT: movdqa %xmm0, %xmm51232; SSE2-NEXT: pxor %xmm4, %xmm51233; SSE2-NEXT: movdqa %xmm2, %xmm61234; SSE2-NEXT: pxor %xmm4, %xmm61235; SSE2-NEXT: movdqa %xmm6, %xmm71236; SSE2-NEXT: pcmpgtd %xmm5, %xmm71237; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]1238; SSE2-NEXT: pcmpeqd %xmm5, %xmm61239; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]1240; SSE2-NEXT: pand %xmm8, %xmm51241; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]1242; SSE2-NEXT: por %xmm5, %xmm61243; SSE2-NEXT: pand %xmm6, %xmm01244; SSE2-NEXT: pandn %xmm2, %xmm61245; SSE2-NEXT: por %xmm6, %xmm01246; SSE2-NEXT: movdqa %xmm1, %xmm21247; SSE2-NEXT: pxor %xmm4, %xmm21248; SSE2-NEXT: pxor %xmm3, %xmm41249; SSE2-NEXT: movdqa %xmm4, %xmm51250; SSE2-NEXT: pcmpgtd %xmm2, %xmm51251; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]1252; SSE2-NEXT: pcmpeqd %xmm2, %xmm41253; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]1254; SSE2-NEXT: pand %xmm6, %xmm21255; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]1256; SSE2-NEXT: por %xmm2, %xmm41257; SSE2-NEXT: pand %xmm4, %xmm11258; SSE2-NEXT: pandn %xmm3, %xmm41259; SSE2-NEXT: por %xmm4, %xmm11260; SSE2-NEXT: retq1261;1262; SSE41-LABEL: min_le_v4i64:1263; SSE41: # %bb.0:1264; SSE41-NEXT: movdqa %xmm0, %xmm41265; SSE41-NEXT: pmovzxdq {{.*#+}} xmm5 = [2147483648,2147483648]1266; SSE41-NEXT: pxor %xmm5, %xmm01267; SSE41-NEXT: movdqa %xmm2, %xmm61268; SSE41-NEXT: pxor %xmm5, %xmm61269; SSE41-NEXT: movdqa %xmm6, %xmm71270; SSE41-NEXT: pcmpeqd %xmm0, %xmm71271; SSE41-NEXT: pcmpgtd %xmm0, %xmm61272; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]1273; SSE41-NEXT: pand %xmm7, %xmm01274; SSE41-NEXT: por %xmm6, %xmm01275; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm21276; SSE41-NEXT: movdqa %xmm1, %xmm01277; SSE41-NEXT: pxor %xmm5, %xmm01278; SSE41-NEXT: pxor %xmm3, %xmm51279; SSE41-NEXT: movdqa %xmm5, %xmm41280; SSE41-NEXT: pcmpeqd %xmm0, %xmm41281; SSE41-NEXT: pcmpgtd %xmm0, %xmm51282; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]1283; SSE41-NEXT: pand %xmm4, %xmm01284; SSE41-NEXT: por %xmm5, %xmm01285; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm31286; SSE41-NEXT: movapd %xmm2, %xmm01287; SSE41-NEXT: movapd %xmm3, %xmm11288; SSE41-NEXT: retq1289;1290; SSE42-LABEL: min_le_v4i64:1291; SSE42: # %bb.0:1292; SSE42-NEXT: movdqa %xmm0, %xmm41293; SSE42-NEXT: movdqa %xmm2, %xmm01294; SSE42-NEXT: pcmpgtq %xmm4, %xmm01295; SSE42-NEXT: blendvpd %xmm0, %xmm4, %xmm21296; SSE42-NEXT: movdqa %xmm3, %xmm01297; SSE42-NEXT: pcmpgtq %xmm1, %xmm01298; SSE42-NEXT: blendvpd %xmm0, %xmm1, %xmm31299; SSE42-NEXT: movapd %xmm2, %xmm01300; SSE42-NEXT: movapd %xmm3, %xmm11301; SSE42-NEXT: retq1302;1303; AVX1-LABEL: min_le_v4i64:1304; AVX1: # %bb.0:1305; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21306; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm31307; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm21308; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm31309; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm21310; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm01311; AVX1-NEXT: retq1312;1313; AVX2-LABEL: min_le_v4i64:1314; AVX2: # %bb.0:1315; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm21316; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm01317; AVX2-NEXT: retq1318;1319; AVX512-LABEL: min_le_v4i64:1320; AVX512: # %bb.0:1321; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm11322; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01323; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm01324; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01325; AVX512-NEXT: retq1326 %1 = icmp sle <4 x i64> %a, %b1327 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b1328 ret <4 x i64> %21329}1330 1331define <4 x i32> @min_le_v4i32(<4 x i32> %a, <4 x i32> %b) {1332; SSE2-LABEL: min_le_v4i32:1333; SSE2: # %bb.0:1334; SSE2-NEXT: movdqa %xmm1, %xmm21335; SSE2-NEXT: pcmpgtd %xmm0, %xmm21336; SSE2-NEXT: pand %xmm2, %xmm01337; SSE2-NEXT: pandn %xmm1, %xmm21338; SSE2-NEXT: por %xmm2, %xmm01339; SSE2-NEXT: retq1340;1341; SSE41-LABEL: min_le_v4i32:1342; SSE41: # %bb.0:1343; SSE41-NEXT: pminsd %xmm1, %xmm01344; SSE41-NEXT: retq1345;1346; SSE42-LABEL: min_le_v4i32:1347; SSE42: # %bb.0:1348; SSE42-NEXT: pminsd %xmm1, %xmm01349; SSE42-NEXT: retq1350;1351; AVX-LABEL: min_le_v4i32:1352; AVX: # %bb.0:1353; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm01354; AVX-NEXT: retq1355 %1 = icmp sle <4 x i32> %a, %b1356 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b1357 ret <4 x i32> %21358}1359 1360define <8 x i32> @min_le_v8i32(<8 x i32> %a, <8 x i32> %b) {1361; SSE2-LABEL: min_le_v8i32:1362; SSE2: # %bb.0:1363; SSE2-NEXT: movdqa %xmm2, %xmm41364; SSE2-NEXT: pcmpgtd %xmm0, %xmm41365; SSE2-NEXT: pand %xmm4, %xmm01366; SSE2-NEXT: pandn %xmm2, %xmm41367; SSE2-NEXT: por %xmm4, %xmm01368; SSE2-NEXT: movdqa %xmm3, %xmm21369; SSE2-NEXT: pcmpgtd %xmm1, %xmm21370; SSE2-NEXT: pand %xmm2, %xmm11371; SSE2-NEXT: pandn %xmm3, %xmm21372; SSE2-NEXT: por %xmm2, %xmm11373; SSE2-NEXT: retq1374;1375; SSE41-LABEL: min_le_v8i32:1376; SSE41: # %bb.0:1377; SSE41-NEXT: pminsd %xmm2, %xmm01378; SSE41-NEXT: pminsd %xmm3, %xmm11379; SSE41-NEXT: retq1380;1381; SSE42-LABEL: min_le_v8i32:1382; SSE42: # %bb.0:1383; SSE42-NEXT: pminsd %xmm2, %xmm01384; SSE42-NEXT: pminsd %xmm3, %xmm11385; SSE42-NEXT: retq1386;1387; AVX1-LABEL: min_le_v8i32:1388; AVX1: # %bb.0:1389; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21390; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31391; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm21392; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm01393; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01394; AVX1-NEXT: retq1395;1396; AVX2-LABEL: min_le_v8i32:1397; AVX2: # %bb.0:1398; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm01399; AVX2-NEXT: retq1400;1401; AVX512-LABEL: min_le_v8i32:1402; AVX512: # %bb.0:1403; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm01404; AVX512-NEXT: retq1405 %1 = icmp sle <8 x i32> %a, %b1406 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b1407 ret <8 x i32> %21408}1409 1410define <8 x i16> @min_le_v8i16(<8 x i16> %a, <8 x i16> %b) {1411; SSE-LABEL: min_le_v8i16:1412; SSE: # %bb.0:1413; SSE-NEXT: pminsw %xmm1, %xmm01414; SSE-NEXT: retq1415;1416; AVX-LABEL: min_le_v8i16:1417; AVX: # %bb.0:1418; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm01419; AVX-NEXT: retq1420 %1 = icmp sle <8 x i16> %a, %b1421 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b1422 ret <8 x i16> %21423}1424 1425define <16 x i16> @min_le_v16i16(<16 x i16> %a, <16 x i16> %b) {1426; SSE-LABEL: min_le_v16i16:1427; SSE: # %bb.0:1428; SSE-NEXT: pminsw %xmm2, %xmm01429; SSE-NEXT: pminsw %xmm3, %xmm11430; SSE-NEXT: retq1431;1432; AVX1-LABEL: min_le_v16i16:1433; AVX1: # %bb.0:1434; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21435; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31436; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm21437; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm01438; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01439; AVX1-NEXT: retq1440;1441; AVX2-LABEL: min_le_v16i16:1442; AVX2: # %bb.0:1443; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm01444; AVX2-NEXT: retq1445;1446; AVX512-LABEL: min_le_v16i16:1447; AVX512: # %bb.0:1448; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm01449; AVX512-NEXT: retq1450 %1 = icmp sle <16 x i16> %a, %b1451 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b1452 ret <16 x i16> %21453}1454 1455define <16 x i8> @min_le_v16i8(<16 x i8> %a, <16 x i8> %b) {1456; SSE2-LABEL: min_le_v16i8:1457; SSE2: # %bb.0:1458; SSE2-NEXT: movdqa %xmm1, %xmm21459; SSE2-NEXT: pcmpgtb %xmm0, %xmm21460; SSE2-NEXT: pand %xmm2, %xmm01461; SSE2-NEXT: pandn %xmm1, %xmm21462; SSE2-NEXT: por %xmm2, %xmm01463; SSE2-NEXT: retq1464;1465; SSE41-LABEL: min_le_v16i8:1466; SSE41: # %bb.0:1467; SSE41-NEXT: pminsb %xmm1, %xmm01468; SSE41-NEXT: retq1469;1470; SSE42-LABEL: min_le_v16i8:1471; SSE42: # %bb.0:1472; SSE42-NEXT: pminsb %xmm1, %xmm01473; SSE42-NEXT: retq1474;1475; AVX-LABEL: min_le_v16i8:1476; AVX: # %bb.0:1477; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm01478; AVX-NEXT: retq1479 %1 = icmp sle <16 x i8> %a, %b1480 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b1481 ret <16 x i8> %21482}1483 1484define <32 x i8> @min_le_v32i8(<32 x i8> %a, <32 x i8> %b) {1485; SSE2-LABEL: min_le_v32i8:1486; SSE2: # %bb.0:1487; SSE2-NEXT: movdqa %xmm2, %xmm41488; SSE2-NEXT: pcmpgtb %xmm0, %xmm41489; SSE2-NEXT: pand %xmm4, %xmm01490; SSE2-NEXT: pandn %xmm2, %xmm41491; SSE2-NEXT: por %xmm4, %xmm01492; SSE2-NEXT: movdqa %xmm3, %xmm21493; SSE2-NEXT: pcmpgtb %xmm1, %xmm21494; SSE2-NEXT: pand %xmm2, %xmm11495; SSE2-NEXT: pandn %xmm3, %xmm21496; SSE2-NEXT: por %xmm2, %xmm11497; SSE2-NEXT: retq1498;1499; SSE41-LABEL: min_le_v32i8:1500; SSE41: # %bb.0:1501; SSE41-NEXT: pminsb %xmm2, %xmm01502; SSE41-NEXT: pminsb %xmm3, %xmm11503; SSE41-NEXT: retq1504;1505; SSE42-LABEL: min_le_v32i8:1506; SSE42: # %bb.0:1507; SSE42-NEXT: pminsb %xmm2, %xmm01508; SSE42-NEXT: pminsb %xmm3, %xmm11509; SSE42-NEXT: retq1510;1511; AVX1-LABEL: min_le_v32i8:1512; AVX1: # %bb.0:1513; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21514; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31515; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm21516; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm01517; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01518; AVX1-NEXT: retq1519;1520; AVX2-LABEL: min_le_v32i8:1521; AVX2: # %bb.0:1522; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm01523; AVX2-NEXT: retq1524;1525; AVX512-LABEL: min_le_v32i8:1526; AVX512: # %bb.0:1527; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm01528; AVX512-NEXT: retq1529 %1 = icmp sle <32 x i8> %a, %b1530 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b1531 ret <32 x i8> %21532}1533 1534;1535; Constant Folding1536;1537 1538define <2 x i64> @max_gt_v2i64c() {1539; SSE-LABEL: max_gt_v2i64c:1540; SSE: # %bb.0:1541; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7]1542; SSE-NEXT: retq1543;1544; AVX1-LABEL: max_gt_v2i64c:1545; AVX1: # %bb.0:1546; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]1547; AVX1-NEXT: retq1548;1549; AVX2-LABEL: max_gt_v2i64c:1550; AVX2: # %bb.0:1551; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]1552; AVX2-NEXT: retq1553;1554; AVX512-LABEL: max_gt_v2i64c:1555; AVX512: # %bb.0:1556; AVX512-NEXT: vpmovsxbq {{.*#+}} xmm0 = [18446744073709551615,7]1557; AVX512-NEXT: retq1558 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 01559 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 01560 %3 = icmp sgt <2 x i64> %1, %21561 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %21562 ret <2 x i64> %41563}1564 1565define <4 x i64> @max_gt_v4i64c() {1566; SSE-LABEL: max_gt_v4i64c:1567; SSE: # %bb.0:1568; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7]1569; SSE-NEXT: pcmpeqd %xmm0, %xmm01570; SSE-NEXT: retq1571;1572; AVX1-LABEL: max_gt_v4i64c:1573; AVX1: # %bb.0:1574; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1575; AVX1-NEXT: retq1576;1577; AVX2-LABEL: max_gt_v4i64c:1578; AVX2: # %bb.0:1579; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1580; AVX2-NEXT: retq1581;1582; AVX512-LABEL: max_gt_v4i64c:1583; AVX512: # %bb.0:1584; AVX512-NEXT: vpmovsxbq {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1585; AVX512-NEXT: retq1586 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 01587 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 01588 %3 = icmp sgt <4 x i64> %1, %21589 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %21590 ret <4 x i64> %41591}1592 1593define <4 x i32> @max_gt_v4i32c() {1594; SSE-LABEL: max_gt_v4i32c:1595; SSE: # %bb.0:1596; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1597; SSE-NEXT: retq1598;1599; AVX1-LABEL: max_gt_v4i32c:1600; AVX1: # %bb.0:1601; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1602; AVX1-NEXT: retq1603;1604; AVX2-LABEL: max_gt_v4i32c:1605; AVX2: # %bb.0:1606; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1607; AVX2-NEXT: retq1608;1609; AVX512-LABEL: max_gt_v4i32c:1610; AVX512: # %bb.0:1611; AVX512-NEXT: vpmovsxbd {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1612; AVX512-NEXT: retq1613 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 01614 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 01615 %3 = icmp sgt <4 x i32> %1, %21616 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %21617 ret <4 x i32> %41618}1619 1620define <8 x i32> @max_gt_v8i32c() {1621; SSE-LABEL: max_gt_v8i32c:1622; SSE: # %bb.0:1623; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]1624; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7]1625; SSE-NEXT: retq1626;1627; AVX1-LABEL: max_gt_v8i32c:1628; AVX1: # %bb.0:1629; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1630; AVX1-NEXT: retq1631;1632; AVX2-LABEL: max_gt_v8i32c:1633; AVX2: # %bb.0:1634; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1635; AVX2-NEXT: retq1636;1637; AVX512-LABEL: max_gt_v8i32c:1638; AVX512: # %bb.0:1639; AVX512-NEXT: vpmovsxbd {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1640; AVX512-NEXT: retq1641 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 01642 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 01643 %3 = icmp sgt <8 x i32> %1, %21644 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %21645 ret <8 x i32> %41646}1647 1648define <8 x i16> @max_gt_v8i16c() {1649; SSE-LABEL: max_gt_v8i16c:1650; SSE: # %bb.0:1651; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]1652; SSE-NEXT: retq1653;1654; AVX-LABEL: max_gt_v8i16c:1655; AVX: # %bb.0:1656; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]1657; AVX-NEXT: retq1658 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 01659 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 01660 %3 = icmp sgt <8 x i16> %1, %21661 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %21662 ret <8 x i16> %41663}1664 1665define <16 x i16> @max_gt_v16i16c() {1666; SSE-LABEL: max_gt_v16i16c:1667; SSE: # %bb.0:1668; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]1669; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]1670; SSE-NEXT: retq1671;1672; AVX-LABEL: max_gt_v16i16c:1673; AVX: # %bb.0:1674; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]1675; AVX-NEXT: retq1676 %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 01677 %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 01678 %3 = icmp sgt <16 x i16> %1, %21679 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %21680 ret <16 x i16> %41681}1682 1683define <16 x i8> @max_gt_v16i8c() {1684; SSE-LABEL: max_gt_v16i8c:1685; SSE: # %bb.0:1686; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]1687; SSE-NEXT: retq1688;1689; AVX-LABEL: max_gt_v16i8c:1690; AVX: # %bb.0:1691; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]1692; AVX-NEXT: retq1693 %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 01694 %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 01695 %3 = icmp sgt <16 x i8> %1, %21696 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %21697 ret <16 x i8> %41698}1699 1700define <2 x i64> @max_ge_v2i64c() {1701; SSE-LABEL: max_ge_v2i64c:1702; SSE: # %bb.0:1703; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7]1704; SSE-NEXT: retq1705;1706; AVX1-LABEL: max_ge_v2i64c:1707; AVX1: # %bb.0:1708; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]1709; AVX1-NEXT: retq1710;1711; AVX2-LABEL: max_ge_v2i64c:1712; AVX2: # %bb.0:1713; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]1714; AVX2-NEXT: retq1715;1716; AVX512-LABEL: max_ge_v2i64c:1717; AVX512: # %bb.0:1718; AVX512-NEXT: vpmovsxbq {{.*#+}} xmm0 = [18446744073709551615,7]1719; AVX512-NEXT: retq1720 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 01721 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 01722 %3 = icmp sge <2 x i64> %1, %21723 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %21724 ret <2 x i64> %41725}1726 1727define <4 x i64> @max_ge_v4i64c() {1728; SSE-LABEL: max_ge_v4i64c:1729; SSE: # %bb.0:1730; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7]1731; SSE-NEXT: pcmpeqd %xmm0, %xmm01732; SSE-NEXT: retq1733;1734; AVX1-LABEL: max_ge_v4i64c:1735; AVX1: # %bb.0:1736; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1737; AVX1-NEXT: retq1738;1739; AVX2-LABEL: max_ge_v4i64c:1740; AVX2: # %bb.0:1741; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1742; AVX2-NEXT: retq1743;1744; AVX512-LABEL: max_ge_v4i64c:1745; AVX512: # %bb.0:1746; AVX512-NEXT: vpmovsxbq {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]1747; AVX512-NEXT: retq1748 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 01749 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 01750 %3 = icmp sge <4 x i64> %1, %21751 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %21752 ret <4 x i64> %41753}1754 1755define <4 x i32> @max_ge_v4i32c() {1756; SSE-LABEL: max_ge_v4i32c:1757; SSE: # %bb.0:1758; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1759; SSE-NEXT: retq1760;1761; AVX1-LABEL: max_ge_v4i32c:1762; AVX1: # %bb.0:1763; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1764; AVX1-NEXT: retq1765;1766; AVX2-LABEL: max_ge_v4i32c:1767; AVX2: # %bb.0:1768; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1769; AVX2-NEXT: retq1770;1771; AVX512-LABEL: max_ge_v4i32c:1772; AVX512: # %bb.0:1773; AVX512-NEXT: vpmovsxbd {{.*#+}} xmm0 = [4294967295,4294967295,7,7]1774; AVX512-NEXT: retq1775 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 01776 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 01777 %3 = icmp sge <4 x i32> %1, %21778 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %21779 ret <4 x i32> %41780}1781 1782define <8 x i32> @max_ge_v8i32c() {1783; SSE-LABEL: max_ge_v8i32c:1784; SSE: # %bb.0:1785; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]1786; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7]1787; SSE-NEXT: retq1788;1789; AVX1-LABEL: max_ge_v8i32c:1790; AVX1: # %bb.0:1791; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1792; AVX1-NEXT: retq1793;1794; AVX2-LABEL: max_ge_v8i32c:1795; AVX2: # %bb.0:1796; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1797; AVX2-NEXT: retq1798;1799; AVX512-LABEL: max_ge_v8i32c:1800; AVX512: # %bb.0:1801; AVX512-NEXT: vpmovsxbd {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]1802; AVX512-NEXT: retq1803 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 01804 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 01805 %3 = icmp sge <8 x i32> %1, %21806 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %21807 ret <8 x i32> %41808}1809 1810define <8 x i16> @max_ge_v8i16c() {1811; SSE-LABEL: max_ge_v8i16c:1812; SSE: # %bb.0:1813; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]1814; SSE-NEXT: retq1815;1816; AVX-LABEL: max_ge_v8i16c:1817; AVX: # %bb.0:1818; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]1819; AVX-NEXT: retq1820 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 01821 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 01822 %3 = icmp sge <8 x i16> %1, %21823 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %21824 ret <8 x i16> %41825}1826 1827define <16 x i16> @max_ge_v16i16c() {1828; SSE-LABEL: max_ge_v16i16c:1829; SSE: # %bb.0:1830; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]1831; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]1832; SSE-NEXT: retq1833;1834; AVX-LABEL: max_ge_v16i16c:1835; AVX: # %bb.0:1836; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]1837; AVX-NEXT: retq1838 %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 01839 %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 01840 %3 = icmp sge <16 x i16> %1, %21841 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %21842 ret <16 x i16> %41843}1844 1845define <16 x i8> @max_ge_v16i8c() {1846; SSE-LABEL: max_ge_v16i8c:1847; SSE: # %bb.0:1848; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]1849; SSE-NEXT: retq1850;1851; AVX-LABEL: max_ge_v16i8c:1852; AVX: # %bb.0:1853; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]1854; AVX-NEXT: retq1855 %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 01856 %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 01857 %3 = icmp sge <16 x i8> %1, %21858 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %21859 ret <16 x i8> %41860}1861 1862define <2 x i64> @min_lt_v2i64c() {1863; SSE-LABEL: min_lt_v2i64c:1864; SSE: # %bb.0:1865; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1]1866; SSE-NEXT: retq1867;1868; AVX1-LABEL: min_lt_v2i64c:1869; AVX1: # %bb.0:1870; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]1871; AVX1-NEXT: retq1872;1873; AVX2-LABEL: min_lt_v2i64c:1874; AVX2: # %bb.0:1875; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]1876; AVX2-NEXT: retq1877;1878; AVX512-LABEL: min_lt_v2i64c:1879; AVX512: # %bb.0:1880; AVX512-NEXT: vpmovsxbq {{.*#+}} xmm0 = [18446744073709551609,1]1881; AVX512-NEXT: retq1882 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 01883 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 01884 %3 = icmp slt <2 x i64> %1, %21885 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %21886 ret <2 x i64> %41887}1888 1889define <4 x i64> @min_lt_v4i64c() {1890; SSE-LABEL: min_lt_v4i64c:1891; SSE: # %bb.0:1892; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]1893; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1]1894; SSE-NEXT: retq1895;1896; AVX1-LABEL: min_lt_v4i64c:1897; AVX1: # %bb.0:1898; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]1899; AVX1-NEXT: retq1900;1901; AVX2-LABEL: min_lt_v4i64c:1902; AVX2: # %bb.0:1903; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]1904; AVX2-NEXT: retq1905;1906; AVX512-LABEL: min_lt_v4i64c:1907; AVX512: # %bb.0:1908; AVX512-NEXT: vpmovsxbq {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]1909; AVX512-NEXT: retq1910 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 01911 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 01912 %3 = icmp slt <4 x i64> %1, %21913 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %21914 ret <4 x i64> %41915}1916 1917define <4 x i32> @min_lt_v4i32c() {1918; SSE-LABEL: min_lt_v4i32c:1919; SSE: # %bb.0:1920; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]1921; SSE-NEXT: retq1922;1923; AVX1-LABEL: min_lt_v4i32c:1924; AVX1: # %bb.0:1925; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]1926; AVX1-NEXT: retq1927;1928; AVX2-LABEL: min_lt_v4i32c:1929; AVX2: # %bb.0:1930; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]1931; AVX2-NEXT: retq1932;1933; AVX512-LABEL: min_lt_v4i32c:1934; AVX512: # %bb.0:1935; AVX512-NEXT: vpmovsxbd {{.*#+}} xmm0 = [4294967289,4294967289,1,1]1936; AVX512-NEXT: retq1937 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 01938 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 01939 %3 = icmp slt <4 x i32> %1, %21940 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %21941 ret <4 x i32> %41942}1943 1944define <8 x i32> @min_lt_v8i32c() {1945; SSE-LABEL: min_lt_v8i32c:1946; SSE: # %bb.0:1947; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]1948; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1]1949; SSE-NEXT: retq1950;1951; AVX1-LABEL: min_lt_v8i32c:1952; AVX1: # %bb.0:1953; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]1954; AVX1-NEXT: retq1955;1956; AVX2-LABEL: min_lt_v8i32c:1957; AVX2: # %bb.0:1958; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]1959; AVX2-NEXT: retq1960;1961; AVX512-LABEL: min_lt_v8i32c:1962; AVX512: # %bb.0:1963; AVX512-NEXT: vpmovsxbd {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]1964; AVX512-NEXT: retq1965 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 01966 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 01967 %3 = icmp slt <8 x i32> %1, %21968 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %21969 ret <8 x i32> %41970}1971 1972define <8 x i16> @min_lt_v8i16c() {1973; SSE-LABEL: min_lt_v8i16c:1974; SSE: # %bb.0:1975; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]1976; SSE-NEXT: retq1977;1978; AVX-LABEL: min_lt_v8i16c:1979; AVX: # %bb.0:1980; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]1981; AVX-NEXT: retq1982 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 01983 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 01984 %3 = icmp slt <8 x i16> %1, %21985 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %21986 ret <8 x i16> %41987}1988 1989define <16 x i16> @min_lt_v16i16c() {1990; SSE-LABEL: min_lt_v16i16c:1991; SSE: # %bb.0:1992; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65530,65531,65532,65531,65530,65529,0]1993; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]1994; SSE-NEXT: retq1995;1996; AVX-LABEL: min_lt_v16i16c:1997; AVX: # %bb.0:1998; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65529,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]1999; AVX-NEXT: retq2000 %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 02001 %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 02002 %3 = icmp slt <16 x i16> %1, %22003 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %22004 ret <16 x i16> %42005}2006 2007define <16 x i8> @min_lt_v16i8c() {2008; SSE-LABEL: min_lt_v16i8c:2009; SSE: # %bb.0:2010; SSE-NEXT: movaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]2011; SSE-NEXT: retq2012;2013; AVX-LABEL: min_lt_v16i8c:2014; AVX: # %bb.0:2015; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]2016; AVX-NEXT: retq2017 %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 02018 %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 02019 %3 = icmp slt <16 x i8> %1, %22020 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %22021 ret <16 x i8> %42022}2023 2024define <2 x i64> @min_le_v2i64c() {2025; SSE-LABEL: min_le_v2i64c:2026; SSE: # %bb.0:2027; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1]2028; SSE-NEXT: retq2029;2030; AVX1-LABEL: min_le_v2i64c:2031; AVX1: # %bb.0:2032; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]2033; AVX1-NEXT: retq2034;2035; AVX2-LABEL: min_le_v2i64c:2036; AVX2: # %bb.0:2037; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]2038; AVX2-NEXT: retq2039;2040; AVX512-LABEL: min_le_v2i64c:2041; AVX512: # %bb.0:2042; AVX512-NEXT: vpmovsxbq {{.*#+}} xmm0 = [18446744073709551609,1]2043; AVX512-NEXT: retq2044 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 02045 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 02046 %3 = icmp sle <2 x i64> %1, %22047 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %22048 ret <2 x i64> %42049}2050 2051define <4 x i64> @min_le_v4i64c() {2052; SSE-LABEL: min_le_v4i64c:2053; SSE: # %bb.0:2054; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]2055; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1]2056; SSE-NEXT: retq2057;2058; AVX1-LABEL: min_le_v4i64c:2059; AVX1: # %bb.0:2060; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]2061; AVX1-NEXT: retq2062;2063; AVX2-LABEL: min_le_v4i64c:2064; AVX2: # %bb.0:2065; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]2066; AVX2-NEXT: retq2067;2068; AVX512-LABEL: min_le_v4i64c:2069; AVX512: # %bb.0:2070; AVX512-NEXT: vpmovsxbq {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]2071; AVX512-NEXT: retq2072 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 02073 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 02074 %3 = icmp sle <4 x i64> %1, %22075 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %22076 ret <4 x i64> %42077}2078 2079define <4 x i32> @min_le_v4i32c() {2080; SSE-LABEL: min_le_v4i32c:2081; SSE: # %bb.0:2082; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2083; SSE-NEXT: retq2084;2085; AVX1-LABEL: min_le_v4i32c:2086; AVX1: # %bb.0:2087; AVX1-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2088; AVX1-NEXT: retq2089;2090; AVX2-LABEL: min_le_v4i32c:2091; AVX2: # %bb.0:2092; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2093; AVX2-NEXT: retq2094;2095; AVX512-LABEL: min_le_v4i32c:2096; AVX512: # %bb.0:2097; AVX512-NEXT: vpmovsxbd {{.*#+}} xmm0 = [4294967289,4294967289,1,1]2098; AVX512-NEXT: retq2099 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 02100 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 02101 %3 = icmp sle <4 x i32> %1, %22102 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %22103 ret <4 x i32> %42104}2105 2106define <8 x i32> @min_le_v8i32c() {2107; SSE-LABEL: min_le_v8i32c:2108; SSE: # %bb.0:2109; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]2110; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1]2111; SSE-NEXT: retq2112;2113; AVX1-LABEL: min_le_v8i32c:2114; AVX1: # %bb.0:2115; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]2116; AVX1-NEXT: retq2117;2118; AVX2-LABEL: min_le_v8i32c:2119; AVX2: # %bb.0:2120; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]2121; AVX2-NEXT: retq2122;2123; AVX512-LABEL: min_le_v8i32c:2124; AVX512: # %bb.0:2125; AVX512-NEXT: vpmovsxbd {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]2126; AVX512-NEXT: retq2127 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 02128 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 02129 %3 = icmp sle <8 x i32> %1, %22130 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %22131 ret <8 x i32> %42132}2133 2134define <8 x i16> @min_le_v8i16c() {2135; SSE-LABEL: min_le_v8i16c:2136; SSE: # %bb.0:2137; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]2138; SSE-NEXT: retq2139;2140; AVX-LABEL: min_le_v8i16c:2141; AVX: # %bb.0:2142; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]2143; AVX-NEXT: retq2144 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 02145 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 02146 %3 = icmp sle <8 x i16> %1, %22147 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %22148 ret <8 x i16> %42149}2150 2151define <16 x i16> @min_le_v16i16c() {2152; SSE-LABEL: min_le_v16i16c:2153; SSE: # %bb.0:2154; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65530,65531,65532,65531,65530,65529,0]2155; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]2156; SSE-NEXT: retq2157;2158; AVX-LABEL: min_le_v16i16c:2159; AVX: # %bb.0:2160; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65529,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]2161; AVX-NEXT: retq2162 %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 02163 %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 02164 %3 = icmp sle <16 x i16> %1, %22165 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %22166 ret <16 x i16> %42167}2168 2169define <16 x i8> @min_le_v16i8c() {2170; SSE-LABEL: min_le_v16i8c:2171; SSE: # %bb.0:2172; SSE-NEXT: movaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]2173; SSE-NEXT: retq2174;2175; AVX-LABEL: min_le_v16i8c:2176; AVX: # %bb.0:2177; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]2178; AVX-NEXT: retq2179 %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 02180 %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 02181 %3 = icmp sle <16 x i8> %1, %22182 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %22183 ret <16 x i8> %42184}2185