brintos

brintos / llvm-project-archived public Read only

0
0
Text · 77.0 KiB · bb87740 Raw
2182 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,SSE4,SSE414; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,SSE4,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,+avx512bw | FileCheck %s --check-prefixes=AVX512,AVX512BW8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX512,AVX512VL9 10;11; vXi6412;13 14define i64 @test_v2i64(<2 x i64> %a0) {15; SSE2-LABEL: test_v2i64:16; SSE2:       # %bb.0:17; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]18; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]19; SSE2-NEXT:    movdqa %xmm0, %xmm320; SSE2-NEXT:    pxor %xmm2, %xmm321; SSE2-NEXT:    pxor %xmm1, %xmm222; SSE2-NEXT:    movdqa %xmm2, %xmm423; SSE2-NEXT:    pcmpgtd %xmm3, %xmm424; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]25; SSE2-NEXT:    pcmpeqd %xmm3, %xmm226; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]27; SSE2-NEXT:    pand %xmm5, %xmm228; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]29; SSE2-NEXT:    por %xmm2, %xmm330; SSE2-NEXT:    pand %xmm3, %xmm031; SSE2-NEXT:    pandn %xmm1, %xmm332; SSE2-NEXT:    por %xmm0, %xmm333; SSE2-NEXT:    movq %xmm3, %rax34; SSE2-NEXT:    retq35;36; SSE41-LABEL: test_v2i64:37; SSE41:       # %bb.0:38; SSE41-NEXT:    movdqa %xmm0, %xmm139; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]40; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm3 = [2147483648,2147483648]41; SSE41-NEXT:    pxor %xmm3, %xmm042; SSE41-NEXT:    pxor %xmm2, %xmm343; SSE41-NEXT:    movdqa %xmm3, %xmm444; SSE41-NEXT:    pcmpeqd %xmm0, %xmm445; SSE41-NEXT:    pcmpgtd %xmm0, %xmm346; SSE41-NEXT:    pmovsxdq %xmm3, %xmm047; SSE41-NEXT:    pand %xmm4, %xmm048; SSE41-NEXT:    por %xmm3, %xmm049; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm250; SSE41-NEXT:    movq %xmm2, %rax51; SSE41-NEXT:    retq52;53; SSE42-LABEL: test_v2i64:54; SSE42:       # %bb.0:55; SSE42-NEXT:    movdqa %xmm0, %xmm156; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]57; SSE42-NEXT:    movdqa %xmm2, %xmm058; SSE42-NEXT:    pcmpgtq %xmm1, %xmm059; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm260; SSE42-NEXT:    movq %xmm2, %rax61; SSE42-NEXT:    retq62;63; AVX-LABEL: test_v2i64:64; AVX:       # %bb.0:65; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]66; AVX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm267; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm068; AVX-NEXT:    vmovq %xmm0, %rax69; AVX-NEXT:    retq70;71; AVX512BW-LABEL: test_v2i64:72; AVX512BW:       # %bb.0:73; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm074; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]75; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm076; AVX512BW-NEXT:    vmovq %xmm0, %rax77; AVX512BW-NEXT:    vzeroupper78; AVX512BW-NEXT:    retq79;80; AVX512VL-LABEL: test_v2i64:81; AVX512VL:       # %bb.0:82; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]83; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm084; AVX512VL-NEXT:    vmovq %xmm0, %rax85; AVX512VL-NEXT:    retq86  %1 = call i64 @llvm.vector.reduce.smin.v2i64(<2 x i64> %a0)87  ret i64 %188}89 90define i64 @test_v4i64(<4 x i64> %a0) {91; SSE2-LABEL: test_v4i64:92; SSE2:       # %bb.0:93; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]94; SSE2-NEXT:    movdqa %xmm0, %xmm395; SSE2-NEXT:    pxor %xmm2, %xmm396; SSE2-NEXT:    movdqa %xmm1, %xmm497; SSE2-NEXT:    pxor %xmm2, %xmm498; SSE2-NEXT:    movdqa %xmm4, %xmm599; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5100; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]101; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4102; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]103; SSE2-NEXT:    pand %xmm6, %xmm3104; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]105; SSE2-NEXT:    por %xmm3, %xmm4106; SSE2-NEXT:    pand %xmm4, %xmm0107; SSE2-NEXT:    pandn %xmm1, %xmm4108; SSE2-NEXT:    por %xmm0, %xmm4109; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[2,3,2,3]110; SSE2-NEXT:    movdqa %xmm4, %xmm1111; SSE2-NEXT:    pxor %xmm2, %xmm1112; SSE2-NEXT:    pxor %xmm0, %xmm2113; SSE2-NEXT:    movdqa %xmm2, %xmm3114; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3115; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]116; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2117; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]118; SSE2-NEXT:    pand %xmm5, %xmm1119; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]120; SSE2-NEXT:    por %xmm1, %xmm2121; SSE2-NEXT:    pand %xmm2, %xmm4122; SSE2-NEXT:    pandn %xmm0, %xmm2123; SSE2-NEXT:    por %xmm4, %xmm2124; SSE2-NEXT:    movq %xmm2, %rax125; SSE2-NEXT:    retq126;127; SSE41-LABEL: test_v4i64:128; SSE41:       # %bb.0:129; SSE41-NEXT:    movdqa %xmm0, %xmm2130; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm3 = [2147483648,2147483648]131; SSE41-NEXT:    pxor %xmm3, %xmm0132; SSE41-NEXT:    movdqa %xmm1, %xmm4133; SSE41-NEXT:    pxor %xmm3, %xmm4134; SSE41-NEXT:    movdqa %xmm4, %xmm5135; SSE41-NEXT:    pcmpeqd %xmm0, %xmm5136; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4137; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]138; SSE41-NEXT:    pand %xmm5, %xmm0139; SSE41-NEXT:    por %xmm4, %xmm0140; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm1141; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]142; SSE41-NEXT:    movdqa %xmm1, %xmm0143; SSE41-NEXT:    pxor %xmm3, %xmm0144; SSE41-NEXT:    pxor %xmm2, %xmm3145; SSE41-NEXT:    movdqa %xmm3, %xmm4146; SSE41-NEXT:    pcmpeqd %xmm0, %xmm4147; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3148; SSE41-NEXT:    pmovsxdq %xmm3, %xmm0149; SSE41-NEXT:    pand %xmm4, %xmm0150; SSE41-NEXT:    por %xmm3, %xmm0151; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm2152; SSE41-NEXT:    movq %xmm2, %rax153; SSE41-NEXT:    retq154;155; SSE42-LABEL: test_v4i64:156; SSE42:       # %bb.0:157; SSE42-NEXT:    movdqa %xmm0, %xmm2158; SSE42-NEXT:    movdqa %xmm1, %xmm0159; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0160; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm1161; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]162; SSE42-NEXT:    movdqa %xmm2, %xmm0163; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0164; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm2165; SSE42-NEXT:    movq %xmm2, %rax166; SSE42-NEXT:    retq167;168; AVX1-LABEL: test_v4i64:169; AVX1:       # %bb.0:170; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1171; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2172; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0173; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]174; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2175; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0176; AVX1-NEXT:    vmovq %xmm0, %rax177; AVX1-NEXT:    vzeroupper178; AVX1-NEXT:    retq179;180; AVX2-LABEL: test_v4i64:181; AVX2:       # %bb.0:182; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1183; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2184; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0185; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]186; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2187; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0188; AVX2-NEXT:    vmovq %xmm0, %rax189; AVX2-NEXT:    vzeroupper190; AVX2-NEXT:    retq191;192; AVX512BW-LABEL: test_v4i64:193; AVX512BW:       # %bb.0:194; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0195; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1196; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0197; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]198; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0199; AVX512BW-NEXT:    vmovq %xmm0, %rax200; AVX512BW-NEXT:    vzeroupper201; AVX512BW-NEXT:    retq202;203; AVX512VL-LABEL: test_v4i64:204; AVX512VL:       # %bb.0:205; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1206; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0207; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]208; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0209; AVX512VL-NEXT:    vmovq %xmm0, %rax210; AVX512VL-NEXT:    vzeroupper211; AVX512VL-NEXT:    retq212  %1 = call i64 @llvm.vector.reduce.smin.v4i64(<4 x i64> %a0)213  ret i64 %1214}215 216define i64 @test_v8i64(<8 x i64> %a0) {217; SSE2-LABEL: test_v8i64:218; SSE2:       # %bb.0:219; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]220; SSE2-NEXT:    movdqa %xmm1, %xmm5221; SSE2-NEXT:    pxor %xmm4, %xmm5222; SSE2-NEXT:    movdqa %xmm3, %xmm6223; SSE2-NEXT:    pxor %xmm4, %xmm6224; SSE2-NEXT:    movdqa %xmm6, %xmm7225; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7226; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]227; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6228; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]229; SSE2-NEXT:    pand %xmm8, %xmm6230; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]231; SSE2-NEXT:    por %xmm6, %xmm5232; SSE2-NEXT:    pand %xmm5, %xmm1233; SSE2-NEXT:    pandn %xmm3, %xmm5234; SSE2-NEXT:    por %xmm1, %xmm5235; SSE2-NEXT:    movdqa %xmm0, %xmm1236; SSE2-NEXT:    pxor %xmm4, %xmm1237; SSE2-NEXT:    movdqa %xmm2, %xmm3238; SSE2-NEXT:    pxor %xmm4, %xmm3239; SSE2-NEXT:    movdqa %xmm3, %xmm6240; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6241; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]242; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3243; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]244; SSE2-NEXT:    pand %xmm7, %xmm1245; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]246; SSE2-NEXT:    por %xmm1, %xmm3247; SSE2-NEXT:    pand %xmm3, %xmm0248; SSE2-NEXT:    pandn %xmm2, %xmm3249; SSE2-NEXT:    por %xmm0, %xmm3250; SSE2-NEXT:    movdqa %xmm3, %xmm0251; SSE2-NEXT:    pxor %xmm4, %xmm0252; SSE2-NEXT:    movdqa %xmm5, %xmm1253; SSE2-NEXT:    pxor %xmm4, %xmm1254; SSE2-NEXT:    movdqa %xmm1, %xmm2255; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2256; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]257; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1258; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]259; SSE2-NEXT:    pand %xmm6, %xmm0260; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]261; SSE2-NEXT:    por %xmm0, %xmm1262; SSE2-NEXT:    pand %xmm1, %xmm3263; SSE2-NEXT:    pandn %xmm5, %xmm1264; SSE2-NEXT:    por %xmm3, %xmm1265; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]266; SSE2-NEXT:    movdqa %xmm1, %xmm2267; SSE2-NEXT:    pxor %xmm4, %xmm2268; SSE2-NEXT:    pxor %xmm0, %xmm4269; SSE2-NEXT:    movdqa %xmm4, %xmm3270; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3271; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]272; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4273; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]274; SSE2-NEXT:    pand %xmm5, %xmm2275; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]276; SSE2-NEXT:    por %xmm2, %xmm3277; SSE2-NEXT:    pand %xmm3, %xmm1278; SSE2-NEXT:    pandn %xmm0, %xmm3279; SSE2-NEXT:    por %xmm1, %xmm3280; SSE2-NEXT:    movq %xmm3, %rax281; SSE2-NEXT:    retq282;283; SSE41-LABEL: test_v8i64:284; SSE41:       # %bb.0:285; SSE41-NEXT:    movdqa %xmm0, %xmm4286; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm5 = [2147483648,2147483648]287; SSE41-NEXT:    movdqa %xmm1, %xmm0288; SSE41-NEXT:    pxor %xmm5, %xmm0289; SSE41-NEXT:    movdqa %xmm3, %xmm6290; SSE41-NEXT:    pxor %xmm5, %xmm6291; SSE41-NEXT:    movdqa %xmm6, %xmm7292; SSE41-NEXT:    pcmpeqd %xmm0, %xmm7293; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6294; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]295; SSE41-NEXT:    pand %xmm7, %xmm0296; SSE41-NEXT:    por %xmm6, %xmm0297; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm3298; SSE41-NEXT:    movdqa %xmm4, %xmm0299; SSE41-NEXT:    pxor %xmm5, %xmm0300; SSE41-NEXT:    movdqa %xmm2, %xmm1301; SSE41-NEXT:    pxor %xmm5, %xmm1302; SSE41-NEXT:    movdqa %xmm1, %xmm6303; SSE41-NEXT:    pcmpeqd %xmm0, %xmm6304; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1305; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]306; SSE41-NEXT:    pand %xmm6, %xmm0307; SSE41-NEXT:    por %xmm1, %xmm0308; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm2309; SSE41-NEXT:    movapd %xmm2, %xmm0310; SSE41-NEXT:    xorpd %xmm5, %xmm0311; SSE41-NEXT:    movapd %xmm3, %xmm1312; SSE41-NEXT:    xorpd %xmm5, %xmm1313; SSE41-NEXT:    movapd %xmm1, %xmm4314; SSE41-NEXT:    pcmpeqd %xmm0, %xmm4315; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1316; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]317; SSE41-NEXT:    pand %xmm4, %xmm0318; SSE41-NEXT:    por %xmm1, %xmm0319; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm3320; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[2,3,2,3]321; SSE41-NEXT:    movdqa %xmm3, %xmm0322; SSE41-NEXT:    pxor %xmm5, %xmm0323; SSE41-NEXT:    pxor %xmm1, %xmm5324; SSE41-NEXT:    movdqa %xmm5, %xmm2325; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2326; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5327; SSE41-NEXT:    pmovsxdq %xmm5, %xmm0328; SSE41-NEXT:    pand %xmm2, %xmm0329; SSE41-NEXT:    por %xmm5, %xmm0330; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm1331; SSE41-NEXT:    movq %xmm1, %rax332; SSE41-NEXT:    retq333;334; SSE42-LABEL: test_v8i64:335; SSE42:       # %bb.0:336; SSE42-NEXT:    movdqa %xmm0, %xmm4337; SSE42-NEXT:    movdqa %xmm2, %xmm0338; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0339; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm2340; SSE42-NEXT:    movdqa %xmm3, %xmm0341; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0342; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm3343; SSE42-NEXT:    movapd %xmm3, %xmm0344; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0345; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm3346; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[2,3,2,3]347; SSE42-NEXT:    movdqa %xmm1, %xmm0348; SSE42-NEXT:    pcmpgtq %xmm3, %xmm0349; SSE42-NEXT:    blendvpd %xmm0, %xmm3, %xmm1350; SSE42-NEXT:    movq %xmm1, %rax351; SSE42-NEXT:    retq352;353; AVX1-LABEL: test_v8i64:354; AVX1:       # %bb.0:355; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2356; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm2357; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0358; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1359; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3360; AVX1-NEXT:    vblendvpd %xmm3, %xmm0, %xmm1, %xmm0361; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm1362; AVX1-NEXT:    vblendvpd %xmm1, %xmm2, %xmm0, %xmm0363; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]364; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2365; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0366; AVX1-NEXT:    vmovq %xmm0, %rax367; AVX1-NEXT:    vzeroupper368; AVX1-NEXT:    retq369;370; AVX2-LABEL: test_v8i64:371; AVX2:       # %bb.0:372; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2373; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0374; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1375; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2376; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0377; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]378; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2379; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0380; AVX2-NEXT:    vmovq %xmm0, %rax381; AVX2-NEXT:    vzeroupper382; AVX2-NEXT:    retq383;384; AVX512BW-LABEL: test_v8i64:385; AVX512BW:       # %bb.0:386; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm1387; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0388; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1389; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0390; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]391; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0392; AVX512BW-NEXT:    vmovq %xmm0, %rax393; AVX512BW-NEXT:    vzeroupper394; AVX512BW-NEXT:    retq395;396; AVX512VL-LABEL: test_v8i64:397; AVX512VL:       # %bb.0:398; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1399; AVX512VL-NEXT:    vpminsq %zmm1, %zmm0, %zmm0400; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1401; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0402; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]403; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0404; AVX512VL-NEXT:    vmovq %xmm0, %rax405; AVX512VL-NEXT:    vzeroupper406; AVX512VL-NEXT:    retq407  %1 = call i64 @llvm.vector.reduce.smin.v8i64(<8 x i64> %a0)408  ret i64 %1409}410 411define i64 @test_v16i64(<16 x i64> %a0) {412; SSE2-LABEL: test_v16i64:413; SSE2:       # %bb.0:414; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]415; SSE2-NEXT:    movdqa %xmm2, %xmm9416; SSE2-NEXT:    pxor %xmm8, %xmm9417; SSE2-NEXT:    movdqa %xmm6, %xmm10418; SSE2-NEXT:    pxor %xmm8, %xmm10419; SSE2-NEXT:    movdqa %xmm10, %xmm11420; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11421; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]422; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10423; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]424; SSE2-NEXT:    pand %xmm12, %xmm10425; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm11[1,1,3,3]426; SSE2-NEXT:    por %xmm10, %xmm9427; SSE2-NEXT:    pand %xmm9, %xmm2428; SSE2-NEXT:    pandn %xmm6, %xmm9429; SSE2-NEXT:    por %xmm2, %xmm9430; SSE2-NEXT:    movdqa %xmm0, %xmm2431; SSE2-NEXT:    pxor %xmm8, %xmm2432; SSE2-NEXT:    movdqa %xmm4, %xmm6433; SSE2-NEXT:    pxor %xmm8, %xmm6434; SSE2-NEXT:    movdqa %xmm6, %xmm10435; SSE2-NEXT:    pcmpgtd %xmm2, %xmm10436; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]437; SSE2-NEXT:    pcmpeqd %xmm2, %xmm6438; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]439; SSE2-NEXT:    pand %xmm11, %xmm6440; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm10[1,1,3,3]441; SSE2-NEXT:    por %xmm6, %xmm2442; SSE2-NEXT:    pand %xmm2, %xmm0443; SSE2-NEXT:    pandn %xmm4, %xmm2444; SSE2-NEXT:    por %xmm0, %xmm2445; SSE2-NEXT:    movdqa %xmm3, %xmm0446; SSE2-NEXT:    pxor %xmm8, %xmm0447; SSE2-NEXT:    movdqa %xmm7, %xmm4448; SSE2-NEXT:    pxor %xmm8, %xmm4449; SSE2-NEXT:    movdqa %xmm4, %xmm6450; SSE2-NEXT:    pcmpgtd %xmm0, %xmm6451; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]452; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4453; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]454; SSE2-NEXT:    pand %xmm10, %xmm4455; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]456; SSE2-NEXT:    por %xmm4, %xmm0457; SSE2-NEXT:    pand %xmm0, %xmm3458; SSE2-NEXT:    pandn %xmm7, %xmm0459; SSE2-NEXT:    por %xmm3, %xmm0460; SSE2-NEXT:    movdqa %xmm1, %xmm3461; SSE2-NEXT:    pxor %xmm8, %xmm3462; SSE2-NEXT:    movdqa %xmm5, %xmm4463; SSE2-NEXT:    pxor %xmm8, %xmm4464; SSE2-NEXT:    movdqa %xmm4, %xmm6465; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6466; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]467; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4468; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]469; SSE2-NEXT:    pand %xmm7, %xmm3470; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[1,1,3,3]471; SSE2-NEXT:    por %xmm3, %xmm4472; SSE2-NEXT:    pand %xmm4, %xmm1473; SSE2-NEXT:    pandn %xmm5, %xmm4474; SSE2-NEXT:    por %xmm1, %xmm4475; SSE2-NEXT:    movdqa %xmm4, %xmm1476; SSE2-NEXT:    pxor %xmm8, %xmm1477; SSE2-NEXT:    movdqa %xmm0, %xmm3478; SSE2-NEXT:    pxor %xmm8, %xmm3479; SSE2-NEXT:    movdqa %xmm3, %xmm5480; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5481; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]482; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3483; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]484; SSE2-NEXT:    pand %xmm6, %xmm3485; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]486; SSE2-NEXT:    por %xmm3, %xmm1487; SSE2-NEXT:    pand %xmm1, %xmm4488; SSE2-NEXT:    pandn %xmm0, %xmm1489; SSE2-NEXT:    por %xmm4, %xmm1490; SSE2-NEXT:    movdqa %xmm2, %xmm0491; SSE2-NEXT:    pxor %xmm8, %xmm0492; SSE2-NEXT:    movdqa %xmm9, %xmm3493; SSE2-NEXT:    pxor %xmm8, %xmm3494; SSE2-NEXT:    movdqa %xmm3, %xmm4495; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4496; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]497; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3498; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]499; SSE2-NEXT:    pand %xmm5, %xmm0500; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]501; SSE2-NEXT:    por %xmm0, %xmm3502; SSE2-NEXT:    pand %xmm3, %xmm2503; SSE2-NEXT:    pandn %xmm9, %xmm3504; SSE2-NEXT:    por %xmm2, %xmm3505; SSE2-NEXT:    movdqa %xmm3, %xmm0506; SSE2-NEXT:    pxor %xmm8, %xmm0507; SSE2-NEXT:    movdqa %xmm1, %xmm2508; SSE2-NEXT:    pxor %xmm8, %xmm2509; SSE2-NEXT:    movdqa %xmm2, %xmm4510; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4511; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]512; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2513; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]514; SSE2-NEXT:    pand %xmm5, %xmm0515; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]516; SSE2-NEXT:    por %xmm0, %xmm2517; SSE2-NEXT:    pand %xmm2, %xmm3518; SSE2-NEXT:    pandn %xmm1, %xmm2519; SSE2-NEXT:    por %xmm3, %xmm2520; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]521; SSE2-NEXT:    movdqa %xmm2, %xmm1522; SSE2-NEXT:    pxor %xmm8, %xmm1523; SSE2-NEXT:    pxor %xmm0, %xmm8524; SSE2-NEXT:    movdqa %xmm8, %xmm3525; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3526; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]527; SSE2-NEXT:    pcmpeqd %xmm1, %xmm8528; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3]529; SSE2-NEXT:    pand %xmm4, %xmm1530; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]531; SSE2-NEXT:    por %xmm1, %xmm3532; SSE2-NEXT:    pand %xmm3, %xmm2533; SSE2-NEXT:    pandn %xmm0, %xmm3534; SSE2-NEXT:    por %xmm2, %xmm3535; SSE2-NEXT:    movq %xmm3, %rax536; SSE2-NEXT:    retq537;538; SSE41-LABEL: test_v16i64:539; SSE41:       # %bb.0:540; SSE41-NEXT:    movdqa %xmm0, %xmm8541; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm9 = [2147483648,2147483648]542; SSE41-NEXT:    movdqa %xmm2, %xmm0543; SSE41-NEXT:    pxor %xmm9, %xmm0544; SSE41-NEXT:    movdqa %xmm6, %xmm10545; SSE41-NEXT:    pxor %xmm9, %xmm10546; SSE41-NEXT:    movdqa %xmm10, %xmm11547; SSE41-NEXT:    pcmpeqd %xmm0, %xmm11548; SSE41-NEXT:    pcmpgtd %xmm0, %xmm10549; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[0,0,2,2]550; SSE41-NEXT:    pand %xmm11, %xmm0551; SSE41-NEXT:    por %xmm10, %xmm0552; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm6553; SSE41-NEXT:    movdqa %xmm8, %xmm0554; SSE41-NEXT:    pxor %xmm9, %xmm0555; SSE41-NEXT:    movdqa %xmm4, %xmm2556; SSE41-NEXT:    pxor %xmm9, %xmm2557; SSE41-NEXT:    movdqa %xmm2, %xmm10558; SSE41-NEXT:    pcmpeqd %xmm0, %xmm10559; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2560; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]561; SSE41-NEXT:    pand %xmm10, %xmm0562; SSE41-NEXT:    por %xmm2, %xmm0563; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm4564; SSE41-NEXT:    movdqa %xmm3, %xmm0565; SSE41-NEXT:    pxor %xmm9, %xmm0566; SSE41-NEXT:    movdqa %xmm7, %xmm2567; SSE41-NEXT:    pxor %xmm9, %xmm2568; SSE41-NEXT:    movdqa %xmm2, %xmm8569; SSE41-NEXT:    pcmpeqd %xmm0, %xmm8570; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2571; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]572; SSE41-NEXT:    pand %xmm8, %xmm0573; SSE41-NEXT:    por %xmm2, %xmm0574; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm7575; SSE41-NEXT:    movdqa %xmm1, %xmm0576; SSE41-NEXT:    pxor %xmm9, %xmm0577; SSE41-NEXT:    movdqa %xmm5, %xmm2578; SSE41-NEXT:    pxor %xmm9, %xmm2579; SSE41-NEXT:    movdqa %xmm2, %xmm3580; SSE41-NEXT:    pcmpeqd %xmm0, %xmm3581; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2582; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]583; SSE41-NEXT:    pand %xmm3, %xmm0584; SSE41-NEXT:    por %xmm2, %xmm0585; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm5586; SSE41-NEXT:    movapd %xmm5, %xmm0587; SSE41-NEXT:    xorpd %xmm9, %xmm0588; SSE41-NEXT:    movapd %xmm7, %xmm1589; SSE41-NEXT:    xorpd %xmm9, %xmm1590; SSE41-NEXT:    movapd %xmm1, %xmm2591; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2592; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1593; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]594; SSE41-NEXT:    pand %xmm2, %xmm0595; SSE41-NEXT:    por %xmm1, %xmm0596; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm7597; SSE41-NEXT:    movapd %xmm4, %xmm0598; SSE41-NEXT:    xorpd %xmm9, %xmm0599; SSE41-NEXT:    movapd %xmm6, %xmm1600; SSE41-NEXT:    xorpd %xmm9, %xmm1601; SSE41-NEXT:    movapd %xmm1, %xmm2602; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2603; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1604; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]605; SSE41-NEXT:    pand %xmm2, %xmm0606; SSE41-NEXT:    por %xmm1, %xmm0607; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm6608; SSE41-NEXT:    movapd %xmm6, %xmm0609; SSE41-NEXT:    xorpd %xmm9, %xmm0610; SSE41-NEXT:    movapd %xmm7, %xmm1611; SSE41-NEXT:    xorpd %xmm9, %xmm1612; SSE41-NEXT:    movapd %xmm1, %xmm2613; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2614; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1615; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]616; SSE41-NEXT:    pand %xmm2, %xmm0617; SSE41-NEXT:    por %xmm1, %xmm0618; SSE41-NEXT:    blendvpd %xmm0, %xmm6, %xmm7619; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[2,3,2,3]620; SSE41-NEXT:    movdqa %xmm7, %xmm0621; SSE41-NEXT:    pxor %xmm9, %xmm0622; SSE41-NEXT:    pxor %xmm1, %xmm9623; SSE41-NEXT:    movdqa %xmm9, %xmm2624; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2625; SSE41-NEXT:    pcmpgtd %xmm0, %xmm9626; SSE41-NEXT:    pmovsxdq %xmm9, %xmm0627; SSE41-NEXT:    pand %xmm2, %xmm0628; SSE41-NEXT:    por %xmm9, %xmm0629; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm1630; SSE41-NEXT:    movq %xmm1, %rax631; SSE41-NEXT:    retq632;633; SSE42-LABEL: test_v16i64:634; SSE42:       # %bb.0:635; SSE42-NEXT:    movdqa %xmm0, %xmm8636; SSE42-NEXT:    movdqa %xmm5, %xmm0637; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0638; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm5639; SSE42-NEXT:    movdqa %xmm7, %xmm0640; SSE42-NEXT:    pcmpgtq %xmm3, %xmm0641; SSE42-NEXT:    blendvpd %xmm0, %xmm3, %xmm7642; SSE42-NEXT:    movdqa %xmm4, %xmm0643; SSE42-NEXT:    pcmpgtq %xmm8, %xmm0644; SSE42-NEXT:    blendvpd %xmm0, %xmm8, %xmm4645; SSE42-NEXT:    movdqa %xmm6, %xmm0646; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0647; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm6648; SSE42-NEXT:    movapd %xmm6, %xmm0649; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0650; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm6651; SSE42-NEXT:    movapd %xmm7, %xmm0652; SSE42-NEXT:    pcmpgtq %xmm5, %xmm0653; SSE42-NEXT:    blendvpd %xmm0, %xmm5, %xmm7654; SSE42-NEXT:    movapd %xmm7, %xmm0655; SSE42-NEXT:    pcmpgtq %xmm6, %xmm0656; SSE42-NEXT:    blendvpd %xmm0, %xmm6, %xmm7657; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[2,3,2,3]658; SSE42-NEXT:    movdqa %xmm1, %xmm0659; SSE42-NEXT:    pcmpgtq %xmm7, %xmm0660; SSE42-NEXT:    blendvpd %xmm0, %xmm7, %xmm1661; SSE42-NEXT:    movq %xmm1, %rax662; SSE42-NEXT:    retq663;664; AVX1-LABEL: test_v16i64:665; AVX1:       # %bb.0:666; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4667; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5668; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm6669; AVX1-NEXT:    vblendvpd %xmm6, %xmm4, %xmm5, %xmm4670; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5671; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6672; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm7673; AVX1-NEXT:    vblendvpd %xmm7, %xmm5, %xmm6, %xmm5674; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm6675; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm2, %xmm0676; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm2677; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm3, %xmm1678; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2679; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0680; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm1681; AVX1-NEXT:    vblendvpd %xmm1, %xmm4, %xmm5, %xmm1682; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2683; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0684; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]685; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2686; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0687; AVX1-NEXT:    vmovq %xmm0, %rax688; AVX1-NEXT:    vzeroupper689; AVX1-NEXT:    retq690;691; AVX2-LABEL: test_v16i64:692; AVX2:       # %bb.0:693; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4694; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0695; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2696; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1697; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2698; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0699; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1700; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2701; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0702; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]703; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2704; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0705; AVX2-NEXT:    vmovq %xmm0, %rax706; AVX2-NEXT:    vzeroupper707; AVX2-NEXT:    retq708;709; AVX512BW-LABEL: test_v16i64:710; AVX512BW:       # %bb.0:711; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0712; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm1713; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0714; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1715; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0716; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]717; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0718; AVX512BW-NEXT:    vmovq %xmm0, %rax719; AVX512BW-NEXT:    vzeroupper720; AVX512BW-NEXT:    retq721;722; AVX512VL-LABEL: test_v16i64:723; AVX512VL:       # %bb.0:724; AVX512VL-NEXT:    vpminsq %zmm1, %zmm0, %zmm0725; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1726; AVX512VL-NEXT:    vpminsq %zmm1, %zmm0, %zmm0727; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1728; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0729; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]730; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0731; AVX512VL-NEXT:    vmovq %xmm0, %rax732; AVX512VL-NEXT:    vzeroupper733; AVX512VL-NEXT:    retq734  %1 = call i64 @llvm.vector.reduce.smin.v16i64(<16 x i64> %a0)735  ret i64 %1736}737 738;739; vXi32740;741 742define i32 @test_v2i32(<2 x i32> %a0) {743; SSE2-LABEL: test_v2i32:744; SSE2:       # %bb.0:745; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]746; SSE2-NEXT:    movdqa %xmm1, %xmm2747; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2748; SSE2-NEXT:    pand %xmm2, %xmm0749; SSE2-NEXT:    pandn %xmm1, %xmm2750; SSE2-NEXT:    por %xmm0, %xmm2751; SSE2-NEXT:    movd %xmm2, %eax752; SSE2-NEXT:    retq753;754; SSE4-LABEL: test_v2i32:755; SSE4:       # %bb.0:756; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]757; SSE4-NEXT:    pminsd %xmm0, %xmm1758; SSE4-NEXT:    movd %xmm1, %eax759; SSE4-NEXT:    retq760;761; AVX-LABEL: test_v2i32:762; AVX:       # %bb.0:763; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]764; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0765; AVX-NEXT:    vmovd %xmm0, %eax766; AVX-NEXT:    retq767;768; AVX512-LABEL: test_v2i32:769; AVX512:       # %bb.0:770; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]771; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0772; AVX512-NEXT:    vmovd %xmm0, %eax773; AVX512-NEXT:    retq774  %1 = call i32 @llvm.vector.reduce.smin.v2i32(<2 x i32> %a0)775  ret i32 %1776}777 778define i32 @test_v4i32(<4 x i32> %a0) {779; SSE2-LABEL: test_v4i32:780; SSE2:       # %bb.0:781; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]782; SSE2-NEXT:    movdqa %xmm1, %xmm2783; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2784; SSE2-NEXT:    pand %xmm2, %xmm0785; SSE2-NEXT:    pandn %xmm1, %xmm2786; SSE2-NEXT:    por %xmm0, %xmm2787; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]788; SSE2-NEXT:    movdqa %xmm0, %xmm1789; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1790; SSE2-NEXT:    pand %xmm1, %xmm2791; SSE2-NEXT:    pandn %xmm0, %xmm1792; SSE2-NEXT:    por %xmm2, %xmm1793; SSE2-NEXT:    movd %xmm1, %eax794; SSE2-NEXT:    retq795;796; SSE4-LABEL: test_v4i32:797; SSE4:       # %bb.0:798; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]799; SSE4-NEXT:    pminsd %xmm0, %xmm1800; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]801; SSE4-NEXT:    pminsd %xmm1, %xmm0802; SSE4-NEXT:    movd %xmm0, %eax803; SSE4-NEXT:    retq804;805; AVX-LABEL: test_v4i32:806; AVX:       # %bb.0:807; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]808; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0809; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]810; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0811; AVX-NEXT:    vmovd %xmm0, %eax812; AVX-NEXT:    retq813;814; AVX512-LABEL: test_v4i32:815; AVX512:       # %bb.0:816; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]817; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0818; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]819; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0820; AVX512-NEXT:    vmovd %xmm0, %eax821; AVX512-NEXT:    retq822  %1 = call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %a0)823  ret i32 %1824}825 826define i32 @test_v8i32(<8 x i32> %a0) {827; SSE2-LABEL: test_v8i32:828; SSE2:       # %bb.0:829; SSE2-NEXT:    movdqa %xmm1, %xmm2830; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2831; SSE2-NEXT:    pand %xmm2, %xmm0832; SSE2-NEXT:    pandn %xmm1, %xmm2833; SSE2-NEXT:    por %xmm0, %xmm2834; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]835; SSE2-NEXT:    movdqa %xmm0, %xmm1836; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1837; SSE2-NEXT:    pand %xmm1, %xmm2838; SSE2-NEXT:    pandn %xmm0, %xmm1839; SSE2-NEXT:    por %xmm2, %xmm1840; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]841; SSE2-NEXT:    movdqa %xmm0, %xmm2842; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2843; SSE2-NEXT:    pand %xmm2, %xmm1844; SSE2-NEXT:    pandn %xmm0, %xmm2845; SSE2-NEXT:    por %xmm1, %xmm2846; SSE2-NEXT:    movd %xmm2, %eax847; SSE2-NEXT:    retq848;849; SSE4-LABEL: test_v8i32:850; SSE4:       # %bb.0:851; SSE4-NEXT:    pminsd %xmm1, %xmm0852; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]853; SSE4-NEXT:    pminsd %xmm0, %xmm1854; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]855; SSE4-NEXT:    pminsd %xmm1, %xmm0856; SSE4-NEXT:    movd %xmm0, %eax857; SSE4-NEXT:    retq858;859; AVX1-LABEL: test_v8i32:860; AVX1:       # %bb.0:861; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1862; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0863; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]864; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0865; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]866; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0867; AVX1-NEXT:    vmovd %xmm0, %eax868; AVX1-NEXT:    vzeroupper869; AVX1-NEXT:    retq870;871; AVX2-LABEL: test_v8i32:872; AVX2:       # %bb.0:873; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1874; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0875; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]876; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0877; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]878; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0879; AVX2-NEXT:    vmovd %xmm0, %eax880; AVX2-NEXT:    vzeroupper881; AVX2-NEXT:    retq882;883; AVX512-LABEL: test_v8i32:884; AVX512:       # %bb.0:885; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1886; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0887; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]888; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0889; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]890; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0891; AVX512-NEXT:    vmovd %xmm0, %eax892; AVX512-NEXT:    vzeroupper893; AVX512-NEXT:    retq894  %1 = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> %a0)895  ret i32 %1896}897 898define i32 @test_v16i32(<16 x i32> %a0) {899; SSE2-LABEL: test_v16i32:900; SSE2:       # %bb.0:901; SSE2-NEXT:    movdqa %xmm2, %xmm4902; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4903; SSE2-NEXT:    pand %xmm4, %xmm0904; SSE2-NEXT:    pandn %xmm2, %xmm4905; SSE2-NEXT:    por %xmm0, %xmm4906; SSE2-NEXT:    movdqa %xmm3, %xmm0907; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0908; SSE2-NEXT:    pand %xmm0, %xmm1909; SSE2-NEXT:    pandn %xmm3, %xmm0910; SSE2-NEXT:    por %xmm1, %xmm0911; SSE2-NEXT:    movdqa %xmm0, %xmm1912; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1913; SSE2-NEXT:    pand %xmm1, %xmm4914; SSE2-NEXT:    pandn %xmm0, %xmm1915; SSE2-NEXT:    por %xmm4, %xmm1916; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]917; SSE2-NEXT:    movdqa %xmm0, %xmm2918; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2919; SSE2-NEXT:    pand %xmm2, %xmm1920; SSE2-NEXT:    pandn %xmm0, %xmm2921; SSE2-NEXT:    por %xmm1, %xmm2922; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]923; SSE2-NEXT:    movdqa %xmm0, %xmm1924; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1925; SSE2-NEXT:    pand %xmm1, %xmm2926; SSE2-NEXT:    pandn %xmm0, %xmm1927; SSE2-NEXT:    por %xmm2, %xmm1928; SSE2-NEXT:    movd %xmm1, %eax929; SSE2-NEXT:    retq930;931; SSE4-LABEL: test_v16i32:932; SSE4:       # %bb.0:933; SSE4-NEXT:    pminsd %xmm3, %xmm1934; SSE4-NEXT:    pminsd %xmm2, %xmm0935; SSE4-NEXT:    pminsd %xmm1, %xmm0936; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]937; SSE4-NEXT:    pminsd %xmm0, %xmm1938; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]939; SSE4-NEXT:    pminsd %xmm1, %xmm0940; SSE4-NEXT:    movd %xmm0, %eax941; SSE4-NEXT:    retq942;943; AVX1-LABEL: test_v16i32:944; AVX1:       # %bb.0:945; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2946; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3947; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2948; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0949; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0950; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]951; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0952; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]953; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0954; AVX1-NEXT:    vmovd %xmm0, %eax955; AVX1-NEXT:    vzeroupper956; AVX1-NEXT:    retq957;958; AVX2-LABEL: test_v16i32:959; AVX2:       # %bb.0:960; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0961; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1962; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0963; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]964; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0965; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]966; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0967; AVX2-NEXT:    vmovd %xmm0, %eax968; AVX2-NEXT:    vzeroupper969; AVX2-NEXT:    retq970;971; AVX512-LABEL: test_v16i32:972; AVX512:       # %bb.0:973; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm1974; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0975; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1976; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0977; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]978; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0979; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]980; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0981; AVX512-NEXT:    vmovd %xmm0, %eax982; AVX512-NEXT:    vzeroupper983; AVX512-NEXT:    retq984  %1 = call i32 @llvm.vector.reduce.smin.v16i32(<16 x i32> %a0)985  ret i32 %1986}987 988define i32 @test_v32i32(<32 x i32> %a0) {989; SSE2-LABEL: test_v32i32:990; SSE2:       # %bb.0:991; SSE2-NEXT:    movdqa %xmm5, %xmm8992; SSE2-NEXT:    pcmpgtd %xmm1, %xmm8993; SSE2-NEXT:    pand %xmm8, %xmm1994; SSE2-NEXT:    pandn %xmm5, %xmm8995; SSE2-NEXT:    por %xmm1, %xmm8996; SSE2-NEXT:    movdqa %xmm7, %xmm1997; SSE2-NEXT:    pcmpgtd %xmm3, %xmm1998; SSE2-NEXT:    pand %xmm1, %xmm3999; SSE2-NEXT:    pandn %xmm7, %xmm11000; SSE2-NEXT:    por %xmm3, %xmm11001; SSE2-NEXT:    movdqa %xmm4, %xmm31002; SSE2-NEXT:    pcmpgtd %xmm0, %xmm31003; SSE2-NEXT:    pand %xmm3, %xmm01004; SSE2-NEXT:    pandn %xmm4, %xmm31005; SSE2-NEXT:    por %xmm0, %xmm31006; SSE2-NEXT:    movdqa %xmm6, %xmm01007; SSE2-NEXT:    pcmpgtd %xmm2, %xmm01008; SSE2-NEXT:    pand %xmm0, %xmm21009; SSE2-NEXT:    pandn %xmm6, %xmm01010; SSE2-NEXT:    por %xmm2, %xmm01011; SSE2-NEXT:    movdqa %xmm0, %xmm21012; SSE2-NEXT:    pcmpgtd %xmm3, %xmm21013; SSE2-NEXT:    pand %xmm2, %xmm31014; SSE2-NEXT:    pandn %xmm0, %xmm21015; SSE2-NEXT:    por %xmm3, %xmm21016; SSE2-NEXT:    movdqa %xmm1, %xmm01017; SSE2-NEXT:    pcmpgtd %xmm8, %xmm01018; SSE2-NEXT:    pand %xmm0, %xmm81019; SSE2-NEXT:    pandn %xmm1, %xmm01020; SSE2-NEXT:    por %xmm8, %xmm01021; SSE2-NEXT:    movdqa %xmm0, %xmm11022; SSE2-NEXT:    pcmpgtd %xmm2, %xmm11023; SSE2-NEXT:    pand %xmm1, %xmm21024; SSE2-NEXT:    pandn %xmm0, %xmm11025; SSE2-NEXT:    por %xmm2, %xmm11026; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1027; SSE2-NEXT:    movdqa %xmm0, %xmm21028; SSE2-NEXT:    pcmpgtd %xmm1, %xmm21029; SSE2-NEXT:    pand %xmm2, %xmm11030; SSE2-NEXT:    pandn %xmm0, %xmm21031; SSE2-NEXT:    por %xmm1, %xmm21032; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]1033; SSE2-NEXT:    movdqa %xmm0, %xmm11034; SSE2-NEXT:    pcmpgtd %xmm2, %xmm11035; SSE2-NEXT:    pand %xmm1, %xmm21036; SSE2-NEXT:    pandn %xmm0, %xmm11037; SSE2-NEXT:    por %xmm2, %xmm11038; SSE2-NEXT:    movd %xmm1, %eax1039; SSE2-NEXT:    retq1040;1041; SSE4-LABEL: test_v32i32:1042; SSE4:       # %bb.0:1043; SSE4-NEXT:    pminsd %xmm6, %xmm21044; SSE4-NEXT:    pminsd %xmm4, %xmm01045; SSE4-NEXT:    pminsd %xmm2, %xmm01046; SSE4-NEXT:    pminsd %xmm7, %xmm31047; SSE4-NEXT:    pminsd %xmm5, %xmm11048; SSE4-NEXT:    pminsd %xmm3, %xmm11049; SSE4-NEXT:    pminsd %xmm0, %xmm11050; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1051; SSE4-NEXT:    pminsd %xmm1, %xmm01052; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1053; SSE4-NEXT:    pminsd %xmm0, %xmm11054; SSE4-NEXT:    movd %xmm1, %eax1055; SSE4-NEXT:    retq1056;1057; AVX1-LABEL: test_v32i32:1058; AVX1:       # %bb.0:1059; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm41060; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm51061; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm41062; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm31063; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11064; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm11065; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm21066; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01067; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm01068; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm01069; AVX1-NEXT:    vpminsd %xmm0, %xmm4, %xmm01070; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1071; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm01072; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1073; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm01074; AVX1-NEXT:    vmovd %xmm0, %eax1075; AVX1-NEXT:    vzeroupper1076; AVX1-NEXT:    retq1077;1078; AVX2-LABEL: test_v32i32:1079; AVX2:       # %bb.0:1080; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm11081; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm01082; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm01083; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11084; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm01085; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1086; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm01087; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1088; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm01089; AVX2-NEXT:    vmovd %xmm0, %eax1090; AVX2-NEXT:    vzeroupper1091; AVX2-NEXT:    retq1092;1093; AVX512-LABEL: test_v32i32:1094; AVX512:       # %bb.0:1095; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm01096; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm11097; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm01098; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm11099; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm01100; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1101; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm01102; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1103; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm01104; AVX512-NEXT:    vmovd %xmm0, %eax1105; AVX512-NEXT:    vzeroupper1106; AVX512-NEXT:    retq1107  %1 = call i32 @llvm.vector.reduce.smin.v32i32(<32 x i32> %a0)1108  ret i32 %11109}1110 1111;1112; vXi161113;1114 1115define i16 @test_v2i16(<2 x i16> %a0) {1116; SSE-LABEL: test_v2i16:1117; SSE:       # %bb.0:1118; SSE-NEXT:    movdqa %xmm0, %xmm11119; SSE-NEXT:    psrld $16, %xmm11120; SSE-NEXT:    pminsw %xmm0, %xmm11121; SSE-NEXT:    movd %xmm1, %eax1122; SSE-NEXT:    # kill: def $ax killed $ax killed $eax1123; SSE-NEXT:    retq1124;1125; AVX-LABEL: test_v2i16:1126; AVX:       # %bb.0:1127; AVX-NEXT:    vpsrld $16, %xmm0, %xmm11128; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm01129; AVX-NEXT:    vmovd %xmm0, %eax1130; AVX-NEXT:    # kill: def $ax killed $ax killed $eax1131; AVX-NEXT:    retq1132;1133; AVX512-LABEL: test_v2i16:1134; AVX512:       # %bb.0:1135; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm11136; AVX512-NEXT:    vpminsw %xmm1, %xmm0, %xmm01137; AVX512-NEXT:    vmovd %xmm0, %eax1138; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax1139; AVX512-NEXT:    retq1140  %1 = call i16 @llvm.vector.reduce.smin.v2i16(<2 x i16> %a0)1141  ret i16 %11142}1143 1144define i16 @test_v4i16(<4 x i16> %a0) {1145; SSE-LABEL: test_v4i16:1146; SSE:       # %bb.0:1147; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1148; SSE-NEXT:    pminsw %xmm0, %xmm11149; SSE-NEXT:    movdqa %xmm1, %xmm01150; SSE-NEXT:    psrld $16, %xmm01151; SSE-NEXT:    pminsw %xmm1, %xmm01152; SSE-NEXT:    movd %xmm0, %eax1153; SSE-NEXT:    # kill: def $ax killed $ax killed $eax1154; SSE-NEXT:    retq1155;1156; AVX-LABEL: test_v4i16:1157; AVX:       # %bb.0:1158; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1159; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm01160; AVX-NEXT:    vpsrld $16, %xmm0, %xmm11161; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm01162; AVX-NEXT:    vmovd %xmm0, %eax1163; AVX-NEXT:    # kill: def $ax killed $ax killed $eax1164; AVX-NEXT:    retq1165;1166; AVX512-LABEL: test_v4i16:1167; AVX512:       # %bb.0:1168; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1169; AVX512-NEXT:    vpminsw %xmm1, %xmm0, %xmm01170; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm11171; AVX512-NEXT:    vpminsw %xmm1, %xmm0, %xmm01172; AVX512-NEXT:    vmovd %xmm0, %eax1173; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax1174; AVX512-NEXT:    retq1175  %1 = call i16 @llvm.vector.reduce.smin.v4i16(<4 x i16> %a0)1176  ret i16 %11177}1178 1179define i16 @test_v8i16(<8 x i16> %a0) {1180; SSE2-LABEL: test_v8i16:1181; SSE2:       # %bb.0:1182; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1183; SSE2-NEXT:    pminsw %xmm0, %xmm11184; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1185; SSE2-NEXT:    pminsw %xmm1, %xmm01186; SSE2-NEXT:    movdqa %xmm0, %xmm11187; SSE2-NEXT:    psrld $16, %xmm11188; SSE2-NEXT:    pminsw %xmm0, %xmm11189; SSE2-NEXT:    movd %xmm1, %eax1190; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1191; SSE2-NEXT:    retq1192;1193; SSE4-LABEL: test_v8i16:1194; SSE4:       # %bb.0:1195; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01196; SSE4-NEXT:    phminposuw %xmm0, %xmm01197; SSE4-NEXT:    movd %xmm0, %eax1198; SSE4-NEXT:    xorl $32768, %eax # imm = 0x80001199; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1200; SSE4-NEXT:    retq1201;1202; AVX-LABEL: test_v8i16:1203; AVX:       # %bb.0:1204; AVX-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01205; AVX-NEXT:    vphminposuw %xmm0, %xmm01206; AVX-NEXT:    vmovd %xmm0, %eax1207; AVX-NEXT:    xorl $32768, %eax # imm = 0x80001208; AVX-NEXT:    # kill: def $ax killed $ax killed $eax1209; AVX-NEXT:    retq1210;1211; AVX512BW-LABEL: test_v8i16:1212; AVX512BW:       # %bb.0:1213; AVX512BW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01214; AVX512BW-NEXT:    vphminposuw %xmm0, %xmm01215; AVX512BW-NEXT:    vmovd %xmm0, %eax1216; AVX512BW-NEXT:    xorl $32768, %eax # imm = 0x80001217; AVX512BW-NEXT:    # kill: def $ax killed $ax killed $eax1218; AVX512BW-NEXT:    retq1219;1220; AVX512VL-LABEL: test_v8i16:1221; AVX512VL:       # %bb.0:1222; AVX512VL-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01223; AVX512VL-NEXT:    vphminposuw %xmm0, %xmm01224; AVX512VL-NEXT:    vmovd %xmm0, %eax1225; AVX512VL-NEXT:    xorl $32768, %eax # imm = 0x80001226; AVX512VL-NEXT:    # kill: def $ax killed $ax killed $eax1227; AVX512VL-NEXT:    retq1228  %1 = call i16 @llvm.vector.reduce.smin.v8i16(<8 x i16> %a0)1229  ret i16 %11230}1231 1232define i16 @test_v16i16(<16 x i16> %a0) {1233; SSE2-LABEL: test_v16i16:1234; SSE2:       # %bb.0:1235; SSE2-NEXT:    pminsw %xmm1, %xmm01236; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1237; SSE2-NEXT:    pminsw %xmm0, %xmm11238; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1239; SSE2-NEXT:    pminsw %xmm1, %xmm01240; SSE2-NEXT:    movdqa %xmm0, %xmm11241; SSE2-NEXT:    psrld $16, %xmm11242; SSE2-NEXT:    pminsw %xmm0, %xmm11243; SSE2-NEXT:    movd %xmm1, %eax1244; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1245; SSE2-NEXT:    retq1246;1247; SSE4-LABEL: test_v16i16:1248; SSE4:       # %bb.0:1249; SSE4-NEXT:    pminsw %xmm1, %xmm01250; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01251; SSE4-NEXT:    phminposuw %xmm0, %xmm01252; SSE4-NEXT:    movd %xmm0, %eax1253; SSE4-NEXT:    xorl $32768, %eax # imm = 0x80001254; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1255; SSE4-NEXT:    retq1256;1257; AVX1-LABEL: test_v16i16:1258; AVX1:       # %bb.0:1259; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11260; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm01261; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01262; AVX1-NEXT:    vphminposuw %xmm0, %xmm01263; AVX1-NEXT:    vmovd %xmm0, %eax1264; AVX1-NEXT:    xorl $32768, %eax # imm = 0x80001265; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax1266; AVX1-NEXT:    vzeroupper1267; AVX1-NEXT:    retq1268;1269; AVX2-LABEL: test_v16i16:1270; AVX2:       # %bb.0:1271; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11272; AVX2-NEXT:    vpminsw %xmm1, %xmm0, %xmm01273; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01274; AVX2-NEXT:    vphminposuw %xmm0, %xmm01275; AVX2-NEXT:    vmovd %xmm0, %eax1276; AVX2-NEXT:    xorl $32768, %eax # imm = 0x80001277; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax1278; AVX2-NEXT:    vzeroupper1279; AVX2-NEXT:    retq1280;1281; AVX512BW-LABEL: test_v16i16:1282; AVX512BW:       # %bb.0:1283; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm11284; AVX512BW-NEXT:    vpminsw %xmm1, %xmm0, %xmm01285; AVX512BW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01286; AVX512BW-NEXT:    vphminposuw %xmm0, %xmm01287; AVX512BW-NEXT:    vmovd %xmm0, %eax1288; AVX512BW-NEXT:    xorl $32768, %eax # imm = 0x80001289; AVX512BW-NEXT:    # kill: def $ax killed $ax killed $eax1290; AVX512BW-NEXT:    vzeroupper1291; AVX512BW-NEXT:    retq1292;1293; AVX512VL-LABEL: test_v16i16:1294; AVX512VL:       # %bb.0:1295; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm11296; AVX512VL-NEXT:    vpminsw %xmm1, %xmm0, %xmm01297; AVX512VL-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01298; AVX512VL-NEXT:    vphminposuw %xmm0, %xmm01299; AVX512VL-NEXT:    vmovd %xmm0, %eax1300; AVX512VL-NEXT:    xorl $32768, %eax # imm = 0x80001301; AVX512VL-NEXT:    # kill: def $ax killed $ax killed $eax1302; AVX512VL-NEXT:    vzeroupper1303; AVX512VL-NEXT:    retq1304  %1 = call i16 @llvm.vector.reduce.smin.v16i16(<16 x i16> %a0)1305  ret i16 %11306}1307 1308define i16 @test_v32i16(<32 x i16> %a0) {1309; SSE2-LABEL: test_v32i16:1310; SSE2:       # %bb.0:1311; SSE2-NEXT:    pminsw %xmm3, %xmm11312; SSE2-NEXT:    pminsw %xmm2, %xmm01313; SSE2-NEXT:    pminsw %xmm1, %xmm01314; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1315; SSE2-NEXT:    pminsw %xmm0, %xmm11316; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1317; SSE2-NEXT:    pminsw %xmm1, %xmm01318; SSE2-NEXT:    movdqa %xmm0, %xmm11319; SSE2-NEXT:    psrld $16, %xmm11320; SSE2-NEXT:    pminsw %xmm0, %xmm11321; SSE2-NEXT:    movd %xmm1, %eax1322; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1323; SSE2-NEXT:    retq1324;1325; SSE4-LABEL: test_v32i16:1326; SSE4:       # %bb.0:1327; SSE4-NEXT:    pminsw %xmm3, %xmm11328; SSE4-NEXT:    pminsw %xmm2, %xmm01329; SSE4-NEXT:    pminsw %xmm1, %xmm01330; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01331; SSE4-NEXT:    phminposuw %xmm0, %xmm01332; SSE4-NEXT:    movd %xmm0, %eax1333; SSE4-NEXT:    xorl $32768, %eax # imm = 0x80001334; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1335; SSE4-NEXT:    retq1336;1337; AVX1-LABEL: test_v32i16:1338; AVX1:       # %bb.0:1339; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21340; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31341; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm21342; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm01343; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm01344; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01345; AVX1-NEXT:    vphminposuw %xmm0, %xmm01346; AVX1-NEXT:    vmovd %xmm0, %eax1347; AVX1-NEXT:    xorl $32768, %eax # imm = 0x80001348; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax1349; AVX1-NEXT:    vzeroupper1350; AVX1-NEXT:    retq1351;1352; AVX2-LABEL: test_v32i16:1353; AVX2:       # %bb.0:1354; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm01355; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11356; AVX2-NEXT:    vpminsw %xmm1, %xmm0, %xmm01357; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01358; AVX2-NEXT:    vphminposuw %xmm0, %xmm01359; AVX2-NEXT:    vmovd %xmm0, %eax1360; AVX2-NEXT:    xorl $32768, %eax # imm = 0x80001361; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax1362; AVX2-NEXT:    vzeroupper1363; AVX2-NEXT:    retq1364;1365; AVX512BW-LABEL: test_v32i16:1366; AVX512BW:       # %bb.0:1367; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm11368; AVX512BW-NEXT:    vpminsw %ymm1, %ymm0, %ymm01369; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm11370; AVX512BW-NEXT:    vpminsw %xmm1, %xmm0, %xmm01371; AVX512BW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01372; AVX512BW-NEXT:    vphminposuw %xmm0, %xmm01373; AVX512BW-NEXT:    vmovd %xmm0, %eax1374; AVX512BW-NEXT:    xorl $32768, %eax # imm = 0x80001375; AVX512BW-NEXT:    # kill: def $ax killed $ax killed $eax1376; AVX512BW-NEXT:    vzeroupper1377; AVX512BW-NEXT:    retq1378;1379; AVX512VL-LABEL: test_v32i16:1380; AVX512VL:       # %bb.0:1381; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm11382; AVX512VL-NEXT:    vpminsw %ymm1, %ymm0, %ymm01383; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm11384; AVX512VL-NEXT:    vpminsw %xmm1, %xmm0, %xmm01385; AVX512VL-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01386; AVX512VL-NEXT:    vphminposuw %xmm0, %xmm01387; AVX512VL-NEXT:    vmovd %xmm0, %eax1388; AVX512VL-NEXT:    xorl $32768, %eax # imm = 0x80001389; AVX512VL-NEXT:    # kill: def $ax killed $ax killed $eax1390; AVX512VL-NEXT:    vzeroupper1391; AVX512VL-NEXT:    retq1392  %1 = call i16 @llvm.vector.reduce.smin.v32i16(<32 x i16> %a0)1393  ret i16 %11394}1395 1396define i16 @test_v64i16(<64 x i16> %a0) {1397; SSE2-LABEL: test_v64i16:1398; SSE2:       # %bb.0:1399; SSE2-NEXT:    pminsw %xmm6, %xmm21400; SSE2-NEXT:    pminsw %xmm4, %xmm01401; SSE2-NEXT:    pminsw %xmm2, %xmm01402; SSE2-NEXT:    pminsw %xmm7, %xmm31403; SSE2-NEXT:    pminsw %xmm5, %xmm11404; SSE2-NEXT:    pminsw %xmm3, %xmm11405; SSE2-NEXT:    pminsw %xmm0, %xmm11406; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1407; SSE2-NEXT:    pminsw %xmm1, %xmm01408; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1409; SSE2-NEXT:    pminsw %xmm0, %xmm11410; SSE2-NEXT:    movdqa %xmm1, %xmm01411; SSE2-NEXT:    psrld $16, %xmm01412; SSE2-NEXT:    pminsw %xmm1, %xmm01413; SSE2-NEXT:    movd %xmm0, %eax1414; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1415; SSE2-NEXT:    retq1416;1417; SSE4-LABEL: test_v64i16:1418; SSE4:       # %bb.0:1419; SSE4-NEXT:    pminsw %xmm7, %xmm31420; SSE4-NEXT:    pminsw %xmm5, %xmm11421; SSE4-NEXT:    pminsw %xmm3, %xmm11422; SSE4-NEXT:    pminsw %xmm6, %xmm21423; SSE4-NEXT:    pminsw %xmm4, %xmm01424; SSE4-NEXT:    pminsw %xmm2, %xmm01425; SSE4-NEXT:    pminsw %xmm1, %xmm01426; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01427; SSE4-NEXT:    phminposuw %xmm0, %xmm01428; SSE4-NEXT:    movd %xmm0, %eax1429; SSE4-NEXT:    xorl $32768, %eax # imm = 0x80001430; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1431; SSE4-NEXT:    retq1432;1433; AVX1-LABEL: test_v64i16:1434; AVX1:       # %bb.0:1435; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm41436; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm51437; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm41438; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm51439; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm61440; AVX1-NEXT:    vpminsw %xmm5, %xmm6, %xmm51441; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm41442; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm11443; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm01444; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm01445; AVX1-NEXT:    vpminsw %xmm4, %xmm0, %xmm01446; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01447; AVX1-NEXT:    vphminposuw %xmm0, %xmm01448; AVX1-NEXT:    vmovd %xmm0, %eax1449; AVX1-NEXT:    xorl $32768, %eax # imm = 0x80001450; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax1451; AVX1-NEXT:    vzeroupper1452; AVX1-NEXT:    retq1453;1454; AVX2-LABEL: test_v64i16:1455; AVX2:       # %bb.0:1456; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm11457; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm01458; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm01459; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11460; AVX2-NEXT:    vpminsw %xmm1, %xmm0, %xmm01461; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01462; AVX2-NEXT:    vphminposuw %xmm0, %xmm01463; AVX2-NEXT:    vmovd %xmm0, %eax1464; AVX2-NEXT:    xorl $32768, %eax # imm = 0x80001465; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax1466; AVX2-NEXT:    vzeroupper1467; AVX2-NEXT:    retq1468;1469; AVX512BW-LABEL: test_v64i16:1470; AVX512BW:       # %bb.0:1471; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm01472; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm11473; AVX512BW-NEXT:    vpminsw %ymm1, %ymm0, %ymm01474; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm11475; AVX512BW-NEXT:    vpminsw %xmm1, %xmm0, %xmm01476; AVX512BW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01477; AVX512BW-NEXT:    vphminposuw %xmm0, %xmm01478; AVX512BW-NEXT:    vmovd %xmm0, %eax1479; AVX512BW-NEXT:    xorl $32768, %eax # imm = 0x80001480; AVX512BW-NEXT:    # kill: def $ax killed $ax killed $eax1481; AVX512BW-NEXT:    vzeroupper1482; AVX512BW-NEXT:    retq1483;1484; AVX512VL-LABEL: test_v64i16:1485; AVX512VL:       # %bb.0:1486; AVX512VL-NEXT:    vpminsw %zmm1, %zmm0, %zmm01487; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm11488; AVX512VL-NEXT:    vpminsw %ymm1, %ymm0, %ymm01489; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm11490; AVX512VL-NEXT:    vpminsw %xmm1, %xmm0, %xmm01491; AVX512VL-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01492; AVX512VL-NEXT:    vphminposuw %xmm0, %xmm01493; AVX512VL-NEXT:    vmovd %xmm0, %eax1494; AVX512VL-NEXT:    xorl $32768, %eax # imm = 0x80001495; AVX512VL-NEXT:    # kill: def $ax killed $ax killed $eax1496; AVX512VL-NEXT:    vzeroupper1497; AVX512VL-NEXT:    retq1498  %1 = call i16 @llvm.vector.reduce.smin.v64i16(<64 x i16> %a0)1499  ret i16 %11500}1501 1502;1503; vXi81504;1505 1506define i8 @test_v2i8(<2 x i8> %a0) {1507; SSE2-LABEL: test_v2i8:1508; SSE2:       # %bb.0:1509; SSE2-NEXT:    movdqa %xmm0, %xmm11510; SSE2-NEXT:    psrlw $8, %xmm11511; SSE2-NEXT:    movdqa %xmm1, %xmm21512; SSE2-NEXT:    pcmpgtb %xmm0, %xmm21513; SSE2-NEXT:    pand %xmm2, %xmm01514; SSE2-NEXT:    pandn %xmm1, %xmm21515; SSE2-NEXT:    por %xmm0, %xmm21516; SSE2-NEXT:    movd %xmm2, %eax1517; SSE2-NEXT:    # kill: def $al killed $al killed $eax1518; SSE2-NEXT:    retq1519;1520; SSE4-LABEL: test_v2i8:1521; SSE4:       # %bb.0:1522; SSE4-NEXT:    movdqa %xmm0, %xmm11523; SSE4-NEXT:    psrlw $8, %xmm11524; SSE4-NEXT:    pminsb %xmm0, %xmm11525; SSE4-NEXT:    movd %xmm1, %eax1526; SSE4-NEXT:    # kill: def $al killed $al killed $eax1527; SSE4-NEXT:    retq1528;1529; AVX-LABEL: test_v2i8:1530; AVX:       # %bb.0:1531; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm11532; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm01533; AVX-NEXT:    vmovd %xmm0, %eax1534; AVX-NEXT:    # kill: def $al killed $al killed $eax1535; AVX-NEXT:    retq1536;1537; AVX512-LABEL: test_v2i8:1538; AVX512:       # %bb.0:1539; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm11540; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm01541; AVX512-NEXT:    vmovd %xmm0, %eax1542; AVX512-NEXT:    # kill: def $al killed $al killed $eax1543; AVX512-NEXT:    retq1544  %1 = call i8 @llvm.vector.reduce.smin.v2i8(<2 x i8> %a0)1545  ret i8 %11546}1547 1548define i8 @test_v4i8(<4 x i8> %a0) {1549; SSE2-LABEL: test_v4i8:1550; SSE2:       # %bb.0:1551; SSE2-NEXT:    movdqa %xmm0, %xmm11552; SSE2-NEXT:    psrld $16, %xmm11553; SSE2-NEXT:    movdqa %xmm1, %xmm21554; SSE2-NEXT:    pcmpgtb %xmm0, %xmm21555; SSE2-NEXT:    pand %xmm2, %xmm01556; SSE2-NEXT:    pandn %xmm1, %xmm21557; SSE2-NEXT:    por %xmm0, %xmm21558; SSE2-NEXT:    movdqa %xmm2, %xmm01559; SSE2-NEXT:    psrlw $8, %xmm01560; SSE2-NEXT:    movdqa %xmm0, %xmm11561; SSE2-NEXT:    pcmpgtb %xmm2, %xmm11562; SSE2-NEXT:    pand %xmm1, %xmm21563; SSE2-NEXT:    pandn %xmm0, %xmm11564; SSE2-NEXT:    por %xmm2, %xmm11565; SSE2-NEXT:    movd %xmm1, %eax1566; SSE2-NEXT:    # kill: def $al killed $al killed $eax1567; SSE2-NEXT:    retq1568;1569; SSE4-LABEL: test_v4i8:1570; SSE4:       # %bb.0:1571; SSE4-NEXT:    movdqa %xmm0, %xmm11572; SSE4-NEXT:    psrld $16, %xmm11573; SSE4-NEXT:    pminsb %xmm0, %xmm11574; SSE4-NEXT:    movdqa %xmm1, %xmm01575; SSE4-NEXT:    psrlw $8, %xmm01576; SSE4-NEXT:    pminsb %xmm1, %xmm01577; SSE4-NEXT:    movd %xmm0, %eax1578; SSE4-NEXT:    # kill: def $al killed $al killed $eax1579; SSE4-NEXT:    retq1580;1581; AVX-LABEL: test_v4i8:1582; AVX:       # %bb.0:1583; AVX-NEXT:    vpsrld $16, %xmm0, %xmm11584; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm01585; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm11586; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm01587; AVX-NEXT:    vmovd %xmm0, %eax1588; AVX-NEXT:    # kill: def $al killed $al killed $eax1589; AVX-NEXT:    retq1590;1591; AVX512-LABEL: test_v4i8:1592; AVX512:       # %bb.0:1593; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm11594; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm01595; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm11596; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm01597; AVX512-NEXT:    vmovd %xmm0, %eax1598; AVX512-NEXT:    # kill: def $al killed $al killed $eax1599; AVX512-NEXT:    retq1600  %1 = call i8 @llvm.vector.reduce.smin.v4i8(<4 x i8> %a0)1601  ret i8 %11602}1603 1604define i8 @test_v8i8(<8 x i8> %a0) {1605; SSE2-LABEL: test_v8i8:1606; SSE2:       # %bb.0:1607; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1608; SSE2-NEXT:    movdqa %xmm1, %xmm21609; SSE2-NEXT:    pcmpgtb %xmm0, %xmm21610; SSE2-NEXT:    pand %xmm2, %xmm01611; SSE2-NEXT:    pandn %xmm1, %xmm21612; SSE2-NEXT:    por %xmm0, %xmm21613; SSE2-NEXT:    movdqa %xmm2, %xmm01614; SSE2-NEXT:    psrld $16, %xmm01615; SSE2-NEXT:    movdqa %xmm0, %xmm11616; SSE2-NEXT:    pcmpgtb %xmm2, %xmm11617; SSE2-NEXT:    pand %xmm1, %xmm21618; SSE2-NEXT:    pandn %xmm0, %xmm11619; SSE2-NEXT:    por %xmm2, %xmm11620; SSE2-NEXT:    movdqa %xmm1, %xmm01621; SSE2-NEXT:    psrlw $8, %xmm01622; SSE2-NEXT:    movdqa %xmm0, %xmm21623; SSE2-NEXT:    pcmpgtb %xmm1, %xmm21624; SSE2-NEXT:    pand %xmm2, %xmm11625; SSE2-NEXT:    pandn %xmm0, %xmm21626; SSE2-NEXT:    por %xmm1, %xmm21627; SSE2-NEXT:    movd %xmm2, %eax1628; SSE2-NEXT:    # kill: def $al killed $al killed $eax1629; SSE2-NEXT:    retq1630;1631; SSE4-LABEL: test_v8i8:1632; SSE4:       # %bb.0:1633; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1634; SSE4-NEXT:    pminsb %xmm0, %xmm11635; SSE4-NEXT:    movdqa %xmm1, %xmm01636; SSE4-NEXT:    psrld $16, %xmm01637; SSE4-NEXT:    pminsb %xmm1, %xmm01638; SSE4-NEXT:    movdqa %xmm0, %xmm11639; SSE4-NEXT:    psrlw $8, %xmm11640; SSE4-NEXT:    pminsb %xmm0, %xmm11641; SSE4-NEXT:    movd %xmm1, %eax1642; SSE4-NEXT:    # kill: def $al killed $al killed $eax1643; SSE4-NEXT:    retq1644;1645; AVX-LABEL: test_v8i8:1646; AVX:       # %bb.0:1647; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1648; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm01649; AVX-NEXT:    vpsrld $16, %xmm0, %xmm11650; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm01651; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm11652; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm01653; AVX-NEXT:    vmovd %xmm0, %eax1654; AVX-NEXT:    # kill: def $al killed $al killed $eax1655; AVX-NEXT:    retq1656;1657; AVX512-LABEL: test_v8i8:1658; AVX512:       # %bb.0:1659; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1660; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm01661; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm11662; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm01663; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm11664; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm01665; AVX512-NEXT:    vmovd %xmm0, %eax1666; AVX512-NEXT:    # kill: def $al killed $al killed $eax1667; AVX512-NEXT:    retq1668  %1 = call i8 @llvm.vector.reduce.smin.v8i8(<8 x i8> %a0)1669  ret i8 %11670}1671 1672define i8 @test_v16i8(<16 x i8> %a0) {1673; SSE2-LABEL: test_v16i8:1674; SSE2:       # %bb.0:1675; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1676; SSE2-NEXT:    movdqa %xmm1, %xmm21677; SSE2-NEXT:    pcmpgtb %xmm0, %xmm21678; SSE2-NEXT:    pand %xmm2, %xmm01679; SSE2-NEXT:    pandn %xmm1, %xmm21680; SSE2-NEXT:    por %xmm0, %xmm21681; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]1682; SSE2-NEXT:    movdqa %xmm0, %xmm11683; SSE2-NEXT:    pcmpgtb %xmm2, %xmm11684; SSE2-NEXT:    pand %xmm1, %xmm21685; SSE2-NEXT:    pandn %xmm0, %xmm11686; SSE2-NEXT:    por %xmm2, %xmm11687; SSE2-NEXT:    movdqa %xmm1, %xmm01688; SSE2-NEXT:    psrld $16, %xmm01689; SSE2-NEXT:    movdqa %xmm0, %xmm21690; SSE2-NEXT:    pcmpgtb %xmm1, %xmm21691; SSE2-NEXT:    pand %xmm2, %xmm11692; SSE2-NEXT:    pandn %xmm0, %xmm21693; SSE2-NEXT:    por %xmm1, %xmm21694; SSE2-NEXT:    movdqa %xmm2, %xmm01695; SSE2-NEXT:    psrlw $8, %xmm01696; SSE2-NEXT:    movdqa %xmm0, %xmm11697; SSE2-NEXT:    pcmpgtb %xmm2, %xmm11698; SSE2-NEXT:    pand %xmm1, %xmm21699; SSE2-NEXT:    pandn %xmm0, %xmm11700; SSE2-NEXT:    por %xmm2, %xmm11701; SSE2-NEXT:    movd %xmm1, %eax1702; SSE2-NEXT:    # kill: def $al killed $al killed $eax1703; SSE2-NEXT:    retq1704;1705; SSE4-LABEL: test_v16i8:1706; SSE4:       # %bb.0:1707; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01708; SSE4-NEXT:    movdqa %xmm0, %xmm11709; SSE4-NEXT:    psrlw $8, %xmm11710; SSE4-NEXT:    pminub %xmm0, %xmm11711; SSE4-NEXT:    phminposuw %xmm1, %xmm01712; SSE4-NEXT:    movd %xmm0, %eax1713; SSE4-NEXT:    addb $-128, %al1714; SSE4-NEXT:    # kill: def $al killed $al killed $eax1715; SSE4-NEXT:    retq1716;1717; AVX-LABEL: test_v16i8:1718; AVX:       # %bb.0:1719; AVX-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01720; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm11721; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm01722; AVX-NEXT:    vphminposuw %xmm0, %xmm01723; AVX-NEXT:    vmovd %xmm0, %eax1724; AVX-NEXT:    addb $-128, %al1725; AVX-NEXT:    # kill: def $al killed $al killed $eax1726; AVX-NEXT:    retq1727;1728; AVX512BW-LABEL: test_v16i8:1729; AVX512BW:       # %bb.0:1730; AVX512BW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01731; AVX512BW-NEXT:    vpsrlw $8, %xmm0, %xmm11732; AVX512BW-NEXT:    vpminub %xmm1, %xmm0, %xmm01733; AVX512BW-NEXT:    vphminposuw %xmm0, %xmm01734; AVX512BW-NEXT:    vmovd %xmm0, %eax1735; AVX512BW-NEXT:    addb $-128, %al1736; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax1737; AVX512BW-NEXT:    retq1738;1739; AVX512VL-LABEL: test_v16i8:1740; AVX512VL:       # %bb.0:1741; AVX512VL-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01742; AVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm11743; AVX512VL-NEXT:    vpminub %xmm1, %xmm0, %xmm01744; AVX512VL-NEXT:    vphminposuw %xmm0, %xmm01745; AVX512VL-NEXT:    vmovd %xmm0, %eax1746; AVX512VL-NEXT:    addb $-128, %al1747; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax1748; AVX512VL-NEXT:    retq1749  %1 = call i8 @llvm.vector.reduce.smin.v16i8(<16 x i8> %a0)1750  ret i8 %11751}1752 1753define i8 @test_v32i8(<32 x i8> %a0) {1754; SSE2-LABEL: test_v32i8:1755; SSE2:       # %bb.0:1756; SSE2-NEXT:    movdqa %xmm1, %xmm21757; SSE2-NEXT:    pcmpgtb %xmm0, %xmm21758; SSE2-NEXT:    pand %xmm2, %xmm01759; SSE2-NEXT:    pandn %xmm1, %xmm21760; SSE2-NEXT:    por %xmm0, %xmm21761; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]1762; SSE2-NEXT:    movdqa %xmm0, %xmm11763; SSE2-NEXT:    pcmpgtb %xmm2, %xmm11764; SSE2-NEXT:    pand %xmm1, %xmm21765; SSE2-NEXT:    pandn %xmm0, %xmm11766; SSE2-NEXT:    por %xmm2, %xmm11767; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1768; SSE2-NEXT:    movdqa %xmm0, %xmm21769; SSE2-NEXT:    pcmpgtb %xmm1, %xmm21770; SSE2-NEXT:    pand %xmm2, %xmm11771; SSE2-NEXT:    pandn %xmm0, %xmm21772; SSE2-NEXT:    por %xmm1, %xmm21773; SSE2-NEXT:    movdqa %xmm2, %xmm01774; SSE2-NEXT:    psrld $16, %xmm01775; SSE2-NEXT:    movdqa %xmm0, %xmm11776; SSE2-NEXT:    pcmpgtb %xmm2, %xmm11777; SSE2-NEXT:    pand %xmm1, %xmm21778; SSE2-NEXT:    pandn %xmm0, %xmm11779; SSE2-NEXT:    por %xmm2, %xmm11780; SSE2-NEXT:    movdqa %xmm1, %xmm01781; SSE2-NEXT:    psrlw $8, %xmm01782; SSE2-NEXT:    movdqa %xmm0, %xmm21783; SSE2-NEXT:    pcmpgtb %xmm1, %xmm21784; SSE2-NEXT:    pand %xmm2, %xmm11785; SSE2-NEXT:    pandn %xmm0, %xmm21786; SSE2-NEXT:    por %xmm1, %xmm21787; SSE2-NEXT:    movd %xmm2, %eax1788; SSE2-NEXT:    # kill: def $al killed $al killed $eax1789; SSE2-NEXT:    retq1790;1791; SSE4-LABEL: test_v32i8:1792; SSE4:       # %bb.0:1793; SSE4-NEXT:    pminsb %xmm1, %xmm01794; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01795; SSE4-NEXT:    movdqa %xmm0, %xmm11796; SSE4-NEXT:    psrlw $8, %xmm11797; SSE4-NEXT:    pminub %xmm0, %xmm11798; SSE4-NEXT:    phminposuw %xmm1, %xmm01799; SSE4-NEXT:    movd %xmm0, %eax1800; SSE4-NEXT:    addb $-128, %al1801; SSE4-NEXT:    # kill: def $al killed $al killed $eax1802; SSE4-NEXT:    retq1803;1804; AVX1-LABEL: test_v32i8:1805; AVX1:       # %bb.0:1806; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11807; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm01808; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01809; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm11810; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm01811; AVX1-NEXT:    vphminposuw %xmm0, %xmm01812; AVX1-NEXT:    vmovd %xmm0, %eax1813; AVX1-NEXT:    addb $-128, %al1814; AVX1-NEXT:    # kill: def $al killed $al killed $eax1815; AVX1-NEXT:    vzeroupper1816; AVX1-NEXT:    retq1817;1818; AVX2-LABEL: test_v32i8:1819; AVX2:       # %bb.0:1820; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11821; AVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm01822; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01823; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm11824; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm01825; AVX2-NEXT:    vphminposuw %xmm0, %xmm01826; AVX2-NEXT:    vmovd %xmm0, %eax1827; AVX2-NEXT:    addb $-128, %al1828; AVX2-NEXT:    # kill: def $al killed $al killed $eax1829; AVX2-NEXT:    vzeroupper1830; AVX2-NEXT:    retq1831;1832; AVX512BW-LABEL: test_v32i8:1833; AVX512BW:       # %bb.0:1834; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm11835; AVX512BW-NEXT:    vpminsb %xmm1, %xmm0, %xmm01836; AVX512BW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01837; AVX512BW-NEXT:    vpsrlw $8, %xmm0, %xmm11838; AVX512BW-NEXT:    vpminub %xmm1, %xmm0, %xmm01839; AVX512BW-NEXT:    vphminposuw %xmm0, %xmm01840; AVX512BW-NEXT:    vmovd %xmm0, %eax1841; AVX512BW-NEXT:    addb $-128, %al1842; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax1843; AVX512BW-NEXT:    vzeroupper1844; AVX512BW-NEXT:    retq1845;1846; AVX512VL-LABEL: test_v32i8:1847; AVX512VL:       # %bb.0:1848; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm11849; AVX512VL-NEXT:    vpminsb %xmm1, %xmm0, %xmm01850; AVX512VL-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01851; AVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm11852; AVX512VL-NEXT:    vpminub %xmm1, %xmm0, %xmm01853; AVX512VL-NEXT:    vphminposuw %xmm0, %xmm01854; AVX512VL-NEXT:    vmovd %xmm0, %eax1855; AVX512VL-NEXT:    addb $-128, %al1856; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax1857; AVX512VL-NEXT:    vzeroupper1858; AVX512VL-NEXT:    retq1859  %1 = call i8 @llvm.vector.reduce.smin.v32i8(<32 x i8> %a0)1860  ret i8 %11861}1862 1863define i8 @test_v64i8(<64 x i8> %a0) {1864; SSE2-LABEL: test_v64i8:1865; SSE2:       # %bb.0:1866; SSE2-NEXT:    movdqa %xmm2, %xmm41867; SSE2-NEXT:    pcmpgtb %xmm0, %xmm41868; SSE2-NEXT:    pand %xmm4, %xmm01869; SSE2-NEXT:    pandn %xmm2, %xmm41870; SSE2-NEXT:    por %xmm0, %xmm41871; SSE2-NEXT:    movdqa %xmm3, %xmm01872; SSE2-NEXT:    pcmpgtb %xmm1, %xmm01873; SSE2-NEXT:    pand %xmm0, %xmm11874; SSE2-NEXT:    pandn %xmm3, %xmm01875; SSE2-NEXT:    por %xmm1, %xmm01876; SSE2-NEXT:    movdqa %xmm0, %xmm11877; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11878; SSE2-NEXT:    pand %xmm1, %xmm41879; SSE2-NEXT:    pandn %xmm0, %xmm11880; SSE2-NEXT:    por %xmm4, %xmm11881; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1882; SSE2-NEXT:    movdqa %xmm0, %xmm21883; SSE2-NEXT:    pcmpgtb %xmm1, %xmm21884; SSE2-NEXT:    pand %xmm2, %xmm11885; SSE2-NEXT:    pandn %xmm0, %xmm21886; SSE2-NEXT:    por %xmm1, %xmm21887; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]1888; SSE2-NEXT:    movdqa %xmm0, %xmm11889; SSE2-NEXT:    pcmpgtb %xmm2, %xmm11890; SSE2-NEXT:    pand %xmm1, %xmm21891; SSE2-NEXT:    pandn %xmm0, %xmm11892; SSE2-NEXT:    por %xmm2, %xmm11893; SSE2-NEXT:    movdqa %xmm1, %xmm01894; SSE2-NEXT:    psrld $16, %xmm01895; SSE2-NEXT:    movdqa %xmm0, %xmm21896; SSE2-NEXT:    pcmpgtb %xmm1, %xmm21897; SSE2-NEXT:    pand %xmm2, %xmm11898; SSE2-NEXT:    pandn %xmm0, %xmm21899; SSE2-NEXT:    por %xmm1, %xmm21900; SSE2-NEXT:    movdqa %xmm2, %xmm01901; SSE2-NEXT:    psrlw $8, %xmm01902; SSE2-NEXT:    movdqa %xmm0, %xmm11903; SSE2-NEXT:    pcmpgtb %xmm2, %xmm11904; SSE2-NEXT:    pand %xmm1, %xmm21905; SSE2-NEXT:    pandn %xmm0, %xmm11906; SSE2-NEXT:    por %xmm2, %xmm11907; SSE2-NEXT:    movd %xmm1, %eax1908; SSE2-NEXT:    # kill: def $al killed $al killed $eax1909; SSE2-NEXT:    retq1910;1911; SSE4-LABEL: test_v64i8:1912; SSE4:       # %bb.0:1913; SSE4-NEXT:    pminsb %xmm3, %xmm11914; SSE4-NEXT:    pminsb %xmm2, %xmm01915; SSE4-NEXT:    pminsb %xmm1, %xmm01916; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01917; SSE4-NEXT:    movdqa %xmm0, %xmm11918; SSE4-NEXT:    psrlw $8, %xmm11919; SSE4-NEXT:    pminub %xmm0, %xmm11920; SSE4-NEXT:    phminposuw %xmm1, %xmm01921; SSE4-NEXT:    movd %xmm0, %eax1922; SSE4-NEXT:    addb $-128, %al1923; SSE4-NEXT:    # kill: def $al killed $al killed $eax1924; SSE4-NEXT:    retq1925;1926; AVX1-LABEL: test_v64i8:1927; AVX1:       # %bb.0:1928; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21929; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31930; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm21931; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm01932; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm01933; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01934; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm11935; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm01936; AVX1-NEXT:    vphminposuw %xmm0, %xmm01937; AVX1-NEXT:    vmovd %xmm0, %eax1938; AVX1-NEXT:    addb $-128, %al1939; AVX1-NEXT:    # kill: def $al killed $al killed $eax1940; AVX1-NEXT:    vzeroupper1941; AVX1-NEXT:    retq1942;1943; AVX2-LABEL: test_v64i8:1944; AVX2:       # %bb.0:1945; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm01946; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11947; AVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm01948; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01949; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm11950; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm01951; AVX2-NEXT:    vphminposuw %xmm0, %xmm01952; AVX2-NEXT:    vmovd %xmm0, %eax1953; AVX2-NEXT:    addb $-128, %al1954; AVX2-NEXT:    # kill: def $al killed $al killed $eax1955; AVX2-NEXT:    vzeroupper1956; AVX2-NEXT:    retq1957;1958; AVX512BW-LABEL: test_v64i8:1959; AVX512BW:       # %bb.0:1960; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm11961; AVX512BW-NEXT:    vpminsb %ymm1, %ymm0, %ymm01962; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm11963; AVX512BW-NEXT:    vpminsb %xmm1, %xmm0, %xmm01964; AVX512BW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01965; AVX512BW-NEXT:    vpsrlw $8, %xmm0, %xmm11966; AVX512BW-NEXT:    vpminub %xmm1, %xmm0, %xmm01967; AVX512BW-NEXT:    vphminposuw %xmm0, %xmm01968; AVX512BW-NEXT:    vmovd %xmm0, %eax1969; AVX512BW-NEXT:    addb $-128, %al1970; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax1971; AVX512BW-NEXT:    vzeroupper1972; AVX512BW-NEXT:    retq1973;1974; AVX512VL-LABEL: test_v64i8:1975; AVX512VL:       # %bb.0:1976; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm11977; AVX512VL-NEXT:    vpminsb %ymm1, %ymm0, %ymm01978; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm11979; AVX512VL-NEXT:    vpminsb %xmm1, %xmm0, %xmm01980; AVX512VL-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01981; AVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm11982; AVX512VL-NEXT:    vpminub %xmm1, %xmm0, %xmm01983; AVX512VL-NEXT:    vphminposuw %xmm0, %xmm01984; AVX512VL-NEXT:    vmovd %xmm0, %eax1985; AVX512VL-NEXT:    addb $-128, %al1986; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax1987; AVX512VL-NEXT:    vzeroupper1988; AVX512VL-NEXT:    retq1989  %1 = call i8 @llvm.vector.reduce.smin.v64i8(<64 x i8> %a0)1990  ret i8 %11991}1992 1993define i8 @test_v128i8(<128 x i8> %a0) {1994; SSE2-LABEL: test_v128i8:1995; SSE2:       # %bb.0:1996; SSE2-NEXT:    movdqa %xmm5, %xmm81997; SSE2-NEXT:    pcmpgtb %xmm1, %xmm81998; SSE2-NEXT:    pand %xmm8, %xmm11999; SSE2-NEXT:    pandn %xmm5, %xmm82000; SSE2-NEXT:    por %xmm1, %xmm82001; SSE2-NEXT:    movdqa %xmm7, %xmm12002; SSE2-NEXT:    pcmpgtb %xmm3, %xmm12003; SSE2-NEXT:    pand %xmm1, %xmm32004; SSE2-NEXT:    pandn %xmm7, %xmm12005; SSE2-NEXT:    por %xmm3, %xmm12006; SSE2-NEXT:    movdqa %xmm4, %xmm32007; SSE2-NEXT:    pcmpgtb %xmm0, %xmm32008; SSE2-NEXT:    pand %xmm3, %xmm02009; SSE2-NEXT:    pandn %xmm4, %xmm32010; SSE2-NEXT:    por %xmm0, %xmm32011; SSE2-NEXT:    movdqa %xmm6, %xmm02012; SSE2-NEXT:    pcmpgtb %xmm2, %xmm02013; SSE2-NEXT:    pand %xmm0, %xmm22014; SSE2-NEXT:    pandn %xmm6, %xmm02015; SSE2-NEXT:    por %xmm2, %xmm02016; SSE2-NEXT:    movdqa %xmm0, %xmm22017; SSE2-NEXT:    pcmpgtb %xmm3, %xmm22018; SSE2-NEXT:    pand %xmm2, %xmm32019; SSE2-NEXT:    pandn %xmm0, %xmm22020; SSE2-NEXT:    por %xmm3, %xmm22021; SSE2-NEXT:    movdqa %xmm1, %xmm02022; SSE2-NEXT:    pcmpgtb %xmm8, %xmm02023; SSE2-NEXT:    pand %xmm0, %xmm82024; SSE2-NEXT:    pandn %xmm1, %xmm02025; SSE2-NEXT:    por %xmm8, %xmm02026; SSE2-NEXT:    movdqa %xmm0, %xmm12027; SSE2-NEXT:    pcmpgtb %xmm2, %xmm12028; SSE2-NEXT:    pand %xmm1, %xmm22029; SSE2-NEXT:    pandn %xmm0, %xmm12030; SSE2-NEXT:    por %xmm2, %xmm12031; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]2032; SSE2-NEXT:    movdqa %xmm0, %xmm22033; SSE2-NEXT:    pcmpgtb %xmm1, %xmm22034; SSE2-NEXT:    pand %xmm2, %xmm12035; SSE2-NEXT:    pandn %xmm0, %xmm22036; SSE2-NEXT:    por %xmm1, %xmm22037; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]2038; SSE2-NEXT:    movdqa %xmm0, %xmm12039; SSE2-NEXT:    pcmpgtb %xmm2, %xmm12040; SSE2-NEXT:    pand %xmm1, %xmm22041; SSE2-NEXT:    pandn %xmm0, %xmm12042; SSE2-NEXT:    por %xmm2, %xmm12043; SSE2-NEXT:    movdqa %xmm1, %xmm02044; SSE2-NEXT:    psrld $16, %xmm02045; SSE2-NEXT:    movdqa %xmm0, %xmm22046; SSE2-NEXT:    pcmpgtb %xmm1, %xmm22047; SSE2-NEXT:    pand %xmm2, %xmm12048; SSE2-NEXT:    pandn %xmm0, %xmm22049; SSE2-NEXT:    por %xmm1, %xmm22050; SSE2-NEXT:    movdqa %xmm2, %xmm02051; SSE2-NEXT:    psrlw $8, %xmm02052; SSE2-NEXT:    movdqa %xmm0, %xmm12053; SSE2-NEXT:    pcmpgtb %xmm2, %xmm12054; SSE2-NEXT:    pand %xmm1, %xmm22055; SSE2-NEXT:    pandn %xmm0, %xmm12056; SSE2-NEXT:    por %xmm2, %xmm12057; SSE2-NEXT:    movd %xmm1, %eax2058; SSE2-NEXT:    # kill: def $al killed $al killed $eax2059; SSE2-NEXT:    retq2060;2061; SSE4-LABEL: test_v128i8:2062; SSE4:       # %bb.0:2063; SSE4-NEXT:    pminsb %xmm7, %xmm32064; SSE4-NEXT:    pminsb %xmm5, %xmm12065; SSE4-NEXT:    pminsb %xmm3, %xmm12066; SSE4-NEXT:    pminsb %xmm6, %xmm22067; SSE4-NEXT:    pminsb %xmm4, %xmm02068; SSE4-NEXT:    pminsb %xmm2, %xmm02069; SSE4-NEXT:    pminsb %xmm1, %xmm02070; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02071; SSE4-NEXT:    movdqa %xmm0, %xmm12072; SSE4-NEXT:    psrlw $8, %xmm12073; SSE4-NEXT:    pminub %xmm0, %xmm12074; SSE4-NEXT:    phminposuw %xmm1, %xmm02075; SSE4-NEXT:    movd %xmm0, %eax2076; SSE4-NEXT:    addb $-128, %al2077; SSE4-NEXT:    # kill: def $al killed $al killed $eax2078; SSE4-NEXT:    retq2079;2080; AVX1-LABEL: test_v128i8:2081; AVX1:       # %bb.0:2082; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm42083; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm52084; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm42085; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm52086; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm62087; AVX1-NEXT:    vpminsb %xmm5, %xmm6, %xmm52088; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm42089; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm12090; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm02091; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm02092; AVX1-NEXT:    vpminsb %xmm4, %xmm0, %xmm02093; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02094; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm12095; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm02096; AVX1-NEXT:    vphminposuw %xmm0, %xmm02097; AVX1-NEXT:    vmovd %xmm0, %eax2098; AVX1-NEXT:    addb $-128, %al2099; AVX1-NEXT:    # kill: def $al killed $al killed $eax2100; AVX1-NEXT:    vzeroupper2101; AVX1-NEXT:    retq2102;2103; AVX2-LABEL: test_v128i8:2104; AVX2:       # %bb.0:2105; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm12106; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm02107; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm02108; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm12109; AVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm02110; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02111; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm12112; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm02113; AVX2-NEXT:    vphminposuw %xmm0, %xmm02114; AVX2-NEXT:    vmovd %xmm0, %eax2115; AVX2-NEXT:    addb $-128, %al2116; AVX2-NEXT:    # kill: def $al killed $al killed $eax2117; AVX2-NEXT:    vzeroupper2118; AVX2-NEXT:    retq2119;2120; AVX512BW-LABEL: test_v128i8:2121; AVX512BW:       # %bb.0:2122; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm02123; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm12124; AVX512BW-NEXT:    vpminsb %ymm1, %ymm0, %ymm02125; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm12126; AVX512BW-NEXT:    vpminsb %xmm1, %xmm0, %xmm02127; AVX512BW-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02128; AVX512BW-NEXT:    vpsrlw $8, %xmm0, %xmm12129; AVX512BW-NEXT:    vpminub %xmm1, %xmm0, %xmm02130; AVX512BW-NEXT:    vphminposuw %xmm0, %xmm02131; AVX512BW-NEXT:    vmovd %xmm0, %eax2132; AVX512BW-NEXT:    addb $-128, %al2133; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax2134; AVX512BW-NEXT:    vzeroupper2135; AVX512BW-NEXT:    retq2136;2137; AVX512VL-LABEL: test_v128i8:2138; AVX512VL:       # %bb.0:2139; AVX512VL-NEXT:    vpminsb %zmm1, %zmm0, %zmm02140; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm12141; AVX512VL-NEXT:    vpminsb %ymm1, %ymm0, %ymm02142; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm12143; AVX512VL-NEXT:    vpminsb %xmm1, %xmm0, %xmm02144; AVX512VL-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm02145; AVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm12146; AVX512VL-NEXT:    vpminub %xmm1, %xmm0, %xmm02147; AVX512VL-NEXT:    vphminposuw %xmm0, %xmm02148; AVX512VL-NEXT:    vmovd %xmm0, %eax2149; AVX512VL-NEXT:    addb $-128, %al2150; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax2151; AVX512VL-NEXT:    vzeroupper2152; AVX512VL-NEXT:    retq2153  %1 = call i8 @llvm.vector.reduce.smin.v128i8(<128 x i8> %a0)2154  ret i8 %12155}2156 2157declare i64 @llvm.vector.reduce.smin.v2i64(<2 x i64>)2158declare i64 @llvm.vector.reduce.smin.v4i64(<4 x i64>)2159declare i64 @llvm.vector.reduce.smin.v8i64(<8 x i64>)2160declare i64 @llvm.vector.reduce.smin.v16i64(<16 x i64>)2161 2162declare i32 @llvm.vector.reduce.smin.v2i32(<2 x i32>)2163declare i32 @llvm.vector.reduce.smin.v4i32(<4 x i32>)2164declare i32 @llvm.vector.reduce.smin.v8i32(<8 x i32>)2165declare i32 @llvm.vector.reduce.smin.v16i32(<16 x i32>)2166declare i32 @llvm.vector.reduce.smin.v32i32(<32 x i32>)2167 2168declare i16 @llvm.vector.reduce.smin.v2i16(<2 x i16>)2169declare i16 @llvm.vector.reduce.smin.v4i16(<4 x i16>)2170declare i16 @llvm.vector.reduce.smin.v8i16(<8 x i16>)2171declare i16 @llvm.vector.reduce.smin.v16i16(<16 x i16>)2172declare i16 @llvm.vector.reduce.smin.v32i16(<32 x i16>)2173declare i16 @llvm.vector.reduce.smin.v64i16(<64 x i16>)2174 2175declare i8 @llvm.vector.reduce.smin.v2i8(<2 x i8>)2176declare i8 @llvm.vector.reduce.smin.v4i8(<4 x i8>)2177declare i8 @llvm.vector.reduce.smin.v8i8(<8 x i8>)2178declare i8 @llvm.vector.reduce.smin.v16i8(<16 x i8>)2179declare i8 @llvm.vector.reduce.smin.v32i8(<32 x i8>)2180declare i8 @llvm.vector.reduce.smin.v64i8(<64 x i8>)2181declare i8 @llvm.vector.reduce.smin.v128i8(<128 x i8>)2182