Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
      4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE42
      5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
      6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
      7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
      8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW
      9 
     10 ;
     11 ; Signed Maximum (GT)
     12 ;
     13 
     14 define <2 x i64> @max_gt_v2i64(<2 x i64> %a, <2 x i64> %b) {
     15 ; SSE2-LABEL: max_gt_v2i64:
     16 ; SSE2:       # BB#0:
     17 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
     18 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
     19 ; SSE2-NEXT:    pxor %xmm2, %xmm3
     20 ; SSE2-NEXT:    pxor %xmm0, %xmm2
     21 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
     22 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
     23 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
     24 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
     25 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
     26 ; SSE2-NEXT:    pand %xmm5, %xmm2
     27 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
     28 ; SSE2-NEXT:    por %xmm2, %xmm3
     29 ; SSE2-NEXT:    pand %xmm3, %xmm0
     30 ; SSE2-NEXT:    pandn %xmm1, %xmm3
     31 ; SSE2-NEXT:    por %xmm3, %xmm0
     32 ; SSE2-NEXT:    retq
     33 ;
     34 ; SSE41-LABEL: max_gt_v2i64:
     35 ; SSE41:       # BB#0:
     36 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
     37 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0]
     38 ; SSE41-NEXT:    movdqa %xmm1, %xmm3
     39 ; SSE41-NEXT:    pxor %xmm0, %xmm3
     40 ; SSE41-NEXT:    pxor %xmm2, %xmm0
     41 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
     42 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm4
     43 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
     44 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm0
     45 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
     46 ; SSE41-NEXT:    pand %xmm5, %xmm3
     47 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
     48 ; SSE41-NEXT:    por %xmm3, %xmm0
     49 ; SSE41-NEXT:    blendvpd %xmm2, %xmm1
     50 ; SSE41-NEXT:    movapd %xmm1, %xmm0
     51 ; SSE41-NEXT:    retq
     52 ;
     53 ; SSE42-LABEL: max_gt_v2i64:
     54 ; SSE42:       # BB#0:
     55 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
     56 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
     57 ; SSE42-NEXT:    blendvpd %xmm2, %xmm1
     58 ; SSE42-NEXT:    movapd %xmm1, %xmm0
     59 ; SSE42-NEXT:    retq
     60 ;
     61 ; AVX-LABEL: max_gt_v2i64:
     62 ; AVX:       # BB#0:
     63 ; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
     64 ; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
     65 ; AVX-NEXT:    retq
     66   %1 = icmp sgt <2 x i64> %a, %b
     67   %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
     68   ret <2 x i64> %2
     69 }
     70 
     71 define <4 x i64> @max_gt_v4i64(<4 x i64> %a, <4 x i64> %b) {
     72 ; SSE2-LABEL: max_gt_v4i64:
     73 ; SSE2:       # BB#0:
     74 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
     75 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
     76 ; SSE2-NEXT:    pxor %xmm4, %xmm5
     77 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
     78 ; SSE2-NEXT:    pxor %xmm4, %xmm6
     79 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
     80 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
     81 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
     82 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
     83 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
     84 ; SSE2-NEXT:    pand %xmm8, %xmm5
     85 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
     86 ; SSE2-NEXT:    por %xmm5, %xmm6
     87 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
     88 ; SSE2-NEXT:    pxor %xmm4, %xmm5
     89 ; SSE2-NEXT:    pxor %xmm0, %xmm4
     90 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
     91 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
     92 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
     93 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
     94 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
     95 ; SSE2-NEXT:    pand %xmm8, %xmm4
     96 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
     97 ; SSE2-NEXT:    por %xmm4, %xmm5
     98 ; SSE2-NEXT:    pand %xmm5, %xmm0
     99 ; SSE2-NEXT:    pandn %xmm2, %xmm5
    100 ; SSE2-NEXT:    por %xmm5, %xmm0
    101 ; SSE2-NEXT:    pand %xmm6, %xmm1
    102 ; SSE2-NEXT:    pandn %xmm3, %xmm6
    103 ; SSE2-NEXT:    por %xmm6, %xmm1
    104 ; SSE2-NEXT:    retq
    105 ;
    106 ; SSE41-LABEL: max_gt_v4i64:
    107 ; SSE41:       # BB#0:
    108 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
    109 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0]
    110 ; SSE41-NEXT:    movdqa %xmm3, %xmm5
    111 ; SSE41-NEXT:    pxor %xmm0, %xmm5
    112 ; SSE41-NEXT:    movdqa %xmm1, %xmm6
    113 ; SSE41-NEXT:    pxor %xmm0, %xmm6
    114 ; SSE41-NEXT:    movdqa %xmm6, %xmm7
    115 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm7
    116 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
    117 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm6
    118 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
    119 ; SSE41-NEXT:    pand %xmm4, %xmm6
    120 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
    121 ; SSE41-NEXT:    por %xmm6, %xmm5
    122 ; SSE41-NEXT:    movdqa %xmm2, %xmm4
    123 ; SSE41-NEXT:    pxor %xmm0, %xmm4
    124 ; SSE41-NEXT:    pxor %xmm8, %xmm0
    125 ; SSE41-NEXT:    movdqa %xmm0, %xmm6
    126 ; SSE41-NEXT:    pcmpgtd %xmm4, %xmm6
    127 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
    128 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
    129 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
    130 ; SSE41-NEXT:    pand %xmm7, %xmm4
    131 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
    132 ; SSE41-NEXT:    por %xmm4, %xmm0
    133 ; SSE41-NEXT:    blendvpd %xmm8, %xmm2
    134 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
    135 ; SSE41-NEXT:    blendvpd %xmm1, %xmm3
    136 ; SSE41-NEXT:    movapd %xmm2, %xmm0
    137 ; SSE41-NEXT:    movapd %xmm3, %xmm1
    138 ; SSE41-NEXT:    retq
    139 ;
    140 ; SSE42-LABEL: max_gt_v4i64:
    141 ; SSE42:       # BB#0:
    142 ; SSE42-NEXT:    movdqa %xmm0, %xmm4
    143 ; SSE42-NEXT:    movdqa %xmm1, %xmm5
    144 ; SSE42-NEXT:    pcmpgtq %xmm3, %xmm5
    145 ; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
    146 ; SSE42-NEXT:    blendvpd %xmm4, %xmm2
    147 ; SSE42-NEXT:    movdqa %xmm5, %xmm0
    148 ; SSE42-NEXT:    blendvpd %xmm1, %xmm3
    149 ; SSE42-NEXT:    movapd %xmm2, %xmm0
    150 ; SSE42-NEXT:    movapd %xmm3, %xmm1
    151 ; SSE42-NEXT:    retq
    152 ;
    153 ; AVX1-LABEL: max_gt_v4i64:
    154 ; AVX1:       # BB#0:
    155 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    156 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    157 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
    158 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
    159 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
    160 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    161 ; AVX1-NEXT:    retq
    162 ;
    163 ; AVX2-LABEL: max_gt_v4i64:
    164 ; AVX2:       # BB#0:
    165 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
    166 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    167 ; AVX2-NEXT:    retq
    168 ;
    169 ; AVX512-LABEL: max_gt_v4i64:
    170 ; AVX512:       # BB#0:
    171 ; AVX512-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
    172 ; AVX512-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    173 ; AVX512-NEXT:    retq
    174   %1 = icmp sgt <4 x i64> %a, %b
    175   %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
    176   ret <4 x i64> %2
    177 }
    178 
    179 define <4 x i32> @max_gt_v4i32(<4 x i32> %a, <4 x i32> %b) {
    180 ; SSE2-LABEL: max_gt_v4i32:
    181 ; SSE2:       # BB#0:
    182 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    183 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
    184 ; SSE2-NEXT:    pand %xmm2, %xmm0
    185 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    186 ; SSE2-NEXT:    por %xmm0, %xmm2
    187 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    188 ; SSE2-NEXT:    retq
    189 ;
    190 ; SSE41-LABEL: max_gt_v4i32:
    191 ; SSE41:       # BB#0:
    192 ; SSE41-NEXT:    pmaxsd %xmm1, %xmm0
    193 ; SSE41-NEXT:    retq
    194 ;
    195 ; SSE42-LABEL: max_gt_v4i32:
    196 ; SSE42:       # BB#0:
    197 ; SSE42-NEXT:    pmaxsd %xmm1, %xmm0
    198 ; SSE42-NEXT:    retq
    199 ;
    200 ; AVX-LABEL: max_gt_v4i32:
    201 ; AVX:       # BB#0:
    202 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    203 ; AVX-NEXT:    retq
    204   %1 = icmp sgt <4 x i32> %a, %b
    205   %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
    206   ret <4 x i32> %2
    207 }
    208 
    209 define <8 x i32> @max_gt_v8i32(<8 x i32> %a, <8 x i32> %b) {
    210 ; SSE2-LABEL: max_gt_v8i32:
    211 ; SSE2:       # BB#0:
    212 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
    213 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
    214 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
    215 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
    216 ; SSE2-NEXT:    pand %xmm5, %xmm0
    217 ; SSE2-NEXT:    pandn %xmm2, %xmm5
    218 ; SSE2-NEXT:    por %xmm0, %xmm5
    219 ; SSE2-NEXT:    pand %xmm4, %xmm1
    220 ; SSE2-NEXT:    pandn %xmm3, %xmm4
    221 ; SSE2-NEXT:    por %xmm1, %xmm4
    222 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
    223 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
    224 ; SSE2-NEXT:    retq
    225 ;
    226 ; SSE41-LABEL: max_gt_v8i32:
    227 ; SSE41:       # BB#0:
    228 ; SSE41-NEXT:    pmaxsd %xmm2, %xmm0
    229 ; SSE41-NEXT:    pmaxsd %xmm3, %xmm1
    230 ; SSE41-NEXT:    retq
    231 ;
    232 ; SSE42-LABEL: max_gt_v8i32:
    233 ; SSE42:       # BB#0:
    234 ; SSE42-NEXT:    pmaxsd %xmm2, %xmm0
    235 ; SSE42-NEXT:    pmaxsd %xmm3, %xmm1
    236 ; SSE42-NEXT:    retq
    237 ;
    238 ; AVX1-LABEL: max_gt_v8i32:
    239 ; AVX1:       # BB#0:
    240 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    241 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    242 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
    243 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    244 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    245 ; AVX1-NEXT:    retq
    246 ;
    247 ; AVX2-LABEL: max_gt_v8i32:
    248 ; AVX2:       # BB#0:
    249 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
    250 ; AVX2-NEXT:    retq
    251 ;
    252 ; AVX512-LABEL: max_gt_v8i32:
    253 ; AVX512:       # BB#0:
    254 ; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
    255 ; AVX512-NEXT:    retq
    256   %1 = icmp sgt <8 x i32> %a, %b
    257   %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
    258   ret <8 x i32> %2
    259 }
    260 
    261 define <8 x i16> @max_gt_v8i16(<8 x i16> %a, <8 x i16> %b) {
    262 ; SSE-LABEL: max_gt_v8i16:
    263 ; SSE:       # BB#0:
    264 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
    265 ; SSE-NEXT:    retq
    266 ;
    267 ; AVX-LABEL: max_gt_v8i16:
    268 ; AVX:       # BB#0:
    269 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    270 ; AVX-NEXT:    retq
    271   %1 = icmp sgt <8 x i16> %a, %b
    272   %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
    273   ret <8 x i16> %2
    274 }
    275 
    276 define <16 x i16> @max_gt_v16i16(<16 x i16> %a, <16 x i16> %b) {
    277 ; SSE-LABEL: max_gt_v16i16:
    278 ; SSE:       # BB#0:
    279 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
    280 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
    281 ; SSE-NEXT:    retq
    282 ;
    283 ; AVX1-LABEL: max_gt_v16i16:
    284 ; AVX1:       # BB#0:
    285 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    286 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    287 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
    288 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    289 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    290 ; AVX1-NEXT:    retq
    291 ;
    292 ; AVX2-LABEL: max_gt_v16i16:
    293 ; AVX2:       # BB#0:
    294 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    295 ; AVX2-NEXT:    retq
    296 ;
    297 ; AVX512-LABEL: max_gt_v16i16:
    298 ; AVX512:       # BB#0:
    299 ; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    300 ; AVX512-NEXT:    retq
    301   %1 = icmp sgt <16 x i16> %a, %b
    302   %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
    303   ret <16 x i16> %2
    304 }
    305 
    306 define <16 x i8> @max_gt_v16i8(<16 x i8> %a, <16 x i8> %b) {
    307 ; SSE2-LABEL: max_gt_v16i8:
    308 ; SSE2:       # BB#0:
    309 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    310 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
    311 ; SSE2-NEXT:    pand %xmm2, %xmm0
    312 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    313 ; SSE2-NEXT:    por %xmm0, %xmm2
    314 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    315 ; SSE2-NEXT:    retq
    316 ;
    317 ; SSE41-LABEL: max_gt_v16i8:
    318 ; SSE41:       # BB#0:
    319 ; SSE41-NEXT:    pmaxsb %xmm1, %xmm0
    320 ; SSE41-NEXT:    retq
    321 ;
    322 ; SSE42-LABEL: max_gt_v16i8:
    323 ; SSE42:       # BB#0:
    324 ; SSE42-NEXT:    pmaxsb %xmm1, %xmm0
    325 ; SSE42-NEXT:    retq
    326 ;
    327 ; AVX-LABEL: max_gt_v16i8:
    328 ; AVX:       # BB#0:
    329 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    330 ; AVX-NEXT:    retq
    331   %1 = icmp sgt <16 x i8> %a, %b
    332   %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
    333   ret <16 x i8> %2
    334 }
    335 
    336 define <32 x i8> @max_gt_v32i8(<32 x i8> %a, <32 x i8> %b) {
    337 ; SSE2-LABEL: max_gt_v32i8:
    338 ; SSE2:       # BB#0:
    339 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
    340 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
    341 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
    342 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
    343 ; SSE2-NEXT:    pand %xmm5, %xmm0
    344 ; SSE2-NEXT:    pandn %xmm2, %xmm5
    345 ; SSE2-NEXT:    por %xmm0, %xmm5
    346 ; SSE2-NEXT:    pand %xmm4, %xmm1
    347 ; SSE2-NEXT:    pandn %xmm3, %xmm4
    348 ; SSE2-NEXT:    por %xmm1, %xmm4
    349 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
    350 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
    351 ; SSE2-NEXT:    retq
    352 ;
    353 ; SSE41-LABEL: max_gt_v32i8:
    354 ; SSE41:       # BB#0:
    355 ; SSE41-NEXT:    pmaxsb %xmm2, %xmm0
    356 ; SSE41-NEXT:    pmaxsb %xmm3, %xmm1
    357 ; SSE41-NEXT:    retq
    358 ;
    359 ; SSE42-LABEL: max_gt_v32i8:
    360 ; SSE42:       # BB#0:
    361 ; SSE42-NEXT:    pmaxsb %xmm2, %xmm0
    362 ; SSE42-NEXT:    pmaxsb %xmm3, %xmm1
    363 ; SSE42-NEXT:    retq
    364 ;
    365 ; AVX1-LABEL: max_gt_v32i8:
    366 ; AVX1:       # BB#0:
    367 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    368 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    369 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
    370 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    371 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    372 ; AVX1-NEXT:    retq
    373 ;
    374 ; AVX2-LABEL: max_gt_v32i8:
    375 ; AVX2:       # BB#0:
    376 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    377 ; AVX2-NEXT:    retq
    378 ;
    379 ; AVX512-LABEL: max_gt_v32i8:
    380 ; AVX512:       # BB#0:
    381 ; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    382 ; AVX512-NEXT:    retq
    383   %1 = icmp sgt <32 x i8> %a, %b
    384   %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
    385   ret <32 x i8> %2
    386 }
    387 
    388 ;
    389 ; Signed Maximum (GE)
    390 ;
    391 
    392 define <2 x i64> @max_ge_v2i64(<2 x i64> %a, <2 x i64> %b) {
    393 ; SSE2-LABEL: max_ge_v2i64:
    394 ; SSE2:       # BB#0:
    395 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
    396 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
    397 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    398 ; SSE2-NEXT:    pxor %xmm1, %xmm2
    399 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
    400 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
    401 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
    402 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
    403 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
    404 ; SSE2-NEXT:    pand %xmm5, %xmm2
    405 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
    406 ; SSE2-NEXT:    por %xmm2, %xmm3
    407 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
    408 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    409 ; SSE2-NEXT:    pandn %xmm0, %xmm3
    410 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    411 ; SSE2-NEXT:    por %xmm3, %xmm2
    412 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    413 ; SSE2-NEXT:    retq
    414 ;
    415 ; SSE41-LABEL: max_ge_v2i64:
    416 ; SSE41:       # BB#0:
    417 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
    418 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0]
    419 ; SSE41-NEXT:    movdqa %xmm2, %xmm3
    420 ; SSE41-NEXT:    pxor %xmm0, %xmm3
    421 ; SSE41-NEXT:    pxor %xmm1, %xmm0
    422 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
    423 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm4
    424 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
    425 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm0
    426 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
    427 ; SSE41-NEXT:    pand %xmm5, %xmm0
    428 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
    429 ; SSE41-NEXT:    por %xmm0, %xmm3
    430 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
    431 ; SSE41-NEXT:    pxor %xmm3, %xmm0
    432 ; SSE41-NEXT:    blendvpd %xmm2, %xmm1
    433 ; SSE41-NEXT:    movapd %xmm1, %xmm0
    434 ; SSE41-NEXT:    retq
    435 ;
    436 ; SSE42-LABEL: max_ge_v2i64:
    437 ; SSE42:       # BB#0:
    438 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
    439 ; SSE42-NEXT:    movdqa %xmm1, %xmm3
    440 ; SSE42-NEXT:    pcmpgtq %xmm2, %xmm3
    441 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm0
    442 ; SSE42-NEXT:    pxor %xmm3, %xmm0
    443 ; SSE42-NEXT:    blendvpd %xmm2, %xmm1
    444 ; SSE42-NEXT:    movapd %xmm1, %xmm0
    445 ; SSE42-NEXT:    retq
    446 ;
    447 ; AVX-LABEL: max_ge_v2i64:
    448 ; AVX:       # BB#0:
    449 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
    450 ; AVX-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
    451 ; AVX-NEXT:    vpxor %xmm3, %xmm2, %xmm2
    452 ; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
    453 ; AVX-NEXT:    retq
    454   %1 = icmp sge <2 x i64> %a, %b
    455   %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
    456   ret <2 x i64> %2
    457 }
    458 
    459 define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) {
    460 ; SSE2-LABEL: max_ge_v4i64:
    461 ; SSE2:       # BB#0:
    462 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
    463 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
    464 ; SSE2-NEXT:    pxor %xmm7, %xmm4
    465 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
    466 ; SSE2-NEXT:    pxor %xmm7, %xmm5
    467 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
    468 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
    469 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
    470 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
    471 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
    472 ; SSE2-NEXT:    pand %xmm8, %xmm4
    473 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
    474 ; SSE2-NEXT:    por %xmm4, %xmm8
    475 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
    476 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
    477 ; SSE2-NEXT:    pxor %xmm4, %xmm9
    478 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
    479 ; SSE2-NEXT:    pxor %xmm7, %xmm6
    480 ; SSE2-NEXT:    pxor %xmm2, %xmm7
    481 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
    482 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
    483 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
    484 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
    485 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
    486 ; SSE2-NEXT:    pand %xmm10, %xmm6
    487 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
    488 ; SSE2-NEXT:    por %xmm6, %xmm5
    489 ; SSE2-NEXT:    pxor %xmm5, %xmm4
    490 ; SSE2-NEXT:    pandn %xmm0, %xmm5
    491 ; SSE2-NEXT:    pandn %xmm2, %xmm4
    492 ; SSE2-NEXT:    por %xmm5, %xmm4
    493 ; SSE2-NEXT:    pandn %xmm1, %xmm8
    494 ; SSE2-NEXT:    pandn %xmm3, %xmm9
    495 ; SSE2-NEXT:    por %xmm8, %xmm9
    496 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    497 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
    498 ; SSE2-NEXT:    retq
    499 ;
    500 ; SSE41-LABEL: max_ge_v4i64:
    501 ; SSE41:       # BB#0:
    502 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
    503 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0]
    504 ; SSE41-NEXT:    movdqa %xmm1, %xmm5
    505 ; SSE41-NEXT:    pxor %xmm0, %xmm5
    506 ; SSE41-NEXT:    movdqa %xmm3, %xmm6
    507 ; SSE41-NEXT:    pxor %xmm0, %xmm6
    508 ; SSE41-NEXT:    movdqa %xmm6, %xmm7
    509 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm7
    510 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
    511 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm6
    512 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
    513 ; SSE41-NEXT:    pand %xmm4, %xmm6
    514 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
    515 ; SSE41-NEXT:    por %xmm6, %xmm5
    516 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm9
    517 ; SSE41-NEXT:    pxor %xmm9, %xmm5
    518 ; SSE41-NEXT:    movdqa %xmm8, %xmm6
    519 ; SSE41-NEXT:    pxor %xmm0, %xmm6
    520 ; SSE41-NEXT:    pxor %xmm2, %xmm0
    521 ; SSE41-NEXT:    movdqa %xmm0, %xmm7
    522 ; SSE41-NEXT:    pcmpgtd %xmm6, %xmm7
    523 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
    524 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
    525 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    526 ; SSE41-NEXT:    pand %xmm4, %xmm6
    527 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
    528 ; SSE41-NEXT:    por %xmm6, %xmm0
    529 ; SSE41-NEXT:    pxor %xmm9, %xmm0
    530 ; SSE41-NEXT:    blendvpd %xmm8, %xmm2
    531 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
    532 ; SSE41-NEXT:    blendvpd %xmm1, %xmm3
    533 ; SSE41-NEXT:    movapd %xmm2, %xmm0
    534 ; SSE41-NEXT:    movapd %xmm3, %xmm1
    535 ; SSE41-NEXT:    retq
    536 ;
    537 ; SSE42-LABEL: max_ge_v4i64:
    538 ; SSE42:       # BB#0:
    539 ; SSE42-NEXT:    movdqa %xmm0, %xmm4
    540 ; SSE42-NEXT:    movdqa %xmm3, %xmm5
    541 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm5
    542 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm0
    543 ; SSE42-NEXT:    pxor %xmm0, %xmm5
    544 ; SSE42-NEXT:    movdqa %xmm2, %xmm6
    545 ; SSE42-NEXT:    pcmpgtq %xmm4, %xmm6
    546 ; SSE42-NEXT:    pxor %xmm6, %xmm0
    547 ; SSE42-NEXT:    blendvpd %xmm4, %xmm2
    548 ; SSE42-NEXT:    movdqa %xmm5, %xmm0
    549 ; SSE42-NEXT:    blendvpd %xmm1, %xmm3
    550 ; SSE42-NEXT:    movapd %xmm2, %xmm0
    551 ; SSE42-NEXT:    movapd %xmm3, %xmm1
    552 ; SSE42-NEXT:    retq
    553 ;
    554 ; AVX1-LABEL: max_ge_v4i64:
    555 ; AVX1:       # BB#0:
    556 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    557 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
    558 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
    559 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
    560 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
    561 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm4
    562 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
    563 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
    564 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    565 ; AVX1-NEXT:    retq
    566 ;
    567 ; AVX2-LABEL: max_ge_v4i64:
    568 ; AVX2:       # BB#0:
    569 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
    570 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
    571 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
    572 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    573 ; AVX2-NEXT:    retq
    574 ;
    575 ; AVX512-LABEL: max_ge_v4i64:
    576 ; AVX512:       # BB#0:
    577 ; AVX512-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
    578 ; AVX512-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
    579 ; AVX512-NEXT:    vpxor %ymm3, %ymm2, %ymm2
    580 ; AVX512-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    581 ; AVX512-NEXT:    retq
    582   %1 = icmp sge <4 x i64> %a, %b
    583   %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
    584   ret <4 x i64> %2
    585 }
    586 
    587 define <4 x i32> @max_ge_v4i32(<4 x i32> %a, <4 x i32> %b) {
    588 ; SSE2-LABEL: max_ge_v4i32:
    589 ; SSE2:       # BB#0:
    590 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    591 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
    592 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
    593 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    594 ; SSE2-NEXT:    pandn %xmm0, %xmm3
    595 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    596 ; SSE2-NEXT:    por %xmm3, %xmm2
    597 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    598 ; SSE2-NEXT:    retq
    599 ;
    600 ; SSE41-LABEL: max_ge_v4i32:
    601 ; SSE41:       # BB#0:
    602 ; SSE41-NEXT:    pmaxsd %xmm1, %xmm0
    603 ; SSE41-NEXT:    retq
    604 ;
    605 ; SSE42-LABEL: max_ge_v4i32:
    606 ; SSE42:       # BB#0:
    607 ; SSE42-NEXT:    pmaxsd %xmm1, %xmm0
    608 ; SSE42-NEXT:    retq
    609 ;
    610 ; AVX-LABEL: max_ge_v4i32:
    611 ; AVX:       # BB#0:
    612 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    613 ; AVX-NEXT:    retq
    614   %1 = icmp sge <4 x i32> %a, %b
    615   %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
    616   ret <4 x i32> %2
    617 }
    618 
    619 define <8 x i32> @max_ge_v8i32(<8 x i32> %a, <8 x i32> %b) {
    620 ; SSE2-LABEL: max_ge_v8i32:
    621 ; SSE2:       # BB#0:
    622 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
    623 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
    624 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
    625 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
    626 ; SSE2-NEXT:    pxor %xmm4, %xmm5
    627 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
    628 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm7
    629 ; SSE2-NEXT:    pxor %xmm7, %xmm4
    630 ; SSE2-NEXT:    pandn %xmm0, %xmm7
    631 ; SSE2-NEXT:    pandn %xmm2, %xmm4
    632 ; SSE2-NEXT:    por %xmm7, %xmm4
    633 ; SSE2-NEXT:    pandn %xmm1, %xmm6
    634 ; SSE2-NEXT:    pandn %xmm3, %xmm5
    635 ; SSE2-NEXT:    por %xmm6, %xmm5
    636 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    637 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
    638 ; SSE2-NEXT:    retq
    639 ;
    640 ; SSE41-LABEL: max_ge_v8i32:
    641 ; SSE41:       # BB#0:
    642 ; SSE41-NEXT:    pmaxsd %xmm2, %xmm0
    643 ; SSE41-NEXT:    pmaxsd %xmm3, %xmm1
    644 ; SSE41-NEXT:    retq
    645 ;
    646 ; SSE42-LABEL: max_ge_v8i32:
    647 ; SSE42:       # BB#0:
    648 ; SSE42-NEXT:    pmaxsd %xmm2, %xmm0
    649 ; SSE42-NEXT:    pmaxsd %xmm3, %xmm1
    650 ; SSE42-NEXT:    retq
    651 ;
    652 ; AVX1-LABEL: max_ge_v8i32:
    653 ; AVX1:       # BB#0:
    654 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    655 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    656 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
    657 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    658 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    659 ; AVX1-NEXT:    retq
    660 ;
    661 ; AVX2-LABEL: max_ge_v8i32:
    662 ; AVX2:       # BB#0:
    663 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
    664 ; AVX2-NEXT:    retq
    665 ;
    666 ; AVX512-LABEL: max_ge_v8i32:
    667 ; AVX512:       # BB#0:
    668 ; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
    669 ; AVX512-NEXT:    retq
    670   %1 = icmp sge <8 x i32> %a, %b
    671   %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
    672   ret <8 x i32> %2
    673 }
    674 
    675 define <8 x i16> @max_ge_v8i16(<8 x i16> %a, <8 x i16> %b) {
    676 ; SSE-LABEL: max_ge_v8i16:
    677 ; SSE:       # BB#0:
    678 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
    679 ; SSE-NEXT:    retq
    680 ;
    681 ; AVX-LABEL: max_ge_v8i16:
    682 ; AVX:       # BB#0:
    683 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    684 ; AVX-NEXT:    retq
    685   %1 = icmp sge <8 x i16> %a, %b
    686   %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
    687   ret <8 x i16> %2
    688 }
    689 
    690 define <16 x i16> @max_ge_v16i16(<16 x i16> %a, <16 x i16> %b) {
    691 ; SSE-LABEL: max_ge_v16i16:
    692 ; SSE:       # BB#0:
    693 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
    694 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
    695 ; SSE-NEXT:    retq
    696 ;
    697 ; AVX1-LABEL: max_ge_v16i16:
    698 ; AVX1:       # BB#0:
    699 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    700 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    701 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
    702 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    703 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    704 ; AVX1-NEXT:    retq
    705 ;
    706 ; AVX2-LABEL: max_ge_v16i16:
    707 ; AVX2:       # BB#0:
    708 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    709 ; AVX2-NEXT:    retq
    710 ;
    711 ; AVX512-LABEL: max_ge_v16i16:
    712 ; AVX512:       # BB#0:
    713 ; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    714 ; AVX512-NEXT:    retq
    715   %1 = icmp sge <16 x i16> %a, %b
    716   %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
    717   ret <16 x i16> %2
    718 }
    719 
    720 define <16 x i8> @max_ge_v16i8(<16 x i8> %a, <16 x i8> %b) {
    721 ; SSE2-LABEL: max_ge_v16i8:
    722 ; SSE2:       # BB#0:
    723 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    724 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm3
    725 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
    726 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    727 ; SSE2-NEXT:    pandn %xmm0, %xmm3
    728 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    729 ; SSE2-NEXT:    por %xmm3, %xmm2
    730 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    731 ; SSE2-NEXT:    retq
    732 ;
    733 ; SSE41-LABEL: max_ge_v16i8:
    734 ; SSE41:       # BB#0:
    735 ; SSE41-NEXT:    pmaxsb %xmm1, %xmm0
    736 ; SSE41-NEXT:    retq
    737 ;
    738 ; SSE42-LABEL: max_ge_v16i8:
    739 ; SSE42:       # BB#0:
    740 ; SSE42-NEXT:    pmaxsb %xmm1, %xmm0
    741 ; SSE42-NEXT:    retq
    742 ;
    743 ; AVX-LABEL: max_ge_v16i8:
    744 ; AVX:       # BB#0:
    745 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    746 ; AVX-NEXT:    retq
    747   %1 = icmp sge <16 x i8> %a, %b
    748   %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
    749   ret <16 x i8> %2
    750 }
    751 
    752 define <32 x i8> @max_ge_v32i8(<32 x i8> %a, <32 x i8> %b) {
    753 ; SSE2-LABEL: max_ge_v32i8:
    754 ; SSE2:       # BB#0:
    755 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
    756 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm6
    757 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
    758 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
    759 ; SSE2-NEXT:    pxor %xmm4, %xmm5
    760 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
    761 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm7
    762 ; SSE2-NEXT:    pxor %xmm7, %xmm4
    763 ; SSE2-NEXT:    pandn %xmm0, %xmm7
    764 ; SSE2-NEXT:    pandn %xmm2, %xmm4
    765 ; SSE2-NEXT:    por %xmm7, %xmm4
    766 ; SSE2-NEXT:    pandn %xmm1, %xmm6
    767 ; SSE2-NEXT:    pandn %xmm3, %xmm5
    768 ; SSE2-NEXT:    por %xmm6, %xmm5
    769 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    770 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
    771 ; SSE2-NEXT:    retq
    772 ;
    773 ; SSE41-LABEL: max_ge_v32i8:
    774 ; SSE41:       # BB#0:
    775 ; SSE41-NEXT:    pmaxsb %xmm2, %xmm0
    776 ; SSE41-NEXT:    pmaxsb %xmm3, %xmm1
    777 ; SSE41-NEXT:    retq
    778 ;
    779 ; SSE42-LABEL: max_ge_v32i8:
    780 ; SSE42:       # BB#0:
    781 ; SSE42-NEXT:    pmaxsb %xmm2, %xmm0
    782 ; SSE42-NEXT:    pmaxsb %xmm3, %xmm1
    783 ; SSE42-NEXT:    retq
    784 ;
    785 ; AVX1-LABEL: max_ge_v32i8:
    786 ; AVX1:       # BB#0:
    787 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    788 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    789 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
    790 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    791 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    792 ; AVX1-NEXT:    retq
    793 ;
    794 ; AVX2-LABEL: max_ge_v32i8:
    795 ; AVX2:       # BB#0:
    796 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    797 ; AVX2-NEXT:    retq
    798 ;
    799 ; AVX512-LABEL: max_ge_v32i8:
    800 ; AVX512:       # BB#0:
    801 ; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    802 ; AVX512-NEXT:    retq
    803   %1 = icmp sge <32 x i8> %a, %b
    804   %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
    805   ret <32 x i8> %2
    806 }
    807 
    808 ;
    809 ; Signed Minimum (LT)
    810 ;
    811 
    812 define <2 x i64> @min_lt_v2i64(<2 x i64> %a, <2 x i64> %b) {
    813 ; SSE2-LABEL: min_lt_v2i64:
    814 ; SSE2:       # BB#0:
    815 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
    816 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
    817 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    818 ; SSE2-NEXT:    pxor %xmm1, %xmm2
    819 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
    820 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
    821 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
    822 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
    823 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
    824 ; SSE2-NEXT:    pand %xmm5, %xmm2
    825 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
    826 ; SSE2-NEXT:    por %xmm2, %xmm3
    827 ; SSE2-NEXT:    pand %xmm3, %xmm0
    828 ; SSE2-NEXT:    pandn %xmm1, %xmm3
    829 ; SSE2-NEXT:    por %xmm3, %xmm0
    830 ; SSE2-NEXT:    retq
    831 ;
    832 ; SSE41-LABEL: min_lt_v2i64:
    833 ; SSE41:       # BB#0:
    834 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
    835 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0]
    836 ; SSE41-NEXT:    movdqa %xmm2, %xmm3
    837 ; SSE41-NEXT:    pxor %xmm0, %xmm3
    838 ; SSE41-NEXT:    pxor %xmm1, %xmm0
    839 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
    840 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm4
    841 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
    842 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm0
    843 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
    844 ; SSE41-NEXT:    pand %xmm5, %xmm3
    845 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
    846 ; SSE41-NEXT:    por %xmm3, %xmm0
    847 ; SSE41-NEXT:    blendvpd %xmm2, %xmm1
    848 ; SSE41-NEXT:    movapd %xmm1, %xmm0
    849 ; SSE41-NEXT:    retq
    850 ;
    851 ; SSE42-LABEL: min_lt_v2i64:
    852 ; SSE42:       # BB#0:
    853 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
    854 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
    855 ; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
    856 ; SSE42-NEXT:    blendvpd %xmm2, %xmm1
    857 ; SSE42-NEXT:    movapd %xmm1, %xmm0
    858 ; SSE42-NEXT:    retq
    859 ;
    860 ; AVX-LABEL: min_lt_v2i64:
    861 ; AVX:       # BB#0:
    862 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
    863 ; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
    864 ; AVX-NEXT:    retq
    865   %1 = icmp slt <2 x i64> %a, %b
    866   %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
    867   ret <2 x i64> %2
    868 }
    869 
    870 define <4 x i64> @min_lt_v4i64(<4 x i64> %a, <4 x i64> %b) {
    871 ; SSE2-LABEL: min_lt_v4i64:
    872 ; SSE2:       # BB#0:
    873 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
    874 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
    875 ; SSE2-NEXT:    pxor %xmm4, %xmm5
    876 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
    877 ; SSE2-NEXT:    pxor %xmm4, %xmm6
    878 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
    879 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
    880 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
    881 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
    882 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
    883 ; SSE2-NEXT:    pand %xmm8, %xmm5
    884 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
    885 ; SSE2-NEXT:    por %xmm5, %xmm6
    886 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
    887 ; SSE2-NEXT:    pxor %xmm4, %xmm5
    888 ; SSE2-NEXT:    pxor %xmm2, %xmm4
    889 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
    890 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
    891 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
    892 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
    893 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
    894 ; SSE2-NEXT:    pand %xmm8, %xmm4
    895 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
    896 ; SSE2-NEXT:    por %xmm4, %xmm5
    897 ; SSE2-NEXT:    pand %xmm5, %xmm0
    898 ; SSE2-NEXT:    pandn %xmm2, %xmm5
    899 ; SSE2-NEXT:    por %xmm5, %xmm0
    900 ; SSE2-NEXT:    pand %xmm6, %xmm1
    901 ; SSE2-NEXT:    pandn %xmm3, %xmm6
    902 ; SSE2-NEXT:    por %xmm6, %xmm1
    903 ; SSE2-NEXT:    retq
    904 ;
    905 ; SSE41-LABEL: min_lt_v4i64:
    906 ; SSE41:       # BB#0:
    907 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
    908 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0]
    909 ; SSE41-NEXT:    movdqa %xmm1, %xmm5
    910 ; SSE41-NEXT:    pxor %xmm0, %xmm5
    911 ; SSE41-NEXT:    movdqa %xmm3, %xmm6
    912 ; SSE41-NEXT:    pxor %xmm0, %xmm6
    913 ; SSE41-NEXT:    movdqa %xmm6, %xmm7
    914 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm7
    915 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
    916 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm6
    917 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
    918 ; SSE41-NEXT:    pand %xmm4, %xmm6
    919 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
    920 ; SSE41-NEXT:    por %xmm6, %xmm5
    921 ; SSE41-NEXT:    movdqa %xmm8, %xmm4
    922 ; SSE41-NEXT:    pxor %xmm0, %xmm4
    923 ; SSE41-NEXT:    pxor %xmm2, %xmm0
    924 ; SSE41-NEXT:    movdqa %xmm0, %xmm6
    925 ; SSE41-NEXT:    pcmpgtd %xmm4, %xmm6
    926 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
    927 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
    928 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
    929 ; SSE41-NEXT:    pand %xmm7, %xmm4
    930 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
    931 ; SSE41-NEXT:    por %xmm4, %xmm0
    932 ; SSE41-NEXT:    blendvpd %xmm8, %xmm2
    933 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
    934 ; SSE41-NEXT:    blendvpd %xmm1, %xmm3
    935 ; SSE41-NEXT:    movapd %xmm2, %xmm0
    936 ; SSE41-NEXT:    movapd %xmm3, %xmm1
    937 ; SSE41-NEXT:    retq
    938 ;
    939 ; SSE42-LABEL: min_lt_v4i64:
    940 ; SSE42:       # BB#0:
    941 ; SSE42-NEXT:    movdqa %xmm0, %xmm4
    942 ; SSE42-NEXT:    movdqa %xmm3, %xmm5
    943 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm5
    944 ; SSE42-NEXT:    movdqa %xmm2, %xmm0
    945 ; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0
    946 ; SSE42-NEXT:    blendvpd %xmm4, %xmm2
    947 ; SSE42-NEXT:    movdqa %xmm5, %xmm0
    948 ; SSE42-NEXT:    blendvpd %xmm1, %xmm3
    949 ; SSE42-NEXT:    movapd %xmm2, %xmm0
    950 ; SSE42-NEXT:    movapd %xmm3, %xmm1
    951 ; SSE42-NEXT:    retq
    952 ;
    953 ; AVX1-LABEL: min_lt_v4i64:
    954 ; AVX1:       # BB#0:
    955 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    956 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
    957 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
    958 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
    959 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
    960 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    961 ; AVX1-NEXT:    retq
    962 ;
    963 ; AVX2-LABEL: min_lt_v4i64:
    964 ; AVX2:       # BB#0:
    965 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
    966 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    967 ; AVX2-NEXT:    retq
    968 ;
    969 ; AVX512-LABEL: min_lt_v4i64:
    970 ; AVX512:       # BB#0:
    971 ; AVX512-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
    972 ; AVX512-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    973 ; AVX512-NEXT:    retq
    974   %1 = icmp slt <4 x i64> %a, %b
    975   %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
    976   ret <4 x i64> %2
    977 }
    978 
    979 define <4 x i32> @min_lt_v4i32(<4 x i32> %a, <4 x i32> %b) {
    980 ; SSE2-LABEL: min_lt_v4i32:
    981 ; SSE2:       # BB#0:
    982 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    983 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
    984 ; SSE2-NEXT:    pand %xmm2, %xmm0
    985 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    986 ; SSE2-NEXT:    por %xmm2, %xmm0
    987 ; SSE2-NEXT:    retq
    988 ;
    989 ; SSE41-LABEL: min_lt_v4i32:
    990 ; SSE41:       # BB#0:
    991 ; SSE41-NEXT:    pminsd %xmm1, %xmm0
    992 ; SSE41-NEXT:    retq
    993 ;
    994 ; SSE42-LABEL: min_lt_v4i32:
    995 ; SSE42:       # BB#0:
    996 ; SSE42-NEXT:    pminsd %xmm1, %xmm0
    997 ; SSE42-NEXT:    retq
    998 ;
    999 ; AVX-LABEL: min_lt_v4i32:
   1000 ; AVX:       # BB#0:
   1001 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1002 ; AVX-NEXT:    retq
   1003   %1 = icmp slt <4 x i32> %a, %b
   1004   %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
   1005   ret <4 x i32> %2
   1006 }
   1007 
   1008 define <8 x i32> @min_lt_v8i32(<8 x i32> %a, <8 x i32> %b) {
   1009 ; SSE2-LABEL: min_lt_v8i32:
   1010 ; SSE2:       # BB#0:
   1011 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1012 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   1013 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   1014 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   1015 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1016 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1017 ; SSE2-NEXT:    por %xmm5, %xmm0
   1018 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1019 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1020 ; SSE2-NEXT:    por %xmm4, %xmm1
   1021 ; SSE2-NEXT:    retq
   1022 ;
   1023 ; SSE41-LABEL: min_lt_v8i32:
   1024 ; SSE41:       # BB#0:
   1025 ; SSE41-NEXT:    pminsd %xmm2, %xmm0
   1026 ; SSE41-NEXT:    pminsd %xmm3, %xmm1
   1027 ; SSE41-NEXT:    retq
   1028 ;
   1029 ; SSE42-LABEL: min_lt_v8i32:
   1030 ; SSE42:       # BB#0:
   1031 ; SSE42-NEXT:    pminsd %xmm2, %xmm0
   1032 ; SSE42-NEXT:    pminsd %xmm3, %xmm1
   1033 ; SSE42-NEXT:    retq
   1034 ;
   1035 ; AVX1-LABEL: min_lt_v8i32:
   1036 ; AVX1:       # BB#0:
   1037 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1038 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1039 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   1040 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1041 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1042 ; AVX1-NEXT:    retq
   1043 ;
   1044 ; AVX2-LABEL: min_lt_v8i32:
   1045 ; AVX2:       # BB#0:
   1046 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1047 ; AVX2-NEXT:    retq
   1048 ;
   1049 ; AVX512-LABEL: min_lt_v8i32:
   1050 ; AVX512:       # BB#0:
   1051 ; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1052 ; AVX512-NEXT:    retq
   1053   %1 = icmp slt <8 x i32> %a, %b
   1054   %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
   1055   ret <8 x i32> %2
   1056 }
   1057 
   1058 define <8 x i16> @min_lt_v8i16(<8 x i16> %a, <8 x i16> %b) {
   1059 ; SSE-LABEL: min_lt_v8i16:
   1060 ; SSE:       # BB#0:
   1061 ; SSE-NEXT:    pminsw %xmm1, %xmm0
   1062 ; SSE-NEXT:    retq
   1063 ;
   1064 ; AVX-LABEL: min_lt_v8i16:
   1065 ; AVX:       # BB#0:
   1066 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1067 ; AVX-NEXT:    retq
   1068   %1 = icmp slt <8 x i16> %a, %b
   1069   %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
   1070   ret <8 x i16> %2
   1071 }
   1072 
   1073 define <16 x i16> @min_lt_v16i16(<16 x i16> %a, <16 x i16> %b) {
   1074 ; SSE-LABEL: min_lt_v16i16:
   1075 ; SSE:       # BB#0:
   1076 ; SSE-NEXT:    pminsw %xmm2, %xmm0
   1077 ; SSE-NEXT:    pminsw %xmm3, %xmm1
   1078 ; SSE-NEXT:    retq
   1079 ;
   1080 ; AVX1-LABEL: min_lt_v16i16:
   1081 ; AVX1:       # BB#0:
   1082 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1083 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1084 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
   1085 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1086 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1087 ; AVX1-NEXT:    retq
   1088 ;
   1089 ; AVX2-LABEL: min_lt_v16i16:
   1090 ; AVX2:       # BB#0:
   1091 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   1092 ; AVX2-NEXT:    retq
   1093 ;
   1094 ; AVX512-LABEL: min_lt_v16i16:
   1095 ; AVX512:       # BB#0:
   1096 ; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   1097 ; AVX512-NEXT:    retq
   1098   %1 = icmp slt <16 x i16> %a, %b
   1099   %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
   1100   ret <16 x i16> %2
   1101 }
   1102 
   1103 define <16 x i8> @min_lt_v16i8(<16 x i8> %a, <16 x i8> %b) {
   1104 ; SSE2-LABEL: min_lt_v16i8:
   1105 ; SSE2:       # BB#0:
   1106 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1107 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
   1108 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1109 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1110 ; SSE2-NEXT:    por %xmm2, %xmm0
   1111 ; SSE2-NEXT:    retq
   1112 ;
   1113 ; SSE41-LABEL: min_lt_v16i8:
   1114 ; SSE41:       # BB#0:
   1115 ; SSE41-NEXT:    pminsb %xmm1, %xmm0
   1116 ; SSE41-NEXT:    retq
   1117 ;
   1118 ; SSE42-LABEL: min_lt_v16i8:
   1119 ; SSE42:       # BB#0:
   1120 ; SSE42-NEXT:    pminsb %xmm1, %xmm0
   1121 ; SSE42-NEXT:    retq
   1122 ;
   1123 ; AVX-LABEL: min_lt_v16i8:
   1124 ; AVX:       # BB#0:
   1125 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1126 ; AVX-NEXT:    retq
   1127   %1 = icmp slt <16 x i8> %a, %b
   1128   %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
   1129   ret <16 x i8> %2
   1130 }
   1131 
   1132 define <32 x i8> @min_lt_v32i8(<32 x i8> %a, <32 x i8> %b) {
   1133 ; SSE2-LABEL: min_lt_v32i8:
   1134 ; SSE2:       # BB#0:
   1135 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1136 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
   1137 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   1138 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm5
   1139 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1140 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1141 ; SSE2-NEXT:    por %xmm5, %xmm0
   1142 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1143 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1144 ; SSE2-NEXT:    por %xmm4, %xmm1
   1145 ; SSE2-NEXT:    retq
   1146 ;
   1147 ; SSE41-LABEL: min_lt_v32i8:
   1148 ; SSE41:       # BB#0:
   1149 ; SSE41-NEXT:    pminsb %xmm2, %xmm0
   1150 ; SSE41-NEXT:    pminsb %xmm3, %xmm1
   1151 ; SSE41-NEXT:    retq
   1152 ;
   1153 ; SSE42-LABEL: min_lt_v32i8:
   1154 ; SSE42:       # BB#0:
   1155 ; SSE42-NEXT:    pminsb %xmm2, %xmm0
   1156 ; SSE42-NEXT:    pminsb %xmm3, %xmm1
   1157 ; SSE42-NEXT:    retq
   1158 ;
   1159 ; AVX1-LABEL: min_lt_v32i8:
   1160 ; AVX1:       # BB#0:
   1161 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1162 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1163 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
   1164 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1165 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1166 ; AVX1-NEXT:    retq
   1167 ;
   1168 ; AVX2-LABEL: min_lt_v32i8:
   1169 ; AVX2:       # BB#0:
   1170 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   1171 ; AVX2-NEXT:    retq
   1172 ;
   1173 ; AVX512-LABEL: min_lt_v32i8:
   1174 ; AVX512:       # BB#0:
   1175 ; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   1176 ; AVX512-NEXT:    retq
   1177   %1 = icmp slt <32 x i8> %a, %b
   1178   %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
   1179   ret <32 x i8> %2
   1180 }
   1181 
   1182 ;
   1183 ; Signed Minimum (LE)
   1184 ;
   1185 
   1186 define <2 x i64> @min_le_v2i64(<2 x i64> %a, <2 x i64> %b) {
   1187 ; SSE2-LABEL: min_le_v2i64:
   1188 ; SSE2:       # BB#0:
   1189 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   1190 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1191 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1192 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   1193 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   1194 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   1195 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1196 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   1197 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   1198 ; SSE2-NEXT:    pand %xmm5, %xmm2
   1199 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   1200 ; SSE2-NEXT:    por %xmm2, %xmm3
   1201 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   1202 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   1203 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   1204 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1205 ; SSE2-NEXT:    por %xmm3, %xmm2
   1206 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1207 ; SSE2-NEXT:    retq
   1208 ;
   1209 ; SSE41-LABEL: min_le_v2i64:
   1210 ; SSE41:       # BB#0:
   1211 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
   1212 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0]
   1213 ; SSE41-NEXT:    movdqa %xmm1, %xmm3
   1214 ; SSE41-NEXT:    pxor %xmm0, %xmm3
   1215 ; SSE41-NEXT:    pxor %xmm2, %xmm0
   1216 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
   1217 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm4
   1218 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1219 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm0
   1220 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   1221 ; SSE41-NEXT:    pand %xmm5, %xmm0
   1222 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   1223 ; SSE41-NEXT:    por %xmm0, %xmm3
   1224 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
   1225 ; SSE41-NEXT:    pxor %xmm3, %xmm0
   1226 ; SSE41-NEXT:    blendvpd %xmm2, %xmm1
   1227 ; SSE41-NEXT:    movapd %xmm1, %xmm0
   1228 ; SSE41-NEXT:    retq
   1229 ;
   1230 ; SSE42-LABEL: min_le_v2i64:
   1231 ; SSE42:       # BB#0:
   1232 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
   1233 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
   1234 ; SSE42-NEXT:    pcmpeqd %xmm3, %xmm3
   1235 ; SSE42-NEXT:    pxor %xmm3, %xmm0
   1236 ; SSE42-NEXT:    blendvpd %xmm2, %xmm1
   1237 ; SSE42-NEXT:    movapd %xmm1, %xmm0
   1238 ; SSE42-NEXT:    retq
   1239 ;
   1240 ; AVX-LABEL: min_le_v2i64:
   1241 ; AVX:       # BB#0:
   1242 ; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   1243 ; AVX-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   1244 ; AVX-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   1245 ; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   1246 ; AVX-NEXT:    retq
   1247   %1 = icmp sle <2 x i64> %a, %b
   1248   %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
   1249   ret <2 x i64> %2
   1250 }
   1251 
   1252 define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) {
   1253 ; SSE2-LABEL: min_le_v4i64:
   1254 ; SSE2:       # BB#0:
   1255 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
   1256 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1257 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   1258 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   1259 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   1260 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   1261 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   1262 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   1263 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   1264 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   1265 ; SSE2-NEXT:    pand %xmm8, %xmm4
   1266 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   1267 ; SSE2-NEXT:    por %xmm4, %xmm8
   1268 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   1269 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   1270 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   1271 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1272 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   1273 ; SSE2-NEXT:    pxor %xmm0, %xmm7
   1274 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   1275 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   1276 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   1277 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   1278 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   1279 ; SSE2-NEXT:    pand %xmm10, %xmm6
   1280 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   1281 ; SSE2-NEXT:    por %xmm6, %xmm5
   1282 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   1283 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   1284 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1285 ; SSE2-NEXT:    por %xmm5, %xmm4
   1286 ; SSE2-NEXT:    pandn %xmm1, %xmm8
   1287 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   1288 ; SSE2-NEXT:    por %xmm8, %xmm9
   1289 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1290 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   1291 ; SSE2-NEXT:    retq
   1292 ;
   1293 ; SSE41-LABEL: min_le_v4i64:
   1294 ; SSE41:       # BB#0:
   1295 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
   1296 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0]
   1297 ; SSE41-NEXT:    movdqa %xmm3, %xmm5
   1298 ; SSE41-NEXT:    pxor %xmm0, %xmm5
   1299 ; SSE41-NEXT:    movdqa %xmm1, %xmm6
   1300 ; SSE41-NEXT:    pxor %xmm0, %xmm6
   1301 ; SSE41-NEXT:    movdqa %xmm6, %xmm7
   1302 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm7
   1303 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
   1304 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm6
   1305 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   1306 ; SSE41-NEXT:    pand %xmm4, %xmm6
   1307 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   1308 ; SSE41-NEXT:    por %xmm6, %xmm5
   1309 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm9
   1310 ; SSE41-NEXT:    pxor %xmm9, %xmm5
   1311 ; SSE41-NEXT:    movdqa %xmm2, %xmm6
   1312 ; SSE41-NEXT:    pxor %xmm0, %xmm6
   1313 ; SSE41-NEXT:    pxor %xmm8, %xmm0
   1314 ; SSE41-NEXT:    movdqa %xmm0, %xmm7
   1315 ; SSE41-NEXT:    pcmpgtd %xmm6, %xmm7
   1316 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
   1317 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
   1318 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1319 ; SSE41-NEXT:    pand %xmm4, %xmm6
   1320 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
   1321 ; SSE41-NEXT:    por %xmm6, %xmm0
   1322 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   1323 ; SSE41-NEXT:    blendvpd %xmm8, %xmm2
   1324 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
   1325 ; SSE41-NEXT:    blendvpd %xmm1, %xmm3
   1326 ; SSE41-NEXT:    movapd %xmm2, %xmm0
   1327 ; SSE41-NEXT:    movapd %xmm3, %xmm1
   1328 ; SSE41-NEXT:    retq
   1329 ;
   1330 ; SSE42-LABEL: min_le_v4i64:
   1331 ; SSE42:       # BB#0:
   1332 ; SSE42-NEXT:    movdqa %xmm0, %xmm4
   1333 ; SSE42-NEXT:    movdqa %xmm1, %xmm5
   1334 ; SSE42-NEXT:    pcmpgtq %xmm3, %xmm5
   1335 ; SSE42-NEXT:    pcmpeqd %xmm6, %xmm6
   1336 ; SSE42-NEXT:    pxor %xmm6, %xmm5
   1337 ; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
   1338 ; SSE42-NEXT:    pxor %xmm6, %xmm0
   1339 ; SSE42-NEXT:    blendvpd %xmm4, %xmm2
   1340 ; SSE42-NEXT:    movdqa %xmm5, %xmm0
   1341 ; SSE42-NEXT:    blendvpd %xmm1, %xmm3
   1342 ; SSE42-NEXT:    movapd %xmm2, %xmm0
   1343 ; SSE42-NEXT:    movapd %xmm3, %xmm1
   1344 ; SSE42-NEXT:    retq
   1345 ;
   1346 ; AVX1-LABEL: min_le_v4i64:
   1347 ; AVX1:       # BB#0:
   1348 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1349 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1350 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   1351 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   1352 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   1353 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm4
   1354 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
   1355 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   1356 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   1357 ; AVX1-NEXT:    retq
   1358 ;
   1359 ; AVX2-LABEL: min_le_v4i64:
   1360 ; AVX2:       # BB#0:
   1361 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   1362 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   1363 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   1364 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   1365 ; AVX2-NEXT:    retq
   1366 ;
   1367 ; AVX512-LABEL: min_le_v4i64:
   1368 ; AVX512:       # BB#0:
   1369 ; AVX512-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   1370 ; AVX512-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   1371 ; AVX512-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   1372 ; AVX512-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   1373 ; AVX512-NEXT:    retq
   1374   %1 = icmp sle <4 x i64> %a, %b
   1375   %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
   1376   ret <4 x i64> %2
   1377 }
   1378 
   1379 define <4 x i32> @min_le_v4i32(<4 x i32> %a, <4 x i32> %b) {
   1380 ; SSE2-LABEL: min_le_v4i32:
   1381 ; SSE2:       # BB#0:
   1382 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1383 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   1384 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
   1385 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1386 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1387 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   1388 ; SSE2-NEXT:    por %xmm3, %xmm2
   1389 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1390 ; SSE2-NEXT:    retq
   1391 ;
   1392 ; SSE41-LABEL: min_le_v4i32:
   1393 ; SSE41:       # BB#0:
   1394 ; SSE41-NEXT:    pminsd %xmm1, %xmm0
   1395 ; SSE41-NEXT:    retq
   1396 ;
   1397 ; SSE42-LABEL: min_le_v4i32:
   1398 ; SSE42:       # BB#0:
   1399 ; SSE42-NEXT:    pminsd %xmm1, %xmm0
   1400 ; SSE42-NEXT:    retq
   1401 ;
   1402 ; AVX-LABEL: min_le_v4i32:
   1403 ; AVX:       # BB#0:
   1404 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1405 ; AVX-NEXT:    retq
   1406   %1 = icmp sle <4 x i32> %a, %b
   1407   %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
   1408   ret <4 x i32> %2
   1409 }
   1410 
   1411 define <8 x i32> @min_le_v8i32(<8 x i32> %a, <8 x i32> %b) {
   1412 ; SSE2-LABEL: min_le_v8i32:
   1413 ; SSE2:       # BB#0:
   1414 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   1415 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
   1416 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
   1417 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   1418 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   1419 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1420 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   1421 ; SSE2-NEXT:    pxor %xmm5, %xmm7
   1422 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   1423 ; SSE2-NEXT:    pandn %xmm2, %xmm7
   1424 ; SSE2-NEXT:    por %xmm7, %xmm5
   1425 ; SSE2-NEXT:    pandn %xmm1, %xmm6
   1426 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1427 ; SSE2-NEXT:    por %xmm6, %xmm4
   1428 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   1429 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1430 ; SSE2-NEXT:    retq
   1431 ;
   1432 ; SSE41-LABEL: min_le_v8i32:
   1433 ; SSE41:       # BB#0:
   1434 ; SSE41-NEXT:    pminsd %xmm2, %xmm0
   1435 ; SSE41-NEXT:    pminsd %xmm3, %xmm1
   1436 ; SSE41-NEXT:    retq
   1437 ;
   1438 ; SSE42-LABEL: min_le_v8i32:
   1439 ; SSE42:       # BB#0:
   1440 ; SSE42-NEXT:    pminsd %xmm2, %xmm0
   1441 ; SSE42-NEXT:    pminsd %xmm3, %xmm1
   1442 ; SSE42-NEXT:    retq
   1443 ;
   1444 ; AVX1-LABEL: min_le_v8i32:
   1445 ; AVX1:       # BB#0:
   1446 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1447 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1448 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   1449 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1450 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1451 ; AVX1-NEXT:    retq
   1452 ;
   1453 ; AVX2-LABEL: min_le_v8i32:
   1454 ; AVX2:       # BB#0:
   1455 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1456 ; AVX2-NEXT:    retq
   1457 ;
   1458 ; AVX512-LABEL: min_le_v8i32:
   1459 ; AVX512:       # BB#0:
   1460 ; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1461 ; AVX512-NEXT:    retq
   1462   %1 = icmp sle <8 x i32> %a, %b
   1463   %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
   1464   ret <8 x i32> %2
   1465 }
   1466 
   1467 define <8 x i16> @min_le_v8i16(<8 x i16> %a, <8 x i16> %b) {
   1468 ; SSE-LABEL: min_le_v8i16:
   1469 ; SSE:       # BB#0:
   1470 ; SSE-NEXT:    pminsw %xmm1, %xmm0
   1471 ; SSE-NEXT:    retq
   1472 ;
   1473 ; AVX-LABEL: min_le_v8i16:
   1474 ; AVX:       # BB#0:
   1475 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1476 ; AVX-NEXT:    retq
   1477   %1 = icmp sle <8 x i16> %a, %b
   1478   %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
   1479   ret <8 x i16> %2
   1480 }
   1481 
   1482 define <16 x i16> @min_le_v16i16(<16 x i16> %a, <16 x i16> %b) {
   1483 ; SSE-LABEL: min_le_v16i16:
   1484 ; SSE:       # BB#0:
   1485 ; SSE-NEXT:    pminsw %xmm2, %xmm0
   1486 ; SSE-NEXT:    pminsw %xmm3, %xmm1
   1487 ; SSE-NEXT:    retq
   1488 ;
   1489 ; AVX1-LABEL: min_le_v16i16:
   1490 ; AVX1:       # BB#0:
   1491 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1492 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1493 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
   1494 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1495 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1496 ; AVX1-NEXT:    retq
   1497 ;
   1498 ; AVX2-LABEL: min_le_v16i16:
   1499 ; AVX2:       # BB#0:
   1500 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   1501 ; AVX2-NEXT:    retq
   1502 ;
   1503 ; AVX512-LABEL: min_le_v16i16:
   1504 ; AVX512:       # BB#0:
   1505 ; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   1506 ; AVX512-NEXT:    retq
   1507   %1 = icmp sle <16 x i16> %a, %b
   1508   %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
   1509   ret <16 x i16> %2
   1510 }
   1511 
   1512 define <16 x i8> @min_le_v16i8(<16 x i8> %a, <16 x i8> %b) {
   1513 ; SSE2-LABEL: min_le_v16i8:
   1514 ; SSE2:       # BB#0:
   1515 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1516 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
   1517 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
   1518 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1519 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1520 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   1521 ; SSE2-NEXT:    por %xmm3, %xmm2
   1522 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1523 ; SSE2-NEXT:    retq
   1524 ;
   1525 ; SSE41-LABEL: min_le_v16i8:
   1526 ; SSE41:       # BB#0:
   1527 ; SSE41-NEXT:    pminsb %xmm1, %xmm0
   1528 ; SSE41-NEXT:    retq
   1529 ;
   1530 ; SSE42-LABEL: min_le_v16i8:
   1531 ; SSE42:       # BB#0:
   1532 ; SSE42-NEXT:    pminsb %xmm1, %xmm0
   1533 ; SSE42-NEXT:    retq
   1534 ;
   1535 ; AVX-LABEL: min_le_v16i8:
   1536 ; AVX:       # BB#0:
   1537 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1538 ; AVX-NEXT:    retq
   1539   %1 = icmp sle <16 x i8> %a, %b
   1540   %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
   1541   ret <16 x i8> %2
   1542 }
   1543 
   1544 define <32 x i8> @min_le_v32i8(<32 x i8> %a, <32 x i8> %b) {
   1545 ; SSE2-LABEL: min_le_v32i8:
   1546 ; SSE2:       # BB#0:
   1547 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   1548 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm6
   1549 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
   1550 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   1551 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   1552 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1553 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
   1554 ; SSE2-NEXT:    pxor %xmm5, %xmm7
   1555 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   1556 ; SSE2-NEXT:    pandn %xmm2, %xmm7
   1557 ; SSE2-NEXT:    por %xmm7, %xmm5
   1558 ; SSE2-NEXT:    pandn %xmm1, %xmm6
   1559 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1560 ; SSE2-NEXT:    por %xmm6, %xmm4
   1561 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   1562 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1563 ; SSE2-NEXT:    retq
   1564 ;
   1565 ; SSE41-LABEL: min_le_v32i8:
   1566 ; SSE41:       # BB#0:
   1567 ; SSE41-NEXT:    pminsb %xmm2, %xmm0
   1568 ; SSE41-NEXT:    pminsb %xmm3, %xmm1
   1569 ; SSE41-NEXT:    retq
   1570 ;
   1571 ; SSE42-LABEL: min_le_v32i8:
   1572 ; SSE42:       # BB#0:
   1573 ; SSE42-NEXT:    pminsb %xmm2, %xmm0
   1574 ; SSE42-NEXT:    pminsb %xmm3, %xmm1
   1575 ; SSE42-NEXT:    retq
   1576 ;
   1577 ; AVX1-LABEL: min_le_v32i8:
   1578 ; AVX1:       # BB#0:
   1579 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1580 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1581 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
   1582 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1583 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1584 ; AVX1-NEXT:    retq
   1585 ;
   1586 ; AVX2-LABEL: min_le_v32i8:
   1587 ; AVX2:       # BB#0:
   1588 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   1589 ; AVX2-NEXT:    retq
   1590 ;
   1591 ; AVX512-LABEL: min_le_v32i8:
   1592 ; AVX512:       # BB#0:
   1593 ; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   1594 ; AVX512-NEXT:    retq
   1595   %1 = icmp sle <32 x i8> %a, %b
   1596   %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
   1597   ret <32 x i8> %2
   1598 }
   1599 
   1600 ;
   1601 ; Constant Folding
   1602 ;
   1603 
   1604 define <2 x i64> @max_gt_v2i64c() {
   1605 ; SSE-LABEL: max_gt_v2i64c:
   1606 ; SSE:       # BB#0:
   1607 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551615,7]
   1608 ; SSE-NEXT:    retq
   1609 ;
   1610 ; AVX-LABEL: max_gt_v2i64c:
   1611 ; AVX:       # BB#0:
   1612 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]
   1613 ; AVX-NEXT:    retq
   1614   %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
   1615   %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
   1616   %3 = icmp sgt <2 x i64> %1, %2
   1617   %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
   1618   ret <2 x i64> %4
   1619 }
   1620 
   1621 define <4 x i64> @max_gt_v4i64c() {
   1622 ; SSE-LABEL: max_gt_v4i64c:
   1623 ; SSE:       # BB#0:
   1624 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,7]
   1625 ; SSE-NEXT:    pcmpeqd %xmm0, %xmm0
   1626 ; SSE-NEXT:    retq
   1627 ;
   1628 ; AVX-LABEL: max_gt_v4i64c:
   1629 ; AVX:       # BB#0:
   1630 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]
   1631 ; AVX-NEXT:    retq
   1632   %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
   1633   %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
   1634   %3 = icmp sgt <4 x i64> %1, %2
   1635   %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
   1636   ret <4 x i64> %4
   1637 }
   1638 
   1639 define <4 x i32> @max_gt_v4i32c() {
   1640 ; SSE-LABEL: max_gt_v4i32c:
   1641 ; SSE:       # BB#0:
   1642 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
   1643 ; SSE-NEXT:    retq
   1644 ;
   1645 ; AVX-LABEL: max_gt_v4i32c:
   1646 ; AVX:       # BB#0:
   1647 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
   1648 ; AVX-NEXT:    retq
   1649   %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
   1650   %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
   1651   %3 = icmp sgt <4 x i32> %1, %2
   1652   %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
   1653   ret <4 x i32> %4
   1654 }
   1655 
   1656 define <8 x i32> @max_gt_v8i32c() {
   1657 ; SSE-LABEL: max_gt_v8i32c:
   1658 ; SSE:       # BB#0:
   1659 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]
   1660 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,5,5,7]
   1661 ; SSE-NEXT:    retq
   1662 ;
   1663 ; AVX-LABEL: max_gt_v8i32c:
   1664 ; AVX:       # BB#0:
   1665 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]
   1666 ; AVX-NEXT:    retq
   1667   %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0
   1668   %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0
   1669   %3 = icmp sgt <8 x i32> %1, %2
   1670   %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
   1671   ret <8 x i32> %4
   1672 }
   1673 
   1674 define <8 x i16> @max_gt_v8i16c() {
   1675 ; SSE-LABEL: max_gt_v8i16c:
   1676 ; SSE:       # BB#0:
   1677 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
   1678 ; SSE-NEXT:    retq
   1679 ;
   1680 ; AVX-LABEL: max_gt_v8i16c:
   1681 ; AVX:       # BB#0:
   1682 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
   1683 ; AVX-NEXT:    retq
   1684   %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0
   1685   %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0
   1686   %3 = icmp sgt <8 x i16> %1, %2
   1687   %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
   1688   ret <8 x i16> %4
   1689 }
   1690 
   1691 define <16 x i16> @max_gt_v16i16c() {
   1692 ; SSE-LABEL: max_gt_v16i16c:
   1693 ; SSE:       # BB#0:
   1694 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]
   1695 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]
   1696 ; SSE-NEXT:    retq
   1697 ;
   1698 ; AVX-LABEL: max_gt_v16i16c:
   1699 ; AVX:       # BB#0:
   1700 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]
   1701 ; AVX-NEXT:    retq
   1702   %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0
   1703   %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0
   1704   %3 = icmp sgt <16 x i16> %1, %2
   1705   %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
   1706   ret <16 x i16> %4
   1707 }
   1708 
   1709 define <16 x i8> @max_gt_v16i8c() {
   1710 ; SSE-LABEL: max_gt_v16i8c:
   1711 ; SSE:       # BB#0:
   1712 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
   1713 ; SSE-NEXT:    retq
   1714 ;
   1715 ; AVX-LABEL: max_gt_v16i8c:
   1716 ; AVX:       # BB#0:
   1717 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
   1718 ; AVX-NEXT:    retq
   1719   %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0
   1720   %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0
   1721   %3 = icmp sgt <16 x i8> %1, %2
   1722   %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
   1723   ret <16 x i8> %4
   1724 }
   1725 
   1726 define <2 x i64> @max_ge_v2i64c() {
   1727 ; SSE-LABEL: max_ge_v2i64c:
   1728 ; SSE:       # BB#0:
   1729 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551615,7]
   1730 ; SSE-NEXT:    retq
   1731 ;
   1732 ; AVX-LABEL: max_ge_v2i64c:
   1733 ; AVX:       # BB#0:
   1734 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]
   1735 ; AVX-NEXT:    retq
   1736   %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
   1737   %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
   1738   %3 = icmp sge <2 x i64> %1, %2
   1739   %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
   1740   ret <2 x i64> %4
   1741 }
   1742 
   1743 define <4 x i64> @max_ge_v4i64c() {
   1744 ; SSE-LABEL: max_ge_v4i64c:
   1745 ; SSE:       # BB#0:
   1746 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,7]
   1747 ; SSE-NEXT:    pcmpeqd %xmm0, %xmm0
   1748 ; SSE-NEXT:    retq
   1749 ;
   1750 ; AVX-LABEL: max_ge_v4i64c:
   1751 ; AVX:       # BB#0:
   1752 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]
   1753 ; AVX-NEXT:    retq
   1754   %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
   1755   %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
   1756   %3 = icmp sge <4 x i64> %1, %2
   1757   %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
   1758   ret <4 x i64> %4
   1759 }
   1760 
   1761 define <4 x i32> @max_ge_v4i32c() {
   1762 ; SSE-LABEL: max_ge_v4i32c:
   1763 ; SSE:       # BB#0:
   1764 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
   1765 ; SSE-NEXT:    retq
   1766 ;
   1767 ; AVX-LABEL: max_ge_v4i32c:
   1768 ; AVX:       # BB#0:
   1769 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
   1770 ; AVX-NEXT:    retq
   1771   %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
   1772   %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
   1773   %3 = icmp sge <4 x i32> %1, %2
   1774   %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
   1775   ret <4 x i32> %4
   1776 }
   1777 
   1778 define <8 x i32> @max_ge_v8i32c() {
   1779 ; SSE-LABEL: max_ge_v8i32c:
   1780 ; SSE:       # BB#0:
   1781 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]
   1782 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,5,5,7]
   1783 ; SSE-NEXT:    retq
   1784 ;
   1785 ; AVX-LABEL: max_ge_v8i32c:
   1786 ; AVX:       # BB#0:
   1787 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]
   1788 ; AVX-NEXT:    retq
   1789   %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0
   1790   %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0
   1791   %3 = icmp sge <8 x i32> %1, %2
   1792   %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
   1793   ret <8 x i32> %4
   1794 }
   1795 
   1796 define <8 x i16> @max_ge_v8i16c() {
   1797 ; SSE-LABEL: max_ge_v8i16c:
   1798 ; SSE:       # BB#0:
   1799 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
   1800 ; SSE-NEXT:    retq
   1801 ;
   1802 ; AVX-LABEL: max_ge_v8i16c:
   1803 ; AVX:       # BB#0:
   1804 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
   1805 ; AVX-NEXT:    retq
   1806   %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0
   1807   %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0
   1808   %3 = icmp sge <8 x i16> %1, %2
   1809   %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
   1810   ret <8 x i16> %4
   1811 }
   1812 
   1813 define <16 x i16> @max_ge_v16i16c() {
   1814 ; SSE-LABEL: max_ge_v16i16c:
   1815 ; SSE:       # BB#0:
   1816 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]
   1817 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]
   1818 ; SSE-NEXT:    retq
   1819 ;
   1820 ; AVX-LABEL: max_ge_v16i16c:
   1821 ; AVX:       # BB#0:
   1822 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]
   1823 ; AVX-NEXT:    retq
   1824   %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0
   1825   %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0
   1826   %3 = icmp sge <16 x i16> %1, %2
   1827   %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
   1828   ret <16 x i16> %4
   1829 }
   1830 
   1831 define <16 x i8> @max_ge_v16i8c() {
   1832 ; SSE-LABEL: max_ge_v16i8c:
   1833 ; SSE:       # BB#0:
   1834 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
   1835 ; SSE-NEXT:    retq
   1836 ;
   1837 ; AVX-LABEL: max_ge_v16i8c:
   1838 ; AVX:       # BB#0:
   1839 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
   1840 ; AVX-NEXT:    retq
   1841   %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0
   1842   %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0
   1843   %3 = icmp sge <16 x i8> %1, %2
   1844   %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
   1845   ret <16 x i8> %4
   1846 }
   1847 
   1848 define <2 x i64> @min_lt_v2i64c() {
   1849 ; SSE-LABEL: min_lt_v2i64c:
   1850 ; SSE:       # BB#0:
   1851 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551609,1]
   1852 ; SSE-NEXT:    retq
   1853 ;
   1854 ; AVX-LABEL: min_lt_v2i64c:
   1855 ; AVX:       # BB#0:
   1856 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]
   1857 ; AVX-NEXT:    retq
   1858   %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
   1859   %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
   1860   %3 = icmp slt <2 x i64> %1, %2
   1861   %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
   1862   ret <2 x i64> %4
   1863 }
   1864 
   1865 define <4 x i64> @min_lt_v4i64c() {
   1866 ; SSE-LABEL: min_lt_v4i64c:
   1867 ; SSE:       # BB#0:
   1868 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]
   1869 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,1]
   1870 ; SSE-NEXT:    retq
   1871 ;
   1872 ; AVX-LABEL: min_lt_v4i64c:
   1873 ; AVX:       # BB#0:
   1874 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]
   1875 ; AVX-NEXT:    retq
   1876   %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
   1877   %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
   1878   %3 = icmp slt <4 x i64> %1, %2
   1879   %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
   1880   ret <4 x i64> %4
   1881 }
   1882 
   1883 define <4 x i32> @min_lt_v4i32c() {
   1884 ; SSE-LABEL: min_lt_v4i32c:
   1885 ; SSE:       # BB#0:
   1886 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
   1887 ; SSE-NEXT:    retq
   1888 ;
   1889 ; AVX-LABEL: min_lt_v4i32c:
   1890 ; AVX:       # BB#0:
   1891 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
   1892 ; AVX-NEXT:    retq
   1893   %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
   1894   %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
   1895   %3 = icmp slt <4 x i32> %1, %2
   1896   %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
   1897   ret <4 x i32> %4
   1898 }
   1899 
   1900 define <8 x i32> @min_lt_v8i32c() {
   1901 ; SSE-LABEL: min_lt_v8i32c:
   1902 ; SSE:       # BB#0:
   1903 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]
   1904 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,3,3,1]
   1905 ; SSE-NEXT:    retq
   1906 ;
   1907 ; AVX-LABEL: min_lt_v8i32c:
   1908 ; AVX:       # BB#0:
   1909 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]
   1910 ; AVX-NEXT:    retq
   1911   %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0
   1912   %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0
   1913   %3 = icmp slt <8 x i32> %1, %2
   1914   %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
   1915   ret <8 x i32> %4
   1916 }
   1917 
   1918 define <8 x i16> @min_lt_v8i16c() {
   1919 ; SSE-LABEL: min_lt_v8i16c:
   1920 ; SSE:       # BB#0:
   1921 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
   1922 ; SSE-NEXT:    retq
   1923 ;
   1924 ; AVX-LABEL: min_lt_v8i16c:
   1925 ; AVX:       # BB#0:
   1926 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
   1927 ; AVX-NEXT:    retq
   1928   %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0
   1929   %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0
   1930   %3 = icmp slt <8 x i16> %1, %2
   1931   %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
   1932   ret <8 x i16> %4
   1933 }
   1934 
   1935 define <16 x i16> @min_lt_v16i16c() {
   1936 ; SSE-LABEL: min_lt_v16i16c:
   1937 ; SSE:       # BB#0:
   1938 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65529,65530,65531,65532,65531,65530,65529,0]
   1939 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]
   1940 ; SSE-NEXT:    retq
   1941 ;
   1942 ; AVX-LABEL: min_lt_v16i16c:
   1943 ; AVX:       # BB#0:
   1944 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [65529,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]
   1945 ; AVX-NEXT:    retq
   1946   %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0
   1947   %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0
   1948   %3 = icmp slt <16 x i16> %1, %2
   1949   %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
   1950   ret <16 x i16> %4
   1951 }
   1952 
   1953 define <16 x i8> @min_lt_v16i8c() {
   1954 ; SSE-LABEL: min_lt_v16i8c:
   1955 ; SSE:       # BB#0:
   1956 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
   1957 ; SSE-NEXT:    retq
   1958 ;
   1959 ; AVX-LABEL: min_lt_v16i8c:
   1960 ; AVX:       # BB#0:
   1961 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
   1962 ; AVX-NEXT:    retq
   1963   %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0
   1964   %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0
   1965   %3 = icmp slt <16 x i8> %1, %2
   1966   %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
   1967   ret <16 x i8> %4
   1968 }
   1969 
   1970 define <2 x i64> @min_le_v2i64c() {
   1971 ; SSE-LABEL: min_le_v2i64c:
   1972 ; SSE:       # BB#0:
   1973 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551609,1]
   1974 ; SSE-NEXT:    retq
   1975 ;
   1976 ; AVX-LABEL: min_le_v2i64c:
   1977 ; AVX:       # BB#0:
   1978 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]
   1979 ; AVX-NEXT:    retq
   1980   %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
   1981   %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
   1982   %3 = icmp sle <2 x i64> %1, %2
   1983   %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
   1984   ret <2 x i64> %4
   1985 }
   1986 
   1987 define <4 x i64> @min_le_v4i64c() {
   1988 ; SSE-LABEL: min_le_v4i64c:
   1989 ; SSE:       # BB#0:
   1990 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]
   1991 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,1]
   1992 ; SSE-NEXT:    retq
   1993 ;
   1994 ; AVX-LABEL: min_le_v4i64c:
   1995 ; AVX:       # BB#0:
   1996 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]
   1997 ; AVX-NEXT:    retq
   1998   %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
   1999   %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
   2000   %3 = icmp sle <4 x i64> %1, %2
   2001   %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
   2002   ret <4 x i64> %4
   2003 }
   2004 
   2005 define <4 x i32> @min_le_v4i32c() {
   2006 ; SSE-LABEL: min_le_v4i32c:
   2007 ; SSE:       # BB#0:
   2008 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
   2009 ; SSE-NEXT:    retq
   2010 ;
   2011 ; AVX-LABEL: min_le_v4i32c:
   2012 ; AVX:       # BB#0:
   2013 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
   2014 ; AVX-NEXT:    retq
   2015   %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
   2016   %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
   2017   %3 = icmp sle <4 x i32> %1, %2
   2018   %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
   2019   ret <4 x i32> %4
   2020 }
   2021 
   2022 define <8 x i32> @min_le_v8i32c() {
   2023 ; SSE-LABEL: min_le_v8i32c:
   2024 ; SSE:       # BB#0:
   2025 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]
   2026 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,3,3,1]
   2027 ; SSE-NEXT:    retq
   2028 ;
   2029 ; AVX-LABEL: min_le_v8i32c:
   2030 ; AVX:       # BB#0:
   2031 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]
   2032 ; AVX-NEXT:    retq
   2033   %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0
   2034   %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0
   2035   %3 = icmp sle <8 x i32> %1, %2
   2036   %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
   2037   ret <8 x i32> %4
   2038 }
   2039 
   2040 define <8 x i16> @min_le_v8i16c() {
   2041 ; SSE-LABEL: min_le_v8i16c:
   2042 ; SSE:       # BB#0:
   2043 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
   2044 ; SSE-NEXT:    retq
   2045 ;
   2046 ; AVX-LABEL: min_le_v8i16c:
   2047 ; AVX:       # BB#0:
   2048 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
   2049 ; AVX-NEXT:    retq
   2050   %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0
   2051   %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0
   2052   %3 = icmp sle <8 x i16> %1, %2
   2053   %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
   2054   ret <8 x i16> %4
   2055 }
   2056 
   2057 define <16 x i16> @min_le_v16i16c() {
   2058 ; SSE-LABEL: min_le_v16i16c:
   2059 ; SSE:       # BB#0:
   2060 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65529,65530,65531,65532,65531,65530,65529,0]
   2061 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]
   2062 ; SSE-NEXT:    retq
   2063 ;
   2064 ; AVX-LABEL: min_le_v16i16c:
   2065 ; AVX:       # BB#0:
   2066 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [65529,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]
   2067 ; AVX-NEXT:    retq
   2068   %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0
   2069   %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0
   2070   %3 = icmp sle <16 x i16> %1, %2
   2071   %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
   2072   ret <16 x i16> %4
   2073 }
   2074 
   2075 define <16 x i8> @min_le_v16i8c() {
   2076 ; SSE-LABEL: min_le_v16i8c:
   2077 ; SSE:       # BB#0:
   2078 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
   2079 ; SSE-NEXT:    retq
   2080 ;
   2081 ; AVX-LABEL: min_le_v16i8c:
   2082 ; AVX:       # BB#0:
   2083 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
   2084 ; AVX-NEXT:    retq
   2085   %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0
   2086   %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0
   2087   %3 = icmp sle <16 x i8> %1, %2
   2088   %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
   2089   ret <16 x i8> %4
   2090 }
   2091