brintos

brintos / llvm-project-archived public Read only

0
0
Text · 112.4 KiB · ee42cb8 Raw
3242 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=sse2 -machine-combiner-verify-pattern-order=true < %s | FileCheck %s --check-prefix=SSE3; RUN: llc -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=avx2 -machine-combiner-verify-pattern-order=true < %s | FileCheck %s --check-prefix=AVX --check-prefix=AVX24; RUN: llc -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=avx512vl,avx512bw -machine-combiner-verify-pattern-order=true < %s | FileCheck %s --check-prefix=AVX --check-prefix=AVX5125 6; Verify that 128-bit vector logical ops are reassociated.7 8define <4 x i32> @reassociate_and_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x2, <4 x i32> %x3) {9; SSE-LABEL: reassociate_and_v4i32:10; SSE:       # %bb.0:11; SSE-NEXT:    paddd %xmm1, %xmm012; SSE-NEXT:    pand %xmm3, %xmm213; SSE-NEXT:    pand %xmm2, %xmm014; SSE-NEXT:    retq15;16; AVX2-LABEL: reassociate_and_v4i32:17; AVX2:       # %bb.0:18; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm019; AVX2-NEXT:    vpand %xmm2, %xmm3, %xmm120; AVX2-NEXT:    vpand %xmm0, %xmm1, %xmm021; AVX2-NEXT:    retq22;23; AVX512-LABEL: reassociate_and_v4i32:24; AVX512:       # %bb.0:25; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm026; AVX512-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm0 & xmm3 & xmm227; AVX512-NEXT:    retq28 29  %t0 = add <4 x i32> %x0, %x130  %t1 = and <4 x i32> %x2, %t031  %t2 = and <4 x i32> %x3, %t132  ret <4 x i32> %t233}34 35define <4 x i32> @reassociate_or_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x2, <4 x i32> %x3) {36; SSE-LABEL: reassociate_or_v4i32:37; SSE:       # %bb.0:38; SSE-NEXT:    paddd %xmm1, %xmm039; SSE-NEXT:    por %xmm3, %xmm240; SSE-NEXT:    por %xmm2, %xmm041; SSE-NEXT:    retq42;43; AVX2-LABEL: reassociate_or_v4i32:44; AVX2:       # %bb.0:45; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm046; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm147; AVX2-NEXT:    vpor %xmm0, %xmm1, %xmm048; AVX2-NEXT:    retq49;50; AVX512-LABEL: reassociate_or_v4i32:51; AVX512:       # %bb.0:52; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm053; AVX512-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm0 | xmm3 | xmm254; AVX512-NEXT:    retq55 56  %t0 = add <4 x i32> %x0, %x157  %t1 = or <4 x i32> %x2, %t058  %t2 = or <4 x i32> %x3, %t159  ret <4 x i32> %t260}61 62define <4 x i32> @reassociate_xor_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x2, <4 x i32> %x3) {63; SSE-LABEL: reassociate_xor_v4i32:64; SSE:       # %bb.0:65; SSE-NEXT:    paddd %xmm1, %xmm066; SSE-NEXT:    pxor %xmm3, %xmm267; SSE-NEXT:    pxor %xmm2, %xmm068; SSE-NEXT:    retq69;70; AVX2-LABEL: reassociate_xor_v4i32:71; AVX2:       # %bb.0:72; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm073; AVX2-NEXT:    vpxor %xmm2, %xmm3, %xmm174; AVX2-NEXT:    vpxor %xmm0, %xmm1, %xmm075; AVX2-NEXT:    retq76;77; AVX512-LABEL: reassociate_xor_v4i32:78; AVX512:       # %bb.0:79; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm080; AVX512-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm0 ^ xmm3 ^ xmm281; AVX512-NEXT:    retq82 83  %t0 = add <4 x i32> %x0, %x184  %t1 = xor <4 x i32> %x2, %t085  %t2 = xor <4 x i32> %x3, %t186  ret <4 x i32> %t287}88 89; Verify that 256-bit vector logical ops are reassociated.90 91define <8 x i32> @reassociate_and_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x2, <8 x i32> %x3) {92; SSE-LABEL: reassociate_and_v8i32:93; SSE:       # %bb.0:94; SSE-NEXT:    paddd %xmm2, %xmm095; SSE-NEXT:    pand %xmm6, %xmm496; SSE-NEXT:    pand %xmm4, %xmm097; SSE-NEXT:    paddd %xmm3, %xmm198; SSE-NEXT:    pand %xmm7, %xmm599; SSE-NEXT:    pand %xmm5, %xmm1100; SSE-NEXT:    retq101;102; AVX2-LABEL: reassociate_and_v8i32:103; AVX2:       # %bb.0:104; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0105; AVX2-NEXT:    vpand %ymm2, %ymm3, %ymm1106; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm0107; AVX2-NEXT:    retq108;109; AVX512-LABEL: reassociate_and_v8i32:110; AVX512:       # %bb.0:111; AVX512-NEXT:    vpaddd %ymm1, %ymm0, %ymm0112; AVX512-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 & ymm3 & ymm2113; AVX512-NEXT:    retq114 115  %t0 = add <8 x i32> %x0, %x1116  %t1 = and <8 x i32> %x2, %t0117  %t2 = and <8 x i32> %x3, %t1118  ret <8 x i32> %t2119}120 121define <8 x i32> @reassociate_or_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x2, <8 x i32> %x3) {122; SSE-LABEL: reassociate_or_v8i32:123; SSE:       # %bb.0:124; SSE-NEXT:    paddd %xmm2, %xmm0125; SSE-NEXT:    por %xmm6, %xmm4126; SSE-NEXT:    por %xmm4, %xmm0127; SSE-NEXT:    paddd %xmm3, %xmm1128; SSE-NEXT:    por %xmm7, %xmm5129; SSE-NEXT:    por %xmm5, %xmm1130; SSE-NEXT:    retq131;132; AVX2-LABEL: reassociate_or_v8i32:133; AVX2:       # %bb.0:134; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0135; AVX2-NEXT:    vpor %ymm2, %ymm3, %ymm1136; AVX2-NEXT:    vpor %ymm0, %ymm1, %ymm0137; AVX2-NEXT:    retq138;139; AVX512-LABEL: reassociate_or_v8i32:140; AVX512:       # %bb.0:141; AVX512-NEXT:    vpaddd %ymm1, %ymm0, %ymm0142; AVX512-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 | ymm3 | ymm2143; AVX512-NEXT:    retq144 145  %t0 = add <8 x i32> %x0, %x1146  %t1 = or <8 x i32> %x2, %t0147  %t2 = or <8 x i32> %x3, %t1148  ret <8 x i32> %t2149}150 151define <8 x i32> @reassociate_xor_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x2, <8 x i32> %x3) {152; SSE-LABEL: reassociate_xor_v8i32:153; SSE:       # %bb.0:154; SSE-NEXT:    paddd %xmm2, %xmm0155; SSE-NEXT:    pxor %xmm6, %xmm4156; SSE-NEXT:    pxor %xmm4, %xmm0157; SSE-NEXT:    paddd %xmm3, %xmm1158; SSE-NEXT:    pxor %xmm7, %xmm5159; SSE-NEXT:    pxor %xmm5, %xmm1160; SSE-NEXT:    retq161;162; AVX2-LABEL: reassociate_xor_v8i32:163; AVX2:       # %bb.0:164; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0165; AVX2-NEXT:    vpxor %ymm2, %ymm3, %ymm1166; AVX2-NEXT:    vpxor %ymm0, %ymm1, %ymm0167; AVX2-NEXT:    retq168;169; AVX512-LABEL: reassociate_xor_v8i32:170; AVX512:       # %bb.0:171; AVX512-NEXT:    vpaddd %ymm1, %ymm0, %ymm0172; AVX512-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 ^ ymm3 ^ ymm2173; AVX512-NEXT:    retq174 175  %t0 = add <8 x i32> %x0, %x1176  %t1 = xor <8 x i32> %x2, %t0177  %t2 = xor <8 x i32> %x3, %t1178  ret <8 x i32> %t2179}180 181 182; Verify that 512-bit vector logical ops are reassociated.183 184define <16 x i32> @reassociate_and_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, <16 x i32> %x3) {185; SSE-LABEL: reassociate_and_v16i32:186; SSE:       # %bb.0:187; SSE-NEXT:    paddd %xmm4, %xmm0188; SSE-NEXT:    paddd %xmm5, %xmm1189; SSE-NEXT:    paddd %xmm6, %xmm2190; SSE-NEXT:    paddd %xmm7, %xmm3191; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm3192; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm2193; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm1194; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm0195; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm0196; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm1197; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm2198; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm3199; SSE-NEXT:    retq200;201; AVX2-LABEL: reassociate_and_v16i32:202; AVX2:       # %bb.0:203; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm0204; AVX2-NEXT:    vpand %ymm4, %ymm6, %ymm2205; AVX2-NEXT:    vpand %ymm0, %ymm2, %ymm0206; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm1207; AVX2-NEXT:    vpand %ymm5, %ymm7, %ymm2208; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm1209; AVX2-NEXT:    retq210;211; AVX512-LABEL: reassociate_and_v16i32:212; AVX512:       # %bb.0:213; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm0214; AVX512-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 & zmm3 & zmm2215; AVX512-NEXT:    retq216 217  %t0 = add <16 x i32> %x0, %x1218  %t1 = and <16 x i32> %x2, %t0219  %t2 = and <16 x i32> %x3, %t1220  ret <16 x i32> %t2221}222 223define <16 x i32> @reassociate_or_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, <16 x i32> %x3) {224; SSE-LABEL: reassociate_or_v16i32:225; SSE:       # %bb.0:226; SSE-NEXT:    paddd %xmm4, %xmm0227; SSE-NEXT:    paddd %xmm5, %xmm1228; SSE-NEXT:    paddd %xmm6, %xmm2229; SSE-NEXT:    paddd %xmm7, %xmm3230; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm3231; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm2232; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm1233; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm0234; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm0235; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm1236; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm2237; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm3238; SSE-NEXT:    retq239;240; AVX2-LABEL: reassociate_or_v16i32:241; AVX2:       # %bb.0:242; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm0243; AVX2-NEXT:    vpor %ymm4, %ymm6, %ymm2244; AVX2-NEXT:    vpor %ymm0, %ymm2, %ymm0245; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm1246; AVX2-NEXT:    vpor %ymm5, %ymm7, %ymm2247; AVX2-NEXT:    vpor %ymm1, %ymm2, %ymm1248; AVX2-NEXT:    retq249;250; AVX512-LABEL: reassociate_or_v16i32:251; AVX512:       # %bb.0:252; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm0253; AVX512-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 | zmm3 | zmm2254; AVX512-NEXT:    retq255 256  %t0 = add <16 x i32> %x0, %x1257  %t1 = or <16 x i32> %x2, %t0258  %t2 = or <16 x i32> %x3, %t1259  ret <16 x i32> %t2260}261 262define <16 x i32> @reassociate_xor_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, <16 x i32> %x3) {263; SSE-LABEL: reassociate_xor_v16i32:264; SSE:       # %bb.0:265; SSE-NEXT:    paddd %xmm4, %xmm0266; SSE-NEXT:    paddd %xmm5, %xmm1267; SSE-NEXT:    paddd %xmm6, %xmm2268; SSE-NEXT:    paddd %xmm7, %xmm3269; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm3270; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm2271; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm1272; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm0273; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm0274; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm1275; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm2276; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm3277; SSE-NEXT:    retq278;279; AVX2-LABEL: reassociate_xor_v16i32:280; AVX2:       # %bb.0:281; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm0282; AVX2-NEXT:    vpxor %ymm4, %ymm6, %ymm2283; AVX2-NEXT:    vpxor %ymm0, %ymm2, %ymm0284; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm1285; AVX2-NEXT:    vpxor %ymm5, %ymm7, %ymm2286; AVX2-NEXT:    vpxor %ymm1, %ymm2, %ymm1287; AVX2-NEXT:    retq288;289; AVX512-LABEL: reassociate_xor_v16i32:290; AVX512:       # %bb.0:291; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm0292; AVX512-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ zmm3 ^ zmm2293; AVX512-NEXT:    retq294 295  %t0 = add <16 x i32> %x0, %x1296  %t1 = xor <16 x i32> %x2, %t0297  %t2 = xor <16 x i32> %x3, %t1298  ret <16 x i32> %t2299}300 301; Verify that 128-bit vector min/max are reassociated.302 303define <16 x i8> @reassociate_umax_v16i8(<16 x i8> %x0, <16 x i8> %x1, <16 x i8> %x2, <16 x i8> %x3) {304; SSE-LABEL: reassociate_umax_v16i8:305; SSE:       # %bb.0:306; SSE-NEXT:    paddb %xmm1, %xmm0307; SSE-NEXT:    pmaxub %xmm3, %xmm2308; SSE-NEXT:    pmaxub %xmm2, %xmm0309; SSE-NEXT:    retq310;311; AVX-LABEL: reassociate_umax_v16i8:312; AVX:       # %bb.0:313; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0314; AVX-NEXT:    vpmaxub %xmm2, %xmm3, %xmm1315; AVX-NEXT:    vpmaxub %xmm0, %xmm1, %xmm0316; AVX-NEXT:    retq317 318  %t0 = add <16 x i8> %x0, %x1319  %t1 = icmp ugt <16 x i8> %x2, %t0320  %t2 = select <16 x i1> %t1, <16 x i8> %x2, <16 x i8> %t0321  %t3 = icmp ugt <16 x i8> %x3, %t2322  %t4 = select <16 x i1> %t3, <16 x i8> %x3, <16 x i8> %t2323  ret <16 x i8> %t4324}325 326define <8 x i16> @reassociate_umax_v8i16(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x2, <8 x i16> %x3) {327; SSE-LABEL: reassociate_umax_v8i16:328; SSE:       # %bb.0:329; SSE-NEXT:    paddw %xmm1, %xmm0330; SSE-NEXT:    psubusw %xmm2, %xmm0331; SSE-NEXT:    paddw %xmm2, %xmm0332; SSE-NEXT:    psubusw %xmm3, %xmm0333; SSE-NEXT:    paddw %xmm3, %xmm0334; SSE-NEXT:    retq335;336; AVX-LABEL: reassociate_umax_v8i16:337; AVX:       # %bb.0:338; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0339; AVX-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm1340; AVX-NEXT:    vpmaxuw %xmm0, %xmm1, %xmm0341; AVX-NEXT:    retq342 343  %t0 = add <8 x i16> %x0, %x1344  %t1 = icmp ugt <8 x i16> %x2, %t0345  %t2 = select <8 x i1> %t1, <8 x i16> %x2, <8 x i16> %t0346  %t3 = icmp ugt <8 x i16> %x3, %t2347  %t4 = select <8 x i1> %t3, <8 x i16> %x3, <8 x i16> %t2348  ret <8 x i16> %t4349}350 351define <4 x i32> @reassociate_umax_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x2, <4 x i32> %x3) {352; SSE-LABEL: reassociate_umax_v4i32:353; SSE:       # %bb.0:354; SSE-NEXT:    paddd %xmm1, %xmm0355; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]356; SSE-NEXT:    movdqa %xmm2, %xmm4357; SSE-NEXT:    pxor %xmm1, %xmm4358; SSE-NEXT:    movdqa %xmm0, %xmm5359; SSE-NEXT:    pxor %xmm1, %xmm5360; SSE-NEXT:    pcmpgtd %xmm5, %xmm4361; SSE-NEXT:    pand %xmm4, %xmm2362; SSE-NEXT:    pandn %xmm0, %xmm4363; SSE-NEXT:    por %xmm2, %xmm4364; SSE-NEXT:    movdqa %xmm4, %xmm0365; SSE-NEXT:    pxor %xmm1, %xmm0366; SSE-NEXT:    pxor %xmm3, %xmm1367; SSE-NEXT:    pcmpgtd %xmm0, %xmm1368; SSE-NEXT:    pand %xmm1, %xmm3369; SSE-NEXT:    pandn %xmm4, %xmm1370; SSE-NEXT:    por %xmm3, %xmm1371; SSE-NEXT:    movdqa %xmm1, %xmm0372; SSE-NEXT:    retq373;374; AVX-LABEL: reassociate_umax_v4i32:375; AVX:       # %bb.0:376; AVX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0377; AVX-NEXT:    vpmaxud %xmm2, %xmm3, %xmm1378; AVX-NEXT:    vpmaxud %xmm0, %xmm1, %xmm0379; AVX-NEXT:    retq380 381  %t0 = add <4 x i32> %x0, %x1382  %t1 = icmp ugt <4 x i32> %x2, %t0383  %t2 = select <4 x i1> %t1, <4 x i32> %x2, <4 x i32> %t0384  %t3 = icmp ugt <4 x i32> %x3, %t2385  %t4 = select <4 x i1> %t3, <4 x i32> %x3, <4 x i32> %t2386  ret <4 x i32> %t4387}388 389define <2 x i64> @reassociate_umax_v2i64(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x2, <2 x i64> %x3) {390; SSE-LABEL: reassociate_umax_v2i64:391; SSE:       # %bb.0:392; SSE-NEXT:    paddq %xmm1, %xmm0393; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]394; SSE-NEXT:    movdqa %xmm2, %xmm4395; SSE-NEXT:    pxor %xmm1, %xmm4396; SSE-NEXT:    movdqa %xmm0, %xmm5397; SSE-NEXT:    pxor %xmm1, %xmm5398; SSE-NEXT:    movdqa %xmm4, %xmm6399; SSE-NEXT:    pcmpgtd %xmm5, %xmm6400; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]401; SSE-NEXT:    pcmpeqd %xmm4, %xmm5402; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]403; SSE-NEXT:    pand %xmm7, %xmm4404; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]405; SSE-NEXT:    por %xmm4, %xmm5406; SSE-NEXT:    pand %xmm5, %xmm2407; SSE-NEXT:    pandn %xmm0, %xmm5408; SSE-NEXT:    por %xmm2, %xmm5409; SSE-NEXT:    movdqa %xmm5, %xmm0410; SSE-NEXT:    pxor %xmm1, %xmm0411; SSE-NEXT:    pxor %xmm3, %xmm1412; SSE-NEXT:    movdqa %xmm1, %xmm2413; SSE-NEXT:    pcmpgtd %xmm0, %xmm2414; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]415; SSE-NEXT:    pcmpeqd %xmm0, %xmm1416; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]417; SSE-NEXT:    pand %xmm4, %xmm1418; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]419; SSE-NEXT:    por %xmm1, %xmm0420; SSE-NEXT:    pand %xmm0, %xmm3421; SSE-NEXT:    pandn %xmm5, %xmm0422; SSE-NEXT:    por %xmm3, %xmm0423; SSE-NEXT:    retq424;425; AVX2-LABEL: reassociate_umax_v2i64:426; AVX2:       # %bb.0:427; AVX2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0428; AVX2-NEXT:    vmovdqa {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]429; AVX2-NEXT:    vpxor %xmm1, %xmm2, %xmm4430; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm5431; AVX2-NEXT:    vpcmpgtq %xmm5, %xmm4, %xmm4432; AVX2-NEXT:    vblendvpd %xmm4, %xmm2, %xmm0, %xmm0433; AVX2-NEXT:    vxorpd %xmm1, %xmm0, %xmm2434; AVX2-NEXT:    vpxor %xmm1, %xmm3, %xmm1435; AVX2-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm1436; AVX2-NEXT:    vblendvpd %xmm1, %xmm3, %xmm0, %xmm0437; AVX2-NEXT:    retq438;439; AVX512-LABEL: reassociate_umax_v2i64:440; AVX512:       # %bb.0:441; AVX512-NEXT:    vpaddq %xmm1, %xmm0, %xmm0442; AVX512-NEXT:    vpmaxuq %xmm2, %xmm3, %xmm1443; AVX512-NEXT:    vpmaxuq %xmm0, %xmm1, %xmm0444; AVX512-NEXT:    retq445 446  %t0 = add <2 x i64> %x0, %x1447  %t1 = icmp ugt <2 x i64> %x2, %t0448  %t2 = select <2 x i1> %t1, <2 x i64> %x2, <2 x i64> %t0449  %t3 = icmp ugt <2 x i64> %x3, %t2450  %t4 = select <2 x i1> %t3, <2 x i64> %x3, <2 x i64> %t2451  ret <2 x i64> %t4452}453 454define <16 x i8> @reassociate_smax_v16i8(<16 x i8> %x0, <16 x i8> %x1, <16 x i8> %x2, <16 x i8> %x3) {455; SSE-LABEL: reassociate_smax_v16i8:456; SSE:       # %bb.0:457; SSE-NEXT:    paddb %xmm1, %xmm0458; SSE-NEXT:    movdqa %xmm2, %xmm1459; SSE-NEXT:    pcmpgtb %xmm0, %xmm1460; SSE-NEXT:    pand %xmm1, %xmm2461; SSE-NEXT:    pandn %xmm0, %xmm1462; SSE-NEXT:    por %xmm2, %xmm1463; SSE-NEXT:    movdqa %xmm3, %xmm0464; SSE-NEXT:    pcmpgtb %xmm1, %xmm0465; SSE-NEXT:    pand %xmm0, %xmm3466; SSE-NEXT:    pandn %xmm1, %xmm0467; SSE-NEXT:    por %xmm3, %xmm0468; SSE-NEXT:    retq469;470; AVX-LABEL: reassociate_smax_v16i8:471; AVX:       # %bb.0:472; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0473; AVX-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm1474; AVX-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm0475; AVX-NEXT:    retq476 477  %t0 = add <16 x i8> %x0, %x1478  %t1 = icmp sgt <16 x i8> %x2, %t0479  %t2 = select <16 x i1> %t1, <16 x i8> %x2, <16 x i8> %t0480  %t3 = icmp sgt <16 x i8> %x3, %t2481  %t4 = select <16 x i1> %t3, <16 x i8> %x3, <16 x i8> %t2482  ret <16 x i8> %t4483}484 485define <8 x i16> @reassociate_smax_v8i16(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x2, <8 x i16> %x3) {486; SSE-LABEL: reassociate_smax_v8i16:487; SSE:       # %bb.0:488; SSE-NEXT:    paddw %xmm1, %xmm0489; SSE-NEXT:    pmaxsw %xmm3, %xmm2490; SSE-NEXT:    pmaxsw %xmm2, %xmm0491; SSE-NEXT:    retq492;493; AVX-LABEL: reassociate_smax_v8i16:494; AVX:       # %bb.0:495; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0496; AVX-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm1497; AVX-NEXT:    vpmaxsw %xmm0, %xmm1, %xmm0498; AVX-NEXT:    retq499 500  %t0 = add <8 x i16> %x0, %x1501  %t1 = icmp sgt <8 x i16> %x2, %t0502  %t2 = select <8 x i1> %t1, <8 x i16> %x2, <8 x i16> %t0503  %t3 = icmp sgt <8 x i16> %x3, %t2504  %t4 = select <8 x i1> %t3, <8 x i16> %x3, <8 x i16> %t2505  ret <8 x i16> %t4506}507 508define <4 x i32> @reassociate_smax_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x2, <4 x i32> %x3) {509; SSE-LABEL: reassociate_smax_v4i32:510; SSE:       # %bb.0:511; SSE-NEXT:    paddd %xmm1, %xmm0512; SSE-NEXT:    movdqa %xmm2, %xmm1513; SSE-NEXT:    pcmpgtd %xmm0, %xmm1514; SSE-NEXT:    pand %xmm1, %xmm2515; SSE-NEXT:    pandn %xmm0, %xmm1516; SSE-NEXT:    por %xmm2, %xmm1517; SSE-NEXT:    movdqa %xmm3, %xmm0518; SSE-NEXT:    pcmpgtd %xmm1, %xmm0519; SSE-NEXT:    pand %xmm0, %xmm3520; SSE-NEXT:    pandn %xmm1, %xmm0521; SSE-NEXT:    por %xmm3, %xmm0522; SSE-NEXT:    retq523;524; AVX-LABEL: reassociate_smax_v4i32:525; AVX:       # %bb.0:526; AVX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0527; AVX-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm1528; AVX-NEXT:    vpmaxsd %xmm0, %xmm1, %xmm0529; AVX-NEXT:    retq530 531  %t0 = add <4 x i32> %x0, %x1532  %t1 = icmp sgt <4 x i32> %x2, %t0533  %t2 = select <4 x i1> %t1, <4 x i32> %x2, <4 x i32> %t0534  %t3 = icmp sgt <4 x i32> %x3, %t2535  %t4 = select <4 x i1> %t3, <4 x i32> %x3, <4 x i32> %t2536  ret <4 x i32> %t4537}538 539define <2 x i64> @reassociate_smax_v2i64(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x2, <2 x i64> %x3) {540; SSE-LABEL: reassociate_smax_v2i64:541; SSE:       # %bb.0:542; SSE-NEXT:    paddq %xmm1, %xmm0543; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648]544; SSE-NEXT:    movdqa %xmm2, %xmm4545; SSE-NEXT:    pxor %xmm1, %xmm4546; SSE-NEXT:    movdqa %xmm0, %xmm5547; SSE-NEXT:    pxor %xmm1, %xmm5548; SSE-NEXT:    movdqa %xmm4, %xmm6549; SSE-NEXT:    pcmpgtd %xmm5, %xmm6550; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]551; SSE-NEXT:    pcmpeqd %xmm4, %xmm5552; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]553; SSE-NEXT:    pand %xmm7, %xmm4554; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]555; SSE-NEXT:    por %xmm4, %xmm5556; SSE-NEXT:    pand %xmm5, %xmm2557; SSE-NEXT:    pandn %xmm0, %xmm5558; SSE-NEXT:    por %xmm2, %xmm5559; SSE-NEXT:    movdqa %xmm5, %xmm0560; SSE-NEXT:    pxor %xmm1, %xmm0561; SSE-NEXT:    pxor %xmm3, %xmm1562; SSE-NEXT:    movdqa %xmm1, %xmm2563; SSE-NEXT:    pcmpgtd %xmm0, %xmm2564; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]565; SSE-NEXT:    pcmpeqd %xmm0, %xmm1566; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]567; SSE-NEXT:    pand %xmm4, %xmm1568; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]569; SSE-NEXT:    por %xmm1, %xmm0570; SSE-NEXT:    pand %xmm0, %xmm3571; SSE-NEXT:    pandn %xmm5, %xmm0572; SSE-NEXT:    por %xmm3, %xmm0573; SSE-NEXT:    retq574;575; AVX2-LABEL: reassociate_smax_v2i64:576; AVX2:       # %bb.0:577; AVX2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0578; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm1579; AVX2-NEXT:    vblendvpd %xmm1, %xmm2, %xmm0, %xmm0580; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm1581; AVX2-NEXT:    vblendvpd %xmm1, %xmm3, %xmm0, %xmm0582; AVX2-NEXT:    retq583;584; AVX512-LABEL: reassociate_smax_v2i64:585; AVX512:       # %bb.0:586; AVX512-NEXT:    vpaddq %xmm1, %xmm0, %xmm0587; AVX512-NEXT:    vpmaxsq %xmm2, %xmm3, %xmm1588; AVX512-NEXT:    vpmaxsq %xmm0, %xmm1, %xmm0589; AVX512-NEXT:    retq590 591  %t0 = add <2 x i64> %x0, %x1592  %t1 = icmp sgt <2 x i64> %x2, %t0593  %t2 = select <2 x i1> %t1, <2 x i64> %x2, <2 x i64> %t0594  %t3 = icmp sgt <2 x i64> %x3, %t2595  %t4 = select <2 x i1> %t3, <2 x i64> %x3, <2 x i64> %t2596  ret <2 x i64> %t4597}598 599define <16 x i8> @reassociate_umin_v16i8(<16 x i8> %x0, <16 x i8> %x1, <16 x i8> %x2, <16 x i8> %x3) {600; SSE-LABEL: reassociate_umin_v16i8:601; SSE:       # %bb.0:602; SSE-NEXT:    paddb %xmm1, %xmm0603; SSE-NEXT:    pminub %xmm3, %xmm2604; SSE-NEXT:    pminub %xmm2, %xmm0605; SSE-NEXT:    retq606;607; AVX-LABEL: reassociate_umin_v16i8:608; AVX:       # %bb.0:609; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0610; AVX-NEXT:    vpminub %xmm2, %xmm3, %xmm1611; AVX-NEXT:    vpminub %xmm0, %xmm1, %xmm0612; AVX-NEXT:    retq613 614  %t0 = add <16 x i8> %x0, %x1615  %t1 = icmp ult <16 x i8> %x2, %t0616  %t2 = select <16 x i1> %t1, <16 x i8> %x2, <16 x i8> %t0617  %t3 = icmp ult <16 x i8> %x3, %t2618  %t4 = select <16 x i1> %t3, <16 x i8> %x3, <16 x i8> %t2619  ret <16 x i8> %t4620}621 622define <8 x i16> @reassociate_umin_v8i16(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x2, <8 x i16> %x3) {623; SSE-LABEL: reassociate_umin_v8i16:624; SSE:       # %bb.0:625; SSE-NEXT:    paddw %xmm1, %xmm0626; SSE-NEXT:    movdqa %xmm2, %xmm1627; SSE-NEXT:    psubusw %xmm0, %xmm1628; SSE-NEXT:    psubw %xmm1, %xmm2629; SSE-NEXT:    movdqa %xmm3, %xmm0630; SSE-NEXT:    psubusw %xmm2, %xmm0631; SSE-NEXT:    psubw %xmm0, %xmm3632; SSE-NEXT:    movdqa %xmm3, %xmm0633; SSE-NEXT:    retq634;635; AVX-LABEL: reassociate_umin_v8i16:636; AVX:       # %bb.0:637; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0638; AVX-NEXT:    vpminuw %xmm2, %xmm3, %xmm1639; AVX-NEXT:    vpminuw %xmm0, %xmm1, %xmm0640; AVX-NEXT:    retq641 642  %t0 = add <8 x i16> %x0, %x1643  %t1 = icmp ult <8 x i16> %x2, %t0644  %t2 = select <8 x i1> %t1, <8 x i16> %x2, <8 x i16> %t0645  %t3 = icmp ult <8 x i16> %x3, %t2646  %t4 = select <8 x i1> %t3, <8 x i16> %x3, <8 x i16> %t2647  ret <8 x i16> %t4648}649 650define <4 x i32> @reassociate_umin_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x2, <4 x i32> %x3) {651; SSE-LABEL: reassociate_umin_v4i32:652; SSE:       # %bb.0:653; SSE-NEXT:    paddd %xmm1, %xmm0654; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]655; SSE-NEXT:    movdqa %xmm2, %xmm4656; SSE-NEXT:    pxor %xmm1, %xmm4657; SSE-NEXT:    movdqa %xmm0, %xmm5658; SSE-NEXT:    pxor %xmm1, %xmm5659; SSE-NEXT:    pcmpgtd %xmm4, %xmm5660; SSE-NEXT:    pand %xmm5, %xmm2661; SSE-NEXT:    pandn %xmm0, %xmm5662; SSE-NEXT:    por %xmm2, %xmm5663; SSE-NEXT:    movdqa %xmm5, %xmm0664; SSE-NEXT:    pxor %xmm1, %xmm0665; SSE-NEXT:    pxor %xmm3, %xmm1666; SSE-NEXT:    pcmpgtd %xmm1, %xmm0667; SSE-NEXT:    pand %xmm0, %xmm3668; SSE-NEXT:    pandn %xmm5, %xmm0669; SSE-NEXT:    por %xmm3, %xmm0670; SSE-NEXT:    retq671;672; AVX-LABEL: reassociate_umin_v4i32:673; AVX:       # %bb.0:674; AVX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0675; AVX-NEXT:    vpminud %xmm2, %xmm3, %xmm1676; AVX-NEXT:    vpminud %xmm0, %xmm1, %xmm0677; AVX-NEXT:    retq678 679  %t0 = add <4 x i32> %x0, %x1680  %t1 = icmp ult <4 x i32> %x2, %t0681  %t2 = select <4 x i1> %t1, <4 x i32> %x2, <4 x i32> %t0682  %t3 = icmp ult <4 x i32> %x3, %t2683  %t4 = select <4 x i1> %t3, <4 x i32> %x3, <4 x i32> %t2684  ret <4 x i32> %t4685}686 687define <2 x i64> @reassociate_umin_v2i64(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x2, <2 x i64> %x3) {688; SSE-LABEL: reassociate_umin_v2i64:689; SSE:       # %bb.0:690; SSE-NEXT:    paddq %xmm1, %xmm0691; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]692; SSE-NEXT:    movdqa %xmm2, %xmm4693; SSE-NEXT:    pxor %xmm1, %xmm4694; SSE-NEXT:    movdqa %xmm0, %xmm5695; SSE-NEXT:    pxor %xmm1, %xmm5696; SSE-NEXT:    movdqa %xmm5, %xmm6697; SSE-NEXT:    pcmpgtd %xmm4, %xmm6698; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]699; SSE-NEXT:    pcmpeqd %xmm4, %xmm5700; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]701; SSE-NEXT:    pand %xmm7, %xmm4702; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]703; SSE-NEXT:    por %xmm4, %xmm5704; SSE-NEXT:    pand %xmm5, %xmm2705; SSE-NEXT:    pandn %xmm0, %xmm5706; SSE-NEXT:    por %xmm2, %xmm5707; SSE-NEXT:    movdqa %xmm5, %xmm0708; SSE-NEXT:    pxor %xmm1, %xmm0709; SSE-NEXT:    pxor %xmm3, %xmm1710; SSE-NEXT:    movdqa %xmm0, %xmm2711; SSE-NEXT:    pcmpgtd %xmm1, %xmm2712; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]713; SSE-NEXT:    pcmpeqd %xmm0, %xmm1714; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]715; SSE-NEXT:    pand %xmm4, %xmm1716; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]717; SSE-NEXT:    por %xmm1, %xmm0718; SSE-NEXT:    pand %xmm0, %xmm3719; SSE-NEXT:    pandn %xmm5, %xmm0720; SSE-NEXT:    por %xmm3, %xmm0721; SSE-NEXT:    retq722;723; AVX2-LABEL: reassociate_umin_v2i64:724; AVX2:       # %bb.0:725; AVX2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0726; AVX2-NEXT:    vmovdqa {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]727; AVX2-NEXT:    vpxor %xmm1, %xmm2, %xmm4728; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm5729; AVX2-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4730; AVX2-NEXT:    vblendvpd %xmm4, %xmm2, %xmm0, %xmm0731; AVX2-NEXT:    vxorpd %xmm1, %xmm0, %xmm2732; AVX2-NEXT:    vpxor %xmm1, %xmm3, %xmm1733; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm1734; AVX2-NEXT:    vblendvpd %xmm1, %xmm3, %xmm0, %xmm0735; AVX2-NEXT:    retq736;737; AVX512-LABEL: reassociate_umin_v2i64:738; AVX512:       # %bb.0:739; AVX512-NEXT:    vpaddq %xmm1, %xmm0, %xmm0740; AVX512-NEXT:    vpminuq %xmm2, %xmm3, %xmm1741; AVX512-NEXT:    vpminuq %xmm0, %xmm1, %xmm0742; AVX512-NEXT:    retq743 744  %t0 = add <2 x i64> %x0, %x1745  %t1 = icmp ult <2 x i64> %x2, %t0746  %t2 = select <2 x i1> %t1, <2 x i64> %x2, <2 x i64> %t0747  %t3 = icmp ult <2 x i64> %x3, %t2748  %t4 = select <2 x i1> %t3, <2 x i64> %x3, <2 x i64> %t2749  ret <2 x i64> %t4750}751 752define <16 x i8> @reassociate_smin_v16i8(<16 x i8> %x0, <16 x i8> %x1, <16 x i8> %x2, <16 x i8> %x3) {753; SSE-LABEL: reassociate_smin_v16i8:754; SSE:       # %bb.0:755; SSE-NEXT:    paddb %xmm1, %xmm0756; SSE-NEXT:    movdqa %xmm0, %xmm1757; SSE-NEXT:    pcmpgtb %xmm2, %xmm1758; SSE-NEXT:    pand %xmm1, %xmm2759; SSE-NEXT:    pandn %xmm0, %xmm1760; SSE-NEXT:    por %xmm2, %xmm1761; SSE-NEXT:    movdqa %xmm1, %xmm0762; SSE-NEXT:    pcmpgtb %xmm3, %xmm0763; SSE-NEXT:    pand %xmm0, %xmm3764; SSE-NEXT:    pandn %xmm1, %xmm0765; SSE-NEXT:    por %xmm3, %xmm0766; SSE-NEXT:    retq767;768; AVX-LABEL: reassociate_smin_v16i8:769; AVX:       # %bb.0:770; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0771; AVX-NEXT:    vpminsb %xmm2, %xmm3, %xmm1772; AVX-NEXT:    vpminsb %xmm0, %xmm1, %xmm0773; AVX-NEXT:    retq774 775  %t0 = add <16 x i8> %x0, %x1776  %t1 = icmp slt <16 x i8> %x2, %t0777  %t2 = select <16 x i1> %t1, <16 x i8> %x2, <16 x i8> %t0778  %t3 = icmp slt <16 x i8> %x3, %t2779  %t4 = select <16 x i1> %t3, <16 x i8> %x3, <16 x i8> %t2780  ret <16 x i8> %t4781}782 783define <8 x i16> @reassociate_smin_v8i16(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x2, <8 x i16> %x3) {784; SSE-LABEL: reassociate_smin_v8i16:785; SSE:       # %bb.0:786; SSE-NEXT:    paddw %xmm1, %xmm0787; SSE-NEXT:    pminsw %xmm3, %xmm2788; SSE-NEXT:    pminsw %xmm2, %xmm0789; SSE-NEXT:    retq790;791; AVX-LABEL: reassociate_smin_v8i16:792; AVX:       # %bb.0:793; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0794; AVX-NEXT:    vpminsw %xmm2, %xmm3, %xmm1795; AVX-NEXT:    vpminsw %xmm0, %xmm1, %xmm0796; AVX-NEXT:    retq797 798  %t0 = add <8 x i16> %x0, %x1799  %t1 = icmp slt <8 x i16> %x2, %t0800  %t2 = select <8 x i1> %t1, <8 x i16> %x2, <8 x i16> %t0801  %t3 = icmp slt <8 x i16> %x3, %t2802  %t4 = select <8 x i1> %t3, <8 x i16> %x3, <8 x i16> %t2803  ret <8 x i16> %t4804}805 806define <4 x i32> @reassociate_smin_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x2, <4 x i32> %x3) {807; SSE-LABEL: reassociate_smin_v4i32:808; SSE:       # %bb.0:809; SSE-NEXT:    paddd %xmm1, %xmm0810; SSE-NEXT:    movdqa %xmm0, %xmm1811; SSE-NEXT:    pcmpgtd %xmm2, %xmm1812; SSE-NEXT:    pand %xmm1, %xmm2813; SSE-NEXT:    pandn %xmm0, %xmm1814; SSE-NEXT:    por %xmm2, %xmm1815; SSE-NEXT:    movdqa %xmm1, %xmm0816; SSE-NEXT:    pcmpgtd %xmm3, %xmm0817; SSE-NEXT:    pand %xmm0, %xmm3818; SSE-NEXT:    pandn %xmm1, %xmm0819; SSE-NEXT:    por %xmm3, %xmm0820; SSE-NEXT:    retq821;822; AVX-LABEL: reassociate_smin_v4i32:823; AVX:       # %bb.0:824; AVX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0825; AVX-NEXT:    vpminsd %xmm2, %xmm3, %xmm1826; AVX-NEXT:    vpminsd %xmm0, %xmm1, %xmm0827; AVX-NEXT:    retq828 829  %t0 = add <4 x i32> %x0, %x1830  %t1 = icmp slt <4 x i32> %x2, %t0831  %t2 = select <4 x i1> %t1, <4 x i32> %x2, <4 x i32> %t0832  %t3 = icmp slt <4 x i32> %x3, %t2833  %t4 = select <4 x i1> %t3, <4 x i32> %x3, <4 x i32> %t2834  ret <4 x i32> %t4835}836 837define <2 x i64> @reassociate_smin_v2i64(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x2, <2 x i64> %x3) {838; SSE-LABEL: reassociate_smin_v2i64:839; SSE:       # %bb.0:840; SSE-NEXT:    paddq %xmm1, %xmm0841; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648]842; SSE-NEXT:    movdqa %xmm2, %xmm4843; SSE-NEXT:    pxor %xmm1, %xmm4844; SSE-NEXT:    movdqa %xmm0, %xmm5845; SSE-NEXT:    pxor %xmm1, %xmm5846; SSE-NEXT:    movdqa %xmm5, %xmm6847; SSE-NEXT:    pcmpgtd %xmm4, %xmm6848; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]849; SSE-NEXT:    pcmpeqd %xmm4, %xmm5850; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]851; SSE-NEXT:    pand %xmm7, %xmm4852; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]853; SSE-NEXT:    por %xmm4, %xmm5854; SSE-NEXT:    pand %xmm5, %xmm2855; SSE-NEXT:    pandn %xmm0, %xmm5856; SSE-NEXT:    por %xmm2, %xmm5857; SSE-NEXT:    movdqa %xmm5, %xmm0858; SSE-NEXT:    pxor %xmm1, %xmm0859; SSE-NEXT:    pxor %xmm3, %xmm1860; SSE-NEXT:    movdqa %xmm0, %xmm2861; SSE-NEXT:    pcmpgtd %xmm1, %xmm2862; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]863; SSE-NEXT:    pcmpeqd %xmm0, %xmm1864; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]865; SSE-NEXT:    pand %xmm4, %xmm1866; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]867; SSE-NEXT:    por %xmm1, %xmm0868; SSE-NEXT:    pand %xmm0, %xmm3869; SSE-NEXT:    pandn %xmm5, %xmm0870; SSE-NEXT:    por %xmm3, %xmm0871; SSE-NEXT:    retq872;873; AVX2-LABEL: reassociate_smin_v2i64:874; AVX2:       # %bb.0:875; AVX2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0876; AVX2-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm1877; AVX2-NEXT:    vblendvpd %xmm1, %xmm2, %xmm0, %xmm0878; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm0, %xmm1879; AVX2-NEXT:    vblendvpd %xmm1, %xmm3, %xmm0, %xmm0880; AVX2-NEXT:    retq881;882; AVX512-LABEL: reassociate_smin_v2i64:883; AVX512:       # %bb.0:884; AVX512-NEXT:    vpaddq %xmm1, %xmm0, %xmm0885; AVX512-NEXT:    vpminsq %xmm2, %xmm3, %xmm1886; AVX512-NEXT:    vpminsq %xmm0, %xmm1, %xmm0887; AVX512-NEXT:    retq888 889  %t0 = add <2 x i64> %x0, %x1890  %t1 = icmp slt <2 x i64> %x2, %t0891  %t2 = select <2 x i1> %t1, <2 x i64> %x2, <2 x i64> %t0892  %t3 = icmp slt <2 x i64> %x3, %t2893  %t4 = select <2 x i1> %t3, <2 x i64> %x3, <2 x i64> %t2894  ret <2 x i64> %t4895}896 897; Verify that 256-bit vector min/max are reassociated.898 899define <32 x i8> @reassociate_umax_v32i8(<32 x i8> %x0, <32 x i8> %x1, <32 x i8> %x2, <32 x i8> %x3) {900; SSE-LABEL: reassociate_umax_v32i8:901; SSE:       # %bb.0:902; SSE-NEXT:    paddb %xmm2, %xmm0903; SSE-NEXT:    paddb %xmm3, %xmm1904; SSE-NEXT:    pmaxub %xmm6, %xmm4905; SSE-NEXT:    pmaxub %xmm4, %xmm0906; SSE-NEXT:    pmaxub %xmm7, %xmm5907; SSE-NEXT:    pmaxub %xmm5, %xmm1908; SSE-NEXT:    retq909;910; AVX-LABEL: reassociate_umax_v32i8:911; AVX:       # %bb.0:912; AVX-NEXT:    vpaddb %ymm1, %ymm0, %ymm0913; AVX-NEXT:    vpmaxub %ymm2, %ymm3, %ymm1914; AVX-NEXT:    vpmaxub %ymm0, %ymm1, %ymm0915; AVX-NEXT:    retq916 917  %t0 = add <32 x i8> %x0, %x1918  %t1 = icmp ugt <32 x i8> %x2, %t0919  %t2 = select <32 x i1> %t1, <32 x i8> %x2, <32 x i8> %t0920  %t3 = icmp ugt <32 x i8> %x3, %t2921  %t4 = select <32 x i1> %t3, <32 x i8> %x3, <32 x i8> %t2922  ret <32 x i8> %t4923}924 925define <16 x i16> @reassociate_umax_v16i16(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x2, <16 x i16> %x3) {926; SSE-LABEL: reassociate_umax_v16i16:927; SSE:       # %bb.0:928; SSE-NEXT:    paddw %xmm2, %xmm0929; SSE-NEXT:    paddw %xmm3, %xmm1930; SSE-NEXT:    psubusw %xmm5, %xmm1931; SSE-NEXT:    paddw %xmm5, %xmm1932; SSE-NEXT:    psubusw %xmm4, %xmm0933; SSE-NEXT:    paddw %xmm4, %xmm0934; SSE-NEXT:    psubusw %xmm6, %xmm0935; SSE-NEXT:    paddw %xmm6, %xmm0936; SSE-NEXT:    psubusw %xmm7, %xmm1937; SSE-NEXT:    paddw %xmm7, %xmm1938; SSE-NEXT:    retq939;940; AVX-LABEL: reassociate_umax_v16i16:941; AVX:       # %bb.0:942; AVX-NEXT:    vpaddw %ymm1, %ymm0, %ymm0943; AVX-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm1944; AVX-NEXT:    vpmaxuw %ymm0, %ymm1, %ymm0945; AVX-NEXT:    retq946 947  %t0 = add <16 x i16> %x0, %x1948  %t1 = icmp ugt <16 x i16> %x2, %t0949  %t2 = select <16 x i1> %t1, <16 x i16> %x2, <16 x i16> %t0950  %t3 = icmp ugt <16 x i16> %x3, %t2951  %t4 = select <16 x i1> %t3, <16 x i16> %x3, <16 x i16> %t2952  ret <16 x i16> %t4953}954 955define <8 x i32> @reassociate_umax_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x2, <8 x i32> %x3) {956; SSE-LABEL: reassociate_umax_v8i32:957; SSE:       # %bb.0:958; SSE-NEXT:    movdqa %xmm1, %xmm8959; SSE-NEXT:    paddd %xmm2, %xmm0960; SSE-NEXT:    paddd %xmm3, %xmm8961; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]962; SSE-NEXT:    movdqa %xmm5, %xmm2963; SSE-NEXT:    pxor %xmm1, %xmm2964; SSE-NEXT:    movdqa %xmm8, %xmm3965; SSE-NEXT:    pxor %xmm1, %xmm3966; SSE-NEXT:    pcmpgtd %xmm3, %xmm2967; SSE-NEXT:    pand %xmm2, %xmm5968; SSE-NEXT:    pandn %xmm8, %xmm2969; SSE-NEXT:    por %xmm5, %xmm2970; SSE-NEXT:    movdqa %xmm4, %xmm3971; SSE-NEXT:    pxor %xmm1, %xmm3972; SSE-NEXT:    movdqa %xmm0, %xmm5973; SSE-NEXT:    pxor %xmm1, %xmm5974; SSE-NEXT:    pcmpgtd %xmm5, %xmm3975; SSE-NEXT:    pand %xmm3, %xmm4976; SSE-NEXT:    pandn %xmm0, %xmm3977; SSE-NEXT:    por %xmm4, %xmm3978; SSE-NEXT:    movdqa %xmm3, %xmm4979; SSE-NEXT:    pxor %xmm1, %xmm4980; SSE-NEXT:    movdqa %xmm6, %xmm0981; SSE-NEXT:    pxor %xmm1, %xmm0982; SSE-NEXT:    pcmpgtd %xmm4, %xmm0983; SSE-NEXT:    pand %xmm0, %xmm6984; SSE-NEXT:    pandn %xmm3, %xmm0985; SSE-NEXT:    por %xmm6, %xmm0986; SSE-NEXT:    movdqa %xmm2, %xmm3987; SSE-NEXT:    pxor %xmm1, %xmm3988; SSE-NEXT:    pxor %xmm7, %xmm1989; SSE-NEXT:    pcmpgtd %xmm3, %xmm1990; SSE-NEXT:    pand %xmm1, %xmm7991; SSE-NEXT:    pandn %xmm2, %xmm1992; SSE-NEXT:    por %xmm7, %xmm1993; SSE-NEXT:    retq994;995; AVX-LABEL: reassociate_umax_v8i32:996; AVX:       # %bb.0:997; AVX-NEXT:    vpaddd %ymm1, %ymm0, %ymm0998; AVX-NEXT:    vpmaxud %ymm2, %ymm3, %ymm1999; AVX-NEXT:    vpmaxud %ymm0, %ymm1, %ymm01000; AVX-NEXT:    retq1001 1002  %t0 = add <8 x i32> %x0, %x11003  %t1 = icmp ugt <8 x i32> %x2, %t01004  %t2 = select <8 x i1> %t1, <8 x i32> %x2, <8 x i32> %t01005  %t3 = icmp ugt <8 x i32> %x3, %t21006  %t4 = select <8 x i1> %t3, <8 x i32> %x3, <8 x i32> %t21007  ret <8 x i32> %t41008}1009 1010define <4 x i64> @reassociate_umax_v4i64(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x2, <4 x i64> %x3) {1011; SSE-LABEL: reassociate_umax_v4i64:1012; SSE:       # %bb.0:1013; SSE-NEXT:    paddq %xmm2, %xmm01014; SSE-NEXT:    paddq %xmm3, %xmm11015; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]1016; SSE-NEXT:    movdqa %xmm5, %xmm31017; SSE-NEXT:    pxor %xmm2, %xmm31018; SSE-NEXT:    movdqa %xmm1, %xmm81019; SSE-NEXT:    pxor %xmm2, %xmm81020; SSE-NEXT:    movdqa %xmm3, %xmm91021; SSE-NEXT:    pcmpgtd %xmm8, %xmm91022; SSE-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]1023; SSE-NEXT:    pcmpeqd %xmm3, %xmm81024; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]1025; SSE-NEXT:    pand %xmm10, %xmm81026; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm9[1,1,3,3]1027; SSE-NEXT:    por %xmm8, %xmm31028; SSE-NEXT:    pand %xmm3, %xmm51029; SSE-NEXT:    pandn %xmm1, %xmm31030; SSE-NEXT:    por %xmm5, %xmm31031; SSE-NEXT:    movdqa %xmm4, %xmm11032; SSE-NEXT:    pxor %xmm2, %xmm11033; SSE-NEXT:    movdqa %xmm0, %xmm51034; SSE-NEXT:    pxor %xmm2, %xmm51035; SSE-NEXT:    movdqa %xmm1, %xmm81036; SSE-NEXT:    pcmpgtd %xmm5, %xmm81037; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]1038; SSE-NEXT:    pcmpeqd %xmm1, %xmm51039; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]1040; SSE-NEXT:    pand %xmm9, %xmm11041; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3]1042; SSE-NEXT:    por %xmm1, %xmm51043; SSE-NEXT:    pand %xmm5, %xmm41044; SSE-NEXT:    pandn %xmm0, %xmm51045; SSE-NEXT:    por %xmm4, %xmm51046; SSE-NEXT:    movdqa %xmm5, %xmm01047; SSE-NEXT:    pxor %xmm2, %xmm01048; SSE-NEXT:    movdqa %xmm6, %xmm11049; SSE-NEXT:    pxor %xmm2, %xmm11050; SSE-NEXT:    movdqa %xmm1, %xmm41051; SSE-NEXT:    pcmpgtd %xmm0, %xmm41052; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm4[0,0,2,2]1053; SSE-NEXT:    pcmpeqd %xmm0, %xmm11054; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1055; SSE-NEXT:    pand %xmm8, %xmm11056; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]1057; SSE-NEXT:    por %xmm1, %xmm01058; SSE-NEXT:    pand %xmm0, %xmm61059; SSE-NEXT:    pandn %xmm5, %xmm01060; SSE-NEXT:    por %xmm6, %xmm01061; SSE-NEXT:    movdqa %xmm3, %xmm11062; SSE-NEXT:    pxor %xmm2, %xmm11063; SSE-NEXT:    pxor %xmm7, %xmm21064; SSE-NEXT:    movdqa %xmm2, %xmm41065; SSE-NEXT:    pcmpgtd %xmm1, %xmm41066; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1067; SSE-NEXT:    pcmpeqd %xmm1, %xmm21068; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1069; SSE-NEXT:    pand %xmm5, %xmm21070; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]1071; SSE-NEXT:    por %xmm2, %xmm11072; SSE-NEXT:    pand %xmm1, %xmm71073; SSE-NEXT:    pandn %xmm3, %xmm11074; SSE-NEXT:    por %xmm7, %xmm11075; SSE-NEXT:    retq1076;1077; AVX2-LABEL: reassociate_umax_v4i64:1078; AVX2:       # %bb.0:1079; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1080; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm01081; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm11082; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm51083; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm1, %ymm11084; AVX2-NEXT:    vblendvpd %ymm1, %ymm2, %ymm0, %ymm01085; AVX2-NEXT:    vxorpd %ymm4, %ymm0, %ymm11086; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm21087; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm2, %ymm11088; AVX2-NEXT:    vblendvpd %ymm1, %ymm3, %ymm0, %ymm01089; AVX2-NEXT:    retq1090;1091; AVX512-LABEL: reassociate_umax_v4i64:1092; AVX512:       # %bb.0:1093; AVX512-NEXT:    vpaddq %ymm1, %ymm0, %ymm01094; AVX512-NEXT:    vpmaxuq %ymm2, %ymm3, %ymm11095; AVX512-NEXT:    vpmaxuq %ymm0, %ymm1, %ymm01096; AVX512-NEXT:    retq1097 1098  %t0 = add <4 x i64> %x0, %x11099  %t1 = icmp ugt <4 x i64> %x2, %t01100  %t2 = select <4 x i1> %t1, <4 x i64> %x2, <4 x i64> %t01101  %t3 = icmp ugt <4 x i64> %x3, %t21102  %t4 = select <4 x i1> %t3, <4 x i64> %x3, <4 x i64> %t21103  ret <4 x i64> %t41104}1105 1106define <32 x i8> @reassociate_smax_v32i8(<32 x i8> %x0, <32 x i8> %x1, <32 x i8> %x2, <32 x i8> %x3) {1107; SSE-LABEL: reassociate_smax_v32i8:1108; SSE:       # %bb.0:1109; SSE-NEXT:    paddb %xmm2, %xmm01110; SSE-NEXT:    paddb %xmm3, %xmm11111; SSE-NEXT:    movdqa %xmm5, %xmm21112; SSE-NEXT:    pcmpgtb %xmm1, %xmm21113; SSE-NEXT:    pand %xmm2, %xmm51114; SSE-NEXT:    pandn %xmm1, %xmm21115; SSE-NEXT:    por %xmm5, %xmm21116; SSE-NEXT:    movdqa %xmm4, %xmm11117; SSE-NEXT:    pcmpgtb %xmm0, %xmm11118; SSE-NEXT:    pand %xmm1, %xmm41119; SSE-NEXT:    pandn %xmm0, %xmm11120; SSE-NEXT:    por %xmm4, %xmm11121; SSE-NEXT:    movdqa %xmm6, %xmm01122; SSE-NEXT:    pcmpgtb %xmm1, %xmm01123; SSE-NEXT:    pand %xmm0, %xmm61124; SSE-NEXT:    pandn %xmm1, %xmm01125; SSE-NEXT:    por %xmm6, %xmm01126; SSE-NEXT:    movdqa %xmm7, %xmm11127; SSE-NEXT:    pcmpgtb %xmm2, %xmm11128; SSE-NEXT:    pand %xmm1, %xmm71129; SSE-NEXT:    pandn %xmm2, %xmm11130; SSE-NEXT:    por %xmm7, %xmm11131; SSE-NEXT:    retq1132;1133; AVX-LABEL: reassociate_smax_v32i8:1134; AVX:       # %bb.0:1135; AVX-NEXT:    vpaddb %ymm1, %ymm0, %ymm01136; AVX-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm11137; AVX-NEXT:    vpmaxsb %ymm0, %ymm1, %ymm01138; AVX-NEXT:    retq1139 1140  %t0 = add <32 x i8> %x0, %x11141  %t1 = icmp sgt <32 x i8> %x2, %t01142  %t2 = select <32 x i1> %t1, <32 x i8> %x2, <32 x i8> %t01143  %t3 = icmp sgt <32 x i8> %x3, %t21144  %t4 = select <32 x i1> %t3, <32 x i8> %x3, <32 x i8> %t21145  ret <32 x i8> %t41146}1147 1148define <16 x i16> @reassociate_smax_v16i16(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x2, <16 x i16> %x3) {1149; SSE-LABEL: reassociate_smax_v16i16:1150; SSE:       # %bb.0:1151; SSE-NEXT:    paddw %xmm2, %xmm01152; SSE-NEXT:    paddw %xmm3, %xmm11153; SSE-NEXT:    pmaxsw %xmm6, %xmm41154; SSE-NEXT:    pmaxsw %xmm4, %xmm01155; SSE-NEXT:    pmaxsw %xmm7, %xmm51156; SSE-NEXT:    pmaxsw %xmm5, %xmm11157; SSE-NEXT:    retq1158;1159; AVX-LABEL: reassociate_smax_v16i16:1160; AVX:       # %bb.0:1161; AVX-NEXT:    vpaddw %ymm1, %ymm0, %ymm01162; AVX-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm11163; AVX-NEXT:    vpmaxsw %ymm0, %ymm1, %ymm01164; AVX-NEXT:    retq1165 1166  %t0 = add <16 x i16> %x0, %x11167  %t1 = icmp sgt <16 x i16> %x2, %t01168  %t2 = select <16 x i1> %t1, <16 x i16> %x2, <16 x i16> %t01169  %t3 = icmp sgt <16 x i16> %x3, %t21170  %t4 = select <16 x i1> %t3, <16 x i16> %x3, <16 x i16> %t21171  ret <16 x i16> %t41172}1173 1174define <8 x i32> @reassociate_smax_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x2, <8 x i32> %x3) {1175; SSE-LABEL: reassociate_smax_v8i32:1176; SSE:       # %bb.0:1177; SSE-NEXT:    paddd %xmm2, %xmm01178; SSE-NEXT:    paddd %xmm3, %xmm11179; SSE-NEXT:    movdqa %xmm5, %xmm21180; SSE-NEXT:    pcmpgtd %xmm1, %xmm21181; SSE-NEXT:    pand %xmm2, %xmm51182; SSE-NEXT:    pandn %xmm1, %xmm21183; SSE-NEXT:    por %xmm5, %xmm21184; SSE-NEXT:    movdqa %xmm4, %xmm11185; SSE-NEXT:    pcmpgtd %xmm0, %xmm11186; SSE-NEXT:    pand %xmm1, %xmm41187; SSE-NEXT:    pandn %xmm0, %xmm11188; SSE-NEXT:    por %xmm4, %xmm11189; SSE-NEXT:    movdqa %xmm6, %xmm01190; SSE-NEXT:    pcmpgtd %xmm1, %xmm01191; SSE-NEXT:    pand %xmm0, %xmm61192; SSE-NEXT:    pandn %xmm1, %xmm01193; SSE-NEXT:    por %xmm6, %xmm01194; SSE-NEXT:    movdqa %xmm7, %xmm11195; SSE-NEXT:    pcmpgtd %xmm2, %xmm11196; SSE-NEXT:    pand %xmm1, %xmm71197; SSE-NEXT:    pandn %xmm2, %xmm11198; SSE-NEXT:    por %xmm7, %xmm11199; SSE-NEXT:    retq1200;1201; AVX-LABEL: reassociate_smax_v8i32:1202; AVX:       # %bb.0:1203; AVX-NEXT:    vpaddd %ymm1, %ymm0, %ymm01204; AVX-NEXT:    vpmaxsd %ymm2, %ymm3, %ymm11205; AVX-NEXT:    vpmaxsd %ymm0, %ymm1, %ymm01206; AVX-NEXT:    retq1207 1208  %t0 = add <8 x i32> %x0, %x11209  %t1 = icmp sgt <8 x i32> %x2, %t01210  %t2 = select <8 x i1> %t1, <8 x i32> %x2, <8 x i32> %t01211  %t3 = icmp sgt <8 x i32> %x3, %t21212  %t4 = select <8 x i1> %t3, <8 x i32> %x3, <8 x i32> %t21213  ret <8 x i32> %t41214}1215 1216define <4 x i64> @reassociate_smax_v4i64(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x2, <4 x i64> %x3) {1217; SSE-LABEL: reassociate_smax_v4i64:1218; SSE:       # %bb.0:1219; SSE-NEXT:    paddq %xmm2, %xmm01220; SSE-NEXT:    paddq %xmm3, %xmm11221; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]1222; SSE-NEXT:    movdqa %xmm5, %xmm31223; SSE-NEXT:    pxor %xmm2, %xmm31224; SSE-NEXT:    movdqa %xmm1, %xmm81225; SSE-NEXT:    pxor %xmm2, %xmm81226; SSE-NEXT:    movdqa %xmm3, %xmm91227; SSE-NEXT:    pcmpgtd %xmm8, %xmm91228; SSE-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]1229; SSE-NEXT:    pcmpeqd %xmm3, %xmm81230; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]1231; SSE-NEXT:    pand %xmm10, %xmm81232; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm9[1,1,3,3]1233; SSE-NEXT:    por %xmm8, %xmm31234; SSE-NEXT:    pand %xmm3, %xmm51235; SSE-NEXT:    pandn %xmm1, %xmm31236; SSE-NEXT:    por %xmm5, %xmm31237; SSE-NEXT:    movdqa %xmm4, %xmm11238; SSE-NEXT:    pxor %xmm2, %xmm11239; SSE-NEXT:    movdqa %xmm0, %xmm51240; SSE-NEXT:    pxor %xmm2, %xmm51241; SSE-NEXT:    movdqa %xmm1, %xmm81242; SSE-NEXT:    pcmpgtd %xmm5, %xmm81243; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]1244; SSE-NEXT:    pcmpeqd %xmm1, %xmm51245; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]1246; SSE-NEXT:    pand %xmm9, %xmm11247; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3]1248; SSE-NEXT:    por %xmm1, %xmm51249; SSE-NEXT:    pand %xmm5, %xmm41250; SSE-NEXT:    pandn %xmm0, %xmm51251; SSE-NEXT:    por %xmm4, %xmm51252; SSE-NEXT:    movdqa %xmm5, %xmm01253; SSE-NEXT:    pxor %xmm2, %xmm01254; SSE-NEXT:    movdqa %xmm6, %xmm11255; SSE-NEXT:    pxor %xmm2, %xmm11256; SSE-NEXT:    movdqa %xmm1, %xmm41257; SSE-NEXT:    pcmpgtd %xmm0, %xmm41258; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm4[0,0,2,2]1259; SSE-NEXT:    pcmpeqd %xmm0, %xmm11260; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1261; SSE-NEXT:    pand %xmm8, %xmm11262; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]1263; SSE-NEXT:    por %xmm1, %xmm01264; SSE-NEXT:    pand %xmm0, %xmm61265; SSE-NEXT:    pandn %xmm5, %xmm01266; SSE-NEXT:    por %xmm6, %xmm01267; SSE-NEXT:    movdqa %xmm3, %xmm11268; SSE-NEXT:    pxor %xmm2, %xmm11269; SSE-NEXT:    pxor %xmm7, %xmm21270; SSE-NEXT:    movdqa %xmm2, %xmm41271; SSE-NEXT:    pcmpgtd %xmm1, %xmm41272; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1273; SSE-NEXT:    pcmpeqd %xmm1, %xmm21274; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1275; SSE-NEXT:    pand %xmm5, %xmm21276; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]1277; SSE-NEXT:    por %xmm2, %xmm11278; SSE-NEXT:    pand %xmm1, %xmm71279; SSE-NEXT:    pandn %xmm3, %xmm11280; SSE-NEXT:    por %xmm7, %xmm11281; SSE-NEXT:    retq1282;1283; AVX2-LABEL: reassociate_smax_v4i64:1284; AVX2:       # %bb.0:1285; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm01286; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm11287; AVX2-NEXT:    vblendvpd %ymm1, %ymm2, %ymm0, %ymm01288; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm3, %ymm11289; AVX2-NEXT:    vblendvpd %ymm1, %ymm3, %ymm0, %ymm01290; AVX2-NEXT:    retq1291;1292; AVX512-LABEL: reassociate_smax_v4i64:1293; AVX512:       # %bb.0:1294; AVX512-NEXT:    vpaddq %ymm1, %ymm0, %ymm01295; AVX512-NEXT:    vpmaxsq %ymm2, %ymm3, %ymm11296; AVX512-NEXT:    vpmaxsq %ymm0, %ymm1, %ymm01297; AVX512-NEXT:    retq1298 1299  %t0 = add <4 x i64> %x0, %x11300  %t1 = icmp sgt <4 x i64> %x2, %t01301  %t2 = select <4 x i1> %t1, <4 x i64> %x2, <4 x i64> %t01302  %t3 = icmp sgt <4 x i64> %x3, %t21303  %t4 = select <4 x i1> %t3, <4 x i64> %x3, <4 x i64> %t21304  ret <4 x i64> %t41305}1306 1307define <32 x i8> @reassociate_umin_v32i8(<32 x i8> %x0, <32 x i8> %x1, <32 x i8> %x2, <32 x i8> %x3) {1308; SSE-LABEL: reassociate_umin_v32i8:1309; SSE:       # %bb.0:1310; SSE-NEXT:    paddb %xmm2, %xmm01311; SSE-NEXT:    paddb %xmm3, %xmm11312; SSE-NEXT:    pminub %xmm6, %xmm41313; SSE-NEXT:    pminub %xmm4, %xmm01314; SSE-NEXT:    pminub %xmm7, %xmm51315; SSE-NEXT:    pminub %xmm5, %xmm11316; SSE-NEXT:    retq1317;1318; AVX-LABEL: reassociate_umin_v32i8:1319; AVX:       # %bb.0:1320; AVX-NEXT:    vpaddb %ymm1, %ymm0, %ymm01321; AVX-NEXT:    vpminub %ymm2, %ymm3, %ymm11322; AVX-NEXT:    vpminub %ymm0, %ymm1, %ymm01323; AVX-NEXT:    retq1324 1325  %t0 = add <32 x i8> %x0, %x11326  %t1 = icmp ult <32 x i8> %x2, %t01327  %t2 = select <32 x i1> %t1, <32 x i8> %x2, <32 x i8> %t01328  %t3 = icmp ult <32 x i8> %x3, %t21329  %t4 = select <32 x i1> %t3, <32 x i8> %x3, <32 x i8> %t21330  ret <32 x i8> %t41331}1332 1333define <16 x i16> @reassociate_umin_v16i16(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x2, <16 x i16> %x3) {1334; SSE-LABEL: reassociate_umin_v16i16:1335; SSE:       # %bb.0:1336; SSE-NEXT:    paddw %xmm2, %xmm01337; SSE-NEXT:    paddw %xmm3, %xmm11338; SSE-NEXT:    movdqa %xmm5, %xmm21339; SSE-NEXT:    psubusw %xmm1, %xmm21340; SSE-NEXT:    psubw %xmm2, %xmm51341; SSE-NEXT:    movdqa %xmm4, %xmm11342; SSE-NEXT:    psubusw %xmm0, %xmm11343; SSE-NEXT:    psubw %xmm1, %xmm41344; SSE-NEXT:    movdqa %xmm6, %xmm01345; SSE-NEXT:    psubusw %xmm4, %xmm01346; SSE-NEXT:    psubw %xmm0, %xmm61347; SSE-NEXT:    movdqa %xmm7, %xmm01348; SSE-NEXT:    psubusw %xmm5, %xmm01349; SSE-NEXT:    psubw %xmm0, %xmm71350; SSE-NEXT:    movdqa %xmm6, %xmm01351; SSE-NEXT:    movdqa %xmm7, %xmm11352; SSE-NEXT:    retq1353;1354; AVX-LABEL: reassociate_umin_v16i16:1355; AVX:       # %bb.0:1356; AVX-NEXT:    vpaddw %ymm1, %ymm0, %ymm01357; AVX-NEXT:    vpminuw %ymm2, %ymm3, %ymm11358; AVX-NEXT:    vpminuw %ymm0, %ymm1, %ymm01359; AVX-NEXT:    retq1360 1361  %t0 = add <16 x i16> %x0, %x11362  %t1 = icmp ult <16 x i16> %x2, %t01363  %t2 = select <16 x i1> %t1, <16 x i16> %x2, <16 x i16> %t01364  %t3 = icmp ult <16 x i16> %x3, %t21365  %t4 = select <16 x i1> %t3, <16 x i16> %x3, <16 x i16> %t21366  ret <16 x i16> %t41367}1368 1369define <8 x i32> @reassociate_umin_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x2, <8 x i32> %x3) {1370; SSE-LABEL: reassociate_umin_v8i32:1371; SSE:       # %bb.0:1372; SSE-NEXT:    paddd %xmm2, %xmm01373; SSE-NEXT:    paddd %xmm3, %xmm11374; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]1375; SSE-NEXT:    movdqa %xmm5, %xmm81376; SSE-NEXT:    pxor %xmm3, %xmm81377; SSE-NEXT:    movdqa %xmm1, %xmm21378; SSE-NEXT:    pxor %xmm3, %xmm21379; SSE-NEXT:    pcmpgtd %xmm8, %xmm21380; SSE-NEXT:    pand %xmm2, %xmm51381; SSE-NEXT:    pandn %xmm1, %xmm21382; SSE-NEXT:    por %xmm5, %xmm21383; SSE-NEXT:    movdqa %xmm4, %xmm11384; SSE-NEXT:    pxor %xmm3, %xmm11385; SSE-NEXT:    movdqa %xmm0, %xmm51386; SSE-NEXT:    pxor %xmm3, %xmm51387; SSE-NEXT:    pcmpgtd %xmm1, %xmm51388; SSE-NEXT:    pand %xmm5, %xmm41389; SSE-NEXT:    pandn %xmm0, %xmm51390; SSE-NEXT:    por %xmm4, %xmm51391; SSE-NEXT:    movdqa %xmm5, %xmm01392; SSE-NEXT:    pxor %xmm3, %xmm01393; SSE-NEXT:    movdqa %xmm6, %xmm11394; SSE-NEXT:    pxor %xmm3, %xmm11395; SSE-NEXT:    pcmpgtd %xmm1, %xmm01396; SSE-NEXT:    pand %xmm0, %xmm61397; SSE-NEXT:    pandn %xmm5, %xmm01398; SSE-NEXT:    por %xmm6, %xmm01399; SSE-NEXT:    movdqa %xmm2, %xmm11400; SSE-NEXT:    pxor %xmm3, %xmm11401; SSE-NEXT:    pxor %xmm7, %xmm31402; SSE-NEXT:    pcmpgtd %xmm3, %xmm11403; SSE-NEXT:    pand %xmm1, %xmm71404; SSE-NEXT:    pandn %xmm2, %xmm11405; SSE-NEXT:    por %xmm7, %xmm11406; SSE-NEXT:    retq1407;1408; AVX-LABEL: reassociate_umin_v8i32:1409; AVX:       # %bb.0:1410; AVX-NEXT:    vpaddd %ymm1, %ymm0, %ymm01411; AVX-NEXT:    vpminud %ymm2, %ymm3, %ymm11412; AVX-NEXT:    vpminud %ymm0, %ymm1, %ymm01413; AVX-NEXT:    retq1414 1415  %t0 = add <8 x i32> %x0, %x11416  %t1 = icmp ult <8 x i32> %x2, %t01417  %t2 = select <8 x i1> %t1, <8 x i32> %x2, <8 x i32> %t01418  %t3 = icmp ult <8 x i32> %x3, %t21419  %t4 = select <8 x i1> %t3, <8 x i32> %x3, <8 x i32> %t21420  ret <8 x i32> %t41421}1422 1423define <4 x i64> @reassociate_umin_v4i64(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x2, <4 x i64> %x3) {1424; SSE-LABEL: reassociate_umin_v4i64:1425; SSE:       # %bb.0:1426; SSE-NEXT:    paddq %xmm2, %xmm01427; SSE-NEXT:    paddq %xmm3, %xmm11428; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]1429; SSE-NEXT:    movdqa %xmm5, %xmm31430; SSE-NEXT:    pxor %xmm2, %xmm31431; SSE-NEXT:    movdqa %xmm1, %xmm81432; SSE-NEXT:    pxor %xmm2, %xmm81433; SSE-NEXT:    movdqa %xmm8, %xmm91434; SSE-NEXT:    pcmpgtd %xmm3, %xmm91435; SSE-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]1436; SSE-NEXT:    pcmpeqd %xmm3, %xmm81437; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]1438; SSE-NEXT:    pand %xmm10, %xmm81439; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm9[1,1,3,3]1440; SSE-NEXT:    por %xmm8, %xmm31441; SSE-NEXT:    pand %xmm3, %xmm51442; SSE-NEXT:    pandn %xmm1, %xmm31443; SSE-NEXT:    por %xmm5, %xmm31444; SSE-NEXT:    movdqa %xmm4, %xmm11445; SSE-NEXT:    pxor %xmm2, %xmm11446; SSE-NEXT:    movdqa %xmm0, %xmm51447; SSE-NEXT:    pxor %xmm2, %xmm51448; SSE-NEXT:    movdqa %xmm5, %xmm81449; SSE-NEXT:    pcmpgtd %xmm1, %xmm81450; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]1451; SSE-NEXT:    pcmpeqd %xmm1, %xmm51452; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]1453; SSE-NEXT:    pand %xmm9, %xmm11454; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3]1455; SSE-NEXT:    por %xmm1, %xmm51456; SSE-NEXT:    pand %xmm5, %xmm41457; SSE-NEXT:    pandn %xmm0, %xmm51458; SSE-NEXT:    por %xmm4, %xmm51459; SSE-NEXT:    movdqa %xmm5, %xmm01460; SSE-NEXT:    pxor %xmm2, %xmm01461; SSE-NEXT:    movdqa %xmm6, %xmm11462; SSE-NEXT:    pxor %xmm2, %xmm11463; SSE-NEXT:    movdqa %xmm0, %xmm41464; SSE-NEXT:    pcmpgtd %xmm1, %xmm41465; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm4[0,0,2,2]1466; SSE-NEXT:    pcmpeqd %xmm0, %xmm11467; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1468; SSE-NEXT:    pand %xmm8, %xmm11469; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]1470; SSE-NEXT:    por %xmm1, %xmm01471; SSE-NEXT:    pand %xmm0, %xmm61472; SSE-NEXT:    pandn %xmm5, %xmm01473; SSE-NEXT:    por %xmm6, %xmm01474; SSE-NEXT:    movdqa %xmm3, %xmm11475; SSE-NEXT:    pxor %xmm2, %xmm11476; SSE-NEXT:    pxor %xmm7, %xmm21477; SSE-NEXT:    movdqa %xmm1, %xmm41478; SSE-NEXT:    pcmpgtd %xmm2, %xmm41479; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1480; SSE-NEXT:    pcmpeqd %xmm1, %xmm21481; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1482; SSE-NEXT:    pand %xmm5, %xmm21483; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]1484; SSE-NEXT:    por %xmm2, %xmm11485; SSE-NEXT:    pand %xmm1, %xmm71486; SSE-NEXT:    pandn %xmm3, %xmm11487; SSE-NEXT:    por %xmm7, %xmm11488; SSE-NEXT:    retq1489;1490; AVX2-LABEL: reassociate_umin_v4i64:1491; AVX2:       # %bb.0:1492; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1493; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm01494; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm11495; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm51496; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm5, %ymm11497; AVX2-NEXT:    vblendvpd %ymm1, %ymm2, %ymm0, %ymm01498; AVX2-NEXT:    vxorpd %ymm4, %ymm0, %ymm11499; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm21500; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm11501; AVX2-NEXT:    vblendvpd %ymm1, %ymm3, %ymm0, %ymm01502; AVX2-NEXT:    retq1503;1504; AVX512-LABEL: reassociate_umin_v4i64:1505; AVX512:       # %bb.0:1506; AVX512-NEXT:    vpaddq %ymm1, %ymm0, %ymm01507; AVX512-NEXT:    vpminuq %ymm2, %ymm3, %ymm11508; AVX512-NEXT:    vpminuq %ymm0, %ymm1, %ymm01509; AVX512-NEXT:    retq1510 1511  %t0 = add <4 x i64> %x0, %x11512  %t1 = icmp ult <4 x i64> %x2, %t01513  %t2 = select <4 x i1> %t1, <4 x i64> %x2, <4 x i64> %t01514  %t3 = icmp ult <4 x i64> %x3, %t21515  %t4 = select <4 x i1> %t3, <4 x i64> %x3, <4 x i64> %t21516  ret <4 x i64> %t41517}1518 1519define <32 x i8> @reassociate_smin_v32i8(<32 x i8> %x0, <32 x i8> %x1, <32 x i8> %x2, <32 x i8> %x3) {1520; SSE-LABEL: reassociate_smin_v32i8:1521; SSE:       # %bb.0:1522; SSE-NEXT:    paddb %xmm2, %xmm01523; SSE-NEXT:    paddb %xmm3, %xmm11524; SSE-NEXT:    movdqa %xmm1, %xmm21525; SSE-NEXT:    pcmpgtb %xmm5, %xmm21526; SSE-NEXT:    pand %xmm2, %xmm51527; SSE-NEXT:    pandn %xmm1, %xmm21528; SSE-NEXT:    por %xmm5, %xmm21529; SSE-NEXT:    movdqa %xmm0, %xmm11530; SSE-NEXT:    pcmpgtb %xmm4, %xmm11531; SSE-NEXT:    pand %xmm1, %xmm41532; SSE-NEXT:    pandn %xmm0, %xmm11533; SSE-NEXT:    por %xmm4, %xmm11534; SSE-NEXT:    movdqa %xmm1, %xmm01535; SSE-NEXT:    pcmpgtb %xmm6, %xmm01536; SSE-NEXT:    pand %xmm0, %xmm61537; SSE-NEXT:    pandn %xmm1, %xmm01538; SSE-NEXT:    por %xmm6, %xmm01539; SSE-NEXT:    movdqa %xmm2, %xmm11540; SSE-NEXT:    pcmpgtb %xmm7, %xmm11541; SSE-NEXT:    pand %xmm1, %xmm71542; SSE-NEXT:    pandn %xmm2, %xmm11543; SSE-NEXT:    por %xmm7, %xmm11544; SSE-NEXT:    retq1545;1546; AVX-LABEL: reassociate_smin_v32i8:1547; AVX:       # %bb.0:1548; AVX-NEXT:    vpaddb %ymm1, %ymm0, %ymm01549; AVX-NEXT:    vpminsb %ymm2, %ymm3, %ymm11550; AVX-NEXT:    vpminsb %ymm0, %ymm1, %ymm01551; AVX-NEXT:    retq1552 1553  %t0 = add <32 x i8> %x0, %x11554  %t1 = icmp slt <32 x i8> %x2, %t01555  %t2 = select <32 x i1> %t1, <32 x i8> %x2, <32 x i8> %t01556  %t3 = icmp slt <32 x i8> %x3, %t21557  %t4 = select <32 x i1> %t3, <32 x i8> %x3, <32 x i8> %t21558  ret <32 x i8> %t41559}1560 1561define <16 x i16> @reassociate_smin_v16i16(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x2, <16 x i16> %x3) {1562; SSE-LABEL: reassociate_smin_v16i16:1563; SSE:       # %bb.0:1564; SSE-NEXT:    paddw %xmm2, %xmm01565; SSE-NEXT:    paddw %xmm3, %xmm11566; SSE-NEXT:    pminsw %xmm6, %xmm41567; SSE-NEXT:    pminsw %xmm4, %xmm01568; SSE-NEXT:    pminsw %xmm7, %xmm51569; SSE-NEXT:    pminsw %xmm5, %xmm11570; SSE-NEXT:    retq1571;1572; AVX-LABEL: reassociate_smin_v16i16:1573; AVX:       # %bb.0:1574; AVX-NEXT:    vpaddw %ymm1, %ymm0, %ymm01575; AVX-NEXT:    vpminsw %ymm2, %ymm3, %ymm11576; AVX-NEXT:    vpminsw %ymm0, %ymm1, %ymm01577; AVX-NEXT:    retq1578 1579  %t0 = add <16 x i16> %x0, %x11580  %t1 = icmp slt <16 x i16> %x2, %t01581  %t2 = select <16 x i1> %t1, <16 x i16> %x2, <16 x i16> %t01582  %t3 = icmp slt <16 x i16> %x3, %t21583  %t4 = select <16 x i1> %t3, <16 x i16> %x3, <16 x i16> %t21584  ret <16 x i16> %t41585}1586 1587define <8 x i32> @reassociate_smin_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x2, <8 x i32> %x3) {1588; SSE-LABEL: reassociate_smin_v8i32:1589; SSE:       # %bb.0:1590; SSE-NEXT:    paddd %xmm2, %xmm01591; SSE-NEXT:    paddd %xmm3, %xmm11592; SSE-NEXT:    movdqa %xmm1, %xmm21593; SSE-NEXT:    pcmpgtd %xmm5, %xmm21594; SSE-NEXT:    pand %xmm2, %xmm51595; SSE-NEXT:    pandn %xmm1, %xmm21596; SSE-NEXT:    por %xmm5, %xmm21597; SSE-NEXT:    movdqa %xmm0, %xmm11598; SSE-NEXT:    pcmpgtd %xmm4, %xmm11599; SSE-NEXT:    pand %xmm1, %xmm41600; SSE-NEXT:    pandn %xmm0, %xmm11601; SSE-NEXT:    por %xmm4, %xmm11602; SSE-NEXT:    movdqa %xmm1, %xmm01603; SSE-NEXT:    pcmpgtd %xmm6, %xmm01604; SSE-NEXT:    pand %xmm0, %xmm61605; SSE-NEXT:    pandn %xmm1, %xmm01606; SSE-NEXT:    por %xmm6, %xmm01607; SSE-NEXT:    movdqa %xmm2, %xmm11608; SSE-NEXT:    pcmpgtd %xmm7, %xmm11609; SSE-NEXT:    pand %xmm1, %xmm71610; SSE-NEXT:    pandn %xmm2, %xmm11611; SSE-NEXT:    por %xmm7, %xmm11612; SSE-NEXT:    retq1613;1614; AVX-LABEL: reassociate_smin_v8i32:1615; AVX:       # %bb.0:1616; AVX-NEXT:    vpaddd %ymm1, %ymm0, %ymm01617; AVX-NEXT:    vpminsd %ymm2, %ymm3, %ymm11618; AVX-NEXT:    vpminsd %ymm0, %ymm1, %ymm01619; AVX-NEXT:    retq1620 1621  %t0 = add <8 x i32> %x0, %x11622  %t1 = icmp slt <8 x i32> %x2, %t01623  %t2 = select <8 x i1> %t1, <8 x i32> %x2, <8 x i32> %t01624  %t3 = icmp slt <8 x i32> %x3, %t21625  %t4 = select <8 x i1> %t3, <8 x i32> %x3, <8 x i32> %t21626  ret <8 x i32> %t41627}1628 1629define <4 x i64> @reassociate_smin_v4i64(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x2, <4 x i64> %x3) {1630; SSE-LABEL: reassociate_smin_v4i64:1631; SSE:       # %bb.0:1632; SSE-NEXT:    paddq %xmm2, %xmm01633; SSE-NEXT:    paddq %xmm3, %xmm11634; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]1635; SSE-NEXT:    movdqa %xmm5, %xmm31636; SSE-NEXT:    pxor %xmm2, %xmm31637; SSE-NEXT:    movdqa %xmm1, %xmm81638; SSE-NEXT:    pxor %xmm2, %xmm81639; SSE-NEXT:    movdqa %xmm8, %xmm91640; SSE-NEXT:    pcmpgtd %xmm3, %xmm91641; SSE-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]1642; SSE-NEXT:    pcmpeqd %xmm3, %xmm81643; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]1644; SSE-NEXT:    pand %xmm10, %xmm81645; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm9[1,1,3,3]1646; SSE-NEXT:    por %xmm8, %xmm31647; SSE-NEXT:    pand %xmm3, %xmm51648; SSE-NEXT:    pandn %xmm1, %xmm31649; SSE-NEXT:    por %xmm5, %xmm31650; SSE-NEXT:    movdqa %xmm4, %xmm11651; SSE-NEXT:    pxor %xmm2, %xmm11652; SSE-NEXT:    movdqa %xmm0, %xmm51653; SSE-NEXT:    pxor %xmm2, %xmm51654; SSE-NEXT:    movdqa %xmm5, %xmm81655; SSE-NEXT:    pcmpgtd %xmm1, %xmm81656; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]1657; SSE-NEXT:    pcmpeqd %xmm1, %xmm51658; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]1659; SSE-NEXT:    pand %xmm9, %xmm11660; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3]1661; SSE-NEXT:    por %xmm1, %xmm51662; SSE-NEXT:    pand %xmm5, %xmm41663; SSE-NEXT:    pandn %xmm0, %xmm51664; SSE-NEXT:    por %xmm4, %xmm51665; SSE-NEXT:    movdqa %xmm5, %xmm01666; SSE-NEXT:    pxor %xmm2, %xmm01667; SSE-NEXT:    movdqa %xmm6, %xmm11668; SSE-NEXT:    pxor %xmm2, %xmm11669; SSE-NEXT:    movdqa %xmm0, %xmm41670; SSE-NEXT:    pcmpgtd %xmm1, %xmm41671; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm4[0,0,2,2]1672; SSE-NEXT:    pcmpeqd %xmm0, %xmm11673; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1674; SSE-NEXT:    pand %xmm8, %xmm11675; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]1676; SSE-NEXT:    por %xmm1, %xmm01677; SSE-NEXT:    pand %xmm0, %xmm61678; SSE-NEXT:    pandn %xmm5, %xmm01679; SSE-NEXT:    por %xmm6, %xmm01680; SSE-NEXT:    movdqa %xmm3, %xmm11681; SSE-NEXT:    pxor %xmm2, %xmm11682; SSE-NEXT:    pxor %xmm7, %xmm21683; SSE-NEXT:    movdqa %xmm1, %xmm41684; SSE-NEXT:    pcmpgtd %xmm2, %xmm41685; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1686; SSE-NEXT:    pcmpeqd %xmm1, %xmm21687; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1688; SSE-NEXT:    pand %xmm5, %xmm21689; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]1690; SSE-NEXT:    por %xmm2, %xmm11691; SSE-NEXT:    pand %xmm1, %xmm71692; SSE-NEXT:    pandn %xmm3, %xmm11693; SSE-NEXT:    por %xmm7, %xmm11694; SSE-NEXT:    retq1695;1696; AVX2-LABEL: reassociate_smin_v4i64:1697; AVX2:       # %bb.0:1698; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm01699; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm11700; AVX2-NEXT:    vblendvpd %ymm1, %ymm2, %ymm0, %ymm01701; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm0, %ymm11702; AVX2-NEXT:    vblendvpd %ymm1, %ymm3, %ymm0, %ymm01703; AVX2-NEXT:    retq1704;1705; AVX512-LABEL: reassociate_smin_v4i64:1706; AVX512:       # %bb.0:1707; AVX512-NEXT:    vpaddq %ymm1, %ymm0, %ymm01708; AVX512-NEXT:    vpminsq %ymm2, %ymm3, %ymm11709; AVX512-NEXT:    vpminsq %ymm0, %ymm1, %ymm01710; AVX512-NEXT:    retq1711 1712  %t0 = add <4 x i64> %x0, %x11713  %t1 = icmp slt <4 x i64> %x2, %t01714  %t2 = select <4 x i1> %t1, <4 x i64> %x2, <4 x i64> %t01715  %t3 = icmp slt <4 x i64> %x3, %t21716  %t4 = select <4 x i1> %t3, <4 x i64> %x3, <4 x i64> %t21717  ret <4 x i64> %t41718}1719 1720; Verify that 512-bit vector min/max are reassociated.1721 1722define <64 x i8> @reassociate_umax_v64i8(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, <64 x i8> %x3) {1723; SSE-LABEL: reassociate_umax_v64i8:1724; SSE:       # %bb.0:1725; SSE-NEXT:    paddb %xmm4, %xmm01726; SSE-NEXT:    paddb %xmm5, %xmm11727; SSE-NEXT:    paddb %xmm6, %xmm21728; SSE-NEXT:    paddb %xmm7, %xmm31729; SSE-NEXT:    pmaxub {{[0-9]+}}(%rsp), %xmm31730; SSE-NEXT:    pmaxub {{[0-9]+}}(%rsp), %xmm21731; SSE-NEXT:    pmaxub {{[0-9]+}}(%rsp), %xmm11732; SSE-NEXT:    pmaxub {{[0-9]+}}(%rsp), %xmm01733; SSE-NEXT:    pmaxub {{[0-9]+}}(%rsp), %xmm01734; SSE-NEXT:    pmaxub {{[0-9]+}}(%rsp), %xmm11735; SSE-NEXT:    pmaxub {{[0-9]+}}(%rsp), %xmm21736; SSE-NEXT:    pmaxub {{[0-9]+}}(%rsp), %xmm31737; SSE-NEXT:    retq1738;1739; AVX2-LABEL: reassociate_umax_v64i8:1740; AVX2:       # %bb.0:1741; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm01742; AVX2-NEXT:    vpaddb %ymm3, %ymm1, %ymm11743; AVX2-NEXT:    vpmaxub %ymm4, %ymm6, %ymm21744; AVX2-NEXT:    vpmaxub %ymm0, %ymm2, %ymm01745; AVX2-NEXT:    vpmaxub %ymm5, %ymm7, %ymm21746; AVX2-NEXT:    vpmaxub %ymm1, %ymm2, %ymm11747; AVX2-NEXT:    retq1748;1749; AVX512-LABEL: reassociate_umax_v64i8:1750; AVX512:       # %bb.0:1751; AVX512-NEXT:    vpaddb %zmm1, %zmm0, %zmm01752; AVX512-NEXT:    vpmaxub %zmm2, %zmm3, %zmm11753; AVX512-NEXT:    vpmaxub %zmm0, %zmm1, %zmm01754; AVX512-NEXT:    retq1755 1756  %t0 = add <64 x i8> %x0, %x11757  %t1 = icmp ugt <64 x i8> %x2, %t01758  %t2 = select <64 x i1> %t1, <64 x i8> %x2, <64 x i8> %t01759  %t3 = icmp ugt <64 x i8> %x3, %t21760  %t4 = select <64 x i1> %t3, <64 x i8> %x3, <64 x i8> %t21761  ret <64 x i8> %t41762}1763 1764define <32 x i16> @reassociate_umax_v32i16(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, <32 x i16> %x3) {1765; SSE-LABEL: reassociate_umax_v32i16:1766; SSE:       # %bb.0:1767; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm81768; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm91769; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm101770; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm111771; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm121772; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm131773; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm141774; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm151775; SSE-NEXT:    paddw %xmm4, %xmm01776; SSE-NEXT:    paddw %xmm5, %xmm11777; SSE-NEXT:    paddw %xmm6, %xmm21778; SSE-NEXT:    paddw %xmm7, %xmm31779; SSE-NEXT:    psubusw %xmm15, %xmm31780; SSE-NEXT:    paddw %xmm15, %xmm31781; SSE-NEXT:    psubusw %xmm14, %xmm21782; SSE-NEXT:    paddw %xmm14, %xmm21783; SSE-NEXT:    psubusw %xmm13, %xmm11784; SSE-NEXT:    paddw %xmm13, %xmm11785; SSE-NEXT:    psubusw %xmm12, %xmm01786; SSE-NEXT:    paddw %xmm12, %xmm01787; SSE-NEXT:    psubusw %xmm11, %xmm01788; SSE-NEXT:    paddw %xmm11, %xmm01789; SSE-NEXT:    psubusw %xmm10, %xmm11790; SSE-NEXT:    paddw %xmm10, %xmm11791; SSE-NEXT:    psubusw %xmm9, %xmm21792; SSE-NEXT:    paddw %xmm9, %xmm21793; SSE-NEXT:    psubusw %xmm8, %xmm31794; SSE-NEXT:    paddw %xmm8, %xmm31795; SSE-NEXT:    retq1796;1797; AVX2-LABEL: reassociate_umax_v32i16:1798; AVX2:       # %bb.0:1799; AVX2-NEXT:    vpaddw %ymm2, %ymm0, %ymm01800; AVX2-NEXT:    vpaddw %ymm3, %ymm1, %ymm11801; AVX2-NEXT:    vpmaxuw %ymm4, %ymm6, %ymm21802; AVX2-NEXT:    vpmaxuw %ymm0, %ymm2, %ymm01803; AVX2-NEXT:    vpmaxuw %ymm5, %ymm7, %ymm21804; AVX2-NEXT:    vpmaxuw %ymm1, %ymm2, %ymm11805; AVX2-NEXT:    retq1806;1807; AVX512-LABEL: reassociate_umax_v32i16:1808; AVX512:       # %bb.0:1809; AVX512-NEXT:    vpaddw %zmm1, %zmm0, %zmm01810; AVX512-NEXT:    vpmaxuw %zmm2, %zmm3, %zmm11811; AVX512-NEXT:    vpmaxuw %zmm0, %zmm1, %zmm01812; AVX512-NEXT:    retq1813 1814  %t0 = add <32 x i16> %x0, %x11815  %t1 = icmp ugt <32 x i16> %x2, %t01816  %t2 = select <32 x i1> %t1, <32 x i16> %x2, <32 x i16> %t01817  %t3 = icmp ugt <32 x i16> %x3, %t21818  %t4 = select <32 x i1> %t3, <32 x i16> %x3, <32 x i16> %t21819  ret <32 x i16> %t41820}1821 1822define <16 x i32> @reassociate_umax_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, <16 x i32> %x3) {1823; SSE-LABEL: reassociate_umax_v16i32:1824; SSE:       # %bb.0:1825; SSE-NEXT:    movdqa %xmm7, %xmm91826; SSE-NEXT:    movdqa %xmm4, %xmm71827; SSE-NEXT:    movdqa %xmm3, %xmm81828; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm101829; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm111830; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm121831; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm131832; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm141833; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm151834; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm41835; SSE-NEXT:    paddd %xmm7, %xmm01836; SSE-NEXT:    paddd %xmm5, %xmm11837; SSE-NEXT:    paddd %xmm6, %xmm21838; SSE-NEXT:    paddd %xmm9, %xmm81839; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]1840; SSE-NEXT:    movdqa %xmm4, %xmm61841; SSE-NEXT:    pxor %xmm3, %xmm61842; SSE-NEXT:    movdqa %xmm8, %xmm51843; SSE-NEXT:    pxor %xmm3, %xmm51844; SSE-NEXT:    pcmpgtd %xmm5, %xmm61845; SSE-NEXT:    pand %xmm6, %xmm41846; SSE-NEXT:    pandn %xmm8, %xmm61847; SSE-NEXT:    por %xmm4, %xmm61848; SSE-NEXT:    movdqa %xmm15, %xmm51849; SSE-NEXT:    pxor %xmm3, %xmm51850; SSE-NEXT:    movdqa %xmm2, %xmm41851; SSE-NEXT:    pxor %xmm3, %xmm41852; SSE-NEXT:    pcmpgtd %xmm4, %xmm51853; SSE-NEXT:    pand %xmm5, %xmm151854; SSE-NEXT:    pandn %xmm2, %xmm51855; SSE-NEXT:    por %xmm15, %xmm51856; SSE-NEXT:    movdqa %xmm14, %xmm21857; SSE-NEXT:    pxor %xmm3, %xmm21858; SSE-NEXT:    movdqa %xmm1, %xmm41859; SSE-NEXT:    pxor %xmm3, %xmm41860; SSE-NEXT:    pcmpgtd %xmm4, %xmm21861; SSE-NEXT:    pand %xmm2, %xmm141862; SSE-NEXT:    pandn %xmm1, %xmm21863; SSE-NEXT:    por %xmm14, %xmm21864; SSE-NEXT:    movdqa %xmm13, %xmm11865; SSE-NEXT:    pxor %xmm3, %xmm11866; SSE-NEXT:    movdqa %xmm0, %xmm41867; SSE-NEXT:    pxor %xmm3, %xmm41868; SSE-NEXT:    pcmpgtd %xmm4, %xmm11869; SSE-NEXT:    pand %xmm1, %xmm131870; SSE-NEXT:    pandn %xmm0, %xmm11871; SSE-NEXT:    por %xmm13, %xmm11872; SSE-NEXT:    movdqa %xmm1, %xmm41873; SSE-NEXT:    pxor %xmm3, %xmm41874; SSE-NEXT:    movdqa %xmm12, %xmm01875; SSE-NEXT:    pxor %xmm3, %xmm01876; SSE-NEXT:    pcmpgtd %xmm4, %xmm01877; SSE-NEXT:    pand %xmm0, %xmm121878; SSE-NEXT:    pandn %xmm1, %xmm01879; SSE-NEXT:    por %xmm12, %xmm01880; SSE-NEXT:    movdqa %xmm2, %xmm41881; SSE-NEXT:    pxor %xmm3, %xmm41882; SSE-NEXT:    movdqa %xmm11, %xmm11883; SSE-NEXT:    pxor %xmm3, %xmm11884; SSE-NEXT:    pcmpgtd %xmm4, %xmm11885; SSE-NEXT:    pand %xmm1, %xmm111886; SSE-NEXT:    pandn %xmm2, %xmm11887; SSE-NEXT:    por %xmm11, %xmm11888; SSE-NEXT:    movdqa %xmm5, %xmm41889; SSE-NEXT:    pxor %xmm3, %xmm41890; SSE-NEXT:    movdqa %xmm10, %xmm21891; SSE-NEXT:    pxor %xmm3, %xmm21892; SSE-NEXT:    pcmpgtd %xmm4, %xmm21893; SSE-NEXT:    pand %xmm2, %xmm101894; SSE-NEXT:    pandn %xmm5, %xmm21895; SSE-NEXT:    por %xmm10, %xmm21896; SSE-NEXT:    movdqa %xmm6, %xmm41897; SSE-NEXT:    pxor %xmm3, %xmm41898; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm51899; SSE-NEXT:    pxor %xmm5, %xmm31900; SSE-NEXT:    pcmpgtd %xmm4, %xmm31901; SSE-NEXT:    pand %xmm3, %xmm51902; SSE-NEXT:    pandn %xmm6, %xmm31903; SSE-NEXT:    por %xmm5, %xmm31904; SSE-NEXT:    retq1905;1906; AVX2-LABEL: reassociate_umax_v16i32:1907; AVX2:       # %bb.0:1908; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm01909; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm11910; AVX2-NEXT:    vpmaxud %ymm4, %ymm6, %ymm21911; AVX2-NEXT:    vpmaxud %ymm0, %ymm2, %ymm01912; AVX2-NEXT:    vpmaxud %ymm5, %ymm7, %ymm21913; AVX2-NEXT:    vpmaxud %ymm1, %ymm2, %ymm11914; AVX2-NEXT:    retq1915;1916; AVX512-LABEL: reassociate_umax_v16i32:1917; AVX512:       # %bb.0:1918; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm01919; AVX512-NEXT:    vpmaxud %zmm2, %zmm3, %zmm11920; AVX512-NEXT:    vpmaxud %zmm0, %zmm1, %zmm01921; AVX512-NEXT:    retq1922 1923  %t0 = add <16 x i32> %x0, %x11924  %t1 = icmp ugt <16 x i32> %x2, %t01925  %t2 = select <16 x i1> %t1, <16 x i32> %x2, <16 x i32> %t01926  %t3 = icmp ugt <16 x i32> %x3, %t21927  %t4 = select <16 x i1> %t3, <16 x i32> %x3, <16 x i32> %t21928  ret <16 x i32> %t41929}1930 1931define <8 x i64> @reassociate_umax_v8i64(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, <8 x i64> %x3) {1932; SSE-LABEL: reassociate_umax_v8i64:1933; SSE:       # %bb.0:1934; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm81935; SSE-NEXT:    paddq %xmm4, %xmm01936; SSE-NEXT:    paddq %xmm5, %xmm11937; SSE-NEXT:    paddq %xmm6, %xmm21938; SSE-NEXT:    paddq %xmm7, %xmm31939; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]1940; SSE-NEXT:    movdqa %xmm8, %xmm51941; SSE-NEXT:    pxor %xmm4, %xmm51942; SSE-NEXT:    movdqa %xmm3, %xmm61943; SSE-NEXT:    pxor %xmm4, %xmm61944; SSE-NEXT:    movdqa %xmm5, %xmm71945; SSE-NEXT:    pcmpgtd %xmm6, %xmm71946; SSE-NEXT:    pcmpeqd %xmm5, %xmm61947; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[0,0,2,2]1948; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]1949; SSE-NEXT:    pand %xmm5, %xmm61950; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm91951; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]1952; SSE-NEXT:    por %xmm6, %xmm51953; SSE-NEXT:    pand %xmm5, %xmm81954; SSE-NEXT:    pandn %xmm3, %xmm51955; SSE-NEXT:    por %xmm8, %xmm51956; SSE-NEXT:    movdqa %xmm9, %xmm31957; SSE-NEXT:    pxor %xmm4, %xmm31958; SSE-NEXT:    movdqa %xmm2, %xmm61959; SSE-NEXT:    pxor %xmm4, %xmm61960; SSE-NEXT:    movdqa %xmm3, %xmm71961; SSE-NEXT:    pcmpgtd %xmm6, %xmm71962; SSE-NEXT:    pcmpeqd %xmm3, %xmm61963; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]1964; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]1965; SSE-NEXT:    pand %xmm3, %xmm61966; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm81967; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]1968; SSE-NEXT:    por %xmm6, %xmm31969; SSE-NEXT:    pand %xmm3, %xmm91970; SSE-NEXT:    pandn %xmm2, %xmm31971; SSE-NEXT:    por %xmm9, %xmm31972; SSE-NEXT:    movdqa %xmm8, %xmm21973; SSE-NEXT:    pxor %xmm4, %xmm21974; SSE-NEXT:    movdqa %xmm1, %xmm61975; SSE-NEXT:    pxor %xmm4, %xmm61976; SSE-NEXT:    movdqa %xmm2, %xmm71977; SSE-NEXT:    pcmpgtd %xmm6, %xmm71978; SSE-NEXT:    pcmpeqd %xmm2, %xmm61979; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[0,0,2,2]1980; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]1981; SSE-NEXT:    pand %xmm2, %xmm61982; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm91983; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]1984; SSE-NEXT:    por %xmm6, %xmm21985; SSE-NEXT:    pand %xmm2, %xmm81986; SSE-NEXT:    pandn %xmm1, %xmm21987; SSE-NEXT:    por %xmm8, %xmm21988; SSE-NEXT:    movdqa %xmm9, %xmm11989; SSE-NEXT:    pxor %xmm4, %xmm11990; SSE-NEXT:    movdqa %xmm0, %xmm61991; SSE-NEXT:    pxor %xmm4, %xmm61992; SSE-NEXT:    movdqa %xmm1, %xmm71993; SSE-NEXT:    pcmpgtd %xmm6, %xmm71994; SSE-NEXT:    pcmpeqd %xmm1, %xmm61995; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]1996; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]1997; SSE-NEXT:    pand %xmm1, %xmm61998; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm11999; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]2000; SSE-NEXT:    por %xmm6, %xmm72001; SSE-NEXT:    pand %xmm7, %xmm92002; SSE-NEXT:    pandn %xmm0, %xmm72003; SSE-NEXT:    por %xmm9, %xmm72004; SSE-NEXT:    movdqa %xmm7, %xmm02005; SSE-NEXT:    pxor %xmm4, %xmm02006; SSE-NEXT:    movdqa %xmm1, %xmm62007; SSE-NEXT:    pxor %xmm4, %xmm62008; SSE-NEXT:    movdqa %xmm6, %xmm82009; SSE-NEXT:    pcmpgtd %xmm0, %xmm82010; SSE-NEXT:    pcmpeqd %xmm0, %xmm62011; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[0,0,2,2]2012; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2013; SSE-NEXT:    pand %xmm0, %xmm62014; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92015; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[1,1,3,3]2016; SSE-NEXT:    por %xmm6, %xmm02017; SSE-NEXT:    pand %xmm0, %xmm12018; SSE-NEXT:    pandn %xmm7, %xmm02019; SSE-NEXT:    por %xmm1, %xmm02020; SSE-NEXT:    movdqa %xmm2, %xmm12021; SSE-NEXT:    pxor %xmm4, %xmm12022; SSE-NEXT:    movdqa %xmm9, %xmm62023; SSE-NEXT:    pxor %xmm4, %xmm62024; SSE-NEXT:    movdqa %xmm6, %xmm72025; SSE-NEXT:    pcmpgtd %xmm1, %xmm72026; SSE-NEXT:    pcmpeqd %xmm1, %xmm62027; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]2028; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2029; SSE-NEXT:    pand %xmm1, %xmm62030; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82031; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]2032; SSE-NEXT:    por %xmm6, %xmm12033; SSE-NEXT:    pand %xmm1, %xmm92034; SSE-NEXT:    pandn %xmm2, %xmm12035; SSE-NEXT:    por %xmm9, %xmm12036; SSE-NEXT:    movdqa %xmm3, %xmm22037; SSE-NEXT:    pxor %xmm4, %xmm22038; SSE-NEXT:    movdqa %xmm8, %xmm62039; SSE-NEXT:    pxor %xmm4, %xmm62040; SSE-NEXT:    movdqa %xmm6, %xmm72041; SSE-NEXT:    pcmpgtd %xmm2, %xmm72042; SSE-NEXT:    pcmpeqd %xmm2, %xmm62043; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[0,0,2,2]2044; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2045; SSE-NEXT:    pand %xmm2, %xmm62046; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]2047; SSE-NEXT:    por %xmm6, %xmm22048; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm62049; SSE-NEXT:    pand %xmm2, %xmm82050; SSE-NEXT:    pandn %xmm3, %xmm22051; SSE-NEXT:    por %xmm8, %xmm22052; SSE-NEXT:    movdqa %xmm5, %xmm32053; SSE-NEXT:    pxor %xmm4, %xmm32054; SSE-NEXT:    pxor %xmm6, %xmm42055; SSE-NEXT:    movdqa %xmm4, %xmm72056; SSE-NEXT:    pcmpgtd %xmm3, %xmm72057; SSE-NEXT:    pcmpeqd %xmm3, %xmm42058; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]2059; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]2060; SSE-NEXT:    pand %xmm3, %xmm42061; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]2062; SSE-NEXT:    por %xmm4, %xmm32063; SSE-NEXT:    pand %xmm3, %xmm62064; SSE-NEXT:    pandn %xmm5, %xmm32065; SSE-NEXT:    por %xmm6, %xmm32066; SSE-NEXT:    retq2067;2068; AVX2-LABEL: reassociate_umax_v8i64:2069; AVX2:       # %bb.0:2070; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm02071; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]2072; AVX2-NEXT:    vpaddq %ymm3, %ymm1, %ymm12073; AVX2-NEXT:    vpxor %ymm2, %ymm5, %ymm32074; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm82075; AVX2-NEXT:    vpcmpgtq %ymm8, %ymm3, %ymm32076; AVX2-NEXT:    vblendvpd %ymm3, %ymm5, %ymm1, %ymm12077; AVX2-NEXT:    vpxor %ymm2, %ymm4, %ymm32078; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm52079; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm3, %ymm32080; AVX2-NEXT:    vblendvpd %ymm3, %ymm4, %ymm0, %ymm02081; AVX2-NEXT:    vxorpd %ymm2, %ymm0, %ymm32082; AVX2-NEXT:    vpxor %ymm2, %ymm6, %ymm42083; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm4, %ymm32084; AVX2-NEXT:    vblendvpd %ymm3, %ymm6, %ymm0, %ymm02085; AVX2-NEXT:    vxorpd %ymm2, %ymm1, %ymm32086; AVX2-NEXT:    vpxor %ymm2, %ymm7, %ymm22087; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm22088; AVX2-NEXT:    vblendvpd %ymm2, %ymm7, %ymm1, %ymm12089; AVX2-NEXT:    retq2090;2091; AVX512-LABEL: reassociate_umax_v8i64:2092; AVX512:       # %bb.0:2093; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm02094; AVX512-NEXT:    vpmaxuq %zmm2, %zmm3, %zmm12095; AVX512-NEXT:    vpmaxuq %zmm0, %zmm1, %zmm02096; AVX512-NEXT:    retq2097 2098  %t0 = add <8 x i64> %x0, %x12099  %t1 = icmp ugt <8 x i64> %x2, %t02100  %t2 = select <8 x i1> %t1, <8 x i64> %x2, <8 x i64> %t02101  %t3 = icmp ugt <8 x i64> %x3, %t22102  %t4 = select <8 x i1> %t3, <8 x i64> %x3, <8 x i64> %t22103  ret <8 x i64> %t42104}2105 2106define <64 x i8> @reassociate_smax_v64i8(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, <64 x i8> %x3) {2107; SSE-LABEL: reassociate_smax_v64i8:2108; SSE:       # %bb.0:2109; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82110; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92111; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm102112; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm112113; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm122114; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm132115; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm142116; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm152117; SSE-NEXT:    paddb %xmm4, %xmm02118; SSE-NEXT:    paddb %xmm5, %xmm12119; SSE-NEXT:    paddb %xmm6, %xmm22120; SSE-NEXT:    paddb %xmm7, %xmm32121; SSE-NEXT:    movdqa %xmm15, %xmm42122; SSE-NEXT:    pcmpgtb %xmm3, %xmm42123; SSE-NEXT:    pand %xmm4, %xmm152124; SSE-NEXT:    pandn %xmm3, %xmm42125; SSE-NEXT:    por %xmm15, %xmm42126; SSE-NEXT:    movdqa %xmm14, %xmm32127; SSE-NEXT:    pcmpgtb %xmm2, %xmm32128; SSE-NEXT:    pand %xmm3, %xmm142129; SSE-NEXT:    pandn %xmm2, %xmm32130; SSE-NEXT:    por %xmm14, %xmm32131; SSE-NEXT:    movdqa %xmm13, %xmm22132; SSE-NEXT:    pcmpgtb %xmm1, %xmm22133; SSE-NEXT:    pand %xmm2, %xmm132134; SSE-NEXT:    pandn %xmm1, %xmm22135; SSE-NEXT:    por %xmm13, %xmm22136; SSE-NEXT:    movdqa %xmm12, %xmm12137; SSE-NEXT:    pcmpgtb %xmm0, %xmm12138; SSE-NEXT:    pand %xmm1, %xmm122139; SSE-NEXT:    pandn %xmm0, %xmm12140; SSE-NEXT:    por %xmm12, %xmm12141; SSE-NEXT:    movdqa %xmm11, %xmm02142; SSE-NEXT:    pcmpgtb %xmm1, %xmm02143; SSE-NEXT:    pand %xmm0, %xmm112144; SSE-NEXT:    pandn %xmm1, %xmm02145; SSE-NEXT:    por %xmm11, %xmm02146; SSE-NEXT:    movdqa %xmm10, %xmm12147; SSE-NEXT:    pcmpgtb %xmm2, %xmm12148; SSE-NEXT:    pand %xmm1, %xmm102149; SSE-NEXT:    pandn %xmm2, %xmm12150; SSE-NEXT:    por %xmm10, %xmm12151; SSE-NEXT:    movdqa %xmm9, %xmm22152; SSE-NEXT:    pcmpgtb %xmm3, %xmm22153; SSE-NEXT:    pand %xmm2, %xmm92154; SSE-NEXT:    pandn %xmm3, %xmm22155; SSE-NEXT:    por %xmm9, %xmm22156; SSE-NEXT:    movdqa %xmm8, %xmm32157; SSE-NEXT:    pcmpgtb %xmm4, %xmm32158; SSE-NEXT:    pand %xmm3, %xmm82159; SSE-NEXT:    pandn %xmm4, %xmm32160; SSE-NEXT:    por %xmm8, %xmm32161; SSE-NEXT:    retq2162;2163; AVX2-LABEL: reassociate_smax_v64i8:2164; AVX2:       # %bb.0:2165; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm02166; AVX2-NEXT:    vpaddb %ymm3, %ymm1, %ymm12167; AVX2-NEXT:    vpmaxsb %ymm4, %ymm6, %ymm22168; AVX2-NEXT:    vpmaxsb %ymm0, %ymm2, %ymm02169; AVX2-NEXT:    vpmaxsb %ymm5, %ymm7, %ymm22170; AVX2-NEXT:    vpmaxsb %ymm1, %ymm2, %ymm12171; AVX2-NEXT:    retq2172;2173; AVX512-LABEL: reassociate_smax_v64i8:2174; AVX512:       # %bb.0:2175; AVX512-NEXT:    vpaddb %zmm1, %zmm0, %zmm02176; AVX512-NEXT:    vpmaxsb %zmm2, %zmm3, %zmm12177; AVX512-NEXT:    vpmaxsb %zmm0, %zmm1, %zmm02178; AVX512-NEXT:    retq2179 2180  %t0 = add <64 x i8> %x0, %x12181  %t1 = icmp sgt <64 x i8> %x2, %t02182  %t2 = select <64 x i1> %t1, <64 x i8> %x2, <64 x i8> %t02183  %t3 = icmp sgt <64 x i8> %x3, %t22184  %t4 = select <64 x i1> %t3, <64 x i8> %x3, <64 x i8> %t22185  ret <64 x i8> %t42186}2187 2188define <32 x i16> @reassociate_smax_v32i16(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, <32 x i16> %x3) {2189; SSE-LABEL: reassociate_smax_v32i16:2190; SSE:       # %bb.0:2191; SSE-NEXT:    paddw %xmm4, %xmm02192; SSE-NEXT:    paddw %xmm5, %xmm12193; SSE-NEXT:    paddw %xmm6, %xmm22194; SSE-NEXT:    paddw %xmm7, %xmm32195; SSE-NEXT:    pmaxsw {{[0-9]+}}(%rsp), %xmm32196; SSE-NEXT:    pmaxsw {{[0-9]+}}(%rsp), %xmm22197; SSE-NEXT:    pmaxsw {{[0-9]+}}(%rsp), %xmm12198; SSE-NEXT:    pmaxsw {{[0-9]+}}(%rsp), %xmm02199; SSE-NEXT:    pmaxsw {{[0-9]+}}(%rsp), %xmm02200; SSE-NEXT:    pmaxsw {{[0-9]+}}(%rsp), %xmm12201; SSE-NEXT:    pmaxsw {{[0-9]+}}(%rsp), %xmm22202; SSE-NEXT:    pmaxsw {{[0-9]+}}(%rsp), %xmm32203; SSE-NEXT:    retq2204;2205; AVX2-LABEL: reassociate_smax_v32i16:2206; AVX2:       # %bb.0:2207; AVX2-NEXT:    vpaddw %ymm2, %ymm0, %ymm02208; AVX2-NEXT:    vpaddw %ymm3, %ymm1, %ymm12209; AVX2-NEXT:    vpmaxsw %ymm4, %ymm6, %ymm22210; AVX2-NEXT:    vpmaxsw %ymm0, %ymm2, %ymm02211; AVX2-NEXT:    vpmaxsw %ymm5, %ymm7, %ymm22212; AVX2-NEXT:    vpmaxsw %ymm1, %ymm2, %ymm12213; AVX2-NEXT:    retq2214;2215; AVX512-LABEL: reassociate_smax_v32i16:2216; AVX512:       # %bb.0:2217; AVX512-NEXT:    vpaddw %zmm1, %zmm0, %zmm02218; AVX512-NEXT:    vpmaxsw %zmm2, %zmm3, %zmm12219; AVX512-NEXT:    vpmaxsw %zmm0, %zmm1, %zmm02220; AVX512-NEXT:    retq2221 2222  %t0 = add <32 x i16> %x0, %x12223  %t1 = icmp sgt <32 x i16> %x2, %t02224  %t2 = select <32 x i1> %t1, <32 x i16> %x2, <32 x i16> %t02225  %t3 = icmp sgt <32 x i16> %x3, %t22226  %t4 = select <32 x i1> %t3, <32 x i16> %x3, <32 x i16> %t22227  ret <32 x i16> %t42228}2229 2230define <16 x i32> @reassociate_smax_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, <16 x i32> %x3) {2231; SSE-LABEL: reassociate_smax_v16i32:2232; SSE:       # %bb.0:2233; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82234; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92235; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm102236; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm112237; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm122238; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm132239; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm142240; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm152241; SSE-NEXT:    paddd %xmm4, %xmm02242; SSE-NEXT:    paddd %xmm5, %xmm12243; SSE-NEXT:    paddd %xmm6, %xmm22244; SSE-NEXT:    paddd %xmm7, %xmm32245; SSE-NEXT:    movdqa %xmm15, %xmm42246; SSE-NEXT:    pcmpgtd %xmm3, %xmm42247; SSE-NEXT:    pand %xmm4, %xmm152248; SSE-NEXT:    pandn %xmm3, %xmm42249; SSE-NEXT:    por %xmm15, %xmm42250; SSE-NEXT:    movdqa %xmm14, %xmm32251; SSE-NEXT:    pcmpgtd %xmm2, %xmm32252; SSE-NEXT:    pand %xmm3, %xmm142253; SSE-NEXT:    pandn %xmm2, %xmm32254; SSE-NEXT:    por %xmm14, %xmm32255; SSE-NEXT:    movdqa %xmm13, %xmm22256; SSE-NEXT:    pcmpgtd %xmm1, %xmm22257; SSE-NEXT:    pand %xmm2, %xmm132258; SSE-NEXT:    pandn %xmm1, %xmm22259; SSE-NEXT:    por %xmm13, %xmm22260; SSE-NEXT:    movdqa %xmm12, %xmm12261; SSE-NEXT:    pcmpgtd %xmm0, %xmm12262; SSE-NEXT:    pand %xmm1, %xmm122263; SSE-NEXT:    pandn %xmm0, %xmm12264; SSE-NEXT:    por %xmm12, %xmm12265; SSE-NEXT:    movdqa %xmm11, %xmm02266; SSE-NEXT:    pcmpgtd %xmm1, %xmm02267; SSE-NEXT:    pand %xmm0, %xmm112268; SSE-NEXT:    pandn %xmm1, %xmm02269; SSE-NEXT:    por %xmm11, %xmm02270; SSE-NEXT:    movdqa %xmm10, %xmm12271; SSE-NEXT:    pcmpgtd %xmm2, %xmm12272; SSE-NEXT:    pand %xmm1, %xmm102273; SSE-NEXT:    pandn %xmm2, %xmm12274; SSE-NEXT:    por %xmm10, %xmm12275; SSE-NEXT:    movdqa %xmm9, %xmm22276; SSE-NEXT:    pcmpgtd %xmm3, %xmm22277; SSE-NEXT:    pand %xmm2, %xmm92278; SSE-NEXT:    pandn %xmm3, %xmm22279; SSE-NEXT:    por %xmm9, %xmm22280; SSE-NEXT:    movdqa %xmm8, %xmm32281; SSE-NEXT:    pcmpgtd %xmm4, %xmm32282; SSE-NEXT:    pand %xmm3, %xmm82283; SSE-NEXT:    pandn %xmm4, %xmm32284; SSE-NEXT:    por %xmm8, %xmm32285; SSE-NEXT:    retq2286;2287; AVX2-LABEL: reassociate_smax_v16i32:2288; AVX2:       # %bb.0:2289; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm02290; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm12291; AVX2-NEXT:    vpmaxsd %ymm4, %ymm6, %ymm22292; AVX2-NEXT:    vpmaxsd %ymm0, %ymm2, %ymm02293; AVX2-NEXT:    vpmaxsd %ymm5, %ymm7, %ymm22294; AVX2-NEXT:    vpmaxsd %ymm1, %ymm2, %ymm12295; AVX2-NEXT:    retq2296;2297; AVX512-LABEL: reassociate_smax_v16i32:2298; AVX512:       # %bb.0:2299; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm02300; AVX512-NEXT:    vpmaxsd %zmm2, %zmm3, %zmm12301; AVX512-NEXT:    vpmaxsd %zmm0, %zmm1, %zmm02302; AVX512-NEXT:    retq2303 2304  %t0 = add <16 x i32> %x0, %x12305  %t1 = icmp sgt <16 x i32> %x2, %t02306  %t2 = select <16 x i1> %t1, <16 x i32> %x2, <16 x i32> %t02307  %t3 = icmp sgt <16 x i32> %x3, %t22308  %t4 = select <16 x i1> %t3, <16 x i32> %x3, <16 x i32> %t22309  ret <16 x i32> %t42310}2311 2312define <8 x i64> @reassociate_smax_v8i64(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, <8 x i64> %x3) {2313; SSE-LABEL: reassociate_smax_v8i64:2314; SSE:       # %bb.0:2315; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82316; SSE-NEXT:    paddq %xmm4, %xmm02317; SSE-NEXT:    paddq %xmm5, %xmm12318; SSE-NEXT:    paddq %xmm6, %xmm22319; SSE-NEXT:    paddq %xmm7, %xmm32320; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]2321; SSE-NEXT:    movdqa %xmm8, %xmm52322; SSE-NEXT:    pxor %xmm4, %xmm52323; SSE-NEXT:    movdqa %xmm3, %xmm62324; SSE-NEXT:    pxor %xmm4, %xmm62325; SSE-NEXT:    movdqa %xmm5, %xmm72326; SSE-NEXT:    pcmpgtd %xmm6, %xmm72327; SSE-NEXT:    pcmpeqd %xmm5, %xmm62328; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[0,0,2,2]2329; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2330; SSE-NEXT:    pand %xmm5, %xmm62331; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92332; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]2333; SSE-NEXT:    por %xmm6, %xmm52334; SSE-NEXT:    pand %xmm5, %xmm82335; SSE-NEXT:    pandn %xmm3, %xmm52336; SSE-NEXT:    por %xmm8, %xmm52337; SSE-NEXT:    movdqa %xmm9, %xmm32338; SSE-NEXT:    pxor %xmm4, %xmm32339; SSE-NEXT:    movdqa %xmm2, %xmm62340; SSE-NEXT:    pxor %xmm4, %xmm62341; SSE-NEXT:    movdqa %xmm3, %xmm72342; SSE-NEXT:    pcmpgtd %xmm6, %xmm72343; SSE-NEXT:    pcmpeqd %xmm3, %xmm62344; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]2345; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2346; SSE-NEXT:    pand %xmm3, %xmm62347; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82348; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]2349; SSE-NEXT:    por %xmm6, %xmm32350; SSE-NEXT:    pand %xmm3, %xmm92351; SSE-NEXT:    pandn %xmm2, %xmm32352; SSE-NEXT:    por %xmm9, %xmm32353; SSE-NEXT:    movdqa %xmm8, %xmm22354; SSE-NEXT:    pxor %xmm4, %xmm22355; SSE-NEXT:    movdqa %xmm1, %xmm62356; SSE-NEXT:    pxor %xmm4, %xmm62357; SSE-NEXT:    movdqa %xmm2, %xmm72358; SSE-NEXT:    pcmpgtd %xmm6, %xmm72359; SSE-NEXT:    pcmpeqd %xmm2, %xmm62360; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[0,0,2,2]2361; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2362; SSE-NEXT:    pand %xmm2, %xmm62363; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92364; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]2365; SSE-NEXT:    por %xmm6, %xmm22366; SSE-NEXT:    pand %xmm2, %xmm82367; SSE-NEXT:    pandn %xmm1, %xmm22368; SSE-NEXT:    por %xmm8, %xmm22369; SSE-NEXT:    movdqa %xmm9, %xmm12370; SSE-NEXT:    pxor %xmm4, %xmm12371; SSE-NEXT:    movdqa %xmm0, %xmm62372; SSE-NEXT:    pxor %xmm4, %xmm62373; SSE-NEXT:    movdqa %xmm1, %xmm72374; SSE-NEXT:    pcmpgtd %xmm6, %xmm72375; SSE-NEXT:    pcmpeqd %xmm1, %xmm62376; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]2377; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2378; SSE-NEXT:    pand %xmm1, %xmm62379; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm12380; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]2381; SSE-NEXT:    por %xmm6, %xmm72382; SSE-NEXT:    pand %xmm7, %xmm92383; SSE-NEXT:    pandn %xmm0, %xmm72384; SSE-NEXT:    por %xmm9, %xmm72385; SSE-NEXT:    movdqa %xmm7, %xmm02386; SSE-NEXT:    pxor %xmm4, %xmm02387; SSE-NEXT:    movdqa %xmm1, %xmm62388; SSE-NEXT:    pxor %xmm4, %xmm62389; SSE-NEXT:    movdqa %xmm6, %xmm82390; SSE-NEXT:    pcmpgtd %xmm0, %xmm82391; SSE-NEXT:    pcmpeqd %xmm0, %xmm62392; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[0,0,2,2]2393; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2394; SSE-NEXT:    pand %xmm0, %xmm62395; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92396; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[1,1,3,3]2397; SSE-NEXT:    por %xmm6, %xmm02398; SSE-NEXT:    pand %xmm0, %xmm12399; SSE-NEXT:    pandn %xmm7, %xmm02400; SSE-NEXT:    por %xmm1, %xmm02401; SSE-NEXT:    movdqa %xmm2, %xmm12402; SSE-NEXT:    pxor %xmm4, %xmm12403; SSE-NEXT:    movdqa %xmm9, %xmm62404; SSE-NEXT:    pxor %xmm4, %xmm62405; SSE-NEXT:    movdqa %xmm6, %xmm72406; SSE-NEXT:    pcmpgtd %xmm1, %xmm72407; SSE-NEXT:    pcmpeqd %xmm1, %xmm62408; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]2409; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2410; SSE-NEXT:    pand %xmm1, %xmm62411; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82412; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]2413; SSE-NEXT:    por %xmm6, %xmm12414; SSE-NEXT:    pand %xmm1, %xmm92415; SSE-NEXT:    pandn %xmm2, %xmm12416; SSE-NEXT:    por %xmm9, %xmm12417; SSE-NEXT:    movdqa %xmm3, %xmm22418; SSE-NEXT:    pxor %xmm4, %xmm22419; SSE-NEXT:    movdqa %xmm8, %xmm62420; SSE-NEXT:    pxor %xmm4, %xmm62421; SSE-NEXT:    movdqa %xmm6, %xmm72422; SSE-NEXT:    pcmpgtd %xmm2, %xmm72423; SSE-NEXT:    pcmpeqd %xmm2, %xmm62424; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[0,0,2,2]2425; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2426; SSE-NEXT:    pand %xmm2, %xmm62427; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]2428; SSE-NEXT:    por %xmm6, %xmm22429; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm62430; SSE-NEXT:    pand %xmm2, %xmm82431; SSE-NEXT:    pandn %xmm3, %xmm22432; SSE-NEXT:    por %xmm8, %xmm22433; SSE-NEXT:    movdqa %xmm5, %xmm32434; SSE-NEXT:    pxor %xmm4, %xmm32435; SSE-NEXT:    pxor %xmm6, %xmm42436; SSE-NEXT:    movdqa %xmm4, %xmm72437; SSE-NEXT:    pcmpgtd %xmm3, %xmm72438; SSE-NEXT:    pcmpeqd %xmm3, %xmm42439; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]2440; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]2441; SSE-NEXT:    pand %xmm3, %xmm42442; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]2443; SSE-NEXT:    por %xmm4, %xmm32444; SSE-NEXT:    pand %xmm3, %xmm62445; SSE-NEXT:    pandn %xmm5, %xmm32446; SSE-NEXT:    por %xmm6, %xmm32447; SSE-NEXT:    retq2448;2449; AVX2-LABEL: reassociate_smax_v8i64:2450; AVX2:       # %bb.0:2451; AVX2-NEXT:    vpaddq %ymm3, %ymm1, %ymm12452; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm5, %ymm32453; AVX2-NEXT:    vblendvpd %ymm3, %ymm5, %ymm1, %ymm12454; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm02455; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm4, %ymm22456; AVX2-NEXT:    vblendvpd %ymm2, %ymm4, %ymm0, %ymm02457; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm6, %ymm22458; AVX2-NEXT:    vblendvpd %ymm2, %ymm6, %ymm0, %ymm02459; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm7, %ymm22460; AVX2-NEXT:    vblendvpd %ymm2, %ymm7, %ymm1, %ymm12461; AVX2-NEXT:    retq2462;2463; AVX512-LABEL: reassociate_smax_v8i64:2464; AVX512:       # %bb.0:2465; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm02466; AVX512-NEXT:    vpmaxsq %zmm2, %zmm3, %zmm12467; AVX512-NEXT:    vpmaxsq %zmm0, %zmm1, %zmm02468; AVX512-NEXT:    retq2469 2470  %t0 = add <8 x i64> %x0, %x12471  %t1 = icmp sgt <8 x i64> %x2, %t02472  %t2 = select <8 x i1> %t1, <8 x i64> %x2, <8 x i64> %t02473  %t3 = icmp sgt <8 x i64> %x3, %t22474  %t4 = select <8 x i1> %t3, <8 x i64> %x3, <8 x i64> %t22475  ret <8 x i64> %t42476}2477 2478define <64 x i8> @reassociate_umin_v64i8(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, <64 x i8> %x3) {2479; SSE-LABEL: reassociate_umin_v64i8:2480; SSE:       # %bb.0:2481; SSE-NEXT:    paddb %xmm4, %xmm02482; SSE-NEXT:    paddb %xmm5, %xmm12483; SSE-NEXT:    paddb %xmm6, %xmm22484; SSE-NEXT:    paddb %xmm7, %xmm32485; SSE-NEXT:    pminub {{[0-9]+}}(%rsp), %xmm32486; SSE-NEXT:    pminub {{[0-9]+}}(%rsp), %xmm22487; SSE-NEXT:    pminub {{[0-9]+}}(%rsp), %xmm12488; SSE-NEXT:    pminub {{[0-9]+}}(%rsp), %xmm02489; SSE-NEXT:    pminub {{[0-9]+}}(%rsp), %xmm02490; SSE-NEXT:    pminub {{[0-9]+}}(%rsp), %xmm12491; SSE-NEXT:    pminub {{[0-9]+}}(%rsp), %xmm22492; SSE-NEXT:    pminub {{[0-9]+}}(%rsp), %xmm32493; SSE-NEXT:    retq2494;2495; AVX2-LABEL: reassociate_umin_v64i8:2496; AVX2:       # %bb.0:2497; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm02498; AVX2-NEXT:    vpaddb %ymm3, %ymm1, %ymm12499; AVX2-NEXT:    vpminub %ymm4, %ymm6, %ymm22500; AVX2-NEXT:    vpminub %ymm0, %ymm2, %ymm02501; AVX2-NEXT:    vpminub %ymm5, %ymm7, %ymm22502; AVX2-NEXT:    vpminub %ymm1, %ymm2, %ymm12503; AVX2-NEXT:    retq2504;2505; AVX512-LABEL: reassociate_umin_v64i8:2506; AVX512:       # %bb.0:2507; AVX512-NEXT:    vpaddb %zmm1, %zmm0, %zmm02508; AVX512-NEXT:    vpminub %zmm2, %zmm3, %zmm12509; AVX512-NEXT:    vpminub %zmm0, %zmm1, %zmm02510; AVX512-NEXT:    retq2511 2512  %t0 = add <64 x i8> %x0, %x12513  %t1 = icmp ult <64 x i8> %x2, %t02514  %t2 = select <64 x i1> %t1, <64 x i8> %x2, <64 x i8> %t02515  %t3 = icmp ult <64 x i8> %x3, %t22516  %t4 = select <64 x i1> %t3, <64 x i8> %x3, <64 x i8> %t22517  ret <64 x i8> %t42518}2519 2520define <32 x i16> @reassociate_umin_v32i16(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, <32 x i16> %x3) {2521; SSE-LABEL: reassociate_umin_v32i16:2522; SSE:       # %bb.0:2523; SSE-NEXT:    movdqa %xmm3, %xmm82524; SSE-NEXT:    movdqa %xmm2, %xmm92525; SSE-NEXT:    movdqa %xmm1, %xmm102526; SSE-NEXT:    movdqa %xmm0, %xmm112527; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm32528; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm22529; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm12530; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm02531; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm142532; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm152533; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm132534; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm122535; SSE-NEXT:    paddw %xmm4, %xmm112536; SSE-NEXT:    paddw %xmm5, %xmm102537; SSE-NEXT:    paddw %xmm6, %xmm92538; SSE-NEXT:    paddw %xmm7, %xmm82539; SSE-NEXT:    movdqa %xmm12, %xmm42540; SSE-NEXT:    psubusw %xmm8, %xmm42541; SSE-NEXT:    psubw %xmm4, %xmm122542; SSE-NEXT:    movdqa %xmm13, %xmm42543; SSE-NEXT:    psubusw %xmm9, %xmm42544; SSE-NEXT:    psubw %xmm4, %xmm132545; SSE-NEXT:    movdqa %xmm15, %xmm42546; SSE-NEXT:    psubusw %xmm10, %xmm42547; SSE-NEXT:    psubw %xmm4, %xmm152548; SSE-NEXT:    movdqa %xmm14, %xmm42549; SSE-NEXT:    psubusw %xmm11, %xmm42550; SSE-NEXT:    psubw %xmm4, %xmm142551; SSE-NEXT:    movdqa %xmm0, %xmm42552; SSE-NEXT:    psubusw %xmm14, %xmm42553; SSE-NEXT:    psubw %xmm4, %xmm02554; SSE-NEXT:    movdqa %xmm1, %xmm42555; SSE-NEXT:    psubusw %xmm15, %xmm42556; SSE-NEXT:    psubw %xmm4, %xmm12557; SSE-NEXT:    movdqa %xmm2, %xmm42558; SSE-NEXT:    psubusw %xmm13, %xmm42559; SSE-NEXT:    psubw %xmm4, %xmm22560; SSE-NEXT:    movdqa %xmm3, %xmm42561; SSE-NEXT:    psubusw %xmm12, %xmm42562; SSE-NEXT:    psubw %xmm4, %xmm32563; SSE-NEXT:    retq2564;2565; AVX2-LABEL: reassociate_umin_v32i16:2566; AVX2:       # %bb.0:2567; AVX2-NEXT:    vpaddw %ymm2, %ymm0, %ymm02568; AVX2-NEXT:    vpaddw %ymm3, %ymm1, %ymm12569; AVX2-NEXT:    vpminuw %ymm4, %ymm6, %ymm22570; AVX2-NEXT:    vpminuw %ymm0, %ymm2, %ymm02571; AVX2-NEXT:    vpminuw %ymm5, %ymm7, %ymm22572; AVX2-NEXT:    vpminuw %ymm1, %ymm2, %ymm12573; AVX2-NEXT:    retq2574;2575; AVX512-LABEL: reassociate_umin_v32i16:2576; AVX512:       # %bb.0:2577; AVX512-NEXT:    vpaddw %zmm1, %zmm0, %zmm02578; AVX512-NEXT:    vpminuw %zmm2, %zmm3, %zmm12579; AVX512-NEXT:    vpminuw %zmm0, %zmm1, %zmm02580; AVX512-NEXT:    retq2581 2582  %t0 = add <32 x i16> %x0, %x12583  %t1 = icmp ult <32 x i16> %x2, %t02584  %t2 = select <32 x i1> %t1, <32 x i16> %x2, <32 x i16> %t02585  %t3 = icmp ult <32 x i16> %x3, %t22586  %t4 = select <32 x i1> %t3, <32 x i16> %x3, <32 x i16> %t22587  ret <32 x i16> %t42588}2589 2590define <16 x i32> @reassociate_umin_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, <16 x i32> %x3) {2591; SSE-LABEL: reassociate_umin_v16i32:2592; SSE:       # %bb.0:2593; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82594; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92595; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm102596; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm112597; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm122598; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm132599; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm142600; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm152601; SSE-NEXT:    paddd %xmm4, %xmm02602; SSE-NEXT:    paddd %xmm5, %xmm12603; SSE-NEXT:    paddd %xmm6, %xmm22604; SSE-NEXT:    paddd %xmm7, %xmm32605; SSE-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]2606; SSE-NEXT:    movdqa %xmm15, %xmm62607; SSE-NEXT:    pxor %xmm5, %xmm62608; SSE-NEXT:    movdqa %xmm3, %xmm42609; SSE-NEXT:    pxor %xmm5, %xmm42610; SSE-NEXT:    pcmpgtd %xmm6, %xmm42611; SSE-NEXT:    pand %xmm4, %xmm152612; SSE-NEXT:    pandn %xmm3, %xmm42613; SSE-NEXT:    por %xmm15, %xmm42614; SSE-NEXT:    movdqa %xmm14, %xmm62615; SSE-NEXT:    pxor %xmm5, %xmm62616; SSE-NEXT:    movdqa %xmm2, %xmm32617; SSE-NEXT:    pxor %xmm5, %xmm32618; SSE-NEXT:    pcmpgtd %xmm6, %xmm32619; SSE-NEXT:    pand %xmm3, %xmm142620; SSE-NEXT:    pandn %xmm2, %xmm32621; SSE-NEXT:    por %xmm14, %xmm32622; SSE-NEXT:    movdqa %xmm13, %xmm62623; SSE-NEXT:    pxor %xmm5, %xmm62624; SSE-NEXT:    movdqa %xmm1, %xmm22625; SSE-NEXT:    pxor %xmm5, %xmm22626; SSE-NEXT:    pcmpgtd %xmm6, %xmm22627; SSE-NEXT:    pand %xmm2, %xmm132628; SSE-NEXT:    pandn %xmm1, %xmm22629; SSE-NEXT:    por %xmm13, %xmm22630; SSE-NEXT:    movdqa %xmm12, %xmm12631; SSE-NEXT:    pxor %xmm5, %xmm12632; SSE-NEXT:    movdqa %xmm0, %xmm62633; SSE-NEXT:    pxor %xmm5, %xmm62634; SSE-NEXT:    pcmpgtd %xmm1, %xmm62635; SSE-NEXT:    pand %xmm6, %xmm122636; SSE-NEXT:    pandn %xmm0, %xmm62637; SSE-NEXT:    por %xmm12, %xmm62638; SSE-NEXT:    movdqa %xmm6, %xmm02639; SSE-NEXT:    pxor %xmm5, %xmm02640; SSE-NEXT:    movdqa %xmm11, %xmm12641; SSE-NEXT:    pxor %xmm5, %xmm12642; SSE-NEXT:    pcmpgtd %xmm1, %xmm02643; SSE-NEXT:    pand %xmm0, %xmm112644; SSE-NEXT:    pandn %xmm6, %xmm02645; SSE-NEXT:    por %xmm11, %xmm02646; SSE-NEXT:    movdqa %xmm2, %xmm12647; SSE-NEXT:    pxor %xmm5, %xmm12648; SSE-NEXT:    movdqa %xmm10, %xmm62649; SSE-NEXT:    pxor %xmm5, %xmm62650; SSE-NEXT:    pcmpgtd %xmm6, %xmm12651; SSE-NEXT:    pand %xmm1, %xmm102652; SSE-NEXT:    pandn %xmm2, %xmm12653; SSE-NEXT:    por %xmm10, %xmm12654; SSE-NEXT:    movdqa %xmm3, %xmm22655; SSE-NEXT:    pxor %xmm5, %xmm22656; SSE-NEXT:    movdqa %xmm9, %xmm62657; SSE-NEXT:    pxor %xmm5, %xmm62658; SSE-NEXT:    pcmpgtd %xmm6, %xmm22659; SSE-NEXT:    pand %xmm2, %xmm92660; SSE-NEXT:    pandn %xmm3, %xmm22661; SSE-NEXT:    por %xmm9, %xmm22662; SSE-NEXT:    movdqa %xmm4, %xmm32663; SSE-NEXT:    pxor %xmm5, %xmm32664; SSE-NEXT:    pxor %xmm8, %xmm52665; SSE-NEXT:    pcmpgtd %xmm5, %xmm32666; SSE-NEXT:    pand %xmm3, %xmm82667; SSE-NEXT:    pandn %xmm4, %xmm32668; SSE-NEXT:    por %xmm8, %xmm32669; SSE-NEXT:    retq2670;2671; AVX2-LABEL: reassociate_umin_v16i32:2672; AVX2:       # %bb.0:2673; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm02674; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm12675; AVX2-NEXT:    vpminud %ymm4, %ymm6, %ymm22676; AVX2-NEXT:    vpminud %ymm0, %ymm2, %ymm02677; AVX2-NEXT:    vpminud %ymm5, %ymm7, %ymm22678; AVX2-NEXT:    vpminud %ymm1, %ymm2, %ymm12679; AVX2-NEXT:    retq2680;2681; AVX512-LABEL: reassociate_umin_v16i32:2682; AVX512:       # %bb.0:2683; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm02684; AVX512-NEXT:    vpminud %zmm2, %zmm3, %zmm12685; AVX512-NEXT:    vpminud %zmm0, %zmm1, %zmm02686; AVX512-NEXT:    retq2687 2688  %t0 = add <16 x i32> %x0, %x12689  %t1 = icmp ult <16 x i32> %x2, %t02690  %t2 = select <16 x i1> %t1, <16 x i32> %x2, <16 x i32> %t02691  %t3 = icmp ult <16 x i32> %x3, %t22692  %t4 = select <16 x i1> %t3, <16 x i32> %x3, <16 x i32> %t22693  ret <16 x i32> %t42694}2695 2696define <8 x i64> @reassociate_umin_v8i64(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, <8 x i64> %x3) {2697; SSE-LABEL: reassociate_umin_v8i64:2698; SSE:       # %bb.0:2699; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82700; SSE-NEXT:    paddq %xmm4, %xmm02701; SSE-NEXT:    paddq %xmm5, %xmm12702; SSE-NEXT:    paddq %xmm6, %xmm22703; SSE-NEXT:    paddq %xmm7, %xmm32704; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]2705; SSE-NEXT:    movdqa %xmm8, %xmm52706; SSE-NEXT:    pxor %xmm4, %xmm52707; SSE-NEXT:    movdqa %xmm3, %xmm62708; SSE-NEXT:    pxor %xmm4, %xmm62709; SSE-NEXT:    movdqa %xmm6, %xmm72710; SSE-NEXT:    pcmpgtd %xmm5, %xmm72711; SSE-NEXT:    pcmpeqd %xmm5, %xmm62712; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[0,0,2,2]2713; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2714; SSE-NEXT:    pand %xmm5, %xmm62715; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92716; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]2717; SSE-NEXT:    por %xmm6, %xmm52718; SSE-NEXT:    pand %xmm5, %xmm82719; SSE-NEXT:    pandn %xmm3, %xmm52720; SSE-NEXT:    por %xmm8, %xmm52721; SSE-NEXT:    movdqa %xmm9, %xmm32722; SSE-NEXT:    pxor %xmm4, %xmm32723; SSE-NEXT:    movdqa %xmm2, %xmm62724; SSE-NEXT:    pxor %xmm4, %xmm62725; SSE-NEXT:    movdqa %xmm6, %xmm72726; SSE-NEXT:    pcmpgtd %xmm3, %xmm72727; SSE-NEXT:    pcmpeqd %xmm3, %xmm62728; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]2729; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2730; SSE-NEXT:    pand %xmm3, %xmm62731; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82732; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]2733; SSE-NEXT:    por %xmm6, %xmm32734; SSE-NEXT:    pand %xmm3, %xmm92735; SSE-NEXT:    pandn %xmm2, %xmm32736; SSE-NEXT:    por %xmm9, %xmm32737; SSE-NEXT:    movdqa %xmm8, %xmm22738; SSE-NEXT:    pxor %xmm4, %xmm22739; SSE-NEXT:    movdqa %xmm1, %xmm62740; SSE-NEXT:    pxor %xmm4, %xmm62741; SSE-NEXT:    movdqa %xmm6, %xmm72742; SSE-NEXT:    pcmpgtd %xmm2, %xmm72743; SSE-NEXT:    pcmpeqd %xmm2, %xmm62744; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[0,0,2,2]2745; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2746; SSE-NEXT:    pand %xmm2, %xmm62747; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92748; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]2749; SSE-NEXT:    por %xmm6, %xmm22750; SSE-NEXT:    pand %xmm2, %xmm82751; SSE-NEXT:    pandn %xmm1, %xmm22752; SSE-NEXT:    por %xmm8, %xmm22753; SSE-NEXT:    movdqa %xmm9, %xmm12754; SSE-NEXT:    pxor %xmm4, %xmm12755; SSE-NEXT:    movdqa %xmm0, %xmm62756; SSE-NEXT:    pxor %xmm4, %xmm62757; SSE-NEXT:    movdqa %xmm6, %xmm72758; SSE-NEXT:    pcmpgtd %xmm1, %xmm72759; SSE-NEXT:    pcmpeqd %xmm1, %xmm62760; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]2761; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2762; SSE-NEXT:    pand %xmm1, %xmm62763; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm12764; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]2765; SSE-NEXT:    por %xmm6, %xmm72766; SSE-NEXT:    pand %xmm7, %xmm92767; SSE-NEXT:    pandn %xmm0, %xmm72768; SSE-NEXT:    por %xmm9, %xmm72769; SSE-NEXT:    movdqa %xmm7, %xmm02770; SSE-NEXT:    pxor %xmm4, %xmm02771; SSE-NEXT:    movdqa %xmm1, %xmm62772; SSE-NEXT:    pxor %xmm4, %xmm62773; SSE-NEXT:    movdqa %xmm0, %xmm82774; SSE-NEXT:    pcmpgtd %xmm6, %xmm82775; SSE-NEXT:    pcmpeqd %xmm0, %xmm62776; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[0,0,2,2]2777; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2778; SSE-NEXT:    pand %xmm0, %xmm62779; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92780; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[1,1,3,3]2781; SSE-NEXT:    por %xmm6, %xmm02782; SSE-NEXT:    pand %xmm0, %xmm12783; SSE-NEXT:    pandn %xmm7, %xmm02784; SSE-NEXT:    por %xmm1, %xmm02785; SSE-NEXT:    movdqa %xmm2, %xmm12786; SSE-NEXT:    pxor %xmm4, %xmm12787; SSE-NEXT:    movdqa %xmm9, %xmm62788; SSE-NEXT:    pxor %xmm4, %xmm62789; SSE-NEXT:    movdqa %xmm1, %xmm72790; SSE-NEXT:    pcmpgtd %xmm6, %xmm72791; SSE-NEXT:    pcmpeqd %xmm1, %xmm62792; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]2793; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2794; SSE-NEXT:    pand %xmm1, %xmm62795; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82796; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]2797; SSE-NEXT:    por %xmm6, %xmm12798; SSE-NEXT:    pand %xmm1, %xmm92799; SSE-NEXT:    pandn %xmm2, %xmm12800; SSE-NEXT:    por %xmm9, %xmm12801; SSE-NEXT:    movdqa %xmm3, %xmm22802; SSE-NEXT:    pxor %xmm4, %xmm22803; SSE-NEXT:    movdqa %xmm8, %xmm62804; SSE-NEXT:    pxor %xmm4, %xmm62805; SSE-NEXT:    movdqa %xmm2, %xmm72806; SSE-NEXT:    pcmpgtd %xmm6, %xmm72807; SSE-NEXT:    pcmpeqd %xmm2, %xmm62808; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[0,0,2,2]2809; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]2810; SSE-NEXT:    pand %xmm2, %xmm62811; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]2812; SSE-NEXT:    por %xmm6, %xmm22813; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm62814; SSE-NEXT:    pand %xmm2, %xmm82815; SSE-NEXT:    pandn %xmm3, %xmm22816; SSE-NEXT:    por %xmm8, %xmm22817; SSE-NEXT:    movdqa %xmm5, %xmm32818; SSE-NEXT:    pxor %xmm4, %xmm32819; SSE-NEXT:    pxor %xmm6, %xmm42820; SSE-NEXT:    movdqa %xmm3, %xmm72821; SSE-NEXT:    pcmpgtd %xmm4, %xmm72822; SSE-NEXT:    pcmpeqd %xmm3, %xmm42823; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]2824; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]2825; SSE-NEXT:    pand %xmm3, %xmm42826; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]2827; SSE-NEXT:    por %xmm4, %xmm32828; SSE-NEXT:    pand %xmm3, %xmm62829; SSE-NEXT:    pandn %xmm5, %xmm32830; SSE-NEXT:    por %xmm6, %xmm32831; SSE-NEXT:    retq2832;2833; AVX2-LABEL: reassociate_umin_v8i64:2834; AVX2:       # %bb.0:2835; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm02836; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]2837; AVX2-NEXT:    vpaddq %ymm3, %ymm1, %ymm12838; AVX2-NEXT:    vpxor %ymm2, %ymm5, %ymm32839; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm82840; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm8, %ymm32841; AVX2-NEXT:    vblendvpd %ymm3, %ymm5, %ymm1, %ymm12842; AVX2-NEXT:    vpxor %ymm2, %ymm4, %ymm32843; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm52844; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm5, %ymm32845; AVX2-NEXT:    vblendvpd %ymm3, %ymm4, %ymm0, %ymm02846; AVX2-NEXT:    vxorpd %ymm2, %ymm0, %ymm32847; AVX2-NEXT:    vpxor %ymm2, %ymm6, %ymm42848; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm3, %ymm32849; AVX2-NEXT:    vblendvpd %ymm3, %ymm6, %ymm0, %ymm02850; AVX2-NEXT:    vxorpd %ymm2, %ymm1, %ymm32851; AVX2-NEXT:    vpxor %ymm2, %ymm7, %ymm22852; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm3, %ymm22853; AVX2-NEXT:    vblendvpd %ymm2, %ymm7, %ymm1, %ymm12854; AVX2-NEXT:    retq2855;2856; AVX512-LABEL: reassociate_umin_v8i64:2857; AVX512:       # %bb.0:2858; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm02859; AVX512-NEXT:    vpminuq %zmm2, %zmm3, %zmm12860; AVX512-NEXT:    vpminuq %zmm0, %zmm1, %zmm02861; AVX512-NEXT:    retq2862 2863  %t0 = add <8 x i64> %x0, %x12864  %t1 = icmp ult <8 x i64> %x2, %t02865  %t2 = select <8 x i1> %t1, <8 x i64> %x2, <8 x i64> %t02866  %t3 = icmp ult <8 x i64> %x3, %t22867  %t4 = select <8 x i1> %t3, <8 x i64> %x3, <8 x i64> %t22868  ret <8 x i64> %t42869}2870 2871define <64 x i8> @reassociate_smin_v64i8(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, <64 x i8> %x3) {2872; SSE-LABEL: reassociate_smin_v64i8:2873; SSE:       # %bb.0:2874; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82875; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92876; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm102877; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm112878; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm122879; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm132880; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm142881; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm152882; SSE-NEXT:    paddb %xmm4, %xmm02883; SSE-NEXT:    paddb %xmm5, %xmm12884; SSE-NEXT:    paddb %xmm6, %xmm22885; SSE-NEXT:    paddb %xmm7, %xmm32886; SSE-NEXT:    movdqa %xmm3, %xmm42887; SSE-NEXT:    pcmpgtb %xmm15, %xmm42888; SSE-NEXT:    pand %xmm4, %xmm152889; SSE-NEXT:    pandn %xmm3, %xmm42890; SSE-NEXT:    por %xmm15, %xmm42891; SSE-NEXT:    movdqa %xmm2, %xmm32892; SSE-NEXT:    pcmpgtb %xmm14, %xmm32893; SSE-NEXT:    pand %xmm3, %xmm142894; SSE-NEXT:    pandn %xmm2, %xmm32895; SSE-NEXT:    por %xmm14, %xmm32896; SSE-NEXT:    movdqa %xmm1, %xmm22897; SSE-NEXT:    pcmpgtb %xmm13, %xmm22898; SSE-NEXT:    pand %xmm2, %xmm132899; SSE-NEXT:    pandn %xmm1, %xmm22900; SSE-NEXT:    por %xmm13, %xmm22901; SSE-NEXT:    movdqa %xmm0, %xmm12902; SSE-NEXT:    pcmpgtb %xmm12, %xmm12903; SSE-NEXT:    pand %xmm1, %xmm122904; SSE-NEXT:    pandn %xmm0, %xmm12905; SSE-NEXT:    por %xmm12, %xmm12906; SSE-NEXT:    movdqa %xmm1, %xmm02907; SSE-NEXT:    pcmpgtb %xmm11, %xmm02908; SSE-NEXT:    pand %xmm0, %xmm112909; SSE-NEXT:    pandn %xmm1, %xmm02910; SSE-NEXT:    por %xmm11, %xmm02911; SSE-NEXT:    movdqa %xmm2, %xmm12912; SSE-NEXT:    pcmpgtb %xmm10, %xmm12913; SSE-NEXT:    pand %xmm1, %xmm102914; SSE-NEXT:    pandn %xmm2, %xmm12915; SSE-NEXT:    por %xmm10, %xmm12916; SSE-NEXT:    movdqa %xmm3, %xmm22917; SSE-NEXT:    pcmpgtb %xmm9, %xmm22918; SSE-NEXT:    pand %xmm2, %xmm92919; SSE-NEXT:    pandn %xmm3, %xmm22920; SSE-NEXT:    por %xmm9, %xmm22921; SSE-NEXT:    movdqa %xmm4, %xmm32922; SSE-NEXT:    pcmpgtb %xmm8, %xmm32923; SSE-NEXT:    pand %xmm3, %xmm82924; SSE-NEXT:    pandn %xmm4, %xmm32925; SSE-NEXT:    por %xmm8, %xmm32926; SSE-NEXT:    retq2927;2928; AVX2-LABEL: reassociate_smin_v64i8:2929; AVX2:       # %bb.0:2930; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm02931; AVX2-NEXT:    vpaddb %ymm3, %ymm1, %ymm12932; AVX2-NEXT:    vpminsb %ymm4, %ymm6, %ymm22933; AVX2-NEXT:    vpminsb %ymm0, %ymm2, %ymm02934; AVX2-NEXT:    vpminsb %ymm5, %ymm7, %ymm22935; AVX2-NEXT:    vpminsb %ymm1, %ymm2, %ymm12936; AVX2-NEXT:    retq2937;2938; AVX512-LABEL: reassociate_smin_v64i8:2939; AVX512:       # %bb.0:2940; AVX512-NEXT:    vpaddb %zmm1, %zmm0, %zmm02941; AVX512-NEXT:    vpminsb %zmm2, %zmm3, %zmm12942; AVX512-NEXT:    vpminsb %zmm0, %zmm1, %zmm02943; AVX512-NEXT:    retq2944 2945  %t0 = add <64 x i8> %x0, %x12946  %t1 = icmp slt <64 x i8> %x2, %t02947  %t2 = select <64 x i1> %t1, <64 x i8> %x2, <64 x i8> %t02948  %t3 = icmp slt <64 x i8> %x3, %t22949  %t4 = select <64 x i1> %t3, <64 x i8> %x3, <64 x i8> %t22950  ret <64 x i8> %t42951}2952 2953define <32 x i16> @reassociate_smin_v32i16(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, <32 x i16> %x3) {2954; SSE-LABEL: reassociate_smin_v32i16:2955; SSE:       # %bb.0:2956; SSE-NEXT:    paddw %xmm4, %xmm02957; SSE-NEXT:    paddw %xmm5, %xmm12958; SSE-NEXT:    paddw %xmm6, %xmm22959; SSE-NEXT:    paddw %xmm7, %xmm32960; SSE-NEXT:    pminsw {{[0-9]+}}(%rsp), %xmm32961; SSE-NEXT:    pminsw {{[0-9]+}}(%rsp), %xmm22962; SSE-NEXT:    pminsw {{[0-9]+}}(%rsp), %xmm12963; SSE-NEXT:    pminsw {{[0-9]+}}(%rsp), %xmm02964; SSE-NEXT:    pminsw {{[0-9]+}}(%rsp), %xmm02965; SSE-NEXT:    pminsw {{[0-9]+}}(%rsp), %xmm12966; SSE-NEXT:    pminsw {{[0-9]+}}(%rsp), %xmm22967; SSE-NEXT:    pminsw {{[0-9]+}}(%rsp), %xmm32968; SSE-NEXT:    retq2969;2970; AVX2-LABEL: reassociate_smin_v32i16:2971; AVX2:       # %bb.0:2972; AVX2-NEXT:    vpaddw %ymm2, %ymm0, %ymm02973; AVX2-NEXT:    vpaddw %ymm3, %ymm1, %ymm12974; AVX2-NEXT:    vpminsw %ymm4, %ymm6, %ymm22975; AVX2-NEXT:    vpminsw %ymm0, %ymm2, %ymm02976; AVX2-NEXT:    vpminsw %ymm5, %ymm7, %ymm22977; AVX2-NEXT:    vpminsw %ymm1, %ymm2, %ymm12978; AVX2-NEXT:    retq2979;2980; AVX512-LABEL: reassociate_smin_v32i16:2981; AVX512:       # %bb.0:2982; AVX512-NEXT:    vpaddw %zmm1, %zmm0, %zmm02983; AVX512-NEXT:    vpminsw %zmm2, %zmm3, %zmm12984; AVX512-NEXT:    vpminsw %zmm0, %zmm1, %zmm02985; AVX512-NEXT:    retq2986 2987  %t0 = add <32 x i16> %x0, %x12988  %t1 = icmp slt <32 x i16> %x2, %t02989  %t2 = select <32 x i1> %t1, <32 x i16> %x2, <32 x i16> %t02990  %t3 = icmp slt <32 x i16> %x3, %t22991  %t4 = select <32 x i1> %t3, <32 x i16> %x3, <32 x i16> %t22992  ret <32 x i16> %t42993}2994 2995define <16 x i32> @reassociate_smin_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, <16 x i32> %x3) {2996; SSE-LABEL: reassociate_smin_v16i32:2997; SSE:       # %bb.0:2998; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82999; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm93000; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm103001; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm113002; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm123003; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm133004; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm143005; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm153006; SSE-NEXT:    paddd %xmm4, %xmm03007; SSE-NEXT:    paddd %xmm5, %xmm13008; SSE-NEXT:    paddd %xmm6, %xmm23009; SSE-NEXT:    paddd %xmm7, %xmm33010; SSE-NEXT:    movdqa %xmm3, %xmm43011; SSE-NEXT:    pcmpgtd %xmm15, %xmm43012; SSE-NEXT:    pand %xmm4, %xmm153013; SSE-NEXT:    pandn %xmm3, %xmm43014; SSE-NEXT:    por %xmm15, %xmm43015; SSE-NEXT:    movdqa %xmm2, %xmm33016; SSE-NEXT:    pcmpgtd %xmm14, %xmm33017; SSE-NEXT:    pand %xmm3, %xmm143018; SSE-NEXT:    pandn %xmm2, %xmm33019; SSE-NEXT:    por %xmm14, %xmm33020; SSE-NEXT:    movdqa %xmm1, %xmm23021; SSE-NEXT:    pcmpgtd %xmm13, %xmm23022; SSE-NEXT:    pand %xmm2, %xmm133023; SSE-NEXT:    pandn %xmm1, %xmm23024; SSE-NEXT:    por %xmm13, %xmm23025; SSE-NEXT:    movdqa %xmm0, %xmm13026; SSE-NEXT:    pcmpgtd %xmm12, %xmm13027; SSE-NEXT:    pand %xmm1, %xmm123028; SSE-NEXT:    pandn %xmm0, %xmm13029; SSE-NEXT:    por %xmm12, %xmm13030; SSE-NEXT:    movdqa %xmm1, %xmm03031; SSE-NEXT:    pcmpgtd %xmm11, %xmm03032; SSE-NEXT:    pand %xmm0, %xmm113033; SSE-NEXT:    pandn %xmm1, %xmm03034; SSE-NEXT:    por %xmm11, %xmm03035; SSE-NEXT:    movdqa %xmm2, %xmm13036; SSE-NEXT:    pcmpgtd %xmm10, %xmm13037; SSE-NEXT:    pand %xmm1, %xmm103038; SSE-NEXT:    pandn %xmm2, %xmm13039; SSE-NEXT:    por %xmm10, %xmm13040; SSE-NEXT:    movdqa %xmm3, %xmm23041; SSE-NEXT:    pcmpgtd %xmm9, %xmm23042; SSE-NEXT:    pand %xmm2, %xmm93043; SSE-NEXT:    pandn %xmm3, %xmm23044; SSE-NEXT:    por %xmm9, %xmm23045; SSE-NEXT:    movdqa %xmm4, %xmm33046; SSE-NEXT:    pcmpgtd %xmm8, %xmm33047; SSE-NEXT:    pand %xmm3, %xmm83048; SSE-NEXT:    pandn %xmm4, %xmm33049; SSE-NEXT:    por %xmm8, %xmm33050; SSE-NEXT:    retq3051;3052; AVX2-LABEL: reassociate_smin_v16i32:3053; AVX2:       # %bb.0:3054; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm03055; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm13056; AVX2-NEXT:    vpminsd %ymm4, %ymm6, %ymm23057; AVX2-NEXT:    vpminsd %ymm0, %ymm2, %ymm03058; AVX2-NEXT:    vpminsd %ymm5, %ymm7, %ymm23059; AVX2-NEXT:    vpminsd %ymm1, %ymm2, %ymm13060; AVX2-NEXT:    retq3061;3062; AVX512-LABEL: reassociate_smin_v16i32:3063; AVX512:       # %bb.0:3064; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm03065; AVX512-NEXT:    vpminsd %zmm2, %zmm3, %zmm13066; AVX512-NEXT:    vpminsd %zmm0, %zmm1, %zmm03067; AVX512-NEXT:    retq3068 3069  %t0 = add <16 x i32> %x0, %x13070  %t1 = icmp slt <16 x i32> %x2, %t03071  %t2 = select <16 x i1> %t1, <16 x i32> %x2, <16 x i32> %t03072  %t3 = icmp slt <16 x i32> %x3, %t23073  %t4 = select <16 x i1> %t3, <16 x i32> %x3, <16 x i32> %t23074  ret <16 x i32> %t43075}3076 3077define <8 x i64> @reassociate_smin_v8i64(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, <8 x i64> %x3) {3078; SSE-LABEL: reassociate_smin_v8i64:3079; SSE:       # %bb.0:3080; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm83081; SSE-NEXT:    paddq %xmm4, %xmm03082; SSE-NEXT:    paddq %xmm5, %xmm13083; SSE-NEXT:    paddq %xmm6, %xmm23084; SSE-NEXT:    paddq %xmm7, %xmm33085; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]3086; SSE-NEXT:    movdqa %xmm8, %xmm53087; SSE-NEXT:    pxor %xmm4, %xmm53088; SSE-NEXT:    movdqa %xmm3, %xmm63089; SSE-NEXT:    pxor %xmm4, %xmm63090; SSE-NEXT:    movdqa %xmm6, %xmm73091; SSE-NEXT:    pcmpgtd %xmm5, %xmm73092; SSE-NEXT:    pcmpeqd %xmm5, %xmm63093; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[0,0,2,2]3094; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]3095; SSE-NEXT:    pand %xmm5, %xmm63096; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm93097; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]3098; SSE-NEXT:    por %xmm6, %xmm53099; SSE-NEXT:    pand %xmm5, %xmm83100; SSE-NEXT:    pandn %xmm3, %xmm53101; SSE-NEXT:    por %xmm8, %xmm53102; SSE-NEXT:    movdqa %xmm9, %xmm33103; SSE-NEXT:    pxor %xmm4, %xmm33104; SSE-NEXT:    movdqa %xmm2, %xmm63105; SSE-NEXT:    pxor %xmm4, %xmm63106; SSE-NEXT:    movdqa %xmm6, %xmm73107; SSE-NEXT:    pcmpgtd %xmm3, %xmm73108; SSE-NEXT:    pcmpeqd %xmm3, %xmm63109; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]3110; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]3111; SSE-NEXT:    pand %xmm3, %xmm63112; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm83113; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]3114; SSE-NEXT:    por %xmm6, %xmm33115; SSE-NEXT:    pand %xmm3, %xmm93116; SSE-NEXT:    pandn %xmm2, %xmm33117; SSE-NEXT:    por %xmm9, %xmm33118; SSE-NEXT:    movdqa %xmm8, %xmm23119; SSE-NEXT:    pxor %xmm4, %xmm23120; SSE-NEXT:    movdqa %xmm1, %xmm63121; SSE-NEXT:    pxor %xmm4, %xmm63122; SSE-NEXT:    movdqa %xmm6, %xmm73123; SSE-NEXT:    pcmpgtd %xmm2, %xmm73124; SSE-NEXT:    pcmpeqd %xmm2, %xmm63125; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[0,0,2,2]3126; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]3127; SSE-NEXT:    pand %xmm2, %xmm63128; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm93129; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]3130; SSE-NEXT:    por %xmm6, %xmm23131; SSE-NEXT:    pand %xmm2, %xmm83132; SSE-NEXT:    pandn %xmm1, %xmm23133; SSE-NEXT:    por %xmm8, %xmm23134; SSE-NEXT:    movdqa %xmm9, %xmm13135; SSE-NEXT:    pxor %xmm4, %xmm13136; SSE-NEXT:    movdqa %xmm0, %xmm63137; SSE-NEXT:    pxor %xmm4, %xmm63138; SSE-NEXT:    movdqa %xmm6, %xmm73139; SSE-NEXT:    pcmpgtd %xmm1, %xmm73140; SSE-NEXT:    pcmpeqd %xmm1, %xmm63141; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]3142; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]3143; SSE-NEXT:    pand %xmm1, %xmm63144; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm13145; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]3146; SSE-NEXT:    por %xmm6, %xmm73147; SSE-NEXT:    pand %xmm7, %xmm93148; SSE-NEXT:    pandn %xmm0, %xmm73149; SSE-NEXT:    por %xmm9, %xmm73150; SSE-NEXT:    movdqa %xmm7, %xmm03151; SSE-NEXT:    pxor %xmm4, %xmm03152; SSE-NEXT:    movdqa %xmm1, %xmm63153; SSE-NEXT:    pxor %xmm4, %xmm63154; SSE-NEXT:    movdqa %xmm0, %xmm83155; SSE-NEXT:    pcmpgtd %xmm6, %xmm83156; SSE-NEXT:    pcmpeqd %xmm0, %xmm63157; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[0,0,2,2]3158; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]3159; SSE-NEXT:    pand %xmm0, %xmm63160; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm93161; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[1,1,3,3]3162; SSE-NEXT:    por %xmm6, %xmm03163; SSE-NEXT:    pand %xmm0, %xmm13164; SSE-NEXT:    pandn %xmm7, %xmm03165; SSE-NEXT:    por %xmm1, %xmm03166; SSE-NEXT:    movdqa %xmm2, %xmm13167; SSE-NEXT:    pxor %xmm4, %xmm13168; SSE-NEXT:    movdqa %xmm9, %xmm63169; SSE-NEXT:    pxor %xmm4, %xmm63170; SSE-NEXT:    movdqa %xmm1, %xmm73171; SSE-NEXT:    pcmpgtd %xmm6, %xmm73172; SSE-NEXT:    pcmpeqd %xmm1, %xmm63173; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]3174; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]3175; SSE-NEXT:    pand %xmm1, %xmm63176; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm83177; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]3178; SSE-NEXT:    por %xmm6, %xmm13179; SSE-NEXT:    pand %xmm1, %xmm93180; SSE-NEXT:    pandn %xmm2, %xmm13181; SSE-NEXT:    por %xmm9, %xmm13182; SSE-NEXT:    movdqa %xmm3, %xmm23183; SSE-NEXT:    pxor %xmm4, %xmm23184; SSE-NEXT:    movdqa %xmm8, %xmm63185; SSE-NEXT:    pxor %xmm4, %xmm63186; SSE-NEXT:    movdqa %xmm2, %xmm73187; SSE-NEXT:    pcmpgtd %xmm6, %xmm73188; SSE-NEXT:    pcmpeqd %xmm2, %xmm63189; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[0,0,2,2]3190; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]3191; SSE-NEXT:    pand %xmm2, %xmm63192; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]3193; SSE-NEXT:    por %xmm6, %xmm23194; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm63195; SSE-NEXT:    pand %xmm2, %xmm83196; SSE-NEXT:    pandn %xmm3, %xmm23197; SSE-NEXT:    por %xmm8, %xmm23198; SSE-NEXT:    movdqa %xmm5, %xmm33199; SSE-NEXT:    pxor %xmm4, %xmm33200; SSE-NEXT:    pxor %xmm6, %xmm43201; SSE-NEXT:    movdqa %xmm3, %xmm73202; SSE-NEXT:    pcmpgtd %xmm4, %xmm73203; SSE-NEXT:    pcmpeqd %xmm3, %xmm43204; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]3205; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]3206; SSE-NEXT:    pand %xmm3, %xmm43207; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]3208; SSE-NEXT:    por %xmm4, %xmm33209; SSE-NEXT:    pand %xmm3, %xmm63210; SSE-NEXT:    pandn %xmm5, %xmm33211; SSE-NEXT:    por %xmm6, %xmm33212; SSE-NEXT:    retq3213;3214; AVX2-LABEL: reassociate_smin_v8i64:3215; AVX2:       # %bb.0:3216; AVX2-NEXT:    vpaddq %ymm3, %ymm1, %ymm13217; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm1, %ymm33218; AVX2-NEXT:    vblendvpd %ymm3, %ymm5, %ymm1, %ymm13219; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm03220; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm23221; AVX2-NEXT:    vblendvpd %ymm2, %ymm4, %ymm0, %ymm03222; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm0, %ymm23223; AVX2-NEXT:    vblendvpd %ymm2, %ymm6, %ymm0, %ymm03224; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm1, %ymm23225; AVX2-NEXT:    vblendvpd %ymm2, %ymm7, %ymm1, %ymm13226; AVX2-NEXT:    retq3227;3228; AVX512-LABEL: reassociate_smin_v8i64:3229; AVX512:       # %bb.0:3230; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm03231; AVX512-NEXT:    vpminsq %zmm2, %zmm3, %zmm13232; AVX512-NEXT:    vpminsq %zmm0, %zmm1, %zmm03233; AVX512-NEXT:    retq3234 3235  %t0 = add <8 x i64> %x0, %x13236  %t1 = icmp slt <8 x i64> %x2, %t03237  %t2 = select <8 x i1> %t1, <8 x i64> %x2, <8 x i64> %t03238  %t3 = icmp slt <8 x i64> %x3, %t23239  %t4 = select <8 x i1> %t3, <8 x i64> %x3, <8 x i64> %t23240  ret <8 x i64> %t43241}3242