brintos

brintos / llvm-project-archived public Read only

0
0
Text · 73.8 KiB · 2d68cf9 Raw
2099 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 = [9223372039002259456,9223372039002259456]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:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]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 {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]58; SSE42-NEXT:    movdqa %xmm1, %xmm359; SSE42-NEXT:    pxor %xmm0, %xmm360; SSE42-NEXT:    pxor %xmm2, %xmm061; SSE42-NEXT:    pcmpgtq %xmm3, %xmm062; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm263; SSE42-NEXT:    movq %xmm2, %rax64; SSE42-NEXT:    retq65;66; AVX1-LABEL: test_v2i64:67; AVX1:       # %bb.0:68; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]69; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]70; AVX1-NEXT:    # xmm2 = mem[0,0]71; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm372; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm273; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm274; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm075; AVX1-NEXT:    vmovq %xmm0, %rax76; AVX1-NEXT:    retq77;78; AVX2-LABEL: test_v2i64:79; AVX2:       # %bb.0:80; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]81; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]82; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm383; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm284; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm285; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm086; AVX2-NEXT:    vmovq %xmm0, %rax87; AVX2-NEXT:    retq88;89; AVX512BW-LABEL: test_v2i64:90; AVX512BW:       # %bb.0:91; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm092; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]93; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm094; AVX512BW-NEXT:    vmovq %xmm0, %rax95; AVX512BW-NEXT:    vzeroupper96; AVX512BW-NEXT:    retq97;98; AVX512VL-LABEL: test_v2i64:99; AVX512VL:       # %bb.0:100; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]101; AVX512VL-NEXT:    vpminuq %xmm1, %xmm0, %xmm0102; AVX512VL-NEXT:    vmovq %xmm0, %rax103; AVX512VL-NEXT:    retq104  %1 = call i64 @llvm.vector.reduce.umin.v2i64(<2 x i64> %a0)105  ret i64 %1106}107 108define i64 @test_v4i64(<4 x i64> %a0) {109; SSE2-LABEL: test_v4i64:110; SSE2:       # %bb.0:111; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]112; SSE2-NEXT:    movdqa %xmm0, %xmm3113; SSE2-NEXT:    pxor %xmm2, %xmm3114; SSE2-NEXT:    movdqa %xmm1, %xmm4115; SSE2-NEXT:    pxor %xmm2, %xmm4116; SSE2-NEXT:    movdqa %xmm4, %xmm5117; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5118; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]119; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4120; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]121; SSE2-NEXT:    pand %xmm6, %xmm3122; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]123; SSE2-NEXT:    por %xmm3, %xmm4124; SSE2-NEXT:    pand %xmm4, %xmm0125; SSE2-NEXT:    pandn %xmm1, %xmm4126; SSE2-NEXT:    por %xmm0, %xmm4127; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[2,3,2,3]128; SSE2-NEXT:    movdqa %xmm4, %xmm1129; SSE2-NEXT:    pxor %xmm2, %xmm1130; SSE2-NEXT:    pxor %xmm0, %xmm2131; SSE2-NEXT:    movdqa %xmm2, %xmm3132; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3133; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]134; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2135; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]136; SSE2-NEXT:    pand %xmm5, %xmm1137; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]138; SSE2-NEXT:    por %xmm1, %xmm2139; SSE2-NEXT:    pand %xmm2, %xmm4140; SSE2-NEXT:    pandn %xmm0, %xmm2141; SSE2-NEXT:    por %xmm4, %xmm2142; SSE2-NEXT:    movq %xmm2, %rax143; SSE2-NEXT:    retq144;145; SSE41-LABEL: test_v4i64:146; SSE41:       # %bb.0:147; SSE41-NEXT:    movdqa %xmm0, %xmm2148; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]149; SSE41-NEXT:    pxor %xmm3, %xmm0150; SSE41-NEXT:    movdqa %xmm1, %xmm4151; SSE41-NEXT:    pxor %xmm3, %xmm4152; SSE41-NEXT:    movdqa %xmm4, %xmm5153; SSE41-NEXT:    pcmpeqd %xmm0, %xmm5154; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4155; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]156; SSE41-NEXT:    pand %xmm5, %xmm0157; SSE41-NEXT:    por %xmm4, %xmm0158; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm1159; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]160; SSE41-NEXT:    movdqa %xmm1, %xmm0161; SSE41-NEXT:    pxor %xmm3, %xmm0162; SSE41-NEXT:    pxor %xmm2, %xmm3163; SSE41-NEXT:    movdqa %xmm3, %xmm4164; SSE41-NEXT:    pcmpeqd %xmm0, %xmm4165; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3166; SSE41-NEXT:    pmovsxdq %xmm3, %xmm0167; SSE41-NEXT:    pand %xmm4, %xmm0168; SSE41-NEXT:    por %xmm3, %xmm0169; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm2170; SSE41-NEXT:    movq %xmm2, %rax171; SSE41-NEXT:    retq172;173; SSE42-LABEL: test_v4i64:174; SSE42:       # %bb.0:175; SSE42-NEXT:    movdqa %xmm0, %xmm2176; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]177; SSE42-NEXT:    movdqa %xmm0, %xmm4178; SSE42-NEXT:    pxor %xmm3, %xmm4179; SSE42-NEXT:    movdqa %xmm1, %xmm0180; SSE42-NEXT:    pxor %xmm3, %xmm0181; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0182; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm1183; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]184; SSE42-NEXT:    movdqa %xmm1, %xmm0185; SSE42-NEXT:    pxor %xmm3, %xmm0186; SSE42-NEXT:    pxor %xmm2, %xmm3187; SSE42-NEXT:    pcmpgtq %xmm0, %xmm3188; SSE42-NEXT:    movdqa %xmm3, %xmm0189; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm2190; SSE42-NEXT:    movq %xmm2, %rax191; SSE42-NEXT:    retq192;193; AVX1-LABEL: test_v4i64:194; AVX1:       # %bb.0:195; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]196; AVX1-NEXT:    # xmm1 = mem[0,0]197; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm2198; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3199; AVX1-NEXT:    vpxor %xmm1, %xmm3, %xmm4200; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2201; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm3, %xmm0202; AVX1-NEXT:    vshufps {{.*#+}} xmm2 = xmm0[2,3,2,3]203; AVX1-NEXT:    vxorpd %xmm1, %xmm0, %xmm3204; AVX1-NEXT:    vxorpd %xmm1, %xmm2, %xmm1205; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm1206; AVX1-NEXT:    vblendvpd %xmm1, %xmm0, %xmm2, %xmm0207; AVX1-NEXT:    vmovq %xmm0, %rax208; AVX1-NEXT:    vzeroupper209; AVX1-NEXT:    retq210;211; AVX2-LABEL: test_v4i64:212; AVX2:       # %bb.0:213; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1214; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]215; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3216; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4217; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3218; AVX2-NEXT:    vblendvpd %xmm3, %xmm0, %xmm1, %xmm0219; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]220; AVX2-NEXT:    vxorpd %xmm2, %xmm0, %xmm3221; AVX2-NEXT:    vxorpd %xmm2, %xmm1, %xmm2222; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2223; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0224; AVX2-NEXT:    vmovq %xmm0, %rax225; AVX2-NEXT:    vzeroupper226; AVX2-NEXT:    retq227;228; AVX512BW-LABEL: test_v4i64:229; AVX512BW:       # %bb.0:230; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0231; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1232; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0233; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]234; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0235; AVX512BW-NEXT:    vmovq %xmm0, %rax236; AVX512BW-NEXT:    vzeroupper237; AVX512BW-NEXT:    retq238;239; AVX512VL-LABEL: test_v4i64:240; AVX512VL:       # %bb.0:241; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1242; AVX512VL-NEXT:    vpminuq %xmm1, %xmm0, %xmm0243; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]244; AVX512VL-NEXT:    vpminuq %xmm1, %xmm0, %xmm0245; AVX512VL-NEXT:    vmovq %xmm0, %rax246; AVX512VL-NEXT:    vzeroupper247; AVX512VL-NEXT:    retq248  %1 = call i64 @llvm.vector.reduce.umin.v4i64(<4 x i64> %a0)249  ret i64 %1250}251 252define i64 @test_v8i64(<8 x i64> %a0) {253; SSE2-LABEL: test_v8i64:254; SSE2:       # %bb.0:255; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]256; SSE2-NEXT:    movdqa %xmm1, %xmm5257; SSE2-NEXT:    pxor %xmm4, %xmm5258; SSE2-NEXT:    movdqa %xmm3, %xmm6259; SSE2-NEXT:    pxor %xmm4, %xmm6260; SSE2-NEXT:    movdqa %xmm6, %xmm7261; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7262; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]263; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6264; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]265; SSE2-NEXT:    pand %xmm8, %xmm6266; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]267; SSE2-NEXT:    por %xmm6, %xmm5268; SSE2-NEXT:    pand %xmm5, %xmm1269; SSE2-NEXT:    pandn %xmm3, %xmm5270; SSE2-NEXT:    por %xmm1, %xmm5271; SSE2-NEXT:    movdqa %xmm0, %xmm1272; SSE2-NEXT:    pxor %xmm4, %xmm1273; SSE2-NEXT:    movdqa %xmm2, %xmm3274; SSE2-NEXT:    pxor %xmm4, %xmm3275; SSE2-NEXT:    movdqa %xmm3, %xmm6276; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6277; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]278; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3279; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]280; SSE2-NEXT:    pand %xmm7, %xmm1281; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]282; SSE2-NEXT:    por %xmm1, %xmm3283; SSE2-NEXT:    pand %xmm3, %xmm0284; SSE2-NEXT:    pandn %xmm2, %xmm3285; SSE2-NEXT:    por %xmm0, %xmm3286; SSE2-NEXT:    movdqa %xmm3, %xmm0287; SSE2-NEXT:    pxor %xmm4, %xmm0288; SSE2-NEXT:    movdqa %xmm5, %xmm1289; SSE2-NEXT:    pxor %xmm4, %xmm1290; SSE2-NEXT:    movdqa %xmm1, %xmm2291; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2292; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]293; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1294; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]295; SSE2-NEXT:    pand %xmm6, %xmm0296; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]297; SSE2-NEXT:    por %xmm0, %xmm1298; SSE2-NEXT:    pand %xmm1, %xmm3299; SSE2-NEXT:    pandn %xmm5, %xmm1300; SSE2-NEXT:    por %xmm3, %xmm1301; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]302; SSE2-NEXT:    movdqa %xmm1, %xmm2303; SSE2-NEXT:    pxor %xmm4, %xmm2304; SSE2-NEXT:    pxor %xmm0, %xmm4305; SSE2-NEXT:    movdqa %xmm4, %xmm3306; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3307; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]308; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4309; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]310; SSE2-NEXT:    pand %xmm5, %xmm2311; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]312; SSE2-NEXT:    por %xmm2, %xmm3313; SSE2-NEXT:    pand %xmm3, %xmm1314; SSE2-NEXT:    pandn %xmm0, %xmm3315; SSE2-NEXT:    por %xmm1, %xmm3316; SSE2-NEXT:    movq %xmm3, %rax317; SSE2-NEXT:    retq318;319; SSE41-LABEL: test_v8i64:320; SSE41:       # %bb.0:321; SSE41-NEXT:    movdqa %xmm0, %xmm4322; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]323; SSE41-NEXT:    movdqa %xmm1, %xmm0324; SSE41-NEXT:    pxor %xmm5, %xmm0325; SSE41-NEXT:    movdqa %xmm3, %xmm6326; SSE41-NEXT:    pxor %xmm5, %xmm6327; SSE41-NEXT:    movdqa %xmm6, %xmm7328; SSE41-NEXT:    pcmpeqd %xmm0, %xmm7329; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6330; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]331; SSE41-NEXT:    pand %xmm7, %xmm0332; SSE41-NEXT:    por %xmm6, %xmm0333; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm3334; SSE41-NEXT:    movdqa %xmm4, %xmm0335; SSE41-NEXT:    pxor %xmm5, %xmm0336; SSE41-NEXT:    movdqa %xmm2, %xmm1337; SSE41-NEXT:    pxor %xmm5, %xmm1338; SSE41-NEXT:    movdqa %xmm1, %xmm6339; SSE41-NEXT:    pcmpeqd %xmm0, %xmm6340; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1341; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]342; SSE41-NEXT:    pand %xmm6, %xmm0343; SSE41-NEXT:    por %xmm1, %xmm0344; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm2345; SSE41-NEXT:    movapd %xmm2, %xmm0346; SSE41-NEXT:    xorpd %xmm5, %xmm0347; SSE41-NEXT:    movapd %xmm3, %xmm1348; SSE41-NEXT:    xorpd %xmm5, %xmm1349; SSE41-NEXT:    movapd %xmm1, %xmm4350; SSE41-NEXT:    pcmpeqd %xmm0, %xmm4351; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1352; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]353; SSE41-NEXT:    pand %xmm4, %xmm0354; SSE41-NEXT:    por %xmm1, %xmm0355; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm3356; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[2,3,2,3]357; SSE41-NEXT:    movdqa %xmm3, %xmm0358; SSE41-NEXT:    pxor %xmm5, %xmm0359; SSE41-NEXT:    pxor %xmm1, %xmm5360; SSE41-NEXT:    movdqa %xmm5, %xmm2361; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2362; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5363; SSE41-NEXT:    pmovsxdq %xmm5, %xmm0364; SSE41-NEXT:    pand %xmm2, %xmm0365; SSE41-NEXT:    por %xmm5, %xmm0366; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm1367; SSE41-NEXT:    movq %xmm1, %rax368; SSE41-NEXT:    retq369;370; SSE42-LABEL: test_v8i64:371; SSE42:       # %bb.0:372; SSE42-NEXT:    movdqa %xmm0, %xmm5373; SSE42-NEXT:    movdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]374; SSE42-NEXT:    movdqa %xmm1, %xmm6375; SSE42-NEXT:    pxor %xmm4, %xmm6376; SSE42-NEXT:    movdqa %xmm3, %xmm0377; SSE42-NEXT:    pxor %xmm4, %xmm0378; SSE42-NEXT:    pcmpgtq %xmm6, %xmm0379; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm3380; SSE42-NEXT:    movdqa %xmm5, %xmm1381; SSE42-NEXT:    pxor %xmm4, %xmm1382; SSE42-NEXT:    movdqa %xmm2, %xmm0383; SSE42-NEXT:    pxor %xmm4, %xmm0384; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0385; SSE42-NEXT:    blendvpd %xmm0, %xmm5, %xmm2386; SSE42-NEXT:    movapd %xmm2, %xmm1387; SSE42-NEXT:    xorpd %xmm4, %xmm1388; SSE42-NEXT:    movapd %xmm3, %xmm0389; SSE42-NEXT:    xorpd %xmm4, %xmm0390; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0391; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm3392; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[2,3,2,3]393; SSE42-NEXT:    movdqa %xmm3, %xmm0394; SSE42-NEXT:    pxor %xmm4, %xmm0395; SSE42-NEXT:    pxor %xmm1, %xmm4396; SSE42-NEXT:    pcmpgtq %xmm0, %xmm4397; SSE42-NEXT:    movdqa %xmm4, %xmm0398; SSE42-NEXT:    blendvpd %xmm0, %xmm3, %xmm1399; SSE42-NEXT:    movq %xmm1, %rax400; SSE42-NEXT:    retq401;402; AVX1-LABEL: test_v8i64:403; AVX1:       # %bb.0:404; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2405; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]406; AVX1-NEXT:    # xmm3 = mem[0,0]407; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm4408; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5409; AVX1-NEXT:    vpxor %xmm3, %xmm5, %xmm6410; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4411; AVX1-NEXT:    vblendvpd %xmm4, %xmm2, %xmm5, %xmm2412; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4413; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm5414; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4415; AVX1-NEXT:    vblendvpd %xmm4, %xmm0, %xmm1, %xmm0416; AVX1-NEXT:    vxorpd %xmm3, %xmm0, %xmm1417; AVX1-NEXT:    vxorpd %xmm3, %xmm2, %xmm4418; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm4, %xmm1419; AVX1-NEXT:    vblendvpd %xmm1, %xmm0, %xmm2, %xmm0420; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]421; AVX1-NEXT:    vxorpd %xmm3, %xmm0, %xmm2422; AVX1-NEXT:    vxorpd %xmm3, %xmm1, %xmm3423; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2424; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0425; AVX1-NEXT:    vmovq %xmm0, %rax426; AVX1-NEXT:    vzeroupper427; AVX1-NEXT:    retq428;429; AVX2-LABEL: test_v8i64:430; AVX2:       # %bb.0:431; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]432; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3433; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm4434; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm4, %ymm3435; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm1, %ymm0436; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1437; AVX2-NEXT:    vxorpd %xmm2, %xmm0, %xmm3438; AVX2-NEXT:    vxorpd %xmm2, %xmm1, %xmm4439; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3440; AVX2-NEXT:    vblendvpd %xmm3, %xmm0, %xmm1, %xmm0441; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]442; AVX2-NEXT:    vxorpd %xmm2, %xmm0, %xmm3443; AVX2-NEXT:    vxorpd %xmm2, %xmm1, %xmm2444; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2445; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0446; AVX2-NEXT:    vmovq %xmm0, %rax447; AVX2-NEXT:    vzeroupper448; AVX2-NEXT:    retq449;450; AVX512BW-LABEL: test_v8i64:451; AVX512BW:       # %bb.0:452; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm1453; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0454; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1455; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0456; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]457; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0458; AVX512BW-NEXT:    vmovq %xmm0, %rax459; AVX512BW-NEXT:    vzeroupper460; AVX512BW-NEXT:    retq461;462; AVX512VL-LABEL: test_v8i64:463; AVX512VL:       # %bb.0:464; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1465; AVX512VL-NEXT:    vpminuq %zmm1, %zmm0, %zmm0466; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1467; AVX512VL-NEXT:    vpminuq %xmm1, %xmm0, %xmm0468; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]469; AVX512VL-NEXT:    vpminuq %xmm1, %xmm0, %xmm0470; AVX512VL-NEXT:    vmovq %xmm0, %rax471; AVX512VL-NEXT:    vzeroupper472; AVX512VL-NEXT:    retq473  %1 = call i64 @llvm.vector.reduce.umin.v8i64(<8 x i64> %a0)474  ret i64 %1475}476 477define i64 @test_v16i64(<16 x i64> %a0) {478; SSE2-LABEL: test_v16i64:479; SSE2:       # %bb.0:480; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]481; SSE2-NEXT:    movdqa %xmm2, %xmm9482; SSE2-NEXT:    pxor %xmm8, %xmm9483; SSE2-NEXT:    movdqa %xmm6, %xmm10484; SSE2-NEXT:    pxor %xmm8, %xmm10485; SSE2-NEXT:    movdqa %xmm10, %xmm11486; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11487; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]488; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10489; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]490; SSE2-NEXT:    pand %xmm12, %xmm10491; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm11[1,1,3,3]492; SSE2-NEXT:    por %xmm10, %xmm9493; SSE2-NEXT:    pand %xmm9, %xmm2494; SSE2-NEXT:    pandn %xmm6, %xmm9495; SSE2-NEXT:    por %xmm2, %xmm9496; SSE2-NEXT:    movdqa %xmm0, %xmm2497; SSE2-NEXT:    pxor %xmm8, %xmm2498; SSE2-NEXT:    movdqa %xmm4, %xmm6499; SSE2-NEXT:    pxor %xmm8, %xmm6500; SSE2-NEXT:    movdqa %xmm6, %xmm10501; SSE2-NEXT:    pcmpgtd %xmm2, %xmm10502; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]503; SSE2-NEXT:    pcmpeqd %xmm2, %xmm6504; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]505; SSE2-NEXT:    pand %xmm11, %xmm6506; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm10[1,1,3,3]507; SSE2-NEXT:    por %xmm6, %xmm2508; SSE2-NEXT:    pand %xmm2, %xmm0509; SSE2-NEXT:    pandn %xmm4, %xmm2510; SSE2-NEXT:    por %xmm0, %xmm2511; SSE2-NEXT:    movdqa %xmm3, %xmm0512; SSE2-NEXT:    pxor %xmm8, %xmm0513; SSE2-NEXT:    movdqa %xmm7, %xmm4514; SSE2-NEXT:    pxor %xmm8, %xmm4515; SSE2-NEXT:    movdqa %xmm4, %xmm6516; SSE2-NEXT:    pcmpgtd %xmm0, %xmm6517; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]518; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4519; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]520; SSE2-NEXT:    pand %xmm10, %xmm4521; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]522; SSE2-NEXT:    por %xmm4, %xmm0523; SSE2-NEXT:    pand %xmm0, %xmm3524; SSE2-NEXT:    pandn %xmm7, %xmm0525; SSE2-NEXT:    por %xmm3, %xmm0526; SSE2-NEXT:    movdqa %xmm1, %xmm3527; SSE2-NEXT:    pxor %xmm8, %xmm3528; SSE2-NEXT:    movdqa %xmm5, %xmm4529; SSE2-NEXT:    pxor %xmm8, %xmm4530; SSE2-NEXT:    movdqa %xmm4, %xmm6531; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6532; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]533; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4534; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]535; SSE2-NEXT:    pand %xmm7, %xmm3536; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[1,1,3,3]537; SSE2-NEXT:    por %xmm3, %xmm4538; SSE2-NEXT:    pand %xmm4, %xmm1539; SSE2-NEXT:    pandn %xmm5, %xmm4540; SSE2-NEXT:    por %xmm1, %xmm4541; SSE2-NEXT:    movdqa %xmm4, %xmm1542; SSE2-NEXT:    pxor %xmm8, %xmm1543; SSE2-NEXT:    movdqa %xmm0, %xmm3544; SSE2-NEXT:    pxor %xmm8, %xmm3545; SSE2-NEXT:    movdqa %xmm3, %xmm5546; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5547; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]548; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3549; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]550; SSE2-NEXT:    pand %xmm6, %xmm3551; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]552; SSE2-NEXT:    por %xmm3, %xmm1553; SSE2-NEXT:    pand %xmm1, %xmm4554; SSE2-NEXT:    pandn %xmm0, %xmm1555; SSE2-NEXT:    por %xmm4, %xmm1556; SSE2-NEXT:    movdqa %xmm2, %xmm0557; SSE2-NEXT:    pxor %xmm8, %xmm0558; SSE2-NEXT:    movdqa %xmm9, %xmm3559; SSE2-NEXT:    pxor %xmm8, %xmm3560; SSE2-NEXT:    movdqa %xmm3, %xmm4561; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4562; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]563; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3564; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]565; SSE2-NEXT:    pand %xmm5, %xmm0566; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]567; SSE2-NEXT:    por %xmm0, %xmm3568; SSE2-NEXT:    pand %xmm3, %xmm2569; SSE2-NEXT:    pandn %xmm9, %xmm3570; SSE2-NEXT:    por %xmm2, %xmm3571; SSE2-NEXT:    movdqa %xmm3, %xmm0572; SSE2-NEXT:    pxor %xmm8, %xmm0573; SSE2-NEXT:    movdqa %xmm1, %xmm2574; SSE2-NEXT:    pxor %xmm8, %xmm2575; SSE2-NEXT:    movdqa %xmm2, %xmm4576; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4577; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]578; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2579; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]580; SSE2-NEXT:    pand %xmm5, %xmm0581; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]582; SSE2-NEXT:    por %xmm0, %xmm2583; SSE2-NEXT:    pand %xmm2, %xmm3584; SSE2-NEXT:    pandn %xmm1, %xmm2585; SSE2-NEXT:    por %xmm3, %xmm2586; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]587; SSE2-NEXT:    movdqa %xmm2, %xmm1588; SSE2-NEXT:    pxor %xmm8, %xmm1589; SSE2-NEXT:    pxor %xmm0, %xmm8590; SSE2-NEXT:    movdqa %xmm8, %xmm3591; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3592; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]593; SSE2-NEXT:    pcmpeqd %xmm1, %xmm8594; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3]595; SSE2-NEXT:    pand %xmm4, %xmm1596; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]597; SSE2-NEXT:    por %xmm1, %xmm3598; SSE2-NEXT:    pand %xmm3, %xmm2599; SSE2-NEXT:    pandn %xmm0, %xmm3600; SSE2-NEXT:    por %xmm2, %xmm3601; SSE2-NEXT:    movq %xmm3, %rax602; SSE2-NEXT:    retq603;604; SSE41-LABEL: test_v16i64:605; SSE41:       # %bb.0:606; SSE41-NEXT:    movdqa %xmm0, %xmm8607; SSE41-NEXT:    movdqa {{.*#+}} xmm9 = [9223372039002259456,9223372039002259456]608; SSE41-NEXT:    movdqa %xmm2, %xmm0609; SSE41-NEXT:    pxor %xmm9, %xmm0610; SSE41-NEXT:    movdqa %xmm6, %xmm10611; SSE41-NEXT:    pxor %xmm9, %xmm10612; SSE41-NEXT:    movdqa %xmm10, %xmm11613; SSE41-NEXT:    pcmpeqd %xmm0, %xmm11614; SSE41-NEXT:    pcmpgtd %xmm0, %xmm10615; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[0,0,2,2]616; SSE41-NEXT:    pand %xmm11, %xmm0617; SSE41-NEXT:    por %xmm10, %xmm0618; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm6619; SSE41-NEXT:    movdqa %xmm8, %xmm0620; SSE41-NEXT:    pxor %xmm9, %xmm0621; SSE41-NEXT:    movdqa %xmm4, %xmm2622; SSE41-NEXT:    pxor %xmm9, %xmm2623; SSE41-NEXT:    movdqa %xmm2, %xmm10624; SSE41-NEXT:    pcmpeqd %xmm0, %xmm10625; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2626; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]627; SSE41-NEXT:    pand %xmm10, %xmm0628; SSE41-NEXT:    por %xmm2, %xmm0629; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm4630; SSE41-NEXT:    movdqa %xmm3, %xmm0631; SSE41-NEXT:    pxor %xmm9, %xmm0632; SSE41-NEXT:    movdqa %xmm7, %xmm2633; SSE41-NEXT:    pxor %xmm9, %xmm2634; SSE41-NEXT:    movdqa %xmm2, %xmm8635; SSE41-NEXT:    pcmpeqd %xmm0, %xmm8636; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2637; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]638; SSE41-NEXT:    pand %xmm8, %xmm0639; SSE41-NEXT:    por %xmm2, %xmm0640; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm7641; SSE41-NEXT:    movdqa %xmm1, %xmm0642; SSE41-NEXT:    pxor %xmm9, %xmm0643; SSE41-NEXT:    movdqa %xmm5, %xmm2644; SSE41-NEXT:    pxor %xmm9, %xmm2645; SSE41-NEXT:    movdqa %xmm2, %xmm3646; SSE41-NEXT:    pcmpeqd %xmm0, %xmm3647; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2648; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]649; SSE41-NEXT:    pand %xmm3, %xmm0650; SSE41-NEXT:    por %xmm2, %xmm0651; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm5652; SSE41-NEXT:    movapd %xmm5, %xmm0653; SSE41-NEXT:    xorpd %xmm9, %xmm0654; SSE41-NEXT:    movapd %xmm7, %xmm1655; SSE41-NEXT:    xorpd %xmm9, %xmm1656; SSE41-NEXT:    movapd %xmm1, %xmm2657; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2658; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1659; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]660; SSE41-NEXT:    pand %xmm2, %xmm0661; SSE41-NEXT:    por %xmm1, %xmm0662; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm7663; SSE41-NEXT:    movapd %xmm4, %xmm0664; SSE41-NEXT:    xorpd %xmm9, %xmm0665; SSE41-NEXT:    movapd %xmm6, %xmm1666; SSE41-NEXT:    xorpd %xmm9, %xmm1667; SSE41-NEXT:    movapd %xmm1, %xmm2668; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2669; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1670; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]671; SSE41-NEXT:    pand %xmm2, %xmm0672; SSE41-NEXT:    por %xmm1, %xmm0673; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm6674; SSE41-NEXT:    movapd %xmm6, %xmm0675; SSE41-NEXT:    xorpd %xmm9, %xmm0676; SSE41-NEXT:    movapd %xmm7, %xmm1677; SSE41-NEXT:    xorpd %xmm9, %xmm1678; SSE41-NEXT:    movapd %xmm1, %xmm2679; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2680; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1681; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]682; SSE41-NEXT:    pand %xmm2, %xmm0683; SSE41-NEXT:    por %xmm1, %xmm0684; SSE41-NEXT:    blendvpd %xmm0, %xmm6, %xmm7685; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[2,3,2,3]686; SSE41-NEXT:    movdqa %xmm7, %xmm0687; SSE41-NEXT:    pxor %xmm9, %xmm0688; SSE41-NEXT:    pxor %xmm1, %xmm9689; SSE41-NEXT:    movdqa %xmm9, %xmm2690; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2691; SSE41-NEXT:    pcmpgtd %xmm0, %xmm9692; SSE41-NEXT:    pmovsxdq %xmm9, %xmm0693; SSE41-NEXT:    pand %xmm2, %xmm0694; SSE41-NEXT:    por %xmm9, %xmm0695; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm1696; SSE41-NEXT:    movq %xmm1, %rax697; SSE41-NEXT:    retq698;699; SSE42-LABEL: test_v16i64:700; SSE42:       # %bb.0:701; SSE42-NEXT:    movdqa %xmm0, %xmm9702; SSE42-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]703; SSE42-NEXT:    movdqa %xmm2, %xmm10704; SSE42-NEXT:    pxor %xmm8, %xmm10705; SSE42-NEXT:    movdqa %xmm6, %xmm0706; SSE42-NEXT:    pxor %xmm8, %xmm0707; SSE42-NEXT:    pcmpgtq %xmm10, %xmm0708; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm6709; SSE42-NEXT:    movdqa %xmm9, %xmm2710; SSE42-NEXT:    pxor %xmm8, %xmm2711; SSE42-NEXT:    movdqa %xmm4, %xmm0712; SSE42-NEXT:    pxor %xmm8, %xmm0713; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0714; SSE42-NEXT:    blendvpd %xmm0, %xmm9, %xmm4715; SSE42-NEXT:    movdqa %xmm3, %xmm2716; SSE42-NEXT:    pxor %xmm8, %xmm2717; SSE42-NEXT:    movdqa %xmm7, %xmm0718; SSE42-NEXT:    pxor %xmm8, %xmm0719; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0720; SSE42-NEXT:    blendvpd %xmm0, %xmm3, %xmm7721; SSE42-NEXT:    movdqa %xmm1, %xmm2722; SSE42-NEXT:    pxor %xmm8, %xmm2723; SSE42-NEXT:    movdqa %xmm5, %xmm0724; SSE42-NEXT:    pxor %xmm8, %xmm0725; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0726; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm5727; SSE42-NEXT:    movapd %xmm5, %xmm1728; SSE42-NEXT:    xorpd %xmm8, %xmm1729; SSE42-NEXT:    movapd %xmm7, %xmm0730; SSE42-NEXT:    xorpd %xmm8, %xmm0731; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0732; SSE42-NEXT:    blendvpd %xmm0, %xmm5, %xmm7733; SSE42-NEXT:    movapd %xmm4, %xmm1734; SSE42-NEXT:    xorpd %xmm8, %xmm1735; SSE42-NEXT:    movapd %xmm6, %xmm0736; SSE42-NEXT:    xorpd %xmm8, %xmm0737; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0738; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm6739; SSE42-NEXT:    movapd %xmm6, %xmm1740; SSE42-NEXT:    xorpd %xmm8, %xmm1741; SSE42-NEXT:    movapd %xmm7, %xmm0742; SSE42-NEXT:    xorpd %xmm8, %xmm0743; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0744; SSE42-NEXT:    blendvpd %xmm0, %xmm6, %xmm7745; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[2,3,2,3]746; SSE42-NEXT:    movdqa %xmm7, %xmm0747; SSE42-NEXT:    pxor %xmm8, %xmm0748; SSE42-NEXT:    pxor %xmm1, %xmm8749; SSE42-NEXT:    pcmpgtq %xmm0, %xmm8750; SSE42-NEXT:    movdqa %xmm8, %xmm0751; SSE42-NEXT:    blendvpd %xmm0, %xmm7, %xmm1752; SSE42-NEXT:    movq %xmm1, %rax753; SSE42-NEXT:    retq754;755; AVX1-LABEL: test_v16i64:756; AVX1:       # %bb.0:757; AVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]758; AVX1-NEXT:    # xmm4 = mem[0,0]759; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm5760; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm6761; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5762; AVX1-NEXT:    vblendvpd %xmm5, %xmm1, %xmm3, %xmm5763; AVX1-NEXT:    vpxor %xmm4, %xmm0, %xmm6764; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm7765; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6766; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm2, %xmm6767; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1768; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm7769; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3770; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm8771; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm8, %xmm7772; AVX1-NEXT:    vblendvpd %xmm7, %xmm1, %xmm3, %xmm1773; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0774; AVX1-NEXT:    vpxor %xmm4, %xmm0, %xmm3775; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2776; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm7777; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm7, %xmm3778; AVX1-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0779; AVX1-NEXT:    vxorpd %xmm4, %xmm0, %xmm2780; AVX1-NEXT:    vxorpd %xmm4, %xmm1, %xmm3781; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2782; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0783; AVX1-NEXT:    vxorpd %xmm4, %xmm6, %xmm1784; AVX1-NEXT:    vxorpd %xmm4, %xmm5, %xmm2785; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1786; AVX1-NEXT:    vblendvpd %xmm1, %xmm6, %xmm5, %xmm1787; AVX1-NEXT:    vxorpd %xmm4, %xmm1, %xmm2788; AVX1-NEXT:    vxorpd %xmm4, %xmm0, %xmm3789; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2790; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0791; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]792; AVX1-NEXT:    vxorpd %xmm4, %xmm0, %xmm2793; AVX1-NEXT:    vxorpd %xmm4, %xmm1, %xmm3794; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2795; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0796; AVX1-NEXT:    vmovq %xmm0, %rax797; AVX1-NEXT:    vzeroupper798; AVX1-NEXT:    retq799;800; AVX2-LABEL: test_v16i64:801; AVX2:       # %bb.0:802; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]803; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5804; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6805; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5806; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1807; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm3808; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5809; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm5, %ymm3810; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0811; AVX2-NEXT:    vxorpd %ymm4, %ymm0, %ymm2812; AVX2-NEXT:    vxorpd %ymm4, %ymm1, %ymm3813; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm3, %ymm2814; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0815; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1816; AVX2-NEXT:    vxorpd %xmm4, %xmm0, %xmm2817; AVX2-NEXT:    vxorpd %xmm4, %xmm1, %xmm3818; AVX2-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2819; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0820; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]821; AVX2-NEXT:    vxorpd %xmm4, %xmm0, %xmm2822; AVX2-NEXT:    vxorpd %xmm4, %xmm1, %xmm3823; AVX2-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2824; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0825; AVX2-NEXT:    vmovq %xmm0, %rax826; AVX2-NEXT:    vzeroupper827; AVX2-NEXT:    retq828;829; AVX512BW-LABEL: test_v16i64:830; AVX512BW:       # %bb.0:831; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0832; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm1833; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0834; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1835; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0836; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]837; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0838; AVX512BW-NEXT:    vmovq %xmm0, %rax839; AVX512BW-NEXT:    vzeroupper840; AVX512BW-NEXT:    retq841;842; AVX512VL-LABEL: test_v16i64:843; AVX512VL:       # %bb.0:844; AVX512VL-NEXT:    vpminuq %zmm1, %zmm0, %zmm0845; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1846; AVX512VL-NEXT:    vpminuq %zmm1, %zmm0, %zmm0847; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1848; AVX512VL-NEXT:    vpminuq %xmm1, %xmm0, %xmm0849; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]850; AVX512VL-NEXT:    vpminuq %xmm1, %xmm0, %xmm0851; AVX512VL-NEXT:    vmovq %xmm0, %rax852; AVX512VL-NEXT:    vzeroupper853; AVX512VL-NEXT:    retq854  %1 = call i64 @llvm.vector.reduce.umin.v16i64(<16 x i64> %a0)855  ret i64 %1856}857 858;859; vXi32860;861 862define i32 @test_v2i32(<2 x i32> %a0) {863; SSE2-LABEL: test_v2i32:864; SSE2:       # %bb.0:865; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]866; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]867; SSE2-NEXT:    movdqa %xmm0, %xmm3868; SSE2-NEXT:    pxor %xmm2, %xmm3869; SSE2-NEXT:    pxor %xmm1, %xmm2870; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2871; SSE2-NEXT:    pand %xmm2, %xmm0872; SSE2-NEXT:    pandn %xmm1, %xmm2873; SSE2-NEXT:    por %xmm0, %xmm2874; SSE2-NEXT:    movd %xmm2, %eax875; SSE2-NEXT:    retq876;877; SSE4-LABEL: test_v2i32:878; SSE4:       # %bb.0:879; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]880; SSE4-NEXT:    pminud %xmm0, %xmm1881; SSE4-NEXT:    movd %xmm1, %eax882; SSE4-NEXT:    retq883;884; AVX-LABEL: test_v2i32:885; AVX:       # %bb.0:886; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]887; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0888; AVX-NEXT:    vmovd %xmm0, %eax889; AVX-NEXT:    retq890;891; AVX512-LABEL: test_v2i32:892; AVX512:       # %bb.0:893; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]894; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm0895; AVX512-NEXT:    vmovd %xmm0, %eax896; AVX512-NEXT:    retq897  %1 = call i32 @llvm.vector.reduce.umin.v2i32(<2 x i32> %a0)898  ret i32 %1899}900 901define i32 @test_v4i32(<4 x i32> %a0) {902; SSE2-LABEL: test_v4i32:903; SSE2:       # %bb.0:904; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]905; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]906; SSE2-NEXT:    movdqa %xmm0, %xmm3907; SSE2-NEXT:    pxor %xmm2, %xmm3908; SSE2-NEXT:    movdqa %xmm1, %xmm4909; SSE2-NEXT:    pxor %xmm2, %xmm4910; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4911; SSE2-NEXT:    pand %xmm4, %xmm0912; SSE2-NEXT:    pandn %xmm1, %xmm4913; SSE2-NEXT:    por %xmm0, %xmm4914; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,1,1]915; SSE2-NEXT:    movdqa %xmm4, %xmm1916; SSE2-NEXT:    pxor %xmm2, %xmm1917; SSE2-NEXT:    pxor %xmm0, %xmm2918; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2919; SSE2-NEXT:    pand %xmm2, %xmm4920; SSE2-NEXT:    pandn %xmm0, %xmm2921; SSE2-NEXT:    por %xmm4, %xmm2922; SSE2-NEXT:    movd %xmm2, %eax923; SSE2-NEXT:    retq924;925; SSE4-LABEL: test_v4i32:926; SSE4:       # %bb.0:927; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]928; SSE4-NEXT:    pminud %xmm0, %xmm1929; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]930; SSE4-NEXT:    pminud %xmm1, %xmm0931; SSE4-NEXT:    movd %xmm0, %eax932; SSE4-NEXT:    retq933;934; AVX-LABEL: test_v4i32:935; AVX:       # %bb.0:936; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]937; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0938; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]939; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0940; AVX-NEXT:    vmovd %xmm0, %eax941; AVX-NEXT:    retq942;943; AVX512-LABEL: test_v4i32:944; AVX512:       # %bb.0:945; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]946; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm0947; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]948; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm0949; AVX512-NEXT:    vmovd %xmm0, %eax950; AVX512-NEXT:    retq951  %1 = call i32 @llvm.vector.reduce.umin.v4i32(<4 x i32> %a0)952  ret i32 %1953}954 955define i32 @test_v8i32(<8 x i32> %a0) {956; SSE2-LABEL: test_v8i32:957; SSE2:       # %bb.0:958; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]959; SSE2-NEXT:    movdqa %xmm0, %xmm3960; SSE2-NEXT:    pxor %xmm2, %xmm3961; SSE2-NEXT:    movdqa %xmm1, %xmm4962; SSE2-NEXT:    pxor %xmm2, %xmm4963; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4964; SSE2-NEXT:    pand %xmm4, %xmm0965; SSE2-NEXT:    pandn %xmm1, %xmm4966; SSE2-NEXT:    por %xmm0, %xmm4967; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[2,3,2,3]968; SSE2-NEXT:    movdqa %xmm4, %xmm1969; SSE2-NEXT:    pxor %xmm2, %xmm1970; SSE2-NEXT:    movdqa %xmm0, %xmm3971; SSE2-NEXT:    pxor %xmm2, %xmm3972; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3973; SSE2-NEXT:    pand %xmm3, %xmm4974; SSE2-NEXT:    pandn %xmm0, %xmm3975; SSE2-NEXT:    por %xmm4, %xmm3976; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,1,1]977; SSE2-NEXT:    movdqa %xmm3, %xmm1978; SSE2-NEXT:    pxor %xmm2, %xmm1979; SSE2-NEXT:    pxor %xmm0, %xmm2980; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2981; SSE2-NEXT:    pand %xmm2, %xmm3982; SSE2-NEXT:    pandn %xmm0, %xmm2983; SSE2-NEXT:    por %xmm3, %xmm2984; SSE2-NEXT:    movd %xmm2, %eax985; SSE2-NEXT:    retq986;987; SSE4-LABEL: test_v8i32:988; SSE4:       # %bb.0:989; SSE4-NEXT:    pminud %xmm1, %xmm0990; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]991; SSE4-NEXT:    pminud %xmm0, %xmm1992; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]993; SSE4-NEXT:    pminud %xmm1, %xmm0994; SSE4-NEXT:    movd %xmm0, %eax995; SSE4-NEXT:    retq996;997; AVX1-LABEL: test_v8i32:998; AVX1:       # %bb.0:999; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11000; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm01001; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1002; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm01003; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1004; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm01005; AVX1-NEXT:    vmovd %xmm0, %eax1006; AVX1-NEXT:    vzeroupper1007; AVX1-NEXT:    retq1008;1009; AVX2-LABEL: test_v8i32:1010; AVX2:       # %bb.0:1011; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11012; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01013; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1014; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01015; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1016; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01017; AVX2-NEXT:    vmovd %xmm0, %eax1018; AVX2-NEXT:    vzeroupper1019; AVX2-NEXT:    retq1020;1021; AVX512-LABEL: test_v8i32:1022; AVX512:       # %bb.0:1023; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm11024; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm01025; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1026; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm01027; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1028; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm01029; AVX512-NEXT:    vmovd %xmm0, %eax1030; AVX512-NEXT:    vzeroupper1031; AVX512-NEXT:    retq1032  %1 = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> %a0)1033  ret i32 %11034}1035 1036define i32 @test_v16i32(<16 x i32> %a0) {1037; SSE2-LABEL: test_v16i32:1038; SSE2:       # %bb.0:1039; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]1040; SSE2-NEXT:    movdqa %xmm1, %xmm51041; SSE2-NEXT:    pxor %xmm4, %xmm51042; SSE2-NEXT:    movdqa %xmm3, %xmm61043; SSE2-NEXT:    pxor %xmm4, %xmm61044; SSE2-NEXT:    pcmpgtd %xmm5, %xmm61045; SSE2-NEXT:    pand %xmm6, %xmm11046; SSE2-NEXT:    pandn %xmm3, %xmm61047; SSE2-NEXT:    por %xmm1, %xmm61048; SSE2-NEXT:    movdqa %xmm0, %xmm11049; SSE2-NEXT:    pxor %xmm4, %xmm11050; SSE2-NEXT:    movdqa %xmm2, %xmm31051; SSE2-NEXT:    pxor %xmm4, %xmm31052; SSE2-NEXT:    pcmpgtd %xmm1, %xmm31053; SSE2-NEXT:    pand %xmm3, %xmm01054; SSE2-NEXT:    pandn %xmm2, %xmm31055; SSE2-NEXT:    por %xmm0, %xmm31056; SSE2-NEXT:    movdqa %xmm3, %xmm01057; SSE2-NEXT:    pxor %xmm4, %xmm01058; SSE2-NEXT:    movdqa %xmm6, %xmm11059; SSE2-NEXT:    pxor %xmm4, %xmm11060; SSE2-NEXT:    pcmpgtd %xmm0, %xmm11061; SSE2-NEXT:    pand %xmm1, %xmm31062; SSE2-NEXT:    pandn %xmm6, %xmm11063; SSE2-NEXT:    por %xmm3, %xmm11064; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1065; SSE2-NEXT:    movdqa %xmm1, %xmm21066; SSE2-NEXT:    pxor %xmm4, %xmm21067; SSE2-NEXT:    movdqa %xmm0, %xmm31068; SSE2-NEXT:    pxor %xmm4, %xmm31069; SSE2-NEXT:    pcmpgtd %xmm2, %xmm31070; SSE2-NEXT:    pand %xmm3, %xmm11071; SSE2-NEXT:    pandn %xmm0, %xmm31072; SSE2-NEXT:    por %xmm1, %xmm31073; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,1,1]1074; SSE2-NEXT:    movdqa %xmm3, %xmm11075; SSE2-NEXT:    pxor %xmm4, %xmm11076; SSE2-NEXT:    pxor %xmm0, %xmm41077; SSE2-NEXT:    pcmpgtd %xmm1, %xmm41078; SSE2-NEXT:    pand %xmm4, %xmm31079; SSE2-NEXT:    pandn %xmm0, %xmm41080; SSE2-NEXT:    por %xmm3, %xmm41081; SSE2-NEXT:    movd %xmm4, %eax1082; SSE2-NEXT:    retq1083;1084; SSE4-LABEL: test_v16i32:1085; SSE4:       # %bb.0:1086; SSE4-NEXT:    pminud %xmm3, %xmm11087; SSE4-NEXT:    pminud %xmm2, %xmm01088; SSE4-NEXT:    pminud %xmm1, %xmm01089; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1090; SSE4-NEXT:    pminud %xmm0, %xmm11091; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1092; SSE4-NEXT:    pminud %xmm1, %xmm01093; SSE4-NEXT:    movd %xmm0, %eax1094; SSE4-NEXT:    retq1095;1096; AVX1-LABEL: test_v16i32:1097; AVX1:       # %bb.0:1098; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21099; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31100; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm21101; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm01102; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm01103; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1104; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm01105; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1106; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm01107; AVX1-NEXT:    vmovd %xmm0, %eax1108; AVX1-NEXT:    vzeroupper1109; AVX1-NEXT:    retq1110;1111; AVX2-LABEL: test_v16i32:1112; AVX2:       # %bb.0:1113; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm01114; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11115; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01116; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1117; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01118; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1119; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01120; AVX2-NEXT:    vmovd %xmm0, %eax1121; AVX2-NEXT:    vzeroupper1122; AVX2-NEXT:    retq1123;1124; AVX512-LABEL: test_v16i32:1125; AVX512:       # %bb.0:1126; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm11127; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm01128; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm11129; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm01130; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1131; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm01132; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1133; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm01134; AVX512-NEXT:    vmovd %xmm0, %eax1135; AVX512-NEXT:    vzeroupper1136; AVX512-NEXT:    retq1137  %1 = call i32 @llvm.vector.reduce.umin.v16i32(<16 x i32> %a0)1138  ret i32 %11139}1140 1141define i32 @test_v32i32(<32 x i32> %a0) {1142; SSE2-LABEL: test_v32i32:1143; SSE2:       # %bb.0:1144; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]1145; SSE2-NEXT:    movdqa %xmm2, %xmm101146; SSE2-NEXT:    pxor %xmm8, %xmm101147; SSE2-NEXT:    movdqa %xmm6, %xmm91148; SSE2-NEXT:    pxor %xmm8, %xmm91149; SSE2-NEXT:    pcmpgtd %xmm10, %xmm91150; SSE2-NEXT:    pand %xmm9, %xmm21151; SSE2-NEXT:    pandn %xmm6, %xmm91152; SSE2-NEXT:    por %xmm2, %xmm91153; SSE2-NEXT:    movdqa %xmm0, %xmm61154; SSE2-NEXT:    pxor %xmm8, %xmm61155; SSE2-NEXT:    movdqa %xmm4, %xmm21156; SSE2-NEXT:    pxor %xmm8, %xmm21157; SSE2-NEXT:    pcmpgtd %xmm6, %xmm21158; SSE2-NEXT:    pand %xmm2, %xmm01159; SSE2-NEXT:    pandn %xmm4, %xmm21160; SSE2-NEXT:    por %xmm0, %xmm21161; SSE2-NEXT:    movdqa %xmm3, %xmm01162; SSE2-NEXT:    pxor %xmm8, %xmm01163; SSE2-NEXT:    movdqa %xmm7, %xmm41164; SSE2-NEXT:    pxor %xmm8, %xmm41165; SSE2-NEXT:    pcmpgtd %xmm0, %xmm41166; SSE2-NEXT:    pand %xmm4, %xmm31167; SSE2-NEXT:    pandn %xmm7, %xmm41168; SSE2-NEXT:    por %xmm3, %xmm41169; SSE2-NEXT:    movdqa %xmm1, %xmm01170; SSE2-NEXT:    pxor %xmm8, %xmm01171; SSE2-NEXT:    movdqa %xmm5, %xmm31172; SSE2-NEXT:    pxor %xmm8, %xmm31173; SSE2-NEXT:    pcmpgtd %xmm0, %xmm31174; SSE2-NEXT:    pand %xmm3, %xmm11175; SSE2-NEXT:    pandn %xmm5, %xmm31176; SSE2-NEXT:    por %xmm1, %xmm31177; SSE2-NEXT:    movdqa %xmm3, %xmm01178; SSE2-NEXT:    pxor %xmm8, %xmm01179; SSE2-NEXT:    movdqa %xmm4, %xmm11180; SSE2-NEXT:    pxor %xmm8, %xmm11181; SSE2-NEXT:    pcmpgtd %xmm0, %xmm11182; SSE2-NEXT:    pand %xmm1, %xmm31183; SSE2-NEXT:    pandn %xmm4, %xmm11184; SSE2-NEXT:    por %xmm3, %xmm11185; SSE2-NEXT:    movdqa %xmm2, %xmm01186; SSE2-NEXT:    pxor %xmm8, %xmm01187; SSE2-NEXT:    movdqa %xmm9, %xmm31188; SSE2-NEXT:    pxor %xmm8, %xmm31189; SSE2-NEXT:    pcmpgtd %xmm0, %xmm31190; SSE2-NEXT:    pand %xmm3, %xmm21191; SSE2-NEXT:    pandn %xmm9, %xmm31192; SSE2-NEXT:    por %xmm2, %xmm31193; SSE2-NEXT:    movdqa %xmm3, %xmm01194; SSE2-NEXT:    pxor %xmm8, %xmm01195; SSE2-NEXT:    movdqa %xmm1, %xmm21196; SSE2-NEXT:    pxor %xmm8, %xmm21197; SSE2-NEXT:    pcmpgtd %xmm0, %xmm21198; SSE2-NEXT:    pand %xmm2, %xmm31199; SSE2-NEXT:    pandn %xmm1, %xmm21200; SSE2-NEXT:    por %xmm3, %xmm21201; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]1202; SSE2-NEXT:    movdqa %xmm2, %xmm11203; SSE2-NEXT:    pxor %xmm8, %xmm11204; SSE2-NEXT:    movdqa %xmm0, %xmm31205; SSE2-NEXT:    pxor %xmm8, %xmm31206; SSE2-NEXT:    pcmpgtd %xmm1, %xmm31207; SSE2-NEXT:    pand %xmm3, %xmm21208; SSE2-NEXT:    pandn %xmm0, %xmm31209; SSE2-NEXT:    por %xmm2, %xmm31210; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,1,1]1211; SSE2-NEXT:    movdqa %xmm3, %xmm11212; SSE2-NEXT:    pxor %xmm8, %xmm11213; SSE2-NEXT:    pxor %xmm0, %xmm81214; SSE2-NEXT:    pcmpgtd %xmm1, %xmm81215; SSE2-NEXT:    pand %xmm8, %xmm31216; SSE2-NEXT:    pandn %xmm0, %xmm81217; SSE2-NEXT:    por %xmm3, %xmm81218; SSE2-NEXT:    movd %xmm8, %eax1219; SSE2-NEXT:    retq1220;1221; SSE4-LABEL: test_v32i32:1222; SSE4:       # %bb.0:1223; SSE4-NEXT:    pminud %xmm6, %xmm21224; SSE4-NEXT:    pminud %xmm4, %xmm01225; SSE4-NEXT:    pminud %xmm2, %xmm01226; SSE4-NEXT:    pminud %xmm7, %xmm31227; SSE4-NEXT:    pminud %xmm5, %xmm11228; SSE4-NEXT:    pminud %xmm3, %xmm11229; SSE4-NEXT:    pminud %xmm0, %xmm11230; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1231; SSE4-NEXT:    pminud %xmm1, %xmm01232; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1233; SSE4-NEXT:    pminud %xmm0, %xmm11234; SSE4-NEXT:    movd %xmm1, %eax1235; SSE4-NEXT:    retq1236;1237; AVX1-LABEL: test_v32i32:1238; AVX1:       # %bb.0:1239; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm41240; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm51241; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm41242; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm31243; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11244; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm11245; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm21246; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01247; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm01248; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm01249; AVX1-NEXT:    vpminud %xmm0, %xmm4, %xmm01250; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1251; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm01252; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1253; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm01254; AVX1-NEXT:    vmovd %xmm0, %eax1255; AVX1-NEXT:    vzeroupper1256; AVX1-NEXT:    retq1257;1258; AVX2-LABEL: test_v32i32:1259; AVX2:       # %bb.0:1260; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm11261; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm01262; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm01263; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11264; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01265; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1266; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01267; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1268; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01269; AVX2-NEXT:    vmovd %xmm0, %eax1270; AVX2-NEXT:    vzeroupper1271; AVX2-NEXT:    retq1272;1273; AVX512-LABEL: test_v32i32:1274; AVX512:       # %bb.0:1275; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm01276; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm11277; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm01278; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm11279; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm01280; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1281; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm01282; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1283; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm01284; AVX512-NEXT:    vmovd %xmm0, %eax1285; AVX512-NEXT:    vzeroupper1286; AVX512-NEXT:    retq1287  %1 = call i32 @llvm.vector.reduce.umin.v32i32(<32 x i32> %a0)1288  ret i32 %11289}1290 1291;1292; vXi161293;1294 1295define i16 @test_v2i16(<2 x i16> %a0) {1296; SSE2-LABEL: test_v2i16:1297; SSE2:       # %bb.0:1298; SSE2-NEXT:    movdqa %xmm0, %xmm11299; SSE2-NEXT:    psrld $16, %xmm11300; SSE2-NEXT:    movdqa %xmm0, %xmm21301; SSE2-NEXT:    psubusw %xmm1, %xmm21302; SSE2-NEXT:    psubw %xmm2, %xmm01303; SSE2-NEXT:    movd %xmm0, %eax1304; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1305; SSE2-NEXT:    retq1306;1307; SSE4-LABEL: test_v2i16:1308; SSE4:       # %bb.0:1309; SSE4-NEXT:    movdqa %xmm0, %xmm11310; SSE4-NEXT:    psrld $16, %xmm11311; SSE4-NEXT:    pminuw %xmm0, %xmm11312; SSE4-NEXT:    movd %xmm1, %eax1313; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1314; SSE4-NEXT:    retq1315;1316; AVX-LABEL: test_v2i16:1317; AVX:       # %bb.0:1318; AVX-NEXT:    vpsrld $16, %xmm0, %xmm11319; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm01320; AVX-NEXT:    vmovd %xmm0, %eax1321; AVX-NEXT:    # kill: def $ax killed $ax killed $eax1322; AVX-NEXT:    retq1323;1324; AVX512-LABEL: test_v2i16:1325; AVX512:       # %bb.0:1326; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm11327; AVX512-NEXT:    vpminuw %xmm1, %xmm0, %xmm01328; AVX512-NEXT:    vmovd %xmm0, %eax1329; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax1330; AVX512-NEXT:    retq1331  %1 = call i16 @llvm.vector.reduce.umin.v2i16(<2 x i16> %a0)1332  ret i16 %11333}1334 1335define i16 @test_v4i16(<4 x i16> %a0) {1336; SSE2-LABEL: test_v4i16:1337; SSE2:       # %bb.0:1338; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1339; SSE2-NEXT:    movdqa %xmm0, %xmm21340; SSE2-NEXT:    psubusw %xmm1, %xmm21341; SSE2-NEXT:    psubw %xmm2, %xmm01342; SSE2-NEXT:    movdqa %xmm0, %xmm11343; SSE2-NEXT:    psrld $16, %xmm11344; SSE2-NEXT:    movdqa %xmm0, %xmm21345; SSE2-NEXT:    psubusw %xmm1, %xmm21346; SSE2-NEXT:    psubw %xmm2, %xmm01347; SSE2-NEXT:    movd %xmm0, %eax1348; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1349; SSE2-NEXT:    retq1350;1351; SSE4-LABEL: test_v4i16:1352; SSE4:       # %bb.0:1353; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1354; SSE4-NEXT:    pminuw %xmm0, %xmm11355; SSE4-NEXT:    movdqa %xmm1, %xmm01356; SSE4-NEXT:    psrld $16, %xmm01357; SSE4-NEXT:    pminuw %xmm1, %xmm01358; SSE4-NEXT:    movd %xmm0, %eax1359; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1360; SSE4-NEXT:    retq1361;1362; AVX-LABEL: test_v4i16:1363; AVX:       # %bb.0:1364; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1365; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm01366; AVX-NEXT:    vpsrld $16, %xmm0, %xmm11367; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm01368; AVX-NEXT:    vmovd %xmm0, %eax1369; AVX-NEXT:    # kill: def $ax killed $ax killed $eax1370; AVX-NEXT:    retq1371;1372; AVX512-LABEL: test_v4i16:1373; AVX512:       # %bb.0:1374; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1375; AVX512-NEXT:    vpminuw %xmm1, %xmm0, %xmm01376; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm11377; AVX512-NEXT:    vpminuw %xmm1, %xmm0, %xmm01378; AVX512-NEXT:    vmovd %xmm0, %eax1379; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax1380; AVX512-NEXT:    retq1381  %1 = call i16 @llvm.vector.reduce.umin.v4i16(<4 x i16> %a0)1382  ret i16 %11383}1384 1385define i16 @test_v8i16(<8 x i16> %a0) {1386; SSE2-LABEL: test_v8i16:1387; SSE2:       # %bb.0:1388; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1389; SSE2-NEXT:    movdqa %xmm0, %xmm21390; SSE2-NEXT:    psubusw %xmm1, %xmm21391; SSE2-NEXT:    psubw %xmm2, %xmm01392; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1393; SSE2-NEXT:    movdqa %xmm0, %xmm21394; SSE2-NEXT:    psubusw %xmm1, %xmm21395; SSE2-NEXT:    psubw %xmm2, %xmm01396; SSE2-NEXT:    movdqa %xmm0, %xmm11397; SSE2-NEXT:    psrld $16, %xmm11398; SSE2-NEXT:    movdqa %xmm0, %xmm21399; SSE2-NEXT:    psubusw %xmm1, %xmm21400; SSE2-NEXT:    psubw %xmm2, %xmm01401; SSE2-NEXT:    movd %xmm0, %eax1402; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1403; SSE2-NEXT:    retq1404;1405; SSE4-LABEL: test_v8i16:1406; SSE4:       # %bb.0:1407; SSE4-NEXT:    phminposuw %xmm0, %xmm01408; SSE4-NEXT:    movd %xmm0, %eax1409; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1410; SSE4-NEXT:    retq1411;1412; AVX-LABEL: test_v8i16:1413; AVX:       # %bb.0:1414; AVX-NEXT:    vphminposuw %xmm0, %xmm01415; AVX-NEXT:    vmovd %xmm0, %eax1416; AVX-NEXT:    # kill: def $ax killed $ax killed $eax1417; AVX-NEXT:    retq1418;1419; AVX512-LABEL: test_v8i16:1420; AVX512:       # %bb.0:1421; AVX512-NEXT:    vphminposuw %xmm0, %xmm01422; AVX512-NEXT:    vmovd %xmm0, %eax1423; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax1424; AVX512-NEXT:    retq1425  %1 = call i16 @llvm.vector.reduce.umin.v8i16(<8 x i16> %a0)1426  ret i16 %11427}1428 1429define i16 @test_v16i16(<16 x i16> %a0) {1430; SSE2-LABEL: test_v16i16:1431; SSE2:       # %bb.0:1432; SSE2-NEXT:    movdqa %xmm0, %xmm21433; SSE2-NEXT:    psubusw %xmm1, %xmm21434; SSE2-NEXT:    psubw %xmm2, %xmm01435; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1436; SSE2-NEXT:    movdqa %xmm0, %xmm21437; SSE2-NEXT:    psubusw %xmm1, %xmm21438; SSE2-NEXT:    psubw %xmm2, %xmm01439; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1440; SSE2-NEXT:    movdqa %xmm0, %xmm21441; SSE2-NEXT:    psubusw %xmm1, %xmm21442; SSE2-NEXT:    psubw %xmm2, %xmm01443; SSE2-NEXT:    movdqa %xmm0, %xmm11444; SSE2-NEXT:    psrld $16, %xmm11445; SSE2-NEXT:    movdqa %xmm0, %xmm21446; SSE2-NEXT:    psubusw %xmm1, %xmm21447; SSE2-NEXT:    psubw %xmm2, %xmm01448; SSE2-NEXT:    movd %xmm0, %eax1449; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1450; SSE2-NEXT:    retq1451;1452; SSE4-LABEL: test_v16i16:1453; SSE4:       # %bb.0:1454; SSE4-NEXT:    pminuw %xmm1, %xmm01455; SSE4-NEXT:    phminposuw %xmm0, %xmm01456; SSE4-NEXT:    movd %xmm0, %eax1457; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1458; SSE4-NEXT:    retq1459;1460; AVX1-LABEL: test_v16i16:1461; AVX1:       # %bb.0:1462; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11463; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm01464; AVX1-NEXT:    vphminposuw %xmm0, %xmm01465; AVX1-NEXT:    vmovd %xmm0, %eax1466; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax1467; AVX1-NEXT:    vzeroupper1468; AVX1-NEXT:    retq1469;1470; AVX2-LABEL: test_v16i16:1471; AVX2:       # %bb.0:1472; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11473; AVX2-NEXT:    vpminuw %xmm1, %xmm0, %xmm01474; AVX2-NEXT:    vphminposuw %xmm0, %xmm01475; AVX2-NEXT:    vmovd %xmm0, %eax1476; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax1477; AVX2-NEXT:    vzeroupper1478; AVX2-NEXT:    retq1479;1480; AVX512-LABEL: test_v16i16:1481; AVX512:       # %bb.0:1482; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm11483; AVX512-NEXT:    vpminuw %xmm1, %xmm0, %xmm01484; AVX512-NEXT:    vphminposuw %xmm0, %xmm01485; AVX512-NEXT:    vmovd %xmm0, %eax1486; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax1487; AVX512-NEXT:    vzeroupper1488; AVX512-NEXT:    retq1489  %1 = call i16 @llvm.vector.reduce.umin.v16i16(<16 x i16> %a0)1490  ret i16 %11491}1492 1493define i16 @test_v32i16(<32 x i16> %a0) {1494; SSE2-LABEL: test_v32i16:1495; SSE2:       # %bb.0:1496; SSE2-NEXT:    movdqa %xmm1, %xmm41497; SSE2-NEXT:    psubusw %xmm3, %xmm41498; SSE2-NEXT:    psubw %xmm4, %xmm11499; SSE2-NEXT:    movdqa %xmm0, %xmm31500; SSE2-NEXT:    psubusw %xmm2, %xmm31501; SSE2-NEXT:    psubw %xmm3, %xmm01502; SSE2-NEXT:    movdqa %xmm0, %xmm21503; SSE2-NEXT:    psubusw %xmm1, %xmm21504; SSE2-NEXT:    psubw %xmm2, %xmm01505; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1506; SSE2-NEXT:    movdqa %xmm0, %xmm21507; SSE2-NEXT:    psubusw %xmm1, %xmm21508; SSE2-NEXT:    psubw %xmm2, %xmm01509; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1510; SSE2-NEXT:    movdqa %xmm0, %xmm21511; SSE2-NEXT:    psubusw %xmm1, %xmm21512; SSE2-NEXT:    psubw %xmm2, %xmm01513; SSE2-NEXT:    movdqa %xmm0, %xmm11514; SSE2-NEXT:    psrld $16, %xmm11515; SSE2-NEXT:    movdqa %xmm0, %xmm21516; SSE2-NEXT:    psubusw %xmm1, %xmm21517; SSE2-NEXT:    psubw %xmm2, %xmm01518; SSE2-NEXT:    movd %xmm0, %eax1519; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1520; SSE2-NEXT:    retq1521;1522; SSE4-LABEL: test_v32i16:1523; SSE4:       # %bb.0:1524; SSE4-NEXT:    pminuw %xmm3, %xmm11525; SSE4-NEXT:    pminuw %xmm2, %xmm01526; SSE4-NEXT:    pminuw %xmm1, %xmm01527; SSE4-NEXT:    phminposuw %xmm0, %xmm01528; SSE4-NEXT:    movd %xmm0, %eax1529; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1530; SSE4-NEXT:    retq1531;1532; AVX1-LABEL: test_v32i16:1533; AVX1:       # %bb.0:1534; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21535; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31536; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm21537; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm01538; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm01539; AVX1-NEXT:    vphminposuw %xmm0, %xmm01540; AVX1-NEXT:    vmovd %xmm0, %eax1541; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax1542; AVX1-NEXT:    vzeroupper1543; AVX1-NEXT:    retq1544;1545; AVX2-LABEL: test_v32i16:1546; AVX2:       # %bb.0:1547; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm01548; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11549; AVX2-NEXT:    vpminuw %xmm1, %xmm0, %xmm01550; AVX2-NEXT:    vphminposuw %xmm0, %xmm01551; AVX2-NEXT:    vmovd %xmm0, %eax1552; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax1553; AVX2-NEXT:    vzeroupper1554; AVX2-NEXT:    retq1555;1556; AVX512-LABEL: test_v32i16:1557; AVX512:       # %bb.0:1558; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm11559; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm01560; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm11561; AVX512-NEXT:    vpminuw %xmm1, %xmm0, %xmm01562; AVX512-NEXT:    vphminposuw %xmm0, %xmm01563; AVX512-NEXT:    vmovd %xmm0, %eax1564; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax1565; AVX512-NEXT:    vzeroupper1566; AVX512-NEXT:    retq1567  %1 = call i16 @llvm.vector.reduce.umin.v32i16(<32 x i16> %a0)1568  ret i16 %11569}1570 1571define i16 @test_v64i16(<64 x i16> %a0) {1572; SSE2-LABEL: test_v64i16:1573; SSE2:       # %bb.0:1574; SSE2-NEXT:    movdqa %xmm2, %xmm81575; SSE2-NEXT:    psubusw %xmm6, %xmm81576; SSE2-NEXT:    psubw %xmm8, %xmm21577; SSE2-NEXT:    movdqa %xmm0, %xmm61578; SSE2-NEXT:    psubusw %xmm4, %xmm61579; SSE2-NEXT:    psubw %xmm6, %xmm01580; SSE2-NEXT:    movdqa %xmm3, %xmm41581; SSE2-NEXT:    psubusw %xmm7, %xmm41582; SSE2-NEXT:    psubw %xmm4, %xmm31583; SSE2-NEXT:    movdqa %xmm1, %xmm41584; SSE2-NEXT:    psubusw %xmm5, %xmm41585; SSE2-NEXT:    psubw %xmm4, %xmm11586; SSE2-NEXT:    movdqa %xmm1, %xmm41587; SSE2-NEXT:    psubusw %xmm3, %xmm41588; SSE2-NEXT:    psubw %xmm4, %xmm11589; SSE2-NEXT:    movdqa %xmm0, %xmm31590; SSE2-NEXT:    psubusw %xmm2, %xmm31591; SSE2-NEXT:    psubw %xmm3, %xmm01592; SSE2-NEXT:    movdqa %xmm0, %xmm21593; SSE2-NEXT:    psubusw %xmm1, %xmm21594; SSE2-NEXT:    psubw %xmm2, %xmm01595; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1596; SSE2-NEXT:    movdqa %xmm0, %xmm21597; SSE2-NEXT:    psubusw %xmm1, %xmm21598; SSE2-NEXT:    psubw %xmm2, %xmm01599; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1600; SSE2-NEXT:    movdqa %xmm0, %xmm21601; SSE2-NEXT:    psubusw %xmm1, %xmm21602; SSE2-NEXT:    psubw %xmm2, %xmm01603; SSE2-NEXT:    movdqa %xmm0, %xmm11604; SSE2-NEXT:    psrld $16, %xmm11605; SSE2-NEXT:    movdqa %xmm0, %xmm21606; SSE2-NEXT:    psubusw %xmm1, %xmm21607; SSE2-NEXT:    psubw %xmm2, %xmm01608; SSE2-NEXT:    movd %xmm0, %eax1609; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax1610; SSE2-NEXT:    retq1611;1612; SSE4-LABEL: test_v64i16:1613; SSE4:       # %bb.0:1614; SSE4-NEXT:    pminuw %xmm7, %xmm31615; SSE4-NEXT:    pminuw %xmm5, %xmm11616; SSE4-NEXT:    pminuw %xmm3, %xmm11617; SSE4-NEXT:    pminuw %xmm6, %xmm21618; SSE4-NEXT:    pminuw %xmm4, %xmm01619; SSE4-NEXT:    pminuw %xmm2, %xmm01620; SSE4-NEXT:    pminuw %xmm1, %xmm01621; SSE4-NEXT:    phminposuw %xmm0, %xmm01622; SSE4-NEXT:    movd %xmm0, %eax1623; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax1624; SSE4-NEXT:    retq1625;1626; AVX1-LABEL: test_v64i16:1627; AVX1:       # %bb.0:1628; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm41629; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm51630; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm41631; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm51632; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm61633; AVX1-NEXT:    vpminuw %xmm5, %xmm6, %xmm51634; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm41635; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm11636; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm01637; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm01638; AVX1-NEXT:    vpminuw %xmm4, %xmm0, %xmm01639; AVX1-NEXT:    vphminposuw %xmm0, %xmm01640; AVX1-NEXT:    vmovd %xmm0, %eax1641; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax1642; AVX1-NEXT:    vzeroupper1643; AVX1-NEXT:    retq1644;1645; AVX2-LABEL: test_v64i16:1646; AVX2:       # %bb.0:1647; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm11648; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm01649; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm01650; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11651; AVX2-NEXT:    vpminuw %xmm1, %xmm0, %xmm01652; AVX2-NEXT:    vphminposuw %xmm0, %xmm01653; AVX2-NEXT:    vmovd %xmm0, %eax1654; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax1655; AVX2-NEXT:    vzeroupper1656; AVX2-NEXT:    retq1657;1658; AVX512-LABEL: test_v64i16:1659; AVX512:       # %bb.0:1660; AVX512-NEXT:    vpminuw %zmm1, %zmm0, %zmm01661; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm11662; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm01663; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm11664; AVX512-NEXT:    vpminuw %xmm1, %xmm0, %xmm01665; AVX512-NEXT:    vphminposuw %xmm0, %xmm01666; AVX512-NEXT:    vmovd %xmm0, %eax1667; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax1668; AVX512-NEXT:    vzeroupper1669; AVX512-NEXT:    retq1670  %1 = call i16 @llvm.vector.reduce.umin.v64i16(<64 x i16> %a0)1671  ret i16 %11672}1673 1674;1675; vXi81676;1677 1678define i8 @test_v2i8(<2 x i8> %a0) {1679; SSE-LABEL: test_v2i8:1680; SSE:       # %bb.0:1681; SSE-NEXT:    movdqa %xmm0, %xmm11682; SSE-NEXT:    psrlw $8, %xmm11683; SSE-NEXT:    pminub %xmm0, %xmm11684; SSE-NEXT:    movd %xmm1, %eax1685; SSE-NEXT:    # kill: def $al killed $al killed $eax1686; SSE-NEXT:    retq1687;1688; AVX-LABEL: test_v2i8:1689; AVX:       # %bb.0:1690; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm11691; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm01692; AVX-NEXT:    vmovd %xmm0, %eax1693; AVX-NEXT:    # kill: def $al killed $al killed $eax1694; AVX-NEXT:    retq1695;1696; AVX512-LABEL: test_v2i8:1697; AVX512:       # %bb.0:1698; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm11699; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01700; AVX512-NEXT:    vmovd %xmm0, %eax1701; AVX512-NEXT:    # kill: def $al killed $al killed $eax1702; AVX512-NEXT:    retq1703  %1 = call i8 @llvm.vector.reduce.umin.v2i8(<2 x i8> %a0)1704  ret i8 %11705}1706 1707define i8 @test_v4i8(<4 x i8> %a0) {1708; SSE-LABEL: test_v4i8:1709; SSE:       # %bb.0:1710; SSE-NEXT:    movdqa %xmm0, %xmm11711; SSE-NEXT:    psrld $16, %xmm11712; SSE-NEXT:    pminub %xmm0, %xmm11713; SSE-NEXT:    movdqa %xmm1, %xmm01714; SSE-NEXT:    psrlw $8, %xmm01715; SSE-NEXT:    pminub %xmm1, %xmm01716; SSE-NEXT:    movd %xmm0, %eax1717; SSE-NEXT:    # kill: def $al killed $al killed $eax1718; SSE-NEXT:    retq1719;1720; AVX-LABEL: test_v4i8:1721; AVX:       # %bb.0:1722; AVX-NEXT:    vpsrld $16, %xmm0, %xmm11723; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm01724; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm11725; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm01726; AVX-NEXT:    vmovd %xmm0, %eax1727; AVX-NEXT:    # kill: def $al killed $al killed $eax1728; AVX-NEXT:    retq1729;1730; AVX512-LABEL: test_v4i8:1731; AVX512:       # %bb.0:1732; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm11733; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01734; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm11735; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01736; AVX512-NEXT:    vmovd %xmm0, %eax1737; AVX512-NEXT:    # kill: def $al killed $al killed $eax1738; AVX512-NEXT:    retq1739  %1 = call i8 @llvm.vector.reduce.umin.v4i8(<4 x i8> %a0)1740  ret i8 %11741}1742 1743define i8 @test_v8i8(<8 x i8> %a0) {1744; SSE-LABEL: test_v8i8:1745; SSE:       # %bb.0:1746; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1747; SSE-NEXT:    pminub %xmm0, %xmm11748; SSE-NEXT:    movdqa %xmm1, %xmm01749; SSE-NEXT:    psrld $16, %xmm01750; SSE-NEXT:    pminub %xmm1, %xmm01751; SSE-NEXT:    movdqa %xmm0, %xmm11752; SSE-NEXT:    psrlw $8, %xmm11753; SSE-NEXT:    pminub %xmm0, %xmm11754; SSE-NEXT:    movd %xmm1, %eax1755; SSE-NEXT:    # kill: def $al killed $al killed $eax1756; SSE-NEXT:    retq1757;1758; AVX-LABEL: test_v8i8:1759; AVX:       # %bb.0:1760; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1761; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm01762; AVX-NEXT:    vpsrld $16, %xmm0, %xmm11763; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm01764; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm11765; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm01766; AVX-NEXT:    vmovd %xmm0, %eax1767; AVX-NEXT:    # kill: def $al killed $al killed $eax1768; AVX-NEXT:    retq1769;1770; AVX512-LABEL: test_v8i8:1771; AVX512:       # %bb.0:1772; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1773; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01774; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm11775; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01776; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm11777; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01778; AVX512-NEXT:    vmovd %xmm0, %eax1779; AVX512-NEXT:    # kill: def $al killed $al killed $eax1780; AVX512-NEXT:    retq1781  %1 = call i8 @llvm.vector.reduce.umin.v8i8(<8 x i8> %a0)1782  ret i8 %11783}1784 1785define i8 @test_v16i8(<16 x i8> %a0) {1786; SSE2-LABEL: test_v16i8:1787; SSE2:       # %bb.0:1788; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1789; SSE2-NEXT:    pminub %xmm0, %xmm11790; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1791; SSE2-NEXT:    pminub %xmm1, %xmm01792; SSE2-NEXT:    movdqa %xmm0, %xmm11793; SSE2-NEXT:    psrld $16, %xmm11794; SSE2-NEXT:    pminub %xmm0, %xmm11795; SSE2-NEXT:    movdqa %xmm1, %xmm01796; SSE2-NEXT:    psrlw $8, %xmm01797; SSE2-NEXT:    pminub %xmm1, %xmm01798; SSE2-NEXT:    movd %xmm0, %eax1799; SSE2-NEXT:    # kill: def $al killed $al killed $eax1800; SSE2-NEXT:    retq1801;1802; SSE4-LABEL: test_v16i8:1803; SSE4:       # %bb.0:1804; SSE4-NEXT:    movdqa %xmm0, %xmm11805; SSE4-NEXT:    psrlw $8, %xmm11806; SSE4-NEXT:    pminub %xmm0, %xmm11807; SSE4-NEXT:    phminposuw %xmm1, %xmm01808; SSE4-NEXT:    movd %xmm0, %eax1809; SSE4-NEXT:    # kill: def $al killed $al killed $eax1810; SSE4-NEXT:    retq1811;1812; AVX-LABEL: test_v16i8:1813; AVX:       # %bb.0:1814; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm11815; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm01816; AVX-NEXT:    vphminposuw %xmm0, %xmm01817; AVX-NEXT:    vmovd %xmm0, %eax1818; AVX-NEXT:    # kill: def $al killed $al killed $eax1819; AVX-NEXT:    retq1820;1821; AVX512-LABEL: test_v16i8:1822; AVX512:       # %bb.0:1823; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm11824; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01825; AVX512-NEXT:    vphminposuw %xmm0, %xmm01826; AVX512-NEXT:    vmovd %xmm0, %eax1827; AVX512-NEXT:    # kill: def $al killed $al killed $eax1828; AVX512-NEXT:    retq1829  %1 = call i8 @llvm.vector.reduce.umin.v16i8(<16 x i8> %a0)1830  ret i8 %11831}1832 1833define i8 @test_v32i8(<32 x i8> %a0) {1834; SSE2-LABEL: test_v32i8:1835; SSE2:       # %bb.0:1836; SSE2-NEXT:    pminub %xmm1, %xmm01837; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1838; SSE2-NEXT:    pminub %xmm0, %xmm11839; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1840; SSE2-NEXT:    pminub %xmm1, %xmm01841; SSE2-NEXT:    movdqa %xmm0, %xmm11842; SSE2-NEXT:    psrld $16, %xmm11843; SSE2-NEXT:    pminub %xmm0, %xmm11844; SSE2-NEXT:    movdqa %xmm1, %xmm01845; SSE2-NEXT:    psrlw $8, %xmm01846; SSE2-NEXT:    pminub %xmm1, %xmm01847; SSE2-NEXT:    movd %xmm0, %eax1848; SSE2-NEXT:    # kill: def $al killed $al killed $eax1849; SSE2-NEXT:    retq1850;1851; SSE4-LABEL: test_v32i8:1852; SSE4:       # %bb.0:1853; SSE4-NEXT:    pminub %xmm1, %xmm01854; SSE4-NEXT:    movdqa %xmm0, %xmm11855; SSE4-NEXT:    psrlw $8, %xmm11856; SSE4-NEXT:    pminub %xmm0, %xmm11857; SSE4-NEXT:    phminposuw %xmm1, %xmm01858; SSE4-NEXT:    movd %xmm0, %eax1859; SSE4-NEXT:    # kill: def $al killed $al killed $eax1860; SSE4-NEXT:    retq1861;1862; AVX1-LABEL: test_v32i8:1863; AVX1:       # %bb.0:1864; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11865; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm01866; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm11867; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm01868; AVX1-NEXT:    vphminposuw %xmm0, %xmm01869; AVX1-NEXT:    vmovd %xmm0, %eax1870; AVX1-NEXT:    # kill: def $al killed $al killed $eax1871; AVX1-NEXT:    vzeroupper1872; AVX1-NEXT:    retq1873;1874; AVX2-LABEL: test_v32i8:1875; AVX2:       # %bb.0:1876; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11877; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm01878; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm11879; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm01880; AVX2-NEXT:    vphminposuw %xmm0, %xmm01881; AVX2-NEXT:    vmovd %xmm0, %eax1882; AVX2-NEXT:    # kill: def $al killed $al killed $eax1883; AVX2-NEXT:    vzeroupper1884; AVX2-NEXT:    retq1885;1886; AVX512-LABEL: test_v32i8:1887; AVX512:       # %bb.0:1888; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm11889; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01890; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm11891; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01892; AVX512-NEXT:    vphminposuw %xmm0, %xmm01893; AVX512-NEXT:    vmovd %xmm0, %eax1894; AVX512-NEXT:    # kill: def $al killed $al killed $eax1895; AVX512-NEXT:    vzeroupper1896; AVX512-NEXT:    retq1897  %1 = call i8 @llvm.vector.reduce.umin.v32i8(<32 x i8> %a0)1898  ret i8 %11899}1900 1901define i8 @test_v64i8(<64 x i8> %a0) {1902; SSE2-LABEL: test_v64i8:1903; SSE2:       # %bb.0:1904; SSE2-NEXT:    pminub %xmm3, %xmm11905; SSE2-NEXT:    pminub %xmm2, %xmm01906; SSE2-NEXT:    pminub %xmm1, %xmm01907; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1908; SSE2-NEXT:    pminub %xmm0, %xmm11909; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]1910; SSE2-NEXT:    pminub %xmm1, %xmm01911; SSE2-NEXT:    movdqa %xmm0, %xmm11912; SSE2-NEXT:    psrld $16, %xmm11913; SSE2-NEXT:    pminub %xmm0, %xmm11914; SSE2-NEXT:    movdqa %xmm1, %xmm01915; SSE2-NEXT:    psrlw $8, %xmm01916; SSE2-NEXT:    pminub %xmm1, %xmm01917; SSE2-NEXT:    movd %xmm0, %eax1918; SSE2-NEXT:    # kill: def $al killed $al killed $eax1919; SSE2-NEXT:    retq1920;1921; SSE4-LABEL: test_v64i8:1922; SSE4:       # %bb.0:1923; SSE4-NEXT:    pminub %xmm3, %xmm11924; SSE4-NEXT:    pminub %xmm2, %xmm01925; SSE4-NEXT:    pminub %xmm1, %xmm01926; SSE4-NEXT:    movdqa %xmm0, %xmm11927; SSE4-NEXT:    psrlw $8, %xmm11928; SSE4-NEXT:    pminub %xmm0, %xmm11929; SSE4-NEXT:    phminposuw %xmm1, %xmm01930; SSE4-NEXT:    movd %xmm0, %eax1931; SSE4-NEXT:    # kill: def $al killed $al killed $eax1932; SSE4-NEXT:    retq1933;1934; AVX1-LABEL: test_v64i8:1935; AVX1:       # %bb.0:1936; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21937; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31938; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm21939; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm01940; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm01941; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm11942; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm01943; AVX1-NEXT:    vphminposuw %xmm0, %xmm01944; AVX1-NEXT:    vmovd %xmm0, %eax1945; AVX1-NEXT:    # kill: def $al killed $al killed $eax1946; AVX1-NEXT:    vzeroupper1947; AVX1-NEXT:    retq1948;1949; AVX2-LABEL: test_v64i8:1950; AVX2:       # %bb.0:1951; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm01952; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11953; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm01954; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm11955; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm01956; AVX2-NEXT:    vphminposuw %xmm0, %xmm01957; AVX2-NEXT:    vmovd %xmm0, %eax1958; AVX2-NEXT:    # kill: def $al killed $al killed $eax1959; AVX2-NEXT:    vzeroupper1960; AVX2-NEXT:    retq1961;1962; AVX512-LABEL: test_v64i8:1963; AVX512:       # %bb.0:1964; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm11965; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm01966; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm11967; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01968; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm11969; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm01970; AVX512-NEXT:    vphminposuw %xmm0, %xmm01971; AVX512-NEXT:    vmovd %xmm0, %eax1972; AVX512-NEXT:    # kill: def $al killed $al killed $eax1973; AVX512-NEXT:    vzeroupper1974; AVX512-NEXT:    retq1975  %1 = call i8 @llvm.vector.reduce.umin.v64i8(<64 x i8> %a0)1976  ret i8 %11977}1978 1979define i8 @test_v128i8(<128 x i8> %a0) {1980; SSE2-LABEL: test_v128i8:1981; SSE2:       # %bb.0:1982; SSE2-NEXT:    pminub %xmm6, %xmm21983; SSE2-NEXT:    pminub %xmm4, %xmm01984; SSE2-NEXT:    pminub %xmm2, %xmm01985; SSE2-NEXT:    pminub %xmm7, %xmm31986; SSE2-NEXT:    pminub %xmm5, %xmm11987; SSE2-NEXT:    pminub %xmm3, %xmm11988; SSE2-NEXT:    pminub %xmm0, %xmm11989; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]1990; SSE2-NEXT:    pminub %xmm1, %xmm01991; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1992; SSE2-NEXT:    pminub %xmm0, %xmm11993; SSE2-NEXT:    movdqa %xmm1, %xmm01994; SSE2-NEXT:    psrld $16, %xmm01995; SSE2-NEXT:    pminub %xmm1, %xmm01996; SSE2-NEXT:    movdqa %xmm0, %xmm11997; SSE2-NEXT:    psrlw $8, %xmm11998; SSE2-NEXT:    pminub %xmm0, %xmm11999; SSE2-NEXT:    movd %xmm1, %eax2000; SSE2-NEXT:    # kill: def $al killed $al killed $eax2001; SSE2-NEXT:    retq2002;2003; SSE4-LABEL: test_v128i8:2004; SSE4:       # %bb.0:2005; SSE4-NEXT:    pminub %xmm7, %xmm32006; SSE4-NEXT:    pminub %xmm5, %xmm12007; SSE4-NEXT:    pminub %xmm3, %xmm12008; SSE4-NEXT:    pminub %xmm6, %xmm22009; SSE4-NEXT:    pminub %xmm4, %xmm02010; SSE4-NEXT:    pminub %xmm2, %xmm02011; SSE4-NEXT:    pminub %xmm1, %xmm02012; SSE4-NEXT:    movdqa %xmm0, %xmm12013; SSE4-NEXT:    psrlw $8, %xmm12014; SSE4-NEXT:    pminub %xmm0, %xmm12015; SSE4-NEXT:    phminposuw %xmm1, %xmm02016; SSE4-NEXT:    movd %xmm0, %eax2017; SSE4-NEXT:    # kill: def $al killed $al killed $eax2018; SSE4-NEXT:    retq2019;2020; AVX1-LABEL: test_v128i8:2021; AVX1:       # %bb.0:2022; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm42023; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm52024; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm42025; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm52026; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm62027; AVX1-NEXT:    vpminub %xmm5, %xmm6, %xmm52028; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm42029; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm12030; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm02031; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm02032; AVX1-NEXT:    vpminub %xmm4, %xmm0, %xmm02033; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm12034; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm02035; AVX1-NEXT:    vphminposuw %xmm0, %xmm02036; AVX1-NEXT:    vmovd %xmm0, %eax2037; AVX1-NEXT:    # kill: def $al killed $al killed $eax2038; AVX1-NEXT:    vzeroupper2039; AVX1-NEXT:    retq2040;2041; AVX2-LABEL: test_v128i8:2042; AVX2:       # %bb.0:2043; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm12044; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm02045; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm02046; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm12047; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm02048; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm12049; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm02050; AVX2-NEXT:    vphminposuw %xmm0, %xmm02051; AVX2-NEXT:    vmovd %xmm0, %eax2052; AVX2-NEXT:    # kill: def $al killed $al killed $eax2053; AVX2-NEXT:    vzeroupper2054; AVX2-NEXT:    retq2055;2056; AVX512-LABEL: test_v128i8:2057; AVX512:       # %bb.0:2058; AVX512-NEXT:    vpminub %zmm1, %zmm0, %zmm02059; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm12060; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm02061; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm12062; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm02063; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm12064; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm02065; AVX512-NEXT:    vphminposuw %xmm0, %xmm02066; AVX512-NEXT:    vmovd %xmm0, %eax2067; AVX512-NEXT:    # kill: def $al killed $al killed $eax2068; AVX512-NEXT:    vzeroupper2069; AVX512-NEXT:    retq2070  %1 = call i8 @llvm.vector.reduce.umin.v128i8(<128 x i8> %a0)2071  ret i8 %12072}2073 2074declare i64 @llvm.vector.reduce.umin.v2i64(<2 x i64>)2075declare i64 @llvm.vector.reduce.umin.v4i64(<4 x i64>)2076declare i64 @llvm.vector.reduce.umin.v8i64(<8 x i64>)2077declare i64 @llvm.vector.reduce.umin.v16i64(<16 x i64>)2078 2079declare i32 @llvm.vector.reduce.umin.v2i32(<2 x i32>)2080declare i32 @llvm.vector.reduce.umin.v4i32(<4 x i32>)2081declare i32 @llvm.vector.reduce.umin.v8i32(<8 x i32>)2082declare i32 @llvm.vector.reduce.umin.v16i32(<16 x i32>)2083declare i32 @llvm.vector.reduce.umin.v32i32(<32 x i32>)2084 2085declare i16 @llvm.vector.reduce.umin.v2i16(<2 x i16>)2086declare i16 @llvm.vector.reduce.umin.v4i16(<4 x i16>)2087declare i16 @llvm.vector.reduce.umin.v8i16(<8 x i16>)2088declare i16 @llvm.vector.reduce.umin.v16i16(<16 x i16>)2089declare i16 @llvm.vector.reduce.umin.v32i16(<32 x i16>)2090declare i16 @llvm.vector.reduce.umin.v64i16(<64 x i16>)2091 2092declare i8 @llvm.vector.reduce.umin.v2i8(<2 x i8>)2093declare i8 @llvm.vector.reduce.umin.v4i8(<4 x i8>)2094declare i8 @llvm.vector.reduce.umin.v8i8(<8 x i8>)2095declare i8 @llvm.vector.reduce.umin.v16i8(<16 x i8>)2096declare i8 @llvm.vector.reduce.umin.v32i8(<32 x i8>)2097declare i8 @llvm.vector.reduce.umin.v64i8(<64 x i8>)2098declare i8 @llvm.vector.reduce.umin.v128i8(<128 x i8>)2099