Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE4
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
      4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
      5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F
      6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F --check-prefix=AVX512BW --check-prefix=AVX512VL
      7 
      8 define <16 x i8> @test1(<16 x i8> %a, <16 x i8> %b) {
      9 ; SSE2-LABEL: test1:
     10 ; SSE2:       # BB#0: # %entry
     11 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
     12 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
     13 ; SSE2-NEXT:    pand %xmm2, %xmm0
     14 ; SSE2-NEXT:    pandn %xmm1, %xmm2
     15 ; SSE2-NEXT:    por %xmm2, %xmm0
     16 ; SSE2-NEXT:    retq
     17 ;
     18 ; SSE4-LABEL: test1:
     19 ; SSE4:       # BB#0: # %entry
     20 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
     21 ; SSE4-NEXT:    retq
     22 ;
     23 ; AVX-LABEL: test1:
     24 ; AVX:       # BB#0: # %entry
     25 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
     26 ; AVX-NEXT:    retq
     27 entry:
     28   %cmp = icmp slt <16 x i8> %a, %b
     29   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
     30   ret <16 x i8> %sel
     31 }
     32 
     33 define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) {
     34 ; SSE2-LABEL: test2:
     35 ; SSE2:       # BB#0: # %entry
     36 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
     37 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
     38 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
     39 ; SSE2-NEXT:    pxor %xmm2, %xmm3
     40 ; SSE2-NEXT:    pandn %xmm0, %xmm2
     41 ; SSE2-NEXT:    pandn %xmm1, %xmm3
     42 ; SSE2-NEXT:    por %xmm3, %xmm2
     43 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
     44 ; SSE2-NEXT:    retq
     45 ;
     46 ; SSE4-LABEL: test2:
     47 ; SSE4:       # BB#0: # %entry
     48 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
     49 ; SSE4-NEXT:    retq
     50 ;
     51 ; AVX-LABEL: test2:
     52 ; AVX:       # BB#0: # %entry
     53 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
     54 ; AVX-NEXT:    retq
     55 entry:
     56   %cmp = icmp sle <16 x i8> %a, %b
     57   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
     58   ret <16 x i8> %sel
     59 }
     60 
     61 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
     62 ; SSE2-LABEL: test3:
     63 ; SSE2:       # BB#0: # %entry
     64 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
     65 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
     66 ; SSE2-NEXT:    pand %xmm2, %xmm0
     67 ; SSE2-NEXT:    pandn %xmm1, %xmm2
     68 ; SSE2-NEXT:    por %xmm0, %xmm2
     69 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
     70 ; SSE2-NEXT:    retq
     71 ;
     72 ; SSE4-LABEL: test3:
     73 ; SSE4:       # BB#0: # %entry
     74 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
     75 ; SSE4-NEXT:    retq
     76 ;
     77 ; AVX-LABEL: test3:
     78 ; AVX:       # BB#0: # %entry
     79 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
     80 ; AVX-NEXT:    retq
     81 entry:
     82   %cmp = icmp sgt <16 x i8> %a, %b
     83   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
     84   ret <16 x i8> %sel
     85 }
     86 
     87 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
     88 ; SSE2-LABEL: test4:
     89 ; SSE2:       # BB#0: # %entry
     90 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
     91 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm3
     92 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
     93 ; SSE2-NEXT:    pxor %xmm3, %xmm2
     94 ; SSE2-NEXT:    pandn %xmm0, %xmm3
     95 ; SSE2-NEXT:    pandn %xmm1, %xmm2
     96 ; SSE2-NEXT:    por %xmm3, %xmm2
     97 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
     98 ; SSE2-NEXT:    retq
     99 ;
    100 ; SSE4-LABEL: test4:
    101 ; SSE4:       # BB#0: # %entry
    102 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
    103 ; SSE4-NEXT:    retq
    104 ;
    105 ; AVX-LABEL: test4:
    106 ; AVX:       # BB#0: # %entry
    107 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    108 ; AVX-NEXT:    retq
    109 entry:
    110   %cmp = icmp sge <16 x i8> %a, %b
    111   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    112   ret <16 x i8> %sel
    113 }
    114 
    115 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
    116 ; SSE-LABEL: test5:
    117 ; SSE:       # BB#0: # %entry
    118 ; SSE-NEXT:    pminub %xmm1, %xmm0
    119 ; SSE-NEXT:    retq
    120 ;
    121 ; AVX-LABEL: test5:
    122 ; AVX:       # BB#0: # %entry
    123 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    124 ; AVX-NEXT:    retq
    125 entry:
    126   %cmp = icmp ult <16 x i8> %a, %b
    127   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    128   ret <16 x i8> %sel
    129 }
    130 
    131 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
    132 ; SSE-LABEL: test6:
    133 ; SSE:       # BB#0: # %entry
    134 ; SSE-NEXT:    pminub %xmm1, %xmm0
    135 ; SSE-NEXT:    retq
    136 ;
    137 ; AVX-LABEL: test6:
    138 ; AVX:       # BB#0: # %entry
    139 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    140 ; AVX-NEXT:    retq
    141 entry:
    142   %cmp = icmp ule <16 x i8> %a, %b
    143   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    144   ret <16 x i8> %sel
    145 }
    146 
    147 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
    148 ; SSE-LABEL: test7:
    149 ; SSE:       # BB#0: # %entry
    150 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
    151 ; SSE-NEXT:    retq
    152 ;
    153 ; AVX-LABEL: test7:
    154 ; AVX:       # BB#0: # %entry
    155 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    156 ; AVX-NEXT:    retq
    157 entry:
    158   %cmp = icmp ugt <16 x i8> %a, %b
    159   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    160   ret <16 x i8> %sel
    161 }
    162 
    163 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
    164 ; SSE-LABEL: test8:
    165 ; SSE:       # BB#0: # %entry
    166 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
    167 ; SSE-NEXT:    retq
    168 ;
    169 ; AVX-LABEL: test8:
    170 ; AVX:       # BB#0: # %entry
    171 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    172 ; AVX-NEXT:    retq
    173 entry:
    174   %cmp = icmp uge <16 x i8> %a, %b
    175   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    176   ret <16 x i8> %sel
    177 }
    178 
    179 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
    180 ; SSE-LABEL: test9:
    181 ; SSE:       # BB#0: # %entry
    182 ; SSE-NEXT:    pminsw %xmm1, %xmm0
    183 ; SSE-NEXT:    retq
    184 ;
    185 ; AVX-LABEL: test9:
    186 ; AVX:       # BB#0: # %entry
    187 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    188 ; AVX-NEXT:    retq
    189 entry:
    190   %cmp = icmp slt <8 x i16> %a, %b
    191   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    192   ret <8 x i16> %sel
    193 }
    194 
    195 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
    196 ; SSE-LABEL: test10:
    197 ; SSE:       # BB#0: # %entry
    198 ; SSE-NEXT:    pminsw %xmm1, %xmm0
    199 ; SSE-NEXT:    retq
    200 ;
    201 ; AVX-LABEL: test10:
    202 ; AVX:       # BB#0: # %entry
    203 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    204 ; AVX-NEXT:    retq
    205 entry:
    206   %cmp = icmp sle <8 x i16> %a, %b
    207   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    208   ret <8 x i16> %sel
    209 }
    210 
    211 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
    212 ; SSE-LABEL: test11:
    213 ; SSE:       # BB#0: # %entry
    214 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
    215 ; SSE-NEXT:    retq
    216 ;
    217 ; AVX-LABEL: test11:
    218 ; AVX:       # BB#0: # %entry
    219 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    220 ; AVX-NEXT:    retq
    221 entry:
    222   %cmp = icmp sgt <8 x i16> %a, %b
    223   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    224   ret <8 x i16> %sel
    225 }
    226 
    227 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
    228 ; SSE-LABEL: test12:
    229 ; SSE:       # BB#0: # %entry
    230 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
    231 ; SSE-NEXT:    retq
    232 ;
    233 ; AVX-LABEL: test12:
    234 ; AVX:       # BB#0: # %entry
    235 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    236 ; AVX-NEXT:    retq
    237 entry:
    238   %cmp = icmp sge <8 x i16> %a, %b
    239   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    240   ret <8 x i16> %sel
    241 }
    242 
    243 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
    244 ; SSE2-LABEL: test13:
    245 ; SSE2:       # BB#0: # %entry
    246 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
    247 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
    248 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    249 ; SSE2-NEXT:    pxor %xmm1, %xmm2
    250 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
    251 ; SSE2-NEXT:    pand %xmm2, %xmm0
    252 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    253 ; SSE2-NEXT:    por %xmm2, %xmm0
    254 ; SSE2-NEXT:    retq
    255 ;
    256 ; SSE4-LABEL: test13:
    257 ; SSE4:       # BB#0: # %entry
    258 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
    259 ; SSE4-NEXT:    retq
    260 ;
    261 ; AVX-LABEL: test13:
    262 ; AVX:       # BB#0: # %entry
    263 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
    264 ; AVX-NEXT:    retq
    265 entry:
    266   %cmp = icmp ult <8 x i16> %a, %b
    267   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    268   ret <8 x i16> %sel
    269 }
    270 
    271 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
    272 ; SSE2-LABEL: test14:
    273 ; SSE2:       # BB#0: # %entry
    274 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    275 ; SSE2-NEXT:    psubusw %xmm1, %xmm2
    276 ; SSE2-NEXT:    pxor %xmm3, %xmm3
    277 ; SSE2-NEXT:    pcmpeqw %xmm2, %xmm3
    278 ; SSE2-NEXT:    pand %xmm3, %xmm0
    279 ; SSE2-NEXT:    pandn %xmm1, %xmm3
    280 ; SSE2-NEXT:    por %xmm3, %xmm0
    281 ; SSE2-NEXT:    retq
    282 ;
    283 ; SSE4-LABEL: test14:
    284 ; SSE4:       # BB#0: # %entry
    285 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
    286 ; SSE4-NEXT:    retq
    287 ;
    288 ; AVX-LABEL: test14:
    289 ; AVX:       # BB#0: # %entry
    290 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
    291 ; AVX-NEXT:    retq
    292 entry:
    293   %cmp = icmp ule <8 x i16> %a, %b
    294   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    295   ret <8 x i16> %sel
    296 }
    297 
    298 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
    299 ; SSE2-LABEL: test15:
    300 ; SSE2:       # BB#0: # %entry
    301 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
    302 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    303 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    304 ; SSE2-NEXT:    pxor %xmm0, %xmm2
    305 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
    306 ; SSE2-NEXT:    pand %xmm2, %xmm0
    307 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    308 ; SSE2-NEXT:    por %xmm2, %xmm0
    309 ; SSE2-NEXT:    retq
    310 ;
    311 ; SSE4-LABEL: test15:
    312 ; SSE4:       # BB#0: # %entry
    313 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
    314 ; SSE4-NEXT:    retq
    315 ;
    316 ; AVX-LABEL: test15:
    317 ; AVX:       # BB#0: # %entry
    318 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
    319 ; AVX-NEXT:    retq
    320 entry:
    321   %cmp = icmp ugt <8 x i16> %a, %b
    322   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    323   ret <8 x i16> %sel
    324 }
    325 
    326 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
    327 ; SSE2-LABEL: test16:
    328 ; SSE2:       # BB#0: # %entry
    329 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    330 ; SSE2-NEXT:    psubusw %xmm0, %xmm2
    331 ; SSE2-NEXT:    pxor %xmm3, %xmm3
    332 ; SSE2-NEXT:    pcmpeqw %xmm2, %xmm3
    333 ; SSE2-NEXT:    pand %xmm3, %xmm0
    334 ; SSE2-NEXT:    pandn %xmm1, %xmm3
    335 ; SSE2-NEXT:    por %xmm3, %xmm0
    336 ; SSE2-NEXT:    retq
    337 ;
    338 ; SSE4-LABEL: test16:
    339 ; SSE4:       # BB#0: # %entry
    340 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
    341 ; SSE4-NEXT:    retq
    342 ;
    343 ; AVX-LABEL: test16:
    344 ; AVX:       # BB#0: # %entry
    345 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
    346 ; AVX-NEXT:    retq
    347 entry:
    348   %cmp = icmp uge <8 x i16> %a, %b
    349   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    350   ret <8 x i16> %sel
    351 }
    352 
    353 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
    354 ; SSE2-LABEL: test17:
    355 ; SSE2:       # BB#0: # %entry
    356 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    357 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
    358 ; SSE2-NEXT:    pand %xmm2, %xmm0
    359 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    360 ; SSE2-NEXT:    por %xmm2, %xmm0
    361 ; SSE2-NEXT:    retq
    362 ;
    363 ; SSE4-LABEL: test17:
    364 ; SSE4:       # BB#0: # %entry
    365 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
    366 ; SSE4-NEXT:    retq
    367 ;
    368 ; AVX-LABEL: test17:
    369 ; AVX:       # BB#0: # %entry
    370 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
    371 ; AVX-NEXT:    retq
    372 entry:
    373   %cmp = icmp slt <4 x i32> %a, %b
    374   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    375   ret <4 x i32> %sel
    376 }
    377 
    378 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
    379 ; SSE2-LABEL: test18:
    380 ; SSE2:       # BB#0: # %entry
    381 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    382 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
    383 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
    384 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    385 ; SSE2-NEXT:    pandn %xmm0, %xmm2
    386 ; SSE2-NEXT:    pandn %xmm1, %xmm3
    387 ; SSE2-NEXT:    por %xmm3, %xmm2
    388 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    389 ; SSE2-NEXT:    retq
    390 ;
    391 ; SSE4-LABEL: test18:
    392 ; SSE4:       # BB#0: # %entry
    393 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
    394 ; SSE4-NEXT:    retq
    395 ;
    396 ; AVX-LABEL: test18:
    397 ; AVX:       # BB#0: # %entry
    398 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
    399 ; AVX-NEXT:    retq
    400 entry:
    401   %cmp = icmp sle <4 x i32> %a, %b
    402   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    403   ret <4 x i32> %sel
    404 }
    405 
    406 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
    407 ; SSE2-LABEL: test19:
    408 ; SSE2:       # BB#0: # %entry
    409 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    410 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
    411 ; SSE2-NEXT:    pand %xmm2, %xmm0
    412 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    413 ; SSE2-NEXT:    por %xmm0, %xmm2
    414 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    415 ; SSE2-NEXT:    retq
    416 ;
    417 ; SSE4-LABEL: test19:
    418 ; SSE4:       # BB#0: # %entry
    419 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
    420 ; SSE4-NEXT:    retq
    421 ;
    422 ; AVX-LABEL: test19:
    423 ; AVX:       # BB#0: # %entry
    424 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    425 ; AVX-NEXT:    retq
    426 entry:
    427   %cmp = icmp sgt <4 x i32> %a, %b
    428   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    429   ret <4 x i32> %sel
    430 }
    431 
    432 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
    433 ; SSE2-LABEL: test20:
    434 ; SSE2:       # BB#0: # %entry
    435 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    436 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
    437 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
    438 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    439 ; SSE2-NEXT:    pandn %xmm0, %xmm3
    440 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    441 ; SSE2-NEXT:    por %xmm3, %xmm2
    442 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    443 ; SSE2-NEXT:    retq
    444 ;
    445 ; SSE4-LABEL: test20:
    446 ; SSE4:       # BB#0: # %entry
    447 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
    448 ; SSE4-NEXT:    retq
    449 ;
    450 ; AVX-LABEL: test20:
    451 ; AVX:       # BB#0: # %entry
    452 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    453 ; AVX-NEXT:    retq
    454 entry:
    455   %cmp = icmp sge <4 x i32> %a, %b
    456   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    457   ret <4 x i32> %sel
    458 }
    459 
    460 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
    461 ; SSE2-LABEL: test21:
    462 ; SSE2:       # BB#0: # %entry
    463 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
    464 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
    465 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    466 ; SSE2-NEXT:    pxor %xmm1, %xmm2
    467 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
    468 ; SSE2-NEXT:    pand %xmm2, %xmm0
    469 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    470 ; SSE2-NEXT:    por %xmm2, %xmm0
    471 ; SSE2-NEXT:    retq
    472 ;
    473 ; SSE4-LABEL: test21:
    474 ; SSE4:       # BB#0: # %entry
    475 ; SSE4-NEXT:    pminud %xmm1, %xmm0
    476 ; SSE4-NEXT:    retq
    477 ;
    478 ; AVX-LABEL: test21:
    479 ; AVX:       # BB#0: # %entry
    480 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
    481 ; AVX-NEXT:    retq
    482 entry:
    483   %cmp = icmp ult <4 x i32> %a, %b
    484   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    485   ret <4 x i32> %sel
    486 }
    487 
    488 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
    489 ; SSE2-LABEL: test22:
    490 ; SSE2:       # BB#0: # %entry
    491 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
    492 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    493 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    494 ; SSE2-NEXT:    pxor %xmm0, %xmm3
    495 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
    496 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
    497 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    498 ; SSE2-NEXT:    pandn %xmm0, %xmm3
    499 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    500 ; SSE2-NEXT:    por %xmm3, %xmm2
    501 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    502 ; SSE2-NEXT:    retq
    503 ;
    504 ; SSE4-LABEL: test22:
    505 ; SSE4:       # BB#0: # %entry
    506 ; SSE4-NEXT:    pminud %xmm1, %xmm0
    507 ; SSE4-NEXT:    retq
    508 ;
    509 ; AVX-LABEL: test22:
    510 ; AVX:       # BB#0: # %entry
    511 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
    512 ; AVX-NEXT:    retq
    513 entry:
    514   %cmp = icmp ule <4 x i32> %a, %b
    515   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    516   ret <4 x i32> %sel
    517 }
    518 
    519 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
    520 ; SSE2-LABEL: test23:
    521 ; SSE2:       # BB#0: # %entry
    522 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
    523 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    524 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    525 ; SSE2-NEXT:    pxor %xmm0, %xmm2
    526 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
    527 ; SSE2-NEXT:    pand %xmm2, %xmm0
    528 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    529 ; SSE2-NEXT:    por %xmm2, %xmm0
    530 ; SSE2-NEXT:    retq
    531 ;
    532 ; SSE4-LABEL: test23:
    533 ; SSE4:       # BB#0: # %entry
    534 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
    535 ; SSE4-NEXT:    retq
    536 ;
    537 ; AVX-LABEL: test23:
    538 ; AVX:       # BB#0: # %entry
    539 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
    540 ; AVX-NEXT:    retq
    541 entry:
    542   %cmp = icmp ugt <4 x i32> %a, %b
    543   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    544   ret <4 x i32> %sel
    545 }
    546 
    547 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
    548 ; SSE2-LABEL: test24:
    549 ; SSE2:       # BB#0: # %entry
    550 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
    551 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    552 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    553 ; SSE2-NEXT:    pxor %xmm1, %xmm3
    554 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
    555 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
    556 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    557 ; SSE2-NEXT:    pandn %xmm0, %xmm3
    558 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    559 ; SSE2-NEXT:    por %xmm3, %xmm2
    560 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    561 ; SSE2-NEXT:    retq
    562 ;
    563 ; SSE4-LABEL: test24:
    564 ; SSE4:       # BB#0: # %entry
    565 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
    566 ; SSE4-NEXT:    retq
    567 ;
    568 ; AVX-LABEL: test24:
    569 ; AVX:       # BB#0: # %entry
    570 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
    571 ; AVX-NEXT:    retq
    572 entry:
    573   %cmp = icmp uge <4 x i32> %a, %b
    574   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    575   ret <4 x i32> %sel
    576 }
    577 
    578 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
    579 ; SSE2-LABEL: test25:
    580 ; SSE2:       # BB#0: # %entry
    581 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
    582 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
    583 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
    584 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm5
    585 ; SSE2-NEXT:    pand %xmm5, %xmm0
    586 ; SSE2-NEXT:    pandn %xmm2, %xmm5
    587 ; SSE2-NEXT:    por %xmm5, %xmm0
    588 ; SSE2-NEXT:    pand %xmm4, %xmm1
    589 ; SSE2-NEXT:    pandn %xmm3, %xmm4
    590 ; SSE2-NEXT:    por %xmm4, %xmm1
    591 ; SSE2-NEXT:    retq
    592 ;
    593 ; SSE4-LABEL: test25:
    594 ; SSE4:       # BB#0: # %entry
    595 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
    596 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
    597 ; SSE4-NEXT:    retq
    598 ;
    599 ; AVX1-LABEL: test25:
    600 ; AVX1:       # BB#0: # %entry
    601 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    602 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    603 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
    604 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
    605 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    606 ; AVX1-NEXT:    retq
    607 ;
    608 ; AVX2-LABEL: test25:
    609 ; AVX2:       # BB#0: # %entry
    610 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    611 ; AVX2-NEXT:    retq
    612 ;
    613 ; AVX512F-LABEL: test25:
    614 ; AVX512F:       # BB#0: # %entry
    615 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    616 ; AVX512F-NEXT:    retq
    617 entry:
    618   %cmp = icmp slt <32 x i8> %a, %b
    619   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    620   ret <32 x i8> %sel
    621 }
    622 
    623 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
    624 ; SSE2-LABEL: test26:
    625 ; SSE2:       # BB#0: # %entry
    626 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
    627 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm6
    628 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
    629 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
    630 ; SSE2-NEXT:    pxor %xmm7, %xmm4
    631 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
    632 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
    633 ; SSE2-NEXT:    pxor %xmm5, %xmm7
    634 ; SSE2-NEXT:    pandn %xmm0, %xmm5
    635 ; SSE2-NEXT:    pandn %xmm2, %xmm7
    636 ; SSE2-NEXT:    por %xmm7, %xmm5
    637 ; SSE2-NEXT:    pandn %xmm1, %xmm6
    638 ; SSE2-NEXT:    pandn %xmm3, %xmm4
    639 ; SSE2-NEXT:    por %xmm6, %xmm4
    640 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
    641 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
    642 ; SSE2-NEXT:    retq
    643 ;
    644 ; SSE4-LABEL: test26:
    645 ; SSE4:       # BB#0: # %entry
    646 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
    647 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
    648 ; SSE4-NEXT:    retq
    649 ;
    650 ; AVX1-LABEL: test26:
    651 ; AVX1:       # BB#0: # %entry
    652 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    653 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    654 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
    655 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
    656 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    657 ; AVX1-NEXT:    retq
    658 ;
    659 ; AVX2-LABEL: test26:
    660 ; AVX2:       # BB#0: # %entry
    661 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    662 ; AVX2-NEXT:    retq
    663 ;
    664 ; AVX512F-LABEL: test26:
    665 ; AVX512F:       # BB#0: # %entry
    666 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    667 ; AVX512F-NEXT:    retq
    668 entry:
    669   %cmp = icmp sle <32 x i8> %a, %b
    670   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    671   ret <32 x i8> %sel
    672 }
    673 
    674 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
    675 ; SSE2-LABEL: test27:
    676 ; SSE2:       # BB#0: # %entry
    677 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
    678 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
    679 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
    680 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
    681 ; SSE2-NEXT:    pand %xmm5, %xmm0
    682 ; SSE2-NEXT:    pandn %xmm2, %xmm5
    683 ; SSE2-NEXT:    por %xmm0, %xmm5
    684 ; SSE2-NEXT:    pand %xmm4, %xmm1
    685 ; SSE2-NEXT:    pandn %xmm3, %xmm4
    686 ; SSE2-NEXT:    por %xmm1, %xmm4
    687 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
    688 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
    689 ; SSE2-NEXT:    retq
    690 ;
    691 ; SSE4-LABEL: test27:
    692 ; SSE4:       # BB#0: # %entry
    693 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
    694 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
    695 ; SSE4-NEXT:    retq
    696 ;
    697 ; AVX1-LABEL: test27:
    698 ; AVX1:       # BB#0: # %entry
    699 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    700 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    701 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
    702 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    703 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    704 ; AVX1-NEXT:    retq
    705 ;
    706 ; AVX2-LABEL: test27:
    707 ; AVX2:       # BB#0: # %entry
    708 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    709 ; AVX2-NEXT:    retq
    710 ;
    711 ; AVX512F-LABEL: test27:
    712 ; AVX512F:       # BB#0: # %entry
    713 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    714 ; AVX512F-NEXT:    retq
    715 entry:
    716   %cmp = icmp sgt <32 x i8> %a, %b
    717   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    718   ret <32 x i8> %sel
    719 }
    720 
    721 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
    722 ; SSE2-LABEL: test28:
    723 ; SSE2:       # BB#0: # %entry
    724 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
    725 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm6
    726 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
    727 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
    728 ; SSE2-NEXT:    pxor %xmm4, %xmm5
    729 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
    730 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm7
    731 ; SSE2-NEXT:    pxor %xmm7, %xmm4
    732 ; SSE2-NEXT:    pandn %xmm0, %xmm7
    733 ; SSE2-NEXT:    pandn %xmm2, %xmm4
    734 ; SSE2-NEXT:    por %xmm7, %xmm4
    735 ; SSE2-NEXT:    pandn %xmm1, %xmm6
    736 ; SSE2-NEXT:    pandn %xmm3, %xmm5
    737 ; SSE2-NEXT:    por %xmm6, %xmm5
    738 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    739 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
    740 ; SSE2-NEXT:    retq
    741 ;
    742 ; SSE4-LABEL: test28:
    743 ; SSE4:       # BB#0: # %entry
    744 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
    745 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
    746 ; SSE4-NEXT:    retq
    747 ;
    748 ; AVX1-LABEL: test28:
    749 ; AVX1:       # BB#0: # %entry
    750 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    751 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    752 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
    753 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    754 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    755 ; AVX1-NEXT:    retq
    756 ;
    757 ; AVX2-LABEL: test28:
    758 ; AVX2:       # BB#0: # %entry
    759 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    760 ; AVX2-NEXT:    retq
    761 ;
    762 ; AVX512F-LABEL: test28:
    763 ; AVX512F:       # BB#0: # %entry
    764 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    765 ; AVX512F-NEXT:    retq
    766 entry:
    767   %cmp = icmp sge <32 x i8> %a, %b
    768   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    769   ret <32 x i8> %sel
    770 }
    771 
    772 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
    773 ; SSE-LABEL: test29:
    774 ; SSE:       # BB#0: # %entry
    775 ; SSE-NEXT:    pminub %xmm2, %xmm0
    776 ; SSE-NEXT:    pminub %xmm3, %xmm1
    777 ; SSE-NEXT:    retq
    778 ;
    779 ; AVX1-LABEL: test29:
    780 ; AVX1:       # BB#0: # %entry
    781 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    782 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    783 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
    784 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    785 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    786 ; AVX1-NEXT:    retq
    787 ;
    788 ; AVX2-LABEL: test29:
    789 ; AVX2:       # BB#0: # %entry
    790 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    791 ; AVX2-NEXT:    retq
    792 ;
    793 ; AVX512F-LABEL: test29:
    794 ; AVX512F:       # BB#0: # %entry
    795 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    796 ; AVX512F-NEXT:    retq
    797 entry:
    798   %cmp = icmp ult <32 x i8> %a, %b
    799   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    800   ret <32 x i8> %sel
    801 }
    802 
    803 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
    804 ; SSE-LABEL: test30:
    805 ; SSE:       # BB#0: # %entry
    806 ; SSE-NEXT:    pminub %xmm2, %xmm0
    807 ; SSE-NEXT:    pminub %xmm3, %xmm1
    808 ; SSE-NEXT:    retq
    809 ;
    810 ; AVX1-LABEL: test30:
    811 ; AVX1:       # BB#0: # %entry
    812 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    813 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    814 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
    815 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    816 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    817 ; AVX1-NEXT:    retq
    818 ;
    819 ; AVX2-LABEL: test30:
    820 ; AVX2:       # BB#0: # %entry
    821 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    822 ; AVX2-NEXT:    retq
    823 ;
    824 ; AVX512F-LABEL: test30:
    825 ; AVX512F:       # BB#0: # %entry
    826 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    827 ; AVX512F-NEXT:    retq
    828 entry:
    829   %cmp = icmp ule <32 x i8> %a, %b
    830   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    831   ret <32 x i8> %sel
    832 }
    833 
    834 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
    835 ; SSE-LABEL: test31:
    836 ; SSE:       # BB#0: # %entry
    837 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
    838 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
    839 ; SSE-NEXT:    retq
    840 ;
    841 ; AVX1-LABEL: test31:
    842 ; AVX1:       # BB#0: # %entry
    843 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    844 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    845 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
    846 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    847 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    848 ; AVX1-NEXT:    retq
    849 ;
    850 ; AVX2-LABEL: test31:
    851 ; AVX2:       # BB#0: # %entry
    852 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    853 ; AVX2-NEXT:    retq
    854 ;
    855 ; AVX512F-LABEL: test31:
    856 ; AVX512F:       # BB#0: # %entry
    857 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    858 ; AVX512F-NEXT:    retq
    859 entry:
    860   %cmp = icmp ugt <32 x i8> %a, %b
    861   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    862   ret <32 x i8> %sel
    863 }
    864 
    865 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
    866 ; SSE-LABEL: test32:
    867 ; SSE:       # BB#0: # %entry
    868 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
    869 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
    870 ; SSE-NEXT:    retq
    871 ;
    872 ; AVX1-LABEL: test32:
    873 ; AVX1:       # BB#0: # %entry
    874 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    875 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    876 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
    877 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    878 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    879 ; AVX1-NEXT:    retq
    880 ;
    881 ; AVX2-LABEL: test32:
    882 ; AVX2:       # BB#0: # %entry
    883 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    884 ; AVX2-NEXT:    retq
    885 ;
    886 ; AVX512F-LABEL: test32:
    887 ; AVX512F:       # BB#0: # %entry
    888 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    889 ; AVX512F-NEXT:    retq
    890 entry:
    891   %cmp = icmp uge <32 x i8> %a, %b
    892   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    893   ret <32 x i8> %sel
    894 }
    895 
    896 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
    897 ; SSE-LABEL: test33:
    898 ; SSE:       # BB#0: # %entry
    899 ; SSE-NEXT:    pminsw %xmm2, %xmm0
    900 ; SSE-NEXT:    pminsw %xmm3, %xmm1
    901 ; SSE-NEXT:    retq
    902 ;
    903 ; AVX1-LABEL: test33:
    904 ; AVX1:       # BB#0: # %entry
    905 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    906 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    907 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
    908 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    909 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    910 ; AVX1-NEXT:    retq
    911 ;
    912 ; AVX2-LABEL: test33:
    913 ; AVX2:       # BB#0: # %entry
    914 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    915 ; AVX2-NEXT:    retq
    916 ;
    917 ; AVX512F-LABEL: test33:
    918 ; AVX512F:       # BB#0: # %entry
    919 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    920 ; AVX512F-NEXT:    retq
    921 entry:
    922   %cmp = icmp slt <16 x i16> %a, %b
    923   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    924   ret <16 x i16> %sel
    925 }
    926 
    927 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
    928 ; SSE-LABEL: test34:
    929 ; SSE:       # BB#0: # %entry
    930 ; SSE-NEXT:    pminsw %xmm2, %xmm0
    931 ; SSE-NEXT:    pminsw %xmm3, %xmm1
    932 ; SSE-NEXT:    retq
    933 ;
    934 ; AVX1-LABEL: test34:
    935 ; AVX1:       # BB#0: # %entry
    936 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    937 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    938 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
    939 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    940 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    941 ; AVX1-NEXT:    retq
    942 ;
    943 ; AVX2-LABEL: test34:
    944 ; AVX2:       # BB#0: # %entry
    945 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    946 ; AVX2-NEXT:    retq
    947 ;
    948 ; AVX512F-LABEL: test34:
    949 ; AVX512F:       # BB#0: # %entry
    950 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    951 ; AVX512F-NEXT:    retq
    952 entry:
    953   %cmp = icmp sle <16 x i16> %a, %b
    954   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    955   ret <16 x i16> %sel
    956 }
    957 
    958 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
    959 ; SSE-LABEL: test35:
    960 ; SSE:       # BB#0: # %entry
    961 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
    962 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
    963 ; SSE-NEXT:    retq
    964 ;
    965 ; AVX1-LABEL: test35:
    966 ; AVX1:       # BB#0: # %entry
    967 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    968 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    969 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
    970 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    971 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    972 ; AVX1-NEXT:    retq
    973 ;
    974 ; AVX2-LABEL: test35:
    975 ; AVX2:       # BB#0: # %entry
    976 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    977 ; AVX2-NEXT:    retq
    978 ;
    979 ; AVX512F-LABEL: test35:
    980 ; AVX512F:       # BB#0: # %entry
    981 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    982 ; AVX512F-NEXT:    retq
    983 entry:
    984   %cmp = icmp sgt <16 x i16> %a, %b
    985   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    986   ret <16 x i16> %sel
    987 }
    988 
    989 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
    990 ; SSE-LABEL: test36:
    991 ; SSE:       # BB#0: # %entry
    992 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
    993 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
    994 ; SSE-NEXT:    retq
    995 ;
    996 ; AVX1-LABEL: test36:
    997 ; AVX1:       # BB#0: # %entry
    998 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    999 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1000 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
   1001 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   1002 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1003 ; AVX1-NEXT:    retq
   1004 ;
   1005 ; AVX2-LABEL: test36:
   1006 ; AVX2:       # BB#0: # %entry
   1007 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   1008 ; AVX2-NEXT:    retq
   1009 ;
   1010 ; AVX512F-LABEL: test36:
   1011 ; AVX512F:       # BB#0: # %entry
   1012 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   1013 ; AVX512F-NEXT:    retq
   1014 entry:
   1015   %cmp = icmp sge <16 x i16> %a, %b
   1016   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1017   ret <16 x i16> %sel
   1018 }
   1019 
   1020 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
   1021 ; SSE2-LABEL: test37:
   1022 ; SSE2:       # BB#0: # %entry
   1023 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1024 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   1025 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1026 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1027 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   1028 ; SSE2-NEXT:    pcmpgtw %xmm5, %xmm6
   1029 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1030 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1031 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   1032 ; SSE2-NEXT:    pcmpgtw %xmm5, %xmm4
   1033 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1034 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1035 ; SSE2-NEXT:    por %xmm4, %xmm0
   1036 ; SSE2-NEXT:    pand %xmm6, %xmm1
   1037 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   1038 ; SSE2-NEXT:    por %xmm6, %xmm1
   1039 ; SSE2-NEXT:    retq
   1040 ;
   1041 ; SSE4-LABEL: test37:
   1042 ; SSE4:       # BB#0: # %entry
   1043 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   1044 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   1045 ; SSE4-NEXT:    retq
   1046 ;
   1047 ; AVX1-LABEL: test37:
   1048 ; AVX1:       # BB#0: # %entry
   1049 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1050 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1051 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   1052 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1053 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1054 ; AVX1-NEXT:    retq
   1055 ;
   1056 ; AVX2-LABEL: test37:
   1057 ; AVX2:       # BB#0: # %entry
   1058 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1059 ; AVX2-NEXT:    retq
   1060 ;
   1061 ; AVX512F-LABEL: test37:
   1062 ; AVX512F:       # BB#0: # %entry
   1063 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1064 ; AVX512F-NEXT:    retq
   1065 entry:
   1066   %cmp = icmp ult <16 x i16> %a, %b
   1067   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1068   ret <16 x i16> %sel
   1069 }
   1070 
   1071 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
   1072 ; SSE2-LABEL: test38:
   1073 ; SSE2:       # BB#0: # %entry
   1074 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1075 ; SSE2-NEXT:    psubusw %xmm3, %xmm4
   1076 ; SSE2-NEXT:    pxor %xmm6, %xmm6
   1077 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
   1078 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1079 ; SSE2-NEXT:    psubusw %xmm2, %xmm5
   1080 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
   1081 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1082 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1083 ; SSE2-NEXT:    por %xmm0, %xmm5
   1084 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1085 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1086 ; SSE2-NEXT:    por %xmm1, %xmm4
   1087 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   1088 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1089 ; SSE2-NEXT:    retq
   1090 ;
   1091 ; SSE4-LABEL: test38:
   1092 ; SSE4:       # BB#0: # %entry
   1093 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   1094 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   1095 ; SSE4-NEXT:    retq
   1096 ;
   1097 ; AVX1-LABEL: test38:
   1098 ; AVX1:       # BB#0: # %entry
   1099 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1100 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1101 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   1102 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1103 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1104 ; AVX1-NEXT:    retq
   1105 ;
   1106 ; AVX2-LABEL: test38:
   1107 ; AVX2:       # BB#0: # %entry
   1108 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1109 ; AVX2-NEXT:    retq
   1110 ;
   1111 ; AVX512F-LABEL: test38:
   1112 ; AVX512F:       # BB#0: # %entry
   1113 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1114 ; AVX512F-NEXT:    retq
   1115 entry:
   1116   %cmp = icmp ule <16 x i16> %a, %b
   1117   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1118   ret <16 x i16> %sel
   1119 }
   1120 
   1121 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
   1122 ; SSE2-LABEL: test39:
   1123 ; SSE2:       # BB#0: # %entry
   1124 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1125 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1126 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1127 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1128 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   1129 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
   1130 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1131 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1132 ; SSE2-NEXT:    pxor %xmm0, %xmm5
   1133 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
   1134 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1135 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1136 ; SSE2-NEXT:    por %xmm5, %xmm0
   1137 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1138 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1139 ; SSE2-NEXT:    por %xmm1, %xmm4
   1140 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1141 ; SSE2-NEXT:    retq
   1142 ;
   1143 ; SSE4-LABEL: test39:
   1144 ; SSE4:       # BB#0: # %entry
   1145 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   1146 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   1147 ; SSE4-NEXT:    retq
   1148 ;
   1149 ; AVX1-LABEL: test39:
   1150 ; AVX1:       # BB#0: # %entry
   1151 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1152 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1153 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   1154 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1155 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1156 ; AVX1-NEXT:    retq
   1157 ;
   1158 ; AVX2-LABEL: test39:
   1159 ; AVX2:       # BB#0: # %entry
   1160 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1161 ; AVX2-NEXT:    retq
   1162 ;
   1163 ; AVX512F-LABEL: test39:
   1164 ; AVX512F:       # BB#0: # %entry
   1165 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1166 ; AVX512F-NEXT:    retq
   1167 entry:
   1168   %cmp = icmp ugt <16 x i16> %a, %b
   1169   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1170   ret <16 x i16> %sel
   1171 }
   1172 
   1173 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
   1174 ; SSE2-LABEL: test40:
   1175 ; SSE2:       # BB#0: # %entry
   1176 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1177 ; SSE2-NEXT:    psubusw %xmm1, %xmm4
   1178 ; SSE2-NEXT:    pxor %xmm5, %xmm5
   1179 ; SSE2-NEXT:    pcmpeqw %xmm5, %xmm4
   1180 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1181 ; SSE2-NEXT:    psubusw %xmm0, %xmm6
   1182 ; SSE2-NEXT:    pcmpeqw %xmm5, %xmm6
   1183 ; SSE2-NEXT:    pand %xmm6, %xmm0
   1184 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   1185 ; SSE2-NEXT:    por %xmm6, %xmm0
   1186 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1187 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1188 ; SSE2-NEXT:    por %xmm4, %xmm1
   1189 ; SSE2-NEXT:    retq
   1190 ;
   1191 ; SSE4-LABEL: test40:
   1192 ; SSE4:       # BB#0: # %entry
   1193 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   1194 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   1195 ; SSE4-NEXT:    retq
   1196 ;
   1197 ; AVX1-LABEL: test40:
   1198 ; AVX1:       # BB#0: # %entry
   1199 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1200 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1201 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   1202 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1203 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1204 ; AVX1-NEXT:    retq
   1205 ;
   1206 ; AVX2-LABEL: test40:
   1207 ; AVX2:       # BB#0: # %entry
   1208 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1209 ; AVX2-NEXT:    retq
   1210 ;
   1211 ; AVX512F-LABEL: test40:
   1212 ; AVX512F:       # BB#0: # %entry
   1213 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1214 ; AVX512F-NEXT:    retq
   1215 entry:
   1216   %cmp = icmp uge <16 x i16> %a, %b
   1217   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1218   ret <16 x i16> %sel
   1219 }
   1220 
   1221 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
   1222 ; SSE2-LABEL: test41:
   1223 ; SSE2:       # BB#0: # %entry
   1224 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1225 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   1226 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   1227 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   1228 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1229 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1230 ; SSE2-NEXT:    por %xmm5, %xmm0
   1231 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1232 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1233 ; SSE2-NEXT:    por %xmm4, %xmm1
   1234 ; SSE2-NEXT:    retq
   1235 ;
   1236 ; SSE4-LABEL: test41:
   1237 ; SSE4:       # BB#0: # %entry
   1238 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   1239 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   1240 ; SSE4-NEXT:    retq
   1241 ;
   1242 ; AVX1-LABEL: test41:
   1243 ; AVX1:       # BB#0: # %entry
   1244 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1245 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1246 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   1247 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1248 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1249 ; AVX1-NEXT:    retq
   1250 ;
   1251 ; AVX2-LABEL: test41:
   1252 ; AVX2:       # BB#0: # %entry
   1253 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1254 ; AVX2-NEXT:    retq
   1255 ;
   1256 ; AVX512F-LABEL: test41:
   1257 ; AVX512F:       # BB#0: # %entry
   1258 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1259 ; AVX512F-NEXT:    retq
   1260 entry:
   1261   %cmp = icmp slt <8 x i32> %a, %b
   1262   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1263   ret <8 x i32> %sel
   1264 }
   1265 
   1266 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
   1267 ; SSE2-LABEL: test42:
   1268 ; SSE2:       # BB#0: # %entry
   1269 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   1270 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
   1271 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
   1272 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   1273 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   1274 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1275 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   1276 ; SSE2-NEXT:    pxor %xmm5, %xmm7
   1277 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   1278 ; SSE2-NEXT:    pandn %xmm2, %xmm7
   1279 ; SSE2-NEXT:    por %xmm7, %xmm5
   1280 ; SSE2-NEXT:    pandn %xmm1, %xmm6
   1281 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1282 ; SSE2-NEXT:    por %xmm6, %xmm4
   1283 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   1284 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1285 ; SSE2-NEXT:    retq
   1286 ;
   1287 ; SSE4-LABEL: test42:
   1288 ; SSE4:       # BB#0: # %entry
   1289 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   1290 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   1291 ; SSE4-NEXT:    retq
   1292 ;
   1293 ; AVX1-LABEL: test42:
   1294 ; AVX1:       # BB#0: # %entry
   1295 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1296 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1297 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   1298 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1299 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1300 ; AVX1-NEXT:    retq
   1301 ;
   1302 ; AVX2-LABEL: test42:
   1303 ; AVX2:       # BB#0: # %entry
   1304 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1305 ; AVX2-NEXT:    retq
   1306 ;
   1307 ; AVX512F-LABEL: test42:
   1308 ; AVX512F:       # BB#0: # %entry
   1309 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1310 ; AVX512F-NEXT:    retq
   1311 entry:
   1312   %cmp = icmp sle <8 x i32> %a, %b
   1313   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1314   ret <8 x i32> %sel
   1315 }
   1316 
   1317 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
   1318 ; SSE2-LABEL: test43:
   1319 ; SSE2:       # BB#0: # %entry
   1320 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1321 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   1322 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1323 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   1324 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1325 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1326 ; SSE2-NEXT:    por %xmm0, %xmm5
   1327 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1328 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1329 ; SSE2-NEXT:    por %xmm1, %xmm4
   1330 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   1331 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1332 ; SSE2-NEXT:    retq
   1333 ;
   1334 ; SSE4-LABEL: test43:
   1335 ; SSE4:       # BB#0: # %entry
   1336 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   1337 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   1338 ; SSE4-NEXT:    retq
   1339 ;
   1340 ; AVX1-LABEL: test43:
   1341 ; AVX1:       # BB#0: # %entry
   1342 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1343 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1344 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   1345 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   1346 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1347 ; AVX1-NEXT:    retq
   1348 ;
   1349 ; AVX2-LABEL: test43:
   1350 ; AVX2:       # BB#0: # %entry
   1351 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1352 ; AVX2-NEXT:    retq
   1353 ;
   1354 ; AVX512F-LABEL: test43:
   1355 ; AVX512F:       # BB#0: # %entry
   1356 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1357 ; AVX512F-NEXT:    retq
   1358 entry:
   1359   %cmp = icmp sgt <8 x i32> %a, %b
   1360   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1361   ret <8 x i32> %sel
   1362 }
   1363 
   1364 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
   1365 ; SSE2-LABEL: test44:
   1366 ; SSE2:       # BB#0: # %entry
   1367 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1368 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
   1369 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   1370 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   1371 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1372 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
   1373 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm7
   1374 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   1375 ; SSE2-NEXT:    pandn %xmm0, %xmm7
   1376 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1377 ; SSE2-NEXT:    por %xmm7, %xmm4
   1378 ; SSE2-NEXT:    pandn %xmm1, %xmm6
   1379 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   1380 ; SSE2-NEXT:    por %xmm6, %xmm5
   1381 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1382 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   1383 ; SSE2-NEXT:    retq
   1384 ;
   1385 ; SSE4-LABEL: test44:
   1386 ; SSE4:       # BB#0: # %entry
   1387 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   1388 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   1389 ; SSE4-NEXT:    retq
   1390 ;
   1391 ; AVX1-LABEL: test44:
   1392 ; AVX1:       # BB#0: # %entry
   1393 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1394 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1395 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   1396 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   1397 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1398 ; AVX1-NEXT:    retq
   1399 ;
   1400 ; AVX2-LABEL: test44:
   1401 ; AVX2:       # BB#0: # %entry
   1402 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1403 ; AVX2-NEXT:    retq
   1404 ;
   1405 ; AVX512F-LABEL: test44:
   1406 ; AVX512F:       # BB#0: # %entry
   1407 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1408 ; AVX512F-NEXT:    retq
   1409 entry:
   1410   %cmp = icmp sge <8 x i32> %a, %b
   1411   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1412   ret <8 x i32> %sel
   1413 }
   1414 
   1415 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
   1416 ; SSE2-LABEL: test45:
   1417 ; SSE2:       # BB#0: # %entry
   1418 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   1419 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   1420 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1421 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1422 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   1423 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
   1424 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1425 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1426 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   1427 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   1428 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1429 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1430 ; SSE2-NEXT:    por %xmm4, %xmm0
   1431 ; SSE2-NEXT:    pand %xmm6, %xmm1
   1432 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   1433 ; SSE2-NEXT:    por %xmm6, %xmm1
   1434 ; SSE2-NEXT:    retq
   1435 ;
   1436 ; SSE4-LABEL: test45:
   1437 ; SSE4:       # BB#0: # %entry
   1438 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   1439 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   1440 ; SSE4-NEXT:    retq
   1441 ;
   1442 ; AVX1-LABEL: test45:
   1443 ; AVX1:       # BB#0: # %entry
   1444 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1445 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1446 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   1447 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   1448 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1449 ; AVX1-NEXT:    retq
   1450 ;
   1451 ; AVX2-LABEL: test45:
   1452 ; AVX2:       # BB#0: # %entry
   1453 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1454 ; AVX2-NEXT:    retq
   1455 ;
   1456 ; AVX512F-LABEL: test45:
   1457 ; AVX512F:       # BB#0: # %entry
   1458 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1459 ; AVX512F-NEXT:    retq
   1460 entry:
   1461   %cmp = icmp ult <8 x i32> %a, %b
   1462   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1463   ret <8 x i32> %sel
   1464 }
   1465 
   1466 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
   1467 ; SSE2-LABEL: test46:
   1468 ; SSE2:       # BB#0: # %entry
   1469 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
   1470 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1471 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   1472 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
   1473 ; SSE2-NEXT:    pxor %xmm6, %xmm7
   1474 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   1475 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   1476 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   1477 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1478 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   1479 ; SSE2-NEXT:    pxor %xmm6, %xmm8
   1480 ; SSE2-NEXT:    pxor %xmm0, %xmm6
   1481 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
   1482 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   1483 ; SSE2-NEXT:    pandn %xmm0, %xmm6
   1484 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1485 ; SSE2-NEXT:    por %xmm6, %xmm4
   1486 ; SSE2-NEXT:    pandn %xmm1, %xmm7
   1487 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   1488 ; SSE2-NEXT:    por %xmm7, %xmm5
   1489 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1490 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   1491 ; SSE2-NEXT:    retq
   1492 ;
   1493 ; SSE4-LABEL: test46:
   1494 ; SSE4:       # BB#0: # %entry
   1495 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   1496 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   1497 ; SSE4-NEXT:    retq
   1498 ;
   1499 ; AVX1-LABEL: test46:
   1500 ; AVX1:       # BB#0: # %entry
   1501 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1502 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1503 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   1504 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   1505 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1506 ; AVX1-NEXT:    retq
   1507 ;
   1508 ; AVX2-LABEL: test46:
   1509 ; AVX2:       # BB#0: # %entry
   1510 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1511 ; AVX2-NEXT:    retq
   1512 ;
   1513 ; AVX512F-LABEL: test46:
   1514 ; AVX512F:       # BB#0: # %entry
   1515 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1516 ; AVX512F-NEXT:    retq
   1517 entry:
   1518   %cmp = icmp ule <8 x i32> %a, %b
   1519   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1520   ret <8 x i32> %sel
   1521 }
   1522 
   1523 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
   1524 ; SSE2-LABEL: test47:
   1525 ; SSE2:       # BB#0: # %entry
   1526 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   1527 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1528 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1529 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1530 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   1531 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   1532 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1533 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1534 ; SSE2-NEXT:    pxor %xmm0, %xmm5
   1535 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   1536 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1537 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1538 ; SSE2-NEXT:    por %xmm5, %xmm0
   1539 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1540 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1541 ; SSE2-NEXT:    por %xmm1, %xmm4
   1542 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1543 ; SSE2-NEXT:    retq
   1544 ;
   1545 ; SSE4-LABEL: test47:
   1546 ; SSE4:       # BB#0: # %entry
   1547 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   1548 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   1549 ; SSE4-NEXT:    retq
   1550 ;
   1551 ; AVX1-LABEL: test47:
   1552 ; AVX1:       # BB#0: # %entry
   1553 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1554 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1555 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   1556 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   1557 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1558 ; AVX1-NEXT:    retq
   1559 ;
   1560 ; AVX2-LABEL: test47:
   1561 ; AVX2:       # BB#0: # %entry
   1562 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1563 ; AVX2-NEXT:    retq
   1564 ;
   1565 ; AVX512F-LABEL: test47:
   1566 ; AVX512F:       # BB#0: # %entry
   1567 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1568 ; AVX512F-NEXT:    retq
   1569 entry:
   1570   %cmp = icmp ugt <8 x i32> %a, %b
   1571   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1572   ret <8 x i32> %sel
   1573 }
   1574 
   1575 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
   1576 ; SSE2-LABEL: test48:
   1577 ; SSE2:       # BB#0: # %entry
   1578 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
   1579 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1580 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   1581 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   1582 ; SSE2-NEXT:    pxor %xmm6, %xmm7
   1583 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   1584 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   1585 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   1586 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1587 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   1588 ; SSE2-NEXT:    pxor %xmm6, %xmm8
   1589 ; SSE2-NEXT:    pxor %xmm2, %xmm6
   1590 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
   1591 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   1592 ; SSE2-NEXT:    pandn %xmm0, %xmm6
   1593 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1594 ; SSE2-NEXT:    por %xmm6, %xmm4
   1595 ; SSE2-NEXT:    pandn %xmm1, %xmm7
   1596 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   1597 ; SSE2-NEXT:    por %xmm7, %xmm5
   1598 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1599 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   1600 ; SSE2-NEXT:    retq
   1601 ;
   1602 ; SSE4-LABEL: test48:
   1603 ; SSE4:       # BB#0: # %entry
   1604 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   1605 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   1606 ; SSE4-NEXT:    retq
   1607 ;
   1608 ; AVX1-LABEL: test48:
   1609 ; AVX1:       # BB#0: # %entry
   1610 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1611 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1612 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   1613 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   1614 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1615 ; AVX1-NEXT:    retq
   1616 ;
   1617 ; AVX2-LABEL: test48:
   1618 ; AVX2:       # BB#0: # %entry
   1619 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1620 ; AVX2-NEXT:    retq
   1621 ;
   1622 ; AVX512F-LABEL: test48:
   1623 ; AVX512F:       # BB#0: # %entry
   1624 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1625 ; AVX512F-NEXT:    retq
   1626 entry:
   1627   %cmp = icmp uge <8 x i32> %a, %b
   1628   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1629   ret <8 x i32> %sel
   1630 }
   1631 
   1632 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
   1633 ; SSE2-LABEL: test49:
   1634 ; SSE2:       # BB#0: # %entry
   1635 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1636 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
   1637 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1638 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1639 ; SSE2-NEXT:    por %xmm1, %xmm2
   1640 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1641 ; SSE2-NEXT:    retq
   1642 ;
   1643 ; SSE4-LABEL: test49:
   1644 ; SSE4:       # BB#0: # %entry
   1645 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
   1646 ; SSE4-NEXT:    retq
   1647 ;
   1648 ; AVX-LABEL: test49:
   1649 ; AVX:       # BB#0: # %entry
   1650 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   1651 ; AVX-NEXT:    retq
   1652 entry:
   1653   %cmp = icmp slt <16 x i8> %a, %b
   1654   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1655   ret <16 x i8> %sel
   1656 }
   1657 
   1658 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
   1659 ; SSE2-LABEL: test50:
   1660 ; SSE2:       # BB#0: # %entry
   1661 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1662 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
   1663 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
   1664 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1665 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1666 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   1667 ; SSE2-NEXT:    por %xmm3, %xmm2
   1668 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1669 ; SSE2-NEXT:    retq
   1670 ;
   1671 ; SSE4-LABEL: test50:
   1672 ; SSE4:       # BB#0: # %entry
   1673 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
   1674 ; SSE4-NEXT:    retq
   1675 ;
   1676 ; AVX-LABEL: test50:
   1677 ; AVX:       # BB#0: # %entry
   1678 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   1679 ; AVX-NEXT:    retq
   1680 entry:
   1681   %cmp = icmp sle <16 x i8> %a, %b
   1682   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1683   ret <16 x i8> %sel
   1684 }
   1685 
   1686 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
   1687 ; SSE2-LABEL: test51:
   1688 ; SSE2:       # BB#0: # %entry
   1689 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1690 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
   1691 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1692 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1693 ; SSE2-NEXT:    por %xmm1, %xmm2
   1694 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1695 ; SSE2-NEXT:    retq
   1696 ;
   1697 ; SSE4-LABEL: test51:
   1698 ; SSE4:       # BB#0: # %entry
   1699 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
   1700 ; SSE4-NEXT:    retq
   1701 ;
   1702 ; AVX-LABEL: test51:
   1703 ; AVX:       # BB#0: # %entry
   1704 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1705 ; AVX-NEXT:    retq
   1706 entry:
   1707   %cmp = icmp sgt <16 x i8> %a, %b
   1708   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1709   ret <16 x i8> %sel
   1710 }
   1711 
   1712 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
   1713 ; SSE2-LABEL: test52:
   1714 ; SSE2:       # BB#0: # %entry
   1715 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1716 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm3
   1717 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   1718 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   1719 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   1720 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1721 ; SSE2-NEXT:    por %xmm3, %xmm2
   1722 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1723 ; SSE2-NEXT:    retq
   1724 ;
   1725 ; SSE4-LABEL: test52:
   1726 ; SSE4:       # BB#0: # %entry
   1727 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
   1728 ; SSE4-NEXT:    retq
   1729 ;
   1730 ; AVX-LABEL: test52:
   1731 ; AVX:       # BB#0: # %entry
   1732 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1733 ; AVX-NEXT:    retq
   1734 entry:
   1735   %cmp = icmp sge <16 x i8> %a, %b
   1736   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1737   ret <16 x i8> %sel
   1738 }
   1739 
   1740 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
   1741 ; SSE-LABEL: test53:
   1742 ; SSE:       # BB#0: # %entry
   1743 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
   1744 ; SSE-NEXT:    retq
   1745 ;
   1746 ; AVX-LABEL: test53:
   1747 ; AVX:       # BB#0: # %entry
   1748 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   1749 ; AVX-NEXT:    retq
   1750 entry:
   1751   %cmp = icmp ult <16 x i8> %a, %b
   1752   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1753   ret <16 x i8> %sel
   1754 }
   1755 
   1756 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
   1757 ; SSE-LABEL: test54:
   1758 ; SSE:       # BB#0: # %entry
   1759 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
   1760 ; SSE-NEXT:    retq
   1761 ;
   1762 ; AVX-LABEL: test54:
   1763 ; AVX:       # BB#0: # %entry
   1764 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   1765 ; AVX-NEXT:    retq
   1766 entry:
   1767   %cmp = icmp ule <16 x i8> %a, %b
   1768   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1769   ret <16 x i8> %sel
   1770 }
   1771 
   1772 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
   1773 ; SSE-LABEL: test55:
   1774 ; SSE:       # BB#0: # %entry
   1775 ; SSE-NEXT:    pminub %xmm1, %xmm0
   1776 ; SSE-NEXT:    retq
   1777 ;
   1778 ; AVX-LABEL: test55:
   1779 ; AVX:       # BB#0: # %entry
   1780 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   1781 ; AVX-NEXT:    retq
   1782 entry:
   1783   %cmp = icmp ugt <16 x i8> %a, %b
   1784   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1785   ret <16 x i8> %sel
   1786 }
   1787 
   1788 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
   1789 ; SSE-LABEL: test56:
   1790 ; SSE:       # BB#0: # %entry
   1791 ; SSE-NEXT:    pminub %xmm1, %xmm0
   1792 ; SSE-NEXT:    retq
   1793 ;
   1794 ; AVX-LABEL: test56:
   1795 ; AVX:       # BB#0: # %entry
   1796 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   1797 ; AVX-NEXT:    retq
   1798 entry:
   1799   %cmp = icmp uge <16 x i8> %a, %b
   1800   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1801   ret <16 x i8> %sel
   1802 }
   1803 
   1804 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
   1805 ; SSE-LABEL: test57:
   1806 ; SSE:       # BB#0: # %entry
   1807 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
   1808 ; SSE-NEXT:    retq
   1809 ;
   1810 ; AVX-LABEL: test57:
   1811 ; AVX:       # BB#0: # %entry
   1812 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   1813 ; AVX-NEXT:    retq
   1814 entry:
   1815   %cmp = icmp slt <8 x i16> %a, %b
   1816   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1817   ret <8 x i16> %sel
   1818 }
   1819 
   1820 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
   1821 ; SSE-LABEL: test58:
   1822 ; SSE:       # BB#0: # %entry
   1823 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
   1824 ; SSE-NEXT:    retq
   1825 ;
   1826 ; AVX-LABEL: test58:
   1827 ; AVX:       # BB#0: # %entry
   1828 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   1829 ; AVX-NEXT:    retq
   1830 entry:
   1831   %cmp = icmp sle <8 x i16> %a, %b
   1832   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1833   ret <8 x i16> %sel
   1834 }
   1835 
   1836 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
   1837 ; SSE-LABEL: test59:
   1838 ; SSE:       # BB#0: # %entry
   1839 ; SSE-NEXT:    pminsw %xmm1, %xmm0
   1840 ; SSE-NEXT:    retq
   1841 ;
   1842 ; AVX-LABEL: test59:
   1843 ; AVX:       # BB#0: # %entry
   1844 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1845 ; AVX-NEXT:    retq
   1846 entry:
   1847   %cmp = icmp sgt <8 x i16> %a, %b
   1848   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1849   ret <8 x i16> %sel
   1850 }
   1851 
   1852 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
   1853 ; SSE-LABEL: test60:
   1854 ; SSE:       # BB#0: # %entry
   1855 ; SSE-NEXT:    pminsw %xmm1, %xmm0
   1856 ; SSE-NEXT:    retq
   1857 ;
   1858 ; AVX-LABEL: test60:
   1859 ; AVX:       # BB#0: # %entry
   1860 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1861 ; AVX-NEXT:    retq
   1862 entry:
   1863   %cmp = icmp sge <8 x i16> %a, %b
   1864   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1865   ret <8 x i16> %sel
   1866 }
   1867 
   1868 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
   1869 ; SSE2-LABEL: test61:
   1870 ; SSE2:       # BB#0: # %entry
   1871 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1872 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   1873 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1874 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   1875 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
   1876 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1877 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1878 ; SSE2-NEXT:    por %xmm1, %xmm2
   1879 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1880 ; SSE2-NEXT:    retq
   1881 ;
   1882 ; SSE4-LABEL: test61:
   1883 ; SSE4:       # BB#0: # %entry
   1884 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
   1885 ; SSE4-NEXT:    retq
   1886 ;
   1887 ; AVX-LABEL: test61:
   1888 ; AVX:       # BB#0: # %entry
   1889 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1890 ; AVX-NEXT:    retq
   1891 entry:
   1892   %cmp = icmp ult <8 x i16> %a, %b
   1893   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1894   ret <8 x i16> %sel
   1895 }
   1896 
   1897 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
   1898 ; SSE2-LABEL: test62:
   1899 ; SSE2:       # BB#0: # %entry
   1900 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   1901 ; SSE2-NEXT:    psubusw %xmm1, %xmm3
   1902 ; SSE2-NEXT:    pxor %xmm2, %xmm2
   1903 ; SSE2-NEXT:    pcmpeqw %xmm3, %xmm2
   1904 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1905 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1906 ; SSE2-NEXT:    por %xmm1, %xmm2
   1907 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1908 ; SSE2-NEXT:    retq
   1909 ;
   1910 ; SSE4-LABEL: test62:
   1911 ; SSE4:       # BB#0: # %entry
   1912 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
   1913 ; SSE4-NEXT:    retq
   1914 ;
   1915 ; AVX-LABEL: test62:
   1916 ; AVX:       # BB#0: # %entry
   1917 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1918 ; AVX-NEXT:    retq
   1919 entry:
   1920   %cmp = icmp ule <8 x i16> %a, %b
   1921   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1922   ret <8 x i16> %sel
   1923 }
   1924 
   1925 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
   1926 ; SSE2-LABEL: test63:
   1927 ; SSE2:       # BB#0: # %entry
   1928 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1929 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1930 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1931 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   1932 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
   1933 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1934 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1935 ; SSE2-NEXT:    por %xmm1, %xmm2
   1936 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1937 ; SSE2-NEXT:    retq
   1938 ;
   1939 ; SSE4-LABEL: test63:
   1940 ; SSE4:       # BB#0: # %entry
   1941 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
   1942 ; SSE4-NEXT:    retq
   1943 ;
   1944 ; AVX-LABEL: test63:
   1945 ; AVX:       # BB#0: # %entry
   1946 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1947 ; AVX-NEXT:    retq
   1948 entry:
   1949   %cmp = icmp ugt <8 x i16> %a, %b
   1950   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1951   ret <8 x i16> %sel
   1952 }
   1953 
   1954 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
   1955 ; SSE2-LABEL: test64:
   1956 ; SSE2:       # BB#0: # %entry
   1957 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1958 ; SSE2-NEXT:    psubusw %xmm0, %xmm3
   1959 ; SSE2-NEXT:    pxor %xmm2, %xmm2
   1960 ; SSE2-NEXT:    pcmpeqw %xmm3, %xmm2
   1961 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1962 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1963 ; SSE2-NEXT:    por %xmm1, %xmm2
   1964 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1965 ; SSE2-NEXT:    retq
   1966 ;
   1967 ; SSE4-LABEL: test64:
   1968 ; SSE4:       # BB#0: # %entry
   1969 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
   1970 ; SSE4-NEXT:    retq
   1971 ;
   1972 ; AVX-LABEL: test64:
   1973 ; AVX:       # BB#0: # %entry
   1974 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1975 ; AVX-NEXT:    retq
   1976 entry:
   1977   %cmp = icmp uge <8 x i16> %a, %b
   1978   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1979   ret <8 x i16> %sel
   1980 }
   1981 
   1982 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
   1983 ; SSE2-LABEL: test65:
   1984 ; SSE2:       # BB#0: # %entry
   1985 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1986 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
   1987 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1988 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1989 ; SSE2-NEXT:    por %xmm1, %xmm2
   1990 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1991 ; SSE2-NEXT:    retq
   1992 ;
   1993 ; SSE4-LABEL: test65:
   1994 ; SSE4:       # BB#0: # %entry
   1995 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
   1996 ; SSE4-NEXT:    retq
   1997 ;
   1998 ; AVX-LABEL: test65:
   1999 ; AVX:       # BB#0: # %entry
   2000 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2001 ; AVX-NEXT:    retq
   2002 entry:
   2003   %cmp = icmp slt <4 x i32> %a, %b
   2004   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2005   ret <4 x i32> %sel
   2006 }
   2007 
   2008 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
   2009 ; SSE2-LABEL: test66:
   2010 ; SSE2:       # BB#0: # %entry
   2011 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   2012 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   2013 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
   2014 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   2015 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   2016 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   2017 ; SSE2-NEXT:    por %xmm3, %xmm2
   2018 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2019 ; SSE2-NEXT:    retq
   2020 ;
   2021 ; SSE4-LABEL: test66:
   2022 ; SSE4:       # BB#0: # %entry
   2023 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
   2024 ; SSE4-NEXT:    retq
   2025 ;
   2026 ; AVX-LABEL: test66:
   2027 ; AVX:       # BB#0: # %entry
   2028 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2029 ; AVX-NEXT:    retq
   2030 entry:
   2031   %cmp = icmp sle <4 x i32> %a, %b
   2032   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2033   ret <4 x i32> %sel
   2034 }
   2035 
   2036 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
   2037 ; SSE2-LABEL: test67:
   2038 ; SSE2:       # BB#0: # %entry
   2039 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   2040 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   2041 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2042 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2043 ; SSE2-NEXT:    por %xmm1, %xmm2
   2044 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2045 ; SSE2-NEXT:    retq
   2046 ;
   2047 ; SSE4-LABEL: test67:
   2048 ; SSE4:       # BB#0: # %entry
   2049 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
   2050 ; SSE4-NEXT:    retq
   2051 ;
   2052 ; AVX-LABEL: test67:
   2053 ; AVX:       # BB#0: # %entry
   2054 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   2055 ; AVX-NEXT:    retq
   2056 entry:
   2057   %cmp = icmp sgt <4 x i32> %a, %b
   2058   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2059   ret <4 x i32> %sel
   2060 }
   2061 
   2062 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
   2063 ; SSE2-LABEL: test68:
   2064 ; SSE2:       # BB#0: # %entry
   2065 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   2066 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
   2067 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   2068 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2069 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   2070 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2071 ; SSE2-NEXT:    por %xmm3, %xmm2
   2072 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2073 ; SSE2-NEXT:    retq
   2074 ;
   2075 ; SSE4-LABEL: test68:
   2076 ; SSE4:       # BB#0: # %entry
   2077 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
   2078 ; SSE4-NEXT:    retq
   2079 ;
   2080 ; AVX-LABEL: test68:
   2081 ; AVX:       # BB#0: # %entry
   2082 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   2083 ; AVX-NEXT:    retq
   2084 entry:
   2085   %cmp = icmp sge <4 x i32> %a, %b
   2086   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2087   ret <4 x i32> %sel
   2088 }
   2089 
   2090 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
   2091 ; SSE2-LABEL: test69:
   2092 ; SSE2:       # BB#0: # %entry
   2093 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   2094 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   2095 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   2096 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   2097 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   2098 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2099 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2100 ; SSE2-NEXT:    por %xmm1, %xmm2
   2101 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2102 ; SSE2-NEXT:    retq
   2103 ;
   2104 ; SSE4-LABEL: test69:
   2105 ; SSE4:       # BB#0: # %entry
   2106 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
   2107 ; SSE4-NEXT:    retq
   2108 ;
   2109 ; AVX-LABEL: test69:
   2110 ; AVX:       # BB#0: # %entry
   2111 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   2112 ; AVX-NEXT:    retq
   2113 entry:
   2114   %cmp = icmp ult <4 x i32> %a, %b
   2115   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2116   ret <4 x i32> %sel
   2117 }
   2118 
   2119 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
   2120 ; SSE2-LABEL: test70:
   2121 ; SSE2:       # BB#0: # %entry
   2122 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
   2123 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   2124 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2125 ; SSE2-NEXT:    pxor %xmm0, %xmm3
   2126 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
   2127 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   2128 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2129 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   2130 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2131 ; SSE2-NEXT:    por %xmm3, %xmm2
   2132 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2133 ; SSE2-NEXT:    retq
   2134 ;
   2135 ; SSE4-LABEL: test70:
   2136 ; SSE4:       # BB#0: # %entry
   2137 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
   2138 ; SSE4-NEXT:    retq
   2139 ;
   2140 ; AVX-LABEL: test70:
   2141 ; AVX:       # BB#0: # %entry
   2142 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   2143 ; AVX-NEXT:    retq
   2144 entry:
   2145   %cmp = icmp ule <4 x i32> %a, %b
   2146   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2147   ret <4 x i32> %sel
   2148 }
   2149 
   2150 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
   2151 ; SSE2-LABEL: test71:
   2152 ; SSE2:       # BB#0: # %entry
   2153 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   2154 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   2155 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   2156 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   2157 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   2158 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2159 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2160 ; SSE2-NEXT:    por %xmm1, %xmm2
   2161 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2162 ; SSE2-NEXT:    retq
   2163 ;
   2164 ; SSE4-LABEL: test71:
   2165 ; SSE4:       # BB#0: # %entry
   2166 ; SSE4-NEXT:    pminud %xmm1, %xmm0
   2167 ; SSE4-NEXT:    retq
   2168 ;
   2169 ; AVX-LABEL: test71:
   2170 ; AVX:       # BB#0: # %entry
   2171 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   2172 ; AVX-NEXT:    retq
   2173 entry:
   2174   %cmp = icmp ugt <4 x i32> %a, %b
   2175   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2176   ret <4 x i32> %sel
   2177 }
   2178 
   2179 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
   2180 ; SSE2-LABEL: test72:
   2181 ; SSE2:       # BB#0: # %entry
   2182 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
   2183 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   2184 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2185 ; SSE2-NEXT:    pxor %xmm1, %xmm3
   2186 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
   2187 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   2188 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2189 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   2190 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2191 ; SSE2-NEXT:    por %xmm3, %xmm2
   2192 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2193 ; SSE2-NEXT:    retq
   2194 ;
   2195 ; SSE4-LABEL: test72:
   2196 ; SSE4:       # BB#0: # %entry
   2197 ; SSE4-NEXT:    pminud %xmm1, %xmm0
   2198 ; SSE4-NEXT:    retq
   2199 ;
   2200 ; AVX-LABEL: test72:
   2201 ; AVX:       # BB#0: # %entry
   2202 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   2203 ; AVX-NEXT:    retq
   2204 entry:
   2205   %cmp = icmp uge <4 x i32> %a, %b
   2206   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2207   ret <4 x i32> %sel
   2208 }
   2209 
   2210 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
   2211 ; SSE2-LABEL: test73:
   2212 ; SSE2:       # BB#0: # %entry
   2213 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   2214 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
   2215 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   2216 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm5
   2217 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2218 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2219 ; SSE2-NEXT:    por %xmm2, %xmm5
   2220 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2221 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2222 ; SSE2-NEXT:    por %xmm3, %xmm4
   2223 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2224 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2225 ; SSE2-NEXT:    retq
   2226 ;
   2227 ; SSE4-LABEL: test73:
   2228 ; SSE4:       # BB#0: # %entry
   2229 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
   2230 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
   2231 ; SSE4-NEXT:    retq
   2232 ;
   2233 ; AVX1-LABEL: test73:
   2234 ; AVX1:       # BB#0: # %entry
   2235 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2236 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2237 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
   2238 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   2239 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2240 ; AVX1-NEXT:    retq
   2241 ;
   2242 ; AVX2-LABEL: test73:
   2243 ; AVX2:       # BB#0: # %entry
   2244 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2245 ; AVX2-NEXT:    retq
   2246 ;
   2247 ; AVX512F-LABEL: test73:
   2248 ; AVX512F:       # BB#0: # %entry
   2249 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2250 ; AVX512F-NEXT:    retq
   2251 entry:
   2252   %cmp = icmp slt <32 x i8> %a, %b
   2253   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2254   ret <32 x i8> %sel
   2255 }
   2256 
   2257 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
   2258 ; SSE2-LABEL: test74:
   2259 ; SSE2:       # BB#0: # %entry
   2260 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   2261 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm6
   2262 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
   2263 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   2264 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   2265 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2266 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
   2267 ; SSE2-NEXT:    pxor %xmm5, %xmm7
   2268 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   2269 ; SSE2-NEXT:    pandn %xmm0, %xmm7
   2270 ; SSE2-NEXT:    por %xmm7, %xmm5
   2271 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   2272 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2273 ; SSE2-NEXT:    por %xmm6, %xmm4
   2274 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2275 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2276 ; SSE2-NEXT:    retq
   2277 ;
   2278 ; SSE4-LABEL: test74:
   2279 ; SSE4:       # BB#0: # %entry
   2280 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
   2281 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
   2282 ; SSE4-NEXT:    retq
   2283 ;
   2284 ; AVX1-LABEL: test74:
   2285 ; AVX1:       # BB#0: # %entry
   2286 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2287 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2288 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
   2289 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   2290 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2291 ; AVX1-NEXT:    retq
   2292 ;
   2293 ; AVX2-LABEL: test74:
   2294 ; AVX2:       # BB#0: # %entry
   2295 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2296 ; AVX2-NEXT:    retq
   2297 ;
   2298 ; AVX512F-LABEL: test74:
   2299 ; AVX512F:       # BB#0: # %entry
   2300 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2301 ; AVX512F-NEXT:    retq
   2302 entry:
   2303   %cmp = icmp sle <32 x i8> %a, %b
   2304   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2305   ret <32 x i8> %sel
   2306 }
   2307 
   2308 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
   2309 ; SSE2-LABEL: test75:
   2310 ; SSE2:       # BB#0: # %entry
   2311 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   2312 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
   2313 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2314 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
   2315 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2316 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2317 ; SSE2-NEXT:    por %xmm2, %xmm5
   2318 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2319 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2320 ; SSE2-NEXT:    por %xmm3, %xmm4
   2321 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2322 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2323 ; SSE2-NEXT:    retq
   2324 ;
   2325 ; SSE4-LABEL: test75:
   2326 ; SSE4:       # BB#0: # %entry
   2327 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
   2328 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
   2329 ; SSE4-NEXT:    retq
   2330 ;
   2331 ; AVX1-LABEL: test75:
   2332 ; AVX1:       # BB#0: # %entry
   2333 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2334 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2335 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
   2336 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   2337 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2338 ; AVX1-NEXT:    retq
   2339 ;
   2340 ; AVX2-LABEL: test75:
   2341 ; AVX2:       # BB#0: # %entry
   2342 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2343 ; AVX2-NEXT:    retq
   2344 ;
   2345 ; AVX512F-LABEL: test75:
   2346 ; AVX512F:       # BB#0: # %entry
   2347 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2348 ; AVX512F-NEXT:    retq
   2349 entry:
   2350   %cmp = icmp sgt <32 x i8> %a, %b
   2351   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2352   ret <32 x i8> %sel
   2353 }
   2354 
   2355 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
   2356 ; SSE2-LABEL: test76:
   2357 ; SSE2:       # BB#0: # %entry
   2358 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   2359 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm6
   2360 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   2361 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   2362 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   2363 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
   2364 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm7
   2365 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   2366 ; SSE2-NEXT:    pandn %xmm2, %xmm7
   2367 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   2368 ; SSE2-NEXT:    por %xmm7, %xmm4
   2369 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   2370 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   2371 ; SSE2-NEXT:    por %xmm6, %xmm5
   2372 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2373 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   2374 ; SSE2-NEXT:    retq
   2375 ;
   2376 ; SSE4-LABEL: test76:
   2377 ; SSE4:       # BB#0: # %entry
   2378 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
   2379 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
   2380 ; SSE4-NEXT:    retq
   2381 ;
   2382 ; AVX1-LABEL: test76:
   2383 ; AVX1:       # BB#0: # %entry
   2384 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2385 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2386 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
   2387 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   2388 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2389 ; AVX1-NEXT:    retq
   2390 ;
   2391 ; AVX2-LABEL: test76:
   2392 ; AVX2:       # BB#0: # %entry
   2393 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2394 ; AVX2-NEXT:    retq
   2395 ;
   2396 ; AVX512F-LABEL: test76:
   2397 ; AVX512F:       # BB#0: # %entry
   2398 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2399 ; AVX512F-NEXT:    retq
   2400 entry:
   2401   %cmp = icmp sge <32 x i8> %a, %b
   2402   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2403   ret <32 x i8> %sel
   2404 }
   2405 
   2406 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
   2407 ; SSE-LABEL: test77:
   2408 ; SSE:       # BB#0: # %entry
   2409 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
   2410 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
   2411 ; SSE-NEXT:    retq
   2412 ;
   2413 ; AVX1-LABEL: test77:
   2414 ; AVX1:       # BB#0: # %entry
   2415 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2416 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2417 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
   2418 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   2419 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2420 ; AVX1-NEXT:    retq
   2421 ;
   2422 ; AVX2-LABEL: test77:
   2423 ; AVX2:       # BB#0: # %entry
   2424 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2425 ; AVX2-NEXT:    retq
   2426 ;
   2427 ; AVX512F-LABEL: test77:
   2428 ; AVX512F:       # BB#0: # %entry
   2429 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2430 ; AVX512F-NEXT:    retq
   2431 entry:
   2432   %cmp = icmp ult <32 x i8> %a, %b
   2433   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2434   ret <32 x i8> %sel
   2435 }
   2436 
   2437 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
   2438 ; SSE-LABEL: test78:
   2439 ; SSE:       # BB#0: # %entry
   2440 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
   2441 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
   2442 ; SSE-NEXT:    retq
   2443 ;
   2444 ; AVX1-LABEL: test78:
   2445 ; AVX1:       # BB#0: # %entry
   2446 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2447 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2448 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
   2449 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   2450 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2451 ; AVX1-NEXT:    retq
   2452 ;
   2453 ; AVX2-LABEL: test78:
   2454 ; AVX2:       # BB#0: # %entry
   2455 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2456 ; AVX2-NEXT:    retq
   2457 ;
   2458 ; AVX512F-LABEL: test78:
   2459 ; AVX512F:       # BB#0: # %entry
   2460 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2461 ; AVX512F-NEXT:    retq
   2462 entry:
   2463   %cmp = icmp ule <32 x i8> %a, %b
   2464   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2465   ret <32 x i8> %sel
   2466 }
   2467 
   2468 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
   2469 ; SSE-LABEL: test79:
   2470 ; SSE:       # BB#0: # %entry
   2471 ; SSE-NEXT:    pminub %xmm2, %xmm0
   2472 ; SSE-NEXT:    pminub %xmm3, %xmm1
   2473 ; SSE-NEXT:    retq
   2474 ;
   2475 ; AVX1-LABEL: test79:
   2476 ; AVX1:       # BB#0: # %entry
   2477 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2478 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2479 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
   2480 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   2481 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2482 ; AVX1-NEXT:    retq
   2483 ;
   2484 ; AVX2-LABEL: test79:
   2485 ; AVX2:       # BB#0: # %entry
   2486 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2487 ; AVX2-NEXT:    retq
   2488 ;
   2489 ; AVX512F-LABEL: test79:
   2490 ; AVX512F:       # BB#0: # %entry
   2491 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2492 ; AVX512F-NEXT:    retq
   2493 entry:
   2494   %cmp = icmp ugt <32 x i8> %a, %b
   2495   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2496   ret <32 x i8> %sel
   2497 }
   2498 
   2499 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
   2500 ; SSE-LABEL: test80:
   2501 ; SSE:       # BB#0: # %entry
   2502 ; SSE-NEXT:    pminub %xmm2, %xmm0
   2503 ; SSE-NEXT:    pminub %xmm3, %xmm1
   2504 ; SSE-NEXT:    retq
   2505 ;
   2506 ; AVX1-LABEL: test80:
   2507 ; AVX1:       # BB#0: # %entry
   2508 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2509 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2510 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
   2511 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   2512 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2513 ; AVX1-NEXT:    retq
   2514 ;
   2515 ; AVX2-LABEL: test80:
   2516 ; AVX2:       # BB#0: # %entry
   2517 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2518 ; AVX2-NEXT:    retq
   2519 ;
   2520 ; AVX512F-LABEL: test80:
   2521 ; AVX512F:       # BB#0: # %entry
   2522 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2523 ; AVX512F-NEXT:    retq
   2524 entry:
   2525   %cmp = icmp uge <32 x i8> %a, %b
   2526   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2527   ret <32 x i8> %sel
   2528 }
   2529 
   2530 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
   2531 ; SSE-LABEL: test81:
   2532 ; SSE:       # BB#0: # %entry
   2533 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
   2534 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
   2535 ; SSE-NEXT:    retq
   2536 ;
   2537 ; AVX1-LABEL: test81:
   2538 ; AVX1:       # BB#0: # %entry
   2539 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2540 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2541 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
   2542 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   2543 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2544 ; AVX1-NEXT:    retq
   2545 ;
   2546 ; AVX2-LABEL: test81:
   2547 ; AVX2:       # BB#0: # %entry
   2548 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2549 ; AVX2-NEXT:    retq
   2550 ;
   2551 ; AVX512F-LABEL: test81:
   2552 ; AVX512F:       # BB#0: # %entry
   2553 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2554 ; AVX512F-NEXT:    retq
   2555 entry:
   2556   %cmp = icmp slt <16 x i16> %a, %b
   2557   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2558   ret <16 x i16> %sel
   2559 }
   2560 
   2561 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
   2562 ; SSE-LABEL: test82:
   2563 ; SSE:       # BB#0: # %entry
   2564 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
   2565 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
   2566 ; SSE-NEXT:    retq
   2567 ;
   2568 ; AVX1-LABEL: test82:
   2569 ; AVX1:       # BB#0: # %entry
   2570 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2571 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2572 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
   2573 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   2574 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2575 ; AVX1-NEXT:    retq
   2576 ;
   2577 ; AVX2-LABEL: test82:
   2578 ; AVX2:       # BB#0: # %entry
   2579 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2580 ; AVX2-NEXT:    retq
   2581 ;
   2582 ; AVX512F-LABEL: test82:
   2583 ; AVX512F:       # BB#0: # %entry
   2584 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2585 ; AVX512F-NEXT:    retq
   2586 entry:
   2587   %cmp = icmp sle <16 x i16> %a, %b
   2588   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2589   ret <16 x i16> %sel
   2590 }
   2591 
   2592 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
   2593 ; SSE-LABEL: test83:
   2594 ; SSE:       # BB#0: # %entry
   2595 ; SSE-NEXT:    pminsw %xmm2, %xmm0
   2596 ; SSE-NEXT:    pminsw %xmm3, %xmm1
   2597 ; SSE-NEXT:    retq
   2598 ;
   2599 ; AVX1-LABEL: test83:
   2600 ; AVX1:       # BB#0: # %entry
   2601 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2602 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2603 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
   2604 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   2605 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2606 ; AVX1-NEXT:    retq
   2607 ;
   2608 ; AVX2-LABEL: test83:
   2609 ; AVX2:       # BB#0: # %entry
   2610 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2611 ; AVX2-NEXT:    retq
   2612 ;
   2613 ; AVX512F-LABEL: test83:
   2614 ; AVX512F:       # BB#0: # %entry
   2615 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2616 ; AVX512F-NEXT:    retq
   2617 entry:
   2618   %cmp = icmp sgt <16 x i16> %a, %b
   2619   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2620   ret <16 x i16> %sel
   2621 }
   2622 
   2623 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
   2624 ; SSE-LABEL: test84:
   2625 ; SSE:       # BB#0: # %entry
   2626 ; SSE-NEXT:    pminsw %xmm2, %xmm0
   2627 ; SSE-NEXT:    pminsw %xmm3, %xmm1
   2628 ; SSE-NEXT:    retq
   2629 ;
   2630 ; AVX1-LABEL: test84:
   2631 ; AVX1:       # BB#0: # %entry
   2632 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2633 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2634 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
   2635 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   2636 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2637 ; AVX1-NEXT:    retq
   2638 ;
   2639 ; AVX2-LABEL: test84:
   2640 ; AVX2:       # BB#0: # %entry
   2641 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2642 ; AVX2-NEXT:    retq
   2643 ;
   2644 ; AVX512F-LABEL: test84:
   2645 ; AVX512F:       # BB#0: # %entry
   2646 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2647 ; AVX512F-NEXT:    retq
   2648 entry:
   2649   %cmp = icmp sge <16 x i16> %a, %b
   2650   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2651   ret <16 x i16> %sel
   2652 }
   2653 
   2654 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
   2655 ; SSE2-LABEL: test85:
   2656 ; SSE2:       # BB#0: # %entry
   2657 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   2658 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   2659 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   2660 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   2661 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   2662 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
   2663 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   2664 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   2665 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   2666 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
   2667 ; SSE2-NEXT:    pand %xmm4, %xmm2
   2668 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   2669 ; SSE2-NEXT:    por %xmm2, %xmm4
   2670 ; SSE2-NEXT:    pand %xmm5, %xmm3
   2671 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   2672 ; SSE2-NEXT:    por %xmm3, %xmm5
   2673 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2674 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   2675 ; SSE2-NEXT:    retq
   2676 ;
   2677 ; SSE4-LABEL: test85:
   2678 ; SSE4:       # BB#0: # %entry
   2679 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   2680 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   2681 ; SSE4-NEXT:    retq
   2682 ;
   2683 ; AVX1-LABEL: test85:
   2684 ; AVX1:       # BB#0: # %entry
   2685 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2686 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2687 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   2688 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   2689 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2690 ; AVX1-NEXT:    retq
   2691 ;
   2692 ; AVX2-LABEL: test85:
   2693 ; AVX2:       # BB#0: # %entry
   2694 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2695 ; AVX2-NEXT:    retq
   2696 ;
   2697 ; AVX512F-LABEL: test85:
   2698 ; AVX512F:       # BB#0: # %entry
   2699 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2700 ; AVX512F-NEXT:    retq
   2701 entry:
   2702   %cmp = icmp ult <16 x i16> %a, %b
   2703   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2704   ret <16 x i16> %sel
   2705 }
   2706 
   2707 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
   2708 ; SSE2-LABEL: test86:
   2709 ; SSE2:       # BB#0: # %entry
   2710 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   2711 ; SSE2-NEXT:    psubusw %xmm3, %xmm4
   2712 ; SSE2-NEXT:    pxor %xmm6, %xmm6
   2713 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
   2714 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2715 ; SSE2-NEXT:    psubusw %xmm2, %xmm5
   2716 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
   2717 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2718 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2719 ; SSE2-NEXT:    por %xmm2, %xmm5
   2720 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2721 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2722 ; SSE2-NEXT:    por %xmm3, %xmm4
   2723 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2724 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2725 ; SSE2-NEXT:    retq
   2726 ;
   2727 ; SSE4-LABEL: test86:
   2728 ; SSE4:       # BB#0: # %entry
   2729 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   2730 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   2731 ; SSE4-NEXT:    retq
   2732 ;
   2733 ; AVX1-LABEL: test86:
   2734 ; AVX1:       # BB#0: # %entry
   2735 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2736 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2737 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   2738 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   2739 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2740 ; AVX1-NEXT:    retq
   2741 ;
   2742 ; AVX2-LABEL: test86:
   2743 ; AVX2:       # BB#0: # %entry
   2744 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2745 ; AVX2-NEXT:    retq
   2746 ;
   2747 ; AVX512F-LABEL: test86:
   2748 ; AVX512F:       # BB#0: # %entry
   2749 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2750 ; AVX512F-NEXT:    retq
   2751 entry:
   2752   %cmp = icmp ule <16 x i16> %a, %b
   2753   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2754   ret <16 x i16> %sel
   2755 }
   2756 
   2757 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
   2758 ; SSE2-LABEL: test87:
   2759 ; SSE2:       # BB#0: # %entry
   2760 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   2761 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   2762 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   2763 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   2764 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   2765 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
   2766 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   2767 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   2768 ; SSE2-NEXT:    pxor %xmm0, %xmm4
   2769 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
   2770 ; SSE2-NEXT:    pand %xmm4, %xmm2
   2771 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   2772 ; SSE2-NEXT:    por %xmm2, %xmm4
   2773 ; SSE2-NEXT:    pand %xmm5, %xmm3
   2774 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   2775 ; SSE2-NEXT:    por %xmm3, %xmm5
   2776 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2777 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   2778 ; SSE2-NEXT:    retq
   2779 ;
   2780 ; SSE4-LABEL: test87:
   2781 ; SSE4:       # BB#0: # %entry
   2782 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   2783 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   2784 ; SSE4-NEXT:    retq
   2785 ;
   2786 ; AVX1-LABEL: test87:
   2787 ; AVX1:       # BB#0: # %entry
   2788 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2789 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2790 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   2791 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   2792 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2793 ; AVX1-NEXT:    retq
   2794 ;
   2795 ; AVX2-LABEL: test87:
   2796 ; AVX2:       # BB#0: # %entry
   2797 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2798 ; AVX2-NEXT:    retq
   2799 ;
   2800 ; AVX512F-LABEL: test87:
   2801 ; AVX512F:       # BB#0: # %entry
   2802 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2803 ; AVX512F-NEXT:    retq
   2804 entry:
   2805   %cmp = icmp ugt <16 x i16> %a, %b
   2806   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2807   ret <16 x i16> %sel
   2808 }
   2809 
   2810 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
   2811 ; SSE2-LABEL: test88:
   2812 ; SSE2:       # BB#0: # %entry
   2813 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   2814 ; SSE2-NEXT:    psubusw %xmm1, %xmm4
   2815 ; SSE2-NEXT:    pxor %xmm6, %xmm6
   2816 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
   2817 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   2818 ; SSE2-NEXT:    psubusw %xmm0, %xmm5
   2819 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
   2820 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2821 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2822 ; SSE2-NEXT:    por %xmm2, %xmm5
   2823 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2824 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2825 ; SSE2-NEXT:    por %xmm3, %xmm4
   2826 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2827 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2828 ; SSE2-NEXT:    retq
   2829 ;
   2830 ; SSE4-LABEL: test88:
   2831 ; SSE4:       # BB#0: # %entry
   2832 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   2833 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   2834 ; SSE4-NEXT:    retq
   2835 ;
   2836 ; AVX1-LABEL: test88:
   2837 ; AVX1:       # BB#0: # %entry
   2838 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2839 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2840 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   2841 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   2842 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2843 ; AVX1-NEXT:    retq
   2844 ;
   2845 ; AVX2-LABEL: test88:
   2846 ; AVX2:       # BB#0: # %entry
   2847 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2848 ; AVX2-NEXT:    retq
   2849 ;
   2850 ; AVX512F-LABEL: test88:
   2851 ; AVX512F:       # BB#0: # %entry
   2852 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2853 ; AVX512F-NEXT:    retq
   2854 entry:
   2855   %cmp = icmp uge <16 x i16> %a, %b
   2856   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2857   ret <16 x i16> %sel
   2858 }
   2859 
   2860 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
   2861 ; SSE2-LABEL: test89:
   2862 ; SSE2:       # BB#0: # %entry
   2863 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   2864 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   2865 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   2866 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   2867 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2868 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2869 ; SSE2-NEXT:    por %xmm2, %xmm5
   2870 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2871 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2872 ; SSE2-NEXT:    por %xmm3, %xmm4
   2873 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2874 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2875 ; SSE2-NEXT:    retq
   2876 ;
   2877 ; SSE4-LABEL: test89:
   2878 ; SSE4:       # BB#0: # %entry
   2879 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   2880 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   2881 ; SSE4-NEXT:    retq
   2882 ;
   2883 ; AVX1-LABEL: test89:
   2884 ; AVX1:       # BB#0: # %entry
   2885 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2886 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2887 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   2888 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2889 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2890 ; AVX1-NEXT:    retq
   2891 ;
   2892 ; AVX2-LABEL: test89:
   2893 ; AVX2:       # BB#0: # %entry
   2894 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2895 ; AVX2-NEXT:    retq
   2896 ;
   2897 ; AVX512F-LABEL: test89:
   2898 ; AVX512F:       # BB#0: # %entry
   2899 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2900 ; AVX512F-NEXT:    retq
   2901 entry:
   2902   %cmp = icmp slt <8 x i32> %a, %b
   2903   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2904   ret <8 x i32> %sel
   2905 }
   2906 
   2907 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
   2908 ; SSE2-LABEL: test90:
   2909 ; SSE2:       # BB#0: # %entry
   2910 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   2911 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
   2912 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
   2913 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   2914 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   2915 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2916 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   2917 ; SSE2-NEXT:    pxor %xmm5, %xmm7
   2918 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   2919 ; SSE2-NEXT:    pandn %xmm0, %xmm7
   2920 ; SSE2-NEXT:    por %xmm7, %xmm5
   2921 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   2922 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2923 ; SSE2-NEXT:    por %xmm6, %xmm4
   2924 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2925 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2926 ; SSE2-NEXT:    retq
   2927 ;
   2928 ; SSE4-LABEL: test90:
   2929 ; SSE4:       # BB#0: # %entry
   2930 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   2931 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   2932 ; SSE4-NEXT:    retq
   2933 ;
   2934 ; AVX1-LABEL: test90:
   2935 ; AVX1:       # BB#0: # %entry
   2936 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2937 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2938 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   2939 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2940 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2941 ; AVX1-NEXT:    retq
   2942 ;
   2943 ; AVX2-LABEL: test90:
   2944 ; AVX2:       # BB#0: # %entry
   2945 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2946 ; AVX2-NEXT:    retq
   2947 ;
   2948 ; AVX512F-LABEL: test90:
   2949 ; AVX512F:       # BB#0: # %entry
   2950 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2951 ; AVX512F-NEXT:    retq
   2952 entry:
   2953   %cmp = icmp sle <8 x i32> %a, %b
   2954   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2955   ret <8 x i32> %sel
   2956 }
   2957 
   2958 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
   2959 ; SSE2-LABEL: test91:
   2960 ; SSE2:       # BB#0: # %entry
   2961 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   2962 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   2963 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2964 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   2965 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2966 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2967 ; SSE2-NEXT:    por %xmm2, %xmm5
   2968 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2969 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2970 ; SSE2-NEXT:    por %xmm3, %xmm4
   2971 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2972 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2973 ; SSE2-NEXT:    retq
   2974 ;
   2975 ; SSE4-LABEL: test91:
   2976 ; SSE4:       # BB#0: # %entry
   2977 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   2978 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   2979 ; SSE4-NEXT:    retq
   2980 ;
   2981 ; AVX1-LABEL: test91:
   2982 ; AVX1:       # BB#0: # %entry
   2983 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2984 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2985 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   2986 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   2987 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2988 ; AVX1-NEXT:    retq
   2989 ;
   2990 ; AVX2-LABEL: test91:
   2991 ; AVX2:       # BB#0: # %entry
   2992 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2993 ; AVX2-NEXT:    retq
   2994 ;
   2995 ; AVX512F-LABEL: test91:
   2996 ; AVX512F:       # BB#0: # %entry
   2997 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2998 ; AVX512F-NEXT:    retq
   2999 entry:
   3000   %cmp = icmp sgt <8 x i32> %a, %b
   3001   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3002   ret <8 x i32> %sel
   3003 }
   3004 
   3005 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
   3006 ; SSE2-LABEL: test92:
   3007 ; SSE2:       # BB#0: # %entry
   3008 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   3009 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
   3010 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   3011 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   3012 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3013 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
   3014 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm7
   3015 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   3016 ; SSE2-NEXT:    pandn %xmm2, %xmm7
   3017 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3018 ; SSE2-NEXT:    por %xmm7, %xmm4
   3019 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   3020 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3021 ; SSE2-NEXT:    por %xmm6, %xmm5
   3022 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3023 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3024 ; SSE2-NEXT:    retq
   3025 ;
   3026 ; SSE4-LABEL: test92:
   3027 ; SSE4:       # BB#0: # %entry
   3028 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   3029 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   3030 ; SSE4-NEXT:    retq
   3031 ;
   3032 ; AVX1-LABEL: test92:
   3033 ; AVX1:       # BB#0: # %entry
   3034 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3035 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3036 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   3037 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   3038 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3039 ; AVX1-NEXT:    retq
   3040 ;
   3041 ; AVX2-LABEL: test92:
   3042 ; AVX2:       # BB#0: # %entry
   3043 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   3044 ; AVX2-NEXT:    retq
   3045 ;
   3046 ; AVX512F-LABEL: test92:
   3047 ; AVX512F:       # BB#0: # %entry
   3048 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   3049 ; AVX512F-NEXT:    retq
   3050 entry:
   3051   %cmp = icmp sge <8 x i32> %a, %b
   3052   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3053   ret <8 x i32> %sel
   3054 }
   3055 
   3056 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
   3057 ; SSE2-LABEL: test93:
   3058 ; SSE2:       # BB#0: # %entry
   3059 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   3060 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   3061 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   3062 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   3063 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3064 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   3065 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   3066 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   3067 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   3068 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   3069 ; SSE2-NEXT:    pand %xmm4, %xmm2
   3070 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3071 ; SSE2-NEXT:    por %xmm2, %xmm4
   3072 ; SSE2-NEXT:    pand %xmm5, %xmm3
   3073 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3074 ; SSE2-NEXT:    por %xmm3, %xmm5
   3075 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3076 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3077 ; SSE2-NEXT:    retq
   3078 ;
   3079 ; SSE4-LABEL: test93:
   3080 ; SSE4:       # BB#0: # %entry
   3081 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   3082 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   3083 ; SSE4-NEXT:    retq
   3084 ;
   3085 ; AVX1-LABEL: test93:
   3086 ; AVX1:       # BB#0: # %entry
   3087 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3088 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3089 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   3090 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   3091 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3092 ; AVX1-NEXT:    retq
   3093 ;
   3094 ; AVX2-LABEL: test93:
   3095 ; AVX2:       # BB#0: # %entry
   3096 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   3097 ; AVX2-NEXT:    retq
   3098 ;
   3099 ; AVX512F-LABEL: test93:
   3100 ; AVX512F:       # BB#0: # %entry
   3101 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   3102 ; AVX512F-NEXT:    retq
   3103 entry:
   3104   %cmp = icmp ult <8 x i32> %a, %b
   3105   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3106   ret <8 x i32> %sel
   3107 }
   3108 
   3109 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
   3110 ; SSE2-LABEL: test94:
   3111 ; SSE2:       # BB#0: # %entry
   3112 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
   3113 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   3114 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   3115 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
   3116 ; SSE2-NEXT:    pxor %xmm6, %xmm7
   3117 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   3118 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   3119 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   3120 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3121 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   3122 ; SSE2-NEXT:    pxor %xmm6, %xmm8
   3123 ; SSE2-NEXT:    pxor %xmm0, %xmm6
   3124 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
   3125 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   3126 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   3127 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3128 ; SSE2-NEXT:    por %xmm6, %xmm4
   3129 ; SSE2-NEXT:    pandn %xmm3, %xmm7
   3130 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3131 ; SSE2-NEXT:    por %xmm7, %xmm5
   3132 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3133 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3134 ; SSE2-NEXT:    retq
   3135 ;
   3136 ; SSE4-LABEL: test94:
   3137 ; SSE4:       # BB#0: # %entry
   3138 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   3139 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   3140 ; SSE4-NEXT:    retq
   3141 ;
   3142 ; AVX1-LABEL: test94:
   3143 ; AVX1:       # BB#0: # %entry
   3144 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3145 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3146 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   3147 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   3148 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3149 ; AVX1-NEXT:    retq
   3150 ;
   3151 ; AVX2-LABEL: test94:
   3152 ; AVX2:       # BB#0: # %entry
   3153 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   3154 ; AVX2-NEXT:    retq
   3155 ;
   3156 ; AVX512F-LABEL: test94:
   3157 ; AVX512F:       # BB#0: # %entry
   3158 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   3159 ; AVX512F-NEXT:    retq
   3160 entry:
   3161   %cmp = icmp ule <8 x i32> %a, %b
   3162   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3163   ret <8 x i32> %sel
   3164 }
   3165 
   3166 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
   3167 ; SSE2-LABEL: test95:
   3168 ; SSE2:       # BB#0: # %entry
   3169 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   3170 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   3171 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   3172 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   3173 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3174 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   3175 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   3176 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   3177 ; SSE2-NEXT:    pxor %xmm0, %xmm4
   3178 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   3179 ; SSE2-NEXT:    pand %xmm4, %xmm2
   3180 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3181 ; SSE2-NEXT:    por %xmm2, %xmm4
   3182 ; SSE2-NEXT:    pand %xmm5, %xmm3
   3183 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3184 ; SSE2-NEXT:    por %xmm3, %xmm5
   3185 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3186 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3187 ; SSE2-NEXT:    retq
   3188 ;
   3189 ; SSE4-LABEL: test95:
   3190 ; SSE4:       # BB#0: # %entry
   3191 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   3192 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   3193 ; SSE4-NEXT:    retq
   3194 ;
   3195 ; AVX1-LABEL: test95:
   3196 ; AVX1:       # BB#0: # %entry
   3197 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3198 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3199 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   3200 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   3201 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3202 ; AVX1-NEXT:    retq
   3203 ;
   3204 ; AVX2-LABEL: test95:
   3205 ; AVX2:       # BB#0: # %entry
   3206 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3207 ; AVX2-NEXT:    retq
   3208 ;
   3209 ; AVX512F-LABEL: test95:
   3210 ; AVX512F:       # BB#0: # %entry
   3211 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3212 ; AVX512F-NEXT:    retq
   3213 entry:
   3214   %cmp = icmp ugt <8 x i32> %a, %b
   3215   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3216   ret <8 x i32> %sel
   3217 }
   3218 
   3219 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
   3220 ; SSE2-LABEL: test96:
   3221 ; SSE2:       # BB#0: # %entry
   3222 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
   3223 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   3224 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   3225 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   3226 ; SSE2-NEXT:    pxor %xmm6, %xmm7
   3227 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   3228 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   3229 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   3230 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3231 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   3232 ; SSE2-NEXT:    pxor %xmm6, %xmm8
   3233 ; SSE2-NEXT:    pxor %xmm2, %xmm6
   3234 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
   3235 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   3236 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   3237 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3238 ; SSE2-NEXT:    por %xmm6, %xmm4
   3239 ; SSE2-NEXT:    pandn %xmm3, %xmm7
   3240 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3241 ; SSE2-NEXT:    por %xmm7, %xmm5
   3242 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3243 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3244 ; SSE2-NEXT:    retq
   3245 ;
   3246 ; SSE4-LABEL: test96:
   3247 ; SSE4:       # BB#0: # %entry
   3248 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   3249 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   3250 ; SSE4-NEXT:    retq
   3251 ;
   3252 ; AVX1-LABEL: test96:
   3253 ; AVX1:       # BB#0: # %entry
   3254 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3255 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3256 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   3257 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   3258 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3259 ; AVX1-NEXT:    retq
   3260 ;
   3261 ; AVX2-LABEL: test96:
   3262 ; AVX2:       # BB#0: # %entry
   3263 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3264 ; AVX2-NEXT:    retq
   3265 ;
   3266 ; AVX512F-LABEL: test96:
   3267 ; AVX512F:       # BB#0: # %entry
   3268 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3269 ; AVX512F-NEXT:    retq
   3270 entry:
   3271   %cmp = icmp uge <8 x i32> %a, %b
   3272   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3273   ret <8 x i32> %sel
   3274 }
   3275 
   3276 ; ----------------------------
   3277 
   3278 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
   3279 ; SSE2-LABEL: test97:
   3280 ; SSE2:       # BB#0: # %entry
   3281 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   3282 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm8
   3283 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   3284 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm9
   3285 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   3286 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm10
   3287 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   3288 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm11
   3289 ; SSE2-NEXT:    pand %xmm11, %xmm0
   3290 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   3291 ; SSE2-NEXT:    por %xmm11, %xmm0
   3292 ; SSE2-NEXT:    pand %xmm10, %xmm1
   3293 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   3294 ; SSE2-NEXT:    por %xmm10, %xmm1
   3295 ; SSE2-NEXT:    pand %xmm9, %xmm2
   3296 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   3297 ; SSE2-NEXT:    por %xmm9, %xmm2
   3298 ; SSE2-NEXT:    pand %xmm8, %xmm3
   3299 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   3300 ; SSE2-NEXT:    por %xmm8, %xmm3
   3301 ; SSE2-NEXT:    retq
   3302 ;
   3303 ; SSE4-LABEL: test97:
   3304 ; SSE4:       # BB#0: # %entry
   3305 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   3306 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   3307 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   3308 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   3309 ; SSE4-NEXT:    retq
   3310 ;
   3311 ; AVX1-LABEL: test97:
   3312 ; AVX1:       # BB#0: # %entry
   3313 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3314 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3315 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   3316 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   3317 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3318 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3319 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3320 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   3321 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   3322 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3323 ; AVX1-NEXT:    retq
   3324 ;
   3325 ; AVX2-LABEL: test97:
   3326 ; AVX2:       # BB#0: # %entry
   3327 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   3328 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   3329 ; AVX2-NEXT:    retq
   3330 ;
   3331 ; AVX512BW-LABEL: test97:
   3332 ; AVX512BW:       # BB#0: # %entry
   3333 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   3334 ; AVX512BW-NEXT:    retq
   3335 entry:
   3336   %cmp = icmp slt <64 x i8> %a, %b
   3337   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3338   ret <64 x i8> %sel
   3339 }
   3340 
   3341 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
   3342 ; SSE2-LABEL: test98:
   3343 ; SSE2:       # BB#0: # %entry
   3344 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   3345 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   3346 ; SSE2-NEXT:    movdqa %xmm8, %xmm12
   3347 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm12
   3348 ; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
   3349 ; SSE2-NEXT:    movdqa %xmm12, %xmm3
   3350 ; SSE2-NEXT:    pxor %xmm13, %xmm3
   3351 ; SSE2-NEXT:    movdqa %xmm9, %xmm14
   3352 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm14
   3353 ; SSE2-NEXT:    movdqa %xmm14, %xmm2
   3354 ; SSE2-NEXT:    pxor %xmm13, %xmm2
   3355 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   3356 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm15
   3357 ; SSE2-NEXT:    movdqa %xmm15, %xmm10
   3358 ; SSE2-NEXT:    pxor %xmm13, %xmm10
   3359 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   3360 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
   3361 ; SSE2-NEXT:    pxor %xmm11, %xmm13
   3362 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   3363 ; SSE2-NEXT:    pandn %xmm4, %xmm13
   3364 ; SSE2-NEXT:    por %xmm13, %xmm11
   3365 ; SSE2-NEXT:    pandn %xmm1, %xmm15
   3366 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   3367 ; SSE2-NEXT:    por %xmm15, %xmm10
   3368 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   3369 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   3370 ; SSE2-NEXT:    por %xmm14, %xmm2
   3371 ; SSE2-NEXT:    pandn %xmm8, %xmm12
   3372 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   3373 ; SSE2-NEXT:    por %xmm12, %xmm3
   3374 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   3375 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   3376 ; SSE2-NEXT:    retq
   3377 ;
   3378 ; SSE4-LABEL: test98:
   3379 ; SSE4:       # BB#0: # %entry
   3380 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   3381 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   3382 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   3383 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   3384 ; SSE4-NEXT:    retq
   3385 ;
   3386 ; AVX1-LABEL: test98:
   3387 ; AVX1:       # BB#0: # %entry
   3388 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3389 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3390 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   3391 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   3392 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3393 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3394 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3395 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   3396 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   3397 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3398 ; AVX1-NEXT:    retq
   3399 ;
   3400 ; AVX2-LABEL: test98:
   3401 ; AVX2:       # BB#0: # %entry
   3402 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   3403 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   3404 ; AVX2-NEXT:    retq
   3405 ;
   3406 ; AVX512BW-LABEL: test98:
   3407 ; AVX512BW:       # BB#0: # %entry
   3408 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   3409 ; AVX512BW-NEXT:    retq
   3410 entry:
   3411   %cmp = icmp sle <64 x i8> %a, %b
   3412   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3413   ret <64 x i8> %sel
   3414 }
   3415 
   3416 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
   3417 ; SSE2-LABEL: test99:
   3418 ; SSE2:       # BB#0: # %entry
   3419 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   3420 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
   3421 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   3422 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm9
   3423 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   3424 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm10
   3425 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   3426 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
   3427 ; SSE2-NEXT:    pand %xmm11, %xmm0
   3428 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   3429 ; SSE2-NEXT:    por %xmm0, %xmm11
   3430 ; SSE2-NEXT:    pand %xmm10, %xmm1
   3431 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   3432 ; SSE2-NEXT:    por %xmm1, %xmm10
   3433 ; SSE2-NEXT:    pand %xmm9, %xmm2
   3434 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   3435 ; SSE2-NEXT:    por %xmm2, %xmm9
   3436 ; SSE2-NEXT:    pand %xmm3, %xmm8
   3437 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   3438 ; SSE2-NEXT:    por %xmm8, %xmm3
   3439 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   3440 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   3441 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   3442 ; SSE2-NEXT:    retq
   3443 ;
   3444 ; SSE4-LABEL: test99:
   3445 ; SSE4:       # BB#0: # %entry
   3446 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   3447 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   3448 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   3449 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   3450 ; SSE4-NEXT:    retq
   3451 ;
   3452 ; AVX1-LABEL: test99:
   3453 ; AVX1:       # BB#0: # %entry
   3454 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3455 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3456 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   3457 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   3458 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3459 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3460 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3461 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   3462 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   3463 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3464 ; AVX1-NEXT:    retq
   3465 ;
   3466 ; AVX2-LABEL: test99:
   3467 ; AVX2:       # BB#0: # %entry
   3468 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   3469 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   3470 ; AVX2-NEXT:    retq
   3471 ;
   3472 ; AVX512BW-LABEL: test99:
   3473 ; AVX512BW:       # BB#0: # %entry
   3474 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   3475 ; AVX512BW-NEXT:    retq
   3476 entry:
   3477   %cmp = icmp sgt <64 x i8> %a, %b
   3478   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3479   ret <64 x i8> %sel
   3480 }
   3481 
   3482 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
   3483 ; SSE2-LABEL: test100:
   3484 ; SSE2:       # BB#0: # %entry
   3485 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   3486 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   3487 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   3488 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   3489 ; SSE2-NEXT:    pcmpgtb %xmm8, %xmm12
   3490 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   3491 ; SSE2-NEXT:    movdqa %xmm12, %xmm3
   3492 ; SSE2-NEXT:    pxor %xmm0, %xmm3
   3493 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   3494 ; SSE2-NEXT:    pcmpgtb %xmm9, %xmm13
   3495 ; SSE2-NEXT:    movdqa %xmm13, %xmm2
   3496 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   3497 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   3498 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm14
   3499 ; SSE2-NEXT:    movdqa %xmm14, %xmm11
   3500 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   3501 ; SSE2-NEXT:    movdqa %xmm4, %xmm15
   3502 ; SSE2-NEXT:    pcmpgtb %xmm10, %xmm15
   3503 ; SSE2-NEXT:    pxor %xmm15, %xmm0
   3504 ; SSE2-NEXT:    pandn %xmm10, %xmm15
   3505 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   3506 ; SSE2-NEXT:    por %xmm15, %xmm0
   3507 ; SSE2-NEXT:    pandn %xmm1, %xmm14
   3508 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   3509 ; SSE2-NEXT:    por %xmm14, %xmm11
   3510 ; SSE2-NEXT:    pandn %xmm9, %xmm13
   3511 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   3512 ; SSE2-NEXT:    por %xmm13, %xmm2
   3513 ; SSE2-NEXT:    pandn %xmm8, %xmm12
   3514 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   3515 ; SSE2-NEXT:    por %xmm12, %xmm3
   3516 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   3517 ; SSE2-NEXT:    retq
   3518 ;
   3519 ; SSE4-LABEL: test100:
   3520 ; SSE4:       # BB#0: # %entry
   3521 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   3522 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   3523 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   3524 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   3525 ; SSE4-NEXT:    retq
   3526 ;
   3527 ; AVX1-LABEL: test100:
   3528 ; AVX1:       # BB#0: # %entry
   3529 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3530 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3531 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   3532 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   3533 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3534 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3535 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3536 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   3537 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   3538 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3539 ; AVX1-NEXT:    retq
   3540 ;
   3541 ; AVX2-LABEL: test100:
   3542 ; AVX2:       # BB#0: # %entry
   3543 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   3544 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   3545 ; AVX2-NEXT:    retq
   3546 ;
   3547 ; AVX512BW-LABEL: test100:
   3548 ; AVX512BW:       # BB#0: # %entry
   3549 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   3550 ; AVX512BW-NEXT:    retq
   3551 entry:
   3552   %cmp = icmp sge <64 x i8> %a, %b
   3553   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3554   ret <64 x i8> %sel
   3555 }
   3556 
   3557 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
   3558 ; SSE-LABEL: test101:
   3559 ; SSE:       # BB#0: # %entry
   3560 ; SSE-NEXT:    pminub %xmm4, %xmm0
   3561 ; SSE-NEXT:    pminub %xmm5, %xmm1
   3562 ; SSE-NEXT:    pminub %xmm6, %xmm2
   3563 ; SSE-NEXT:    pminub %xmm7, %xmm3
   3564 ; SSE-NEXT:    retq
   3565 ;
   3566 ; AVX1-LABEL: test101:
   3567 ; AVX1:       # BB#0: # %entry
   3568 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3569 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3570 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   3571 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   3572 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3573 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3574 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3575 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   3576 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   3577 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3578 ; AVX1-NEXT:    retq
   3579 ;
   3580 ; AVX2-LABEL: test101:
   3581 ; AVX2:       # BB#0: # %entry
   3582 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   3583 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   3584 ; AVX2-NEXT:    retq
   3585 ;
   3586 ; AVX512BW-LABEL: test101:
   3587 ; AVX512BW:       # BB#0: # %entry
   3588 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   3589 ; AVX512BW-NEXT:    retq
   3590 entry:
   3591   %cmp = icmp ult <64 x i8> %a, %b
   3592   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3593   ret <64 x i8> %sel
   3594 }
   3595 
   3596 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
   3597 ; SSE-LABEL: test102:
   3598 ; SSE:       # BB#0: # %entry
   3599 ; SSE-NEXT:    pminub %xmm4, %xmm0
   3600 ; SSE-NEXT:    pminub %xmm5, %xmm1
   3601 ; SSE-NEXT:    pminub %xmm6, %xmm2
   3602 ; SSE-NEXT:    pminub %xmm7, %xmm3
   3603 ; SSE-NEXT:    retq
   3604 ;
   3605 ; AVX1-LABEL: test102:
   3606 ; AVX1:       # BB#0: # %entry
   3607 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3608 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3609 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   3610 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   3611 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3612 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3613 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3614 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   3615 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   3616 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3617 ; AVX1-NEXT:    retq
   3618 ;
   3619 ; AVX2-LABEL: test102:
   3620 ; AVX2:       # BB#0: # %entry
   3621 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   3622 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   3623 ; AVX2-NEXT:    retq
   3624 ;
   3625 ; AVX512BW-LABEL: test102:
   3626 ; AVX512BW:       # BB#0: # %entry
   3627 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   3628 ; AVX512BW-NEXT:    retq
   3629 entry:
   3630   %cmp = icmp ule <64 x i8> %a, %b
   3631   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3632   ret <64 x i8> %sel
   3633 }
   3634 
   3635 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
   3636 ; SSE-LABEL: test103:
   3637 ; SSE:       # BB#0: # %entry
   3638 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   3639 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   3640 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   3641 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   3642 ; SSE-NEXT:    retq
   3643 ;
   3644 ; AVX1-LABEL: test103:
   3645 ; AVX1:       # BB#0: # %entry
   3646 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3647 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3648 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   3649 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   3650 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3651 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3652 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3653 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   3654 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   3655 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3656 ; AVX1-NEXT:    retq
   3657 ;
   3658 ; AVX2-LABEL: test103:
   3659 ; AVX2:       # BB#0: # %entry
   3660 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   3661 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   3662 ; AVX2-NEXT:    retq
   3663 ;
   3664 ; AVX512BW-LABEL: test103:
   3665 ; AVX512BW:       # BB#0: # %entry
   3666 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   3667 ; AVX512BW-NEXT:    retq
   3668 entry:
   3669   %cmp = icmp ugt <64 x i8> %a, %b
   3670   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3671   ret <64 x i8> %sel
   3672 }
   3673 
   3674 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
   3675 ; SSE-LABEL: test104:
   3676 ; SSE:       # BB#0: # %entry
   3677 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   3678 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   3679 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   3680 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   3681 ; SSE-NEXT:    retq
   3682 ;
   3683 ; AVX1-LABEL: test104:
   3684 ; AVX1:       # BB#0: # %entry
   3685 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3686 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3687 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   3688 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   3689 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3690 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3691 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3692 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   3693 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   3694 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3695 ; AVX1-NEXT:    retq
   3696 ;
   3697 ; AVX2-LABEL: test104:
   3698 ; AVX2:       # BB#0: # %entry
   3699 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   3700 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   3701 ; AVX2-NEXT:    retq
   3702 ;
   3703 ; AVX512BW-LABEL: test104:
   3704 ; AVX512BW:       # BB#0: # %entry
   3705 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   3706 ; AVX512BW-NEXT:    retq
   3707 entry:
   3708   %cmp = icmp uge <64 x i8> %a, %b
   3709   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3710   ret <64 x i8> %sel
   3711 }
   3712 
   3713 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
   3714 ; SSE-LABEL: test105:
   3715 ; SSE:       # BB#0: # %entry
   3716 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   3717 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   3718 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   3719 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   3720 ; SSE-NEXT:    retq
   3721 ;
   3722 ; AVX1-LABEL: test105:
   3723 ; AVX1:       # BB#0: # %entry
   3724 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3725 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3726 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   3727 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   3728 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3729 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3730 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3731 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   3732 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   3733 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3734 ; AVX1-NEXT:    retq
   3735 ;
   3736 ; AVX2-LABEL: test105:
   3737 ; AVX2:       # BB#0: # %entry
   3738 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   3739 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   3740 ; AVX2-NEXT:    retq
   3741 ;
   3742 ; AVX512BW-LABEL: test105:
   3743 ; AVX512BW:       # BB#0: # %entry
   3744 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   3745 ; AVX512BW-NEXT:    retq
   3746 entry:
   3747   %cmp = icmp slt <32 x i16> %a, %b
   3748   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3749   ret <32 x i16> %sel
   3750 }
   3751 
   3752 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
   3753 ; SSE-LABEL: test106:
   3754 ; SSE:       # BB#0: # %entry
   3755 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   3756 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   3757 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   3758 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   3759 ; SSE-NEXT:    retq
   3760 ;
   3761 ; AVX1-LABEL: test106:
   3762 ; AVX1:       # BB#0: # %entry
   3763 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3764 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3765 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   3766 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   3767 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3768 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3769 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3770 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   3771 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   3772 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3773 ; AVX1-NEXT:    retq
   3774 ;
   3775 ; AVX2-LABEL: test106:
   3776 ; AVX2:       # BB#0: # %entry
   3777 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   3778 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   3779 ; AVX2-NEXT:    retq
   3780 ;
   3781 ; AVX512BW-LABEL: test106:
   3782 ; AVX512BW:       # BB#0: # %entry
   3783 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   3784 ; AVX512BW-NEXT:    retq
   3785 entry:
   3786   %cmp = icmp sle <32 x i16> %a, %b
   3787   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3788   ret <32 x i16> %sel
   3789 }
   3790 
   3791 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
   3792 ; SSE-LABEL: test107:
   3793 ; SSE:       # BB#0: # %entry
   3794 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   3795 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   3796 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   3797 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   3798 ; SSE-NEXT:    retq
   3799 ;
   3800 ; AVX1-LABEL: test107:
   3801 ; AVX1:       # BB#0: # %entry
   3802 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3803 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3804 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   3805 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   3806 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3807 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3808 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3809 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   3810 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   3811 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3812 ; AVX1-NEXT:    retq
   3813 ;
   3814 ; AVX2-LABEL: test107:
   3815 ; AVX2:       # BB#0: # %entry
   3816 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   3817 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   3818 ; AVX2-NEXT:    retq
   3819 ;
   3820 ; AVX512BW-LABEL: test107:
   3821 ; AVX512BW:       # BB#0: # %entry
   3822 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   3823 ; AVX512BW-NEXT:    retq
   3824 entry:
   3825   %cmp = icmp sgt <32 x i16> %a, %b
   3826   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3827   ret <32 x i16> %sel
   3828 }
   3829 
   3830 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
   3831 ; SSE-LABEL: test108:
   3832 ; SSE:       # BB#0: # %entry
   3833 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   3834 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   3835 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   3836 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   3837 ; SSE-NEXT:    retq
   3838 ;
   3839 ; AVX1-LABEL: test108:
   3840 ; AVX1:       # BB#0: # %entry
   3841 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3842 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3843 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   3844 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   3845 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3846 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3847 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3848 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   3849 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   3850 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3851 ; AVX1-NEXT:    retq
   3852 ;
   3853 ; AVX2-LABEL: test108:
   3854 ; AVX2:       # BB#0: # %entry
   3855 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   3856 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   3857 ; AVX2-NEXT:    retq
   3858 ;
   3859 ; AVX512BW-LABEL: test108:
   3860 ; AVX512BW:       # BB#0: # %entry
   3861 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   3862 ; AVX512BW-NEXT:    retq
   3863 entry:
   3864   %cmp = icmp sge <32 x i16> %a, %b
   3865   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3866   ret <32 x i16> %sel
   3867 }
   3868 
   3869 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
   3870 ; SSE2-LABEL: test109:
   3871 ; SSE2:       # BB#0: # %entry
   3872 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [32768,32768,32768,32768,32768,32768,32768,32768]
   3873 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   3874 ; SSE2-NEXT:    pxor %xmm10, %xmm9
   3875 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   3876 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   3877 ; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
   3878 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   3879 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   3880 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   3881 ; SSE2-NEXT:    pxor %xmm10, %xmm9
   3882 ; SSE2-NEXT:    pcmpgtw %xmm11, %xmm9
   3883 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   3884 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   3885 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   3886 ; SSE2-NEXT:    pxor %xmm10, %xmm12
   3887 ; SSE2-NEXT:    pcmpgtw %xmm11, %xmm12
   3888 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   3889 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   3890 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   3891 ; SSE2-NEXT:    pcmpgtw %xmm11, %xmm10
   3892 ; SSE2-NEXT:    pand %xmm10, %xmm0
   3893 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   3894 ; SSE2-NEXT:    por %xmm10, %xmm0
   3895 ; SSE2-NEXT:    pand %xmm12, %xmm1
   3896 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   3897 ; SSE2-NEXT:    por %xmm12, %xmm1
   3898 ; SSE2-NEXT:    pand %xmm9, %xmm2
   3899 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   3900 ; SSE2-NEXT:    por %xmm9, %xmm2
   3901 ; SSE2-NEXT:    pand %xmm8, %xmm3
   3902 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   3903 ; SSE2-NEXT:    por %xmm8, %xmm3
   3904 ; SSE2-NEXT:    retq
   3905 ;
   3906 ; SSE4-LABEL: test109:
   3907 ; SSE4:       # BB#0: # %entry
   3908 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   3909 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   3910 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   3911 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   3912 ; SSE4-NEXT:    retq
   3913 ;
   3914 ; AVX1-LABEL: test109:
   3915 ; AVX1:       # BB#0: # %entry
   3916 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3917 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3918 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   3919 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   3920 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3921 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3922 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3923 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   3924 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   3925 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3926 ; AVX1-NEXT:    retq
   3927 ;
   3928 ; AVX2-LABEL: test109:
   3929 ; AVX2:       # BB#0: # %entry
   3930 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   3931 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   3932 ; AVX2-NEXT:    retq
   3933 ;
   3934 ; AVX512BW-LABEL: test109:
   3935 ; AVX512BW:       # BB#0: # %entry
   3936 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   3937 ; AVX512BW-NEXT:    retq
   3938 entry:
   3939   %cmp = icmp ult <32 x i16> %a, %b
   3940   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3941   ret <32 x i16> %sel
   3942 }
   3943 
   3944 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
   3945 ; SSE2-LABEL: test110:
   3946 ; SSE2:       # BB#0: # %entry
   3947 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   3948 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   3949 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   3950 ; SSE2-NEXT:    psubusw %xmm7, %xmm3
   3951 ; SSE2-NEXT:    pxor %xmm12, %xmm12
   3952 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm3
   3953 ; SSE2-NEXT:    psubusw %xmm6, %xmm2
   3954 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm2
   3955 ; SSE2-NEXT:    psubusw %xmm5, %xmm1
   3956 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm1
   3957 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   3958 ; SSE2-NEXT:    psubusw %xmm4, %xmm11
   3959 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm11
   3960 ; SSE2-NEXT:    pand %xmm11, %xmm0
   3961 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   3962 ; SSE2-NEXT:    por %xmm0, %xmm11
   3963 ; SSE2-NEXT:    pand %xmm1, %xmm10
   3964 ; SSE2-NEXT:    pandn %xmm5, %xmm1
   3965 ; SSE2-NEXT:    por %xmm10, %xmm1
   3966 ; SSE2-NEXT:    pand %xmm2, %xmm9
   3967 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   3968 ; SSE2-NEXT:    por %xmm9, %xmm2
   3969 ; SSE2-NEXT:    pand %xmm3, %xmm8
   3970 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   3971 ; SSE2-NEXT:    por %xmm8, %xmm3
   3972 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   3973 ; SSE2-NEXT:    retq
   3974 ;
   3975 ; SSE4-LABEL: test110:
   3976 ; SSE4:       # BB#0: # %entry
   3977 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   3978 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   3979 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   3980 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   3981 ; SSE4-NEXT:    retq
   3982 ;
   3983 ; AVX1-LABEL: test110:
   3984 ; AVX1:       # BB#0: # %entry
   3985 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3986 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3987 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   3988 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   3989 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3990 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3991 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3992 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   3993 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   3994 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3995 ; AVX1-NEXT:    retq
   3996 ;
   3997 ; AVX2-LABEL: test110:
   3998 ; AVX2:       # BB#0: # %entry
   3999 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   4000 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   4001 ; AVX2-NEXT:    retq
   4002 ;
   4003 ; AVX512BW-LABEL: test110:
   4004 ; AVX512BW:       # BB#0: # %entry
   4005 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   4006 ; AVX512BW-NEXT:    retq
   4007 entry:
   4008   %cmp = icmp ule <32 x i16> %a, %b
   4009   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   4010   ret <32 x i16> %sel
   4011 }
   4012 
   4013 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
   4014 ; SSE2-LABEL: test111:
   4015 ; SSE2:       # BB#0: # %entry
   4016 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [32768,32768,32768,32768,32768,32768,32768,32768]
   4017 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   4018 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   4019 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4020 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   4021 ; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
   4022 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   4023 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   4024 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4025 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   4026 ; SSE2-NEXT:    pcmpgtw %xmm10, %xmm9
   4027 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   4028 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   4029 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   4030 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   4031 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm10
   4032 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   4033 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   4034 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4035 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm11
   4036 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4037 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4038 ; SSE2-NEXT:    por %xmm11, %xmm0
   4039 ; SSE2-NEXT:    pand %xmm10, %xmm1
   4040 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4041 ; SSE2-NEXT:    por %xmm1, %xmm10
   4042 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4043 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4044 ; SSE2-NEXT:    por %xmm2, %xmm9
   4045 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4046 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4047 ; SSE2-NEXT:    por %xmm3, %xmm8
   4048 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   4049 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4050 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4051 ; SSE2-NEXT:    retq
   4052 ;
   4053 ; SSE4-LABEL: test111:
   4054 ; SSE4:       # BB#0: # %entry
   4055 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   4056 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   4057 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   4058 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   4059 ; SSE4-NEXT:    retq
   4060 ;
   4061 ; AVX1-LABEL: test111:
   4062 ; AVX1:       # BB#0: # %entry
   4063 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4064 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4065 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   4066 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   4067 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4068 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4069 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4070 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   4071 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   4072 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4073 ; AVX1-NEXT:    retq
   4074 ;
   4075 ; AVX2-LABEL: test111:
   4076 ; AVX2:       # BB#0: # %entry
   4077 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   4078 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   4079 ; AVX2-NEXT:    retq
   4080 ;
   4081 ; AVX512BW-LABEL: test111:
   4082 ; AVX512BW:       # BB#0: # %entry
   4083 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   4084 ; AVX512BW-NEXT:    retq
   4085 entry:
   4086   %cmp = icmp ugt <32 x i16> %a, %b
   4087   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   4088   ret <32 x i16> %sel
   4089 }
   4090 
   4091 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
   4092 ; SSE2-LABEL: test112:
   4093 ; SSE2:       # BB#0: # %entry
   4094 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   4095 ; SSE2-NEXT:    psubusw %xmm3, %xmm8
   4096 ; SSE2-NEXT:    pxor %xmm9, %xmm9
   4097 ; SSE2-NEXT:    pcmpeqw %xmm9, %xmm8
   4098 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   4099 ; SSE2-NEXT:    psubusw %xmm2, %xmm10
   4100 ; SSE2-NEXT:    pcmpeqw %xmm9, %xmm10
   4101 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   4102 ; SSE2-NEXT:    psubusw %xmm1, %xmm11
   4103 ; SSE2-NEXT:    pcmpeqw %xmm9, %xmm11
   4104 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   4105 ; SSE2-NEXT:    psubusw %xmm0, %xmm12
   4106 ; SSE2-NEXT:    pcmpeqw %xmm9, %xmm12
   4107 ; SSE2-NEXT:    pand %xmm12, %xmm0
   4108 ; SSE2-NEXT:    pandn %xmm4, %xmm12
   4109 ; SSE2-NEXT:    por %xmm12, %xmm0
   4110 ; SSE2-NEXT:    pand %xmm11, %xmm1
   4111 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4112 ; SSE2-NEXT:    por %xmm11, %xmm1
   4113 ; SSE2-NEXT:    pand %xmm10, %xmm2
   4114 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   4115 ; SSE2-NEXT:    por %xmm10, %xmm2
   4116 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4117 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4118 ; SSE2-NEXT:    por %xmm8, %xmm3
   4119 ; SSE2-NEXT:    retq
   4120 ;
   4121 ; SSE4-LABEL: test112:
   4122 ; SSE4:       # BB#0: # %entry
   4123 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   4124 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   4125 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   4126 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   4127 ; SSE4-NEXT:    retq
   4128 ;
   4129 ; AVX1-LABEL: test112:
   4130 ; AVX1:       # BB#0: # %entry
   4131 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4132 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4133 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   4134 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   4135 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4136 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4137 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4138 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   4139 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   4140 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4141 ; AVX1-NEXT:    retq
   4142 ;
   4143 ; AVX2-LABEL: test112:
   4144 ; AVX2:       # BB#0: # %entry
   4145 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   4146 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   4147 ; AVX2-NEXT:    retq
   4148 ;
   4149 ; AVX512BW-LABEL: test112:
   4150 ; AVX512BW:       # BB#0: # %entry
   4151 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   4152 ; AVX512BW-NEXT:    retq
   4153 entry:
   4154   %cmp = icmp uge <32 x i16> %a, %b
   4155   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   4156   ret <32 x i16> %sel
   4157 }
   4158 
   4159 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
   4160 ; SSE2-LABEL: test113:
   4161 ; SSE2:       # BB#0: # %entry
   4162 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   4163 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm8
   4164 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   4165 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
   4166 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   4167 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm10
   4168 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   4169 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm11
   4170 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4171 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4172 ; SSE2-NEXT:    por %xmm11, %xmm0
   4173 ; SSE2-NEXT:    pand %xmm10, %xmm1
   4174 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4175 ; SSE2-NEXT:    por %xmm10, %xmm1
   4176 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4177 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4178 ; SSE2-NEXT:    por %xmm9, %xmm2
   4179 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4180 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4181 ; SSE2-NEXT:    por %xmm8, %xmm3
   4182 ; SSE2-NEXT:    retq
   4183 ;
   4184 ; SSE4-LABEL: test113:
   4185 ; SSE4:       # BB#0: # %entry
   4186 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   4187 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   4188 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   4189 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   4190 ; SSE4-NEXT:    retq
   4191 ;
   4192 ; AVX1-LABEL: test113:
   4193 ; AVX1:       # BB#0: # %entry
   4194 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4195 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4196 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   4197 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   4198 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4199 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4200 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4201 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   4202 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   4203 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4204 ; AVX1-NEXT:    retq
   4205 ;
   4206 ; AVX2-LABEL: test113:
   4207 ; AVX2:       # BB#0: # %entry
   4208 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   4209 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   4210 ; AVX2-NEXT:    retq
   4211 ;
   4212 ; AVX512F-LABEL: test113:
   4213 ; AVX512F:       # BB#0: # %entry
   4214 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   4215 ; AVX512F-NEXT:    retq
   4216 entry:
   4217   %cmp = icmp slt <16 x i32> %a, %b
   4218   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4219   ret <16 x i32> %sel
   4220 }
   4221 
   4222 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
   4223 ; SSE2-LABEL: test114:
   4224 ; SSE2:       # BB#0: # %entry
   4225 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4226 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4227 ; SSE2-NEXT:    movdqa %xmm8, %xmm12
   4228 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm12
   4229 ; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
   4230 ; SSE2-NEXT:    movdqa %xmm12, %xmm3
   4231 ; SSE2-NEXT:    pxor %xmm13, %xmm3
   4232 ; SSE2-NEXT:    movdqa %xmm9, %xmm14
   4233 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm14
   4234 ; SSE2-NEXT:    movdqa %xmm14, %xmm2
   4235 ; SSE2-NEXT:    pxor %xmm13, %xmm2
   4236 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   4237 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm15
   4238 ; SSE2-NEXT:    movdqa %xmm15, %xmm10
   4239 ; SSE2-NEXT:    pxor %xmm13, %xmm10
   4240 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4241 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
   4242 ; SSE2-NEXT:    pxor %xmm11, %xmm13
   4243 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   4244 ; SSE2-NEXT:    pandn %xmm4, %xmm13
   4245 ; SSE2-NEXT:    por %xmm13, %xmm11
   4246 ; SSE2-NEXT:    pandn %xmm1, %xmm15
   4247 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4248 ; SSE2-NEXT:    por %xmm15, %xmm10
   4249 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   4250 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   4251 ; SSE2-NEXT:    por %xmm14, %xmm2
   4252 ; SSE2-NEXT:    pandn %xmm8, %xmm12
   4253 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   4254 ; SSE2-NEXT:    por %xmm12, %xmm3
   4255 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   4256 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   4257 ; SSE2-NEXT:    retq
   4258 ;
   4259 ; SSE4-LABEL: test114:
   4260 ; SSE4:       # BB#0: # %entry
   4261 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   4262 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   4263 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   4264 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   4265 ; SSE4-NEXT:    retq
   4266 ;
   4267 ; AVX1-LABEL: test114:
   4268 ; AVX1:       # BB#0: # %entry
   4269 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4270 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4271 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   4272 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   4273 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4274 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4275 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4276 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   4277 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   4278 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4279 ; AVX1-NEXT:    retq
   4280 ;
   4281 ; AVX2-LABEL: test114:
   4282 ; AVX2:       # BB#0: # %entry
   4283 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   4284 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   4285 ; AVX2-NEXT:    retq
   4286 ;
   4287 ; AVX512F-LABEL: test114:
   4288 ; AVX512F:       # BB#0: # %entry
   4289 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   4290 ; AVX512F-NEXT:    retq
   4291 entry:
   4292   %cmp = icmp sle <16 x i32> %a, %b
   4293   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4294   ret <16 x i32> %sel
   4295 }
   4296 
   4297 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
   4298 ; SSE2-LABEL: test115:
   4299 ; SSE2:       # BB#0: # %entry
   4300 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4301 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm3
   4302 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4303 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm9
   4304 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   4305 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm10
   4306 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4307 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
   4308 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4309 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4310 ; SSE2-NEXT:    por %xmm0, %xmm11
   4311 ; SSE2-NEXT:    pand %xmm10, %xmm1
   4312 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4313 ; SSE2-NEXT:    por %xmm1, %xmm10
   4314 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4315 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4316 ; SSE2-NEXT:    por %xmm2, %xmm9
   4317 ; SSE2-NEXT:    pand %xmm3, %xmm8
   4318 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   4319 ; SSE2-NEXT:    por %xmm8, %xmm3
   4320 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   4321 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   4322 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4323 ; SSE2-NEXT:    retq
   4324 ;
   4325 ; SSE4-LABEL: test115:
   4326 ; SSE4:       # BB#0: # %entry
   4327 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   4328 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   4329 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   4330 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   4331 ; SSE4-NEXT:    retq
   4332 ;
   4333 ; AVX1-LABEL: test115:
   4334 ; AVX1:       # BB#0: # %entry
   4335 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4336 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4337 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   4338 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   4339 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4340 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4341 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4342 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   4343 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   4344 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4345 ; AVX1-NEXT:    retq
   4346 ;
   4347 ; AVX2-LABEL: test115:
   4348 ; AVX2:       # BB#0: # %entry
   4349 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   4350 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   4351 ; AVX2-NEXT:    retq
   4352 ;
   4353 ; AVX512F-LABEL: test115:
   4354 ; AVX512F:       # BB#0: # %entry
   4355 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   4356 ; AVX512F-NEXT:    retq
   4357 entry:
   4358   %cmp = icmp sgt <16 x i32> %a, %b
   4359   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4360   ret <16 x i32> %sel
   4361 }
   4362 
   4363 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
   4364 ; SSE2-LABEL: test116:
   4365 ; SSE2:       # BB#0: # %entry
   4366 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4367 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4368 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4369 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   4370 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm12
   4371 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   4372 ; SSE2-NEXT:    movdqa %xmm12, %xmm3
   4373 ; SSE2-NEXT:    pxor %xmm0, %xmm3
   4374 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   4375 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   4376 ; SSE2-NEXT:    movdqa %xmm13, %xmm2
   4377 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   4378 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   4379 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm14
   4380 ; SSE2-NEXT:    movdqa %xmm14, %xmm11
   4381 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4382 ; SSE2-NEXT:    movdqa %xmm4, %xmm15
   4383 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm15
   4384 ; SSE2-NEXT:    pxor %xmm15, %xmm0
   4385 ; SSE2-NEXT:    pandn %xmm10, %xmm15
   4386 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   4387 ; SSE2-NEXT:    por %xmm15, %xmm0
   4388 ; SSE2-NEXT:    pandn %xmm1, %xmm14
   4389 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4390 ; SSE2-NEXT:    por %xmm14, %xmm11
   4391 ; SSE2-NEXT:    pandn %xmm9, %xmm13
   4392 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   4393 ; SSE2-NEXT:    por %xmm13, %xmm2
   4394 ; SSE2-NEXT:    pandn %xmm8, %xmm12
   4395 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   4396 ; SSE2-NEXT:    por %xmm12, %xmm3
   4397 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   4398 ; SSE2-NEXT:    retq
   4399 ;
   4400 ; SSE4-LABEL: test116:
   4401 ; SSE4:       # BB#0: # %entry
   4402 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   4403 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   4404 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   4405 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   4406 ; SSE4-NEXT:    retq
   4407 ;
   4408 ; AVX1-LABEL: test116:
   4409 ; AVX1:       # BB#0: # %entry
   4410 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4411 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4412 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   4413 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   4414 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4415 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4416 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4417 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   4418 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   4419 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4420 ; AVX1-NEXT:    retq
   4421 ;
   4422 ; AVX2-LABEL: test116:
   4423 ; AVX2:       # BB#0: # %entry
   4424 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   4425 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   4426 ; AVX2-NEXT:    retq
   4427 ;
   4428 ; AVX512F-LABEL: test116:
   4429 ; AVX512F:       # BB#0: # %entry
   4430 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   4431 ; AVX512F-NEXT:    retq
   4432 entry:
   4433   %cmp = icmp sge <16 x i32> %a, %b
   4434   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4435   ret <16 x i32> %sel
   4436 }
   4437 
   4438 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
   4439 ; SSE2-LABEL: test117:
   4440 ; SSE2:       # BB#0: # %entry
   4441 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   4442 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   4443 ; SSE2-NEXT:    pxor %xmm10, %xmm9
   4444 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   4445 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   4446 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
   4447 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   4448 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4449 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   4450 ; SSE2-NEXT:    pxor %xmm10, %xmm9
   4451 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm9
   4452 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   4453 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4454 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   4455 ; SSE2-NEXT:    pxor %xmm10, %xmm12
   4456 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm12
   4457 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4458 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4459 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   4460 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm10
   4461 ; SSE2-NEXT:    pand %xmm10, %xmm0
   4462 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   4463 ; SSE2-NEXT:    por %xmm10, %xmm0
   4464 ; SSE2-NEXT:    pand %xmm12, %xmm1
   4465 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   4466 ; SSE2-NEXT:    por %xmm12, %xmm1
   4467 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4468 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4469 ; SSE2-NEXT:    por %xmm9, %xmm2
   4470 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4471 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4472 ; SSE2-NEXT:    por %xmm8, %xmm3
   4473 ; SSE2-NEXT:    retq
   4474 ;
   4475 ; SSE4-LABEL: test117:
   4476 ; SSE4:       # BB#0: # %entry
   4477 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   4478 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   4479 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   4480 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   4481 ; SSE4-NEXT:    retq
   4482 ;
   4483 ; AVX1-LABEL: test117:
   4484 ; AVX1:       # BB#0: # %entry
   4485 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4486 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4487 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   4488 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   4489 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4490 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4491 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4492 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   4493 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   4494 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4495 ; AVX1-NEXT:    retq
   4496 ;
   4497 ; AVX2-LABEL: test117:
   4498 ; AVX2:       # BB#0: # %entry
   4499 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   4500 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   4501 ; AVX2-NEXT:    retq
   4502 ;
   4503 ; AVX512F-LABEL: test117:
   4504 ; AVX512F:       # BB#0: # %entry
   4505 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   4506 ; AVX512F-NEXT:    retq
   4507 entry:
   4508   %cmp = icmp ult <16 x i32> %a, %b
   4509   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4510   ret <16 x i32> %sel
   4511 }
   4512 
   4513 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
   4514 ; SSE2-LABEL: test118:
   4515 ; SSE2:       # BB#0: # %entry
   4516 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4517 ; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
   4518 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   4519 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   4520 ; SSE2-NEXT:    movdqa %xmm3, %xmm12
   4521 ; SSE2-NEXT:    pxor %xmm14, %xmm12
   4522 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
   4523 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   4524 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   4525 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   4526 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   4527 ; SSE2-NEXT:    pxor %xmm14, %xmm9
   4528 ; SSE2-NEXT:    movdqa %xmm2, %xmm13
   4529 ; SSE2-NEXT:    pxor %xmm14, %xmm13
   4530 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   4531 ; SSE2-NEXT:    movdqa %xmm13, %xmm9
   4532 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   4533 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   4534 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   4535 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   4536 ; SSE2-NEXT:    pxor %xmm14, %xmm15
   4537 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   4538 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   4539 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   4540 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   4541 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   4542 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   4543 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4544 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   4545 ; SSE2-NEXT:    pandn %xmm10, %xmm14
   4546 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   4547 ; SSE2-NEXT:    por %xmm14, %xmm0
   4548 ; SSE2-NEXT:    pandn %xmm1, %xmm15
   4549 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4550 ; SSE2-NEXT:    por %xmm15, %xmm11
   4551 ; SSE2-NEXT:    pandn %xmm2, %xmm13
   4552 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4553 ; SSE2-NEXT:    por %xmm13, %xmm9
   4554 ; SSE2-NEXT:    pandn %xmm3, %xmm12
   4555 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4556 ; SSE2-NEXT:    por %xmm12, %xmm8
   4557 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   4558 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4559 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4560 ; SSE2-NEXT:    retq
   4561 ;
   4562 ; SSE4-LABEL: test118:
   4563 ; SSE4:       # BB#0: # %entry
   4564 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   4565 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   4566 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   4567 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   4568 ; SSE4-NEXT:    retq
   4569 ;
   4570 ; AVX1-LABEL: test118:
   4571 ; AVX1:       # BB#0: # %entry
   4572 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4573 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4574 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   4575 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   4576 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4577 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4578 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4579 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   4580 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   4581 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4582 ; AVX1-NEXT:    retq
   4583 ;
   4584 ; AVX2-LABEL: test118:
   4585 ; AVX2:       # BB#0: # %entry
   4586 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   4587 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   4588 ; AVX2-NEXT:    retq
   4589 ;
   4590 ; AVX512F-LABEL: test118:
   4591 ; AVX512F:       # BB#0: # %entry
   4592 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   4593 ; AVX512F-NEXT:    retq
   4594 entry:
   4595   %cmp = icmp ule <16 x i32> %a, %b
   4596   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4597   ret <16 x i32> %sel
   4598 }
   4599 
   4600 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
   4601 ; SSE2-LABEL: test119:
   4602 ; SSE2:       # BB#0: # %entry
   4603 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
   4604 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   4605 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   4606 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4607 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   4608 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
   4609 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   4610 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   4611 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4612 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   4613 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm9
   4614 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   4615 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   4616 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   4617 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   4618 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm10
   4619 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   4620 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   4621 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4622 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm11
   4623 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4624 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4625 ; SSE2-NEXT:    por %xmm11, %xmm0
   4626 ; SSE2-NEXT:    pand %xmm10, %xmm1
   4627 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4628 ; SSE2-NEXT:    por %xmm1, %xmm10
   4629 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4630 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4631 ; SSE2-NEXT:    por %xmm2, %xmm9
   4632 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4633 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4634 ; SSE2-NEXT:    por %xmm3, %xmm8
   4635 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   4636 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4637 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4638 ; SSE2-NEXT:    retq
   4639 ;
   4640 ; SSE4-LABEL: test119:
   4641 ; SSE4:       # BB#0: # %entry
   4642 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   4643 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   4644 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   4645 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   4646 ; SSE4-NEXT:    retq
   4647 ;
   4648 ; AVX1-LABEL: test119:
   4649 ; AVX1:       # BB#0: # %entry
   4650 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4651 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4652 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   4653 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   4654 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4655 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4656 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4657 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   4658 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   4659 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4660 ; AVX1-NEXT:    retq
   4661 ;
   4662 ; AVX2-LABEL: test119:
   4663 ; AVX2:       # BB#0: # %entry
   4664 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   4665 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   4666 ; AVX2-NEXT:    retq
   4667 ;
   4668 ; AVX512F-LABEL: test119:
   4669 ; AVX512F:       # BB#0: # %entry
   4670 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   4671 ; AVX512F-NEXT:    retq
   4672 entry:
   4673   %cmp = icmp ugt <16 x i32> %a, %b
   4674   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4675   ret <16 x i32> %sel
   4676 }
   4677 
   4678 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
   4679 ; SSE2-LABEL: test120:
   4680 ; SSE2:       # BB#0: # %entry
   4681 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4682 ; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
   4683 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   4684 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   4685 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   4686 ; SSE2-NEXT:    pxor %xmm14, %xmm12
   4687 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
   4688 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   4689 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   4690 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   4691 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4692 ; SSE2-NEXT:    pxor %xmm14, %xmm9
   4693 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   4694 ; SSE2-NEXT:    pxor %xmm14, %xmm13
   4695 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   4696 ; SSE2-NEXT:    movdqa %xmm13, %xmm9
   4697 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   4698 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   4699 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   4700 ; SSE2-NEXT:    movdqa %xmm5, %xmm15
   4701 ; SSE2-NEXT:    pxor %xmm14, %xmm15
   4702 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   4703 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   4704 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   4705 ; SSE2-NEXT:    pxor %xmm4, %xmm14
   4706 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   4707 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   4708 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4709 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   4710 ; SSE2-NEXT:    pandn %xmm10, %xmm14
   4711 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   4712 ; SSE2-NEXT:    por %xmm14, %xmm0
   4713 ; SSE2-NEXT:    pandn %xmm1, %xmm15
   4714 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4715 ; SSE2-NEXT:    por %xmm15, %xmm11
   4716 ; SSE2-NEXT:    pandn %xmm2, %xmm13
   4717 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4718 ; SSE2-NEXT:    por %xmm13, %xmm9
   4719 ; SSE2-NEXT:    pandn %xmm3, %xmm12
   4720 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4721 ; SSE2-NEXT:    por %xmm12, %xmm8
   4722 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   4723 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4724 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4725 ; SSE2-NEXT:    retq
   4726 ;
   4727 ; SSE4-LABEL: test120:
   4728 ; SSE4:       # BB#0: # %entry
   4729 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   4730 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   4731 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   4732 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   4733 ; SSE4-NEXT:    retq
   4734 ;
   4735 ; AVX1-LABEL: test120:
   4736 ; AVX1:       # BB#0: # %entry
   4737 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4738 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4739 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   4740 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   4741 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4742 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4743 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4744 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   4745 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   4746 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4747 ; AVX1-NEXT:    retq
   4748 ;
   4749 ; AVX2-LABEL: test120:
   4750 ; AVX2:       # BB#0: # %entry
   4751 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   4752 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   4753 ; AVX2-NEXT:    retq
   4754 ;
   4755 ; AVX512F-LABEL: test120:
   4756 ; AVX512F:       # BB#0: # %entry
   4757 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   4758 ; AVX512F-NEXT:    retq
   4759 entry:
   4760   %cmp = icmp uge <16 x i32> %a, %b
   4761   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4762   ret <16 x i32> %sel
   4763 }
   4764 
   4765 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
   4766 ; SSE2-LABEL: test121:
   4767 ; SSE2:       # BB#0: # %entry
   4768 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0]
   4769 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4770 ; SSE2-NEXT:    pxor %xmm9, %xmm8
   4771 ; SSE2-NEXT:    movdqa %xmm7, %xmm10
   4772 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   4773 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   4774 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   4775 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   4776 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
   4777 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   4778 ; SSE2-NEXT:    pand %xmm12, %xmm10
   4779 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
   4780 ; SSE2-NEXT:    por %xmm10, %xmm8
   4781 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   4782 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   4783 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   4784 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   4785 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   4786 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
   4787 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   4788 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
   4789 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
   4790 ; SSE2-NEXT:    pand %xmm13, %xmm11
   4791 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
   4792 ; SSE2-NEXT:    por %xmm11, %xmm10
   4793 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   4794 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   4795 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   4796 ; SSE2-NEXT:    pxor %xmm9, %xmm12
   4797 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   4798 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   4799 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   4800 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
   4801 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
   4802 ; SSE2-NEXT:    pand %xmm14, %xmm11
   4803 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
   4804 ; SSE2-NEXT:    por %xmm11, %xmm12
   4805 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4806 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   4807 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   4808 ; SSE2-NEXT:    movdqa %xmm9, %xmm13
   4809 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   4810 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   4811 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
   4812 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   4813 ; SSE2-NEXT:    pand %xmm14, %xmm9
   4814 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   4815 ; SSE2-NEXT:    por %xmm9, %xmm11
   4816 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4817 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4818 ; SSE2-NEXT:    por %xmm11, %xmm0
   4819 ; SSE2-NEXT:    pand %xmm12, %xmm1
   4820 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   4821 ; SSE2-NEXT:    por %xmm12, %xmm1
   4822 ; SSE2-NEXT:    pand %xmm10, %xmm2
   4823 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   4824 ; SSE2-NEXT:    por %xmm10, %xmm2
   4825 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4826 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4827 ; SSE2-NEXT:    por %xmm8, %xmm3
   4828 ; SSE2-NEXT:    retq
   4829 ;
   4830 ; SSE4-LABEL: test121:
   4831 ; SSE4:       # BB#0: # %entry
   4832 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   4833 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   4834 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
   4835 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   4836 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
   4837 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   4838 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
   4839 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   4840 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
   4841 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   4842 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   4843 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   4844 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   4845 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   4846 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   4847 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   4848 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   4849 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   4850 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   4851 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   4852 ; SSE4-NEXT:    retq
   4853 ;
   4854 ; AVX1-LABEL: test121:
   4855 ; AVX1:       # BB#0: # %entry
   4856 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4857 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
   4858 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   4859 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm5
   4860 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   4861 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4862 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   4863 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   4864 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm6
   4865 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
   4866 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   4867 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   4868 ; AVX1-NEXT:    retq
   4869 ;
   4870 ; AVX2-LABEL: test121:
   4871 ; AVX2:       # BB#0: # %entry
   4872 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
   4873 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm5
   4874 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   4875 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   4876 ; AVX2-NEXT:    retq
   4877 ;
   4878 ; AVX512F-LABEL: test121:
   4879 ; AVX512F:       # BB#0: # %entry
   4880 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   4881 ; AVX512F-NEXT:    retq
   4882 entry:
   4883   %cmp = icmp slt <8 x i64> %a, %b
   4884   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   4885   ret <8 x i64> %sel
   4886 }
   4887 
   4888 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
   4889 ; SSE2-LABEL: test122:
   4890 ; SSE2:       # BB#0: # %entry
   4891 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   4892 ; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
   4893 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   4894 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   4895 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   4896 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   4897 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   4898 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   4899 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   4900 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   4901 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4902 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   4903 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   4904 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   4905 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   4906 ; SSE2-NEXT:    pand %xmm12, %xmm0
   4907 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   4908 ; SSE2-NEXT:    por %xmm0, %xmm12
   4909 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   4910 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   4911 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   4912 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   4913 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4914 ; SSE2-NEXT:    movdqa %xmm3, %xmm13
   4915 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   4916 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   4917 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   4918 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   4919 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   4920 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   4921 ; SSE2-NEXT:    pand %xmm15, %xmm11
   4922 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   4923 ; SSE2-NEXT:    por %xmm11, %xmm13
   4924 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   4925 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4926 ; SSE2-NEXT:    movdqa %xmm2, %xmm14
   4927 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   4928 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   4929 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   4930 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   4931 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   4932 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   4933 ; SSE2-NEXT:    pand %xmm11, %xmm14
   4934 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   4935 ; SSE2-NEXT:    por %xmm14, %xmm15
   4936 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   4937 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4938 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   4939 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   4940 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   4941 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   4942 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   4943 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   4944 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4945 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   4946 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   4947 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   4948 ; SSE2-NEXT:    por %xmm0, %xmm14
   4949 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   4950 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   4951 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   4952 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   4953 ; SSE2-NEXT:    pandn %xmm4, %xmm1
   4954 ; SSE2-NEXT:    por %xmm14, %xmm1
   4955 ; SSE2-NEXT:    pandn %xmm2, %xmm15
   4956 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4957 ; SSE2-NEXT:    por %xmm15, %xmm11
   4958 ; SSE2-NEXT:    pandn %xmm3, %xmm13
   4959 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   4960 ; SSE2-NEXT:    por %xmm13, %xmm10
   4961 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   4962 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
   4963 ; SSE2-NEXT:    por %xmm12, %xmm8
   4964 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   4965 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   4966 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   4967 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4968 ; SSE2-NEXT:    retq
   4969 ;
   4970 ; SSE4-LABEL: test122:
   4971 ; SSE4:       # BB#0: # %entry
   4972 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   4973 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   4974 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
   4975 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   4976 ; SSE4-NEXT:    pxor %xmm12, %xmm9
   4977 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   4978 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
   4979 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   4980 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   4981 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
   4982 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   4983 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   4984 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   4985 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   4986 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   4987 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   4988 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   4989 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   4990 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   4991 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   4992 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   4993 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   4994 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   4995 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   4996 ; SSE4-NEXT:    retq
   4997 ;
   4998 ; AVX1-LABEL: test122:
   4999 ; AVX1:       # BB#0: # %entry
   5000 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5001 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   5002 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5003 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
   5004 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5005 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm6
   5006 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5007 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5008 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   5009 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   5010 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5011 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5012 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm7
   5013 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
   5014 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5015 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5016 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5017 ; AVX1-NEXT:    retq
   5018 ;
   5019 ; AVX2-LABEL: test122:
   5020 ; AVX2:       # BB#0: # %entry
   5021 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
   5022 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
   5023 ; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
   5024 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm6
   5025 ; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
   5026 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5027 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5028 ; AVX2-NEXT:    retq
   5029 ;
   5030 ; AVX512F-LABEL: test122:
   5031 ; AVX512F:       # BB#0: # %entry
   5032 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   5033 ; AVX512F-NEXT:    retq
   5034 entry:
   5035   %cmp = icmp sle <8 x i64> %a, %b
   5036   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5037   ret <8 x i64> %sel
   5038 }
   5039 
   5040 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
   5041 ; SSE2-LABEL: test123:
   5042 ; SSE2:       # BB#0: # %entry
   5043 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0]
   5044 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5045 ; SSE2-NEXT:    pxor %xmm9, %xmm8
   5046 ; SSE2-NEXT:    movdqa %xmm3, %xmm10
   5047 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5048 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   5049 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5050 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5051 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
   5052 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   5053 ; SSE2-NEXT:    pand %xmm12, %xmm10
   5054 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
   5055 ; SSE2-NEXT:    por %xmm10, %xmm8
   5056 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   5057 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5058 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   5059 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5060 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   5061 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
   5062 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   5063 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
   5064 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
   5065 ; SSE2-NEXT:    pand %xmm13, %xmm11
   5066 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
   5067 ; SSE2-NEXT:    por %xmm11, %xmm10
   5068 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   5069 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5070 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   5071 ; SSE2-NEXT:    pxor %xmm9, %xmm12
   5072 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   5073 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5074 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5075 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
   5076 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
   5077 ; SSE2-NEXT:    pand %xmm14, %xmm11
   5078 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
   5079 ; SSE2-NEXT:    por %xmm11, %xmm12
   5080 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   5081 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5082 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   5083 ; SSE2-NEXT:    movdqa %xmm9, %xmm13
   5084 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5085 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5086 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
   5087 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   5088 ; SSE2-NEXT:    pand %xmm14, %xmm9
   5089 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5090 ; SSE2-NEXT:    por %xmm9, %xmm11
   5091 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5092 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   5093 ; SSE2-NEXT:    por %xmm11, %xmm0
   5094 ; SSE2-NEXT:    pand %xmm12, %xmm1
   5095 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   5096 ; SSE2-NEXT:    por %xmm12, %xmm1
   5097 ; SSE2-NEXT:    pand %xmm10, %xmm2
   5098 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5099 ; SSE2-NEXT:    por %xmm10, %xmm2
   5100 ; SSE2-NEXT:    pand %xmm8, %xmm3
   5101 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   5102 ; SSE2-NEXT:    por %xmm8, %xmm3
   5103 ; SSE2-NEXT:    retq
   5104 ;
   5105 ; SSE4-LABEL: test123:
   5106 ; SSE4:       # BB#0: # %entry
   5107 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   5108 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   5109 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
   5110 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   5111 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
   5112 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   5113 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
   5114 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   5115 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   5116 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5117 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5118 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5119 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5120 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   5121 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5122 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5123 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5124 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5125 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5126 ; SSE4-NEXT:    retq
   5127 ;
   5128 ; AVX1-LABEL: test123:
   5129 ; AVX1:       # BB#0: # %entry
   5130 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5131 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   5132 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5133 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm5
   5134 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   5135 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   5136 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5137 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   5138 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm6
   5139 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
   5140 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5141 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5142 ; AVX1-NEXT:    retq
   5143 ;
   5144 ; AVX2-LABEL: test123:
   5145 ; AVX2:       # BB#0: # %entry
   5146 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
   5147 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm5
   5148 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5149 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5150 ; AVX2-NEXT:    retq
   5151 ;
   5152 ; AVX512F-LABEL: test123:
   5153 ; AVX512F:       # BB#0: # %entry
   5154 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   5155 ; AVX512F-NEXT:    retq
   5156 entry:
   5157   %cmp = icmp sgt <8 x i64> %a, %b
   5158   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5159   ret <8 x i64> %sel
   5160 }
   5161 
   5162 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
   5163 ; SSE2-LABEL: test124:
   5164 ; SSE2:       # BB#0: # %entry
   5165 ; SSE2-NEXT:    movdqa %xmm7, %xmm11
   5166 ; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
   5167 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   5168 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   5169 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   5170 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   5171 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   5172 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5173 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   5174 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   5175 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   5176 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   5177 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5178 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5179 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   5180 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   5181 ; SSE2-NEXT:    pand %xmm12, %xmm0
   5182 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   5183 ; SSE2-NEXT:    por %xmm0, %xmm12
   5184 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   5185 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   5186 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   5187 ; SSE2-NEXT:    movdqa %xmm3, %xmm11
   5188 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5189 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   5190 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   5191 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   5192 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5193 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   5194 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   5195 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5196 ; SSE2-NEXT:    pand %xmm15, %xmm11
   5197 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   5198 ; SSE2-NEXT:    por %xmm11, %xmm13
   5199 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   5200 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5201 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   5202 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   5203 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   5204 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   5205 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   5206 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   5207 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5208 ; SSE2-NEXT:    pand %xmm11, %xmm14
   5209 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   5210 ; SSE2-NEXT:    por %xmm14, %xmm15
   5211 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
   5212 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5213 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   5214 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   5215 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5216 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   5217 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   5218 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   5219 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5220 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   5221 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   5222 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5223 ; SSE2-NEXT:    por %xmm0, %xmm14
   5224 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   5225 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   5226 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   5227 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   5228 ; SSE2-NEXT:    pandn %xmm4, %xmm1
   5229 ; SSE2-NEXT:    por %xmm14, %xmm1
   5230 ; SSE2-NEXT:    pandn %xmm2, %xmm15
   5231 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   5232 ; SSE2-NEXT:    por %xmm15, %xmm11
   5233 ; SSE2-NEXT:    pandn %xmm3, %xmm13
   5234 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5235 ; SSE2-NEXT:    por %xmm13, %xmm10
   5236 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   5237 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
   5238 ; SSE2-NEXT:    por %xmm12, %xmm8
   5239 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   5240 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   5241 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   5242 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   5243 ; SSE2-NEXT:    retq
   5244 ;
   5245 ; SSE4-LABEL: test124:
   5246 ; SSE4:       # BB#0: # %entry
   5247 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   5248 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   5249 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
   5250 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   5251 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   5252 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   5253 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
   5254 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5255 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   5256 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
   5257 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5258 ; SSE4-NEXT:    movdqa %xmm4, %xmm12
   5259 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm12
   5260 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   5261 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   5262 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5263 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5264 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5265 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5266 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   5267 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5268 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5269 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5270 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5271 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5272 ; SSE4-NEXT:    retq
   5273 ;
   5274 ; AVX1-LABEL: test124:
   5275 ; AVX1:       # BB#0: # %entry
   5276 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5277 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
   5278 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5279 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
   5280 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5281 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm6
   5282 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5283 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5284 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5285 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   5286 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5287 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5288 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm7
   5289 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
   5290 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5291 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5292 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5293 ; AVX1-NEXT:    retq
   5294 ;
   5295 ; AVX2-LABEL: test124:
   5296 ; AVX2:       # BB#0: # %entry
   5297 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
   5298 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
   5299 ; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
   5300 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm6
   5301 ; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
   5302 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5303 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5304 ; AVX2-NEXT:    retq
   5305 ;
   5306 ; AVX512F-LABEL: test124:
   5307 ; AVX512F:       # BB#0: # %entry
   5308 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   5309 ; AVX512F-NEXT:    retq
   5310 entry:
   5311   %cmp = icmp sge <8 x i64> %a, %b
   5312   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5313   ret <8 x i64> %sel
   5314 }
   5315 
   5316 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
   5317 ; SSE2-LABEL: test125:
   5318 ; SSE2:       # BB#0: # %entry
   5319 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
   5320 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   5321 ; SSE2-NEXT:    pxor %xmm9, %xmm8
   5322 ; SSE2-NEXT:    movdqa %xmm7, %xmm10
   5323 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5324 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   5325 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5326 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5327 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
   5328 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   5329 ; SSE2-NEXT:    pand %xmm12, %xmm10
   5330 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
   5331 ; SSE2-NEXT:    por %xmm10, %xmm8
   5332 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   5333 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5334 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   5335 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5336 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   5337 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
   5338 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   5339 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
   5340 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
   5341 ; SSE2-NEXT:    pand %xmm13, %xmm11
   5342 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
   5343 ; SSE2-NEXT:    por %xmm11, %xmm10
   5344 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   5345 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5346 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   5347 ; SSE2-NEXT:    pxor %xmm9, %xmm12
   5348 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   5349 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5350 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5351 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
   5352 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
   5353 ; SSE2-NEXT:    pand %xmm14, %xmm11
   5354 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
   5355 ; SSE2-NEXT:    por %xmm11, %xmm12
   5356 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   5357 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5358 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   5359 ; SSE2-NEXT:    movdqa %xmm9, %xmm13
   5360 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5361 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5362 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
   5363 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   5364 ; SSE2-NEXT:    pand %xmm14, %xmm9
   5365 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5366 ; SSE2-NEXT:    por %xmm9, %xmm11
   5367 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5368 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   5369 ; SSE2-NEXT:    por %xmm11, %xmm0
   5370 ; SSE2-NEXT:    pand %xmm12, %xmm1
   5371 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   5372 ; SSE2-NEXT:    por %xmm12, %xmm1
   5373 ; SSE2-NEXT:    pand %xmm10, %xmm2
   5374 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5375 ; SSE2-NEXT:    por %xmm10, %xmm2
   5376 ; SSE2-NEXT:    pand %xmm8, %xmm3
   5377 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   5378 ; SSE2-NEXT:    por %xmm8, %xmm3
   5379 ; SSE2-NEXT:    retq
   5380 ;
   5381 ; SSE4-LABEL: test125:
   5382 ; SSE4:       # BB#0: # %entry
   5383 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   5384 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   5385 ; SSE4-NEXT:    movdqa %xmm3, %xmm10
   5386 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5387 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   5388 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   5389 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   5390 ; SSE4-NEXT:    movdqa %xmm2, %xmm11
   5391 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5392 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   5393 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5394 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   5395 ; SSE4-NEXT:    movdqa %xmm1, %xmm12
   5396 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   5397 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   5398 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5399 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
   5400 ; SSE4-NEXT:    movdqa %xmm8, %xmm12
   5401 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   5402 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   5403 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
   5404 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   5405 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5406 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5407 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5408 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5409 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   5410 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5411 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5412 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5413 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5414 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5415 ; SSE4-NEXT:    retq
   5416 ;
   5417 ; AVX1-LABEL: test125:
   5418 ; AVX1:       # BB#0: # %entry
   5419 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5420 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5421 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   5422 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
   5423 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5424 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5425 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
   5426 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
   5427 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5428 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5429 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5430 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5431 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   5432 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   5433 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5434 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
   5435 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
   5436 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   5437 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5438 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5439 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5440 ; AVX1-NEXT:    retq
   5441 ;
   5442 ; AVX2-LABEL: test125:
   5443 ; AVX2:       # BB#0: # %entry
   5444 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   5445 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
   5446 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
   5447 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5448 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
   5449 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
   5450 ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
   5451 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5452 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
   5453 ; AVX2-NEXT:    retq
   5454 ;
   5455 ; AVX512F-LABEL: test125:
   5456 ; AVX512F:       # BB#0: # %entry
   5457 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   5458 ; AVX512F-NEXT:    retq
   5459 entry:
   5460   %cmp = icmp ult <8 x i64> %a, %b
   5461   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5462   ret <8 x i64> %sel
   5463 }
   5464 
   5465 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
   5466 ; SSE2-LABEL: test126:
   5467 ; SSE2:       # BB#0: # %entry
   5468 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5469 ; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
   5470 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   5471 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   5472 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   5473 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   5474 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   5475 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   5476 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   5477 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   5478 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   5479 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5480 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5481 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   5482 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   5483 ; SSE2-NEXT:    pand %xmm12, %xmm0
   5484 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   5485 ; SSE2-NEXT:    por %xmm0, %xmm12
   5486 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   5487 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   5488 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   5489 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   5490 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5491 ; SSE2-NEXT:    movdqa %xmm3, %xmm13
   5492 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   5493 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   5494 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5495 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   5496 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   5497 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5498 ; SSE2-NEXT:    pand %xmm15, %xmm11
   5499 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   5500 ; SSE2-NEXT:    por %xmm11, %xmm13
   5501 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   5502 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5503 ; SSE2-NEXT:    movdqa %xmm2, %xmm14
   5504 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   5505 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   5506 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   5507 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   5508 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   5509 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5510 ; SSE2-NEXT:    pand %xmm11, %xmm14
   5511 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   5512 ; SSE2-NEXT:    por %xmm14, %xmm15
   5513 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   5514 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5515 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5516 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   5517 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5518 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   5519 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   5520 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   5521 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5522 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   5523 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   5524 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5525 ; SSE2-NEXT:    por %xmm0, %xmm14
   5526 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   5527 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   5528 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   5529 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   5530 ; SSE2-NEXT:    pandn %xmm4, %xmm1
   5531 ; SSE2-NEXT:    por %xmm14, %xmm1
   5532 ; SSE2-NEXT:    pandn %xmm2, %xmm15
   5533 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   5534 ; SSE2-NEXT:    por %xmm15, %xmm11
   5535 ; SSE2-NEXT:    pandn %xmm3, %xmm13
   5536 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5537 ; SSE2-NEXT:    por %xmm13, %xmm10
   5538 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   5539 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
   5540 ; SSE2-NEXT:    por %xmm12, %xmm8
   5541 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   5542 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   5543 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   5544 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   5545 ; SSE2-NEXT:    retq
   5546 ;
   5547 ; SSE4-LABEL: test126:
   5548 ; SSE4:       # BB#0: # %entry
   5549 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   5550 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   5551 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
   5552 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5553 ; SSE4-NEXT:    movdqa %xmm3, %xmm8
   5554 ; SSE4-NEXT:    pxor %xmm0, %xmm8
   5555 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm8
   5556 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   5557 ; SSE4-NEXT:    pxor %xmm12, %xmm8
   5558 ; SSE4-NEXT:    movdqa %xmm6, %xmm11
   5559 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5560 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   5561 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5562 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   5563 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   5564 ; SSE4-NEXT:    movdqa %xmm5, %xmm13
   5565 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   5566 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   5567 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5568 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
   5569 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   5570 ; SSE4-NEXT:    movdqa %xmm4, %xmm13
   5571 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   5572 ; SSE4-NEXT:    pxor %xmm9, %xmm0
   5573 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
   5574 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   5575 ; SSE4-NEXT:    blendvpd %xmm9, %xmm4
   5576 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5577 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5578 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5579 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5580 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   5581 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5582 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5583 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5584 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5585 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5586 ; SSE4-NEXT:    retq
   5587 ;
   5588 ; AVX1-LABEL: test126:
   5589 ; AVX1:       # BB#0: # %entry
   5590 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5591 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5592 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   5593 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
   5594 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5595 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5596 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
   5597 ; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
   5598 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
   5599 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
   5600 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
   5601 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   5602 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5603 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   5604 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5605 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   5606 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   5607 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5608 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   5609 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
   5610 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
   5611 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   5612 ; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
   5613 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5614 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5615 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5616 ; AVX1-NEXT:    retq
   5617 ;
   5618 ; AVX2-LABEL: test126:
   5619 ; AVX2:       # BB#0: # %entry
   5620 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   5621 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
   5622 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
   5623 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5624 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
   5625 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
   5626 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm7
   5627 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
   5628 ; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
   5629 ; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
   5630 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5631 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
   5632 ; AVX2-NEXT:    retq
   5633 ;
   5634 ; AVX512F-LABEL: test126:
   5635 ; AVX512F:       # BB#0: # %entry
   5636 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   5637 ; AVX512F-NEXT:    retq
   5638 entry:
   5639   %cmp = icmp ule <8 x i64> %a, %b
   5640   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5641   ret <8 x i64> %sel
   5642 }
   5643 
   5644 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
   5645 ; SSE2-LABEL: test127:
   5646 ; SSE2:       # BB#0: # %entry
   5647 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
   5648 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5649 ; SSE2-NEXT:    pxor %xmm9, %xmm8
   5650 ; SSE2-NEXT:    movdqa %xmm3, %xmm10
   5651 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5652 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   5653 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5654 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5655 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
   5656 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   5657 ; SSE2-NEXT:    pand %xmm12, %xmm10
   5658 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
   5659 ; SSE2-NEXT:    por %xmm10, %xmm8
   5660 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   5661 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5662 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   5663 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5664 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   5665 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
   5666 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   5667 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
   5668 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
   5669 ; SSE2-NEXT:    pand %xmm13, %xmm11
   5670 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
   5671 ; SSE2-NEXT:    por %xmm11, %xmm10
   5672 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   5673 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5674 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   5675 ; SSE2-NEXT:    pxor %xmm9, %xmm12
   5676 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   5677 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5678 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5679 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
   5680 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
   5681 ; SSE2-NEXT:    pand %xmm14, %xmm11
   5682 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
   5683 ; SSE2-NEXT:    por %xmm11, %xmm12
   5684 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   5685 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5686 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   5687 ; SSE2-NEXT:    movdqa %xmm9, %xmm13
   5688 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5689 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5690 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
   5691 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   5692 ; SSE2-NEXT:    pand %xmm14, %xmm9
   5693 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5694 ; SSE2-NEXT:    por %xmm9, %xmm11
   5695 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5696 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   5697 ; SSE2-NEXT:    por %xmm11, %xmm0
   5698 ; SSE2-NEXT:    pand %xmm12, %xmm1
   5699 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   5700 ; SSE2-NEXT:    por %xmm12, %xmm1
   5701 ; SSE2-NEXT:    pand %xmm10, %xmm2
   5702 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5703 ; SSE2-NEXT:    por %xmm10, %xmm2
   5704 ; SSE2-NEXT:    pand %xmm8, %xmm3
   5705 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   5706 ; SSE2-NEXT:    por %xmm8, %xmm3
   5707 ; SSE2-NEXT:    retq
   5708 ;
   5709 ; SSE4-LABEL: test127:
   5710 ; SSE4:       # BB#0: # %entry
   5711 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   5712 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   5713 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
   5714 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5715 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   5716 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   5717 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   5718 ; SSE4-NEXT:    movdqa %xmm6, %xmm11
   5719 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5720 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   5721 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5722 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   5723 ; SSE4-NEXT:    movdqa %xmm5, %xmm12
   5724 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   5725 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   5726 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5727 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
   5728 ; SSE4-NEXT:    movdqa %xmm4, %xmm12
   5729 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   5730 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5731 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
   5732 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   5733 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5734 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5735 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5736 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5737 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   5738 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5739 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5740 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5741 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5742 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5743 ; SSE4-NEXT:    retq
   5744 ;
   5745 ; AVX1-LABEL: test127:
   5746 ; AVX1:       # BB#0: # %entry
   5747 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5748 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5749 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   5750 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
   5751 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5752 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5753 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
   5754 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
   5755 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5756 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5757 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   5758 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5759 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   5760 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   5761 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5762 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
   5763 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
   5764 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   5765 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5766 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5767 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5768 ; AVX1-NEXT:    retq
   5769 ;
   5770 ; AVX2-LABEL: test127:
   5771 ; AVX2:       # BB#0: # %entry
   5772 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   5773 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
   5774 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
   5775 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5776 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
   5777 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
   5778 ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
   5779 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5780 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
   5781 ; AVX2-NEXT:    retq
   5782 ;
   5783 ; AVX512F-LABEL: test127:
   5784 ; AVX512F:       # BB#0: # %entry
   5785 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   5786 ; AVX512F-NEXT:    retq
   5787 entry:
   5788   %cmp = icmp ugt <8 x i64> %a, %b
   5789   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5790   ret <8 x i64> %sel
   5791 }
   5792 
   5793 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
   5794 ; SSE2-LABEL: test128:
   5795 ; SSE2:       # BB#0: # %entry
   5796 ; SSE2-NEXT:    movdqa %xmm7, %xmm11
   5797 ; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
   5798 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   5799 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   5800 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   5801 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   5802 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   5803 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5804 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   5805 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   5806 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   5807 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   5808 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5809 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5810 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   5811 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   5812 ; SSE2-NEXT:    pand %xmm12, %xmm0
   5813 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   5814 ; SSE2-NEXT:    por %xmm0, %xmm12
   5815 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   5816 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   5817 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   5818 ; SSE2-NEXT:    movdqa %xmm3, %xmm11
   5819 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5820 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   5821 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   5822 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   5823 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5824 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   5825 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   5826 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5827 ; SSE2-NEXT:    pand %xmm15, %xmm11
   5828 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   5829 ; SSE2-NEXT:    por %xmm11, %xmm13
   5830 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   5831 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5832 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   5833 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   5834 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   5835 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   5836 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   5837 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   5838 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5839 ; SSE2-NEXT:    pand %xmm11, %xmm14
   5840 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   5841 ; SSE2-NEXT:    por %xmm14, %xmm15
   5842 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
   5843 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5844 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   5845 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   5846 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5847 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   5848 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   5849 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   5850 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5851 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   5852 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   5853 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5854 ; SSE2-NEXT:    por %xmm0, %xmm14
   5855 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   5856 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   5857 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   5858 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   5859 ; SSE2-NEXT:    pandn %xmm4, %xmm1
   5860 ; SSE2-NEXT:    por %xmm14, %xmm1
   5861 ; SSE2-NEXT:    pandn %xmm2, %xmm15
   5862 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   5863 ; SSE2-NEXT:    por %xmm15, %xmm11
   5864 ; SSE2-NEXT:    pandn %xmm3, %xmm13
   5865 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5866 ; SSE2-NEXT:    por %xmm13, %xmm10
   5867 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   5868 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
   5869 ; SSE2-NEXT:    por %xmm12, %xmm8
   5870 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   5871 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   5872 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   5873 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   5874 ; SSE2-NEXT:    retq
   5875 ;
   5876 ; SSE4-LABEL: test128:
   5877 ; SSE4:       # BB#0: # %entry
   5878 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   5879 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   5880 ; SSE4-NEXT:    movdqa %xmm3, %xmm10
   5881 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5882 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
   5883 ; SSE4-NEXT:    pxor %xmm0, %xmm8
   5884 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm8
   5885 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   5886 ; SSE4-NEXT:    pxor %xmm12, %xmm8
   5887 ; SSE4-NEXT:    movdqa %xmm2, %xmm11
   5888 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5889 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   5890 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5891 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   5892 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   5893 ; SSE4-NEXT:    movdqa %xmm1, %xmm13
   5894 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   5895 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   5896 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5897 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
   5898 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   5899 ; SSE4-NEXT:    movdqa %xmm9, %xmm13
   5900 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   5901 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   5902 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
   5903 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   5904 ; SSE4-NEXT:    blendvpd %xmm9, %xmm4
   5905 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5906 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5907 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5908 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5909 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   5910 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5911 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5912 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5913 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5914 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5915 ; SSE4-NEXT:    retq
   5916 ;
   5917 ; AVX1-LABEL: test128:
   5918 ; AVX1:       # BB#0: # %entry
   5919 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5920 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5921 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   5922 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
   5923 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5924 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5925 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
   5926 ; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
   5927 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
   5928 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
   5929 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
   5930 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   5931 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5932 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5933 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5934 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   5935 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   5936 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5937 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   5938 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
   5939 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
   5940 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   5941 ; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
   5942 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5943 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5944 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5945 ; AVX1-NEXT:    retq
   5946 ;
   5947 ; AVX2-LABEL: test128:
   5948 ; AVX2:       # BB#0: # %entry
   5949 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   5950 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
   5951 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
   5952 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5953 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
   5954 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
   5955 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm7
   5956 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
   5957 ; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
   5958 ; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
   5959 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5960 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
   5961 ; AVX2-NEXT:    retq
   5962 ;
   5963 ; AVX512F-LABEL: test128:
   5964 ; AVX512F:       # BB#0: # %entry
   5965 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   5966 ; AVX512F-NEXT:    retq
   5967 entry:
   5968   %cmp = icmp uge <8 x i64> %a, %b
   5969   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5970   ret <8 x i64> %sel
   5971 }
   5972 
   5973 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
   5974 ; SSE2-LABEL: test129:
   5975 ; SSE2:       # BB#0: # %entry
   5976 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   5977 ; SSE2-NEXT:    movdqa %xmm7, %xmm3
   5978 ; SSE2-NEXT:    pcmpgtb %xmm8, %xmm3
   5979 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   5980 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm9
   5981 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   5982 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm10
   5983 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   5984 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm11
   5985 ; SSE2-NEXT:    pand %xmm11, %xmm4
   5986 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   5987 ; SSE2-NEXT:    por %xmm4, %xmm11
   5988 ; SSE2-NEXT:    pand %xmm10, %xmm5
   5989 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   5990 ; SSE2-NEXT:    por %xmm5, %xmm10
   5991 ; SSE2-NEXT:    pand %xmm9, %xmm6
   5992 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   5993 ; SSE2-NEXT:    por %xmm6, %xmm9
   5994 ; SSE2-NEXT:    pand %xmm3, %xmm7
   5995 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   5996 ; SSE2-NEXT:    por %xmm7, %xmm3
   5997 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   5998 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   5999 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6000 ; SSE2-NEXT:    retq
   6001 ;
   6002 ; SSE4-LABEL: test129:
   6003 ; SSE4:       # BB#0: # %entry
   6004 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   6005 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   6006 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   6007 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   6008 ; SSE4-NEXT:    retq
   6009 ;
   6010 ; AVX1-LABEL: test129:
   6011 ; AVX1:       # BB#0: # %entry
   6012 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6013 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6014 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   6015 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   6016 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6017 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6018 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6019 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   6020 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   6021 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6022 ; AVX1-NEXT:    retq
   6023 ;
   6024 ; AVX2-LABEL: test129:
   6025 ; AVX2:       # BB#0: # %entry
   6026 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   6027 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   6028 ; AVX2-NEXT:    retq
   6029 ;
   6030 ; AVX512BW-LABEL: test129:
   6031 ; AVX512BW:       # BB#0: # %entry
   6032 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   6033 ; AVX512BW-NEXT:    retq
   6034 entry:
   6035   %cmp = icmp slt <64 x i8> %a, %b
   6036   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6037   ret <64 x i8> %sel
   6038 }
   6039 
   6040 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
   6041 ; SSE2-LABEL: test130:
   6042 ; SSE2:       # BB#0: # %entry
   6043 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   6044 ; SSE2-NEXT:    movdqa %xmm3, %xmm12
   6045 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm12
   6046 ; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
   6047 ; SSE2-NEXT:    movdqa %xmm12, %xmm9
   6048 ; SSE2-NEXT:    pxor %xmm13, %xmm9
   6049 ; SSE2-NEXT:    movdqa %xmm8, %xmm14
   6050 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm14
   6051 ; SSE2-NEXT:    movdqa %xmm14, %xmm2
   6052 ; SSE2-NEXT:    pxor %xmm13, %xmm2
   6053 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   6054 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm15
   6055 ; SSE2-NEXT:    movdqa %xmm15, %xmm10
   6056 ; SSE2-NEXT:    pxor %xmm13, %xmm10
   6057 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6058 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
   6059 ; SSE2-NEXT:    pxor %xmm11, %xmm13
   6060 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   6061 ; SSE2-NEXT:    pandn %xmm0, %xmm13
   6062 ; SSE2-NEXT:    por %xmm13, %xmm11
   6063 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   6064 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6065 ; SSE2-NEXT:    por %xmm15, %xmm10
   6066 ; SSE2-NEXT:    pandn %xmm6, %xmm14
   6067 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   6068 ; SSE2-NEXT:    por %xmm14, %xmm2
   6069 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   6070 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   6071 ; SSE2-NEXT:    por %xmm12, %xmm9
   6072 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6073 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6074 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
   6075 ; SSE2-NEXT:    retq
   6076 ;
   6077 ; SSE4-LABEL: test130:
   6078 ; SSE4:       # BB#0: # %entry
   6079 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   6080 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   6081 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   6082 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   6083 ; SSE4-NEXT:    retq
   6084 ;
   6085 ; AVX1-LABEL: test130:
   6086 ; AVX1:       # BB#0: # %entry
   6087 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6088 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6089 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   6090 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   6091 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6092 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6093 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6094 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   6095 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   6096 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6097 ; AVX1-NEXT:    retq
   6098 ;
   6099 ; AVX2-LABEL: test130:
   6100 ; AVX2:       # BB#0: # %entry
   6101 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   6102 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   6103 ; AVX2-NEXT:    retq
   6104 ;
   6105 ; AVX512BW-LABEL: test130:
   6106 ; AVX512BW:       # BB#0: # %entry
   6107 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   6108 ; AVX512BW-NEXT:    retq
   6109 entry:
   6110   %cmp = icmp sle <64 x i8> %a, %b
   6111   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6112   ret <64 x i8> %sel
   6113 }
   6114 
   6115 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
   6116 ; SSE2-LABEL: test131:
   6117 ; SSE2:       # BB#0: # %entry
   6118 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6119 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
   6120 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   6121 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm9
   6122 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   6123 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm10
   6124 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6125 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
   6126 ; SSE2-NEXT:    pand %xmm11, %xmm4
   6127 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   6128 ; SSE2-NEXT:    por %xmm4, %xmm11
   6129 ; SSE2-NEXT:    pand %xmm10, %xmm5
   6130 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6131 ; SSE2-NEXT:    por %xmm5, %xmm10
   6132 ; SSE2-NEXT:    pand %xmm9, %xmm6
   6133 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   6134 ; SSE2-NEXT:    por %xmm6, %xmm9
   6135 ; SSE2-NEXT:    pand %xmm3, %xmm7
   6136 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   6137 ; SSE2-NEXT:    por %xmm7, %xmm3
   6138 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6139 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6140 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6141 ; SSE2-NEXT:    retq
   6142 ;
   6143 ; SSE4-LABEL: test131:
   6144 ; SSE4:       # BB#0: # %entry
   6145 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   6146 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   6147 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   6148 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   6149 ; SSE4-NEXT:    retq
   6150 ;
   6151 ; AVX1-LABEL: test131:
   6152 ; AVX1:       # BB#0: # %entry
   6153 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6154 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6155 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   6156 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   6157 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6158 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6159 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6160 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   6161 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   6162 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6163 ; AVX1-NEXT:    retq
   6164 ;
   6165 ; AVX2-LABEL: test131:
   6166 ; AVX2:       # BB#0: # %entry
   6167 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   6168 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   6169 ; AVX2-NEXT:    retq
   6170 ;
   6171 ; AVX512BW-LABEL: test131:
   6172 ; AVX512BW:       # BB#0: # %entry
   6173 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   6174 ; AVX512BW-NEXT:    retq
   6175 entry:
   6176   %cmp = icmp sgt <64 x i8> %a, %b
   6177   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6178   ret <64 x i8> %sel
   6179 }
   6180 
   6181 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
   6182 ; SSE2-LABEL: test132:
   6183 ; SSE2:       # BB#0: # %entry
   6184 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   6185 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   6186 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   6187 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm12
   6188 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   6189 ; SSE2-NEXT:    movdqa %xmm12, %xmm9
   6190 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6191 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   6192 ; SSE2-NEXT:    pcmpgtb %xmm8, %xmm13
   6193 ; SSE2-NEXT:    movdqa %xmm13, %xmm2
   6194 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   6195 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   6196 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm14
   6197 ; SSE2-NEXT:    movdqa %xmm14, %xmm11
   6198 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   6199 ; SSE2-NEXT:    movdqa %xmm4, %xmm15
   6200 ; SSE2-NEXT:    pcmpgtb %xmm10, %xmm15
   6201 ; SSE2-NEXT:    pxor %xmm15, %xmm0
   6202 ; SSE2-NEXT:    pandn %xmm4, %xmm15
   6203 ; SSE2-NEXT:    pandn %xmm10, %xmm0
   6204 ; SSE2-NEXT:    por %xmm15, %xmm0
   6205 ; SSE2-NEXT:    pandn %xmm5, %xmm14
   6206 ; SSE2-NEXT:    pandn %xmm1, %xmm11
   6207 ; SSE2-NEXT:    por %xmm14, %xmm11
   6208 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   6209 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   6210 ; SSE2-NEXT:    por %xmm13, %xmm2
   6211 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   6212 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   6213 ; SSE2-NEXT:    por %xmm12, %xmm9
   6214 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   6215 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
   6216 ; SSE2-NEXT:    retq
   6217 ;
   6218 ; SSE4-LABEL: test132:
   6219 ; SSE4:       # BB#0: # %entry
   6220 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   6221 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   6222 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   6223 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   6224 ; SSE4-NEXT:    retq
   6225 ;
   6226 ; AVX1-LABEL: test132:
   6227 ; AVX1:       # BB#0: # %entry
   6228 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6229 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6230 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   6231 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   6232 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6233 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6234 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6235 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   6236 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   6237 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6238 ; AVX1-NEXT:    retq
   6239 ;
   6240 ; AVX2-LABEL: test132:
   6241 ; AVX2:       # BB#0: # %entry
   6242 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   6243 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   6244 ; AVX2-NEXT:    retq
   6245 ;
   6246 ; AVX512BW-LABEL: test132:
   6247 ; AVX512BW:       # BB#0: # %entry
   6248 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   6249 ; AVX512BW-NEXT:    retq
   6250 entry:
   6251   %cmp = icmp sge <64 x i8> %a, %b
   6252   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6253   ret <64 x i8> %sel
   6254 }
   6255 
   6256 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
   6257 ; SSE-LABEL: test133:
   6258 ; SSE:       # BB#0: # %entry
   6259 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   6260 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   6261 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   6262 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   6263 ; SSE-NEXT:    retq
   6264 ;
   6265 ; AVX1-LABEL: test133:
   6266 ; AVX1:       # BB#0: # %entry
   6267 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6268 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6269 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   6270 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   6271 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6272 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6273 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6274 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   6275 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   6276 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6277 ; AVX1-NEXT:    retq
   6278 ;
   6279 ; AVX2-LABEL: test133:
   6280 ; AVX2:       # BB#0: # %entry
   6281 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   6282 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   6283 ; AVX2-NEXT:    retq
   6284 ;
   6285 ; AVX512BW-LABEL: test133:
   6286 ; AVX512BW:       # BB#0: # %entry
   6287 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   6288 ; AVX512BW-NEXT:    retq
   6289 entry:
   6290   %cmp = icmp ult <64 x i8> %a, %b
   6291   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6292   ret <64 x i8> %sel
   6293 }
   6294 
   6295 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
   6296 ; SSE-LABEL: test134:
   6297 ; SSE:       # BB#0: # %entry
   6298 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   6299 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   6300 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   6301 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   6302 ; SSE-NEXT:    retq
   6303 ;
   6304 ; AVX1-LABEL: test134:
   6305 ; AVX1:       # BB#0: # %entry
   6306 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6307 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6308 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   6309 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   6310 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6311 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6312 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6313 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   6314 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   6315 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6316 ; AVX1-NEXT:    retq
   6317 ;
   6318 ; AVX2-LABEL: test134:
   6319 ; AVX2:       # BB#0: # %entry
   6320 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   6321 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   6322 ; AVX2-NEXT:    retq
   6323 ;
   6324 ; AVX512BW-LABEL: test134:
   6325 ; AVX512BW:       # BB#0: # %entry
   6326 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   6327 ; AVX512BW-NEXT:    retq
   6328 entry:
   6329   %cmp = icmp ule <64 x i8> %a, %b
   6330   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6331   ret <64 x i8> %sel
   6332 }
   6333 
   6334 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
   6335 ; SSE-LABEL: test135:
   6336 ; SSE:       # BB#0: # %entry
   6337 ; SSE-NEXT:    pminub %xmm4, %xmm0
   6338 ; SSE-NEXT:    pminub %xmm5, %xmm1
   6339 ; SSE-NEXT:    pminub %xmm6, %xmm2
   6340 ; SSE-NEXT:    pminub %xmm7, %xmm3
   6341 ; SSE-NEXT:    retq
   6342 ;
   6343 ; AVX1-LABEL: test135:
   6344 ; AVX1:       # BB#0: # %entry
   6345 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6346 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6347 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   6348 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   6349 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6350 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6351 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6352 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   6353 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   6354 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6355 ; AVX1-NEXT:    retq
   6356 ;
   6357 ; AVX2-LABEL: test135:
   6358 ; AVX2:       # BB#0: # %entry
   6359 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   6360 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   6361 ; AVX2-NEXT:    retq
   6362 ;
   6363 ; AVX512BW-LABEL: test135:
   6364 ; AVX512BW:       # BB#0: # %entry
   6365 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   6366 ; AVX512BW-NEXT:    retq
   6367 entry:
   6368   %cmp = icmp ugt <64 x i8> %a, %b
   6369   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6370   ret <64 x i8> %sel
   6371 }
   6372 
   6373 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
   6374 ; SSE-LABEL: test136:
   6375 ; SSE:       # BB#0: # %entry
   6376 ; SSE-NEXT:    pminub %xmm4, %xmm0
   6377 ; SSE-NEXT:    pminub %xmm5, %xmm1
   6378 ; SSE-NEXT:    pminub %xmm6, %xmm2
   6379 ; SSE-NEXT:    pminub %xmm7, %xmm3
   6380 ; SSE-NEXT:    retq
   6381 ;
   6382 ; AVX1-LABEL: test136:
   6383 ; AVX1:       # BB#0: # %entry
   6384 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6385 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6386 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   6387 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   6388 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6389 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6390 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6391 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   6392 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   6393 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6394 ; AVX1-NEXT:    retq
   6395 ;
   6396 ; AVX2-LABEL: test136:
   6397 ; AVX2:       # BB#0: # %entry
   6398 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   6399 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   6400 ; AVX2-NEXT:    retq
   6401 ;
   6402 ; AVX512BW-LABEL: test136:
   6403 ; AVX512BW:       # BB#0: # %entry
   6404 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   6405 ; AVX512BW-NEXT:    retq
   6406 entry:
   6407   %cmp = icmp uge <64 x i8> %a, %b
   6408   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6409   ret <64 x i8> %sel
   6410 }
   6411 
   6412 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
   6413 ; SSE-LABEL: test137:
   6414 ; SSE:       # BB#0: # %entry
   6415 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   6416 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   6417 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   6418 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   6419 ; SSE-NEXT:    retq
   6420 ;
   6421 ; AVX1-LABEL: test137:
   6422 ; AVX1:       # BB#0: # %entry
   6423 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6424 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6425 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   6426 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   6427 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6428 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6429 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6430 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   6431 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   6432 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6433 ; AVX1-NEXT:    retq
   6434 ;
   6435 ; AVX2-LABEL: test137:
   6436 ; AVX2:       # BB#0: # %entry
   6437 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   6438 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   6439 ; AVX2-NEXT:    retq
   6440 ;
   6441 ; AVX512BW-LABEL: test137:
   6442 ; AVX512BW:       # BB#0: # %entry
   6443 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   6444 ; AVX512BW-NEXT:    retq
   6445 entry:
   6446   %cmp = icmp slt <32 x i16> %a, %b
   6447   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6448   ret <32 x i16> %sel
   6449 }
   6450 
   6451 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
   6452 ; SSE-LABEL: test138:
   6453 ; SSE:       # BB#0: # %entry
   6454 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   6455 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   6456 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   6457 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   6458 ; SSE-NEXT:    retq
   6459 ;
   6460 ; AVX1-LABEL: test138:
   6461 ; AVX1:       # BB#0: # %entry
   6462 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6463 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6464 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   6465 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   6466 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6467 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6468 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6469 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   6470 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   6471 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6472 ; AVX1-NEXT:    retq
   6473 ;
   6474 ; AVX2-LABEL: test138:
   6475 ; AVX2:       # BB#0: # %entry
   6476 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   6477 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   6478 ; AVX2-NEXT:    retq
   6479 ;
   6480 ; AVX512BW-LABEL: test138:
   6481 ; AVX512BW:       # BB#0: # %entry
   6482 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   6483 ; AVX512BW-NEXT:    retq
   6484 entry:
   6485   %cmp = icmp sle <32 x i16> %a, %b
   6486   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6487   ret <32 x i16> %sel
   6488 }
   6489 
   6490 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
   6491 ; SSE-LABEL: test139:
   6492 ; SSE:       # BB#0: # %entry
   6493 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   6494 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   6495 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   6496 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   6497 ; SSE-NEXT:    retq
   6498 ;
   6499 ; AVX1-LABEL: test139:
   6500 ; AVX1:       # BB#0: # %entry
   6501 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6502 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6503 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   6504 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   6505 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6506 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6507 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6508 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   6509 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   6510 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6511 ; AVX1-NEXT:    retq
   6512 ;
   6513 ; AVX2-LABEL: test139:
   6514 ; AVX2:       # BB#0: # %entry
   6515 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   6516 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   6517 ; AVX2-NEXT:    retq
   6518 ;
   6519 ; AVX512BW-LABEL: test139:
   6520 ; AVX512BW:       # BB#0: # %entry
   6521 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   6522 ; AVX512BW-NEXT:    retq
   6523 entry:
   6524   %cmp = icmp sgt <32 x i16> %a, %b
   6525   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6526   ret <32 x i16> %sel
   6527 }
   6528 
   6529 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
   6530 ; SSE-LABEL: test140:
   6531 ; SSE:       # BB#0: # %entry
   6532 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   6533 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   6534 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   6535 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   6536 ; SSE-NEXT:    retq
   6537 ;
   6538 ; AVX1-LABEL: test140:
   6539 ; AVX1:       # BB#0: # %entry
   6540 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6541 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6542 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   6543 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   6544 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6545 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6546 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6547 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   6548 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   6549 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6550 ; AVX1-NEXT:    retq
   6551 ;
   6552 ; AVX2-LABEL: test140:
   6553 ; AVX2:       # BB#0: # %entry
   6554 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   6555 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   6556 ; AVX2-NEXT:    retq
   6557 ;
   6558 ; AVX512BW-LABEL: test140:
   6559 ; AVX512BW:       # BB#0: # %entry
   6560 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   6561 ; AVX512BW-NEXT:    retq
   6562 entry:
   6563   %cmp = icmp sge <32 x i16> %a, %b
   6564   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6565   ret <32 x i16> %sel
   6566 }
   6567 
   6568 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
   6569 ; SSE2-LABEL: test141:
   6570 ; SSE2:       # BB#0: # %entry
   6571 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6572 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768]
   6573 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   6574 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6575 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   6576 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   6577 ; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
   6578 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   6579 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   6580 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   6581 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6582 ; SSE2-NEXT:    pcmpgtw %xmm10, %xmm9
   6583 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   6584 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   6585 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   6586 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   6587 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm10
   6588 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   6589 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   6590 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   6591 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm0
   6592 ; SSE2-NEXT:    pand %xmm0, %xmm4
   6593 ; SSE2-NEXT:    pandn %xmm11, %xmm0
   6594 ; SSE2-NEXT:    por %xmm4, %xmm0
   6595 ; SSE2-NEXT:    pand %xmm10, %xmm5
   6596 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6597 ; SSE2-NEXT:    por %xmm5, %xmm10
   6598 ; SSE2-NEXT:    pand %xmm9, %xmm6
   6599 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   6600 ; SSE2-NEXT:    por %xmm6, %xmm9
   6601 ; SSE2-NEXT:    pand %xmm8, %xmm7
   6602 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   6603 ; SSE2-NEXT:    por %xmm7, %xmm8
   6604 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6605 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6606 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   6607 ; SSE2-NEXT:    retq
   6608 ;
   6609 ; SSE4-LABEL: test141:
   6610 ; SSE4:       # BB#0: # %entry
   6611 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   6612 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   6613 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   6614 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   6615 ; SSE4-NEXT:    retq
   6616 ;
   6617 ; AVX1-LABEL: test141:
   6618 ; AVX1:       # BB#0: # %entry
   6619 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6620 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6621 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   6622 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   6623 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6624 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6625 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6626 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   6627 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   6628 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6629 ; AVX1-NEXT:    retq
   6630 ;
   6631 ; AVX2-LABEL: test141:
   6632 ; AVX2:       # BB#0: # %entry
   6633 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   6634 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   6635 ; AVX2-NEXT:    retq
   6636 ;
   6637 ; AVX512BW-LABEL: test141:
   6638 ; AVX512BW:       # BB#0: # %entry
   6639 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   6640 ; AVX512BW-NEXT:    retq
   6641 entry:
   6642   %cmp = icmp ult <32 x i16> %a, %b
   6643   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6644   ret <32 x i16> %sel
   6645 }
   6646 
   6647 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
   6648 ; SSE2-LABEL: test142:
   6649 ; SSE2:       # BB#0: # %entry
   6650 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6651 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   6652 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   6653 ; SSE2-NEXT:    psubusw %xmm7, %xmm3
   6654 ; SSE2-NEXT:    pxor %xmm12, %xmm12
   6655 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm3
   6656 ; SSE2-NEXT:    psubusw %xmm6, %xmm2
   6657 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm2
   6658 ; SSE2-NEXT:    psubusw %xmm5, %xmm1
   6659 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm1
   6660 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6661 ; SSE2-NEXT:    psubusw %xmm4, %xmm11
   6662 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm11
   6663 ; SSE2-NEXT:    pand %xmm11, %xmm4
   6664 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   6665 ; SSE2-NEXT:    por %xmm4, %xmm11
   6666 ; SSE2-NEXT:    pand %xmm1, %xmm5
   6667 ; SSE2-NEXT:    pandn %xmm10, %xmm1
   6668 ; SSE2-NEXT:    por %xmm5, %xmm1
   6669 ; SSE2-NEXT:    pand %xmm2, %xmm6
   6670 ; SSE2-NEXT:    pandn %xmm9, %xmm2
   6671 ; SSE2-NEXT:    por %xmm6, %xmm2
   6672 ; SSE2-NEXT:    pand %xmm3, %xmm7
   6673 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   6674 ; SSE2-NEXT:    por %xmm7, %xmm3
   6675 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6676 ; SSE2-NEXT:    retq
   6677 ;
   6678 ; SSE4-LABEL: test142:
   6679 ; SSE4:       # BB#0: # %entry
   6680 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   6681 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   6682 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   6683 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   6684 ; SSE4-NEXT:    retq
   6685 ;
   6686 ; AVX1-LABEL: test142:
   6687 ; AVX1:       # BB#0: # %entry
   6688 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6689 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6690 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   6691 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   6692 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6693 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6694 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6695 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   6696 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   6697 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6698 ; AVX1-NEXT:    retq
   6699 ;
   6700 ; AVX2-LABEL: test142:
   6701 ; AVX2:       # BB#0: # %entry
   6702 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   6703 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   6704 ; AVX2-NEXT:    retq
   6705 ;
   6706 ; AVX512BW-LABEL: test142:
   6707 ; AVX512BW:       # BB#0: # %entry
   6708 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   6709 ; AVX512BW-NEXT:    retq
   6710 entry:
   6711   %cmp = icmp ule <32 x i16> %a, %b
   6712   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6713   ret <32 x i16> %sel
   6714 }
   6715 
   6716 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
   6717 ; SSE2-LABEL: test143:
   6718 ; SSE2:       # BB#0: # %entry
   6719 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6720 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768]
   6721 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   6722 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6723 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6724 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   6725 ; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
   6726 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   6727 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   6728 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   6729 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6730 ; SSE2-NEXT:    pcmpgtw %xmm10, %xmm9
   6731 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   6732 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   6733 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   6734 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   6735 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm10
   6736 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   6737 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   6738 ; SSE2-NEXT:    pxor %xmm11, %xmm0
   6739 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm0
   6740 ; SSE2-NEXT:    pand %xmm0, %xmm4
   6741 ; SSE2-NEXT:    pandn %xmm11, %xmm0
   6742 ; SSE2-NEXT:    por %xmm4, %xmm0
   6743 ; SSE2-NEXT:    pand %xmm10, %xmm5
   6744 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6745 ; SSE2-NEXT:    por %xmm5, %xmm10
   6746 ; SSE2-NEXT:    pand %xmm9, %xmm6
   6747 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   6748 ; SSE2-NEXT:    por %xmm6, %xmm9
   6749 ; SSE2-NEXT:    pand %xmm8, %xmm7
   6750 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   6751 ; SSE2-NEXT:    por %xmm7, %xmm8
   6752 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6753 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6754 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   6755 ; SSE2-NEXT:    retq
   6756 ;
   6757 ; SSE4-LABEL: test143:
   6758 ; SSE4:       # BB#0: # %entry
   6759 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   6760 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   6761 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   6762 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   6763 ; SSE4-NEXT:    retq
   6764 ;
   6765 ; AVX1-LABEL: test143:
   6766 ; AVX1:       # BB#0: # %entry
   6767 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6768 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6769 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   6770 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   6771 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6772 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6773 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6774 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   6775 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   6776 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6777 ; AVX1-NEXT:    retq
   6778 ;
   6779 ; AVX2-LABEL: test143:
   6780 ; AVX2:       # BB#0: # %entry
   6781 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   6782 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   6783 ; AVX2-NEXT:    retq
   6784 ;
   6785 ; AVX512BW-LABEL: test143:
   6786 ; AVX512BW:       # BB#0: # %entry
   6787 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   6788 ; AVX512BW-NEXT:    retq
   6789 entry:
   6790   %cmp = icmp ugt <32 x i16> %a, %b
   6791   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6792   ret <32 x i16> %sel
   6793 }
   6794 
   6795 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
   6796 ; SSE2-LABEL: test144:
   6797 ; SSE2:       # BB#0: # %entry
   6798 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6799 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   6800 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   6801 ; SSE2-NEXT:    movdqa %xmm7, %xmm3
   6802 ; SSE2-NEXT:    psubusw %xmm8, %xmm3
   6803 ; SSE2-NEXT:    pxor %xmm12, %xmm12
   6804 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm3
   6805 ; SSE2-NEXT:    movdqa %xmm6, %xmm2
   6806 ; SSE2-NEXT:    psubusw %xmm9, %xmm2
   6807 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm2
   6808 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   6809 ; SSE2-NEXT:    psubusw %xmm10, %xmm1
   6810 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm1
   6811 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   6812 ; SSE2-NEXT:    psubusw %xmm0, %xmm11
   6813 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm11
   6814 ; SSE2-NEXT:    pand %xmm11, %xmm4
   6815 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   6816 ; SSE2-NEXT:    por %xmm4, %xmm11
   6817 ; SSE2-NEXT:    pand %xmm1, %xmm5
   6818 ; SSE2-NEXT:    pandn %xmm10, %xmm1
   6819 ; SSE2-NEXT:    por %xmm5, %xmm1
   6820 ; SSE2-NEXT:    pand %xmm2, %xmm6
   6821 ; SSE2-NEXT:    pandn %xmm9, %xmm2
   6822 ; SSE2-NEXT:    por %xmm6, %xmm2
   6823 ; SSE2-NEXT:    pand %xmm3, %xmm7
   6824 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   6825 ; SSE2-NEXT:    por %xmm7, %xmm3
   6826 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6827 ; SSE2-NEXT:    retq
   6828 ;
   6829 ; SSE4-LABEL: test144:
   6830 ; SSE4:       # BB#0: # %entry
   6831 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   6832 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   6833 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   6834 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   6835 ; SSE4-NEXT:    retq
   6836 ;
   6837 ; AVX1-LABEL: test144:
   6838 ; AVX1:       # BB#0: # %entry
   6839 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6840 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6841 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   6842 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   6843 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6844 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6845 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6846 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   6847 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   6848 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6849 ; AVX1-NEXT:    retq
   6850 ;
   6851 ; AVX2-LABEL: test144:
   6852 ; AVX2:       # BB#0: # %entry
   6853 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   6854 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   6855 ; AVX2-NEXT:    retq
   6856 ;
   6857 ; AVX512BW-LABEL: test144:
   6858 ; AVX512BW:       # BB#0: # %entry
   6859 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   6860 ; AVX512BW-NEXT:    retq
   6861 entry:
   6862   %cmp = icmp uge <32 x i16> %a, %b
   6863   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6864   ret <32 x i16> %sel
   6865 }
   6866 
   6867 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
   6868 ; SSE2-LABEL: test145:
   6869 ; SSE2:       # BB#0: # %entry
   6870 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6871 ; SSE2-NEXT:    movdqa %xmm7, %xmm3
   6872 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm3
   6873 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   6874 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
   6875 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   6876 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm10
   6877 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   6878 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm11
   6879 ; SSE2-NEXT:    pand %xmm11, %xmm4
   6880 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   6881 ; SSE2-NEXT:    por %xmm4, %xmm11
   6882 ; SSE2-NEXT:    pand %xmm10, %xmm5
   6883 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6884 ; SSE2-NEXT:    por %xmm5, %xmm10
   6885 ; SSE2-NEXT:    pand %xmm9, %xmm6
   6886 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   6887 ; SSE2-NEXT:    por %xmm6, %xmm9
   6888 ; SSE2-NEXT:    pand %xmm3, %xmm7
   6889 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   6890 ; SSE2-NEXT:    por %xmm7, %xmm3
   6891 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6892 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6893 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6894 ; SSE2-NEXT:    retq
   6895 ;
   6896 ; SSE4-LABEL: test145:
   6897 ; SSE4:       # BB#0: # %entry
   6898 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   6899 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   6900 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   6901 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   6902 ; SSE4-NEXT:    retq
   6903 ;
   6904 ; AVX1-LABEL: test145:
   6905 ; AVX1:       # BB#0: # %entry
   6906 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6907 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6908 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   6909 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   6910 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6911 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6912 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6913 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   6914 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   6915 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6916 ; AVX1-NEXT:    retq
   6917 ;
   6918 ; AVX2-LABEL: test145:
   6919 ; AVX2:       # BB#0: # %entry
   6920 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   6921 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   6922 ; AVX2-NEXT:    retq
   6923 ;
   6924 ; AVX512F-LABEL: test145:
   6925 ; AVX512F:       # BB#0: # %entry
   6926 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   6927 ; AVX512F-NEXT:    retq
   6928 entry:
   6929   %cmp = icmp slt <16 x i32> %a, %b
   6930   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6931   ret <16 x i32> %sel
   6932 }
   6933 
   6934 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
   6935 ; SSE2-LABEL: test146:
   6936 ; SSE2:       # BB#0: # %entry
   6937 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   6938 ; SSE2-NEXT:    movdqa %xmm3, %xmm12
   6939 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm12
   6940 ; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
   6941 ; SSE2-NEXT:    movdqa %xmm12, %xmm9
   6942 ; SSE2-NEXT:    pxor %xmm13, %xmm9
   6943 ; SSE2-NEXT:    movdqa %xmm8, %xmm14
   6944 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm14
   6945 ; SSE2-NEXT:    movdqa %xmm14, %xmm2
   6946 ; SSE2-NEXT:    pxor %xmm13, %xmm2
   6947 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   6948 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm15
   6949 ; SSE2-NEXT:    movdqa %xmm15, %xmm10
   6950 ; SSE2-NEXT:    pxor %xmm13, %xmm10
   6951 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6952 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
   6953 ; SSE2-NEXT:    pxor %xmm11, %xmm13
   6954 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   6955 ; SSE2-NEXT:    pandn %xmm0, %xmm13
   6956 ; SSE2-NEXT:    por %xmm13, %xmm11
   6957 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   6958 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6959 ; SSE2-NEXT:    por %xmm15, %xmm10
   6960 ; SSE2-NEXT:    pandn %xmm6, %xmm14
   6961 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   6962 ; SSE2-NEXT:    por %xmm14, %xmm2
   6963 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   6964 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   6965 ; SSE2-NEXT:    por %xmm12, %xmm9
   6966 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6967 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6968 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
   6969 ; SSE2-NEXT:    retq
   6970 ;
   6971 ; SSE4-LABEL: test146:
   6972 ; SSE4:       # BB#0: # %entry
   6973 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   6974 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   6975 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   6976 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   6977 ; SSE4-NEXT:    retq
   6978 ;
   6979 ; AVX1-LABEL: test146:
   6980 ; AVX1:       # BB#0: # %entry
   6981 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6982 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6983 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   6984 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   6985 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6986 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6987 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6988 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   6989 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   6990 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6991 ; AVX1-NEXT:    retq
   6992 ;
   6993 ; AVX2-LABEL: test146:
   6994 ; AVX2:       # BB#0: # %entry
   6995 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   6996 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   6997 ; AVX2-NEXT:    retq
   6998 ;
   6999 ; AVX512F-LABEL: test146:
   7000 ; AVX512F:       # BB#0: # %entry
   7001 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   7002 ; AVX512F-NEXT:    retq
   7003 entry:
   7004   %cmp = icmp sle <16 x i32> %a, %b
   7005   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7006   ret <16 x i32> %sel
   7007 }
   7008 
   7009 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
   7010 ; SSE2-LABEL: test147:
   7011 ; SSE2:       # BB#0: # %entry
   7012 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   7013 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm3
   7014 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   7015 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm9
   7016 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   7017 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm10
   7018 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7019 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
   7020 ; SSE2-NEXT:    pand %xmm11, %xmm4
   7021 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   7022 ; SSE2-NEXT:    por %xmm4, %xmm11
   7023 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7024 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7025 ; SSE2-NEXT:    por %xmm5, %xmm10
   7026 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7027 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7028 ; SSE2-NEXT:    por %xmm6, %xmm9
   7029 ; SSE2-NEXT:    pand %xmm3, %xmm7
   7030 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   7031 ; SSE2-NEXT:    por %xmm7, %xmm3
   7032 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   7033 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7034 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7035 ; SSE2-NEXT:    retq
   7036 ;
   7037 ; SSE4-LABEL: test147:
   7038 ; SSE4:       # BB#0: # %entry
   7039 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   7040 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   7041 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   7042 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   7043 ; SSE4-NEXT:    retq
   7044 ;
   7045 ; AVX1-LABEL: test147:
   7046 ; AVX1:       # BB#0: # %entry
   7047 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7048 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7049 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   7050 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   7051 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7052 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7053 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7054 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   7055 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   7056 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7057 ; AVX1-NEXT:    retq
   7058 ;
   7059 ; AVX2-LABEL: test147:
   7060 ; AVX2:       # BB#0: # %entry
   7061 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   7062 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   7063 ; AVX2-NEXT:    retq
   7064 ;
   7065 ; AVX512F-LABEL: test147:
   7066 ; AVX512F:       # BB#0: # %entry
   7067 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   7068 ; AVX512F-NEXT:    retq
   7069 entry:
   7070   %cmp = icmp sgt <16 x i32> %a, %b
   7071   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7072   ret <16 x i32> %sel
   7073 }
   7074 
   7075 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
   7076 ; SSE2-LABEL: test148:
   7077 ; SSE2:       # BB#0: # %entry
   7078 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   7079 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   7080 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   7081 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm12
   7082 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   7083 ; SSE2-NEXT:    movdqa %xmm12, %xmm9
   7084 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7085 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   7086 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm13
   7087 ; SSE2-NEXT:    movdqa %xmm13, %xmm2
   7088 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   7089 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   7090 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm14
   7091 ; SSE2-NEXT:    movdqa %xmm14, %xmm11
   7092 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   7093 ; SSE2-NEXT:    movdqa %xmm4, %xmm15
   7094 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm15
   7095 ; SSE2-NEXT:    pxor %xmm15, %xmm0
   7096 ; SSE2-NEXT:    pandn %xmm4, %xmm15
   7097 ; SSE2-NEXT:    pandn %xmm10, %xmm0
   7098 ; SSE2-NEXT:    por %xmm15, %xmm0
   7099 ; SSE2-NEXT:    pandn %xmm5, %xmm14
   7100 ; SSE2-NEXT:    pandn %xmm1, %xmm11
   7101 ; SSE2-NEXT:    por %xmm14, %xmm11
   7102 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7103 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   7104 ; SSE2-NEXT:    por %xmm13, %xmm2
   7105 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   7106 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   7107 ; SSE2-NEXT:    por %xmm12, %xmm9
   7108 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7109 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
   7110 ; SSE2-NEXT:    retq
   7111 ;
   7112 ; SSE4-LABEL: test148:
   7113 ; SSE4:       # BB#0: # %entry
   7114 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   7115 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   7116 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   7117 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   7118 ; SSE4-NEXT:    retq
   7119 ;
   7120 ; AVX1-LABEL: test148:
   7121 ; AVX1:       # BB#0: # %entry
   7122 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7123 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7124 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   7125 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   7126 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7127 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7128 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7129 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   7130 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   7131 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7132 ; AVX1-NEXT:    retq
   7133 ;
   7134 ; AVX2-LABEL: test148:
   7135 ; AVX2:       # BB#0: # %entry
   7136 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   7137 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   7138 ; AVX2-NEXT:    retq
   7139 ;
   7140 ; AVX512F-LABEL: test148:
   7141 ; AVX512F:       # BB#0: # %entry
   7142 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   7143 ; AVX512F-NEXT:    retq
   7144 entry:
   7145   %cmp = icmp sge <16 x i32> %a, %b
   7146   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7147   ret <16 x i32> %sel
   7148 }
   7149 
   7150 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
   7151 ; SSE2-LABEL: test149:
   7152 ; SSE2:       # BB#0: # %entry
   7153 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7154 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
   7155 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   7156 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7157 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   7158 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   7159 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
   7160 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   7161 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   7162 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   7163 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7164 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm9
   7165 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   7166 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   7167 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   7168 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   7169 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm10
   7170 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   7171 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   7172 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   7173 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm0
   7174 ; SSE2-NEXT:    pand %xmm0, %xmm4
   7175 ; SSE2-NEXT:    pandn %xmm11, %xmm0
   7176 ; SSE2-NEXT:    por %xmm4, %xmm0
   7177 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7178 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7179 ; SSE2-NEXT:    por %xmm5, %xmm10
   7180 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7181 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7182 ; SSE2-NEXT:    por %xmm6, %xmm9
   7183 ; SSE2-NEXT:    pand %xmm8, %xmm7
   7184 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7185 ; SSE2-NEXT:    por %xmm7, %xmm8
   7186 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7187 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7188 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7189 ; SSE2-NEXT:    retq
   7190 ;
   7191 ; SSE4-LABEL: test149:
   7192 ; SSE4:       # BB#0: # %entry
   7193 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   7194 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   7195 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   7196 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   7197 ; SSE4-NEXT:    retq
   7198 ;
   7199 ; AVX1-LABEL: test149:
   7200 ; AVX1:       # BB#0: # %entry
   7201 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7202 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7203 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   7204 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   7205 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7206 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7207 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7208 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   7209 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   7210 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7211 ; AVX1-NEXT:    retq
   7212 ;
   7213 ; AVX2-LABEL: test149:
   7214 ; AVX2:       # BB#0: # %entry
   7215 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   7216 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   7217 ; AVX2-NEXT:    retq
   7218 ;
   7219 ; AVX512F-LABEL: test149:
   7220 ; AVX512F:       # BB#0: # %entry
   7221 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   7222 ; AVX512F-NEXT:    retq
   7223 entry:
   7224   %cmp = icmp ult <16 x i32> %a, %b
   7225   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7226   ret <16 x i32> %sel
   7227 }
   7228 
   7229 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
   7230 ; SSE2-LABEL: test150:
   7231 ; SSE2:       # BB#0: # %entry
   7232 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   7233 ; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
   7234 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   7235 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   7236 ; SSE2-NEXT:    movdqa %xmm3, %xmm12
   7237 ; SSE2-NEXT:    pxor %xmm14, %xmm12
   7238 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
   7239 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   7240 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   7241 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   7242 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   7243 ; SSE2-NEXT:    pxor %xmm14, %xmm9
   7244 ; SSE2-NEXT:    movdqa %xmm2, %xmm13
   7245 ; SSE2-NEXT:    pxor %xmm14, %xmm13
   7246 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   7247 ; SSE2-NEXT:    movdqa %xmm13, %xmm9
   7248 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7249 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   7250 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   7251 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   7252 ; SSE2-NEXT:    pxor %xmm14, %xmm15
   7253 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   7254 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   7255 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   7256 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   7257 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7258 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   7259 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   7260 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   7261 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   7262 ; SSE2-NEXT:    pandn %xmm10, %xmm0
   7263 ; SSE2-NEXT:    por %xmm14, %xmm0
   7264 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   7265 ; SSE2-NEXT:    pandn %xmm1, %xmm11
   7266 ; SSE2-NEXT:    por %xmm15, %xmm11
   7267 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7268 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7269 ; SSE2-NEXT:    por %xmm13, %xmm9
   7270 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   7271 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7272 ; SSE2-NEXT:    por %xmm12, %xmm8
   7273 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7274 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7275 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7276 ; SSE2-NEXT:    retq
   7277 ;
   7278 ; SSE4-LABEL: test150:
   7279 ; SSE4:       # BB#0: # %entry
   7280 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   7281 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   7282 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   7283 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   7284 ; SSE4-NEXT:    retq
   7285 ;
   7286 ; AVX1-LABEL: test150:
   7287 ; AVX1:       # BB#0: # %entry
   7288 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7289 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7290 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   7291 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   7292 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7293 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7294 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7295 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   7296 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   7297 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7298 ; AVX1-NEXT:    retq
   7299 ;
   7300 ; AVX2-LABEL: test150:
   7301 ; AVX2:       # BB#0: # %entry
   7302 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   7303 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   7304 ; AVX2-NEXT:    retq
   7305 ;
   7306 ; AVX512F-LABEL: test150:
   7307 ; AVX512F:       # BB#0: # %entry
   7308 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   7309 ; AVX512F-NEXT:    retq
   7310 entry:
   7311   %cmp = icmp ule <16 x i32> %a, %b
   7312   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7313   ret <16 x i32> %sel
   7314 }
   7315 
   7316 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
   7317 ; SSE2-LABEL: test151:
   7318 ; SSE2:       # BB#0: # %entry
   7319 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7320 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
   7321 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   7322 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7323 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   7324 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   7325 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
   7326 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   7327 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   7328 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   7329 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7330 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm9
   7331 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   7332 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   7333 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   7334 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   7335 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm10
   7336 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   7337 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   7338 ; SSE2-NEXT:    pxor %xmm11, %xmm0
   7339 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm0
   7340 ; SSE2-NEXT:    pand %xmm0, %xmm4
   7341 ; SSE2-NEXT:    pandn %xmm11, %xmm0
   7342 ; SSE2-NEXT:    por %xmm4, %xmm0
   7343 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7344 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7345 ; SSE2-NEXT:    por %xmm5, %xmm10
   7346 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7347 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7348 ; SSE2-NEXT:    por %xmm6, %xmm9
   7349 ; SSE2-NEXT:    pand %xmm8, %xmm7
   7350 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7351 ; SSE2-NEXT:    por %xmm7, %xmm8
   7352 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7353 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7354 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7355 ; SSE2-NEXT:    retq
   7356 ;
   7357 ; SSE4-LABEL: test151:
   7358 ; SSE4:       # BB#0: # %entry
   7359 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   7360 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   7361 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   7362 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   7363 ; SSE4-NEXT:    retq
   7364 ;
   7365 ; AVX1-LABEL: test151:
   7366 ; AVX1:       # BB#0: # %entry
   7367 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7368 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7369 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   7370 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   7371 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7372 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7373 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7374 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   7375 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   7376 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7377 ; AVX1-NEXT:    retq
   7378 ;
   7379 ; AVX2-LABEL: test151:
   7380 ; AVX2:       # BB#0: # %entry
   7381 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   7382 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   7383 ; AVX2-NEXT:    retq
   7384 ;
   7385 ; AVX512F-LABEL: test151:
   7386 ; AVX512F:       # BB#0: # %entry
   7387 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   7388 ; AVX512F-NEXT:    retq
   7389 entry:
   7390   %cmp = icmp ugt <16 x i32> %a, %b
   7391   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7392   ret <16 x i32> %sel
   7393 }
   7394 
   7395 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
   7396 ; SSE2-LABEL: test152:
   7397 ; SSE2:       # BB#0: # %entry
   7398 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   7399 ; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
   7400 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   7401 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   7402 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   7403 ; SSE2-NEXT:    pxor %xmm14, %xmm12
   7404 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
   7405 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   7406 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   7407 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   7408 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   7409 ; SSE2-NEXT:    pxor %xmm14, %xmm9
   7410 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   7411 ; SSE2-NEXT:    pxor %xmm14, %xmm13
   7412 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   7413 ; SSE2-NEXT:    movdqa %xmm13, %xmm9
   7414 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7415 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   7416 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   7417 ; SSE2-NEXT:    movdqa %xmm5, %xmm15
   7418 ; SSE2-NEXT:    pxor %xmm14, %xmm15
   7419 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   7420 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   7421 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   7422 ; SSE2-NEXT:    pxor %xmm4, %xmm14
   7423 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7424 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   7425 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   7426 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   7427 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   7428 ; SSE2-NEXT:    pandn %xmm10, %xmm0
   7429 ; SSE2-NEXT:    por %xmm14, %xmm0
   7430 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   7431 ; SSE2-NEXT:    pandn %xmm1, %xmm11
   7432 ; SSE2-NEXT:    por %xmm15, %xmm11
   7433 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7434 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7435 ; SSE2-NEXT:    por %xmm13, %xmm9
   7436 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   7437 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7438 ; SSE2-NEXT:    por %xmm12, %xmm8
   7439 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7440 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7441 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7442 ; SSE2-NEXT:    retq
   7443 ;
   7444 ; SSE4-LABEL: test152:
   7445 ; SSE4:       # BB#0: # %entry
   7446 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   7447 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   7448 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   7449 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   7450 ; SSE4-NEXT:    retq
   7451 ;
   7452 ; AVX1-LABEL: test152:
   7453 ; AVX1:       # BB#0: # %entry
   7454 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7455 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7456 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   7457 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   7458 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7459 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7460 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7461 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   7462 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   7463 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7464 ; AVX1-NEXT:    retq
   7465 ;
   7466 ; AVX2-LABEL: test152:
   7467 ; AVX2:       # BB#0: # %entry
   7468 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   7469 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   7470 ; AVX2-NEXT:    retq
   7471 ;
   7472 ; AVX512F-LABEL: test152:
   7473 ; AVX512F:       # BB#0: # %entry
   7474 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   7475 ; AVX512F-NEXT:    retq
   7476 entry:
   7477   %cmp = icmp uge <16 x i32> %a, %b
   7478   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7479   ret <16 x i32> %sel
   7480 }
   7481 
   7482 ; -----------------------
   7483 
   7484 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
   7485 ; SSE2-LABEL: test153:
   7486 ; SSE2:       # BB#0: # %entry
   7487 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0]
   7488 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   7489 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   7490 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   7491 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   7492 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
   7493 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
   7494 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
   7495 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
   7496 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   7497 ; SSE2-NEXT:    pand %xmm12, %xmm9
   7498 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
   7499 ; SSE2-NEXT:    por %xmm9, %xmm8
   7500 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   7501 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   7502 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   7503 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   7504 ; SSE2-NEXT:    movdqa %xmm10, %xmm12
   7505 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
   7506 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   7507 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   7508 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   7509 ; SSE2-NEXT:    pand %xmm13, %xmm10
   7510 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   7511 ; SSE2-NEXT:    por %xmm10, %xmm9
   7512 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   7513 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   7514 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   7515 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   7516 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   7517 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
   7518 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   7519 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
   7520 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   7521 ; SSE2-NEXT:    pand %xmm14, %xmm12
   7522 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
   7523 ; SSE2-NEXT:    por %xmm12, %xmm10
   7524 ; SSE2-NEXT:    movdqa %xmm0, %xmm12
   7525 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   7526 ; SSE2-NEXT:    pxor %xmm4, %xmm11
   7527 ; SSE2-NEXT:    movdqa %xmm11, %xmm13
   7528 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
   7529 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   7530 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
   7531 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   7532 ; SSE2-NEXT:    pand %xmm14, %xmm12
   7533 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   7534 ; SSE2-NEXT:    por %xmm12, %xmm11
   7535 ; SSE2-NEXT:    pand %xmm11, %xmm4
   7536 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   7537 ; SSE2-NEXT:    por %xmm4, %xmm11
   7538 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7539 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7540 ; SSE2-NEXT:    por %xmm5, %xmm10
   7541 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7542 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7543 ; SSE2-NEXT:    por %xmm6, %xmm9
   7544 ; SSE2-NEXT:    pand %xmm8, %xmm7
   7545 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7546 ; SSE2-NEXT:    por %xmm7, %xmm8
   7547 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   7548 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7549 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7550 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7551 ; SSE2-NEXT:    retq
   7552 ;
   7553 ; SSE4-LABEL: test153:
   7554 ; SSE4:       # BB#0: # %entry
   7555 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7556 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   7557 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
   7558 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   7559 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
   7560 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   7561 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
   7562 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   7563 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
   7564 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   7565 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   7566 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   7567 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   7568 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   7569 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   7570 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   7571 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   7572 ; SSE4-NEXT:    retq
   7573 ;
   7574 ; AVX1-LABEL: test153:
   7575 ; AVX1:       # BB#0: # %entry
   7576 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7577 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
   7578 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7579 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm5
   7580 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   7581 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7582 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   7583 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   7584 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm6
   7585 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
   7586 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7587 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7588 ; AVX1-NEXT:    retq
   7589 ;
   7590 ; AVX2-LABEL: test153:
   7591 ; AVX2:       # BB#0: # %entry
   7592 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
   7593 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm5
   7594 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7595 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7596 ; AVX2-NEXT:    retq
   7597 ;
   7598 ; AVX512F-LABEL: test153:
   7599 ; AVX512F:       # BB#0: # %entry
   7600 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   7601 ; AVX512F-NEXT:    retq
   7602 entry:
   7603   %cmp = icmp slt <8 x i64> %a, %b
   7604   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7605   ret <8 x i64> %sel
   7606 }
   7607 
   7608 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
   7609 ; SSE2-LABEL: test154:
   7610 ; SSE2:       # BB#0: # %entry
   7611 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   7612 ; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
   7613 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   7614 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   7615 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   7616 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   7617 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   7618 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   7619 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   7620 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   7621 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7622 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   7623 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   7624 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   7625 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   7626 ; SSE2-NEXT:    pand %xmm12, %xmm0
   7627 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   7628 ; SSE2-NEXT:    por %xmm0, %xmm12
   7629 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   7630 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   7631 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   7632 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   7633 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7634 ; SSE2-NEXT:    movdqa %xmm3, %xmm13
   7635 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   7636 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   7637 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7638 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   7639 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   7640 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   7641 ; SSE2-NEXT:    pand %xmm15, %xmm11
   7642 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   7643 ; SSE2-NEXT:    por %xmm11, %xmm13
   7644 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   7645 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7646 ; SSE2-NEXT:    movdqa %xmm2, %xmm14
   7647 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   7648 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   7649 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   7650 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   7651 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   7652 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   7653 ; SSE2-NEXT:    pand %xmm11, %xmm14
   7654 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   7655 ; SSE2-NEXT:    por %xmm14, %xmm15
   7656 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   7657 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7658 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   7659 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   7660 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7661 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   7662 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   7663 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   7664 ; SSE2-NEXT:    pand %xmm11, %xmm0
   7665 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   7666 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   7667 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   7668 ; SSE2-NEXT:    por %xmm0, %xmm14
   7669 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   7670 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   7671 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   7672 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   7673 ; SSE2-NEXT:    pandn %xmm9, %xmm1
   7674 ; SSE2-NEXT:    por %xmm14, %xmm1
   7675 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   7676 ; SSE2-NEXT:    pandn %xmm2, %xmm11
   7677 ; SSE2-NEXT:    por %xmm15, %xmm11
   7678 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7679 ; SSE2-NEXT:    pandn %xmm3, %xmm10
   7680 ; SSE2-NEXT:    por %xmm13, %xmm10
   7681 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
   7682 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   7683 ; SSE2-NEXT:    por %xmm12, %xmm8
   7684 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   7685 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7686 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   7687 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7688 ; SSE2-NEXT:    retq
   7689 ;
   7690 ; SSE4-LABEL: test154:
   7691 ; SSE4:       # BB#0: # %entry
   7692 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7693 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   7694 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
   7695 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   7696 ; SSE4-NEXT:    pxor %xmm12, %xmm9
   7697 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   7698 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
   7699 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   7700 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   7701 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
   7702 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   7703 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   7704 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   7705 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   7706 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   7707 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   7708 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   7709 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   7710 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   7711 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   7712 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   7713 ; SSE4-NEXT:    retq
   7714 ;
   7715 ; AVX1-LABEL: test154:
   7716 ; AVX1:       # BB#0: # %entry
   7717 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   7718 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   7719 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7720 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
   7721 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7722 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm6
   7723 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   7724 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   7725 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   7726 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   7727 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   7728 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   7729 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm7
   7730 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
   7731 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   7732 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7733 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7734 ; AVX1-NEXT:    retq
   7735 ;
   7736 ; AVX2-LABEL: test154:
   7737 ; AVX2:       # BB#0: # %entry
   7738 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
   7739 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
   7740 ; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
   7741 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm6
   7742 ; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
   7743 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7744 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7745 ; AVX2-NEXT:    retq
   7746 ;
   7747 ; AVX512F-LABEL: test154:
   7748 ; AVX512F:       # BB#0: # %entry
   7749 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   7750 ; AVX512F-NEXT:    retq
   7751 entry:
   7752   %cmp = icmp sle <8 x i64> %a, %b
   7753   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7754   ret <8 x i64> %sel
   7755 }
   7756 
   7757 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
   7758 ; SSE2-LABEL: test155:
   7759 ; SSE2:       # BB#0: # %entry
   7760 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0]
   7761 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   7762 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   7763 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   7764 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   7765 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
   7766 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
   7767 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
   7768 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
   7769 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   7770 ; SSE2-NEXT:    pand %xmm12, %xmm9
   7771 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
   7772 ; SSE2-NEXT:    por %xmm9, %xmm8
   7773 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   7774 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   7775 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   7776 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   7777 ; SSE2-NEXT:    movdqa %xmm10, %xmm12
   7778 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
   7779 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   7780 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   7781 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   7782 ; SSE2-NEXT:    pand %xmm13, %xmm10
   7783 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   7784 ; SSE2-NEXT:    por %xmm10, %xmm9
   7785 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   7786 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   7787 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   7788 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   7789 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   7790 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
   7791 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   7792 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
   7793 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   7794 ; SSE2-NEXT:    pand %xmm14, %xmm12
   7795 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
   7796 ; SSE2-NEXT:    por %xmm12, %xmm10
   7797 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   7798 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   7799 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   7800 ; SSE2-NEXT:    movdqa %xmm11, %xmm13
   7801 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
   7802 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   7803 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
   7804 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   7805 ; SSE2-NEXT:    pand %xmm14, %xmm12
   7806 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   7807 ; SSE2-NEXT:    por %xmm12, %xmm11
   7808 ; SSE2-NEXT:    pand %xmm11, %xmm4
   7809 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   7810 ; SSE2-NEXT:    por %xmm4, %xmm11
   7811 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7812 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7813 ; SSE2-NEXT:    por %xmm5, %xmm10
   7814 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7815 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7816 ; SSE2-NEXT:    por %xmm6, %xmm9
   7817 ; SSE2-NEXT:    pand %xmm8, %xmm7
   7818 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7819 ; SSE2-NEXT:    por %xmm7, %xmm8
   7820 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   7821 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7822 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7823 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7824 ; SSE2-NEXT:    retq
   7825 ;
   7826 ; SSE4-LABEL: test155:
   7827 ; SSE4:       # BB#0: # %entry
   7828 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7829 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   7830 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
   7831 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   7832 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
   7833 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   7834 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
   7835 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   7836 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   7837 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   7838 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   7839 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   7840 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   7841 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   7842 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   7843 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   7844 ; SSE4-NEXT:    retq
   7845 ;
   7846 ; AVX1-LABEL: test155:
   7847 ; AVX1:       # BB#0: # %entry
   7848 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   7849 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   7850 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7851 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm5
   7852 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   7853 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   7854 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   7855 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   7856 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm6
   7857 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
   7858 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7859 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7860 ; AVX1-NEXT:    retq
   7861 ;
   7862 ; AVX2-LABEL: test155:
   7863 ; AVX2:       # BB#0: # %entry
   7864 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
   7865 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm5
   7866 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7867 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7868 ; AVX2-NEXT:    retq
   7869 ;
   7870 ; AVX512F-LABEL: test155:
   7871 ; AVX512F:       # BB#0: # %entry
   7872 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   7873 ; AVX512F-NEXT:    retq
   7874 entry:
   7875   %cmp = icmp sgt <8 x i64> %a, %b
   7876   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7877   ret <8 x i64> %sel
   7878 }
   7879 
   7880 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
   7881 ; SSE2-LABEL: test156:
   7882 ; SSE2:       # BB#0: # %entry
   7883 ; SSE2-NEXT:    movdqa %xmm7, %xmm11
   7884 ; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
   7885 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   7886 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   7887 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   7888 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   7889 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   7890 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   7891 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   7892 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   7893 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   7894 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7895 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   7896 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   7897 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   7898 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   7899 ; SSE2-NEXT:    pand %xmm12, %xmm0
   7900 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   7901 ; SSE2-NEXT:    por %xmm0, %xmm12
   7902 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   7903 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   7904 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   7905 ; SSE2-NEXT:    movdqa %xmm3, %xmm11
   7906 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7907 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   7908 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   7909 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   7910 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7911 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   7912 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   7913 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   7914 ; SSE2-NEXT:    pand %xmm15, %xmm11
   7915 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   7916 ; SSE2-NEXT:    por %xmm11, %xmm13
   7917 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   7918 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7919 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   7920 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   7921 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   7922 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   7923 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   7924 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   7925 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   7926 ; SSE2-NEXT:    pand %xmm11, %xmm14
   7927 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   7928 ; SSE2-NEXT:    por %xmm14, %xmm15
   7929 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
   7930 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7931 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   7932 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   7933 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7934 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   7935 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   7936 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   7937 ; SSE2-NEXT:    pand %xmm11, %xmm0
   7938 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   7939 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   7940 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   7941 ; SSE2-NEXT:    por %xmm0, %xmm14
   7942 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   7943 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   7944 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   7945 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   7946 ; SSE2-NEXT:    pandn %xmm9, %xmm1
   7947 ; SSE2-NEXT:    por %xmm14, %xmm1
   7948 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   7949 ; SSE2-NEXT:    pandn %xmm2, %xmm11
   7950 ; SSE2-NEXT:    por %xmm15, %xmm11
   7951 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7952 ; SSE2-NEXT:    pandn %xmm3, %xmm10
   7953 ; SSE2-NEXT:    por %xmm13, %xmm10
   7954 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
   7955 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   7956 ; SSE2-NEXT:    por %xmm12, %xmm8
   7957 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   7958 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7959 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   7960 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7961 ; SSE2-NEXT:    retq
   7962 ;
   7963 ; SSE4-LABEL: test156:
   7964 ; SSE4:       # BB#0: # %entry
   7965 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7966 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   7967 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
   7968 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   7969 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   7970 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   7971 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
   7972 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   7973 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   7974 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
   7975 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   7976 ; SSE4-NEXT:    movdqa %xmm4, %xmm12
   7977 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm12
   7978 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   7979 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   7980 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   7981 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   7982 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   7983 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   7984 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   7985 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   7986 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   7987 ; SSE4-NEXT:    retq
   7988 ;
   7989 ; AVX1-LABEL: test156:
   7990 ; AVX1:       # BB#0: # %entry
   7991 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7992 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
   7993 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7994 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
   7995 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7996 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm6
   7997 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   7998 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   7999 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   8000 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   8001 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8002 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   8003 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm7
   8004 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
   8005 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8006 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8007 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8008 ; AVX1-NEXT:    retq
   8009 ;
   8010 ; AVX2-LABEL: test156:
   8011 ; AVX2:       # BB#0: # %entry
   8012 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
   8013 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
   8014 ; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
   8015 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm6
   8016 ; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
   8017 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8018 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8019 ; AVX2-NEXT:    retq
   8020 ;
   8021 ; AVX512F-LABEL: test156:
   8022 ; AVX512F:       # BB#0: # %entry
   8023 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   8024 ; AVX512F-NEXT:    retq
   8025 entry:
   8026   %cmp = icmp sge <8 x i64> %a, %b
   8027   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8028   ret <8 x i64> %sel
   8029 }
   8030 
   8031 define <8 x i64> @test157(<8 x i64> %a, <8 x i64> %b) {
   8032 ; SSE2-LABEL: test157:
   8033 ; SSE2:       # BB#0: # %entry
   8034 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
   8035 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   8036 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   8037 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   8038 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   8039 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
   8040 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
   8041 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
   8042 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
   8043 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   8044 ; SSE2-NEXT:    pand %xmm12, %xmm9
   8045 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
   8046 ; SSE2-NEXT:    por %xmm9, %xmm8
   8047 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   8048 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   8049 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   8050 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   8051 ; SSE2-NEXT:    movdqa %xmm10, %xmm12
   8052 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
   8053 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   8054 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   8055 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   8056 ; SSE2-NEXT:    pand %xmm13, %xmm10
   8057 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   8058 ; SSE2-NEXT:    por %xmm10, %xmm9
   8059 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   8060 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   8061 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   8062 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   8063 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   8064 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
   8065 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   8066 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
   8067 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   8068 ; SSE2-NEXT:    pand %xmm14, %xmm12
   8069 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
   8070 ; SSE2-NEXT:    por %xmm12, %xmm10
   8071 ; SSE2-NEXT:    movdqa %xmm0, %xmm12
   8072 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   8073 ; SSE2-NEXT:    pxor %xmm4, %xmm11
   8074 ; SSE2-NEXT:    movdqa %xmm11, %xmm13
   8075 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
   8076 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   8077 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
   8078 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   8079 ; SSE2-NEXT:    pand %xmm14, %xmm12
   8080 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   8081 ; SSE2-NEXT:    por %xmm12, %xmm11
   8082 ; SSE2-NEXT:    pand %xmm11, %xmm4
   8083 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   8084 ; SSE2-NEXT:    por %xmm4, %xmm11
   8085 ; SSE2-NEXT:    pand %xmm10, %xmm5
   8086 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   8087 ; SSE2-NEXT:    por %xmm5, %xmm10
   8088 ; SSE2-NEXT:    pand %xmm9, %xmm6
   8089 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   8090 ; SSE2-NEXT:    por %xmm6, %xmm9
   8091 ; SSE2-NEXT:    pand %xmm8, %xmm7
   8092 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   8093 ; SSE2-NEXT:    por %xmm7, %xmm8
   8094 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   8095 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   8096 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   8097 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   8098 ; SSE2-NEXT:    retq
   8099 ;
   8100 ; SSE4-LABEL: test157:
   8101 ; SSE4:       # BB#0: # %entry
   8102 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   8103 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   8104 ; SSE4-NEXT:    movdqa %xmm3, %xmm10
   8105 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8106 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   8107 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   8108 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   8109 ; SSE4-NEXT:    movdqa %xmm2, %xmm11
   8110 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8111 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   8112 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8113 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   8114 ; SSE4-NEXT:    movdqa %xmm1, %xmm12
   8115 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   8116 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   8117 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8118 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
   8119 ; SSE4-NEXT:    movdqa %xmm8, %xmm12
   8120 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   8121 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   8122 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
   8123 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   8124 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   8125 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   8126 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   8127 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   8128 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   8129 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   8130 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   8131 ; SSE4-NEXT:    retq
   8132 ;
   8133 ; AVX1-LABEL: test157:
   8134 ; AVX1:       # BB#0: # %entry
   8135 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   8136 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8137 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   8138 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
   8139 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8140 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   8141 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
   8142 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
   8143 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8144 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   8145 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   8146 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8147 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   8148 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   8149 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8150 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
   8151 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
   8152 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   8153 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8154 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8155 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8156 ; AVX1-NEXT:    retq
   8157 ;
   8158 ; AVX2-LABEL: test157:
   8159 ; AVX2:       # BB#0: # %entry
   8160 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   8161 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
   8162 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
   8163 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   8164 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
   8165 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
   8166 ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
   8167 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
   8168 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
   8169 ; AVX2-NEXT:    retq
   8170 ;
   8171 ; AVX512F-LABEL: test157:
   8172 ; AVX512F:       # BB#0: # %entry
   8173 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   8174 ; AVX512F-NEXT:    retq
   8175 entry:
   8176   %cmp = icmp ult <8 x i64> %a, %b
   8177   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8178   ret <8 x i64> %sel
   8179 }
   8180 
   8181 define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) {
   8182 ; SSE2-LABEL: test158:
   8183 ; SSE2:       # BB#0: # %entry
   8184 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   8185 ; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
   8186 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   8187 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   8188 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8189 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   8190 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   8191 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   8192 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   8193 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   8194 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   8195 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   8196 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   8197 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   8198 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   8199 ; SSE2-NEXT:    pand %xmm12, %xmm0
   8200 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   8201 ; SSE2-NEXT:    por %xmm0, %xmm12
   8202 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   8203 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   8204 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   8205 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   8206 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8207 ; SSE2-NEXT:    movdqa %xmm3, %xmm13
   8208 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   8209 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   8210 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   8211 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   8212 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   8213 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   8214 ; SSE2-NEXT:    pand %xmm15, %xmm11
   8215 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   8216 ; SSE2-NEXT:    por %xmm11, %xmm13
   8217 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   8218 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8219 ; SSE2-NEXT:    movdqa %xmm2, %xmm14
   8220 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   8221 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   8222 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   8223 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   8224 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   8225 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   8226 ; SSE2-NEXT:    pand %xmm11, %xmm14
   8227 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   8228 ; SSE2-NEXT:    por %xmm14, %xmm15
   8229 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   8230 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8231 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   8232 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   8233 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   8234 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   8235 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   8236 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   8237 ; SSE2-NEXT:    pand %xmm11, %xmm0
   8238 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   8239 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   8240 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   8241 ; SSE2-NEXT:    por %xmm0, %xmm14
   8242 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   8243 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   8244 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   8245 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   8246 ; SSE2-NEXT:    pandn %xmm9, %xmm1
   8247 ; SSE2-NEXT:    por %xmm14, %xmm1
   8248 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   8249 ; SSE2-NEXT:    pandn %xmm2, %xmm11
   8250 ; SSE2-NEXT:    por %xmm15, %xmm11
   8251 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   8252 ; SSE2-NEXT:    pandn %xmm3, %xmm10
   8253 ; SSE2-NEXT:    por %xmm13, %xmm10
   8254 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
   8255 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   8256 ; SSE2-NEXT:    por %xmm12, %xmm8
   8257 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   8258 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   8259 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   8260 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   8261 ; SSE2-NEXT:    retq
   8262 ;
   8263 ; SSE4-LABEL: test158:
   8264 ; SSE4:       # BB#0: # %entry
   8265 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   8266 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   8267 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
   8268 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8269 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   8270 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   8271 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   8272 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   8273 ; SSE4-NEXT:    pxor %xmm12, %xmm9
   8274 ; SSE4-NEXT:    movdqa %xmm6, %xmm11
   8275 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8276 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   8277 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8278 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   8279 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   8280 ; SSE4-NEXT:    movdqa %xmm5, %xmm13
   8281 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   8282 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   8283 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8284 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
   8285 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   8286 ; SSE4-NEXT:    movdqa %xmm4, %xmm13
   8287 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   8288 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   8289 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
   8290 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   8291 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   8292 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   8293 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   8294 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   8295 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   8296 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   8297 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   8298 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   8299 ; SSE4-NEXT:    retq
   8300 ;
   8301 ; AVX1-LABEL: test158:
   8302 ; AVX1:       # BB#0: # %entry
   8303 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   8304 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8305 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   8306 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
   8307 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8308 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   8309 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
   8310 ; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
   8311 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
   8312 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
   8313 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
   8314 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   8315 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   8316 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   8317 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8318 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   8319 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   8320 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8321 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   8322 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
   8323 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
   8324 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   8325 ; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
   8326 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8327 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8328 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8329 ; AVX1-NEXT:    retq
   8330 ;
   8331 ; AVX2-LABEL: test158:
   8332 ; AVX2:       # BB#0: # %entry
   8333 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   8334 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
   8335 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
   8336 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   8337 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
   8338 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
   8339 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm7
   8340 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
   8341 ; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
   8342 ; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
   8343 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
   8344 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
   8345 ; AVX2-NEXT:    retq
   8346 ;
   8347 ; AVX512F-LABEL: test158:
   8348 ; AVX512F:       # BB#0: # %entry
   8349 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   8350 ; AVX512F-NEXT:    retq
   8351 entry:
   8352   %cmp = icmp ule <8 x i64> %a, %b
   8353   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8354   ret <8 x i64> %sel
   8355 }
   8356 
   8357 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
   8358 ; SSE2-LABEL: test159:
   8359 ; SSE2:       # BB#0: # %entry
   8360 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
   8361 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   8362 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   8363 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   8364 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   8365 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
   8366 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
   8367 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
   8368 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
   8369 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   8370 ; SSE2-NEXT:    pand %xmm12, %xmm9
   8371 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
   8372 ; SSE2-NEXT:    por %xmm9, %xmm8
   8373 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   8374 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   8375 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   8376 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   8377 ; SSE2-NEXT:    movdqa %xmm10, %xmm12
   8378 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
   8379 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   8380 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   8381 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   8382 ; SSE2-NEXT:    pand %xmm13, %xmm10
   8383 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   8384 ; SSE2-NEXT:    por %xmm10, %xmm9
   8385 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   8386 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   8387 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   8388 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   8389 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   8390 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
   8391 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   8392 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
   8393 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   8394 ; SSE2-NEXT:    pand %xmm14, %xmm12
   8395 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
   8396 ; SSE2-NEXT:    por %xmm12, %xmm10
   8397 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   8398 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   8399 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   8400 ; SSE2-NEXT:    movdqa %xmm11, %xmm13
   8401 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
   8402 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   8403 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
   8404 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   8405 ; SSE2-NEXT:    pand %xmm14, %xmm12
   8406 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   8407 ; SSE2-NEXT:    por %xmm12, %xmm11
   8408 ; SSE2-NEXT:    pand %xmm11, %xmm4
   8409 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   8410 ; SSE2-NEXT:    por %xmm4, %xmm11
   8411 ; SSE2-NEXT:    pand %xmm10, %xmm5
   8412 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   8413 ; SSE2-NEXT:    por %xmm5, %xmm10
   8414 ; SSE2-NEXT:    pand %xmm9, %xmm6
   8415 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   8416 ; SSE2-NEXT:    por %xmm6, %xmm9
   8417 ; SSE2-NEXT:    pand %xmm8, %xmm7
   8418 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   8419 ; SSE2-NEXT:    por %xmm7, %xmm8
   8420 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   8421 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   8422 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   8423 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   8424 ; SSE2-NEXT:    retq
   8425 ;
   8426 ; SSE4-LABEL: test159:
   8427 ; SSE4:       # BB#0: # %entry
   8428 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   8429 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   8430 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
   8431 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8432 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   8433 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   8434 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   8435 ; SSE4-NEXT:    movdqa %xmm6, %xmm11
   8436 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8437 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   8438 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8439 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   8440 ; SSE4-NEXT:    movdqa %xmm5, %xmm12
   8441 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   8442 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   8443 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8444 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
   8445 ; SSE4-NEXT:    movdqa %xmm4, %xmm12
   8446 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   8447 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   8448 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
   8449 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   8450 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   8451 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   8452 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   8453 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   8454 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   8455 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   8456 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   8457 ; SSE4-NEXT:    retq
   8458 ;
   8459 ; AVX1-LABEL: test159:
   8460 ; AVX1:       # BB#0: # %entry
   8461 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   8462 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8463 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   8464 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
   8465 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8466 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   8467 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
   8468 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
   8469 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8470 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   8471 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   8472 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8473 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   8474 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   8475 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8476 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
   8477 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
   8478 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   8479 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8480 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8481 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8482 ; AVX1-NEXT:    retq
   8483 ;
   8484 ; AVX2-LABEL: test159:
   8485 ; AVX2:       # BB#0: # %entry
   8486 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   8487 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
   8488 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
   8489 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   8490 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
   8491 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
   8492 ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
   8493 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
   8494 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
   8495 ; AVX2-NEXT:    retq
   8496 ;
   8497 ; AVX512F-LABEL: test159:
   8498 ; AVX512F:       # BB#0: # %entry
   8499 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   8500 ; AVX512F-NEXT:    retq
   8501 entry:
   8502   %cmp = icmp ugt <8 x i64> %a, %b
   8503   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8504   ret <8 x i64> %sel
   8505 }
   8506 
   8507 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
   8508 ; SSE2-LABEL: test160:
   8509 ; SSE2:       # BB#0: # %entry
   8510 ; SSE2-NEXT:    movdqa %xmm7, %xmm11
   8511 ; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
   8512 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   8513 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   8514 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8515 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   8516 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   8517 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   8518 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   8519 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   8520 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   8521 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   8522 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   8523 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   8524 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   8525 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   8526 ; SSE2-NEXT:    pand %xmm12, %xmm0
   8527 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   8528 ; SSE2-NEXT:    por %xmm0, %xmm12
   8529 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   8530 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   8531 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   8532 ; SSE2-NEXT:    movdqa %xmm3, %xmm11
   8533 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8534 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   8535 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   8536 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   8537 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   8538 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   8539 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   8540 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   8541 ; SSE2-NEXT:    pand %xmm15, %xmm11
   8542 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   8543 ; SSE2-NEXT:    por %xmm11, %xmm13
   8544 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   8545 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8546 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   8547 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   8548 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   8549 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   8550 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   8551 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   8552 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   8553 ; SSE2-NEXT:    pand %xmm11, %xmm14
   8554 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   8555 ; SSE2-NEXT:    por %xmm14, %xmm15
   8556 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
   8557 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8558 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   8559 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   8560 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   8561 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   8562 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   8563 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   8564 ; SSE2-NEXT:    pand %xmm11, %xmm0
   8565 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   8566 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   8567 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   8568 ; SSE2-NEXT:    por %xmm0, %xmm14
   8569 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   8570 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   8571 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   8572 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   8573 ; SSE2-NEXT:    pandn %xmm9, %xmm1
   8574 ; SSE2-NEXT:    por %xmm14, %xmm1
   8575 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   8576 ; SSE2-NEXT:    pandn %xmm2, %xmm11
   8577 ; SSE2-NEXT:    por %xmm15, %xmm11
   8578 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   8579 ; SSE2-NEXT:    pandn %xmm3, %xmm10
   8580 ; SSE2-NEXT:    por %xmm13, %xmm10
   8581 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
   8582 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   8583 ; SSE2-NEXT:    por %xmm12, %xmm8
   8584 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   8585 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   8586 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   8587 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   8588 ; SSE2-NEXT:    retq
   8589 ;
   8590 ; SSE4-LABEL: test160:
   8591 ; SSE4:       # BB#0: # %entry
   8592 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   8593 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   8594 ; SSE4-NEXT:    movdqa %xmm3, %xmm10
   8595 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8596 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   8597 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   8598 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   8599 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   8600 ; SSE4-NEXT:    pxor %xmm12, %xmm9
   8601 ; SSE4-NEXT:    movdqa %xmm2, %xmm11
   8602 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8603 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   8604 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8605 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   8606 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   8607 ; SSE4-NEXT:    movdqa %xmm1, %xmm13
   8608 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   8609 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   8610 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8611 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
   8612 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   8613 ; SSE4-NEXT:    movdqa %xmm8, %xmm13
   8614 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   8615 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   8616 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
   8617 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   8618 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   8619 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   8620 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   8621 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   8622 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   8623 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   8624 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   8625 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   8626 ; SSE4-NEXT:    retq
   8627 ;
   8628 ; AVX1-LABEL: test160:
   8629 ; AVX1:       # BB#0: # %entry
   8630 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   8631 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8632 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   8633 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
   8634 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8635 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   8636 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
   8637 ; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
   8638 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
   8639 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
   8640 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
   8641 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   8642 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   8643 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   8644 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8645 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   8646 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   8647 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8648 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   8649 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
   8650 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
   8651 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   8652 ; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
   8653 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8654 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8655 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8656 ; AVX1-NEXT:    retq
   8657 ;
   8658 ; AVX2-LABEL: test160:
   8659 ; AVX2:       # BB#0: # %entry
   8660 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   8661 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
   8662 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
   8663 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   8664 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
   8665 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
   8666 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm7
   8667 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
   8668 ; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
   8669 ; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
   8670 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
   8671 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
   8672 ; AVX2-NEXT:    retq
   8673 ;
   8674 ; AVX512F-LABEL: test160:
   8675 ; AVX512F:       # BB#0: # %entry
   8676 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   8677 ; AVX512F-NEXT:    retq
   8678 entry:
   8679   %cmp = icmp uge <8 x i64> %a, %b
   8680   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8681   ret <8 x i64> %sel
   8682 }
   8683 
   8684 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
   8685 ; SSE2-LABEL: test161:
   8686 ; SSE2:       # BB#0: # %entry
   8687 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   8688 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   8689 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8690 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   8691 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8692 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8693 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8694 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8695 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8696 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8697 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8698 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8699 ; SSE2-NEXT:    por %xmm5, %xmm6
   8700 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   8701 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8702 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   8703 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
   8704 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8705 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8706 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
   8707 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   8708 ; SSE2-NEXT:    pand %xmm8, %xmm4
   8709 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   8710 ; SSE2-NEXT:    por %xmm4, %xmm5
   8711 ; SSE2-NEXT:    pand %xmm5, %xmm0
   8712 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   8713 ; SSE2-NEXT:    por %xmm5, %xmm0
   8714 ; SSE2-NEXT:    pand %xmm6, %xmm1
   8715 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   8716 ; SSE2-NEXT:    por %xmm6, %xmm1
   8717 ; SSE2-NEXT:    retq
   8718 ;
   8719 ; SSE4-LABEL: test161:
   8720 ; SSE4:       # BB#0: # %entry
   8721 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8722 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   8723 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
   8724 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   8725 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   8726 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   8727 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8728 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   8729 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8730 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8731 ; SSE4-NEXT:    retq
   8732 ;
   8733 ; AVX1-LABEL: test161:
   8734 ; AVX1:       # BB#0: # %entry
   8735 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8736 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   8737 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8738 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
   8739 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8740 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8741 ; AVX1-NEXT:    retq
   8742 ;
   8743 ; AVX2-LABEL: test161:
   8744 ; AVX2:       # BB#0: # %entry
   8745 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   8746 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8747 ; AVX2-NEXT:    retq
   8748 ;
   8749 ; AVX512BW-LABEL: test161:
   8750 ; AVX512BW:       # BB#0: # %entry
   8751 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   8752 ; AVX512BW-NEXT:    retq
   8753 entry:
   8754   %cmp = icmp slt <4 x i64> %a, %b
   8755   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8756   ret <4 x i64> %sel
   8757 }
   8758 
   8759 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
   8760 ; SSE2-LABEL: test162:
   8761 ; SSE2:       # BB#0: # %entry
   8762 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
   8763 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   8764 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   8765 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   8766 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   8767 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   8768 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   8769 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   8770 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   8771 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8772 ; SSE2-NEXT:    pand %xmm8, %xmm4
   8773 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   8774 ; SSE2-NEXT:    por %xmm4, %xmm8
   8775 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   8776 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   8777 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   8778 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   8779 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   8780 ; SSE2-NEXT:    pxor %xmm0, %xmm7
   8781 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   8782 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   8783 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   8784 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   8785 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8786 ; SSE2-NEXT:    pand %xmm10, %xmm6
   8787 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   8788 ; SSE2-NEXT:    por %xmm6, %xmm5
   8789 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   8790 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   8791 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   8792 ; SSE2-NEXT:    por %xmm5, %xmm4
   8793 ; SSE2-NEXT:    pandn %xmm1, %xmm8
   8794 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   8795 ; SSE2-NEXT:    por %xmm8, %xmm9
   8796 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   8797 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   8798 ; SSE2-NEXT:    retq
   8799 ;
   8800 ; SSE4-LABEL: test162:
   8801 ; SSE4:       # BB#0: # %entry
   8802 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8803 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   8804 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
   8805 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   8806 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   8807 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   8808 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   8809 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   8810 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8811 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   8812 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8813 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8814 ; SSE4-NEXT:    retq
   8815 ;
   8816 ; AVX1-LABEL: test162:
   8817 ; AVX1:       # BB#0: # %entry
   8818 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8819 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   8820 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8821 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   8822 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8823 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm4
   8824 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
   8825 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8826 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8827 ; AVX1-NEXT:    retq
   8828 ;
   8829 ; AVX2-LABEL: test162:
   8830 ; AVX2:       # BB#0: # %entry
   8831 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   8832 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   8833 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   8834 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8835 ; AVX2-NEXT:    retq
   8836 ;
   8837 ; AVX512BW-LABEL: test162:
   8838 ; AVX512BW:       # BB#0: # %entry
   8839 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   8840 ; AVX512BW-NEXT:    retq
   8841 entry:
   8842   %cmp = icmp sle <4 x i64> %a, %b
   8843   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8844   ret <4 x i64> %sel
   8845 }
   8846 
   8847 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
   8848 ; SSE2-LABEL: test163:
   8849 ; SSE2:       # BB#0: # %entry
   8850 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   8851 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   8852 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8853 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   8854 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8855 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8856 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8857 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8858 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8859 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8860 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8861 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8862 ; SSE2-NEXT:    por %xmm5, %xmm6
   8863 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   8864 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8865 ; SSE2-NEXT:    pxor %xmm0, %xmm4
   8866 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
   8867 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8868 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8869 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
   8870 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   8871 ; SSE2-NEXT:    pand %xmm8, %xmm4
   8872 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   8873 ; SSE2-NEXT:    por %xmm4, %xmm5
   8874 ; SSE2-NEXT:    pand %xmm5, %xmm0
   8875 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   8876 ; SSE2-NEXT:    por %xmm5, %xmm0
   8877 ; SSE2-NEXT:    pand %xmm6, %xmm1
   8878 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   8879 ; SSE2-NEXT:    por %xmm6, %xmm1
   8880 ; SSE2-NEXT:    retq
   8881 ;
   8882 ; SSE4-LABEL: test163:
   8883 ; SSE4:       # BB#0: # %entry
   8884 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8885 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   8886 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
   8887 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   8888 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   8889 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8890 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   8891 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8892 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8893 ; SSE4-NEXT:    retq
   8894 ;
   8895 ; AVX1-LABEL: test163:
   8896 ; AVX1:       # BB#0: # %entry
   8897 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8898 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   8899 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8900 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
   8901 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8902 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8903 ; AVX1-NEXT:    retq
   8904 ;
   8905 ; AVX2-LABEL: test163:
   8906 ; AVX2:       # BB#0: # %entry
   8907 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   8908 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8909 ; AVX2-NEXT:    retq
   8910 ;
   8911 ; AVX512BW-LABEL: test163:
   8912 ; AVX512BW:       # BB#0: # %entry
   8913 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   8914 ; AVX512BW-NEXT:    retq
   8915 entry:
   8916   %cmp = icmp sgt <4 x i64> %a, %b
   8917   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8918   ret <4 x i64> %sel
   8919 }
   8920 
   8921 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
   8922 ; SSE2-LABEL: test164:
   8923 ; SSE2:       # BB#0: # %entry
   8924 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
   8925 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   8926 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   8927 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   8928 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   8929 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   8930 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   8931 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   8932 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   8933 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8934 ; SSE2-NEXT:    pand %xmm8, %xmm4
   8935 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   8936 ; SSE2-NEXT:    por %xmm4, %xmm8
   8937 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   8938 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   8939 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   8940 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   8941 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   8942 ; SSE2-NEXT:    pxor %xmm2, %xmm7
   8943 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   8944 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   8945 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   8946 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   8947 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8948 ; SSE2-NEXT:    pand %xmm10, %xmm6
   8949 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   8950 ; SSE2-NEXT:    por %xmm6, %xmm5
   8951 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   8952 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   8953 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   8954 ; SSE2-NEXT:    por %xmm5, %xmm4
   8955 ; SSE2-NEXT:    pandn %xmm1, %xmm8
   8956 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   8957 ; SSE2-NEXT:    por %xmm8, %xmm9
   8958 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   8959 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   8960 ; SSE2-NEXT:    retq
   8961 ;
   8962 ; SSE4-LABEL: test164:
   8963 ; SSE4:       # BB#0: # %entry
   8964 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8965 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   8966 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
   8967 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   8968 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   8969 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   8970 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm6
   8971 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   8972 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   8973 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8974 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   8975 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8976 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8977 ; SSE4-NEXT:    retq
   8978 ;
   8979 ; AVX1-LABEL: test164:
   8980 ; AVX1:       # BB#0: # %entry
   8981 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8982 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   8983 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8984 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   8985 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8986 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm4
   8987 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
   8988 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8989 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8990 ; AVX1-NEXT:    retq
   8991 ;
   8992 ; AVX2-LABEL: test164:
   8993 ; AVX2:       # BB#0: # %entry
   8994 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   8995 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   8996 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   8997 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8998 ; AVX2-NEXT:    retq
   8999 ;
   9000 ; AVX512BW-LABEL: test164:
   9001 ; AVX512BW:       # BB#0: # %entry
   9002 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   9003 ; AVX512BW-NEXT:    retq
   9004 entry:
   9005   %cmp = icmp sge <4 x i64> %a, %b
   9006   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9007   ret <4 x i64> %sel
   9008 }
   9009 
   9010 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
   9011 ; SSE2-LABEL: test165:
   9012 ; SSE2:       # BB#0: # %entry
   9013 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   9014 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   9015 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   9016 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   9017 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   9018 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9019 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   9020 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9021 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   9022 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   9023 ; SSE2-NEXT:    pand %xmm8, %xmm5
   9024 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9025 ; SSE2-NEXT:    por %xmm5, %xmm6
   9026 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   9027 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   9028 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   9029 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
   9030 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   9031 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9032 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
   9033 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   9034 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9035 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9036 ; SSE2-NEXT:    por %xmm4, %xmm5
   9037 ; SSE2-NEXT:    pand %xmm5, %xmm0
   9038 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9039 ; SSE2-NEXT:    por %xmm5, %xmm0
   9040 ; SSE2-NEXT:    pand %xmm6, %xmm1
   9041 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   9042 ; SSE2-NEXT:    por %xmm6, %xmm1
   9043 ; SSE2-NEXT:    retq
   9044 ;
   9045 ; SSE4-LABEL: test165:
   9046 ; SSE4:       # BB#0: # %entry
   9047 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9048 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9049 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
   9050 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9051 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9052 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9053 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9054 ; SSE4-NEXT:    movdqa %xmm4, %xmm6
   9055 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9056 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9057 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   9058 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   9059 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9060 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   9061 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   9062 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   9063 ; SSE4-NEXT:    retq
   9064 ;
   9065 ; AVX1-LABEL: test165:
   9066 ; AVX1:       # BB#0: # %entry
   9067 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9068 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9069 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9070 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   9071 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9072 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9073 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm4
   9074 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
   9075 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   9076 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9077 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9078 ; AVX1-NEXT:    retq
   9079 ;
   9080 ; AVX2-LABEL: test165:
   9081 ; AVX2:       # BB#0: # %entry
   9082 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9083 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   9084 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   9085 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9086 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9087 ; AVX2-NEXT:    retq
   9088 ;
   9089 ; AVX512BW-LABEL: test165:
   9090 ; AVX512BW:       # BB#0: # %entry
   9091 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   9092 ; AVX512BW-NEXT:    retq
   9093 entry:
   9094   %cmp = icmp ult <4 x i64> %a, %b
   9095   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9096   ret <4 x i64> %sel
   9097 }
   9098 
   9099 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
   9100 ; SSE2-LABEL: test166:
   9101 ; SSE2:       # BB#0: # %entry
   9102 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
   9103 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9104 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9105 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   9106 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9107 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9108 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9109 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9110 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9111 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9112 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9113 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9114 ; SSE2-NEXT:    por %xmm4, %xmm8
   9115 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9116 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9117 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9118 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9119 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9120 ; SSE2-NEXT:    pxor %xmm0, %xmm7
   9121 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9122 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9123 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9124 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9125 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9126 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9127 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9128 ; SSE2-NEXT:    por %xmm6, %xmm5
   9129 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9130 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9131 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   9132 ; SSE2-NEXT:    por %xmm5, %xmm4
   9133 ; SSE2-NEXT:    pandn %xmm1, %xmm8
   9134 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   9135 ; SSE2-NEXT:    por %xmm8, %xmm9
   9136 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9137 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9138 ; SSE2-NEXT:    retq
   9139 ;
   9140 ; SSE4-LABEL: test166:
   9141 ; SSE4:       # BB#0: # %entry
   9142 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9143 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9144 ; SSE4-NEXT:    movdqa %xmm3, %xmm6
   9145 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9146 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9147 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9148 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9149 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   9150 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   9151 ; SSE4-NEXT:    movdqa %xmm2, %xmm7
   9152 ; SSE4-NEXT:    pxor %xmm0, %xmm7
   9153 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   9154 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   9155 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9156 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   9157 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9158 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   9159 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   9160 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   9161 ; SSE4-NEXT:    retq
   9162 ;
   9163 ; AVX1-LABEL: test166:
   9164 ; AVX1:       # BB#0: # %entry
   9165 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9166 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9167 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9168 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   9169 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9170 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9171 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
   9172 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
   9173 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm5
   9174 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
   9175 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
   9176 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
   9177 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9178 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9179 ; AVX1-NEXT:    retq
   9180 ;
   9181 ; AVX2-LABEL: test166:
   9182 ; AVX2:       # BB#0: # %entry
   9183 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9184 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   9185 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   9186 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9187 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9188 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9189 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9190 ; AVX2-NEXT:    retq
   9191 ;
   9192 ; AVX512BW-LABEL: test166:
   9193 ; AVX512BW:       # BB#0: # %entry
   9194 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   9195 ; AVX512BW-NEXT:    retq
   9196 entry:
   9197   %cmp = icmp ule <4 x i64> %a, %b
   9198   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9199   ret <4 x i64> %sel
   9200 }
   9201 
   9202 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
   9203 ; SSE2-LABEL: test167:
   9204 ; SSE2:       # BB#0: # %entry
   9205 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   9206 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   9207 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   9208 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   9209 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   9210 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9211 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   9212 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9213 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   9214 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   9215 ; SSE2-NEXT:    pand %xmm8, %xmm5
   9216 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9217 ; SSE2-NEXT:    por %xmm5, %xmm6
   9218 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   9219 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   9220 ; SSE2-NEXT:    pxor %xmm0, %xmm4
   9221 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
   9222 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   9223 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9224 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
   9225 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   9226 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9227 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9228 ; SSE2-NEXT:    por %xmm4, %xmm5
   9229 ; SSE2-NEXT:    pand %xmm5, %xmm0
   9230 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9231 ; SSE2-NEXT:    por %xmm5, %xmm0
   9232 ; SSE2-NEXT:    pand %xmm6, %xmm1
   9233 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   9234 ; SSE2-NEXT:    por %xmm6, %xmm1
   9235 ; SSE2-NEXT:    retq
   9236 ;
   9237 ; SSE4-LABEL: test167:
   9238 ; SSE4:       # BB#0: # %entry
   9239 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9240 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9241 ; SSE4-NEXT:    movdqa %xmm3, %xmm6
   9242 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9243 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9244 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9245 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9246 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   9247 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9248 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   9249 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   9250 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   9251 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9252 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   9253 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   9254 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   9255 ; SSE4-NEXT:    retq
   9256 ;
   9257 ; AVX1-LABEL: test167:
   9258 ; AVX1:       # BB#0: # %entry
   9259 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9260 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9261 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9262 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   9263 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9264 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9265 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm4
   9266 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
   9267 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   9268 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9269 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9270 ; AVX1-NEXT:    retq
   9271 ;
   9272 ; AVX2-LABEL: test167:
   9273 ; AVX2:       # BB#0: # %entry
   9274 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9275 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   9276 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   9277 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9278 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9279 ; AVX2-NEXT:    retq
   9280 ;
   9281 ; AVX512BW-LABEL: test167:
   9282 ; AVX512BW:       # BB#0: # %entry
   9283 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   9284 ; AVX512BW-NEXT:    retq
   9285 entry:
   9286   %cmp = icmp ugt <4 x i64> %a, %b
   9287   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9288   ret <4 x i64> %sel
   9289 }
   9290 
   9291 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
   9292 ; SSE2-LABEL: test168:
   9293 ; SSE2:       # BB#0: # %entry
   9294 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
   9295 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   9296 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9297 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   9298 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9299 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9300 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9301 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9302 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9303 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9304 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9305 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9306 ; SSE2-NEXT:    por %xmm4, %xmm8
   9307 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9308 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9309 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9310 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   9311 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9312 ; SSE2-NEXT:    pxor %xmm2, %xmm7
   9313 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9314 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9315 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9316 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9317 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9318 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9319 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9320 ; SSE2-NEXT:    por %xmm6, %xmm5
   9321 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9322 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9323 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   9324 ; SSE2-NEXT:    por %xmm5, %xmm4
   9325 ; SSE2-NEXT:    pandn %xmm1, %xmm8
   9326 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   9327 ; SSE2-NEXT:    por %xmm8, %xmm9
   9328 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9329 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9330 ; SSE2-NEXT:    retq
   9331 ;
   9332 ; SSE4-LABEL: test168:
   9333 ; SSE4:       # BB#0: # %entry
   9334 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9335 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9336 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
   9337 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9338 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9339 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9340 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9341 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   9342 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   9343 ; SSE4-NEXT:    movdqa %xmm4, %xmm7
   9344 ; SSE4-NEXT:    pxor %xmm0, %xmm7
   9345 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9346 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   9347 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9348 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   9349 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9350 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   9351 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   9352 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   9353 ; SSE4-NEXT:    retq
   9354 ;
   9355 ; AVX1-LABEL: test168:
   9356 ; AVX1:       # BB#0: # %entry
   9357 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9358 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9359 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9360 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   9361 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9362 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9363 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
   9364 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
   9365 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm5
   9366 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
   9367 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
   9368 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
   9369 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9370 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9371 ; AVX1-NEXT:    retq
   9372 ;
   9373 ; AVX2-LABEL: test168:
   9374 ; AVX2:       # BB#0: # %entry
   9375 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9376 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   9377 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   9378 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9379 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9380 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9381 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9382 ; AVX2-NEXT:    retq
   9383 ;
   9384 ; AVX512BW-LABEL: test168:
   9385 ; AVX512BW:       # BB#0: # %entry
   9386 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   9387 ; AVX512BW-NEXT:    retq
   9388 entry:
   9389   %cmp = icmp uge <4 x i64> %a, %b
   9390   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9391   ret <4 x i64> %sel
   9392 }
   9393 
   9394 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
   9395 ; SSE2-LABEL: test169:
   9396 ; SSE2:       # BB#0: # %entry
   9397 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0]
   9398 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   9399 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9400 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   9401 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9402 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9403 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   9404 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9405 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
   9406 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   9407 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9408 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
   9409 ; SSE2-NEXT:    por %xmm6, %xmm4
   9410 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   9411 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9412 ; SSE2-NEXT:    pxor %xmm2, %xmm5
   9413 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
   9414 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
   9415 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9416 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
   9417 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
   9418 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9419 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9420 ; SSE2-NEXT:    por %xmm6, %xmm5
   9421 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9422 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9423 ; SSE2-NEXT:    por %xmm2, %xmm5
   9424 ; SSE2-NEXT:    pand %xmm4, %xmm3
   9425 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   9426 ; SSE2-NEXT:    por %xmm3, %xmm4
   9427 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   9428 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   9429 ; SSE2-NEXT:    retq
   9430 ;
   9431 ; SSE4-LABEL: test169:
   9432 ; SSE4:       # BB#0: # %entry
   9433 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9434 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9435 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
   9436 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   9437 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   9438 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9439 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9440 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9441 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9442 ; SSE4-NEXT:    retq
   9443 ;
   9444 ; AVX1-LABEL: test169:
   9445 ; AVX1:       # BB#0: # %entry
   9446 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9447 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   9448 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   9449 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
   9450 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9451 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9452 ; AVX1-NEXT:    retq
   9453 ;
   9454 ; AVX2-LABEL: test169:
   9455 ; AVX2:       # BB#0: # %entry
   9456 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   9457 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9458 ; AVX2-NEXT:    retq
   9459 ;
   9460 ; AVX512BW-LABEL: test169:
   9461 ; AVX512BW:       # BB#0: # %entry
   9462 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   9463 ; AVX512BW-NEXT:    retq
   9464 entry:
   9465   %cmp = icmp slt <4 x i64> %a, %b
   9466   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9467   ret <4 x i64> %sel
   9468 }
   9469 
   9470 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
   9471 ; SSE2-LABEL: test170:
   9472 ; SSE2:       # BB#0: # %entry
   9473 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
   9474 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9475 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9476 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   9477 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9478 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9479 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9480 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9481 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9482 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9483 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9484 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9485 ; SSE2-NEXT:    por %xmm4, %xmm8
   9486 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9487 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9488 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9489 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9490 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9491 ; SSE2-NEXT:    pxor %xmm0, %xmm7
   9492 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9493 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9494 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9495 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9496 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9497 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9498 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9499 ; SSE2-NEXT:    por %xmm6, %xmm5
   9500 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9501 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9502 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   9503 ; SSE2-NEXT:    por %xmm5, %xmm4
   9504 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   9505 ; SSE2-NEXT:    pandn %xmm1, %xmm9
   9506 ; SSE2-NEXT:    por %xmm8, %xmm9
   9507 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9508 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9509 ; SSE2-NEXT:    retq
   9510 ;
   9511 ; SSE4-LABEL: test170:
   9512 ; SSE4:       # BB#0: # %entry
   9513 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9514 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9515 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
   9516 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   9517 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   9518 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   9519 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9520 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9521 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9522 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9523 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9524 ; SSE4-NEXT:    retq
   9525 ;
   9526 ; AVX1-LABEL: test170:
   9527 ; AVX1:       # BB#0: # %entry
   9528 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9529 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   9530 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   9531 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   9532 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   9533 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm4
   9534 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
   9535 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9536 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9537 ; AVX1-NEXT:    retq
   9538 ;
   9539 ; AVX2-LABEL: test170:
   9540 ; AVX2:       # BB#0: # %entry
   9541 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   9542 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9543 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9544 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9545 ; AVX2-NEXT:    retq
   9546 ;
   9547 ; AVX512BW-LABEL: test170:
   9548 ; AVX512BW:       # BB#0: # %entry
   9549 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   9550 ; AVX512BW-NEXT:    retq
   9551 entry:
   9552   %cmp = icmp sle <4 x i64> %a, %b
   9553   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9554   ret <4 x i64> %sel
   9555 }
   9556 
   9557 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
   9558 ; SSE2-LABEL: test171:
   9559 ; SSE2:       # BB#0: # %entry
   9560 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0]
   9561 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9562 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9563 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   9564 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9565 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9566 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   9567 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9568 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
   9569 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   9570 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9571 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
   9572 ; SSE2-NEXT:    por %xmm6, %xmm4
   9573 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9574 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9575 ; SSE2-NEXT:    pxor %xmm0, %xmm5
   9576 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
   9577 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
   9578 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9579 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
   9580 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
   9581 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9582 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9583 ; SSE2-NEXT:    por %xmm6, %xmm5
   9584 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9585 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9586 ; SSE2-NEXT:    por %xmm2, %xmm5
   9587 ; SSE2-NEXT:    pand %xmm4, %xmm3
   9588 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   9589 ; SSE2-NEXT:    por %xmm3, %xmm4
   9590 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   9591 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   9592 ; SSE2-NEXT:    retq
   9593 ;
   9594 ; SSE4-LABEL: test171:
   9595 ; SSE4:       # BB#0: # %entry
   9596 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9597 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9598 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
   9599 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   9600 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9601 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9602 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9603 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9604 ; SSE4-NEXT:    retq
   9605 ;
   9606 ; AVX1-LABEL: test171:
   9607 ; AVX1:       # BB#0: # %entry
   9608 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9609 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   9610 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   9611 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
   9612 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9613 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9614 ; AVX1-NEXT:    retq
   9615 ;
   9616 ; AVX2-LABEL: test171:
   9617 ; AVX2:       # BB#0: # %entry
   9618 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   9619 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9620 ; AVX2-NEXT:    retq
   9621 ;
   9622 ; AVX512BW-LABEL: test171:
   9623 ; AVX512BW:       # BB#0: # %entry
   9624 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   9625 ; AVX512BW-NEXT:    retq
   9626 entry:
   9627   %cmp = icmp sgt <4 x i64> %a, %b
   9628   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9629   ret <4 x i64> %sel
   9630 }
   9631 
   9632 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
   9633 ; SSE2-LABEL: test172:
   9634 ; SSE2:       # BB#0: # %entry
   9635 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
   9636 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   9637 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9638 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   9639 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9640 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9641 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9642 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9643 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9644 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9645 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9646 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9647 ; SSE2-NEXT:    por %xmm4, %xmm8
   9648 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9649 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9650 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9651 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   9652 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9653 ; SSE2-NEXT:    pxor %xmm2, %xmm7
   9654 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9655 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9656 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9657 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9658 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9659 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9660 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9661 ; SSE2-NEXT:    por %xmm6, %xmm5
   9662 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9663 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9664 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   9665 ; SSE2-NEXT:    por %xmm5, %xmm4
   9666 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   9667 ; SSE2-NEXT:    pandn %xmm1, %xmm9
   9668 ; SSE2-NEXT:    por %xmm8, %xmm9
   9669 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9670 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9671 ; SSE2-NEXT:    retq
   9672 ;
   9673 ; SSE4-LABEL: test172:
   9674 ; SSE4:       # BB#0: # %entry
   9675 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9676 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9677 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
   9678 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   9679 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9680 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   9681 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm6
   9682 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9683 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9684 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9685 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9686 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9687 ; SSE4-NEXT:    retq
   9688 ;
   9689 ; AVX1-LABEL: test172:
   9690 ; AVX1:       # BB#0: # %entry
   9691 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9692 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   9693 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   9694 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   9695 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   9696 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm4
   9697 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
   9698 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9699 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9700 ; AVX1-NEXT:    retq
   9701 ;
   9702 ; AVX2-LABEL: test172:
   9703 ; AVX2:       # BB#0: # %entry
   9704 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   9705 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9706 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9707 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9708 ; AVX2-NEXT:    retq
   9709 ;
   9710 ; AVX512BW-LABEL: test172:
   9711 ; AVX512BW:       # BB#0: # %entry
   9712 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   9713 ; AVX512BW-NEXT:    retq
   9714 entry:
   9715   %cmp = icmp sge <4 x i64> %a, %b
   9716   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9717   ret <4 x i64> %sel
   9718 }
   9719 
   9720 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
   9721 ; SSE2-LABEL: test173:
   9722 ; SSE2:       # BB#0: # %entry
   9723 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   9724 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   9725 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9726 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   9727 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9728 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9729 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   9730 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9731 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
   9732 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   9733 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9734 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
   9735 ; SSE2-NEXT:    por %xmm6, %xmm4
   9736 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   9737 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9738 ; SSE2-NEXT:    pxor %xmm2, %xmm5
   9739 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
   9740 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
   9741 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9742 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
   9743 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
   9744 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9745 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9746 ; SSE2-NEXT:    por %xmm6, %xmm5
   9747 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9748 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9749 ; SSE2-NEXT:    por %xmm2, %xmm5
   9750 ; SSE2-NEXT:    pand %xmm4, %xmm3
   9751 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   9752 ; SSE2-NEXT:    por %xmm3, %xmm4
   9753 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   9754 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   9755 ; SSE2-NEXT:    retq
   9756 ;
   9757 ; SSE4-LABEL: test173:
   9758 ; SSE4:       # BB#0: # %entry
   9759 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9760 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9761 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
   9762 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9763 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9764 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9765 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9766 ; SSE4-NEXT:    movdqa %xmm4, %xmm6
   9767 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9768 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9769 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   9770 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9771 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9772 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9773 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9774 ; SSE4-NEXT:    retq
   9775 ;
   9776 ; AVX1-LABEL: test173:
   9777 ; AVX1:       # BB#0: # %entry
   9778 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9779 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9780 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9781 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   9782 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9783 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9784 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm4
   9785 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
   9786 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   9787 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9788 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9789 ; AVX1-NEXT:    retq
   9790 ;
   9791 ; AVX2-LABEL: test173:
   9792 ; AVX2:       # BB#0: # %entry
   9793 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9794 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   9795 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   9796 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9797 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9798 ; AVX2-NEXT:    retq
   9799 ;
   9800 ; AVX512BW-LABEL: test173:
   9801 ; AVX512BW:       # BB#0: # %entry
   9802 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   9803 ; AVX512BW-NEXT:    retq
   9804 entry:
   9805   %cmp = icmp ult <4 x i64> %a, %b
   9806   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9807   ret <4 x i64> %sel
   9808 }
   9809 
   9810 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
   9811 ; SSE2-LABEL: test174:
   9812 ; SSE2:       # BB#0: # %entry
   9813 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
   9814 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9815 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9816 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   9817 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9818 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9819 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9820 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9821 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9822 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9823 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9824 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9825 ; SSE2-NEXT:    por %xmm4, %xmm8
   9826 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9827 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9828 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9829 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9830 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9831 ; SSE2-NEXT:    pxor %xmm0, %xmm7
   9832 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9833 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9834 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9835 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9836 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9837 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9838 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9839 ; SSE2-NEXT:    por %xmm6, %xmm5
   9840 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9841 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9842 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   9843 ; SSE2-NEXT:    por %xmm5, %xmm4
   9844 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   9845 ; SSE2-NEXT:    pandn %xmm1, %xmm9
   9846 ; SSE2-NEXT:    por %xmm8, %xmm9
   9847 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9848 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9849 ; SSE2-NEXT:    retq
   9850 ;
   9851 ; SSE4-LABEL: test174:
   9852 ; SSE4:       # BB#0: # %entry
   9853 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9854 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9855 ; SSE4-NEXT:    movdqa %xmm3, %xmm6
   9856 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9857 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9858 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9859 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9860 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   9861 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   9862 ; SSE4-NEXT:    movdqa %xmm2, %xmm7
   9863 ; SSE4-NEXT:    pxor %xmm0, %xmm7
   9864 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   9865 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   9866 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9867 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9868 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9869 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9870 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9871 ; SSE4-NEXT:    retq
   9872 ;
   9873 ; AVX1-LABEL: test174:
   9874 ; AVX1:       # BB#0: # %entry
   9875 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9876 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9877 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9878 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   9879 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9880 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9881 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
   9882 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
   9883 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm5
   9884 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
   9885 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
   9886 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
   9887 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9888 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9889 ; AVX1-NEXT:    retq
   9890 ;
   9891 ; AVX2-LABEL: test174:
   9892 ; AVX2:       # BB#0: # %entry
   9893 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9894 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   9895 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   9896 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9897 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9898 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9899 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9900 ; AVX2-NEXT:    retq
   9901 ;
   9902 ; AVX512BW-LABEL: test174:
   9903 ; AVX512BW:       # BB#0: # %entry
   9904 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   9905 ; AVX512BW-NEXT:    retq
   9906 entry:
   9907   %cmp = icmp ule <4 x i64> %a, %b
   9908   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9909   ret <4 x i64> %sel
   9910 }
   9911 
   9912 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
   9913 ; SSE2-LABEL: test175:
   9914 ; SSE2:       # BB#0: # %entry
   9915 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   9916 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9917 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9918 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   9919 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9920 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9921 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   9922 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9923 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
   9924 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   9925 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9926 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
   9927 ; SSE2-NEXT:    por %xmm6, %xmm4
   9928 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9929 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9930 ; SSE2-NEXT:    pxor %xmm0, %xmm5
   9931 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
   9932 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
   9933 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9934 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
   9935 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
   9936 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9937 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9938 ; SSE2-NEXT:    por %xmm6, %xmm5
   9939 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9940 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9941 ; SSE2-NEXT:    por %xmm2, %xmm5
   9942 ; SSE2-NEXT:    pand %xmm4, %xmm3
   9943 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   9944 ; SSE2-NEXT:    por %xmm3, %xmm4
   9945 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   9946 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   9947 ; SSE2-NEXT:    retq
   9948 ;
   9949 ; SSE4-LABEL: test175:
   9950 ; SSE4:       # BB#0: # %entry
   9951 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9952 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9953 ; SSE4-NEXT:    movdqa %xmm3, %xmm6
   9954 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9955 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9956 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9957 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9958 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   9959 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9960 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   9961 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   9962 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9963 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9964 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9965 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9966 ; SSE4-NEXT:    retq
   9967 ;
   9968 ; AVX1-LABEL: test175:
   9969 ; AVX1:       # BB#0: # %entry
   9970 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9971 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9972 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9973 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   9974 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9975 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9976 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm4
   9977 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
   9978 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   9979 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9980 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9981 ; AVX1-NEXT:    retq
   9982 ;
   9983 ; AVX2-LABEL: test175:
   9984 ; AVX2:       # BB#0: # %entry
   9985 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9986 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   9987 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   9988 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9989 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9990 ; AVX2-NEXT:    retq
   9991 ;
   9992 ; AVX512BW-LABEL: test175:
   9993 ; AVX512BW:       # BB#0: # %entry
   9994 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   9995 ; AVX512BW-NEXT:    retq
   9996 entry:
   9997   %cmp = icmp ugt <4 x i64> %a, %b
   9998   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9999   ret <4 x i64> %sel
   10000 }
   10001 
   10002 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
   10003 ; SSE2-LABEL: test176:
   10004 ; SSE2:       # BB#0: # %entry
   10005 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
   10006 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   10007 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   10008 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   10009 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   10010 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   10011 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   10012 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   10013 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   10014 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   10015 ; SSE2-NEXT:    pand %xmm8, %xmm4
   10016 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   10017 ; SSE2-NEXT:    por %xmm4, %xmm8
   10018 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   10019 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   10020 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   10021 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   10022 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   10023 ; SSE2-NEXT:    pxor %xmm2, %xmm7
   10024 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   10025 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   10026 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   10027 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   10028 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   10029 ; SSE2-NEXT:    pand %xmm10, %xmm6
   10030 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   10031 ; SSE2-NEXT:    por %xmm6, %xmm5
   10032 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   10033 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   10034 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   10035 ; SSE2-NEXT:    por %xmm5, %xmm4
   10036 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   10037 ; SSE2-NEXT:    pandn %xmm1, %xmm9
   10038 ; SSE2-NEXT:    por %xmm8, %xmm9
   10039 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   10040 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   10041 ; SSE2-NEXT:    retq
   10042 ;
   10043 ; SSE4-LABEL: test176:
   10044 ; SSE4:       # BB#0: # %entry
   10045 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   10046 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10047 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
   10048 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   10049 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   10050 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   10051 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   10052 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   10053 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   10054 ; SSE4-NEXT:    movdqa %xmm4, %xmm7
   10055 ; SSE4-NEXT:    pxor %xmm0, %xmm7
   10056 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   10057 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   10058 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   10059 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   10060 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   10061 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   10062 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   10063 ; SSE4-NEXT:    retq
   10064 ;
   10065 ; AVX1-LABEL: test176:
   10066 ; AVX1:       # BB#0: # %entry
   10067 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   10068 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   10069 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   10070 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   10071 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   10072 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   10073 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
   10074 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
   10075 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm5
   10076 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
   10077 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
   10078 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
   10079 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   10080 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   10081 ; AVX1-NEXT:    retq
   10082 ;
   10083 ; AVX2-LABEL: test176:
   10084 ; AVX2:       # BB#0: # %entry
   10085 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   10086 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   10087 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   10088 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   10089 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   10090 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   10091 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   10092 ; AVX2-NEXT:    retq
   10093 ;
   10094 ; AVX512BW-LABEL: test176:
   10095 ; AVX512BW:       # BB#0: # %entry
   10096 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   10097 ; AVX512BW-NEXT:    retq
   10098 entry:
   10099   %cmp = icmp uge <4 x i64> %a, %b
   10100   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   10101   ret <4 x i64> %sel
   10102 }
   10103 
   10104 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
   10105 ; SSE2-LABEL: test177:
   10106 ; SSE2:       # BB#0: # %entry
   10107 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10108 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10109 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10110 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10111 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10112 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10113 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10114 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10115 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10116 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10117 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10118 ; SSE2-NEXT:    por %xmm2, %xmm3
   10119 ; SSE2-NEXT:    pand %xmm3, %xmm0
   10120 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10121 ; SSE2-NEXT:    por %xmm3, %xmm0
   10122 ; SSE2-NEXT:    retq
   10123 ;
   10124 ; SSE4-LABEL: test177:
   10125 ; SSE4:       # BB#0: # %entry
   10126 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10127 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   10128 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   10129 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10130 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10131 ; SSE4-NEXT:    retq
   10132 ;
   10133 ; AVX1-LABEL: test177:
   10134 ; AVX1:       # BB#0: # %entry
   10135 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10136 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10137 ; AVX1-NEXT:    retq
   10138 ;
   10139 ; AVX2-LABEL: test177:
   10140 ; AVX2:       # BB#0: # %entry
   10141 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10142 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10143 ; AVX2-NEXT:    retq
   10144 ;
   10145 ; AVX512BW-LABEL: test177:
   10146 ; AVX512BW:       # BB#0: # %entry
   10147 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   10148 ; AVX512BW-NEXT:    retq
   10149 entry:
   10150   %cmp = icmp slt <2 x i64> %a, %b
   10151   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10152   ret <2 x i64> %sel
   10153 }
   10154 
   10155 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
   10156 ; SSE2-LABEL: test178:
   10157 ; SSE2:       # BB#0: # %entry
   10158 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10159 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10160 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10161 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10162 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10163 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10164 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10165 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10166 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10167 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10168 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10169 ; SSE2-NEXT:    por %xmm2, %xmm3
   10170 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10171 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10172 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   10173 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   10174 ; SSE2-NEXT:    por %xmm3, %xmm2
   10175 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10176 ; SSE2-NEXT:    retq
   10177 ;
   10178 ; SSE4-LABEL: test178:
   10179 ; SSE4:       # BB#0: # %entry
   10180 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10181 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   10182 ; SSE4-NEXT:    pcmpeqd %xmm3, %xmm3
   10183 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10184 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10185 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10186 ; SSE4-NEXT:    retq
   10187 ;
   10188 ; AVX1-LABEL: test178:
   10189 ; AVX1:       # BB#0: # %entry
   10190 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10191 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10192 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10193 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10194 ; AVX1-NEXT:    retq
   10195 ;
   10196 ; AVX2-LABEL: test178:
   10197 ; AVX2:       # BB#0: # %entry
   10198 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10199 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10200 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10201 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10202 ; AVX2-NEXT:    retq
   10203 ;
   10204 ; AVX512BW-LABEL: test178:
   10205 ; AVX512BW:       # BB#0: # %entry
   10206 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   10207 ; AVX512BW-NEXT:    retq
   10208 entry:
   10209   %cmp = icmp sle <2 x i64> %a, %b
   10210   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10211   ret <2 x i64> %sel
   10212 }
   10213 
   10214 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
   10215 ; SSE2-LABEL: test179:
   10216 ; SSE2:       # BB#0: # %entry
   10217 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10218 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10219 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10220 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10221 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10222 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10223 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10224 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10225 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10226 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10227 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10228 ; SSE2-NEXT:    por %xmm2, %xmm3
   10229 ; SSE2-NEXT:    pand %xmm3, %xmm0
   10230 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10231 ; SSE2-NEXT:    por %xmm3, %xmm0
   10232 ; SSE2-NEXT:    retq
   10233 ;
   10234 ; SSE4-LABEL: test179:
   10235 ; SSE4:       # BB#0: # %entry
   10236 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10237 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   10238 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10239 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10240 ; SSE4-NEXT:    retq
   10241 ;
   10242 ; AVX1-LABEL: test179:
   10243 ; AVX1:       # BB#0: # %entry
   10244 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10245 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10246 ; AVX1-NEXT:    retq
   10247 ;
   10248 ; AVX2-LABEL: test179:
   10249 ; AVX2:       # BB#0: # %entry
   10250 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10251 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10252 ; AVX2-NEXT:    retq
   10253 ;
   10254 ; AVX512BW-LABEL: test179:
   10255 ; AVX512BW:       # BB#0: # %entry
   10256 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   10257 ; AVX512BW-NEXT:    retq
   10258 entry:
   10259   %cmp = icmp sgt <2 x i64> %a, %b
   10260   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10261   ret <2 x i64> %sel
   10262 }
   10263 
   10264 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
   10265 ; SSE2-LABEL: test180:
   10266 ; SSE2:       # BB#0: # %entry
   10267 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10268 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10269 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10270 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10271 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10272 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10273 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10274 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10275 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10276 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10277 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10278 ; SSE2-NEXT:    por %xmm2, %xmm3
   10279 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10280 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10281 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   10282 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   10283 ; SSE2-NEXT:    por %xmm3, %xmm2
   10284 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10285 ; SSE2-NEXT:    retq
   10286 ;
   10287 ; SSE4-LABEL: test180:
   10288 ; SSE4:       # BB#0: # %entry
   10289 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10290 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   10291 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm3
   10292 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10293 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10294 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10295 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10296 ; SSE4-NEXT:    retq
   10297 ;
   10298 ; AVX1-LABEL: test180:
   10299 ; AVX1:       # BB#0: # %entry
   10300 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10301 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10302 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10303 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10304 ; AVX1-NEXT:    retq
   10305 ;
   10306 ; AVX2-LABEL: test180:
   10307 ; AVX2:       # BB#0: # %entry
   10308 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10309 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10310 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10311 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10312 ; AVX2-NEXT:    retq
   10313 ;
   10314 ; AVX512BW-LABEL: test180:
   10315 ; AVX512BW:       # BB#0: # %entry
   10316 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   10317 ; AVX512BW-NEXT:    retq
   10318 entry:
   10319   %cmp = icmp sge <2 x i64> %a, %b
   10320   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10321   ret <2 x i64> %sel
   10322 }
   10323 
   10324 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
   10325 ; SSE2-LABEL: test181:
   10326 ; SSE2:       # BB#0: # %entry
   10327 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10328 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10329 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10330 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10331 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10332 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10333 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10334 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10335 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10336 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10337 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10338 ; SSE2-NEXT:    por %xmm2, %xmm3
   10339 ; SSE2-NEXT:    pand %xmm3, %xmm0
   10340 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10341 ; SSE2-NEXT:    por %xmm3, %xmm0
   10342 ; SSE2-NEXT:    retq
   10343 ;
   10344 ; SSE4-LABEL: test181:
   10345 ; SSE4:       # BB#0: # %entry
   10346 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10347 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10348 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
   10349 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   10350 ; SSE4-NEXT:    pxor %xmm1, %xmm0
   10351 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   10352 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10353 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10354 ; SSE4-NEXT:    retq
   10355 ;
   10356 ; AVX1-LABEL: test181:
   10357 ; AVX1:       # BB#0: # %entry
   10358 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10359 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10360 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10361 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10362 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10363 ; AVX1-NEXT:    retq
   10364 ;
   10365 ; AVX2-LABEL: test181:
   10366 ; AVX2:       # BB#0: # %entry
   10367 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10368 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10369 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10370 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10371 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10372 ; AVX2-NEXT:    retq
   10373 ;
   10374 ; AVX512BW-LABEL: test181:
   10375 ; AVX512BW:       # BB#0: # %entry
   10376 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   10377 ; AVX512BW-NEXT:    retq
   10378 entry:
   10379   %cmp = icmp ult <2 x i64> %a, %b
   10380   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10381   ret <2 x i64> %sel
   10382 }
   10383 
   10384 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
   10385 ; SSE2-LABEL: test182:
   10386 ; SSE2:       # BB#0: # %entry
   10387 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10388 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10389 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10390 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10391 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10392 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10393 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10394 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10395 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10396 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10397 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10398 ; SSE2-NEXT:    por %xmm2, %xmm3
   10399 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10400 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10401 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   10402 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   10403 ; SSE2-NEXT:    por %xmm3, %xmm2
   10404 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10405 ; SSE2-NEXT:    retq
   10406 ;
   10407 ; SSE4-LABEL: test182:
   10408 ; SSE4:       # BB#0: # %entry
   10409 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10410 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   10411 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   10412 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10413 ; SSE4-NEXT:    pxor %xmm2, %xmm3
   10414 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
   10415 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10416 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10417 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10418 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10419 ; SSE4-NEXT:    retq
   10420 ;
   10421 ; AVX1-LABEL: test182:
   10422 ; AVX1:       # BB#0: # %entry
   10423 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10424 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10425 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10426 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10427 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10428 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10429 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10430 ; AVX1-NEXT:    retq
   10431 ;
   10432 ; AVX2-LABEL: test182:
   10433 ; AVX2:       # BB#0: # %entry
   10434 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10435 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10436 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10437 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10438 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10439 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10440 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10441 ; AVX2-NEXT:    retq
   10442 ;
   10443 ; AVX512BW-LABEL: test182:
   10444 ; AVX512BW:       # BB#0: # %entry
   10445 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   10446 ; AVX512BW-NEXT:    retq
   10447 entry:
   10448   %cmp = icmp ule <2 x i64> %a, %b
   10449   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10450   ret <2 x i64> %sel
   10451 }
   10452 
   10453 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
   10454 ; SSE2-LABEL: test183:
   10455 ; SSE2:       # BB#0: # %entry
   10456 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10457 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10458 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10459 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10460 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10461 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10462 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10463 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10464 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10465 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10466 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10467 ; SSE2-NEXT:    por %xmm2, %xmm3
   10468 ; SSE2-NEXT:    pand %xmm3, %xmm0
   10469 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10470 ; SSE2-NEXT:    por %xmm3, %xmm0
   10471 ; SSE2-NEXT:    retq
   10472 ;
   10473 ; SSE4-LABEL: test183:
   10474 ; SSE4:       # BB#0: # %entry
   10475 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10476 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10477 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   10478 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   10479 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   10480 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   10481 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10482 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10483 ; SSE4-NEXT:    retq
   10484 ;
   10485 ; AVX1-LABEL: test183:
   10486 ; AVX1:       # BB#0: # %entry
   10487 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10488 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10489 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10490 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10491 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10492 ; AVX1-NEXT:    retq
   10493 ;
   10494 ; AVX2-LABEL: test183:
   10495 ; AVX2:       # BB#0: # %entry
   10496 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10497 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10498 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10499 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10500 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10501 ; AVX2-NEXT:    retq
   10502 ;
   10503 ; AVX512BW-LABEL: test183:
   10504 ; AVX512BW:       # BB#0: # %entry
   10505 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   10506 ; AVX512BW-NEXT:    retq
   10507 entry:
   10508   %cmp = icmp ugt <2 x i64> %a, %b
   10509   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10510   ret <2 x i64> %sel
   10511 }
   10512 
   10513 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
   10514 ; SSE2-LABEL: test184:
   10515 ; SSE2:       # BB#0: # %entry
   10516 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10517 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10518 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10519 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10520 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10521 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10522 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10523 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10524 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10525 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10526 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10527 ; SSE2-NEXT:    por %xmm2, %xmm3
   10528 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10529 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10530 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   10531 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   10532 ; SSE2-NEXT:    por %xmm3, %xmm2
   10533 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10534 ; SSE2-NEXT:    retq
   10535 ;
   10536 ; SSE4-LABEL: test184:
   10537 ; SSE4:       # BB#0: # %entry
   10538 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10539 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   10540 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10541 ; SSE4-NEXT:    pxor %xmm1, %xmm3
   10542 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
   10543 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10544 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10545 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10546 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10547 ; SSE4-NEXT:    retq
   10548 ;
   10549 ; AVX1-LABEL: test184:
   10550 ; AVX1:       # BB#0: # %entry
   10551 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10552 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10553 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10554 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10555 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10556 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10557 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10558 ; AVX1-NEXT:    retq
   10559 ;
   10560 ; AVX2-LABEL: test184:
   10561 ; AVX2:       # BB#0: # %entry
   10562 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10563 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10564 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10565 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10566 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10567 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10568 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10569 ; AVX2-NEXT:    retq
   10570 ;
   10571 ; AVX512BW-LABEL: test184:
   10572 ; AVX512BW:       # BB#0: # %entry
   10573 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   10574 ; AVX512BW-NEXT:    retq
   10575 entry:
   10576   %cmp = icmp uge <2 x i64> %a, %b
   10577   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10578   ret <2 x i64> %sel
   10579 }
   10580 
   10581 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
   10582 ; SSE2-LABEL: test185:
   10583 ; SSE2:       # BB#0: # %entry
   10584 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10585 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10586 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10587 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10588 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10589 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10590 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10591 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10592 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
   10593 ; SSE2-NEXT:    pand %xmm5, %xmm3
   10594 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   10595 ; SSE2-NEXT:    por %xmm3, %xmm2
   10596 ; SSE2-NEXT:    pand %xmm2, %xmm1
   10597 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10598 ; SSE2-NEXT:    por %xmm1, %xmm2
   10599 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10600 ; SSE2-NEXT:    retq
   10601 ;
   10602 ; SSE4-LABEL: test185:
   10603 ; SSE4:       # BB#0: # %entry
   10604 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10605 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   10606 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   10607 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10608 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10609 ; SSE4-NEXT:    retq
   10610 ;
   10611 ; AVX1-LABEL: test185:
   10612 ; AVX1:       # BB#0: # %entry
   10613 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10614 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10615 ; AVX1-NEXT:    retq
   10616 ;
   10617 ; AVX2-LABEL: test185:
   10618 ; AVX2:       # BB#0: # %entry
   10619 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10620 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10621 ; AVX2-NEXT:    retq
   10622 ;
   10623 ; AVX512BW-LABEL: test185:
   10624 ; AVX512BW:       # BB#0: # %entry
   10625 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   10626 ; AVX512BW-NEXT:    retq
   10627 entry:
   10628   %cmp = icmp slt <2 x i64> %a, %b
   10629   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10630   ret <2 x i64> %sel
   10631 }
   10632 
   10633 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
   10634 ; SSE2-LABEL: test186:
   10635 ; SSE2:       # BB#0: # %entry
   10636 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10637 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10638 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10639 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10640 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10641 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10642 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10643 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10644 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10645 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10646 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10647 ; SSE2-NEXT:    por %xmm2, %xmm3
   10648 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10649 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10650 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10651 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10652 ; SSE2-NEXT:    por %xmm3, %xmm2
   10653 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10654 ; SSE2-NEXT:    retq
   10655 ;
   10656 ; SSE4-LABEL: test186:
   10657 ; SSE4:       # BB#0: # %entry
   10658 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10659 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   10660 ; SSE4-NEXT:    pcmpeqd %xmm3, %xmm3
   10661 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10662 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10663 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10664 ; SSE4-NEXT:    retq
   10665 ;
   10666 ; AVX1-LABEL: test186:
   10667 ; AVX1:       # BB#0: # %entry
   10668 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10669 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10670 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10671 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10672 ; AVX1-NEXT:    retq
   10673 ;
   10674 ; AVX2-LABEL: test186:
   10675 ; AVX2:       # BB#0: # %entry
   10676 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10677 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10678 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10679 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10680 ; AVX2-NEXT:    retq
   10681 ;
   10682 ; AVX512BW-LABEL: test186:
   10683 ; AVX512BW:       # BB#0: # %entry
   10684 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   10685 ; AVX512BW-NEXT:    retq
   10686 entry:
   10687   %cmp = icmp sle <2 x i64> %a, %b
   10688   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10689   ret <2 x i64> %sel
   10690 }
   10691 
   10692 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
   10693 ; SSE2-LABEL: test187:
   10694 ; SSE2:       # BB#0: # %entry
   10695 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10696 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10697 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10698 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10699 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10700 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10701 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10702 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10703 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
   10704 ; SSE2-NEXT:    pand %xmm5, %xmm3
   10705 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   10706 ; SSE2-NEXT:    por %xmm3, %xmm2
   10707 ; SSE2-NEXT:    pand %xmm2, %xmm1
   10708 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10709 ; SSE2-NEXT:    por %xmm1, %xmm2
   10710 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10711 ; SSE2-NEXT:    retq
   10712 ;
   10713 ; SSE4-LABEL: test187:
   10714 ; SSE4:       # BB#0: # %entry
   10715 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10716 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   10717 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10718 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10719 ; SSE4-NEXT:    retq
   10720 ;
   10721 ; AVX1-LABEL: test187:
   10722 ; AVX1:       # BB#0: # %entry
   10723 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10724 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10725 ; AVX1-NEXT:    retq
   10726 ;
   10727 ; AVX2-LABEL: test187:
   10728 ; AVX2:       # BB#0: # %entry
   10729 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10730 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10731 ; AVX2-NEXT:    retq
   10732 ;
   10733 ; AVX512BW-LABEL: test187:
   10734 ; AVX512BW:       # BB#0: # %entry
   10735 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   10736 ; AVX512BW-NEXT:    retq
   10737 entry:
   10738   %cmp = icmp sgt <2 x i64> %a, %b
   10739   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10740   ret <2 x i64> %sel
   10741 }
   10742 
   10743 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
   10744 ; SSE2-LABEL: test188:
   10745 ; SSE2:       # BB#0: # %entry
   10746 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10747 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10748 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10749 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10750 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10751 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10752 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10753 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10754 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10755 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10756 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10757 ; SSE2-NEXT:    por %xmm2, %xmm3
   10758 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10759 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10760 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10761 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10762 ; SSE2-NEXT:    por %xmm3, %xmm2
   10763 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10764 ; SSE2-NEXT:    retq
   10765 ;
   10766 ; SSE4-LABEL: test188:
   10767 ; SSE4:       # BB#0: # %entry
   10768 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10769 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   10770 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm3
   10771 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10772 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10773 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10774 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10775 ; SSE4-NEXT:    retq
   10776 ;
   10777 ; AVX1-LABEL: test188:
   10778 ; AVX1:       # BB#0: # %entry
   10779 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10780 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10781 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10782 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10783 ; AVX1-NEXT:    retq
   10784 ;
   10785 ; AVX2-LABEL: test188:
   10786 ; AVX2:       # BB#0: # %entry
   10787 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10788 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10789 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10790 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10791 ; AVX2-NEXT:    retq
   10792 ;
   10793 ; AVX512BW-LABEL: test188:
   10794 ; AVX512BW:       # BB#0: # %entry
   10795 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   10796 ; AVX512BW-NEXT:    retq
   10797 entry:
   10798   %cmp = icmp sge <2 x i64> %a, %b
   10799   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10800   ret <2 x i64> %sel
   10801 }
   10802 
   10803 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
   10804 ; SSE2-LABEL: test189:
   10805 ; SSE2:       # BB#0: # %entry
   10806 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10807 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10808 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10809 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10810 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10811 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10812 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10813 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10814 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
   10815 ; SSE2-NEXT:    pand %xmm5, %xmm3
   10816 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   10817 ; SSE2-NEXT:    por %xmm3, %xmm2
   10818 ; SSE2-NEXT:    pand %xmm2, %xmm1
   10819 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10820 ; SSE2-NEXT:    por %xmm1, %xmm2
   10821 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10822 ; SSE2-NEXT:    retq
   10823 ;
   10824 ; SSE4-LABEL: test189:
   10825 ; SSE4:       # BB#0: # %entry
   10826 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10827 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10828 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
   10829 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   10830 ; SSE4-NEXT:    pxor %xmm1, %xmm0
   10831 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   10832 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10833 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10834 ; SSE4-NEXT:    retq
   10835 ;
   10836 ; AVX1-LABEL: test189:
   10837 ; AVX1:       # BB#0: # %entry
   10838 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10839 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10840 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10841 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10842 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10843 ; AVX1-NEXT:    retq
   10844 ;
   10845 ; AVX2-LABEL: test189:
   10846 ; AVX2:       # BB#0: # %entry
   10847 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10848 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10849 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10850 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10851 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10852 ; AVX2-NEXT:    retq
   10853 ;
   10854 ; AVX512BW-LABEL: test189:
   10855 ; AVX512BW:       # BB#0: # %entry
   10856 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   10857 ; AVX512BW-NEXT:    retq
   10858 entry:
   10859   %cmp = icmp ult <2 x i64> %a, %b
   10860   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10861   ret <2 x i64> %sel
   10862 }
   10863 
   10864 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
   10865 ; SSE2-LABEL: test190:
   10866 ; SSE2:       # BB#0: # %entry
   10867 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10868 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10869 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10870 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10871 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10872 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10873 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10874 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10875 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10876 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10877 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10878 ; SSE2-NEXT:    por %xmm2, %xmm3
   10879 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10880 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10881 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10882 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10883 ; SSE2-NEXT:    por %xmm3, %xmm2
   10884 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10885 ; SSE2-NEXT:    retq
   10886 ;
   10887 ; SSE4-LABEL: test190:
   10888 ; SSE4:       # BB#0: # %entry
   10889 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10890 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   10891 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   10892 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10893 ; SSE4-NEXT:    pxor %xmm2, %xmm3
   10894 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
   10895 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10896 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10897 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10898 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10899 ; SSE4-NEXT:    retq
   10900 ;
   10901 ; AVX1-LABEL: test190:
   10902 ; AVX1:       # BB#0: # %entry
   10903 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10904 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10905 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10906 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10907 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10908 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10909 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10910 ; AVX1-NEXT:    retq
   10911 ;
   10912 ; AVX2-LABEL: test190:
   10913 ; AVX2:       # BB#0: # %entry
   10914 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10915 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10916 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10917 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10918 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10919 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10920 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10921 ; AVX2-NEXT:    retq
   10922 ;
   10923 ; AVX512BW-LABEL: test190:
   10924 ; AVX512BW:       # BB#0: # %entry
   10925 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   10926 ; AVX512BW-NEXT:    retq
   10927 entry:
   10928   %cmp = icmp ule <2 x i64> %a, %b
   10929   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10930   ret <2 x i64> %sel
   10931 }
   10932 
   10933 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
   10934 ; SSE2-LABEL: test191:
   10935 ; SSE2:       # BB#0: # %entry
   10936 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10937 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10938 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10939 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10940 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10941 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10942 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10943 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10944 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
   10945 ; SSE2-NEXT:    pand %xmm5, %xmm3
   10946 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   10947 ; SSE2-NEXT:    por %xmm3, %xmm2
   10948 ; SSE2-NEXT:    pand %xmm2, %xmm1
   10949 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10950 ; SSE2-NEXT:    por %xmm1, %xmm2
   10951 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10952 ; SSE2-NEXT:    retq
   10953 ;
   10954 ; SSE4-LABEL: test191:
   10955 ; SSE4:       # BB#0: # %entry
   10956 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10957 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10958 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   10959 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   10960 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   10961 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   10962 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10963 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10964 ; SSE4-NEXT:    retq
   10965 ;
   10966 ; AVX1-LABEL: test191:
   10967 ; AVX1:       # BB#0: # %entry
   10968 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10969 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10970 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10971 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10972 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10973 ; AVX1-NEXT:    retq
   10974 ;
   10975 ; AVX2-LABEL: test191:
   10976 ; AVX2:       # BB#0: # %entry
   10977 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10978 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10979 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10980 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10981 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10982 ; AVX2-NEXT:    retq
   10983 ;
   10984 ; AVX512BW-LABEL: test191:
   10985 ; AVX512BW:       # BB#0: # %entry
   10986 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   10987 ; AVX512BW-NEXT:    retq
   10988 entry:
   10989   %cmp = icmp ugt <2 x i64> %a, %b
   10990   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10991   ret <2 x i64> %sel
   10992 }
   10993 
   10994 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
   10995 ; SSE2-LABEL: test192:
   10996 ; SSE2:       # BB#0: # %entry
   10997 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10998 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10999 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   11000 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   11001 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   11002 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   11003 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   11004 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   11005 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   11006 ; SSE2-NEXT:    pand %xmm5, %xmm2
   11007 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   11008 ; SSE2-NEXT:    por %xmm2, %xmm3
   11009 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   11010 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   11011 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   11012 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   11013 ; SSE2-NEXT:    por %xmm3, %xmm2
   11014 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   11015 ; SSE2-NEXT:    retq
   11016 ;
   11017 ; SSE4-LABEL: test192:
   11018 ; SSE4:       # BB#0: # %entry
   11019 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   11020 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   11021 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   11022 ; SSE4-NEXT:    pxor %xmm1, %xmm3
   11023 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
   11024 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   11025 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   11026 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   11027 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   11028 ; SSE4-NEXT:    retq
   11029 ;
   11030 ; AVX1-LABEL: test192:
   11031 ; AVX1:       # BB#0: # %entry
   11032 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   11033 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   11034 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   11035 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   11036 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   11037 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   11038 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   11039 ; AVX1-NEXT:    retq
   11040 ;
   11041 ; AVX2-LABEL: test192:
   11042 ; AVX2:       # BB#0: # %entry
   11043 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   11044 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   11045 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   11046 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   11047 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   11048 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   11049 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   11050 ; AVX2-NEXT:    retq
   11051 ;
   11052 ; AVX512BW-LABEL: test192:
   11053 ; AVX512BW:       # BB#0: # %entry
   11054 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   11055 ; AVX512BW-NEXT:    retq
   11056 entry:
   11057   %cmp = icmp uge <2 x i64> %a, %b
   11058   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   11059   ret <2 x i64> %sel
   11060 }
   11061