Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE4
      4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
      5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
      6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F
      7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F --check-prefix=AVX512BW --check-prefix=AVX512VL
      8 
      9 define <16 x i8> @test1(<16 x i8> %a, <16 x i8> %b) {
     10 ; SSE2-LABEL: test1:
     11 ; SSE2:       # BB#0: # %entry
     12 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
     13 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
     14 ; SSE2-NEXT:    pand %xmm2, %xmm0
     15 ; SSE2-NEXT:    pandn %xmm1, %xmm2
     16 ; SSE2-NEXT:    por %xmm2, %xmm0
     17 ; SSE2-NEXT:    retq
     18 ;
     19 ; SSE4-LABEL: test1:
     20 ; SSE4:       # BB#0: # %entry
     21 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
     22 ; SSE4-NEXT:    retq
     23 ;
     24 ; AVX-LABEL: test1:
     25 ; AVX:       # BB#0: # %entry
     26 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
     27 ; AVX-NEXT:    retq
     28 entry:
     29   %cmp = icmp slt <16 x i8> %a, %b
     30   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
     31   ret <16 x i8> %sel
     32 }
     33 
     34 define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) {
     35 ; SSE2-LABEL: test2:
     36 ; SSE2:       # BB#0: # %entry
     37 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
     38 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
     39 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
     40 ; SSE2-NEXT:    pxor %xmm2, %xmm3
     41 ; SSE2-NEXT:    pandn %xmm0, %xmm2
     42 ; SSE2-NEXT:    pandn %xmm1, %xmm3
     43 ; SSE2-NEXT:    por %xmm3, %xmm2
     44 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
     45 ; SSE2-NEXT:    retq
     46 ;
     47 ; SSE4-LABEL: test2:
     48 ; SSE4:       # BB#0: # %entry
     49 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
     50 ; SSE4-NEXT:    retq
     51 ;
     52 ; AVX-LABEL: test2:
     53 ; AVX:       # BB#0: # %entry
     54 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
     55 ; AVX-NEXT:    retq
     56 entry:
     57   %cmp = icmp sle <16 x i8> %a, %b
     58   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
     59   ret <16 x i8> %sel
     60 }
     61 
     62 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
     63 ; SSE2-LABEL: test3:
     64 ; SSE2:       # BB#0: # %entry
     65 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
     66 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
     67 ; SSE2-NEXT:    pand %xmm2, %xmm0
     68 ; SSE2-NEXT:    pandn %xmm1, %xmm2
     69 ; SSE2-NEXT:    por %xmm0, %xmm2
     70 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
     71 ; SSE2-NEXT:    retq
     72 ;
     73 ; SSE4-LABEL: test3:
     74 ; SSE4:       # BB#0: # %entry
     75 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
     76 ; SSE4-NEXT:    retq
     77 ;
     78 ; AVX-LABEL: test3:
     79 ; AVX:       # BB#0: # %entry
     80 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
     81 ; AVX-NEXT:    retq
     82 entry:
     83   %cmp = icmp sgt <16 x i8> %a, %b
     84   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
     85   ret <16 x i8> %sel
     86 }
     87 
     88 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
     89 ; SSE2-LABEL: test4:
     90 ; SSE2:       # BB#0: # %entry
     91 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
     92 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm3
     93 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
     94 ; SSE2-NEXT:    pxor %xmm3, %xmm2
     95 ; SSE2-NEXT:    pandn %xmm0, %xmm3
     96 ; SSE2-NEXT:    pandn %xmm1, %xmm2
     97 ; SSE2-NEXT:    por %xmm3, %xmm2
     98 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
     99 ; SSE2-NEXT:    retq
    100 ;
    101 ; SSE4-LABEL: test4:
    102 ; SSE4:       # BB#0: # %entry
    103 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
    104 ; SSE4-NEXT:    retq
    105 ;
    106 ; AVX-LABEL: test4:
    107 ; AVX:       # BB#0: # %entry
    108 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    109 ; AVX-NEXT:    retq
    110 entry:
    111   %cmp = icmp sge <16 x i8> %a, %b
    112   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    113   ret <16 x i8> %sel
    114 }
    115 
    116 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
    117 ; SSE-LABEL: test5:
    118 ; SSE:       # BB#0: # %entry
    119 ; SSE-NEXT:    pminub %xmm1, %xmm0
    120 ; SSE-NEXT:    retq
    121 ;
    122 ; AVX-LABEL: test5:
    123 ; AVX:       # BB#0: # %entry
    124 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    125 ; AVX-NEXT:    retq
    126 entry:
    127   %cmp = icmp ult <16 x i8> %a, %b
    128   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    129   ret <16 x i8> %sel
    130 }
    131 
    132 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
    133 ; SSE-LABEL: test6:
    134 ; SSE:       # BB#0: # %entry
    135 ; SSE-NEXT:    pminub %xmm1, %xmm0
    136 ; SSE-NEXT:    retq
    137 ;
    138 ; AVX-LABEL: test6:
    139 ; AVX:       # BB#0: # %entry
    140 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    141 ; AVX-NEXT:    retq
    142 entry:
    143   %cmp = icmp ule <16 x i8> %a, %b
    144   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    145   ret <16 x i8> %sel
    146 }
    147 
    148 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
    149 ; SSE-LABEL: test7:
    150 ; SSE:       # BB#0: # %entry
    151 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
    152 ; SSE-NEXT:    retq
    153 ;
    154 ; AVX-LABEL: test7:
    155 ; AVX:       # BB#0: # %entry
    156 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    157 ; AVX-NEXT:    retq
    158 entry:
    159   %cmp = icmp ugt <16 x i8> %a, %b
    160   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    161   ret <16 x i8> %sel
    162 }
    163 
    164 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
    165 ; SSE-LABEL: test8:
    166 ; SSE:       # BB#0: # %entry
    167 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
    168 ; SSE-NEXT:    retq
    169 ;
    170 ; AVX-LABEL: test8:
    171 ; AVX:       # BB#0: # %entry
    172 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    173 ; AVX-NEXT:    retq
    174 entry:
    175   %cmp = icmp uge <16 x i8> %a, %b
    176   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    177   ret <16 x i8> %sel
    178 }
    179 
    180 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
    181 ; SSE-LABEL: test9:
    182 ; SSE:       # BB#0: # %entry
    183 ; SSE-NEXT:    pminsw %xmm1, %xmm0
    184 ; SSE-NEXT:    retq
    185 ;
    186 ; AVX-LABEL: test9:
    187 ; AVX:       # BB#0: # %entry
    188 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    189 ; AVX-NEXT:    retq
    190 entry:
    191   %cmp = icmp slt <8 x i16> %a, %b
    192   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    193   ret <8 x i16> %sel
    194 }
    195 
    196 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
    197 ; SSE-LABEL: test10:
    198 ; SSE:       # BB#0: # %entry
    199 ; SSE-NEXT:    pminsw %xmm1, %xmm0
    200 ; SSE-NEXT:    retq
    201 ;
    202 ; AVX-LABEL: test10:
    203 ; AVX:       # BB#0: # %entry
    204 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    205 ; AVX-NEXT:    retq
    206 entry:
    207   %cmp = icmp sle <8 x i16> %a, %b
    208   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    209   ret <8 x i16> %sel
    210 }
    211 
    212 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
    213 ; SSE-LABEL: test11:
    214 ; SSE:       # BB#0: # %entry
    215 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
    216 ; SSE-NEXT:    retq
    217 ;
    218 ; AVX-LABEL: test11:
    219 ; AVX:       # BB#0: # %entry
    220 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    221 ; AVX-NEXT:    retq
    222 entry:
    223   %cmp = icmp sgt <8 x i16> %a, %b
    224   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    225   ret <8 x i16> %sel
    226 }
    227 
    228 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
    229 ; SSE-LABEL: test12:
    230 ; SSE:       # BB#0: # %entry
    231 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
    232 ; SSE-NEXT:    retq
    233 ;
    234 ; AVX-LABEL: test12:
    235 ; AVX:       # BB#0: # %entry
    236 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    237 ; AVX-NEXT:    retq
    238 entry:
    239   %cmp = icmp sge <8 x i16> %a, %b
    240   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    241   ret <8 x i16> %sel
    242 }
    243 
    244 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
    245 ; SSE2-LABEL: test13:
    246 ; SSE2:       # BB#0: # %entry
    247 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
    248 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
    249 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    250 ; SSE2-NEXT:    pxor %xmm1, %xmm2
    251 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
    252 ; SSE2-NEXT:    pand %xmm2, %xmm0
    253 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    254 ; SSE2-NEXT:    por %xmm2, %xmm0
    255 ; SSE2-NEXT:    retq
    256 ;
    257 ; SSE4-LABEL: test13:
    258 ; SSE4:       # BB#0: # %entry
    259 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
    260 ; SSE4-NEXT:    retq
    261 ;
    262 ; AVX-LABEL: test13:
    263 ; AVX:       # BB#0: # %entry
    264 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
    265 ; AVX-NEXT:    retq
    266 entry:
    267   %cmp = icmp ult <8 x i16> %a, %b
    268   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    269   ret <8 x i16> %sel
    270 }
    271 
    272 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
    273 ; SSE2-LABEL: test14:
    274 ; SSE2:       # BB#0: # %entry
    275 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    276 ; SSE2-NEXT:    psubusw %xmm1, %xmm2
    277 ; SSE2-NEXT:    pxor %xmm3, %xmm3
    278 ; SSE2-NEXT:    pcmpeqw %xmm2, %xmm3
    279 ; SSE2-NEXT:    pand %xmm3, %xmm0
    280 ; SSE2-NEXT:    pandn %xmm1, %xmm3
    281 ; SSE2-NEXT:    por %xmm3, %xmm0
    282 ; SSE2-NEXT:    retq
    283 ;
    284 ; SSE4-LABEL: test14:
    285 ; SSE4:       # BB#0: # %entry
    286 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
    287 ; SSE4-NEXT:    retq
    288 ;
    289 ; AVX-LABEL: test14:
    290 ; AVX:       # BB#0: # %entry
    291 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
    292 ; AVX-NEXT:    retq
    293 entry:
    294   %cmp = icmp ule <8 x i16> %a, %b
    295   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    296   ret <8 x i16> %sel
    297 }
    298 
    299 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
    300 ; SSE2-LABEL: test15:
    301 ; SSE2:       # BB#0: # %entry
    302 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
    303 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    304 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    305 ; SSE2-NEXT:    pxor %xmm0, %xmm2
    306 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
    307 ; SSE2-NEXT:    pand %xmm2, %xmm0
    308 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    309 ; SSE2-NEXT:    por %xmm2, %xmm0
    310 ; SSE2-NEXT:    retq
    311 ;
    312 ; SSE4-LABEL: test15:
    313 ; SSE4:       # BB#0: # %entry
    314 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
    315 ; SSE4-NEXT:    retq
    316 ;
    317 ; AVX-LABEL: test15:
    318 ; AVX:       # BB#0: # %entry
    319 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
    320 ; AVX-NEXT:    retq
    321 entry:
    322   %cmp = icmp ugt <8 x i16> %a, %b
    323   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    324   ret <8 x i16> %sel
    325 }
    326 
    327 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
    328 ; SSE2-LABEL: test16:
    329 ; SSE2:       # BB#0: # %entry
    330 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    331 ; SSE2-NEXT:    psubusw %xmm0, %xmm2
    332 ; SSE2-NEXT:    pxor %xmm3, %xmm3
    333 ; SSE2-NEXT:    pcmpeqw %xmm2, %xmm3
    334 ; SSE2-NEXT:    pand %xmm3, %xmm0
    335 ; SSE2-NEXT:    pandn %xmm1, %xmm3
    336 ; SSE2-NEXT:    por %xmm3, %xmm0
    337 ; SSE2-NEXT:    retq
    338 ;
    339 ; SSE4-LABEL: test16:
    340 ; SSE4:       # BB#0: # %entry
    341 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
    342 ; SSE4-NEXT:    retq
    343 ;
    344 ; AVX-LABEL: test16:
    345 ; AVX:       # BB#0: # %entry
    346 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
    347 ; AVX-NEXT:    retq
    348 entry:
    349   %cmp = icmp uge <8 x i16> %a, %b
    350   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    351   ret <8 x i16> %sel
    352 }
    353 
    354 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
    355 ; SSE2-LABEL: test17:
    356 ; SSE2:       # BB#0: # %entry
    357 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    358 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
    359 ; SSE2-NEXT:    pand %xmm2, %xmm0
    360 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    361 ; SSE2-NEXT:    por %xmm2, %xmm0
    362 ; SSE2-NEXT:    retq
    363 ;
    364 ; SSE4-LABEL: test17:
    365 ; SSE4:       # BB#0: # %entry
    366 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
    367 ; SSE4-NEXT:    retq
    368 ;
    369 ; AVX-LABEL: test17:
    370 ; AVX:       # BB#0: # %entry
    371 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
    372 ; AVX-NEXT:    retq
    373 entry:
    374   %cmp = icmp slt <4 x i32> %a, %b
    375   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    376   ret <4 x i32> %sel
    377 }
    378 
    379 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
    380 ; SSE2-LABEL: test18:
    381 ; SSE2:       # BB#0: # %entry
    382 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    383 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
    384 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
    385 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    386 ; SSE2-NEXT:    pandn %xmm0, %xmm2
    387 ; SSE2-NEXT:    pandn %xmm1, %xmm3
    388 ; SSE2-NEXT:    por %xmm3, %xmm2
    389 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    390 ; SSE2-NEXT:    retq
    391 ;
    392 ; SSE4-LABEL: test18:
    393 ; SSE4:       # BB#0: # %entry
    394 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
    395 ; SSE4-NEXT:    retq
    396 ;
    397 ; AVX-LABEL: test18:
    398 ; AVX:       # BB#0: # %entry
    399 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
    400 ; AVX-NEXT:    retq
    401 entry:
    402   %cmp = icmp sle <4 x i32> %a, %b
    403   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    404   ret <4 x i32> %sel
    405 }
    406 
    407 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
    408 ; SSE2-LABEL: test19:
    409 ; SSE2:       # BB#0: # %entry
    410 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    411 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
    412 ; SSE2-NEXT:    pand %xmm2, %xmm0
    413 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    414 ; SSE2-NEXT:    por %xmm0, %xmm2
    415 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    416 ; SSE2-NEXT:    retq
    417 ;
    418 ; SSE4-LABEL: test19:
    419 ; SSE4:       # BB#0: # %entry
    420 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
    421 ; SSE4-NEXT:    retq
    422 ;
    423 ; AVX-LABEL: test19:
    424 ; AVX:       # BB#0: # %entry
    425 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    426 ; AVX-NEXT:    retq
    427 entry:
    428   %cmp = icmp sgt <4 x i32> %a, %b
    429   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    430   ret <4 x i32> %sel
    431 }
    432 
    433 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
    434 ; SSE2-LABEL: test20:
    435 ; SSE2:       # BB#0: # %entry
    436 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    437 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
    438 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
    439 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    440 ; SSE2-NEXT:    pandn %xmm0, %xmm3
    441 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    442 ; SSE2-NEXT:    por %xmm3, %xmm2
    443 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    444 ; SSE2-NEXT:    retq
    445 ;
    446 ; SSE4-LABEL: test20:
    447 ; SSE4:       # BB#0: # %entry
    448 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
    449 ; SSE4-NEXT:    retq
    450 ;
    451 ; AVX-LABEL: test20:
    452 ; AVX:       # BB#0: # %entry
    453 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    454 ; AVX-NEXT:    retq
    455 entry:
    456   %cmp = icmp sge <4 x i32> %a, %b
    457   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    458   ret <4 x i32> %sel
    459 }
    460 
    461 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
    462 ; SSE2-LABEL: test21:
    463 ; SSE2:       # BB#0: # %entry
    464 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
    465 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
    466 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    467 ; SSE2-NEXT:    pxor %xmm1, %xmm2
    468 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
    469 ; SSE2-NEXT:    pand %xmm2, %xmm0
    470 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    471 ; SSE2-NEXT:    por %xmm2, %xmm0
    472 ; SSE2-NEXT:    retq
    473 ;
    474 ; SSE4-LABEL: test21:
    475 ; SSE4:       # BB#0: # %entry
    476 ; SSE4-NEXT:    pminud %xmm1, %xmm0
    477 ; SSE4-NEXT:    retq
    478 ;
    479 ; AVX-LABEL: test21:
    480 ; AVX:       # BB#0: # %entry
    481 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
    482 ; AVX-NEXT:    retq
    483 entry:
    484   %cmp = icmp ult <4 x i32> %a, %b
    485   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    486   ret <4 x i32> %sel
    487 }
    488 
    489 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
    490 ; SSE2-LABEL: test22:
    491 ; SSE2:       # BB#0: # %entry
    492 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
    493 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    494 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    495 ; SSE2-NEXT:    pxor %xmm0, %xmm3
    496 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
    497 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
    498 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    499 ; SSE2-NEXT:    pandn %xmm0, %xmm3
    500 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    501 ; SSE2-NEXT:    por %xmm3, %xmm2
    502 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    503 ; SSE2-NEXT:    retq
    504 ;
    505 ; SSE4-LABEL: test22:
    506 ; SSE4:       # BB#0: # %entry
    507 ; SSE4-NEXT:    pminud %xmm1, %xmm0
    508 ; SSE4-NEXT:    retq
    509 ;
    510 ; AVX-LABEL: test22:
    511 ; AVX:       # BB#0: # %entry
    512 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
    513 ; AVX-NEXT:    retq
    514 entry:
    515   %cmp = icmp ule <4 x i32> %a, %b
    516   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    517   ret <4 x i32> %sel
    518 }
    519 
    520 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
    521 ; SSE2-LABEL: test23:
    522 ; SSE2:       # BB#0: # %entry
    523 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
    524 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    525 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    526 ; SSE2-NEXT:    pxor %xmm0, %xmm2
    527 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
    528 ; SSE2-NEXT:    pand %xmm2, %xmm0
    529 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    530 ; SSE2-NEXT:    por %xmm2, %xmm0
    531 ; SSE2-NEXT:    retq
    532 ;
    533 ; SSE4-LABEL: test23:
    534 ; SSE4:       # BB#0: # %entry
    535 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
    536 ; SSE4-NEXT:    retq
    537 ;
    538 ; AVX-LABEL: test23:
    539 ; AVX:       # BB#0: # %entry
    540 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
    541 ; AVX-NEXT:    retq
    542 entry:
    543   %cmp = icmp ugt <4 x i32> %a, %b
    544   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    545   ret <4 x i32> %sel
    546 }
    547 
    548 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
    549 ; SSE2-LABEL: test24:
    550 ; SSE2:       # BB#0: # %entry
    551 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
    552 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    553 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    554 ; SSE2-NEXT:    pxor %xmm1, %xmm3
    555 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
    556 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
    557 ; SSE2-NEXT:    pxor %xmm3, %xmm2
    558 ; SSE2-NEXT:    pandn %xmm0, %xmm3
    559 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    560 ; SSE2-NEXT:    por %xmm3, %xmm2
    561 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    562 ; SSE2-NEXT:    retq
    563 ;
    564 ; SSE4-LABEL: test24:
    565 ; SSE4:       # BB#0: # %entry
    566 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
    567 ; SSE4-NEXT:    retq
    568 ;
    569 ; AVX-LABEL: test24:
    570 ; AVX:       # BB#0: # %entry
    571 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
    572 ; AVX-NEXT:    retq
    573 entry:
    574   %cmp = icmp uge <4 x i32> %a, %b
    575   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    576   ret <4 x i32> %sel
    577 }
    578 
    579 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
    580 ; SSE2-LABEL: test25:
    581 ; SSE2:       # BB#0: # %entry
    582 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
    583 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
    584 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
    585 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm5
    586 ; SSE2-NEXT:    pand %xmm5, %xmm0
    587 ; SSE2-NEXT:    pandn %xmm2, %xmm5
    588 ; SSE2-NEXT:    por %xmm5, %xmm0
    589 ; SSE2-NEXT:    pand %xmm4, %xmm1
    590 ; SSE2-NEXT:    pandn %xmm3, %xmm4
    591 ; SSE2-NEXT:    por %xmm4, %xmm1
    592 ; SSE2-NEXT:    retq
    593 ;
    594 ; SSE4-LABEL: test25:
    595 ; SSE4:       # BB#0: # %entry
    596 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
    597 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
    598 ; SSE4-NEXT:    retq
    599 ;
    600 ; AVX1-LABEL: test25:
    601 ; AVX1:       # BB#0: # %entry
    602 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    603 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    604 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
    605 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
    606 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    607 ; AVX1-NEXT:    retq
    608 ;
    609 ; AVX2-LABEL: test25:
    610 ; AVX2:       # BB#0: # %entry
    611 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    612 ; AVX2-NEXT:    retq
    613 ;
    614 ; AVX512F-LABEL: test25:
    615 ; AVX512F:       # BB#0: # %entry
    616 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    617 ; AVX512F-NEXT:    retq
    618 entry:
    619   %cmp = icmp slt <32 x i8> %a, %b
    620   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    621   ret <32 x i8> %sel
    622 }
    623 
    624 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
    625 ; SSE2-LABEL: test26:
    626 ; SSE2:       # BB#0: # %entry
    627 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
    628 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm6
    629 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
    630 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
    631 ; SSE2-NEXT:    pxor %xmm7, %xmm4
    632 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
    633 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
    634 ; SSE2-NEXT:    pxor %xmm5, %xmm7
    635 ; SSE2-NEXT:    pandn %xmm0, %xmm5
    636 ; SSE2-NEXT:    pandn %xmm2, %xmm7
    637 ; SSE2-NEXT:    por %xmm7, %xmm5
    638 ; SSE2-NEXT:    pandn %xmm1, %xmm6
    639 ; SSE2-NEXT:    pandn %xmm3, %xmm4
    640 ; SSE2-NEXT:    por %xmm6, %xmm4
    641 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
    642 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
    643 ; SSE2-NEXT:    retq
    644 ;
    645 ; SSE4-LABEL: test26:
    646 ; SSE4:       # BB#0: # %entry
    647 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
    648 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
    649 ; SSE4-NEXT:    retq
    650 ;
    651 ; AVX1-LABEL: test26:
    652 ; AVX1:       # BB#0: # %entry
    653 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    654 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    655 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
    656 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
    657 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    658 ; AVX1-NEXT:    retq
    659 ;
    660 ; AVX2-LABEL: test26:
    661 ; AVX2:       # BB#0: # %entry
    662 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    663 ; AVX2-NEXT:    retq
    664 ;
    665 ; AVX512F-LABEL: test26:
    666 ; AVX512F:       # BB#0: # %entry
    667 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    668 ; AVX512F-NEXT:    retq
    669 entry:
    670   %cmp = icmp sle <32 x i8> %a, %b
    671   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    672   ret <32 x i8> %sel
    673 }
    674 
    675 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
    676 ; SSE2-LABEL: test27:
    677 ; SSE2:       # BB#0: # %entry
    678 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
    679 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
    680 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
    681 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
    682 ; SSE2-NEXT:    pand %xmm5, %xmm0
    683 ; SSE2-NEXT:    pandn %xmm2, %xmm5
    684 ; SSE2-NEXT:    por %xmm0, %xmm5
    685 ; SSE2-NEXT:    pand %xmm4, %xmm1
    686 ; SSE2-NEXT:    pandn %xmm3, %xmm4
    687 ; SSE2-NEXT:    por %xmm1, %xmm4
    688 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
    689 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
    690 ; SSE2-NEXT:    retq
    691 ;
    692 ; SSE4-LABEL: test27:
    693 ; SSE4:       # BB#0: # %entry
    694 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
    695 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
    696 ; SSE4-NEXT:    retq
    697 ;
    698 ; AVX1-LABEL: test27:
    699 ; AVX1:       # BB#0: # %entry
    700 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    701 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    702 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
    703 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    704 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    705 ; AVX1-NEXT:    retq
    706 ;
    707 ; AVX2-LABEL: test27:
    708 ; AVX2:       # BB#0: # %entry
    709 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    710 ; AVX2-NEXT:    retq
    711 ;
    712 ; AVX512F-LABEL: test27:
    713 ; AVX512F:       # BB#0: # %entry
    714 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    715 ; AVX512F-NEXT:    retq
    716 entry:
    717   %cmp = icmp sgt <32 x i8> %a, %b
    718   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    719   ret <32 x i8> %sel
    720 }
    721 
    722 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
    723 ; SSE2-LABEL: test28:
    724 ; SSE2:       # BB#0: # %entry
    725 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
    726 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm6
    727 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
    728 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
    729 ; SSE2-NEXT:    pxor %xmm4, %xmm5
    730 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
    731 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm7
    732 ; SSE2-NEXT:    pxor %xmm7, %xmm4
    733 ; SSE2-NEXT:    pandn %xmm0, %xmm7
    734 ; SSE2-NEXT:    pandn %xmm2, %xmm4
    735 ; SSE2-NEXT:    por %xmm7, %xmm4
    736 ; SSE2-NEXT:    pandn %xmm1, %xmm6
    737 ; SSE2-NEXT:    pandn %xmm3, %xmm5
    738 ; SSE2-NEXT:    por %xmm6, %xmm5
    739 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    740 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
    741 ; SSE2-NEXT:    retq
    742 ;
    743 ; SSE4-LABEL: test28:
    744 ; SSE4:       # BB#0: # %entry
    745 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
    746 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
    747 ; SSE4-NEXT:    retq
    748 ;
    749 ; AVX1-LABEL: test28:
    750 ; AVX1:       # BB#0: # %entry
    751 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    752 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    753 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
    754 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    755 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    756 ; AVX1-NEXT:    retq
    757 ;
    758 ; AVX2-LABEL: test28:
    759 ; AVX2:       # BB#0: # %entry
    760 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    761 ; AVX2-NEXT:    retq
    762 ;
    763 ; AVX512F-LABEL: test28:
    764 ; AVX512F:       # BB#0: # %entry
    765 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    766 ; AVX512F-NEXT:    retq
    767 entry:
    768   %cmp = icmp sge <32 x i8> %a, %b
    769   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    770   ret <32 x i8> %sel
    771 }
    772 
    773 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
    774 ; SSE-LABEL: test29:
    775 ; SSE:       # BB#0: # %entry
    776 ; SSE-NEXT:    pminub %xmm2, %xmm0
    777 ; SSE-NEXT:    pminub %xmm3, %xmm1
    778 ; SSE-NEXT:    retq
    779 ;
    780 ; AVX1-LABEL: test29:
    781 ; AVX1:       # BB#0: # %entry
    782 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    783 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    784 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
    785 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    786 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    787 ; AVX1-NEXT:    retq
    788 ;
    789 ; AVX2-LABEL: test29:
    790 ; AVX2:       # BB#0: # %entry
    791 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    792 ; AVX2-NEXT:    retq
    793 ;
    794 ; AVX512F-LABEL: test29:
    795 ; AVX512F:       # BB#0: # %entry
    796 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    797 ; AVX512F-NEXT:    retq
    798 entry:
    799   %cmp = icmp ult <32 x i8> %a, %b
    800   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    801   ret <32 x i8> %sel
    802 }
    803 
    804 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
    805 ; SSE-LABEL: test30:
    806 ; SSE:       # BB#0: # %entry
    807 ; SSE-NEXT:    pminub %xmm2, %xmm0
    808 ; SSE-NEXT:    pminub %xmm3, %xmm1
    809 ; SSE-NEXT:    retq
    810 ;
    811 ; AVX1-LABEL: test30:
    812 ; AVX1:       # BB#0: # %entry
    813 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    814 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    815 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
    816 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    817 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    818 ; AVX1-NEXT:    retq
    819 ;
    820 ; AVX2-LABEL: test30:
    821 ; AVX2:       # BB#0: # %entry
    822 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    823 ; AVX2-NEXT:    retq
    824 ;
    825 ; AVX512F-LABEL: test30:
    826 ; AVX512F:       # BB#0: # %entry
    827 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    828 ; AVX512F-NEXT:    retq
    829 entry:
    830   %cmp = icmp ule <32 x i8> %a, %b
    831   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    832   ret <32 x i8> %sel
    833 }
    834 
    835 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
    836 ; SSE-LABEL: test31:
    837 ; SSE:       # BB#0: # %entry
    838 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
    839 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
    840 ; SSE-NEXT:    retq
    841 ;
    842 ; AVX1-LABEL: test31:
    843 ; AVX1:       # BB#0: # %entry
    844 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    845 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    846 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
    847 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    848 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    849 ; AVX1-NEXT:    retq
    850 ;
    851 ; AVX2-LABEL: test31:
    852 ; AVX2:       # BB#0: # %entry
    853 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    854 ; AVX2-NEXT:    retq
    855 ;
    856 ; AVX512F-LABEL: test31:
    857 ; AVX512F:       # BB#0: # %entry
    858 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    859 ; AVX512F-NEXT:    retq
    860 entry:
    861   %cmp = icmp ugt <32 x i8> %a, %b
    862   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    863   ret <32 x i8> %sel
    864 }
    865 
    866 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
    867 ; SSE-LABEL: test32:
    868 ; SSE:       # BB#0: # %entry
    869 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
    870 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
    871 ; SSE-NEXT:    retq
    872 ;
    873 ; AVX1-LABEL: test32:
    874 ; AVX1:       # BB#0: # %entry
    875 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    876 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    877 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
    878 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    879 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    880 ; AVX1-NEXT:    retq
    881 ;
    882 ; AVX2-LABEL: test32:
    883 ; AVX2:       # BB#0: # %entry
    884 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    885 ; AVX2-NEXT:    retq
    886 ;
    887 ; AVX512F-LABEL: test32:
    888 ; AVX512F:       # BB#0: # %entry
    889 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    890 ; AVX512F-NEXT:    retq
    891 entry:
    892   %cmp = icmp uge <32 x i8> %a, %b
    893   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    894   ret <32 x i8> %sel
    895 }
    896 
    897 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
    898 ; SSE-LABEL: test33:
    899 ; SSE:       # BB#0: # %entry
    900 ; SSE-NEXT:    pminsw %xmm2, %xmm0
    901 ; SSE-NEXT:    pminsw %xmm3, %xmm1
    902 ; SSE-NEXT:    retq
    903 ;
    904 ; AVX1-LABEL: test33:
    905 ; AVX1:       # BB#0: # %entry
    906 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    907 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    908 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
    909 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    910 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    911 ; AVX1-NEXT:    retq
    912 ;
    913 ; AVX2-LABEL: test33:
    914 ; AVX2:       # BB#0: # %entry
    915 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    916 ; AVX2-NEXT:    retq
    917 ;
    918 ; AVX512F-LABEL: test33:
    919 ; AVX512F:       # BB#0: # %entry
    920 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    921 ; AVX512F-NEXT:    retq
    922 entry:
    923   %cmp = icmp slt <16 x i16> %a, %b
    924   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    925   ret <16 x i16> %sel
    926 }
    927 
    928 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
    929 ; SSE-LABEL: test34:
    930 ; SSE:       # BB#0: # %entry
    931 ; SSE-NEXT:    pminsw %xmm2, %xmm0
    932 ; SSE-NEXT:    pminsw %xmm3, %xmm1
    933 ; SSE-NEXT:    retq
    934 ;
    935 ; AVX1-LABEL: test34:
    936 ; AVX1:       # BB#0: # %entry
    937 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    938 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    939 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
    940 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    941 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    942 ; AVX1-NEXT:    retq
    943 ;
    944 ; AVX2-LABEL: test34:
    945 ; AVX2:       # BB#0: # %entry
    946 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    947 ; AVX2-NEXT:    retq
    948 ;
    949 ; AVX512F-LABEL: test34:
    950 ; AVX512F:       # BB#0: # %entry
    951 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    952 ; AVX512F-NEXT:    retq
    953 entry:
    954   %cmp = icmp sle <16 x i16> %a, %b
    955   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    956   ret <16 x i16> %sel
    957 }
    958 
    959 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
    960 ; SSE-LABEL: test35:
    961 ; SSE:       # BB#0: # %entry
    962 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
    963 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
    964 ; SSE-NEXT:    retq
    965 ;
    966 ; AVX1-LABEL: test35:
    967 ; AVX1:       # BB#0: # %entry
    968 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    969 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    970 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
    971 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    972 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    973 ; AVX1-NEXT:    retq
    974 ;
    975 ; AVX2-LABEL: test35:
    976 ; AVX2:       # BB#0: # %entry
    977 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    978 ; AVX2-NEXT:    retq
    979 ;
    980 ; AVX512F-LABEL: test35:
    981 ; AVX512F:       # BB#0: # %entry
    982 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    983 ; AVX512F-NEXT:    retq
    984 entry:
    985   %cmp = icmp sgt <16 x i16> %a, %b
    986   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    987   ret <16 x i16> %sel
    988 }
    989 
    990 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
    991 ; SSE-LABEL: test36:
    992 ; SSE:       # BB#0: # %entry
    993 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
    994 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
    995 ; SSE-NEXT:    retq
    996 ;
    997 ; AVX1-LABEL: test36:
    998 ; AVX1:       # BB#0: # %entry
    999 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1000 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1001 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
   1002 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   1003 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1004 ; AVX1-NEXT:    retq
   1005 ;
   1006 ; AVX2-LABEL: test36:
   1007 ; AVX2:       # BB#0: # %entry
   1008 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   1009 ; AVX2-NEXT:    retq
   1010 ;
   1011 ; AVX512F-LABEL: test36:
   1012 ; AVX512F:       # BB#0: # %entry
   1013 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   1014 ; AVX512F-NEXT:    retq
   1015 entry:
   1016   %cmp = icmp sge <16 x i16> %a, %b
   1017   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1018   ret <16 x i16> %sel
   1019 }
   1020 
   1021 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
   1022 ; SSE2-LABEL: test37:
   1023 ; SSE2:       # BB#0: # %entry
   1024 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1025 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   1026 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1027 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1028 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   1029 ; SSE2-NEXT:    pcmpgtw %xmm5, %xmm6
   1030 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1031 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1032 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   1033 ; SSE2-NEXT:    pcmpgtw %xmm5, %xmm4
   1034 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1035 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1036 ; SSE2-NEXT:    por %xmm4, %xmm0
   1037 ; SSE2-NEXT:    pand %xmm6, %xmm1
   1038 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   1039 ; SSE2-NEXT:    por %xmm6, %xmm1
   1040 ; SSE2-NEXT:    retq
   1041 ;
   1042 ; SSE4-LABEL: test37:
   1043 ; SSE4:       # BB#0: # %entry
   1044 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   1045 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   1046 ; SSE4-NEXT:    retq
   1047 ;
   1048 ; AVX1-LABEL: test37:
   1049 ; AVX1:       # BB#0: # %entry
   1050 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1051 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1052 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   1053 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1054 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1055 ; AVX1-NEXT:    retq
   1056 ;
   1057 ; AVX2-LABEL: test37:
   1058 ; AVX2:       # BB#0: # %entry
   1059 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1060 ; AVX2-NEXT:    retq
   1061 ;
   1062 ; AVX512F-LABEL: test37:
   1063 ; AVX512F:       # BB#0: # %entry
   1064 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1065 ; AVX512F-NEXT:    retq
   1066 entry:
   1067   %cmp = icmp ult <16 x i16> %a, %b
   1068   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1069   ret <16 x i16> %sel
   1070 }
   1071 
   1072 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
   1073 ; SSE2-LABEL: test38:
   1074 ; SSE2:       # BB#0: # %entry
   1075 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1076 ; SSE2-NEXT:    psubusw %xmm3, %xmm4
   1077 ; SSE2-NEXT:    pxor %xmm6, %xmm6
   1078 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
   1079 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1080 ; SSE2-NEXT:    psubusw %xmm2, %xmm5
   1081 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
   1082 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1083 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1084 ; SSE2-NEXT:    por %xmm0, %xmm5
   1085 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1086 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1087 ; SSE2-NEXT:    por %xmm1, %xmm4
   1088 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   1089 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1090 ; SSE2-NEXT:    retq
   1091 ;
   1092 ; SSE4-LABEL: test38:
   1093 ; SSE4:       # BB#0: # %entry
   1094 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   1095 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   1096 ; SSE4-NEXT:    retq
   1097 ;
   1098 ; AVX1-LABEL: test38:
   1099 ; AVX1:       # BB#0: # %entry
   1100 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1101 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1102 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   1103 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1104 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1105 ; AVX1-NEXT:    retq
   1106 ;
   1107 ; AVX2-LABEL: test38:
   1108 ; AVX2:       # BB#0: # %entry
   1109 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1110 ; AVX2-NEXT:    retq
   1111 ;
   1112 ; AVX512F-LABEL: test38:
   1113 ; AVX512F:       # BB#0: # %entry
   1114 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1115 ; AVX512F-NEXT:    retq
   1116 entry:
   1117   %cmp = icmp ule <16 x i16> %a, %b
   1118   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1119   ret <16 x i16> %sel
   1120 }
   1121 
   1122 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
   1123 ; SSE2-LABEL: test39:
   1124 ; SSE2:       # BB#0: # %entry
   1125 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1126 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1127 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1128 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1129 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   1130 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
   1131 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1132 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1133 ; SSE2-NEXT:    pxor %xmm0, %xmm5
   1134 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
   1135 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1136 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1137 ; SSE2-NEXT:    por %xmm5, %xmm0
   1138 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1139 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1140 ; SSE2-NEXT:    por %xmm1, %xmm4
   1141 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1142 ; SSE2-NEXT:    retq
   1143 ;
   1144 ; SSE4-LABEL: test39:
   1145 ; SSE4:       # BB#0: # %entry
   1146 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   1147 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   1148 ; SSE4-NEXT:    retq
   1149 ;
   1150 ; AVX1-LABEL: test39:
   1151 ; AVX1:       # BB#0: # %entry
   1152 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1153 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1154 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   1155 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1156 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1157 ; AVX1-NEXT:    retq
   1158 ;
   1159 ; AVX2-LABEL: test39:
   1160 ; AVX2:       # BB#0: # %entry
   1161 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1162 ; AVX2-NEXT:    retq
   1163 ;
   1164 ; AVX512F-LABEL: test39:
   1165 ; AVX512F:       # BB#0: # %entry
   1166 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1167 ; AVX512F-NEXT:    retq
   1168 entry:
   1169   %cmp = icmp ugt <16 x i16> %a, %b
   1170   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1171   ret <16 x i16> %sel
   1172 }
   1173 
   1174 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
   1175 ; SSE2-LABEL: test40:
   1176 ; SSE2:       # BB#0: # %entry
   1177 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1178 ; SSE2-NEXT:    psubusw %xmm1, %xmm4
   1179 ; SSE2-NEXT:    pxor %xmm5, %xmm5
   1180 ; SSE2-NEXT:    pcmpeqw %xmm5, %xmm4
   1181 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1182 ; SSE2-NEXT:    psubusw %xmm0, %xmm6
   1183 ; SSE2-NEXT:    pcmpeqw %xmm5, %xmm6
   1184 ; SSE2-NEXT:    pand %xmm6, %xmm0
   1185 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   1186 ; SSE2-NEXT:    por %xmm6, %xmm0
   1187 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1188 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1189 ; SSE2-NEXT:    por %xmm4, %xmm1
   1190 ; SSE2-NEXT:    retq
   1191 ;
   1192 ; SSE4-LABEL: test40:
   1193 ; SSE4:       # BB#0: # %entry
   1194 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   1195 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   1196 ; SSE4-NEXT:    retq
   1197 ;
   1198 ; AVX1-LABEL: test40:
   1199 ; AVX1:       # BB#0: # %entry
   1200 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1201 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1202 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   1203 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1204 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1205 ; AVX1-NEXT:    retq
   1206 ;
   1207 ; AVX2-LABEL: test40:
   1208 ; AVX2:       # BB#0: # %entry
   1209 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1210 ; AVX2-NEXT:    retq
   1211 ;
   1212 ; AVX512F-LABEL: test40:
   1213 ; AVX512F:       # BB#0: # %entry
   1214 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1215 ; AVX512F-NEXT:    retq
   1216 entry:
   1217   %cmp = icmp uge <16 x i16> %a, %b
   1218   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1219   ret <16 x i16> %sel
   1220 }
   1221 
   1222 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
   1223 ; SSE2-LABEL: test41:
   1224 ; SSE2:       # BB#0: # %entry
   1225 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1226 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   1227 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   1228 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   1229 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1230 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1231 ; SSE2-NEXT:    por %xmm5, %xmm0
   1232 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1233 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1234 ; SSE2-NEXT:    por %xmm4, %xmm1
   1235 ; SSE2-NEXT:    retq
   1236 ;
   1237 ; SSE4-LABEL: test41:
   1238 ; SSE4:       # BB#0: # %entry
   1239 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   1240 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   1241 ; SSE4-NEXT:    retq
   1242 ;
   1243 ; AVX1-LABEL: test41:
   1244 ; AVX1:       # BB#0: # %entry
   1245 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1246 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1247 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   1248 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1249 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1250 ; AVX1-NEXT:    retq
   1251 ;
   1252 ; AVX2-LABEL: test41:
   1253 ; AVX2:       # BB#0: # %entry
   1254 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1255 ; AVX2-NEXT:    retq
   1256 ;
   1257 ; AVX512F-LABEL: test41:
   1258 ; AVX512F:       # BB#0: # %entry
   1259 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1260 ; AVX512F-NEXT:    retq
   1261 entry:
   1262   %cmp = icmp slt <8 x i32> %a, %b
   1263   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1264   ret <8 x i32> %sel
   1265 }
   1266 
   1267 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
   1268 ; SSE2-LABEL: test42:
   1269 ; SSE2:       # BB#0: # %entry
   1270 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   1271 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
   1272 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
   1273 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   1274 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   1275 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1276 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   1277 ; SSE2-NEXT:    pxor %xmm5, %xmm7
   1278 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   1279 ; SSE2-NEXT:    pandn %xmm2, %xmm7
   1280 ; SSE2-NEXT:    por %xmm7, %xmm5
   1281 ; SSE2-NEXT:    pandn %xmm1, %xmm6
   1282 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1283 ; SSE2-NEXT:    por %xmm6, %xmm4
   1284 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   1285 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1286 ; SSE2-NEXT:    retq
   1287 ;
   1288 ; SSE4-LABEL: test42:
   1289 ; SSE4:       # BB#0: # %entry
   1290 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   1291 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   1292 ; SSE4-NEXT:    retq
   1293 ;
   1294 ; AVX1-LABEL: test42:
   1295 ; AVX1:       # BB#0: # %entry
   1296 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1297 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1298 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   1299 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1300 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1301 ; AVX1-NEXT:    retq
   1302 ;
   1303 ; AVX2-LABEL: test42:
   1304 ; AVX2:       # BB#0: # %entry
   1305 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1306 ; AVX2-NEXT:    retq
   1307 ;
   1308 ; AVX512F-LABEL: test42:
   1309 ; AVX512F:       # BB#0: # %entry
   1310 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1311 ; AVX512F-NEXT:    retq
   1312 entry:
   1313   %cmp = icmp sle <8 x i32> %a, %b
   1314   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1315   ret <8 x i32> %sel
   1316 }
   1317 
   1318 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
   1319 ; SSE2-LABEL: test43:
   1320 ; SSE2:       # BB#0: # %entry
   1321 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1322 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   1323 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1324 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   1325 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1326 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1327 ; SSE2-NEXT:    por %xmm0, %xmm5
   1328 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1329 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1330 ; SSE2-NEXT:    por %xmm1, %xmm4
   1331 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   1332 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1333 ; SSE2-NEXT:    retq
   1334 ;
   1335 ; SSE4-LABEL: test43:
   1336 ; SSE4:       # BB#0: # %entry
   1337 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   1338 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   1339 ; SSE4-NEXT:    retq
   1340 ;
   1341 ; AVX1-LABEL: test43:
   1342 ; AVX1:       # BB#0: # %entry
   1343 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1344 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1345 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   1346 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   1347 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1348 ; AVX1-NEXT:    retq
   1349 ;
   1350 ; AVX2-LABEL: test43:
   1351 ; AVX2:       # BB#0: # %entry
   1352 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1353 ; AVX2-NEXT:    retq
   1354 ;
   1355 ; AVX512F-LABEL: test43:
   1356 ; AVX512F:       # BB#0: # %entry
   1357 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1358 ; AVX512F-NEXT:    retq
   1359 entry:
   1360   %cmp = icmp sgt <8 x i32> %a, %b
   1361   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1362   ret <8 x i32> %sel
   1363 }
   1364 
   1365 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
   1366 ; SSE2-LABEL: test44:
   1367 ; SSE2:       # BB#0: # %entry
   1368 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1369 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
   1370 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   1371 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   1372 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1373 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
   1374 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm7
   1375 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   1376 ; SSE2-NEXT:    pandn %xmm0, %xmm7
   1377 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1378 ; SSE2-NEXT:    por %xmm7, %xmm4
   1379 ; SSE2-NEXT:    pandn %xmm1, %xmm6
   1380 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   1381 ; SSE2-NEXT:    por %xmm6, %xmm5
   1382 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1383 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   1384 ; SSE2-NEXT:    retq
   1385 ;
   1386 ; SSE4-LABEL: test44:
   1387 ; SSE4:       # BB#0: # %entry
   1388 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   1389 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   1390 ; SSE4-NEXT:    retq
   1391 ;
   1392 ; AVX1-LABEL: test44:
   1393 ; AVX1:       # BB#0: # %entry
   1394 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1395 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1396 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   1397 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   1398 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1399 ; AVX1-NEXT:    retq
   1400 ;
   1401 ; AVX2-LABEL: test44:
   1402 ; AVX2:       # BB#0: # %entry
   1403 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1404 ; AVX2-NEXT:    retq
   1405 ;
   1406 ; AVX512F-LABEL: test44:
   1407 ; AVX512F:       # BB#0: # %entry
   1408 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1409 ; AVX512F-NEXT:    retq
   1410 entry:
   1411   %cmp = icmp sge <8 x i32> %a, %b
   1412   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1413   ret <8 x i32> %sel
   1414 }
   1415 
   1416 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
   1417 ; SSE2-LABEL: test45:
   1418 ; SSE2:       # BB#0: # %entry
   1419 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   1420 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   1421 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1422 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1423 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   1424 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
   1425 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1426 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1427 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   1428 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   1429 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1430 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1431 ; SSE2-NEXT:    por %xmm4, %xmm0
   1432 ; SSE2-NEXT:    pand %xmm6, %xmm1
   1433 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   1434 ; SSE2-NEXT:    por %xmm6, %xmm1
   1435 ; SSE2-NEXT:    retq
   1436 ;
   1437 ; SSE4-LABEL: test45:
   1438 ; SSE4:       # BB#0: # %entry
   1439 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   1440 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   1441 ; SSE4-NEXT:    retq
   1442 ;
   1443 ; AVX1-LABEL: test45:
   1444 ; AVX1:       # BB#0: # %entry
   1445 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1446 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1447 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   1448 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   1449 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1450 ; AVX1-NEXT:    retq
   1451 ;
   1452 ; AVX2-LABEL: test45:
   1453 ; AVX2:       # BB#0: # %entry
   1454 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1455 ; AVX2-NEXT:    retq
   1456 ;
   1457 ; AVX512F-LABEL: test45:
   1458 ; AVX512F:       # BB#0: # %entry
   1459 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1460 ; AVX512F-NEXT:    retq
   1461 entry:
   1462   %cmp = icmp ult <8 x i32> %a, %b
   1463   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1464   ret <8 x i32> %sel
   1465 }
   1466 
   1467 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
   1468 ; SSE2-LABEL: test46:
   1469 ; SSE2:       # BB#0: # %entry
   1470 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
   1471 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1472 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   1473 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
   1474 ; SSE2-NEXT:    pxor %xmm6, %xmm7
   1475 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   1476 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   1477 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   1478 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1479 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   1480 ; SSE2-NEXT:    pxor %xmm6, %xmm8
   1481 ; SSE2-NEXT:    pxor %xmm0, %xmm6
   1482 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
   1483 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   1484 ; SSE2-NEXT:    pandn %xmm0, %xmm6
   1485 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1486 ; SSE2-NEXT:    por %xmm6, %xmm4
   1487 ; SSE2-NEXT:    pandn %xmm1, %xmm7
   1488 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   1489 ; SSE2-NEXT:    por %xmm7, %xmm5
   1490 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1491 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   1492 ; SSE2-NEXT:    retq
   1493 ;
   1494 ; SSE4-LABEL: test46:
   1495 ; SSE4:       # BB#0: # %entry
   1496 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   1497 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   1498 ; SSE4-NEXT:    retq
   1499 ;
   1500 ; AVX1-LABEL: test46:
   1501 ; AVX1:       # BB#0: # %entry
   1502 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1503 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1504 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   1505 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   1506 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1507 ; AVX1-NEXT:    retq
   1508 ;
   1509 ; AVX2-LABEL: test46:
   1510 ; AVX2:       # BB#0: # %entry
   1511 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1512 ; AVX2-NEXT:    retq
   1513 ;
   1514 ; AVX512F-LABEL: test46:
   1515 ; AVX512F:       # BB#0: # %entry
   1516 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1517 ; AVX512F-NEXT:    retq
   1518 entry:
   1519   %cmp = icmp ule <8 x i32> %a, %b
   1520   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1521   ret <8 x i32> %sel
   1522 }
   1523 
   1524 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
   1525 ; SSE2-LABEL: test47:
   1526 ; SSE2:       # BB#0: # %entry
   1527 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   1528 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   1529 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1530 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1531 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   1532 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   1533 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1534 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1535 ; SSE2-NEXT:    pxor %xmm0, %xmm5
   1536 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   1537 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1538 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   1539 ; SSE2-NEXT:    por %xmm5, %xmm0
   1540 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1541 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1542 ; SSE2-NEXT:    por %xmm1, %xmm4
   1543 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   1544 ; SSE2-NEXT:    retq
   1545 ;
   1546 ; SSE4-LABEL: test47:
   1547 ; SSE4:       # BB#0: # %entry
   1548 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   1549 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   1550 ; SSE4-NEXT:    retq
   1551 ;
   1552 ; AVX1-LABEL: test47:
   1553 ; AVX1:       # BB#0: # %entry
   1554 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1555 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1556 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   1557 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   1558 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1559 ; AVX1-NEXT:    retq
   1560 ;
   1561 ; AVX2-LABEL: test47:
   1562 ; AVX2:       # BB#0: # %entry
   1563 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1564 ; AVX2-NEXT:    retq
   1565 ;
   1566 ; AVX512F-LABEL: test47:
   1567 ; AVX512F:       # BB#0: # %entry
   1568 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1569 ; AVX512F-NEXT:    retq
   1570 entry:
   1571   %cmp = icmp ugt <8 x i32> %a, %b
   1572   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1573   ret <8 x i32> %sel
   1574 }
   1575 
   1576 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
   1577 ; SSE2-LABEL: test48:
   1578 ; SSE2:       # BB#0: # %entry
   1579 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
   1580 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1581 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   1582 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   1583 ; SSE2-NEXT:    pxor %xmm6, %xmm7
   1584 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   1585 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   1586 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   1587 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1588 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   1589 ; SSE2-NEXT:    pxor %xmm6, %xmm8
   1590 ; SSE2-NEXT:    pxor %xmm2, %xmm6
   1591 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
   1592 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   1593 ; SSE2-NEXT:    pandn %xmm0, %xmm6
   1594 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1595 ; SSE2-NEXT:    por %xmm6, %xmm4
   1596 ; SSE2-NEXT:    pandn %xmm1, %xmm7
   1597 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   1598 ; SSE2-NEXT:    por %xmm7, %xmm5
   1599 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1600 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   1601 ; SSE2-NEXT:    retq
   1602 ;
   1603 ; SSE4-LABEL: test48:
   1604 ; SSE4:       # BB#0: # %entry
   1605 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   1606 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   1607 ; SSE4-NEXT:    retq
   1608 ;
   1609 ; AVX1-LABEL: test48:
   1610 ; AVX1:       # BB#0: # %entry
   1611 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1612 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1613 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   1614 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   1615 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1616 ; AVX1-NEXT:    retq
   1617 ;
   1618 ; AVX2-LABEL: test48:
   1619 ; AVX2:       # BB#0: # %entry
   1620 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1621 ; AVX2-NEXT:    retq
   1622 ;
   1623 ; AVX512F-LABEL: test48:
   1624 ; AVX512F:       # BB#0: # %entry
   1625 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1626 ; AVX512F-NEXT:    retq
   1627 entry:
   1628   %cmp = icmp uge <8 x i32> %a, %b
   1629   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1630   ret <8 x i32> %sel
   1631 }
   1632 
   1633 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
   1634 ; SSE2-LABEL: test49:
   1635 ; SSE2:       # BB#0: # %entry
   1636 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1637 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
   1638 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1639 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1640 ; SSE2-NEXT:    por %xmm1, %xmm2
   1641 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1642 ; SSE2-NEXT:    retq
   1643 ;
   1644 ; SSE4-LABEL: test49:
   1645 ; SSE4:       # BB#0: # %entry
   1646 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
   1647 ; SSE4-NEXT:    retq
   1648 ;
   1649 ; AVX-LABEL: test49:
   1650 ; AVX:       # BB#0: # %entry
   1651 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   1652 ; AVX-NEXT:    retq
   1653 entry:
   1654   %cmp = icmp slt <16 x i8> %a, %b
   1655   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1656   ret <16 x i8> %sel
   1657 }
   1658 
   1659 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
   1660 ; SSE2-LABEL: test50:
   1661 ; SSE2:       # BB#0: # %entry
   1662 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1663 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
   1664 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
   1665 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1666 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1667 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   1668 ; SSE2-NEXT:    por %xmm3, %xmm2
   1669 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1670 ; SSE2-NEXT:    retq
   1671 ;
   1672 ; SSE4-LABEL: test50:
   1673 ; SSE4:       # BB#0: # %entry
   1674 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
   1675 ; SSE4-NEXT:    retq
   1676 ;
   1677 ; AVX-LABEL: test50:
   1678 ; AVX:       # BB#0: # %entry
   1679 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   1680 ; AVX-NEXT:    retq
   1681 entry:
   1682   %cmp = icmp sle <16 x i8> %a, %b
   1683   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1684   ret <16 x i8> %sel
   1685 }
   1686 
   1687 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
   1688 ; SSE2-LABEL: test51:
   1689 ; SSE2:       # BB#0: # %entry
   1690 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1691 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
   1692 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1693 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1694 ; SSE2-NEXT:    por %xmm1, %xmm2
   1695 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1696 ; SSE2-NEXT:    retq
   1697 ;
   1698 ; SSE4-LABEL: test51:
   1699 ; SSE4:       # BB#0: # %entry
   1700 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
   1701 ; SSE4-NEXT:    retq
   1702 ;
   1703 ; AVX-LABEL: test51:
   1704 ; AVX:       # BB#0: # %entry
   1705 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1706 ; AVX-NEXT:    retq
   1707 entry:
   1708   %cmp = icmp sgt <16 x i8> %a, %b
   1709   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1710   ret <16 x i8> %sel
   1711 }
   1712 
   1713 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
   1714 ; SSE2-LABEL: test52:
   1715 ; SSE2:       # BB#0: # %entry
   1716 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1717 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm3
   1718 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   1719 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   1720 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   1721 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1722 ; SSE2-NEXT:    por %xmm3, %xmm2
   1723 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1724 ; SSE2-NEXT:    retq
   1725 ;
   1726 ; SSE4-LABEL: test52:
   1727 ; SSE4:       # BB#0: # %entry
   1728 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
   1729 ; SSE4-NEXT:    retq
   1730 ;
   1731 ; AVX-LABEL: test52:
   1732 ; AVX:       # BB#0: # %entry
   1733 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1734 ; AVX-NEXT:    retq
   1735 entry:
   1736   %cmp = icmp sge <16 x i8> %a, %b
   1737   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1738   ret <16 x i8> %sel
   1739 }
   1740 
   1741 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
   1742 ; SSE-LABEL: test53:
   1743 ; SSE:       # BB#0: # %entry
   1744 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
   1745 ; SSE-NEXT:    retq
   1746 ;
   1747 ; AVX-LABEL: test53:
   1748 ; AVX:       # BB#0: # %entry
   1749 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   1750 ; AVX-NEXT:    retq
   1751 entry:
   1752   %cmp = icmp ult <16 x i8> %a, %b
   1753   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1754   ret <16 x i8> %sel
   1755 }
   1756 
   1757 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
   1758 ; SSE-LABEL: test54:
   1759 ; SSE:       # BB#0: # %entry
   1760 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
   1761 ; SSE-NEXT:    retq
   1762 ;
   1763 ; AVX-LABEL: test54:
   1764 ; AVX:       # BB#0: # %entry
   1765 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   1766 ; AVX-NEXT:    retq
   1767 entry:
   1768   %cmp = icmp ule <16 x i8> %a, %b
   1769   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1770   ret <16 x i8> %sel
   1771 }
   1772 
   1773 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
   1774 ; SSE-LABEL: test55:
   1775 ; SSE:       # BB#0: # %entry
   1776 ; SSE-NEXT:    pminub %xmm1, %xmm0
   1777 ; SSE-NEXT:    retq
   1778 ;
   1779 ; AVX-LABEL: test55:
   1780 ; AVX:       # BB#0: # %entry
   1781 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   1782 ; AVX-NEXT:    retq
   1783 entry:
   1784   %cmp = icmp ugt <16 x i8> %a, %b
   1785   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1786   ret <16 x i8> %sel
   1787 }
   1788 
   1789 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
   1790 ; SSE-LABEL: test56:
   1791 ; SSE:       # BB#0: # %entry
   1792 ; SSE-NEXT:    pminub %xmm1, %xmm0
   1793 ; SSE-NEXT:    retq
   1794 ;
   1795 ; AVX-LABEL: test56:
   1796 ; AVX:       # BB#0: # %entry
   1797 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   1798 ; AVX-NEXT:    retq
   1799 entry:
   1800   %cmp = icmp uge <16 x i8> %a, %b
   1801   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1802   ret <16 x i8> %sel
   1803 }
   1804 
   1805 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
   1806 ; SSE-LABEL: test57:
   1807 ; SSE:       # BB#0: # %entry
   1808 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
   1809 ; SSE-NEXT:    retq
   1810 ;
   1811 ; AVX-LABEL: test57:
   1812 ; AVX:       # BB#0: # %entry
   1813 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   1814 ; AVX-NEXT:    retq
   1815 entry:
   1816   %cmp = icmp slt <8 x i16> %a, %b
   1817   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1818   ret <8 x i16> %sel
   1819 }
   1820 
   1821 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
   1822 ; SSE-LABEL: test58:
   1823 ; SSE:       # BB#0: # %entry
   1824 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
   1825 ; SSE-NEXT:    retq
   1826 ;
   1827 ; AVX-LABEL: test58:
   1828 ; AVX:       # BB#0: # %entry
   1829 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   1830 ; AVX-NEXT:    retq
   1831 entry:
   1832   %cmp = icmp sle <8 x i16> %a, %b
   1833   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1834   ret <8 x i16> %sel
   1835 }
   1836 
   1837 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
   1838 ; SSE-LABEL: test59:
   1839 ; SSE:       # BB#0: # %entry
   1840 ; SSE-NEXT:    pminsw %xmm1, %xmm0
   1841 ; SSE-NEXT:    retq
   1842 ;
   1843 ; AVX-LABEL: test59:
   1844 ; AVX:       # BB#0: # %entry
   1845 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1846 ; AVX-NEXT:    retq
   1847 entry:
   1848   %cmp = icmp sgt <8 x i16> %a, %b
   1849   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1850   ret <8 x i16> %sel
   1851 }
   1852 
   1853 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
   1854 ; SSE-LABEL: test60:
   1855 ; SSE:       # BB#0: # %entry
   1856 ; SSE-NEXT:    pminsw %xmm1, %xmm0
   1857 ; SSE-NEXT:    retq
   1858 ;
   1859 ; AVX-LABEL: test60:
   1860 ; AVX:       # BB#0: # %entry
   1861 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1862 ; AVX-NEXT:    retq
   1863 entry:
   1864   %cmp = icmp sge <8 x i16> %a, %b
   1865   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1866   ret <8 x i16> %sel
   1867 }
   1868 
   1869 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
   1870 ; SSE2-LABEL: test61:
   1871 ; SSE2:       # BB#0: # %entry
   1872 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1873 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   1874 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1875 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   1876 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
   1877 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1878 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1879 ; SSE2-NEXT:    por %xmm1, %xmm2
   1880 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1881 ; SSE2-NEXT:    retq
   1882 ;
   1883 ; SSE4-LABEL: test61:
   1884 ; SSE4:       # BB#0: # %entry
   1885 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
   1886 ; SSE4-NEXT:    retq
   1887 ;
   1888 ; AVX-LABEL: test61:
   1889 ; AVX:       # BB#0: # %entry
   1890 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1891 ; AVX-NEXT:    retq
   1892 entry:
   1893   %cmp = icmp ult <8 x i16> %a, %b
   1894   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1895   ret <8 x i16> %sel
   1896 }
   1897 
   1898 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
   1899 ; SSE2-LABEL: test62:
   1900 ; SSE2:       # BB#0: # %entry
   1901 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   1902 ; SSE2-NEXT:    psubusw %xmm1, %xmm3
   1903 ; SSE2-NEXT:    pxor %xmm2, %xmm2
   1904 ; SSE2-NEXT:    pcmpeqw %xmm3, %xmm2
   1905 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1906 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1907 ; SSE2-NEXT:    por %xmm1, %xmm2
   1908 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1909 ; SSE2-NEXT:    retq
   1910 ;
   1911 ; SSE4-LABEL: test62:
   1912 ; SSE4:       # BB#0: # %entry
   1913 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
   1914 ; SSE4-NEXT:    retq
   1915 ;
   1916 ; AVX-LABEL: test62:
   1917 ; AVX:       # BB#0: # %entry
   1918 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1919 ; AVX-NEXT:    retq
   1920 entry:
   1921   %cmp = icmp ule <8 x i16> %a, %b
   1922   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1923   ret <8 x i16> %sel
   1924 }
   1925 
   1926 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
   1927 ; SSE2-LABEL: test63:
   1928 ; SSE2:       # BB#0: # %entry
   1929 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1930 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1931 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1932 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   1933 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
   1934 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1935 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1936 ; SSE2-NEXT:    por %xmm1, %xmm2
   1937 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1938 ; SSE2-NEXT:    retq
   1939 ;
   1940 ; SSE4-LABEL: test63:
   1941 ; SSE4:       # BB#0: # %entry
   1942 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
   1943 ; SSE4-NEXT:    retq
   1944 ;
   1945 ; AVX-LABEL: test63:
   1946 ; AVX:       # BB#0: # %entry
   1947 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1948 ; AVX-NEXT:    retq
   1949 entry:
   1950   %cmp = icmp ugt <8 x i16> %a, %b
   1951   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1952   ret <8 x i16> %sel
   1953 }
   1954 
   1955 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
   1956 ; SSE2-LABEL: test64:
   1957 ; SSE2:       # BB#0: # %entry
   1958 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1959 ; SSE2-NEXT:    psubusw %xmm0, %xmm3
   1960 ; SSE2-NEXT:    pxor %xmm2, %xmm2
   1961 ; SSE2-NEXT:    pcmpeqw %xmm3, %xmm2
   1962 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1963 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1964 ; SSE2-NEXT:    por %xmm1, %xmm2
   1965 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1966 ; SSE2-NEXT:    retq
   1967 ;
   1968 ; SSE4-LABEL: test64:
   1969 ; SSE4:       # BB#0: # %entry
   1970 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
   1971 ; SSE4-NEXT:    retq
   1972 ;
   1973 ; AVX-LABEL: test64:
   1974 ; AVX:       # BB#0: # %entry
   1975 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1976 ; AVX-NEXT:    retq
   1977 entry:
   1978   %cmp = icmp uge <8 x i16> %a, %b
   1979   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1980   ret <8 x i16> %sel
   1981 }
   1982 
   1983 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
   1984 ; SSE2-LABEL: test65:
   1985 ; SSE2:       # BB#0: # %entry
   1986 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1987 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
   1988 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1989 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   1990 ; SSE2-NEXT:    por %xmm1, %xmm2
   1991 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1992 ; SSE2-NEXT:    retq
   1993 ;
   1994 ; SSE4-LABEL: test65:
   1995 ; SSE4:       # BB#0: # %entry
   1996 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
   1997 ; SSE4-NEXT:    retq
   1998 ;
   1999 ; AVX-LABEL: test65:
   2000 ; AVX:       # BB#0: # %entry
   2001 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2002 ; AVX-NEXT:    retq
   2003 entry:
   2004   %cmp = icmp slt <4 x i32> %a, %b
   2005   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2006   ret <4 x i32> %sel
   2007 }
   2008 
   2009 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
   2010 ; SSE2-LABEL: test66:
   2011 ; SSE2:       # BB#0: # %entry
   2012 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   2013 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   2014 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
   2015 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   2016 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   2017 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   2018 ; SSE2-NEXT:    por %xmm3, %xmm2
   2019 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2020 ; SSE2-NEXT:    retq
   2021 ;
   2022 ; SSE4-LABEL: test66:
   2023 ; SSE4:       # BB#0: # %entry
   2024 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
   2025 ; SSE4-NEXT:    retq
   2026 ;
   2027 ; AVX-LABEL: test66:
   2028 ; AVX:       # BB#0: # %entry
   2029 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2030 ; AVX-NEXT:    retq
   2031 entry:
   2032   %cmp = icmp sle <4 x i32> %a, %b
   2033   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2034   ret <4 x i32> %sel
   2035 }
   2036 
   2037 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
   2038 ; SSE2-LABEL: test67:
   2039 ; SSE2:       # BB#0: # %entry
   2040 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   2041 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   2042 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2043 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2044 ; SSE2-NEXT:    por %xmm1, %xmm2
   2045 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2046 ; SSE2-NEXT:    retq
   2047 ;
   2048 ; SSE4-LABEL: test67:
   2049 ; SSE4:       # BB#0: # %entry
   2050 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
   2051 ; SSE4-NEXT:    retq
   2052 ;
   2053 ; AVX-LABEL: test67:
   2054 ; AVX:       # BB#0: # %entry
   2055 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   2056 ; AVX-NEXT:    retq
   2057 entry:
   2058   %cmp = icmp sgt <4 x i32> %a, %b
   2059   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2060   ret <4 x i32> %sel
   2061 }
   2062 
   2063 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
   2064 ; SSE2-LABEL: test68:
   2065 ; SSE2:       # BB#0: # %entry
   2066 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   2067 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
   2068 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   2069 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2070 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   2071 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2072 ; SSE2-NEXT:    por %xmm3, %xmm2
   2073 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2074 ; SSE2-NEXT:    retq
   2075 ;
   2076 ; SSE4-LABEL: test68:
   2077 ; SSE4:       # BB#0: # %entry
   2078 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
   2079 ; SSE4-NEXT:    retq
   2080 ;
   2081 ; AVX-LABEL: test68:
   2082 ; AVX:       # BB#0: # %entry
   2083 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   2084 ; AVX-NEXT:    retq
   2085 entry:
   2086   %cmp = icmp sge <4 x i32> %a, %b
   2087   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2088   ret <4 x i32> %sel
   2089 }
   2090 
   2091 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
   2092 ; SSE2-LABEL: test69:
   2093 ; SSE2:       # BB#0: # %entry
   2094 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   2095 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   2096 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   2097 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   2098 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   2099 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2100 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2101 ; SSE2-NEXT:    por %xmm1, %xmm2
   2102 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2103 ; SSE2-NEXT:    retq
   2104 ;
   2105 ; SSE4-LABEL: test69:
   2106 ; SSE4:       # BB#0: # %entry
   2107 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
   2108 ; SSE4-NEXT:    retq
   2109 ;
   2110 ; AVX-LABEL: test69:
   2111 ; AVX:       # BB#0: # %entry
   2112 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   2113 ; AVX-NEXT:    retq
   2114 entry:
   2115   %cmp = icmp ult <4 x i32> %a, %b
   2116   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2117   ret <4 x i32> %sel
   2118 }
   2119 
   2120 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
   2121 ; SSE2-LABEL: test70:
   2122 ; SSE2:       # BB#0: # %entry
   2123 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
   2124 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   2125 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2126 ; SSE2-NEXT:    pxor %xmm0, %xmm3
   2127 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
   2128 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   2129 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2130 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   2131 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2132 ; SSE2-NEXT:    por %xmm3, %xmm2
   2133 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2134 ; SSE2-NEXT:    retq
   2135 ;
   2136 ; SSE4-LABEL: test70:
   2137 ; SSE4:       # BB#0: # %entry
   2138 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
   2139 ; SSE4-NEXT:    retq
   2140 ;
   2141 ; AVX-LABEL: test70:
   2142 ; AVX:       # BB#0: # %entry
   2143 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   2144 ; AVX-NEXT:    retq
   2145 entry:
   2146   %cmp = icmp ule <4 x i32> %a, %b
   2147   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2148   ret <4 x i32> %sel
   2149 }
   2150 
   2151 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
   2152 ; SSE2-LABEL: test71:
   2153 ; SSE2:       # BB#0: # %entry
   2154 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   2155 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   2156 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   2157 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   2158 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   2159 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2160 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2161 ; SSE2-NEXT:    por %xmm1, %xmm2
   2162 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2163 ; SSE2-NEXT:    retq
   2164 ;
   2165 ; SSE4-LABEL: test71:
   2166 ; SSE4:       # BB#0: # %entry
   2167 ; SSE4-NEXT:    pminud %xmm1, %xmm0
   2168 ; SSE4-NEXT:    retq
   2169 ;
   2170 ; AVX-LABEL: test71:
   2171 ; AVX:       # BB#0: # %entry
   2172 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   2173 ; AVX-NEXT:    retq
   2174 entry:
   2175   %cmp = icmp ugt <4 x i32> %a, %b
   2176   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2177   ret <4 x i32> %sel
   2178 }
   2179 
   2180 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
   2181 ; SSE2-LABEL: test72:
   2182 ; SSE2:       # BB#0: # %entry
   2183 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
   2184 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   2185 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2186 ; SSE2-NEXT:    pxor %xmm1, %xmm3
   2187 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
   2188 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   2189 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   2190 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   2191 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   2192 ; SSE2-NEXT:    por %xmm3, %xmm2
   2193 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2194 ; SSE2-NEXT:    retq
   2195 ;
   2196 ; SSE4-LABEL: test72:
   2197 ; SSE4:       # BB#0: # %entry
   2198 ; SSE4-NEXT:    pminud %xmm1, %xmm0
   2199 ; SSE4-NEXT:    retq
   2200 ;
   2201 ; AVX-LABEL: test72:
   2202 ; AVX:       # BB#0: # %entry
   2203 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   2204 ; AVX-NEXT:    retq
   2205 entry:
   2206   %cmp = icmp uge <4 x i32> %a, %b
   2207   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2208   ret <4 x i32> %sel
   2209 }
   2210 
   2211 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
   2212 ; SSE2-LABEL: test73:
   2213 ; SSE2:       # BB#0: # %entry
   2214 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   2215 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
   2216 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   2217 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm5
   2218 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2219 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2220 ; SSE2-NEXT:    por %xmm2, %xmm5
   2221 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2222 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2223 ; SSE2-NEXT:    por %xmm3, %xmm4
   2224 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2225 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2226 ; SSE2-NEXT:    retq
   2227 ;
   2228 ; SSE4-LABEL: test73:
   2229 ; SSE4:       # BB#0: # %entry
   2230 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
   2231 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
   2232 ; SSE4-NEXT:    retq
   2233 ;
   2234 ; AVX1-LABEL: test73:
   2235 ; AVX1:       # BB#0: # %entry
   2236 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2237 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2238 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
   2239 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   2240 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2241 ; AVX1-NEXT:    retq
   2242 ;
   2243 ; AVX2-LABEL: test73:
   2244 ; AVX2:       # BB#0: # %entry
   2245 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2246 ; AVX2-NEXT:    retq
   2247 ;
   2248 ; AVX512F-LABEL: test73:
   2249 ; AVX512F:       # BB#0: # %entry
   2250 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2251 ; AVX512F-NEXT:    retq
   2252 entry:
   2253   %cmp = icmp slt <32 x i8> %a, %b
   2254   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2255   ret <32 x i8> %sel
   2256 }
   2257 
   2258 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
   2259 ; SSE2-LABEL: test74:
   2260 ; SSE2:       # BB#0: # %entry
   2261 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   2262 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm6
   2263 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
   2264 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   2265 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   2266 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2267 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
   2268 ; SSE2-NEXT:    pxor %xmm5, %xmm7
   2269 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   2270 ; SSE2-NEXT:    pandn %xmm0, %xmm7
   2271 ; SSE2-NEXT:    por %xmm7, %xmm5
   2272 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   2273 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2274 ; SSE2-NEXT:    por %xmm6, %xmm4
   2275 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2276 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2277 ; SSE2-NEXT:    retq
   2278 ;
   2279 ; SSE4-LABEL: test74:
   2280 ; SSE4:       # BB#0: # %entry
   2281 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
   2282 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
   2283 ; SSE4-NEXT:    retq
   2284 ;
   2285 ; AVX1-LABEL: test74:
   2286 ; AVX1:       # BB#0: # %entry
   2287 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2288 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2289 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
   2290 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   2291 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2292 ; AVX1-NEXT:    retq
   2293 ;
   2294 ; AVX2-LABEL: test74:
   2295 ; AVX2:       # BB#0: # %entry
   2296 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2297 ; AVX2-NEXT:    retq
   2298 ;
   2299 ; AVX512F-LABEL: test74:
   2300 ; AVX512F:       # BB#0: # %entry
   2301 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2302 ; AVX512F-NEXT:    retq
   2303 entry:
   2304   %cmp = icmp sle <32 x i8> %a, %b
   2305   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2306   ret <32 x i8> %sel
   2307 }
   2308 
   2309 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
   2310 ; SSE2-LABEL: test75:
   2311 ; SSE2:       # BB#0: # %entry
   2312 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   2313 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
   2314 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2315 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
   2316 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2317 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2318 ; SSE2-NEXT:    por %xmm2, %xmm5
   2319 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2320 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2321 ; SSE2-NEXT:    por %xmm3, %xmm4
   2322 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2323 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2324 ; SSE2-NEXT:    retq
   2325 ;
   2326 ; SSE4-LABEL: test75:
   2327 ; SSE4:       # BB#0: # %entry
   2328 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
   2329 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
   2330 ; SSE4-NEXT:    retq
   2331 ;
   2332 ; AVX1-LABEL: test75:
   2333 ; AVX1:       # BB#0: # %entry
   2334 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2335 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2336 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
   2337 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   2338 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2339 ; AVX1-NEXT:    retq
   2340 ;
   2341 ; AVX2-LABEL: test75:
   2342 ; AVX2:       # BB#0: # %entry
   2343 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2344 ; AVX2-NEXT:    retq
   2345 ;
   2346 ; AVX512F-LABEL: test75:
   2347 ; AVX512F:       # BB#0: # %entry
   2348 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2349 ; AVX512F-NEXT:    retq
   2350 entry:
   2351   %cmp = icmp sgt <32 x i8> %a, %b
   2352   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2353   ret <32 x i8> %sel
   2354 }
   2355 
   2356 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
   2357 ; SSE2-LABEL: test76:
   2358 ; SSE2:       # BB#0: # %entry
   2359 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   2360 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm6
   2361 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   2362 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   2363 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   2364 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
   2365 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm7
   2366 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   2367 ; SSE2-NEXT:    pandn %xmm2, %xmm7
   2368 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   2369 ; SSE2-NEXT:    por %xmm7, %xmm4
   2370 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   2371 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   2372 ; SSE2-NEXT:    por %xmm6, %xmm5
   2373 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2374 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   2375 ; SSE2-NEXT:    retq
   2376 ;
   2377 ; SSE4-LABEL: test76:
   2378 ; SSE4:       # BB#0: # %entry
   2379 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
   2380 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
   2381 ; SSE4-NEXT:    retq
   2382 ;
   2383 ; AVX1-LABEL: test76:
   2384 ; AVX1:       # BB#0: # %entry
   2385 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2386 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2387 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
   2388 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   2389 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2390 ; AVX1-NEXT:    retq
   2391 ;
   2392 ; AVX2-LABEL: test76:
   2393 ; AVX2:       # BB#0: # %entry
   2394 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2395 ; AVX2-NEXT:    retq
   2396 ;
   2397 ; AVX512F-LABEL: test76:
   2398 ; AVX512F:       # BB#0: # %entry
   2399 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2400 ; AVX512F-NEXT:    retq
   2401 entry:
   2402   %cmp = icmp sge <32 x i8> %a, %b
   2403   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2404   ret <32 x i8> %sel
   2405 }
   2406 
   2407 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
   2408 ; SSE-LABEL: test77:
   2409 ; SSE:       # BB#0: # %entry
   2410 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
   2411 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
   2412 ; SSE-NEXT:    retq
   2413 ;
   2414 ; AVX1-LABEL: test77:
   2415 ; AVX1:       # BB#0: # %entry
   2416 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2417 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2418 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
   2419 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   2420 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2421 ; AVX1-NEXT:    retq
   2422 ;
   2423 ; AVX2-LABEL: test77:
   2424 ; AVX2:       # BB#0: # %entry
   2425 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2426 ; AVX2-NEXT:    retq
   2427 ;
   2428 ; AVX512F-LABEL: test77:
   2429 ; AVX512F:       # BB#0: # %entry
   2430 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2431 ; AVX512F-NEXT:    retq
   2432 entry:
   2433   %cmp = icmp ult <32 x i8> %a, %b
   2434   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2435   ret <32 x i8> %sel
   2436 }
   2437 
   2438 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
   2439 ; SSE-LABEL: test78:
   2440 ; SSE:       # BB#0: # %entry
   2441 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
   2442 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
   2443 ; SSE-NEXT:    retq
   2444 ;
   2445 ; AVX1-LABEL: test78:
   2446 ; AVX1:       # BB#0: # %entry
   2447 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2448 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2449 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
   2450 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   2451 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2452 ; AVX1-NEXT:    retq
   2453 ;
   2454 ; AVX2-LABEL: test78:
   2455 ; AVX2:       # BB#0: # %entry
   2456 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2457 ; AVX2-NEXT:    retq
   2458 ;
   2459 ; AVX512F-LABEL: test78:
   2460 ; AVX512F:       # BB#0: # %entry
   2461 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2462 ; AVX512F-NEXT:    retq
   2463 entry:
   2464   %cmp = icmp ule <32 x i8> %a, %b
   2465   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2466   ret <32 x i8> %sel
   2467 }
   2468 
   2469 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
   2470 ; SSE-LABEL: test79:
   2471 ; SSE:       # BB#0: # %entry
   2472 ; SSE-NEXT:    pminub %xmm2, %xmm0
   2473 ; SSE-NEXT:    pminub %xmm3, %xmm1
   2474 ; SSE-NEXT:    retq
   2475 ;
   2476 ; AVX1-LABEL: test79:
   2477 ; AVX1:       # BB#0: # %entry
   2478 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2479 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2480 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
   2481 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   2482 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2483 ; AVX1-NEXT:    retq
   2484 ;
   2485 ; AVX2-LABEL: test79:
   2486 ; AVX2:       # BB#0: # %entry
   2487 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2488 ; AVX2-NEXT:    retq
   2489 ;
   2490 ; AVX512F-LABEL: test79:
   2491 ; AVX512F:       # BB#0: # %entry
   2492 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2493 ; AVX512F-NEXT:    retq
   2494 entry:
   2495   %cmp = icmp ugt <32 x i8> %a, %b
   2496   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2497   ret <32 x i8> %sel
   2498 }
   2499 
   2500 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
   2501 ; SSE-LABEL: test80:
   2502 ; SSE:       # BB#0: # %entry
   2503 ; SSE-NEXT:    pminub %xmm2, %xmm0
   2504 ; SSE-NEXT:    pminub %xmm3, %xmm1
   2505 ; SSE-NEXT:    retq
   2506 ;
   2507 ; AVX1-LABEL: test80:
   2508 ; AVX1:       # BB#0: # %entry
   2509 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2510 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2511 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
   2512 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   2513 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2514 ; AVX1-NEXT:    retq
   2515 ;
   2516 ; AVX2-LABEL: test80:
   2517 ; AVX2:       # BB#0: # %entry
   2518 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2519 ; AVX2-NEXT:    retq
   2520 ;
   2521 ; AVX512F-LABEL: test80:
   2522 ; AVX512F:       # BB#0: # %entry
   2523 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2524 ; AVX512F-NEXT:    retq
   2525 entry:
   2526   %cmp = icmp uge <32 x i8> %a, %b
   2527   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2528   ret <32 x i8> %sel
   2529 }
   2530 
   2531 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
   2532 ; SSE-LABEL: test81:
   2533 ; SSE:       # BB#0: # %entry
   2534 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
   2535 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
   2536 ; SSE-NEXT:    retq
   2537 ;
   2538 ; AVX1-LABEL: test81:
   2539 ; AVX1:       # BB#0: # %entry
   2540 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2541 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2542 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
   2543 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   2544 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2545 ; AVX1-NEXT:    retq
   2546 ;
   2547 ; AVX2-LABEL: test81:
   2548 ; AVX2:       # BB#0: # %entry
   2549 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2550 ; AVX2-NEXT:    retq
   2551 ;
   2552 ; AVX512F-LABEL: test81:
   2553 ; AVX512F:       # BB#0: # %entry
   2554 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2555 ; AVX512F-NEXT:    retq
   2556 entry:
   2557   %cmp = icmp slt <16 x i16> %a, %b
   2558   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2559   ret <16 x i16> %sel
   2560 }
   2561 
   2562 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
   2563 ; SSE-LABEL: test82:
   2564 ; SSE:       # BB#0: # %entry
   2565 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
   2566 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
   2567 ; SSE-NEXT:    retq
   2568 ;
   2569 ; AVX1-LABEL: test82:
   2570 ; AVX1:       # BB#0: # %entry
   2571 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2572 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2573 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
   2574 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   2575 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2576 ; AVX1-NEXT:    retq
   2577 ;
   2578 ; AVX2-LABEL: test82:
   2579 ; AVX2:       # BB#0: # %entry
   2580 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2581 ; AVX2-NEXT:    retq
   2582 ;
   2583 ; AVX512F-LABEL: test82:
   2584 ; AVX512F:       # BB#0: # %entry
   2585 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2586 ; AVX512F-NEXT:    retq
   2587 entry:
   2588   %cmp = icmp sle <16 x i16> %a, %b
   2589   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2590   ret <16 x i16> %sel
   2591 }
   2592 
   2593 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
   2594 ; SSE-LABEL: test83:
   2595 ; SSE:       # BB#0: # %entry
   2596 ; SSE-NEXT:    pminsw %xmm2, %xmm0
   2597 ; SSE-NEXT:    pminsw %xmm3, %xmm1
   2598 ; SSE-NEXT:    retq
   2599 ;
   2600 ; AVX1-LABEL: test83:
   2601 ; AVX1:       # BB#0: # %entry
   2602 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2603 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2604 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
   2605 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   2606 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2607 ; AVX1-NEXT:    retq
   2608 ;
   2609 ; AVX2-LABEL: test83:
   2610 ; AVX2:       # BB#0: # %entry
   2611 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2612 ; AVX2-NEXT:    retq
   2613 ;
   2614 ; AVX512F-LABEL: test83:
   2615 ; AVX512F:       # BB#0: # %entry
   2616 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2617 ; AVX512F-NEXT:    retq
   2618 entry:
   2619   %cmp = icmp sgt <16 x i16> %a, %b
   2620   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2621   ret <16 x i16> %sel
   2622 }
   2623 
   2624 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
   2625 ; SSE-LABEL: test84:
   2626 ; SSE:       # BB#0: # %entry
   2627 ; SSE-NEXT:    pminsw %xmm2, %xmm0
   2628 ; SSE-NEXT:    pminsw %xmm3, %xmm1
   2629 ; SSE-NEXT:    retq
   2630 ;
   2631 ; AVX1-LABEL: test84:
   2632 ; AVX1:       # BB#0: # %entry
   2633 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2634 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2635 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
   2636 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   2637 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2638 ; AVX1-NEXT:    retq
   2639 ;
   2640 ; AVX2-LABEL: test84:
   2641 ; AVX2:       # BB#0: # %entry
   2642 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2643 ; AVX2-NEXT:    retq
   2644 ;
   2645 ; AVX512F-LABEL: test84:
   2646 ; AVX512F:       # BB#0: # %entry
   2647 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2648 ; AVX512F-NEXT:    retq
   2649 entry:
   2650   %cmp = icmp sge <16 x i16> %a, %b
   2651   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2652   ret <16 x i16> %sel
   2653 }
   2654 
   2655 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
   2656 ; SSE2-LABEL: test85:
   2657 ; SSE2:       # BB#0: # %entry
   2658 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   2659 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   2660 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   2661 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   2662 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   2663 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
   2664 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   2665 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   2666 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   2667 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
   2668 ; SSE2-NEXT:    pand %xmm4, %xmm2
   2669 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   2670 ; SSE2-NEXT:    por %xmm2, %xmm4
   2671 ; SSE2-NEXT:    pand %xmm5, %xmm3
   2672 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   2673 ; SSE2-NEXT:    por %xmm3, %xmm5
   2674 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2675 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   2676 ; SSE2-NEXT:    retq
   2677 ;
   2678 ; SSE4-LABEL: test85:
   2679 ; SSE4:       # BB#0: # %entry
   2680 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   2681 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   2682 ; SSE4-NEXT:    retq
   2683 ;
   2684 ; AVX1-LABEL: test85:
   2685 ; AVX1:       # BB#0: # %entry
   2686 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2687 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2688 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   2689 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   2690 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2691 ; AVX1-NEXT:    retq
   2692 ;
   2693 ; AVX2-LABEL: test85:
   2694 ; AVX2:       # BB#0: # %entry
   2695 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2696 ; AVX2-NEXT:    retq
   2697 ;
   2698 ; AVX512F-LABEL: test85:
   2699 ; AVX512F:       # BB#0: # %entry
   2700 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2701 ; AVX512F-NEXT:    retq
   2702 entry:
   2703   %cmp = icmp ult <16 x i16> %a, %b
   2704   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2705   ret <16 x i16> %sel
   2706 }
   2707 
   2708 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
   2709 ; SSE2-LABEL: test86:
   2710 ; SSE2:       # BB#0: # %entry
   2711 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   2712 ; SSE2-NEXT:    psubusw %xmm3, %xmm4
   2713 ; SSE2-NEXT:    pxor %xmm6, %xmm6
   2714 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
   2715 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2716 ; SSE2-NEXT:    psubusw %xmm2, %xmm5
   2717 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
   2718 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2719 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2720 ; SSE2-NEXT:    por %xmm2, %xmm5
   2721 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2722 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2723 ; SSE2-NEXT:    por %xmm3, %xmm4
   2724 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2725 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2726 ; SSE2-NEXT:    retq
   2727 ;
   2728 ; SSE4-LABEL: test86:
   2729 ; SSE4:       # BB#0: # %entry
   2730 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   2731 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   2732 ; SSE4-NEXT:    retq
   2733 ;
   2734 ; AVX1-LABEL: test86:
   2735 ; AVX1:       # BB#0: # %entry
   2736 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2737 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2738 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   2739 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   2740 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2741 ; AVX1-NEXT:    retq
   2742 ;
   2743 ; AVX2-LABEL: test86:
   2744 ; AVX2:       # BB#0: # %entry
   2745 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2746 ; AVX2-NEXT:    retq
   2747 ;
   2748 ; AVX512F-LABEL: test86:
   2749 ; AVX512F:       # BB#0: # %entry
   2750 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2751 ; AVX512F-NEXT:    retq
   2752 entry:
   2753   %cmp = icmp ule <16 x i16> %a, %b
   2754   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2755   ret <16 x i16> %sel
   2756 }
   2757 
   2758 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
   2759 ; SSE2-LABEL: test87:
   2760 ; SSE2:       # BB#0: # %entry
   2761 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   2762 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   2763 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   2764 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   2765 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   2766 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
   2767 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   2768 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   2769 ; SSE2-NEXT:    pxor %xmm0, %xmm4
   2770 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
   2771 ; SSE2-NEXT:    pand %xmm4, %xmm2
   2772 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   2773 ; SSE2-NEXT:    por %xmm2, %xmm4
   2774 ; SSE2-NEXT:    pand %xmm5, %xmm3
   2775 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   2776 ; SSE2-NEXT:    por %xmm3, %xmm5
   2777 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2778 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   2779 ; SSE2-NEXT:    retq
   2780 ;
   2781 ; SSE4-LABEL: test87:
   2782 ; SSE4:       # BB#0: # %entry
   2783 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   2784 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   2785 ; SSE4-NEXT:    retq
   2786 ;
   2787 ; AVX1-LABEL: test87:
   2788 ; AVX1:       # BB#0: # %entry
   2789 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2790 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2791 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   2792 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   2793 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2794 ; AVX1-NEXT:    retq
   2795 ;
   2796 ; AVX2-LABEL: test87:
   2797 ; AVX2:       # BB#0: # %entry
   2798 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2799 ; AVX2-NEXT:    retq
   2800 ;
   2801 ; AVX512F-LABEL: test87:
   2802 ; AVX512F:       # BB#0: # %entry
   2803 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2804 ; AVX512F-NEXT:    retq
   2805 entry:
   2806   %cmp = icmp ugt <16 x i16> %a, %b
   2807   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2808   ret <16 x i16> %sel
   2809 }
   2810 
   2811 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
   2812 ; SSE2-LABEL: test88:
   2813 ; SSE2:       # BB#0: # %entry
   2814 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   2815 ; SSE2-NEXT:    psubusw %xmm1, %xmm4
   2816 ; SSE2-NEXT:    pxor %xmm6, %xmm6
   2817 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
   2818 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   2819 ; SSE2-NEXT:    psubusw %xmm0, %xmm5
   2820 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
   2821 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2822 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2823 ; SSE2-NEXT:    por %xmm2, %xmm5
   2824 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2825 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2826 ; SSE2-NEXT:    por %xmm3, %xmm4
   2827 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2828 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2829 ; SSE2-NEXT:    retq
   2830 ;
   2831 ; SSE4-LABEL: test88:
   2832 ; SSE4:       # BB#0: # %entry
   2833 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   2834 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   2835 ; SSE4-NEXT:    retq
   2836 ;
   2837 ; AVX1-LABEL: test88:
   2838 ; AVX1:       # BB#0: # %entry
   2839 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2840 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2841 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   2842 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   2843 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2844 ; AVX1-NEXT:    retq
   2845 ;
   2846 ; AVX2-LABEL: test88:
   2847 ; AVX2:       # BB#0: # %entry
   2848 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2849 ; AVX2-NEXT:    retq
   2850 ;
   2851 ; AVX512F-LABEL: test88:
   2852 ; AVX512F:       # BB#0: # %entry
   2853 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2854 ; AVX512F-NEXT:    retq
   2855 entry:
   2856   %cmp = icmp uge <16 x i16> %a, %b
   2857   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2858   ret <16 x i16> %sel
   2859 }
   2860 
   2861 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
   2862 ; SSE2-LABEL: test89:
   2863 ; SSE2:       # BB#0: # %entry
   2864 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   2865 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   2866 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   2867 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   2868 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2869 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2870 ; SSE2-NEXT:    por %xmm2, %xmm5
   2871 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2872 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2873 ; SSE2-NEXT:    por %xmm3, %xmm4
   2874 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2875 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2876 ; SSE2-NEXT:    retq
   2877 ;
   2878 ; SSE4-LABEL: test89:
   2879 ; SSE4:       # BB#0: # %entry
   2880 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   2881 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   2882 ; SSE4-NEXT:    retq
   2883 ;
   2884 ; AVX1-LABEL: test89:
   2885 ; AVX1:       # BB#0: # %entry
   2886 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2887 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2888 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   2889 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2890 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2891 ; AVX1-NEXT:    retq
   2892 ;
   2893 ; AVX2-LABEL: test89:
   2894 ; AVX2:       # BB#0: # %entry
   2895 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2896 ; AVX2-NEXT:    retq
   2897 ;
   2898 ; AVX512F-LABEL: test89:
   2899 ; AVX512F:       # BB#0: # %entry
   2900 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2901 ; AVX512F-NEXT:    retq
   2902 entry:
   2903   %cmp = icmp slt <8 x i32> %a, %b
   2904   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2905   ret <8 x i32> %sel
   2906 }
   2907 
   2908 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
   2909 ; SSE2-LABEL: test90:
   2910 ; SSE2:       # BB#0: # %entry
   2911 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   2912 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
   2913 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
   2914 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   2915 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   2916 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2917 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   2918 ; SSE2-NEXT:    pxor %xmm5, %xmm7
   2919 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   2920 ; SSE2-NEXT:    pandn %xmm0, %xmm7
   2921 ; SSE2-NEXT:    por %xmm7, %xmm5
   2922 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   2923 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2924 ; SSE2-NEXT:    por %xmm6, %xmm4
   2925 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2926 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2927 ; SSE2-NEXT:    retq
   2928 ;
   2929 ; SSE4-LABEL: test90:
   2930 ; SSE4:       # BB#0: # %entry
   2931 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   2932 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   2933 ; SSE4-NEXT:    retq
   2934 ;
   2935 ; AVX1-LABEL: test90:
   2936 ; AVX1:       # BB#0: # %entry
   2937 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2938 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2939 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   2940 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2941 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2942 ; AVX1-NEXT:    retq
   2943 ;
   2944 ; AVX2-LABEL: test90:
   2945 ; AVX2:       # BB#0: # %entry
   2946 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2947 ; AVX2-NEXT:    retq
   2948 ;
   2949 ; AVX512F-LABEL: test90:
   2950 ; AVX512F:       # BB#0: # %entry
   2951 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2952 ; AVX512F-NEXT:    retq
   2953 entry:
   2954   %cmp = icmp sle <8 x i32> %a, %b
   2955   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2956   ret <8 x i32> %sel
   2957 }
   2958 
   2959 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
   2960 ; SSE2-LABEL: test91:
   2961 ; SSE2:       # BB#0: # %entry
   2962 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   2963 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   2964 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2965 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   2966 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2967 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   2968 ; SSE2-NEXT:    por %xmm2, %xmm5
   2969 ; SSE2-NEXT:    pand %xmm4, %xmm3
   2970 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   2971 ; SSE2-NEXT:    por %xmm3, %xmm4
   2972 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   2973 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   2974 ; SSE2-NEXT:    retq
   2975 ;
   2976 ; SSE4-LABEL: test91:
   2977 ; SSE4:       # BB#0: # %entry
   2978 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   2979 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   2980 ; SSE4-NEXT:    retq
   2981 ;
   2982 ; AVX1-LABEL: test91:
   2983 ; AVX1:       # BB#0: # %entry
   2984 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2985 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2986 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   2987 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   2988 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2989 ; AVX1-NEXT:    retq
   2990 ;
   2991 ; AVX2-LABEL: test91:
   2992 ; AVX2:       # BB#0: # %entry
   2993 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2994 ; AVX2-NEXT:    retq
   2995 ;
   2996 ; AVX512F-LABEL: test91:
   2997 ; AVX512F:       # BB#0: # %entry
   2998 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2999 ; AVX512F-NEXT:    retq
   3000 entry:
   3001   %cmp = icmp sgt <8 x i32> %a, %b
   3002   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3003   ret <8 x i32> %sel
   3004 }
   3005 
   3006 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
   3007 ; SSE2-LABEL: test92:
   3008 ; SSE2:       # BB#0: # %entry
   3009 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   3010 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
   3011 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   3012 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   3013 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3014 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
   3015 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm7
   3016 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   3017 ; SSE2-NEXT:    pandn %xmm2, %xmm7
   3018 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3019 ; SSE2-NEXT:    por %xmm7, %xmm4
   3020 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   3021 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3022 ; SSE2-NEXT:    por %xmm6, %xmm5
   3023 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3024 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3025 ; SSE2-NEXT:    retq
   3026 ;
   3027 ; SSE4-LABEL: test92:
   3028 ; SSE4:       # BB#0: # %entry
   3029 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   3030 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   3031 ; SSE4-NEXT:    retq
   3032 ;
   3033 ; AVX1-LABEL: test92:
   3034 ; AVX1:       # BB#0: # %entry
   3035 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3036 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3037 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   3038 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   3039 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3040 ; AVX1-NEXT:    retq
   3041 ;
   3042 ; AVX2-LABEL: test92:
   3043 ; AVX2:       # BB#0: # %entry
   3044 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   3045 ; AVX2-NEXT:    retq
   3046 ;
   3047 ; AVX512F-LABEL: test92:
   3048 ; AVX512F:       # BB#0: # %entry
   3049 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   3050 ; AVX512F-NEXT:    retq
   3051 entry:
   3052   %cmp = icmp sge <8 x i32> %a, %b
   3053   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3054   ret <8 x i32> %sel
   3055 }
   3056 
   3057 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
   3058 ; SSE2-LABEL: test93:
   3059 ; SSE2:       # BB#0: # %entry
   3060 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   3061 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   3062 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   3063 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   3064 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3065 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   3066 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   3067 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   3068 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   3069 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   3070 ; SSE2-NEXT:    pand %xmm4, %xmm2
   3071 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3072 ; SSE2-NEXT:    por %xmm2, %xmm4
   3073 ; SSE2-NEXT:    pand %xmm5, %xmm3
   3074 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3075 ; SSE2-NEXT:    por %xmm3, %xmm5
   3076 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3077 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3078 ; SSE2-NEXT:    retq
   3079 ;
   3080 ; SSE4-LABEL: test93:
   3081 ; SSE4:       # BB#0: # %entry
   3082 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   3083 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   3084 ; SSE4-NEXT:    retq
   3085 ;
   3086 ; AVX1-LABEL: test93:
   3087 ; AVX1:       # BB#0: # %entry
   3088 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3089 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3090 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   3091 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   3092 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3093 ; AVX1-NEXT:    retq
   3094 ;
   3095 ; AVX2-LABEL: test93:
   3096 ; AVX2:       # BB#0: # %entry
   3097 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   3098 ; AVX2-NEXT:    retq
   3099 ;
   3100 ; AVX512F-LABEL: test93:
   3101 ; AVX512F:       # BB#0: # %entry
   3102 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   3103 ; AVX512F-NEXT:    retq
   3104 entry:
   3105   %cmp = icmp ult <8 x i32> %a, %b
   3106   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3107   ret <8 x i32> %sel
   3108 }
   3109 
   3110 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
   3111 ; SSE2-LABEL: test94:
   3112 ; SSE2:       # BB#0: # %entry
   3113 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
   3114 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   3115 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   3116 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
   3117 ; SSE2-NEXT:    pxor %xmm6, %xmm7
   3118 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   3119 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   3120 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   3121 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3122 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   3123 ; SSE2-NEXT:    pxor %xmm6, %xmm8
   3124 ; SSE2-NEXT:    pxor %xmm0, %xmm6
   3125 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
   3126 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   3127 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   3128 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3129 ; SSE2-NEXT:    por %xmm6, %xmm4
   3130 ; SSE2-NEXT:    pandn %xmm3, %xmm7
   3131 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3132 ; SSE2-NEXT:    por %xmm7, %xmm5
   3133 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3134 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3135 ; SSE2-NEXT:    retq
   3136 ;
   3137 ; SSE4-LABEL: test94:
   3138 ; SSE4:       # BB#0: # %entry
   3139 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   3140 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   3141 ; SSE4-NEXT:    retq
   3142 ;
   3143 ; AVX1-LABEL: test94:
   3144 ; AVX1:       # BB#0: # %entry
   3145 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3146 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3147 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   3148 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   3149 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3150 ; AVX1-NEXT:    retq
   3151 ;
   3152 ; AVX2-LABEL: test94:
   3153 ; AVX2:       # BB#0: # %entry
   3154 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   3155 ; AVX2-NEXT:    retq
   3156 ;
   3157 ; AVX512F-LABEL: test94:
   3158 ; AVX512F:       # BB#0: # %entry
   3159 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   3160 ; AVX512F-NEXT:    retq
   3161 entry:
   3162   %cmp = icmp ule <8 x i32> %a, %b
   3163   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3164   ret <8 x i32> %sel
   3165 }
   3166 
   3167 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
   3168 ; SSE2-LABEL: test95:
   3169 ; SSE2:       # BB#0: # %entry
   3170 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   3171 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   3172 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   3173 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   3174 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3175 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   3176 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   3177 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   3178 ; SSE2-NEXT:    pxor %xmm0, %xmm4
   3179 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   3180 ; SSE2-NEXT:    pand %xmm4, %xmm2
   3181 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3182 ; SSE2-NEXT:    por %xmm2, %xmm4
   3183 ; SSE2-NEXT:    pand %xmm5, %xmm3
   3184 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3185 ; SSE2-NEXT:    por %xmm3, %xmm5
   3186 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3187 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3188 ; SSE2-NEXT:    retq
   3189 ;
   3190 ; SSE4-LABEL: test95:
   3191 ; SSE4:       # BB#0: # %entry
   3192 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   3193 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   3194 ; SSE4-NEXT:    retq
   3195 ;
   3196 ; AVX1-LABEL: test95:
   3197 ; AVX1:       # BB#0: # %entry
   3198 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3199 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3200 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   3201 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   3202 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3203 ; AVX1-NEXT:    retq
   3204 ;
   3205 ; AVX2-LABEL: test95:
   3206 ; AVX2:       # BB#0: # %entry
   3207 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3208 ; AVX2-NEXT:    retq
   3209 ;
   3210 ; AVX512F-LABEL: test95:
   3211 ; AVX512F:       # BB#0: # %entry
   3212 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3213 ; AVX512F-NEXT:    retq
   3214 entry:
   3215   %cmp = icmp ugt <8 x i32> %a, %b
   3216   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3217   ret <8 x i32> %sel
   3218 }
   3219 
   3220 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
   3221 ; SSE2-LABEL: test96:
   3222 ; SSE2:       # BB#0: # %entry
   3223 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
   3224 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   3225 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   3226 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   3227 ; SSE2-NEXT:    pxor %xmm6, %xmm7
   3228 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   3229 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   3230 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   3231 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3232 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   3233 ; SSE2-NEXT:    pxor %xmm6, %xmm8
   3234 ; SSE2-NEXT:    pxor %xmm2, %xmm6
   3235 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
   3236 ; SSE2-NEXT:    pxor %xmm6, %xmm4
   3237 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   3238 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   3239 ; SSE2-NEXT:    por %xmm6, %xmm4
   3240 ; SSE2-NEXT:    pandn %xmm3, %xmm7
   3241 ; SSE2-NEXT:    pandn %xmm1, %xmm5
   3242 ; SSE2-NEXT:    por %xmm7, %xmm5
   3243 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   3244 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   3245 ; SSE2-NEXT:    retq
   3246 ;
   3247 ; SSE4-LABEL: test96:
   3248 ; SSE4:       # BB#0: # %entry
   3249 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   3250 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   3251 ; SSE4-NEXT:    retq
   3252 ;
   3253 ; AVX1-LABEL: test96:
   3254 ; AVX1:       # BB#0: # %entry
   3255 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3256 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3257 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   3258 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   3259 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3260 ; AVX1-NEXT:    retq
   3261 ;
   3262 ; AVX2-LABEL: test96:
   3263 ; AVX2:       # BB#0: # %entry
   3264 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3265 ; AVX2-NEXT:    retq
   3266 ;
   3267 ; AVX512F-LABEL: test96:
   3268 ; AVX512F:       # BB#0: # %entry
   3269 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3270 ; AVX512F-NEXT:    retq
   3271 entry:
   3272   %cmp = icmp uge <8 x i32> %a, %b
   3273   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3274   ret <8 x i32> %sel
   3275 }
   3276 
   3277 ; ----------------------------
   3278 
   3279 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
   3280 ; SSE2-LABEL: test97:
   3281 ; SSE2:       # BB#0: # %entry
   3282 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   3283 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm8
   3284 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   3285 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm9
   3286 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   3287 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm10
   3288 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   3289 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm11
   3290 ; SSE2-NEXT:    pand %xmm11, %xmm0
   3291 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   3292 ; SSE2-NEXT:    por %xmm11, %xmm0
   3293 ; SSE2-NEXT:    pand %xmm10, %xmm1
   3294 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   3295 ; SSE2-NEXT:    por %xmm10, %xmm1
   3296 ; SSE2-NEXT:    pand %xmm9, %xmm2
   3297 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   3298 ; SSE2-NEXT:    por %xmm9, %xmm2
   3299 ; SSE2-NEXT:    pand %xmm8, %xmm3
   3300 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   3301 ; SSE2-NEXT:    por %xmm8, %xmm3
   3302 ; SSE2-NEXT:    retq
   3303 ;
   3304 ; SSE4-LABEL: test97:
   3305 ; SSE4:       # BB#0: # %entry
   3306 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   3307 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   3308 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   3309 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   3310 ; SSE4-NEXT:    retq
   3311 ;
   3312 ; AVX1-LABEL: test97:
   3313 ; AVX1:       # BB#0: # %entry
   3314 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3315 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3316 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   3317 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   3318 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3319 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3320 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3321 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   3322 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   3323 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3324 ; AVX1-NEXT:    retq
   3325 ;
   3326 ; AVX2-LABEL: test97:
   3327 ; AVX2:       # BB#0: # %entry
   3328 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   3329 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   3330 ; AVX2-NEXT:    retq
   3331 ;
   3332 ; AVX512BW-LABEL: test97:
   3333 ; AVX512BW:       # BB#0: # %entry
   3334 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   3335 ; AVX512BW-NEXT:    retq
   3336 entry:
   3337   %cmp = icmp slt <64 x i8> %a, %b
   3338   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3339   ret <64 x i8> %sel
   3340 }
   3341 
   3342 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
   3343 ; SSE2-LABEL: test98:
   3344 ; SSE2:       # BB#0: # %entry
   3345 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   3346 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   3347 ; SSE2-NEXT:    movdqa %xmm8, %xmm12
   3348 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm12
   3349 ; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
   3350 ; SSE2-NEXT:    movdqa %xmm12, %xmm3
   3351 ; SSE2-NEXT:    pxor %xmm13, %xmm3
   3352 ; SSE2-NEXT:    movdqa %xmm9, %xmm14
   3353 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm14
   3354 ; SSE2-NEXT:    movdqa %xmm14, %xmm2
   3355 ; SSE2-NEXT:    pxor %xmm13, %xmm2
   3356 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   3357 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm15
   3358 ; SSE2-NEXT:    movdqa %xmm15, %xmm10
   3359 ; SSE2-NEXT:    pxor %xmm13, %xmm10
   3360 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   3361 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
   3362 ; SSE2-NEXT:    pxor %xmm11, %xmm13
   3363 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   3364 ; SSE2-NEXT:    pandn %xmm4, %xmm13
   3365 ; SSE2-NEXT:    por %xmm13, %xmm11
   3366 ; SSE2-NEXT:    pandn %xmm1, %xmm15
   3367 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   3368 ; SSE2-NEXT:    por %xmm15, %xmm10
   3369 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   3370 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   3371 ; SSE2-NEXT:    por %xmm14, %xmm2
   3372 ; SSE2-NEXT:    pandn %xmm8, %xmm12
   3373 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   3374 ; SSE2-NEXT:    por %xmm12, %xmm3
   3375 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   3376 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   3377 ; SSE2-NEXT:    retq
   3378 ;
   3379 ; SSE4-LABEL: test98:
   3380 ; SSE4:       # BB#0: # %entry
   3381 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   3382 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   3383 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   3384 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   3385 ; SSE4-NEXT:    retq
   3386 ;
   3387 ; AVX1-LABEL: test98:
   3388 ; AVX1:       # BB#0: # %entry
   3389 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3390 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3391 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   3392 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   3393 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3394 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3395 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3396 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   3397 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   3398 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3399 ; AVX1-NEXT:    retq
   3400 ;
   3401 ; AVX2-LABEL: test98:
   3402 ; AVX2:       # BB#0: # %entry
   3403 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   3404 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   3405 ; AVX2-NEXT:    retq
   3406 ;
   3407 ; AVX512BW-LABEL: test98:
   3408 ; AVX512BW:       # BB#0: # %entry
   3409 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   3410 ; AVX512BW-NEXT:    retq
   3411 entry:
   3412   %cmp = icmp sle <64 x i8> %a, %b
   3413   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3414   ret <64 x i8> %sel
   3415 }
   3416 
   3417 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
   3418 ; SSE2-LABEL: test99:
   3419 ; SSE2:       # BB#0: # %entry
   3420 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   3421 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
   3422 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   3423 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm9
   3424 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   3425 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm10
   3426 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   3427 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
   3428 ; SSE2-NEXT:    pand %xmm11, %xmm0
   3429 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   3430 ; SSE2-NEXT:    por %xmm0, %xmm11
   3431 ; SSE2-NEXT:    pand %xmm10, %xmm1
   3432 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   3433 ; SSE2-NEXT:    por %xmm1, %xmm10
   3434 ; SSE2-NEXT:    pand %xmm9, %xmm2
   3435 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   3436 ; SSE2-NEXT:    por %xmm2, %xmm9
   3437 ; SSE2-NEXT:    pand %xmm3, %xmm8
   3438 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   3439 ; SSE2-NEXT:    por %xmm8, %xmm3
   3440 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   3441 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   3442 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   3443 ; SSE2-NEXT:    retq
   3444 ;
   3445 ; SSE4-LABEL: test99:
   3446 ; SSE4:       # BB#0: # %entry
   3447 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   3448 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   3449 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   3450 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   3451 ; SSE4-NEXT:    retq
   3452 ;
   3453 ; AVX1-LABEL: test99:
   3454 ; AVX1:       # BB#0: # %entry
   3455 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3456 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3457 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   3458 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   3459 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3460 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3461 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3462 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   3463 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   3464 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3465 ; AVX1-NEXT:    retq
   3466 ;
   3467 ; AVX2-LABEL: test99:
   3468 ; AVX2:       # BB#0: # %entry
   3469 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   3470 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   3471 ; AVX2-NEXT:    retq
   3472 ;
   3473 ; AVX512BW-LABEL: test99:
   3474 ; AVX512BW:       # BB#0: # %entry
   3475 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   3476 ; AVX512BW-NEXT:    retq
   3477 entry:
   3478   %cmp = icmp sgt <64 x i8> %a, %b
   3479   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3480   ret <64 x i8> %sel
   3481 }
   3482 
   3483 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
   3484 ; SSE2-LABEL: test100:
   3485 ; SSE2:       # BB#0: # %entry
   3486 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   3487 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   3488 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   3489 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   3490 ; SSE2-NEXT:    pcmpgtb %xmm8, %xmm12
   3491 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   3492 ; SSE2-NEXT:    movdqa %xmm12, %xmm3
   3493 ; SSE2-NEXT:    pxor %xmm0, %xmm3
   3494 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   3495 ; SSE2-NEXT:    pcmpgtb %xmm9, %xmm13
   3496 ; SSE2-NEXT:    movdqa %xmm13, %xmm2
   3497 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   3498 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   3499 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm14
   3500 ; SSE2-NEXT:    movdqa %xmm14, %xmm11
   3501 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   3502 ; SSE2-NEXT:    movdqa %xmm4, %xmm15
   3503 ; SSE2-NEXT:    pcmpgtb %xmm10, %xmm15
   3504 ; SSE2-NEXT:    pxor %xmm15, %xmm0
   3505 ; SSE2-NEXT:    pandn %xmm10, %xmm15
   3506 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   3507 ; SSE2-NEXT:    por %xmm15, %xmm0
   3508 ; SSE2-NEXT:    pandn %xmm1, %xmm14
   3509 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   3510 ; SSE2-NEXT:    por %xmm14, %xmm11
   3511 ; SSE2-NEXT:    pandn %xmm9, %xmm13
   3512 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   3513 ; SSE2-NEXT:    por %xmm13, %xmm2
   3514 ; SSE2-NEXT:    pandn %xmm8, %xmm12
   3515 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   3516 ; SSE2-NEXT:    por %xmm12, %xmm3
   3517 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   3518 ; SSE2-NEXT:    retq
   3519 ;
   3520 ; SSE4-LABEL: test100:
   3521 ; SSE4:       # BB#0: # %entry
   3522 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   3523 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   3524 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   3525 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   3526 ; SSE4-NEXT:    retq
   3527 ;
   3528 ; AVX1-LABEL: test100:
   3529 ; AVX1:       # BB#0: # %entry
   3530 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3531 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3532 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   3533 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   3534 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3535 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3536 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3537 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   3538 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   3539 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3540 ; AVX1-NEXT:    retq
   3541 ;
   3542 ; AVX2-LABEL: test100:
   3543 ; AVX2:       # BB#0: # %entry
   3544 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   3545 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   3546 ; AVX2-NEXT:    retq
   3547 ;
   3548 ; AVX512BW-LABEL: test100:
   3549 ; AVX512BW:       # BB#0: # %entry
   3550 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   3551 ; AVX512BW-NEXT:    retq
   3552 entry:
   3553   %cmp = icmp sge <64 x i8> %a, %b
   3554   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3555   ret <64 x i8> %sel
   3556 }
   3557 
   3558 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
   3559 ; SSE-LABEL: test101:
   3560 ; SSE:       # BB#0: # %entry
   3561 ; SSE-NEXT:    pminub %xmm4, %xmm0
   3562 ; SSE-NEXT:    pminub %xmm5, %xmm1
   3563 ; SSE-NEXT:    pminub %xmm6, %xmm2
   3564 ; SSE-NEXT:    pminub %xmm7, %xmm3
   3565 ; SSE-NEXT:    retq
   3566 ;
   3567 ; AVX1-LABEL: test101:
   3568 ; AVX1:       # BB#0: # %entry
   3569 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3570 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3571 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   3572 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   3573 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3574 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3575 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3576 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   3577 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   3578 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3579 ; AVX1-NEXT:    retq
   3580 ;
   3581 ; AVX2-LABEL: test101:
   3582 ; AVX2:       # BB#0: # %entry
   3583 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   3584 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   3585 ; AVX2-NEXT:    retq
   3586 ;
   3587 ; AVX512BW-LABEL: test101:
   3588 ; AVX512BW:       # BB#0: # %entry
   3589 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   3590 ; AVX512BW-NEXT:    retq
   3591 entry:
   3592   %cmp = icmp ult <64 x i8> %a, %b
   3593   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3594   ret <64 x i8> %sel
   3595 }
   3596 
   3597 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
   3598 ; SSE-LABEL: test102:
   3599 ; SSE:       # BB#0: # %entry
   3600 ; SSE-NEXT:    pminub %xmm4, %xmm0
   3601 ; SSE-NEXT:    pminub %xmm5, %xmm1
   3602 ; SSE-NEXT:    pminub %xmm6, %xmm2
   3603 ; SSE-NEXT:    pminub %xmm7, %xmm3
   3604 ; SSE-NEXT:    retq
   3605 ;
   3606 ; AVX1-LABEL: test102:
   3607 ; AVX1:       # BB#0: # %entry
   3608 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3609 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3610 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   3611 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   3612 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3613 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3614 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3615 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   3616 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   3617 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3618 ; AVX1-NEXT:    retq
   3619 ;
   3620 ; AVX2-LABEL: test102:
   3621 ; AVX2:       # BB#0: # %entry
   3622 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   3623 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   3624 ; AVX2-NEXT:    retq
   3625 ;
   3626 ; AVX512BW-LABEL: test102:
   3627 ; AVX512BW:       # BB#0: # %entry
   3628 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   3629 ; AVX512BW-NEXT:    retq
   3630 entry:
   3631   %cmp = icmp ule <64 x i8> %a, %b
   3632   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3633   ret <64 x i8> %sel
   3634 }
   3635 
   3636 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
   3637 ; SSE-LABEL: test103:
   3638 ; SSE:       # BB#0: # %entry
   3639 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   3640 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   3641 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   3642 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   3643 ; SSE-NEXT:    retq
   3644 ;
   3645 ; AVX1-LABEL: test103:
   3646 ; AVX1:       # BB#0: # %entry
   3647 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3648 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3649 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   3650 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   3651 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3652 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3653 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3654 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   3655 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   3656 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3657 ; AVX1-NEXT:    retq
   3658 ;
   3659 ; AVX2-LABEL: test103:
   3660 ; AVX2:       # BB#0: # %entry
   3661 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   3662 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   3663 ; AVX2-NEXT:    retq
   3664 ;
   3665 ; AVX512BW-LABEL: test103:
   3666 ; AVX512BW:       # BB#0: # %entry
   3667 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   3668 ; AVX512BW-NEXT:    retq
   3669 entry:
   3670   %cmp = icmp ugt <64 x i8> %a, %b
   3671   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3672   ret <64 x i8> %sel
   3673 }
   3674 
   3675 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
   3676 ; SSE-LABEL: test104:
   3677 ; SSE:       # BB#0: # %entry
   3678 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   3679 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   3680 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   3681 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   3682 ; SSE-NEXT:    retq
   3683 ;
   3684 ; AVX1-LABEL: test104:
   3685 ; AVX1:       # BB#0: # %entry
   3686 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3687 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3688 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   3689 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   3690 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3691 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3692 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3693 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   3694 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   3695 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3696 ; AVX1-NEXT:    retq
   3697 ;
   3698 ; AVX2-LABEL: test104:
   3699 ; AVX2:       # BB#0: # %entry
   3700 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   3701 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   3702 ; AVX2-NEXT:    retq
   3703 ;
   3704 ; AVX512BW-LABEL: test104:
   3705 ; AVX512BW:       # BB#0: # %entry
   3706 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   3707 ; AVX512BW-NEXT:    retq
   3708 entry:
   3709   %cmp = icmp uge <64 x i8> %a, %b
   3710   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3711   ret <64 x i8> %sel
   3712 }
   3713 
   3714 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
   3715 ; SSE-LABEL: test105:
   3716 ; SSE:       # BB#0: # %entry
   3717 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   3718 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   3719 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   3720 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   3721 ; SSE-NEXT:    retq
   3722 ;
   3723 ; AVX1-LABEL: test105:
   3724 ; AVX1:       # BB#0: # %entry
   3725 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3726 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3727 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   3728 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   3729 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3730 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3731 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3732 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   3733 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   3734 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3735 ; AVX1-NEXT:    retq
   3736 ;
   3737 ; AVX2-LABEL: test105:
   3738 ; AVX2:       # BB#0: # %entry
   3739 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   3740 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   3741 ; AVX2-NEXT:    retq
   3742 ;
   3743 ; AVX512BW-LABEL: test105:
   3744 ; AVX512BW:       # BB#0: # %entry
   3745 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   3746 ; AVX512BW-NEXT:    retq
   3747 entry:
   3748   %cmp = icmp slt <32 x i16> %a, %b
   3749   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3750   ret <32 x i16> %sel
   3751 }
   3752 
   3753 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
   3754 ; SSE-LABEL: test106:
   3755 ; SSE:       # BB#0: # %entry
   3756 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   3757 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   3758 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   3759 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   3760 ; SSE-NEXT:    retq
   3761 ;
   3762 ; AVX1-LABEL: test106:
   3763 ; AVX1:       # BB#0: # %entry
   3764 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3765 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3766 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   3767 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   3768 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3769 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3770 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3771 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   3772 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   3773 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3774 ; AVX1-NEXT:    retq
   3775 ;
   3776 ; AVX2-LABEL: test106:
   3777 ; AVX2:       # BB#0: # %entry
   3778 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   3779 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   3780 ; AVX2-NEXT:    retq
   3781 ;
   3782 ; AVX512BW-LABEL: test106:
   3783 ; AVX512BW:       # BB#0: # %entry
   3784 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   3785 ; AVX512BW-NEXT:    retq
   3786 entry:
   3787   %cmp = icmp sle <32 x i16> %a, %b
   3788   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3789   ret <32 x i16> %sel
   3790 }
   3791 
   3792 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
   3793 ; SSE-LABEL: test107:
   3794 ; SSE:       # BB#0: # %entry
   3795 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   3796 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   3797 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   3798 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   3799 ; SSE-NEXT:    retq
   3800 ;
   3801 ; AVX1-LABEL: test107:
   3802 ; AVX1:       # BB#0: # %entry
   3803 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3804 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3805 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   3806 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   3807 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3808 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3809 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3810 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   3811 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   3812 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3813 ; AVX1-NEXT:    retq
   3814 ;
   3815 ; AVX2-LABEL: test107:
   3816 ; AVX2:       # BB#0: # %entry
   3817 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   3818 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   3819 ; AVX2-NEXT:    retq
   3820 ;
   3821 ; AVX512BW-LABEL: test107:
   3822 ; AVX512BW:       # BB#0: # %entry
   3823 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   3824 ; AVX512BW-NEXT:    retq
   3825 entry:
   3826   %cmp = icmp sgt <32 x i16> %a, %b
   3827   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3828   ret <32 x i16> %sel
   3829 }
   3830 
   3831 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
   3832 ; SSE-LABEL: test108:
   3833 ; SSE:       # BB#0: # %entry
   3834 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   3835 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   3836 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   3837 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   3838 ; SSE-NEXT:    retq
   3839 ;
   3840 ; AVX1-LABEL: test108:
   3841 ; AVX1:       # BB#0: # %entry
   3842 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3843 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3844 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   3845 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   3846 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3847 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3848 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3849 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   3850 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   3851 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3852 ; AVX1-NEXT:    retq
   3853 ;
   3854 ; AVX2-LABEL: test108:
   3855 ; AVX2:       # BB#0: # %entry
   3856 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   3857 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   3858 ; AVX2-NEXT:    retq
   3859 ;
   3860 ; AVX512BW-LABEL: test108:
   3861 ; AVX512BW:       # BB#0: # %entry
   3862 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   3863 ; AVX512BW-NEXT:    retq
   3864 entry:
   3865   %cmp = icmp sge <32 x i16> %a, %b
   3866   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3867   ret <32 x i16> %sel
   3868 }
   3869 
   3870 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
   3871 ; SSE2-LABEL: test109:
   3872 ; SSE2:       # BB#0: # %entry
   3873 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [32768,32768,32768,32768,32768,32768,32768,32768]
   3874 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   3875 ; SSE2-NEXT:    pxor %xmm10, %xmm9
   3876 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   3877 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   3878 ; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
   3879 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   3880 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   3881 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   3882 ; SSE2-NEXT:    pxor %xmm10, %xmm9
   3883 ; SSE2-NEXT:    pcmpgtw %xmm11, %xmm9
   3884 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   3885 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   3886 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   3887 ; SSE2-NEXT:    pxor %xmm10, %xmm12
   3888 ; SSE2-NEXT:    pcmpgtw %xmm11, %xmm12
   3889 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   3890 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   3891 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   3892 ; SSE2-NEXT:    pcmpgtw %xmm11, %xmm10
   3893 ; SSE2-NEXT:    pand %xmm10, %xmm0
   3894 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   3895 ; SSE2-NEXT:    por %xmm10, %xmm0
   3896 ; SSE2-NEXT:    pand %xmm12, %xmm1
   3897 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   3898 ; SSE2-NEXT:    por %xmm12, %xmm1
   3899 ; SSE2-NEXT:    pand %xmm9, %xmm2
   3900 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   3901 ; SSE2-NEXT:    por %xmm9, %xmm2
   3902 ; SSE2-NEXT:    pand %xmm8, %xmm3
   3903 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   3904 ; SSE2-NEXT:    por %xmm8, %xmm3
   3905 ; SSE2-NEXT:    retq
   3906 ;
   3907 ; SSE4-LABEL: test109:
   3908 ; SSE4:       # BB#0: # %entry
   3909 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   3910 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   3911 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   3912 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   3913 ; SSE4-NEXT:    retq
   3914 ;
   3915 ; AVX1-LABEL: test109:
   3916 ; AVX1:       # BB#0: # %entry
   3917 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3918 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3919 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   3920 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   3921 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3922 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3923 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3924 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   3925 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   3926 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3927 ; AVX1-NEXT:    retq
   3928 ;
   3929 ; AVX2-LABEL: test109:
   3930 ; AVX2:       # BB#0: # %entry
   3931 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   3932 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   3933 ; AVX2-NEXT:    retq
   3934 ;
   3935 ; AVX512BW-LABEL: test109:
   3936 ; AVX512BW:       # BB#0: # %entry
   3937 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   3938 ; AVX512BW-NEXT:    retq
   3939 entry:
   3940   %cmp = icmp ult <32 x i16> %a, %b
   3941   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3942   ret <32 x i16> %sel
   3943 }
   3944 
   3945 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
   3946 ; SSE2-LABEL: test110:
   3947 ; SSE2:       # BB#0: # %entry
   3948 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   3949 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   3950 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   3951 ; SSE2-NEXT:    psubusw %xmm7, %xmm3
   3952 ; SSE2-NEXT:    pxor %xmm12, %xmm12
   3953 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm3
   3954 ; SSE2-NEXT:    psubusw %xmm6, %xmm2
   3955 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm2
   3956 ; SSE2-NEXT:    psubusw %xmm5, %xmm1
   3957 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm1
   3958 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   3959 ; SSE2-NEXT:    psubusw %xmm4, %xmm11
   3960 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm11
   3961 ; SSE2-NEXT:    pand %xmm11, %xmm0
   3962 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   3963 ; SSE2-NEXT:    por %xmm0, %xmm11
   3964 ; SSE2-NEXT:    pand %xmm1, %xmm10
   3965 ; SSE2-NEXT:    pandn %xmm5, %xmm1
   3966 ; SSE2-NEXT:    por %xmm10, %xmm1
   3967 ; SSE2-NEXT:    pand %xmm2, %xmm9
   3968 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   3969 ; SSE2-NEXT:    por %xmm9, %xmm2
   3970 ; SSE2-NEXT:    pand %xmm3, %xmm8
   3971 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   3972 ; SSE2-NEXT:    por %xmm8, %xmm3
   3973 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   3974 ; SSE2-NEXT:    retq
   3975 ;
   3976 ; SSE4-LABEL: test110:
   3977 ; SSE4:       # BB#0: # %entry
   3978 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   3979 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   3980 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   3981 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   3982 ; SSE4-NEXT:    retq
   3983 ;
   3984 ; AVX1-LABEL: test110:
   3985 ; AVX1:       # BB#0: # %entry
   3986 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3987 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3988 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   3989 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   3990 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3991 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3992 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3993 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   3994 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   3995 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3996 ; AVX1-NEXT:    retq
   3997 ;
   3998 ; AVX2-LABEL: test110:
   3999 ; AVX2:       # BB#0: # %entry
   4000 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   4001 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   4002 ; AVX2-NEXT:    retq
   4003 ;
   4004 ; AVX512BW-LABEL: test110:
   4005 ; AVX512BW:       # BB#0: # %entry
   4006 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   4007 ; AVX512BW-NEXT:    retq
   4008 entry:
   4009   %cmp = icmp ule <32 x i16> %a, %b
   4010   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   4011   ret <32 x i16> %sel
   4012 }
   4013 
   4014 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
   4015 ; SSE2-LABEL: test111:
   4016 ; SSE2:       # BB#0: # %entry
   4017 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [32768,32768,32768,32768,32768,32768,32768,32768]
   4018 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   4019 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   4020 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4021 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   4022 ; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
   4023 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   4024 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   4025 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4026 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   4027 ; SSE2-NEXT:    pcmpgtw %xmm10, %xmm9
   4028 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   4029 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   4030 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   4031 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   4032 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm10
   4033 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   4034 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   4035 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4036 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm11
   4037 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4038 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4039 ; SSE2-NEXT:    por %xmm11, %xmm0
   4040 ; SSE2-NEXT:    pand %xmm10, %xmm1
   4041 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4042 ; SSE2-NEXT:    por %xmm1, %xmm10
   4043 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4044 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4045 ; SSE2-NEXT:    por %xmm2, %xmm9
   4046 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4047 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4048 ; SSE2-NEXT:    por %xmm3, %xmm8
   4049 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   4050 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4051 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4052 ; SSE2-NEXT:    retq
   4053 ;
   4054 ; SSE4-LABEL: test111:
   4055 ; SSE4:       # BB#0: # %entry
   4056 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   4057 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   4058 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   4059 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   4060 ; SSE4-NEXT:    retq
   4061 ;
   4062 ; AVX1-LABEL: test111:
   4063 ; AVX1:       # BB#0: # %entry
   4064 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4065 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4066 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   4067 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   4068 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4069 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4070 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4071 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   4072 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   4073 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4074 ; AVX1-NEXT:    retq
   4075 ;
   4076 ; AVX2-LABEL: test111:
   4077 ; AVX2:       # BB#0: # %entry
   4078 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   4079 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   4080 ; AVX2-NEXT:    retq
   4081 ;
   4082 ; AVX512BW-LABEL: test111:
   4083 ; AVX512BW:       # BB#0: # %entry
   4084 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   4085 ; AVX512BW-NEXT:    retq
   4086 entry:
   4087   %cmp = icmp ugt <32 x i16> %a, %b
   4088   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   4089   ret <32 x i16> %sel
   4090 }
   4091 
   4092 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
   4093 ; SSE2-LABEL: test112:
   4094 ; SSE2:       # BB#0: # %entry
   4095 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   4096 ; SSE2-NEXT:    psubusw %xmm3, %xmm8
   4097 ; SSE2-NEXT:    pxor %xmm9, %xmm9
   4098 ; SSE2-NEXT:    pcmpeqw %xmm9, %xmm8
   4099 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   4100 ; SSE2-NEXT:    psubusw %xmm2, %xmm10
   4101 ; SSE2-NEXT:    pcmpeqw %xmm9, %xmm10
   4102 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   4103 ; SSE2-NEXT:    psubusw %xmm1, %xmm11
   4104 ; SSE2-NEXT:    pcmpeqw %xmm9, %xmm11
   4105 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   4106 ; SSE2-NEXT:    psubusw %xmm0, %xmm12
   4107 ; SSE2-NEXT:    pcmpeqw %xmm9, %xmm12
   4108 ; SSE2-NEXT:    pand %xmm12, %xmm0
   4109 ; SSE2-NEXT:    pandn %xmm4, %xmm12
   4110 ; SSE2-NEXT:    por %xmm12, %xmm0
   4111 ; SSE2-NEXT:    pand %xmm11, %xmm1
   4112 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4113 ; SSE2-NEXT:    por %xmm11, %xmm1
   4114 ; SSE2-NEXT:    pand %xmm10, %xmm2
   4115 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   4116 ; SSE2-NEXT:    por %xmm10, %xmm2
   4117 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4118 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4119 ; SSE2-NEXT:    por %xmm8, %xmm3
   4120 ; SSE2-NEXT:    retq
   4121 ;
   4122 ; SSE4-LABEL: test112:
   4123 ; SSE4:       # BB#0: # %entry
   4124 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   4125 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   4126 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   4127 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   4128 ; SSE4-NEXT:    retq
   4129 ;
   4130 ; AVX1-LABEL: test112:
   4131 ; AVX1:       # BB#0: # %entry
   4132 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4133 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4134 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   4135 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   4136 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4137 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4138 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4139 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   4140 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   4141 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4142 ; AVX1-NEXT:    retq
   4143 ;
   4144 ; AVX2-LABEL: test112:
   4145 ; AVX2:       # BB#0: # %entry
   4146 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   4147 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   4148 ; AVX2-NEXT:    retq
   4149 ;
   4150 ; AVX512BW-LABEL: test112:
   4151 ; AVX512BW:       # BB#0: # %entry
   4152 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   4153 ; AVX512BW-NEXT:    retq
   4154 entry:
   4155   %cmp = icmp uge <32 x i16> %a, %b
   4156   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   4157   ret <32 x i16> %sel
   4158 }
   4159 
   4160 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
   4161 ; SSE2-LABEL: test113:
   4162 ; SSE2:       # BB#0: # %entry
   4163 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   4164 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm8
   4165 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   4166 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
   4167 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   4168 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm10
   4169 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   4170 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm11
   4171 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4172 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4173 ; SSE2-NEXT:    por %xmm11, %xmm0
   4174 ; SSE2-NEXT:    pand %xmm10, %xmm1
   4175 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4176 ; SSE2-NEXT:    por %xmm10, %xmm1
   4177 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4178 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4179 ; SSE2-NEXT:    por %xmm9, %xmm2
   4180 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4181 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4182 ; SSE2-NEXT:    por %xmm8, %xmm3
   4183 ; SSE2-NEXT:    retq
   4184 ;
   4185 ; SSE4-LABEL: test113:
   4186 ; SSE4:       # BB#0: # %entry
   4187 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   4188 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   4189 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   4190 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   4191 ; SSE4-NEXT:    retq
   4192 ;
   4193 ; AVX1-LABEL: test113:
   4194 ; AVX1:       # BB#0: # %entry
   4195 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4196 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4197 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   4198 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   4199 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4200 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4201 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4202 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   4203 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   4204 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4205 ; AVX1-NEXT:    retq
   4206 ;
   4207 ; AVX2-LABEL: test113:
   4208 ; AVX2:       # BB#0: # %entry
   4209 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   4210 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   4211 ; AVX2-NEXT:    retq
   4212 ;
   4213 ; AVX512F-LABEL: test113:
   4214 ; AVX512F:       # BB#0: # %entry
   4215 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   4216 ; AVX512F-NEXT:    retq
   4217 entry:
   4218   %cmp = icmp slt <16 x i32> %a, %b
   4219   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4220   ret <16 x i32> %sel
   4221 }
   4222 
   4223 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
   4224 ; SSE2-LABEL: test114:
   4225 ; SSE2:       # BB#0: # %entry
   4226 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4227 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4228 ; SSE2-NEXT:    movdqa %xmm8, %xmm12
   4229 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm12
   4230 ; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
   4231 ; SSE2-NEXT:    movdqa %xmm12, %xmm3
   4232 ; SSE2-NEXT:    pxor %xmm13, %xmm3
   4233 ; SSE2-NEXT:    movdqa %xmm9, %xmm14
   4234 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm14
   4235 ; SSE2-NEXT:    movdqa %xmm14, %xmm2
   4236 ; SSE2-NEXT:    pxor %xmm13, %xmm2
   4237 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   4238 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm15
   4239 ; SSE2-NEXT:    movdqa %xmm15, %xmm10
   4240 ; SSE2-NEXT:    pxor %xmm13, %xmm10
   4241 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4242 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
   4243 ; SSE2-NEXT:    pxor %xmm11, %xmm13
   4244 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   4245 ; SSE2-NEXT:    pandn %xmm4, %xmm13
   4246 ; SSE2-NEXT:    por %xmm13, %xmm11
   4247 ; SSE2-NEXT:    pandn %xmm1, %xmm15
   4248 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4249 ; SSE2-NEXT:    por %xmm15, %xmm10
   4250 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   4251 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   4252 ; SSE2-NEXT:    por %xmm14, %xmm2
   4253 ; SSE2-NEXT:    pandn %xmm8, %xmm12
   4254 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   4255 ; SSE2-NEXT:    por %xmm12, %xmm3
   4256 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   4257 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   4258 ; SSE2-NEXT:    retq
   4259 ;
   4260 ; SSE4-LABEL: test114:
   4261 ; SSE4:       # BB#0: # %entry
   4262 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   4263 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   4264 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   4265 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   4266 ; SSE4-NEXT:    retq
   4267 ;
   4268 ; AVX1-LABEL: test114:
   4269 ; AVX1:       # BB#0: # %entry
   4270 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4271 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4272 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   4273 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   4274 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4275 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4276 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4277 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   4278 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   4279 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4280 ; AVX1-NEXT:    retq
   4281 ;
   4282 ; AVX2-LABEL: test114:
   4283 ; AVX2:       # BB#0: # %entry
   4284 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   4285 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   4286 ; AVX2-NEXT:    retq
   4287 ;
   4288 ; AVX512F-LABEL: test114:
   4289 ; AVX512F:       # BB#0: # %entry
   4290 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   4291 ; AVX512F-NEXT:    retq
   4292 entry:
   4293   %cmp = icmp sle <16 x i32> %a, %b
   4294   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4295   ret <16 x i32> %sel
   4296 }
   4297 
   4298 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
   4299 ; SSE2-LABEL: test115:
   4300 ; SSE2:       # BB#0: # %entry
   4301 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4302 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm3
   4303 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4304 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm9
   4305 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   4306 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm10
   4307 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4308 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
   4309 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4310 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4311 ; SSE2-NEXT:    por %xmm0, %xmm11
   4312 ; SSE2-NEXT:    pand %xmm10, %xmm1
   4313 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4314 ; SSE2-NEXT:    por %xmm1, %xmm10
   4315 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4316 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4317 ; SSE2-NEXT:    por %xmm2, %xmm9
   4318 ; SSE2-NEXT:    pand %xmm3, %xmm8
   4319 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   4320 ; SSE2-NEXT:    por %xmm8, %xmm3
   4321 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   4322 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   4323 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4324 ; SSE2-NEXT:    retq
   4325 ;
   4326 ; SSE4-LABEL: test115:
   4327 ; SSE4:       # BB#0: # %entry
   4328 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   4329 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   4330 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   4331 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   4332 ; SSE4-NEXT:    retq
   4333 ;
   4334 ; AVX1-LABEL: test115:
   4335 ; AVX1:       # BB#0: # %entry
   4336 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4337 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4338 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   4339 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   4340 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4341 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4342 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4343 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   4344 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   4345 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4346 ; AVX1-NEXT:    retq
   4347 ;
   4348 ; AVX2-LABEL: test115:
   4349 ; AVX2:       # BB#0: # %entry
   4350 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   4351 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   4352 ; AVX2-NEXT:    retq
   4353 ;
   4354 ; AVX512F-LABEL: test115:
   4355 ; AVX512F:       # BB#0: # %entry
   4356 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   4357 ; AVX512F-NEXT:    retq
   4358 entry:
   4359   %cmp = icmp sgt <16 x i32> %a, %b
   4360   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4361   ret <16 x i32> %sel
   4362 }
   4363 
   4364 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
   4365 ; SSE2-LABEL: test116:
   4366 ; SSE2:       # BB#0: # %entry
   4367 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4368 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4369 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4370 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   4371 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm12
   4372 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   4373 ; SSE2-NEXT:    movdqa %xmm12, %xmm3
   4374 ; SSE2-NEXT:    pxor %xmm0, %xmm3
   4375 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   4376 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   4377 ; SSE2-NEXT:    movdqa %xmm13, %xmm2
   4378 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   4379 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   4380 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm14
   4381 ; SSE2-NEXT:    movdqa %xmm14, %xmm11
   4382 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4383 ; SSE2-NEXT:    movdqa %xmm4, %xmm15
   4384 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm15
   4385 ; SSE2-NEXT:    pxor %xmm15, %xmm0
   4386 ; SSE2-NEXT:    pandn %xmm10, %xmm15
   4387 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   4388 ; SSE2-NEXT:    por %xmm15, %xmm0
   4389 ; SSE2-NEXT:    pandn %xmm1, %xmm14
   4390 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4391 ; SSE2-NEXT:    por %xmm14, %xmm11
   4392 ; SSE2-NEXT:    pandn %xmm9, %xmm13
   4393 ; SSE2-NEXT:    pandn %xmm6, %xmm2
   4394 ; SSE2-NEXT:    por %xmm13, %xmm2
   4395 ; SSE2-NEXT:    pandn %xmm8, %xmm12
   4396 ; SSE2-NEXT:    pandn %xmm7, %xmm3
   4397 ; SSE2-NEXT:    por %xmm12, %xmm3
   4398 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   4399 ; SSE2-NEXT:    retq
   4400 ;
   4401 ; SSE4-LABEL: test116:
   4402 ; SSE4:       # BB#0: # %entry
   4403 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   4404 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   4405 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   4406 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   4407 ; SSE4-NEXT:    retq
   4408 ;
   4409 ; AVX1-LABEL: test116:
   4410 ; AVX1:       # BB#0: # %entry
   4411 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4412 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4413 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   4414 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   4415 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4416 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4417 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4418 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   4419 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   4420 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4421 ; AVX1-NEXT:    retq
   4422 ;
   4423 ; AVX2-LABEL: test116:
   4424 ; AVX2:       # BB#0: # %entry
   4425 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   4426 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   4427 ; AVX2-NEXT:    retq
   4428 ;
   4429 ; AVX512F-LABEL: test116:
   4430 ; AVX512F:       # BB#0: # %entry
   4431 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   4432 ; AVX512F-NEXT:    retq
   4433 entry:
   4434   %cmp = icmp sge <16 x i32> %a, %b
   4435   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4436   ret <16 x i32> %sel
   4437 }
   4438 
   4439 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
   4440 ; SSE2-LABEL: test117:
   4441 ; SSE2:       # BB#0: # %entry
   4442 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   4443 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   4444 ; SSE2-NEXT:    pxor %xmm10, %xmm9
   4445 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   4446 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   4447 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
   4448 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   4449 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4450 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   4451 ; SSE2-NEXT:    pxor %xmm10, %xmm9
   4452 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm9
   4453 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   4454 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4455 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   4456 ; SSE2-NEXT:    pxor %xmm10, %xmm12
   4457 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm12
   4458 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4459 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4460 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   4461 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm10
   4462 ; SSE2-NEXT:    pand %xmm10, %xmm0
   4463 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   4464 ; SSE2-NEXT:    por %xmm10, %xmm0
   4465 ; SSE2-NEXT:    pand %xmm12, %xmm1
   4466 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   4467 ; SSE2-NEXT:    por %xmm12, %xmm1
   4468 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4469 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4470 ; SSE2-NEXT:    por %xmm9, %xmm2
   4471 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4472 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4473 ; SSE2-NEXT:    por %xmm8, %xmm3
   4474 ; SSE2-NEXT:    retq
   4475 ;
   4476 ; SSE4-LABEL: test117:
   4477 ; SSE4:       # BB#0: # %entry
   4478 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   4479 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   4480 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   4481 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   4482 ; SSE4-NEXT:    retq
   4483 ;
   4484 ; AVX1-LABEL: test117:
   4485 ; AVX1:       # BB#0: # %entry
   4486 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4487 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4488 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   4489 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   4490 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4491 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4492 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4493 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   4494 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   4495 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4496 ; AVX1-NEXT:    retq
   4497 ;
   4498 ; AVX2-LABEL: test117:
   4499 ; AVX2:       # BB#0: # %entry
   4500 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   4501 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   4502 ; AVX2-NEXT:    retq
   4503 ;
   4504 ; AVX512F-LABEL: test117:
   4505 ; AVX512F:       # BB#0: # %entry
   4506 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   4507 ; AVX512F-NEXT:    retq
   4508 entry:
   4509   %cmp = icmp ult <16 x i32> %a, %b
   4510   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4511   ret <16 x i32> %sel
   4512 }
   4513 
   4514 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
   4515 ; SSE2-LABEL: test118:
   4516 ; SSE2:       # BB#0: # %entry
   4517 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4518 ; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
   4519 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   4520 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   4521 ; SSE2-NEXT:    movdqa %xmm3, %xmm12
   4522 ; SSE2-NEXT:    pxor %xmm14, %xmm12
   4523 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
   4524 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   4525 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   4526 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   4527 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   4528 ; SSE2-NEXT:    pxor %xmm14, %xmm9
   4529 ; SSE2-NEXT:    movdqa %xmm2, %xmm13
   4530 ; SSE2-NEXT:    pxor %xmm14, %xmm13
   4531 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   4532 ; SSE2-NEXT:    movdqa %xmm13, %xmm9
   4533 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   4534 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   4535 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   4536 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   4537 ; SSE2-NEXT:    pxor %xmm14, %xmm15
   4538 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   4539 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   4540 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   4541 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   4542 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   4543 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   4544 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4545 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   4546 ; SSE2-NEXT:    pandn %xmm10, %xmm14
   4547 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   4548 ; SSE2-NEXT:    por %xmm14, %xmm0
   4549 ; SSE2-NEXT:    pandn %xmm1, %xmm15
   4550 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4551 ; SSE2-NEXT:    por %xmm15, %xmm11
   4552 ; SSE2-NEXT:    pandn %xmm2, %xmm13
   4553 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4554 ; SSE2-NEXT:    por %xmm13, %xmm9
   4555 ; SSE2-NEXT:    pandn %xmm3, %xmm12
   4556 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4557 ; SSE2-NEXT:    por %xmm12, %xmm8
   4558 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   4559 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4560 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4561 ; SSE2-NEXT:    retq
   4562 ;
   4563 ; SSE4-LABEL: test118:
   4564 ; SSE4:       # BB#0: # %entry
   4565 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   4566 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   4567 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   4568 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   4569 ; SSE4-NEXT:    retq
   4570 ;
   4571 ; AVX1-LABEL: test118:
   4572 ; AVX1:       # BB#0: # %entry
   4573 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4574 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4575 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   4576 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   4577 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4578 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4579 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4580 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   4581 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   4582 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4583 ; AVX1-NEXT:    retq
   4584 ;
   4585 ; AVX2-LABEL: test118:
   4586 ; AVX2:       # BB#0: # %entry
   4587 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   4588 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   4589 ; AVX2-NEXT:    retq
   4590 ;
   4591 ; AVX512F-LABEL: test118:
   4592 ; AVX512F:       # BB#0: # %entry
   4593 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   4594 ; AVX512F-NEXT:    retq
   4595 entry:
   4596   %cmp = icmp ule <16 x i32> %a, %b
   4597   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4598   ret <16 x i32> %sel
   4599 }
   4600 
   4601 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
   4602 ; SSE2-LABEL: test119:
   4603 ; SSE2:       # BB#0: # %entry
   4604 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
   4605 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   4606 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   4607 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4608 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   4609 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
   4610 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   4611 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   4612 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4613 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   4614 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm9
   4615 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   4616 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   4617 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   4618 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   4619 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm10
   4620 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   4621 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   4622 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4623 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm11
   4624 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4625 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4626 ; SSE2-NEXT:    por %xmm11, %xmm0
   4627 ; SSE2-NEXT:    pand %xmm10, %xmm1
   4628 ; SSE2-NEXT:    pandn %xmm5, %xmm10
   4629 ; SSE2-NEXT:    por %xmm1, %xmm10
   4630 ; SSE2-NEXT:    pand %xmm9, %xmm2
   4631 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4632 ; SSE2-NEXT:    por %xmm2, %xmm9
   4633 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4634 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4635 ; SSE2-NEXT:    por %xmm3, %xmm8
   4636 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   4637 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4638 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4639 ; SSE2-NEXT:    retq
   4640 ;
   4641 ; SSE4-LABEL: test119:
   4642 ; SSE4:       # BB#0: # %entry
   4643 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   4644 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   4645 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   4646 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   4647 ; SSE4-NEXT:    retq
   4648 ;
   4649 ; AVX1-LABEL: test119:
   4650 ; AVX1:       # BB#0: # %entry
   4651 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4652 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4653 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   4654 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   4655 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4656 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4657 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4658 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   4659 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   4660 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4661 ; AVX1-NEXT:    retq
   4662 ;
   4663 ; AVX2-LABEL: test119:
   4664 ; AVX2:       # BB#0: # %entry
   4665 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   4666 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   4667 ; AVX2-NEXT:    retq
   4668 ;
   4669 ; AVX512F-LABEL: test119:
   4670 ; AVX512F:       # BB#0: # %entry
   4671 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   4672 ; AVX512F-NEXT:    retq
   4673 entry:
   4674   %cmp = icmp ugt <16 x i32> %a, %b
   4675   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4676   ret <16 x i32> %sel
   4677 }
   4678 
   4679 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
   4680 ; SSE2-LABEL: test120:
   4681 ; SSE2:       # BB#0: # %entry
   4682 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4683 ; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
   4684 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   4685 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   4686 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   4687 ; SSE2-NEXT:    pxor %xmm14, %xmm12
   4688 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
   4689 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   4690 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   4691 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   4692 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   4693 ; SSE2-NEXT:    pxor %xmm14, %xmm9
   4694 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   4695 ; SSE2-NEXT:    pxor %xmm14, %xmm13
   4696 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   4697 ; SSE2-NEXT:    movdqa %xmm13, %xmm9
   4698 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   4699 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   4700 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   4701 ; SSE2-NEXT:    movdqa %xmm5, %xmm15
   4702 ; SSE2-NEXT:    pxor %xmm14, %xmm15
   4703 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   4704 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   4705 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   4706 ; SSE2-NEXT:    pxor %xmm4, %xmm14
   4707 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   4708 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   4709 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   4710 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   4711 ; SSE2-NEXT:    pandn %xmm10, %xmm14
   4712 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   4713 ; SSE2-NEXT:    por %xmm14, %xmm0
   4714 ; SSE2-NEXT:    pandn %xmm1, %xmm15
   4715 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4716 ; SSE2-NEXT:    por %xmm15, %xmm11
   4717 ; SSE2-NEXT:    pandn %xmm2, %xmm13
   4718 ; SSE2-NEXT:    pandn %xmm6, %xmm9
   4719 ; SSE2-NEXT:    por %xmm13, %xmm9
   4720 ; SSE2-NEXT:    pandn %xmm3, %xmm12
   4721 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4722 ; SSE2-NEXT:    por %xmm12, %xmm8
   4723 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   4724 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   4725 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4726 ; SSE2-NEXT:    retq
   4727 ;
   4728 ; SSE4-LABEL: test120:
   4729 ; SSE4:       # BB#0: # %entry
   4730 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   4731 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   4732 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   4733 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   4734 ; SSE4-NEXT:    retq
   4735 ;
   4736 ; AVX1-LABEL: test120:
   4737 ; AVX1:       # BB#0: # %entry
   4738 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4739 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4740 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   4741 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   4742 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4743 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4744 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4745 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   4746 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   4747 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4748 ; AVX1-NEXT:    retq
   4749 ;
   4750 ; AVX2-LABEL: test120:
   4751 ; AVX2:       # BB#0: # %entry
   4752 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   4753 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   4754 ; AVX2-NEXT:    retq
   4755 ;
   4756 ; AVX512F-LABEL: test120:
   4757 ; AVX512F:       # BB#0: # %entry
   4758 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   4759 ; AVX512F-NEXT:    retq
   4760 entry:
   4761   %cmp = icmp uge <16 x i32> %a, %b
   4762   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4763   ret <16 x i32> %sel
   4764 }
   4765 
   4766 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
   4767 ; SSE2-LABEL: test121:
   4768 ; SSE2:       # BB#0: # %entry
   4769 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0]
   4770 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   4771 ; SSE2-NEXT:    pxor %xmm9, %xmm8
   4772 ; SSE2-NEXT:    movdqa %xmm7, %xmm10
   4773 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   4774 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   4775 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   4776 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   4777 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
   4778 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   4779 ; SSE2-NEXT:    pand %xmm12, %xmm10
   4780 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
   4781 ; SSE2-NEXT:    por %xmm10, %xmm8
   4782 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   4783 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   4784 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   4785 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   4786 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   4787 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
   4788 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   4789 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
   4790 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
   4791 ; SSE2-NEXT:    pand %xmm13, %xmm11
   4792 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
   4793 ; SSE2-NEXT:    por %xmm11, %xmm10
   4794 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   4795 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   4796 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   4797 ; SSE2-NEXT:    pxor %xmm9, %xmm12
   4798 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   4799 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   4800 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   4801 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
   4802 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
   4803 ; SSE2-NEXT:    pand %xmm14, %xmm11
   4804 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
   4805 ; SSE2-NEXT:    por %xmm11, %xmm12
   4806 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4807 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   4808 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   4809 ; SSE2-NEXT:    movdqa %xmm9, %xmm13
   4810 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   4811 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   4812 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
   4813 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   4814 ; SSE2-NEXT:    pand %xmm14, %xmm9
   4815 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   4816 ; SSE2-NEXT:    por %xmm9, %xmm11
   4817 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4818 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   4819 ; SSE2-NEXT:    por %xmm11, %xmm0
   4820 ; SSE2-NEXT:    pand %xmm12, %xmm1
   4821 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   4822 ; SSE2-NEXT:    por %xmm12, %xmm1
   4823 ; SSE2-NEXT:    pand %xmm10, %xmm2
   4824 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   4825 ; SSE2-NEXT:    por %xmm10, %xmm2
   4826 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4827 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4828 ; SSE2-NEXT:    por %xmm8, %xmm3
   4829 ; SSE2-NEXT:    retq
   4830 ;
   4831 ; SSE4-LABEL: test121:
   4832 ; SSE4:       # BB#0: # %entry
   4833 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   4834 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   4835 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
   4836 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   4837 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
   4838 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   4839 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
   4840 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   4841 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
   4842 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   4843 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   4844 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   4845 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   4846 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   4847 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   4848 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   4849 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   4850 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   4851 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   4852 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   4853 ; SSE4-NEXT:    retq
   4854 ;
   4855 ; AVX1-LABEL: test121:
   4856 ; AVX1:       # BB#0: # %entry
   4857 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4858 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
   4859 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   4860 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm5
   4861 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   4862 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4863 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   4864 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   4865 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm6
   4866 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
   4867 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   4868 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   4869 ; AVX1-NEXT:    retq
   4870 ;
   4871 ; AVX2-LABEL: test121:
   4872 ; AVX2:       # BB#0: # %entry
   4873 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
   4874 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm5
   4875 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   4876 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   4877 ; AVX2-NEXT:    retq
   4878 ;
   4879 ; AVX512F-LABEL: test121:
   4880 ; AVX512F:       # BB#0: # %entry
   4881 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   4882 ; AVX512F-NEXT:    retq
   4883 entry:
   4884   %cmp = icmp slt <8 x i64> %a, %b
   4885   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   4886   ret <8 x i64> %sel
   4887 }
   4888 
   4889 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
   4890 ; SSE2-LABEL: test122:
   4891 ; SSE2:       # BB#0: # %entry
   4892 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   4893 ; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
   4894 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   4895 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   4896 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   4897 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   4898 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   4899 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   4900 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   4901 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   4902 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   4903 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   4904 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   4905 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   4906 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   4907 ; SSE2-NEXT:    pand %xmm12, %xmm0
   4908 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   4909 ; SSE2-NEXT:    por %xmm0, %xmm12
   4910 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   4911 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   4912 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   4913 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   4914 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4915 ; SSE2-NEXT:    movdqa %xmm3, %xmm13
   4916 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   4917 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   4918 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   4919 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   4920 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   4921 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   4922 ; SSE2-NEXT:    pand %xmm15, %xmm11
   4923 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   4924 ; SSE2-NEXT:    por %xmm11, %xmm13
   4925 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   4926 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4927 ; SSE2-NEXT:    movdqa %xmm2, %xmm14
   4928 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   4929 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   4930 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   4931 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   4932 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   4933 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   4934 ; SSE2-NEXT:    pand %xmm11, %xmm14
   4935 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   4936 ; SSE2-NEXT:    por %xmm14, %xmm15
   4937 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   4938 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   4939 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   4940 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   4941 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   4942 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   4943 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   4944 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   4945 ; SSE2-NEXT:    pand %xmm11, %xmm0
   4946 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   4947 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   4948 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   4949 ; SSE2-NEXT:    por %xmm0, %xmm14
   4950 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   4951 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   4952 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   4953 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   4954 ; SSE2-NEXT:    pandn %xmm4, %xmm1
   4955 ; SSE2-NEXT:    por %xmm14, %xmm1
   4956 ; SSE2-NEXT:    pandn %xmm2, %xmm15
   4957 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   4958 ; SSE2-NEXT:    por %xmm15, %xmm11
   4959 ; SSE2-NEXT:    pandn %xmm3, %xmm13
   4960 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   4961 ; SSE2-NEXT:    por %xmm13, %xmm10
   4962 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   4963 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
   4964 ; SSE2-NEXT:    por %xmm12, %xmm8
   4965 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   4966 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   4967 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   4968 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   4969 ; SSE2-NEXT:    retq
   4970 ;
   4971 ; SSE4-LABEL: test122:
   4972 ; SSE4:       # BB#0: # %entry
   4973 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   4974 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   4975 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
   4976 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   4977 ; SSE4-NEXT:    pxor %xmm12, %xmm9
   4978 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   4979 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
   4980 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   4981 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   4982 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
   4983 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   4984 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   4985 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   4986 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   4987 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   4988 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   4989 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   4990 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   4991 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   4992 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   4993 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   4994 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   4995 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   4996 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   4997 ; SSE4-NEXT:    retq
   4998 ;
   4999 ; AVX1-LABEL: test122:
   5000 ; AVX1:       # BB#0: # %entry
   5001 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5002 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   5003 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5004 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
   5005 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5006 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm6
   5007 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5008 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5009 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   5010 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   5011 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5012 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5013 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm7
   5014 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
   5015 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5016 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5017 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5018 ; AVX1-NEXT:    retq
   5019 ;
   5020 ; AVX2-LABEL: test122:
   5021 ; AVX2:       # BB#0: # %entry
   5022 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
   5023 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
   5024 ; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
   5025 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm6
   5026 ; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
   5027 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5028 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5029 ; AVX2-NEXT:    retq
   5030 ;
   5031 ; AVX512F-LABEL: test122:
   5032 ; AVX512F:       # BB#0: # %entry
   5033 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   5034 ; AVX512F-NEXT:    retq
   5035 entry:
   5036   %cmp = icmp sle <8 x i64> %a, %b
   5037   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5038   ret <8 x i64> %sel
   5039 }
   5040 
   5041 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
   5042 ; SSE2-LABEL: test123:
   5043 ; SSE2:       # BB#0: # %entry
   5044 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0]
   5045 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5046 ; SSE2-NEXT:    pxor %xmm9, %xmm8
   5047 ; SSE2-NEXT:    movdqa %xmm3, %xmm10
   5048 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5049 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   5050 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5051 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5052 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
   5053 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   5054 ; SSE2-NEXT:    pand %xmm12, %xmm10
   5055 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
   5056 ; SSE2-NEXT:    por %xmm10, %xmm8
   5057 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   5058 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5059 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   5060 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5061 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   5062 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
   5063 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   5064 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
   5065 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
   5066 ; SSE2-NEXT:    pand %xmm13, %xmm11
   5067 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
   5068 ; SSE2-NEXT:    por %xmm11, %xmm10
   5069 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   5070 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5071 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   5072 ; SSE2-NEXT:    pxor %xmm9, %xmm12
   5073 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   5074 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5075 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5076 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
   5077 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
   5078 ; SSE2-NEXT:    pand %xmm14, %xmm11
   5079 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
   5080 ; SSE2-NEXT:    por %xmm11, %xmm12
   5081 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   5082 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5083 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   5084 ; SSE2-NEXT:    movdqa %xmm9, %xmm13
   5085 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5086 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5087 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
   5088 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   5089 ; SSE2-NEXT:    pand %xmm14, %xmm9
   5090 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5091 ; SSE2-NEXT:    por %xmm9, %xmm11
   5092 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5093 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   5094 ; SSE2-NEXT:    por %xmm11, %xmm0
   5095 ; SSE2-NEXT:    pand %xmm12, %xmm1
   5096 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   5097 ; SSE2-NEXT:    por %xmm12, %xmm1
   5098 ; SSE2-NEXT:    pand %xmm10, %xmm2
   5099 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5100 ; SSE2-NEXT:    por %xmm10, %xmm2
   5101 ; SSE2-NEXT:    pand %xmm8, %xmm3
   5102 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   5103 ; SSE2-NEXT:    por %xmm8, %xmm3
   5104 ; SSE2-NEXT:    retq
   5105 ;
   5106 ; SSE4-LABEL: test123:
   5107 ; SSE4:       # BB#0: # %entry
   5108 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   5109 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   5110 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
   5111 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   5112 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
   5113 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   5114 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
   5115 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   5116 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   5117 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5118 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5119 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5120 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5121 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   5122 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5123 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5124 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5125 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5126 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5127 ; SSE4-NEXT:    retq
   5128 ;
   5129 ; AVX1-LABEL: test123:
   5130 ; AVX1:       # BB#0: # %entry
   5131 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5132 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   5133 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5134 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm5
   5135 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   5136 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   5137 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5138 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   5139 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm6
   5140 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
   5141 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5142 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5143 ; AVX1-NEXT:    retq
   5144 ;
   5145 ; AVX2-LABEL: test123:
   5146 ; AVX2:       # BB#0: # %entry
   5147 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
   5148 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm5
   5149 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5150 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5151 ; AVX2-NEXT:    retq
   5152 ;
   5153 ; AVX512F-LABEL: test123:
   5154 ; AVX512F:       # BB#0: # %entry
   5155 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   5156 ; AVX512F-NEXT:    retq
   5157 entry:
   5158   %cmp = icmp sgt <8 x i64> %a, %b
   5159   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5160   ret <8 x i64> %sel
   5161 }
   5162 
   5163 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
   5164 ; SSE2-LABEL: test124:
   5165 ; SSE2:       # BB#0: # %entry
   5166 ; SSE2-NEXT:    movdqa %xmm7, %xmm11
   5167 ; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
   5168 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   5169 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   5170 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   5171 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   5172 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   5173 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5174 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   5175 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   5176 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   5177 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   5178 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5179 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5180 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   5181 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   5182 ; SSE2-NEXT:    pand %xmm12, %xmm0
   5183 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   5184 ; SSE2-NEXT:    por %xmm0, %xmm12
   5185 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   5186 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   5187 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   5188 ; SSE2-NEXT:    movdqa %xmm3, %xmm11
   5189 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5190 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   5191 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   5192 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   5193 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5194 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   5195 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   5196 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5197 ; SSE2-NEXT:    pand %xmm15, %xmm11
   5198 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   5199 ; SSE2-NEXT:    por %xmm11, %xmm13
   5200 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   5201 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5202 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   5203 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   5204 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   5205 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   5206 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   5207 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   5208 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5209 ; SSE2-NEXT:    pand %xmm11, %xmm14
   5210 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   5211 ; SSE2-NEXT:    por %xmm14, %xmm15
   5212 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
   5213 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5214 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   5215 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   5216 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5217 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   5218 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   5219 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   5220 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5221 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   5222 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   5223 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5224 ; SSE2-NEXT:    por %xmm0, %xmm14
   5225 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   5226 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   5227 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   5228 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   5229 ; SSE2-NEXT:    pandn %xmm4, %xmm1
   5230 ; SSE2-NEXT:    por %xmm14, %xmm1
   5231 ; SSE2-NEXT:    pandn %xmm2, %xmm15
   5232 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   5233 ; SSE2-NEXT:    por %xmm15, %xmm11
   5234 ; SSE2-NEXT:    pandn %xmm3, %xmm13
   5235 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5236 ; SSE2-NEXT:    por %xmm13, %xmm10
   5237 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   5238 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
   5239 ; SSE2-NEXT:    por %xmm12, %xmm8
   5240 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   5241 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   5242 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   5243 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   5244 ; SSE2-NEXT:    retq
   5245 ;
   5246 ; SSE4-LABEL: test124:
   5247 ; SSE4:       # BB#0: # %entry
   5248 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   5249 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   5250 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
   5251 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   5252 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   5253 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   5254 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
   5255 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5256 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   5257 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
   5258 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5259 ; SSE4-NEXT:    movdqa %xmm4, %xmm12
   5260 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm12
   5261 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   5262 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   5263 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5264 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5265 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5266 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5267 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   5268 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5269 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5270 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5271 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5272 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5273 ; SSE4-NEXT:    retq
   5274 ;
   5275 ; AVX1-LABEL: test124:
   5276 ; AVX1:       # BB#0: # %entry
   5277 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5278 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
   5279 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5280 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
   5281 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5282 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm6
   5283 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5284 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5285 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5286 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   5287 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5288 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5289 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm7
   5290 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
   5291 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5292 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5293 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5294 ; AVX1-NEXT:    retq
   5295 ;
   5296 ; AVX2-LABEL: test124:
   5297 ; AVX2:       # BB#0: # %entry
   5298 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
   5299 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
   5300 ; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
   5301 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm6
   5302 ; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
   5303 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5304 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5305 ; AVX2-NEXT:    retq
   5306 ;
   5307 ; AVX512F-LABEL: test124:
   5308 ; AVX512F:       # BB#0: # %entry
   5309 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   5310 ; AVX512F-NEXT:    retq
   5311 entry:
   5312   %cmp = icmp sge <8 x i64> %a, %b
   5313   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5314   ret <8 x i64> %sel
   5315 }
   5316 
   5317 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
   5318 ; SSE2-LABEL: test125:
   5319 ; SSE2:       # BB#0: # %entry
   5320 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
   5321 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   5322 ; SSE2-NEXT:    pxor %xmm9, %xmm8
   5323 ; SSE2-NEXT:    movdqa %xmm7, %xmm10
   5324 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5325 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   5326 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5327 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5328 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
   5329 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   5330 ; SSE2-NEXT:    pand %xmm12, %xmm10
   5331 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
   5332 ; SSE2-NEXT:    por %xmm10, %xmm8
   5333 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   5334 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5335 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   5336 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5337 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   5338 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
   5339 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   5340 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
   5341 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
   5342 ; SSE2-NEXT:    pand %xmm13, %xmm11
   5343 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
   5344 ; SSE2-NEXT:    por %xmm11, %xmm10
   5345 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   5346 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5347 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   5348 ; SSE2-NEXT:    pxor %xmm9, %xmm12
   5349 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   5350 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5351 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5352 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
   5353 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
   5354 ; SSE2-NEXT:    pand %xmm14, %xmm11
   5355 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
   5356 ; SSE2-NEXT:    por %xmm11, %xmm12
   5357 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   5358 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5359 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   5360 ; SSE2-NEXT:    movdqa %xmm9, %xmm13
   5361 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5362 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5363 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
   5364 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   5365 ; SSE2-NEXT:    pand %xmm14, %xmm9
   5366 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5367 ; SSE2-NEXT:    por %xmm9, %xmm11
   5368 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5369 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   5370 ; SSE2-NEXT:    por %xmm11, %xmm0
   5371 ; SSE2-NEXT:    pand %xmm12, %xmm1
   5372 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   5373 ; SSE2-NEXT:    por %xmm12, %xmm1
   5374 ; SSE2-NEXT:    pand %xmm10, %xmm2
   5375 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5376 ; SSE2-NEXT:    por %xmm10, %xmm2
   5377 ; SSE2-NEXT:    pand %xmm8, %xmm3
   5378 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   5379 ; SSE2-NEXT:    por %xmm8, %xmm3
   5380 ; SSE2-NEXT:    retq
   5381 ;
   5382 ; SSE4-LABEL: test125:
   5383 ; SSE4:       # BB#0: # %entry
   5384 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   5385 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   5386 ; SSE4-NEXT:    movdqa %xmm3, %xmm10
   5387 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5388 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   5389 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   5390 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   5391 ; SSE4-NEXT:    movdqa %xmm2, %xmm11
   5392 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5393 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   5394 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5395 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   5396 ; SSE4-NEXT:    movdqa %xmm1, %xmm12
   5397 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   5398 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   5399 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5400 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
   5401 ; SSE4-NEXT:    movdqa %xmm8, %xmm12
   5402 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   5403 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   5404 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
   5405 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   5406 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5407 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5408 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5409 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5410 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   5411 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5412 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5413 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5414 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5415 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5416 ; SSE4-NEXT:    retq
   5417 ;
   5418 ; AVX1-LABEL: test125:
   5419 ; AVX1:       # BB#0: # %entry
   5420 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5421 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5422 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   5423 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
   5424 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5425 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5426 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
   5427 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
   5428 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5429 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5430 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5431 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5432 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   5433 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   5434 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5435 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
   5436 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
   5437 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   5438 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5439 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5440 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5441 ; AVX1-NEXT:    retq
   5442 ;
   5443 ; AVX2-LABEL: test125:
   5444 ; AVX2:       # BB#0: # %entry
   5445 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   5446 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
   5447 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
   5448 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5449 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
   5450 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
   5451 ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
   5452 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5453 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
   5454 ; AVX2-NEXT:    retq
   5455 ;
   5456 ; AVX512F-LABEL: test125:
   5457 ; AVX512F:       # BB#0: # %entry
   5458 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   5459 ; AVX512F-NEXT:    retq
   5460 entry:
   5461   %cmp = icmp ult <8 x i64> %a, %b
   5462   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5463   ret <8 x i64> %sel
   5464 }
   5465 
   5466 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
   5467 ; SSE2-LABEL: test126:
   5468 ; SSE2:       # BB#0: # %entry
   5469 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5470 ; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
   5471 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   5472 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   5473 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   5474 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   5475 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   5476 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   5477 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   5478 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   5479 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   5480 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5481 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5482 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   5483 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   5484 ; SSE2-NEXT:    pand %xmm12, %xmm0
   5485 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   5486 ; SSE2-NEXT:    por %xmm0, %xmm12
   5487 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   5488 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   5489 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   5490 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   5491 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5492 ; SSE2-NEXT:    movdqa %xmm3, %xmm13
   5493 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   5494 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   5495 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5496 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   5497 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   5498 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5499 ; SSE2-NEXT:    pand %xmm15, %xmm11
   5500 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   5501 ; SSE2-NEXT:    por %xmm11, %xmm13
   5502 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   5503 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5504 ; SSE2-NEXT:    movdqa %xmm2, %xmm14
   5505 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   5506 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   5507 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   5508 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   5509 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   5510 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5511 ; SSE2-NEXT:    pand %xmm11, %xmm14
   5512 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   5513 ; SSE2-NEXT:    por %xmm14, %xmm15
   5514 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   5515 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5516 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5517 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   5518 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5519 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   5520 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   5521 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   5522 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5523 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   5524 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   5525 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5526 ; SSE2-NEXT:    por %xmm0, %xmm14
   5527 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   5528 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   5529 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   5530 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   5531 ; SSE2-NEXT:    pandn %xmm4, %xmm1
   5532 ; SSE2-NEXT:    por %xmm14, %xmm1
   5533 ; SSE2-NEXT:    pandn %xmm2, %xmm15
   5534 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   5535 ; SSE2-NEXT:    por %xmm15, %xmm11
   5536 ; SSE2-NEXT:    pandn %xmm3, %xmm13
   5537 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5538 ; SSE2-NEXT:    por %xmm13, %xmm10
   5539 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   5540 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
   5541 ; SSE2-NEXT:    por %xmm12, %xmm8
   5542 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   5543 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   5544 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   5545 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   5546 ; SSE2-NEXT:    retq
   5547 ;
   5548 ; SSE4-LABEL: test126:
   5549 ; SSE4:       # BB#0: # %entry
   5550 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   5551 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   5552 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
   5553 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5554 ; SSE4-NEXT:    movdqa %xmm3, %xmm8
   5555 ; SSE4-NEXT:    pxor %xmm0, %xmm8
   5556 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm8
   5557 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   5558 ; SSE4-NEXT:    pxor %xmm12, %xmm8
   5559 ; SSE4-NEXT:    movdqa %xmm6, %xmm11
   5560 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5561 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   5562 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5563 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   5564 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   5565 ; SSE4-NEXT:    movdqa %xmm5, %xmm13
   5566 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   5567 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   5568 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5569 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
   5570 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   5571 ; SSE4-NEXT:    movdqa %xmm4, %xmm13
   5572 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   5573 ; SSE4-NEXT:    pxor %xmm9, %xmm0
   5574 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
   5575 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   5576 ; SSE4-NEXT:    blendvpd %xmm9, %xmm4
   5577 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5578 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5579 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5580 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5581 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   5582 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5583 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5584 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5585 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5586 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5587 ; SSE4-NEXT:    retq
   5588 ;
   5589 ; AVX1-LABEL: test126:
   5590 ; AVX1:       # BB#0: # %entry
   5591 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5592 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5593 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   5594 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
   5595 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5596 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5597 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
   5598 ; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
   5599 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
   5600 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
   5601 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
   5602 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   5603 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5604 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   5605 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5606 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   5607 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   5608 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5609 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   5610 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
   5611 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
   5612 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   5613 ; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
   5614 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5615 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5616 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5617 ; AVX1-NEXT:    retq
   5618 ;
   5619 ; AVX2-LABEL: test126:
   5620 ; AVX2:       # BB#0: # %entry
   5621 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   5622 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
   5623 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
   5624 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5625 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
   5626 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
   5627 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm7
   5628 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
   5629 ; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
   5630 ; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
   5631 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5632 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
   5633 ; AVX2-NEXT:    retq
   5634 ;
   5635 ; AVX512F-LABEL: test126:
   5636 ; AVX512F:       # BB#0: # %entry
   5637 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   5638 ; AVX512F-NEXT:    retq
   5639 entry:
   5640   %cmp = icmp ule <8 x i64> %a, %b
   5641   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5642   ret <8 x i64> %sel
   5643 }
   5644 
   5645 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
   5646 ; SSE2-LABEL: test127:
   5647 ; SSE2:       # BB#0: # %entry
   5648 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
   5649 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5650 ; SSE2-NEXT:    pxor %xmm9, %xmm8
   5651 ; SSE2-NEXT:    movdqa %xmm3, %xmm10
   5652 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5653 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   5654 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5655 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5656 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
   5657 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   5658 ; SSE2-NEXT:    pand %xmm12, %xmm10
   5659 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
   5660 ; SSE2-NEXT:    por %xmm10, %xmm8
   5661 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   5662 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   5663 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   5664 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5665 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   5666 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
   5667 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   5668 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
   5669 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
   5670 ; SSE2-NEXT:    pand %xmm13, %xmm11
   5671 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
   5672 ; SSE2-NEXT:    por %xmm11, %xmm10
   5673 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   5674 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5675 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   5676 ; SSE2-NEXT:    pxor %xmm9, %xmm12
   5677 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   5678 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5679 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5680 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
   5681 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
   5682 ; SSE2-NEXT:    pand %xmm14, %xmm11
   5683 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
   5684 ; SSE2-NEXT:    por %xmm11, %xmm12
   5685 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   5686 ; SSE2-NEXT:    pxor %xmm9, %xmm11
   5687 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   5688 ; SSE2-NEXT:    movdqa %xmm9, %xmm13
   5689 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
   5690 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   5691 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
   5692 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   5693 ; SSE2-NEXT:    pand %xmm14, %xmm9
   5694 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5695 ; SSE2-NEXT:    por %xmm9, %xmm11
   5696 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5697 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   5698 ; SSE2-NEXT:    por %xmm11, %xmm0
   5699 ; SSE2-NEXT:    pand %xmm12, %xmm1
   5700 ; SSE2-NEXT:    pandn %xmm5, %xmm12
   5701 ; SSE2-NEXT:    por %xmm12, %xmm1
   5702 ; SSE2-NEXT:    pand %xmm10, %xmm2
   5703 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5704 ; SSE2-NEXT:    por %xmm10, %xmm2
   5705 ; SSE2-NEXT:    pand %xmm8, %xmm3
   5706 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   5707 ; SSE2-NEXT:    por %xmm8, %xmm3
   5708 ; SSE2-NEXT:    retq
   5709 ;
   5710 ; SSE4-LABEL: test127:
   5711 ; SSE4:       # BB#0: # %entry
   5712 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   5713 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   5714 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
   5715 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5716 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   5717 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   5718 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   5719 ; SSE4-NEXT:    movdqa %xmm6, %xmm11
   5720 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5721 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   5722 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5723 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   5724 ; SSE4-NEXT:    movdqa %xmm5, %xmm12
   5725 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   5726 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   5727 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5728 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
   5729 ; SSE4-NEXT:    movdqa %xmm4, %xmm12
   5730 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   5731 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5732 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
   5733 ; SSE4-NEXT:    blendvpd %xmm8, %xmm4
   5734 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5735 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5736 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5737 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5738 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   5739 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5740 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5741 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5742 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5743 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5744 ; SSE4-NEXT:    retq
   5745 ;
   5746 ; AVX1-LABEL: test127:
   5747 ; AVX1:       # BB#0: # %entry
   5748 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5749 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5750 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   5751 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
   5752 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5753 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5754 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
   5755 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
   5756 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5757 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5758 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   5759 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5760 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   5761 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   5762 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5763 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
   5764 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
   5765 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   5766 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5767 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5768 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5769 ; AVX1-NEXT:    retq
   5770 ;
   5771 ; AVX2-LABEL: test127:
   5772 ; AVX2:       # BB#0: # %entry
   5773 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   5774 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
   5775 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
   5776 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5777 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
   5778 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
   5779 ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
   5780 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5781 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
   5782 ; AVX2-NEXT:    retq
   5783 ;
   5784 ; AVX512F-LABEL: test127:
   5785 ; AVX512F:       # BB#0: # %entry
   5786 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   5787 ; AVX512F-NEXT:    retq
   5788 entry:
   5789   %cmp = icmp ugt <8 x i64> %a, %b
   5790   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5791   ret <8 x i64> %sel
   5792 }
   5793 
   5794 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
   5795 ; SSE2-LABEL: test128:
   5796 ; SSE2:       # BB#0: # %entry
   5797 ; SSE2-NEXT:    movdqa %xmm7, %xmm11
   5798 ; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
   5799 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   5800 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   5801 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   5802 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   5803 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   5804 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   5805 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   5806 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   5807 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   5808 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   5809 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   5810 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5811 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   5812 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   5813 ; SSE2-NEXT:    pand %xmm12, %xmm0
   5814 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   5815 ; SSE2-NEXT:    por %xmm0, %xmm12
   5816 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   5817 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   5818 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   5819 ; SSE2-NEXT:    movdqa %xmm3, %xmm11
   5820 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5821 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   5822 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   5823 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   5824 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5825 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   5826 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   5827 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   5828 ; SSE2-NEXT:    pand %xmm15, %xmm11
   5829 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   5830 ; SSE2-NEXT:    por %xmm11, %xmm13
   5831 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   5832 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5833 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   5834 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   5835 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   5836 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   5837 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   5838 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   5839 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5840 ; SSE2-NEXT:    pand %xmm11, %xmm14
   5841 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   5842 ; SSE2-NEXT:    por %xmm14, %xmm15
   5843 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
   5844 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   5845 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   5846 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   5847 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   5848 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   5849 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   5850 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   5851 ; SSE2-NEXT:    pand %xmm11, %xmm0
   5852 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   5853 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   5854 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   5855 ; SSE2-NEXT:    por %xmm0, %xmm14
   5856 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   5857 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   5858 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   5859 ; SSE2-NEXT:    pandn %xmm9, %xmm14
   5860 ; SSE2-NEXT:    pandn %xmm4, %xmm1
   5861 ; SSE2-NEXT:    por %xmm14, %xmm1
   5862 ; SSE2-NEXT:    pandn %xmm2, %xmm15
   5863 ; SSE2-NEXT:    pandn %xmm5, %xmm11
   5864 ; SSE2-NEXT:    por %xmm15, %xmm11
   5865 ; SSE2-NEXT:    pandn %xmm3, %xmm13
   5866 ; SSE2-NEXT:    pandn %xmm6, %xmm10
   5867 ; SSE2-NEXT:    por %xmm13, %xmm10
   5868 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   5869 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
   5870 ; SSE2-NEXT:    por %xmm12, %xmm8
   5871 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   5872 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   5873 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   5874 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   5875 ; SSE2-NEXT:    retq
   5876 ;
   5877 ; SSE4-LABEL: test128:
   5878 ; SSE4:       # BB#0: # %entry
   5879 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   5880 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   5881 ; SSE4-NEXT:    movdqa %xmm3, %xmm10
   5882 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5883 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
   5884 ; SSE4-NEXT:    pxor %xmm0, %xmm8
   5885 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm8
   5886 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   5887 ; SSE4-NEXT:    pxor %xmm12, %xmm8
   5888 ; SSE4-NEXT:    movdqa %xmm2, %xmm11
   5889 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5890 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   5891 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   5892 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   5893 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   5894 ; SSE4-NEXT:    movdqa %xmm1, %xmm13
   5895 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   5896 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   5897 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   5898 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
   5899 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   5900 ; SSE4-NEXT:    movdqa %xmm9, %xmm13
   5901 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   5902 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   5903 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
   5904 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   5905 ; SSE4-NEXT:    blendvpd %xmm9, %xmm4
   5906 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   5907 ; SSE4-NEXT:    blendvpd %xmm1, %xmm5
   5908 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   5909 ; SSE4-NEXT:    blendvpd %xmm2, %xmm6
   5910 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   5911 ; SSE4-NEXT:    blendvpd %xmm3, %xmm7
   5912 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5913 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5914 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5915 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5916 ; SSE4-NEXT:    retq
   5917 ;
   5918 ; AVX1-LABEL: test128:
   5919 ; AVX1:       # BB#0: # %entry
   5920 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5921 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5922 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   5923 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
   5924 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5925 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5926 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
   5927 ; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
   5928 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
   5929 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
   5930 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
   5931 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   5932 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5933 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5934 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   5935 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   5936 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   5937 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5938 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   5939 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
   5940 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
   5941 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   5942 ; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
   5943 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   5944 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5945 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
   5946 ; AVX1-NEXT:    retq
   5947 ;
   5948 ; AVX2-LABEL: test128:
   5949 ; AVX2:       # BB#0: # %entry
   5950 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   5951 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
   5952 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
   5953 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5954 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
   5955 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
   5956 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm7
   5957 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
   5958 ; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
   5959 ; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
   5960 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5961 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
   5962 ; AVX2-NEXT:    retq
   5963 ;
   5964 ; AVX512F-LABEL: test128:
   5965 ; AVX512F:       # BB#0: # %entry
   5966 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   5967 ; AVX512F-NEXT:    retq
   5968 entry:
   5969   %cmp = icmp uge <8 x i64> %a, %b
   5970   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5971   ret <8 x i64> %sel
   5972 }
   5973 
   5974 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
   5975 ; SSE2-LABEL: test129:
   5976 ; SSE2:       # BB#0: # %entry
   5977 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   5978 ; SSE2-NEXT:    movdqa %xmm7, %xmm3
   5979 ; SSE2-NEXT:    pcmpgtb %xmm8, %xmm3
   5980 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   5981 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm9
   5982 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   5983 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm10
   5984 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   5985 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm11
   5986 ; SSE2-NEXT:    pand %xmm11, %xmm4
   5987 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   5988 ; SSE2-NEXT:    por %xmm4, %xmm11
   5989 ; SSE2-NEXT:    pand %xmm10, %xmm5
   5990 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   5991 ; SSE2-NEXT:    por %xmm5, %xmm10
   5992 ; SSE2-NEXT:    pand %xmm9, %xmm6
   5993 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   5994 ; SSE2-NEXT:    por %xmm6, %xmm9
   5995 ; SSE2-NEXT:    pand %xmm3, %xmm7
   5996 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   5997 ; SSE2-NEXT:    por %xmm7, %xmm3
   5998 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   5999 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6000 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6001 ; SSE2-NEXT:    retq
   6002 ;
   6003 ; SSE4-LABEL: test129:
   6004 ; SSE4:       # BB#0: # %entry
   6005 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   6006 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   6007 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   6008 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   6009 ; SSE4-NEXT:    retq
   6010 ;
   6011 ; AVX1-LABEL: test129:
   6012 ; AVX1:       # BB#0: # %entry
   6013 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6014 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6015 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   6016 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   6017 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6018 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6019 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6020 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   6021 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   6022 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6023 ; AVX1-NEXT:    retq
   6024 ;
   6025 ; AVX2-LABEL: test129:
   6026 ; AVX2:       # BB#0: # %entry
   6027 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   6028 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   6029 ; AVX2-NEXT:    retq
   6030 ;
   6031 ; AVX512BW-LABEL: test129:
   6032 ; AVX512BW:       # BB#0: # %entry
   6033 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   6034 ; AVX512BW-NEXT:    retq
   6035 entry:
   6036   %cmp = icmp slt <64 x i8> %a, %b
   6037   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6038   ret <64 x i8> %sel
   6039 }
   6040 
   6041 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
   6042 ; SSE2-LABEL: test130:
   6043 ; SSE2:       # BB#0: # %entry
   6044 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   6045 ; SSE2-NEXT:    movdqa %xmm3, %xmm12
   6046 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm12
   6047 ; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
   6048 ; SSE2-NEXT:    movdqa %xmm12, %xmm9
   6049 ; SSE2-NEXT:    pxor %xmm13, %xmm9
   6050 ; SSE2-NEXT:    movdqa %xmm8, %xmm14
   6051 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm14
   6052 ; SSE2-NEXT:    movdqa %xmm14, %xmm2
   6053 ; SSE2-NEXT:    pxor %xmm13, %xmm2
   6054 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   6055 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm15
   6056 ; SSE2-NEXT:    movdqa %xmm15, %xmm10
   6057 ; SSE2-NEXT:    pxor %xmm13, %xmm10
   6058 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6059 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
   6060 ; SSE2-NEXT:    pxor %xmm11, %xmm13
   6061 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   6062 ; SSE2-NEXT:    pandn %xmm0, %xmm13
   6063 ; SSE2-NEXT:    por %xmm13, %xmm11
   6064 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   6065 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6066 ; SSE2-NEXT:    por %xmm15, %xmm10
   6067 ; SSE2-NEXT:    pandn %xmm6, %xmm14
   6068 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   6069 ; SSE2-NEXT:    por %xmm14, %xmm2
   6070 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   6071 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   6072 ; SSE2-NEXT:    por %xmm12, %xmm9
   6073 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6074 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6075 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
   6076 ; SSE2-NEXT:    retq
   6077 ;
   6078 ; SSE4-LABEL: test130:
   6079 ; SSE4:       # BB#0: # %entry
   6080 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   6081 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   6082 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   6083 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   6084 ; SSE4-NEXT:    retq
   6085 ;
   6086 ; AVX1-LABEL: test130:
   6087 ; AVX1:       # BB#0: # %entry
   6088 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6089 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6090 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   6091 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   6092 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6093 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6094 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6095 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   6096 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   6097 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6098 ; AVX1-NEXT:    retq
   6099 ;
   6100 ; AVX2-LABEL: test130:
   6101 ; AVX2:       # BB#0: # %entry
   6102 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   6103 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   6104 ; AVX2-NEXT:    retq
   6105 ;
   6106 ; AVX512BW-LABEL: test130:
   6107 ; AVX512BW:       # BB#0: # %entry
   6108 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   6109 ; AVX512BW-NEXT:    retq
   6110 entry:
   6111   %cmp = icmp sle <64 x i8> %a, %b
   6112   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6113   ret <64 x i8> %sel
   6114 }
   6115 
   6116 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
   6117 ; SSE2-LABEL: test131:
   6118 ; SSE2:       # BB#0: # %entry
   6119 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6120 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
   6121 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   6122 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm9
   6123 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   6124 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm10
   6125 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6126 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
   6127 ; SSE2-NEXT:    pand %xmm11, %xmm4
   6128 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   6129 ; SSE2-NEXT:    por %xmm4, %xmm11
   6130 ; SSE2-NEXT:    pand %xmm10, %xmm5
   6131 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6132 ; SSE2-NEXT:    por %xmm5, %xmm10
   6133 ; SSE2-NEXT:    pand %xmm9, %xmm6
   6134 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   6135 ; SSE2-NEXT:    por %xmm6, %xmm9
   6136 ; SSE2-NEXT:    pand %xmm3, %xmm7
   6137 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   6138 ; SSE2-NEXT:    por %xmm7, %xmm3
   6139 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6140 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6141 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6142 ; SSE2-NEXT:    retq
   6143 ;
   6144 ; SSE4-LABEL: test131:
   6145 ; SSE4:       # BB#0: # %entry
   6146 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   6147 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   6148 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   6149 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   6150 ; SSE4-NEXT:    retq
   6151 ;
   6152 ; AVX1-LABEL: test131:
   6153 ; AVX1:       # BB#0: # %entry
   6154 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6155 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6156 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   6157 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   6158 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6159 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6160 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6161 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   6162 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   6163 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6164 ; AVX1-NEXT:    retq
   6165 ;
   6166 ; AVX2-LABEL: test131:
   6167 ; AVX2:       # BB#0: # %entry
   6168 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   6169 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   6170 ; AVX2-NEXT:    retq
   6171 ;
   6172 ; AVX512BW-LABEL: test131:
   6173 ; AVX512BW:       # BB#0: # %entry
   6174 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   6175 ; AVX512BW-NEXT:    retq
   6176 entry:
   6177   %cmp = icmp sgt <64 x i8> %a, %b
   6178   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6179   ret <64 x i8> %sel
   6180 }
   6181 
   6182 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
   6183 ; SSE2-LABEL: test132:
   6184 ; SSE2:       # BB#0: # %entry
   6185 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   6186 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   6187 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   6188 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm12
   6189 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   6190 ; SSE2-NEXT:    movdqa %xmm12, %xmm9
   6191 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6192 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   6193 ; SSE2-NEXT:    pcmpgtb %xmm8, %xmm13
   6194 ; SSE2-NEXT:    movdqa %xmm13, %xmm2
   6195 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   6196 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   6197 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm14
   6198 ; SSE2-NEXT:    movdqa %xmm14, %xmm11
   6199 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   6200 ; SSE2-NEXT:    movdqa %xmm4, %xmm15
   6201 ; SSE2-NEXT:    pcmpgtb %xmm10, %xmm15
   6202 ; SSE2-NEXT:    pxor %xmm15, %xmm0
   6203 ; SSE2-NEXT:    pandn %xmm4, %xmm15
   6204 ; SSE2-NEXT:    pandn %xmm10, %xmm0
   6205 ; SSE2-NEXT:    por %xmm15, %xmm0
   6206 ; SSE2-NEXT:    pandn %xmm5, %xmm14
   6207 ; SSE2-NEXT:    pandn %xmm1, %xmm11
   6208 ; SSE2-NEXT:    por %xmm14, %xmm11
   6209 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   6210 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   6211 ; SSE2-NEXT:    por %xmm13, %xmm2
   6212 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   6213 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   6214 ; SSE2-NEXT:    por %xmm12, %xmm9
   6215 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   6216 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
   6217 ; SSE2-NEXT:    retq
   6218 ;
   6219 ; SSE4-LABEL: test132:
   6220 ; SSE4:       # BB#0: # %entry
   6221 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   6222 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   6223 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   6224 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   6225 ; SSE4-NEXT:    retq
   6226 ;
   6227 ; AVX1-LABEL: test132:
   6228 ; AVX1:       # BB#0: # %entry
   6229 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6230 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6231 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   6232 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   6233 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6234 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6235 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6236 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   6237 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   6238 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6239 ; AVX1-NEXT:    retq
   6240 ;
   6241 ; AVX2-LABEL: test132:
   6242 ; AVX2:       # BB#0: # %entry
   6243 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   6244 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   6245 ; AVX2-NEXT:    retq
   6246 ;
   6247 ; AVX512BW-LABEL: test132:
   6248 ; AVX512BW:       # BB#0: # %entry
   6249 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   6250 ; AVX512BW-NEXT:    retq
   6251 entry:
   6252   %cmp = icmp sge <64 x i8> %a, %b
   6253   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6254   ret <64 x i8> %sel
   6255 }
   6256 
   6257 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
   6258 ; SSE-LABEL: test133:
   6259 ; SSE:       # BB#0: # %entry
   6260 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   6261 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   6262 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   6263 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   6264 ; SSE-NEXT:    retq
   6265 ;
   6266 ; AVX1-LABEL: test133:
   6267 ; AVX1:       # BB#0: # %entry
   6268 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6269 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6270 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   6271 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   6272 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6273 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6274 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6275 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   6276 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   6277 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6278 ; AVX1-NEXT:    retq
   6279 ;
   6280 ; AVX2-LABEL: test133:
   6281 ; AVX2:       # BB#0: # %entry
   6282 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   6283 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   6284 ; AVX2-NEXT:    retq
   6285 ;
   6286 ; AVX512BW-LABEL: test133:
   6287 ; AVX512BW:       # BB#0: # %entry
   6288 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   6289 ; AVX512BW-NEXT:    retq
   6290 entry:
   6291   %cmp = icmp ult <64 x i8> %a, %b
   6292   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6293   ret <64 x i8> %sel
   6294 }
   6295 
   6296 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
   6297 ; SSE-LABEL: test134:
   6298 ; SSE:       # BB#0: # %entry
   6299 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   6300 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   6301 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   6302 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   6303 ; SSE-NEXT:    retq
   6304 ;
   6305 ; AVX1-LABEL: test134:
   6306 ; AVX1:       # BB#0: # %entry
   6307 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6308 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6309 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   6310 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   6311 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6312 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6313 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6314 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   6315 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   6316 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6317 ; AVX1-NEXT:    retq
   6318 ;
   6319 ; AVX2-LABEL: test134:
   6320 ; AVX2:       # BB#0: # %entry
   6321 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   6322 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   6323 ; AVX2-NEXT:    retq
   6324 ;
   6325 ; AVX512BW-LABEL: test134:
   6326 ; AVX512BW:       # BB#0: # %entry
   6327 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   6328 ; AVX512BW-NEXT:    retq
   6329 entry:
   6330   %cmp = icmp ule <64 x i8> %a, %b
   6331   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6332   ret <64 x i8> %sel
   6333 }
   6334 
   6335 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
   6336 ; SSE-LABEL: test135:
   6337 ; SSE:       # BB#0: # %entry
   6338 ; SSE-NEXT:    pminub %xmm4, %xmm0
   6339 ; SSE-NEXT:    pminub %xmm5, %xmm1
   6340 ; SSE-NEXT:    pminub %xmm6, %xmm2
   6341 ; SSE-NEXT:    pminub %xmm7, %xmm3
   6342 ; SSE-NEXT:    retq
   6343 ;
   6344 ; AVX1-LABEL: test135:
   6345 ; AVX1:       # BB#0: # %entry
   6346 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6347 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6348 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   6349 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   6350 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6351 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6352 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6353 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   6354 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   6355 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6356 ; AVX1-NEXT:    retq
   6357 ;
   6358 ; AVX2-LABEL: test135:
   6359 ; AVX2:       # BB#0: # %entry
   6360 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   6361 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   6362 ; AVX2-NEXT:    retq
   6363 ;
   6364 ; AVX512BW-LABEL: test135:
   6365 ; AVX512BW:       # BB#0: # %entry
   6366 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   6367 ; AVX512BW-NEXT:    retq
   6368 entry:
   6369   %cmp = icmp ugt <64 x i8> %a, %b
   6370   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6371   ret <64 x i8> %sel
   6372 }
   6373 
   6374 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
   6375 ; SSE-LABEL: test136:
   6376 ; SSE:       # BB#0: # %entry
   6377 ; SSE-NEXT:    pminub %xmm4, %xmm0
   6378 ; SSE-NEXT:    pminub %xmm5, %xmm1
   6379 ; SSE-NEXT:    pminub %xmm6, %xmm2
   6380 ; SSE-NEXT:    pminub %xmm7, %xmm3
   6381 ; SSE-NEXT:    retq
   6382 ;
   6383 ; AVX1-LABEL: test136:
   6384 ; AVX1:       # BB#0: # %entry
   6385 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6386 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6387 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   6388 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   6389 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6390 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6391 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6392 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   6393 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   6394 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6395 ; AVX1-NEXT:    retq
   6396 ;
   6397 ; AVX2-LABEL: test136:
   6398 ; AVX2:       # BB#0: # %entry
   6399 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   6400 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   6401 ; AVX2-NEXT:    retq
   6402 ;
   6403 ; AVX512BW-LABEL: test136:
   6404 ; AVX512BW:       # BB#0: # %entry
   6405 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   6406 ; AVX512BW-NEXT:    retq
   6407 entry:
   6408   %cmp = icmp uge <64 x i8> %a, %b
   6409   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   6410   ret <64 x i8> %sel
   6411 }
   6412 
   6413 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
   6414 ; SSE-LABEL: test137:
   6415 ; SSE:       # BB#0: # %entry
   6416 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   6417 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   6418 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   6419 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   6420 ; SSE-NEXT:    retq
   6421 ;
   6422 ; AVX1-LABEL: test137:
   6423 ; AVX1:       # BB#0: # %entry
   6424 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6425 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6426 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   6427 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   6428 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6429 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6430 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6431 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   6432 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   6433 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6434 ; AVX1-NEXT:    retq
   6435 ;
   6436 ; AVX2-LABEL: test137:
   6437 ; AVX2:       # BB#0: # %entry
   6438 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   6439 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   6440 ; AVX2-NEXT:    retq
   6441 ;
   6442 ; AVX512BW-LABEL: test137:
   6443 ; AVX512BW:       # BB#0: # %entry
   6444 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   6445 ; AVX512BW-NEXT:    retq
   6446 entry:
   6447   %cmp = icmp slt <32 x i16> %a, %b
   6448   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6449   ret <32 x i16> %sel
   6450 }
   6451 
   6452 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
   6453 ; SSE-LABEL: test138:
   6454 ; SSE:       # BB#0: # %entry
   6455 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   6456 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   6457 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   6458 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   6459 ; SSE-NEXT:    retq
   6460 ;
   6461 ; AVX1-LABEL: test138:
   6462 ; AVX1:       # BB#0: # %entry
   6463 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6464 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6465 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   6466 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   6467 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6468 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6469 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6470 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   6471 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   6472 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6473 ; AVX1-NEXT:    retq
   6474 ;
   6475 ; AVX2-LABEL: test138:
   6476 ; AVX2:       # BB#0: # %entry
   6477 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   6478 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   6479 ; AVX2-NEXT:    retq
   6480 ;
   6481 ; AVX512BW-LABEL: test138:
   6482 ; AVX512BW:       # BB#0: # %entry
   6483 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   6484 ; AVX512BW-NEXT:    retq
   6485 entry:
   6486   %cmp = icmp sle <32 x i16> %a, %b
   6487   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6488   ret <32 x i16> %sel
   6489 }
   6490 
   6491 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
   6492 ; SSE-LABEL: test139:
   6493 ; SSE:       # BB#0: # %entry
   6494 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   6495 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   6496 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   6497 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   6498 ; SSE-NEXT:    retq
   6499 ;
   6500 ; AVX1-LABEL: test139:
   6501 ; AVX1:       # BB#0: # %entry
   6502 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6503 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6504 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   6505 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   6506 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6507 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6508 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6509 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   6510 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   6511 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6512 ; AVX1-NEXT:    retq
   6513 ;
   6514 ; AVX2-LABEL: test139:
   6515 ; AVX2:       # BB#0: # %entry
   6516 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   6517 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   6518 ; AVX2-NEXT:    retq
   6519 ;
   6520 ; AVX512BW-LABEL: test139:
   6521 ; AVX512BW:       # BB#0: # %entry
   6522 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   6523 ; AVX512BW-NEXT:    retq
   6524 entry:
   6525   %cmp = icmp sgt <32 x i16> %a, %b
   6526   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6527   ret <32 x i16> %sel
   6528 }
   6529 
   6530 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
   6531 ; SSE-LABEL: test140:
   6532 ; SSE:       # BB#0: # %entry
   6533 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   6534 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   6535 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   6536 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   6537 ; SSE-NEXT:    retq
   6538 ;
   6539 ; AVX1-LABEL: test140:
   6540 ; AVX1:       # BB#0: # %entry
   6541 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6542 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6543 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   6544 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   6545 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6546 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6547 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6548 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   6549 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   6550 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6551 ; AVX1-NEXT:    retq
   6552 ;
   6553 ; AVX2-LABEL: test140:
   6554 ; AVX2:       # BB#0: # %entry
   6555 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   6556 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   6557 ; AVX2-NEXT:    retq
   6558 ;
   6559 ; AVX512BW-LABEL: test140:
   6560 ; AVX512BW:       # BB#0: # %entry
   6561 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   6562 ; AVX512BW-NEXT:    retq
   6563 entry:
   6564   %cmp = icmp sge <32 x i16> %a, %b
   6565   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6566   ret <32 x i16> %sel
   6567 }
   6568 
   6569 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
   6570 ; SSE2-LABEL: test141:
   6571 ; SSE2:       # BB#0: # %entry
   6572 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6573 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768]
   6574 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   6575 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6576 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   6577 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   6578 ; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
   6579 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   6580 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   6581 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   6582 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6583 ; SSE2-NEXT:    pcmpgtw %xmm10, %xmm9
   6584 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   6585 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   6586 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   6587 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   6588 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm10
   6589 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   6590 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   6591 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   6592 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm0
   6593 ; SSE2-NEXT:    pand %xmm0, %xmm4
   6594 ; SSE2-NEXT:    pandn %xmm11, %xmm0
   6595 ; SSE2-NEXT:    por %xmm4, %xmm0
   6596 ; SSE2-NEXT:    pand %xmm10, %xmm5
   6597 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6598 ; SSE2-NEXT:    por %xmm5, %xmm10
   6599 ; SSE2-NEXT:    pand %xmm9, %xmm6
   6600 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   6601 ; SSE2-NEXT:    por %xmm6, %xmm9
   6602 ; SSE2-NEXT:    pand %xmm8, %xmm7
   6603 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   6604 ; SSE2-NEXT:    por %xmm7, %xmm8
   6605 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6606 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6607 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   6608 ; SSE2-NEXT:    retq
   6609 ;
   6610 ; SSE4-LABEL: test141:
   6611 ; SSE4:       # BB#0: # %entry
   6612 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   6613 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   6614 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   6615 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   6616 ; SSE4-NEXT:    retq
   6617 ;
   6618 ; AVX1-LABEL: test141:
   6619 ; AVX1:       # BB#0: # %entry
   6620 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6621 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6622 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   6623 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   6624 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6625 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6626 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6627 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   6628 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   6629 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6630 ; AVX1-NEXT:    retq
   6631 ;
   6632 ; AVX2-LABEL: test141:
   6633 ; AVX2:       # BB#0: # %entry
   6634 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   6635 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   6636 ; AVX2-NEXT:    retq
   6637 ;
   6638 ; AVX512BW-LABEL: test141:
   6639 ; AVX512BW:       # BB#0: # %entry
   6640 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   6641 ; AVX512BW-NEXT:    retq
   6642 entry:
   6643   %cmp = icmp ult <32 x i16> %a, %b
   6644   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6645   ret <32 x i16> %sel
   6646 }
   6647 
   6648 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
   6649 ; SSE2-LABEL: test142:
   6650 ; SSE2:       # BB#0: # %entry
   6651 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6652 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   6653 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   6654 ; SSE2-NEXT:    psubusw %xmm7, %xmm3
   6655 ; SSE2-NEXT:    pxor %xmm12, %xmm12
   6656 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm3
   6657 ; SSE2-NEXT:    psubusw %xmm6, %xmm2
   6658 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm2
   6659 ; SSE2-NEXT:    psubusw %xmm5, %xmm1
   6660 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm1
   6661 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6662 ; SSE2-NEXT:    psubusw %xmm4, %xmm11
   6663 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm11
   6664 ; SSE2-NEXT:    pand %xmm11, %xmm4
   6665 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   6666 ; SSE2-NEXT:    por %xmm4, %xmm11
   6667 ; SSE2-NEXT:    pand %xmm1, %xmm5
   6668 ; SSE2-NEXT:    pandn %xmm10, %xmm1
   6669 ; SSE2-NEXT:    por %xmm5, %xmm1
   6670 ; SSE2-NEXT:    pand %xmm2, %xmm6
   6671 ; SSE2-NEXT:    pandn %xmm9, %xmm2
   6672 ; SSE2-NEXT:    por %xmm6, %xmm2
   6673 ; SSE2-NEXT:    pand %xmm3, %xmm7
   6674 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   6675 ; SSE2-NEXT:    por %xmm7, %xmm3
   6676 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6677 ; SSE2-NEXT:    retq
   6678 ;
   6679 ; SSE4-LABEL: test142:
   6680 ; SSE4:       # BB#0: # %entry
   6681 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   6682 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   6683 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   6684 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   6685 ; SSE4-NEXT:    retq
   6686 ;
   6687 ; AVX1-LABEL: test142:
   6688 ; AVX1:       # BB#0: # %entry
   6689 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6690 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6691 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   6692 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   6693 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6694 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6695 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6696 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   6697 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   6698 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6699 ; AVX1-NEXT:    retq
   6700 ;
   6701 ; AVX2-LABEL: test142:
   6702 ; AVX2:       # BB#0: # %entry
   6703 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   6704 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   6705 ; AVX2-NEXT:    retq
   6706 ;
   6707 ; AVX512BW-LABEL: test142:
   6708 ; AVX512BW:       # BB#0: # %entry
   6709 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   6710 ; AVX512BW-NEXT:    retq
   6711 entry:
   6712   %cmp = icmp ule <32 x i16> %a, %b
   6713   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6714   ret <32 x i16> %sel
   6715 }
   6716 
   6717 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
   6718 ; SSE2-LABEL: test143:
   6719 ; SSE2:       # BB#0: # %entry
   6720 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6721 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768]
   6722 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   6723 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6724 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6725 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   6726 ; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
   6727 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   6728 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   6729 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   6730 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   6731 ; SSE2-NEXT:    pcmpgtw %xmm10, %xmm9
   6732 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   6733 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   6734 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   6735 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   6736 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm10
   6737 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   6738 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   6739 ; SSE2-NEXT:    pxor %xmm11, %xmm0
   6740 ; SSE2-NEXT:    pcmpgtw %xmm12, %xmm0
   6741 ; SSE2-NEXT:    pand %xmm0, %xmm4
   6742 ; SSE2-NEXT:    pandn %xmm11, %xmm0
   6743 ; SSE2-NEXT:    por %xmm4, %xmm0
   6744 ; SSE2-NEXT:    pand %xmm10, %xmm5
   6745 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6746 ; SSE2-NEXT:    por %xmm5, %xmm10
   6747 ; SSE2-NEXT:    pand %xmm9, %xmm6
   6748 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   6749 ; SSE2-NEXT:    por %xmm6, %xmm9
   6750 ; SSE2-NEXT:    pand %xmm8, %xmm7
   6751 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   6752 ; SSE2-NEXT:    por %xmm7, %xmm8
   6753 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6754 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6755 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   6756 ; SSE2-NEXT:    retq
   6757 ;
   6758 ; SSE4-LABEL: test143:
   6759 ; SSE4:       # BB#0: # %entry
   6760 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   6761 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   6762 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   6763 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   6764 ; SSE4-NEXT:    retq
   6765 ;
   6766 ; AVX1-LABEL: test143:
   6767 ; AVX1:       # BB#0: # %entry
   6768 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6769 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6770 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   6771 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   6772 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6773 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6774 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6775 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   6776 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   6777 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6778 ; AVX1-NEXT:    retq
   6779 ;
   6780 ; AVX2-LABEL: test143:
   6781 ; AVX2:       # BB#0: # %entry
   6782 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   6783 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   6784 ; AVX2-NEXT:    retq
   6785 ;
   6786 ; AVX512BW-LABEL: test143:
   6787 ; AVX512BW:       # BB#0: # %entry
   6788 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   6789 ; AVX512BW-NEXT:    retq
   6790 entry:
   6791   %cmp = icmp ugt <32 x i16> %a, %b
   6792   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6793   ret <32 x i16> %sel
   6794 }
   6795 
   6796 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
   6797 ; SSE2-LABEL: test144:
   6798 ; SSE2:       # BB#0: # %entry
   6799 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6800 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   6801 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   6802 ; SSE2-NEXT:    movdqa %xmm7, %xmm3
   6803 ; SSE2-NEXT:    psubusw %xmm8, %xmm3
   6804 ; SSE2-NEXT:    pxor %xmm12, %xmm12
   6805 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm3
   6806 ; SSE2-NEXT:    movdqa %xmm6, %xmm2
   6807 ; SSE2-NEXT:    psubusw %xmm9, %xmm2
   6808 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm2
   6809 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   6810 ; SSE2-NEXT:    psubusw %xmm10, %xmm1
   6811 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm1
   6812 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   6813 ; SSE2-NEXT:    psubusw %xmm0, %xmm11
   6814 ; SSE2-NEXT:    pcmpeqw %xmm12, %xmm11
   6815 ; SSE2-NEXT:    pand %xmm11, %xmm4
   6816 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   6817 ; SSE2-NEXT:    por %xmm4, %xmm11
   6818 ; SSE2-NEXT:    pand %xmm1, %xmm5
   6819 ; SSE2-NEXT:    pandn %xmm10, %xmm1
   6820 ; SSE2-NEXT:    por %xmm5, %xmm1
   6821 ; SSE2-NEXT:    pand %xmm2, %xmm6
   6822 ; SSE2-NEXT:    pandn %xmm9, %xmm2
   6823 ; SSE2-NEXT:    por %xmm6, %xmm2
   6824 ; SSE2-NEXT:    pand %xmm3, %xmm7
   6825 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   6826 ; SSE2-NEXT:    por %xmm7, %xmm3
   6827 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6828 ; SSE2-NEXT:    retq
   6829 ;
   6830 ; SSE4-LABEL: test144:
   6831 ; SSE4:       # BB#0: # %entry
   6832 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   6833 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   6834 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   6835 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   6836 ; SSE4-NEXT:    retq
   6837 ;
   6838 ; AVX1-LABEL: test144:
   6839 ; AVX1:       # BB#0: # %entry
   6840 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6841 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6842 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   6843 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   6844 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6845 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6846 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6847 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   6848 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   6849 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6850 ; AVX1-NEXT:    retq
   6851 ;
   6852 ; AVX2-LABEL: test144:
   6853 ; AVX2:       # BB#0: # %entry
   6854 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   6855 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   6856 ; AVX2-NEXT:    retq
   6857 ;
   6858 ; AVX512BW-LABEL: test144:
   6859 ; AVX512BW:       # BB#0: # %entry
   6860 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   6861 ; AVX512BW-NEXT:    retq
   6862 entry:
   6863   %cmp = icmp uge <32 x i16> %a, %b
   6864   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6865   ret <32 x i16> %sel
   6866 }
   6867 
   6868 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
   6869 ; SSE2-LABEL: test145:
   6870 ; SSE2:       # BB#0: # %entry
   6871 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   6872 ; SSE2-NEXT:    movdqa %xmm7, %xmm3
   6873 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm3
   6874 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   6875 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
   6876 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   6877 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm10
   6878 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   6879 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm11
   6880 ; SSE2-NEXT:    pand %xmm11, %xmm4
   6881 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   6882 ; SSE2-NEXT:    por %xmm4, %xmm11
   6883 ; SSE2-NEXT:    pand %xmm10, %xmm5
   6884 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6885 ; SSE2-NEXT:    por %xmm5, %xmm10
   6886 ; SSE2-NEXT:    pand %xmm9, %xmm6
   6887 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   6888 ; SSE2-NEXT:    por %xmm6, %xmm9
   6889 ; SSE2-NEXT:    pand %xmm3, %xmm7
   6890 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   6891 ; SSE2-NEXT:    por %xmm7, %xmm3
   6892 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6893 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6894 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   6895 ; SSE2-NEXT:    retq
   6896 ;
   6897 ; SSE4-LABEL: test145:
   6898 ; SSE4:       # BB#0: # %entry
   6899 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   6900 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   6901 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   6902 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   6903 ; SSE4-NEXT:    retq
   6904 ;
   6905 ; AVX1-LABEL: test145:
   6906 ; AVX1:       # BB#0: # %entry
   6907 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6908 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6909 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   6910 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   6911 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6912 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6913 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6914 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   6915 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   6916 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6917 ; AVX1-NEXT:    retq
   6918 ;
   6919 ; AVX2-LABEL: test145:
   6920 ; AVX2:       # BB#0: # %entry
   6921 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   6922 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   6923 ; AVX2-NEXT:    retq
   6924 ;
   6925 ; AVX512F-LABEL: test145:
   6926 ; AVX512F:       # BB#0: # %entry
   6927 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   6928 ; AVX512F-NEXT:    retq
   6929 entry:
   6930   %cmp = icmp slt <16 x i32> %a, %b
   6931   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6932   ret <16 x i32> %sel
   6933 }
   6934 
   6935 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
   6936 ; SSE2-LABEL: test146:
   6937 ; SSE2:       # BB#0: # %entry
   6938 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   6939 ; SSE2-NEXT:    movdqa %xmm3, %xmm12
   6940 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm12
   6941 ; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
   6942 ; SSE2-NEXT:    movdqa %xmm12, %xmm9
   6943 ; SSE2-NEXT:    pxor %xmm13, %xmm9
   6944 ; SSE2-NEXT:    movdqa %xmm8, %xmm14
   6945 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm14
   6946 ; SSE2-NEXT:    movdqa %xmm14, %xmm2
   6947 ; SSE2-NEXT:    pxor %xmm13, %xmm2
   6948 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   6949 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm15
   6950 ; SSE2-NEXT:    movdqa %xmm15, %xmm10
   6951 ; SSE2-NEXT:    pxor %xmm13, %xmm10
   6952 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   6953 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
   6954 ; SSE2-NEXT:    pxor %xmm11, %xmm13
   6955 ; SSE2-NEXT:    pandn %xmm4, %xmm11
   6956 ; SSE2-NEXT:    pandn %xmm0, %xmm13
   6957 ; SSE2-NEXT:    por %xmm13, %xmm11
   6958 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   6959 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   6960 ; SSE2-NEXT:    por %xmm15, %xmm10
   6961 ; SSE2-NEXT:    pandn %xmm6, %xmm14
   6962 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   6963 ; SSE2-NEXT:    por %xmm14, %xmm2
   6964 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   6965 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   6966 ; SSE2-NEXT:    por %xmm12, %xmm9
   6967 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   6968 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   6969 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
   6970 ; SSE2-NEXT:    retq
   6971 ;
   6972 ; SSE4-LABEL: test146:
   6973 ; SSE4:       # BB#0: # %entry
   6974 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   6975 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   6976 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   6977 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   6978 ; SSE4-NEXT:    retq
   6979 ;
   6980 ; AVX1-LABEL: test146:
   6981 ; AVX1:       # BB#0: # %entry
   6982 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6983 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6984 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   6985 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   6986 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6987 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6988 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6989 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   6990 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   6991 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6992 ; AVX1-NEXT:    retq
   6993 ;
   6994 ; AVX2-LABEL: test146:
   6995 ; AVX2:       # BB#0: # %entry
   6996 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   6997 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   6998 ; AVX2-NEXT:    retq
   6999 ;
   7000 ; AVX512F-LABEL: test146:
   7001 ; AVX512F:       # BB#0: # %entry
   7002 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   7003 ; AVX512F-NEXT:    retq
   7004 entry:
   7005   %cmp = icmp sle <16 x i32> %a, %b
   7006   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7007   ret <16 x i32> %sel
   7008 }
   7009 
   7010 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
   7011 ; SSE2-LABEL: test147:
   7012 ; SSE2:       # BB#0: # %entry
   7013 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   7014 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm3
   7015 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   7016 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm9
   7017 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   7018 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm10
   7019 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7020 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
   7021 ; SSE2-NEXT:    pand %xmm11, %xmm4
   7022 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   7023 ; SSE2-NEXT:    por %xmm4, %xmm11
   7024 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7025 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7026 ; SSE2-NEXT:    por %xmm5, %xmm10
   7027 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7028 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7029 ; SSE2-NEXT:    por %xmm6, %xmm9
   7030 ; SSE2-NEXT:    pand %xmm3, %xmm7
   7031 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   7032 ; SSE2-NEXT:    por %xmm7, %xmm3
   7033 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   7034 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7035 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7036 ; SSE2-NEXT:    retq
   7037 ;
   7038 ; SSE4-LABEL: test147:
   7039 ; SSE4:       # BB#0: # %entry
   7040 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   7041 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   7042 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   7043 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   7044 ; SSE4-NEXT:    retq
   7045 ;
   7046 ; AVX1-LABEL: test147:
   7047 ; AVX1:       # BB#0: # %entry
   7048 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7049 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7050 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   7051 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   7052 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7053 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7054 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7055 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   7056 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   7057 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7058 ; AVX1-NEXT:    retq
   7059 ;
   7060 ; AVX2-LABEL: test147:
   7061 ; AVX2:       # BB#0: # %entry
   7062 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   7063 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   7064 ; AVX2-NEXT:    retq
   7065 ;
   7066 ; AVX512F-LABEL: test147:
   7067 ; AVX512F:       # BB#0: # %entry
   7068 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   7069 ; AVX512F-NEXT:    retq
   7070 entry:
   7071   %cmp = icmp sgt <16 x i32> %a, %b
   7072   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7073   ret <16 x i32> %sel
   7074 }
   7075 
   7076 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
   7077 ; SSE2-LABEL: test148:
   7078 ; SSE2:       # BB#0: # %entry
   7079 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
   7080 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   7081 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   7082 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm12
   7083 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   7084 ; SSE2-NEXT:    movdqa %xmm12, %xmm9
   7085 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7086 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   7087 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm13
   7088 ; SSE2-NEXT:    movdqa %xmm13, %xmm2
   7089 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   7090 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   7091 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm14
   7092 ; SSE2-NEXT:    movdqa %xmm14, %xmm11
   7093 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   7094 ; SSE2-NEXT:    movdqa %xmm4, %xmm15
   7095 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm15
   7096 ; SSE2-NEXT:    pxor %xmm15, %xmm0
   7097 ; SSE2-NEXT:    pandn %xmm4, %xmm15
   7098 ; SSE2-NEXT:    pandn %xmm10, %xmm0
   7099 ; SSE2-NEXT:    por %xmm15, %xmm0
   7100 ; SSE2-NEXT:    pandn %xmm5, %xmm14
   7101 ; SSE2-NEXT:    pandn %xmm1, %xmm11
   7102 ; SSE2-NEXT:    por %xmm14, %xmm11
   7103 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7104 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   7105 ; SSE2-NEXT:    por %xmm13, %xmm2
   7106 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   7107 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   7108 ; SSE2-NEXT:    por %xmm12, %xmm9
   7109 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7110 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
   7111 ; SSE2-NEXT:    retq
   7112 ;
   7113 ; SSE4-LABEL: test148:
   7114 ; SSE4:       # BB#0: # %entry
   7115 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   7116 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   7117 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   7118 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   7119 ; SSE4-NEXT:    retq
   7120 ;
   7121 ; AVX1-LABEL: test148:
   7122 ; AVX1:       # BB#0: # %entry
   7123 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7124 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7125 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   7126 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   7127 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7128 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7129 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7130 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   7131 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   7132 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7133 ; AVX1-NEXT:    retq
   7134 ;
   7135 ; AVX2-LABEL: test148:
   7136 ; AVX2:       # BB#0: # %entry
   7137 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   7138 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   7139 ; AVX2-NEXT:    retq
   7140 ;
   7141 ; AVX512F-LABEL: test148:
   7142 ; AVX512F:       # BB#0: # %entry
   7143 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   7144 ; AVX512F-NEXT:    retq
   7145 entry:
   7146   %cmp = icmp sge <16 x i32> %a, %b
   7147   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7148   ret <16 x i32> %sel
   7149 }
   7150 
   7151 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
   7152 ; SSE2-LABEL: test149:
   7153 ; SSE2:       # BB#0: # %entry
   7154 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7155 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
   7156 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   7157 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7158 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   7159 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   7160 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
   7161 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   7162 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   7163 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   7164 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7165 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm9
   7166 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   7167 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   7168 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   7169 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   7170 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm10
   7171 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   7172 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   7173 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   7174 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm0
   7175 ; SSE2-NEXT:    pand %xmm0, %xmm4
   7176 ; SSE2-NEXT:    pandn %xmm11, %xmm0
   7177 ; SSE2-NEXT:    por %xmm4, %xmm0
   7178 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7179 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7180 ; SSE2-NEXT:    por %xmm5, %xmm10
   7181 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7182 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7183 ; SSE2-NEXT:    por %xmm6, %xmm9
   7184 ; SSE2-NEXT:    pand %xmm8, %xmm7
   7185 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7186 ; SSE2-NEXT:    por %xmm7, %xmm8
   7187 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7188 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7189 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7190 ; SSE2-NEXT:    retq
   7191 ;
   7192 ; SSE4-LABEL: test149:
   7193 ; SSE4:       # BB#0: # %entry
   7194 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   7195 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   7196 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   7197 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   7198 ; SSE4-NEXT:    retq
   7199 ;
   7200 ; AVX1-LABEL: test149:
   7201 ; AVX1:       # BB#0: # %entry
   7202 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7203 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7204 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   7205 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   7206 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7207 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7208 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7209 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   7210 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   7211 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7212 ; AVX1-NEXT:    retq
   7213 ;
   7214 ; AVX2-LABEL: test149:
   7215 ; AVX2:       # BB#0: # %entry
   7216 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   7217 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   7218 ; AVX2-NEXT:    retq
   7219 ;
   7220 ; AVX512F-LABEL: test149:
   7221 ; AVX512F:       # BB#0: # %entry
   7222 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   7223 ; AVX512F-NEXT:    retq
   7224 entry:
   7225   %cmp = icmp ult <16 x i32> %a, %b
   7226   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7227   ret <16 x i32> %sel
   7228 }
   7229 
   7230 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
   7231 ; SSE2-LABEL: test150:
   7232 ; SSE2:       # BB#0: # %entry
   7233 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   7234 ; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
   7235 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   7236 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   7237 ; SSE2-NEXT:    movdqa %xmm3, %xmm12
   7238 ; SSE2-NEXT:    pxor %xmm14, %xmm12
   7239 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
   7240 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   7241 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   7242 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   7243 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   7244 ; SSE2-NEXT:    pxor %xmm14, %xmm9
   7245 ; SSE2-NEXT:    movdqa %xmm2, %xmm13
   7246 ; SSE2-NEXT:    pxor %xmm14, %xmm13
   7247 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   7248 ; SSE2-NEXT:    movdqa %xmm13, %xmm9
   7249 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7250 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   7251 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   7252 ; SSE2-NEXT:    movdqa %xmm1, %xmm15
   7253 ; SSE2-NEXT:    pxor %xmm14, %xmm15
   7254 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   7255 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   7256 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   7257 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   7258 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7259 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   7260 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   7261 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   7262 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   7263 ; SSE2-NEXT:    pandn %xmm10, %xmm0
   7264 ; SSE2-NEXT:    por %xmm14, %xmm0
   7265 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   7266 ; SSE2-NEXT:    pandn %xmm1, %xmm11
   7267 ; SSE2-NEXT:    por %xmm15, %xmm11
   7268 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7269 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7270 ; SSE2-NEXT:    por %xmm13, %xmm9
   7271 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   7272 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7273 ; SSE2-NEXT:    por %xmm12, %xmm8
   7274 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7275 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7276 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7277 ; SSE2-NEXT:    retq
   7278 ;
   7279 ; SSE4-LABEL: test150:
   7280 ; SSE4:       # BB#0: # %entry
   7281 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   7282 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   7283 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   7284 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   7285 ; SSE4-NEXT:    retq
   7286 ;
   7287 ; AVX1-LABEL: test150:
   7288 ; AVX1:       # BB#0: # %entry
   7289 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7290 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7291 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   7292 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   7293 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7294 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7295 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7296 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   7297 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   7298 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7299 ; AVX1-NEXT:    retq
   7300 ;
   7301 ; AVX2-LABEL: test150:
   7302 ; AVX2:       # BB#0: # %entry
   7303 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   7304 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   7305 ; AVX2-NEXT:    retq
   7306 ;
   7307 ; AVX512F-LABEL: test150:
   7308 ; AVX512F:       # BB#0: # %entry
   7309 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   7310 ; AVX512F-NEXT:    retq
   7311 entry:
   7312   %cmp = icmp ule <16 x i32> %a, %b
   7313   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7314   ret <16 x i32> %sel
   7315 }
   7316 
   7317 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
   7318 ; SSE2-LABEL: test151:
   7319 ; SSE2:       # BB#0: # %entry
   7320 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7321 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
   7322 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   7323 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7324 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   7325 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   7326 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
   7327 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   7328 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   7329 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   7330 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7331 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm9
   7332 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   7333 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   7334 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   7335 ; SSE2-NEXT:    pxor %xmm0, %xmm10
   7336 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm10
   7337 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   7338 ; SSE2-NEXT:    pxor %xmm0, %xmm12
   7339 ; SSE2-NEXT:    pxor %xmm11, %xmm0
   7340 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm0
   7341 ; SSE2-NEXT:    pand %xmm0, %xmm4
   7342 ; SSE2-NEXT:    pandn %xmm11, %xmm0
   7343 ; SSE2-NEXT:    por %xmm4, %xmm0
   7344 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7345 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7346 ; SSE2-NEXT:    por %xmm5, %xmm10
   7347 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7348 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7349 ; SSE2-NEXT:    por %xmm6, %xmm9
   7350 ; SSE2-NEXT:    pand %xmm8, %xmm7
   7351 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7352 ; SSE2-NEXT:    por %xmm7, %xmm8
   7353 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7354 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7355 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7356 ; SSE2-NEXT:    retq
   7357 ;
   7358 ; SSE4-LABEL: test151:
   7359 ; SSE4:       # BB#0: # %entry
   7360 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   7361 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   7362 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   7363 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   7364 ; SSE4-NEXT:    retq
   7365 ;
   7366 ; AVX1-LABEL: test151:
   7367 ; AVX1:       # BB#0: # %entry
   7368 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7369 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7370 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   7371 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   7372 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7373 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7374 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7375 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   7376 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   7377 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7378 ; AVX1-NEXT:    retq
   7379 ;
   7380 ; AVX2-LABEL: test151:
   7381 ; AVX2:       # BB#0: # %entry
   7382 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   7383 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   7384 ; AVX2-NEXT:    retq
   7385 ;
   7386 ; AVX512F-LABEL: test151:
   7387 ; AVX512F:       # BB#0: # %entry
   7388 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   7389 ; AVX512F-NEXT:    retq
   7390 entry:
   7391   %cmp = icmp ugt <16 x i32> %a, %b
   7392   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7393   ret <16 x i32> %sel
   7394 }
   7395 
   7396 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
   7397 ; SSE2-LABEL: test152:
   7398 ; SSE2:       # BB#0: # %entry
   7399 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   7400 ; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
   7401 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   7402 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   7403 ; SSE2-NEXT:    movdqa %xmm7, %xmm12
   7404 ; SSE2-NEXT:    pxor %xmm14, %xmm12
   7405 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
   7406 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   7407 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   7408 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   7409 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   7410 ; SSE2-NEXT:    pxor %xmm14, %xmm9
   7411 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   7412 ; SSE2-NEXT:    pxor %xmm14, %xmm13
   7413 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
   7414 ; SSE2-NEXT:    movdqa %xmm13, %xmm9
   7415 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   7416 ; SSE2-NEXT:    movdqa %xmm1, %xmm11
   7417 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   7418 ; SSE2-NEXT:    movdqa %xmm5, %xmm15
   7419 ; SSE2-NEXT:    pxor %xmm14, %xmm15
   7420 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   7421 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   7422 ; SSE2-NEXT:    pxor %xmm14, %xmm11
   7423 ; SSE2-NEXT:    pxor %xmm4, %xmm14
   7424 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7425 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   7426 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   7427 ; SSE2-NEXT:    pxor %xmm14, %xmm0
   7428 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   7429 ; SSE2-NEXT:    pandn %xmm10, %xmm0
   7430 ; SSE2-NEXT:    por %xmm14, %xmm0
   7431 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   7432 ; SSE2-NEXT:    pandn %xmm1, %xmm11
   7433 ; SSE2-NEXT:    por %xmm15, %xmm11
   7434 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7435 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7436 ; SSE2-NEXT:    por %xmm13, %xmm9
   7437 ; SSE2-NEXT:    pandn %xmm7, %xmm12
   7438 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7439 ; SSE2-NEXT:    por %xmm12, %xmm8
   7440 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7441 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7442 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7443 ; SSE2-NEXT:    retq
   7444 ;
   7445 ; SSE4-LABEL: test152:
   7446 ; SSE4:       # BB#0: # %entry
   7447 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   7448 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   7449 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   7450 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   7451 ; SSE4-NEXT:    retq
   7452 ;
   7453 ; AVX1-LABEL: test152:
   7454 ; AVX1:       # BB#0: # %entry
   7455 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7456 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7457 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   7458 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   7459 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   7460 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7461 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7462 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   7463 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   7464 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   7465 ; AVX1-NEXT:    retq
   7466 ;
   7467 ; AVX2-LABEL: test152:
   7468 ; AVX2:       # BB#0: # %entry
   7469 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   7470 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   7471 ; AVX2-NEXT:    retq
   7472 ;
   7473 ; AVX512F-LABEL: test152:
   7474 ; AVX512F:       # BB#0: # %entry
   7475 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   7476 ; AVX512F-NEXT:    retq
   7477 entry:
   7478   %cmp = icmp uge <16 x i32> %a, %b
   7479   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   7480   ret <16 x i32> %sel
   7481 }
   7482 
   7483 ; -----------------------
   7484 
   7485 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
   7486 ; SSE2-LABEL: test153:
   7487 ; SSE2:       # BB#0: # %entry
   7488 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0]
   7489 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   7490 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   7491 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   7492 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   7493 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
   7494 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
   7495 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
   7496 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
   7497 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   7498 ; SSE2-NEXT:    pand %xmm12, %xmm9
   7499 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
   7500 ; SSE2-NEXT:    por %xmm9, %xmm8
   7501 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   7502 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   7503 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   7504 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   7505 ; SSE2-NEXT:    movdqa %xmm10, %xmm12
   7506 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
   7507 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   7508 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   7509 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   7510 ; SSE2-NEXT:    pand %xmm13, %xmm10
   7511 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   7512 ; SSE2-NEXT:    por %xmm10, %xmm9
   7513 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   7514 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   7515 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   7516 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   7517 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   7518 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
   7519 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   7520 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
   7521 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   7522 ; SSE2-NEXT:    pand %xmm14, %xmm12
   7523 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
   7524 ; SSE2-NEXT:    por %xmm12, %xmm10
   7525 ; SSE2-NEXT:    movdqa %xmm0, %xmm12
   7526 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   7527 ; SSE2-NEXT:    pxor %xmm4, %xmm11
   7528 ; SSE2-NEXT:    movdqa %xmm11, %xmm13
   7529 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
   7530 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   7531 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
   7532 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   7533 ; SSE2-NEXT:    pand %xmm14, %xmm12
   7534 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   7535 ; SSE2-NEXT:    por %xmm12, %xmm11
   7536 ; SSE2-NEXT:    pand %xmm11, %xmm4
   7537 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   7538 ; SSE2-NEXT:    por %xmm4, %xmm11
   7539 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7540 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7541 ; SSE2-NEXT:    por %xmm5, %xmm10
   7542 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7543 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7544 ; SSE2-NEXT:    por %xmm6, %xmm9
   7545 ; SSE2-NEXT:    pand %xmm8, %xmm7
   7546 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7547 ; SSE2-NEXT:    por %xmm7, %xmm8
   7548 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   7549 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7550 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7551 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7552 ; SSE2-NEXT:    retq
   7553 ;
   7554 ; SSE4-LABEL: test153:
   7555 ; SSE4:       # BB#0: # %entry
   7556 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7557 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   7558 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
   7559 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   7560 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
   7561 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   7562 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
   7563 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   7564 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
   7565 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   7566 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   7567 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   7568 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   7569 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   7570 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   7571 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   7572 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   7573 ; SSE4-NEXT:    retq
   7574 ;
   7575 ; AVX1-LABEL: test153:
   7576 ; AVX1:       # BB#0: # %entry
   7577 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7578 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
   7579 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7580 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm5
   7581 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   7582 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7583 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   7584 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   7585 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm6
   7586 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
   7587 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7588 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7589 ; AVX1-NEXT:    retq
   7590 ;
   7591 ; AVX2-LABEL: test153:
   7592 ; AVX2:       # BB#0: # %entry
   7593 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
   7594 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm5
   7595 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7596 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7597 ; AVX2-NEXT:    retq
   7598 ;
   7599 ; AVX512F-LABEL: test153:
   7600 ; AVX512F:       # BB#0: # %entry
   7601 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   7602 ; AVX512F-NEXT:    retq
   7603 entry:
   7604   %cmp = icmp slt <8 x i64> %a, %b
   7605   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7606   ret <8 x i64> %sel
   7607 }
   7608 
   7609 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
   7610 ; SSE2-LABEL: test154:
   7611 ; SSE2:       # BB#0: # %entry
   7612 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   7613 ; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
   7614 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   7615 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   7616 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   7617 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   7618 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   7619 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   7620 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   7621 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   7622 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7623 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   7624 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   7625 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   7626 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   7627 ; SSE2-NEXT:    pand %xmm12, %xmm0
   7628 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   7629 ; SSE2-NEXT:    por %xmm0, %xmm12
   7630 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   7631 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   7632 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   7633 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   7634 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7635 ; SSE2-NEXT:    movdqa %xmm3, %xmm13
   7636 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   7637 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   7638 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7639 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   7640 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   7641 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   7642 ; SSE2-NEXT:    pand %xmm15, %xmm11
   7643 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   7644 ; SSE2-NEXT:    por %xmm11, %xmm13
   7645 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   7646 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7647 ; SSE2-NEXT:    movdqa %xmm2, %xmm14
   7648 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   7649 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   7650 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   7651 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   7652 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   7653 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   7654 ; SSE2-NEXT:    pand %xmm11, %xmm14
   7655 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   7656 ; SSE2-NEXT:    por %xmm14, %xmm15
   7657 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   7658 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7659 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   7660 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   7661 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7662 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   7663 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   7664 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   7665 ; SSE2-NEXT:    pand %xmm11, %xmm0
   7666 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   7667 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   7668 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   7669 ; SSE2-NEXT:    por %xmm0, %xmm14
   7670 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   7671 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   7672 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   7673 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   7674 ; SSE2-NEXT:    pandn %xmm9, %xmm1
   7675 ; SSE2-NEXT:    por %xmm14, %xmm1
   7676 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   7677 ; SSE2-NEXT:    pandn %xmm2, %xmm11
   7678 ; SSE2-NEXT:    por %xmm15, %xmm11
   7679 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7680 ; SSE2-NEXT:    pandn %xmm3, %xmm10
   7681 ; SSE2-NEXT:    por %xmm13, %xmm10
   7682 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
   7683 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   7684 ; SSE2-NEXT:    por %xmm12, %xmm8
   7685 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   7686 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7687 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   7688 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7689 ; SSE2-NEXT:    retq
   7690 ;
   7691 ; SSE4-LABEL: test154:
   7692 ; SSE4:       # BB#0: # %entry
   7693 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7694 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   7695 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
   7696 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   7697 ; SSE4-NEXT:    pxor %xmm12, %xmm9
   7698 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   7699 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
   7700 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   7701 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   7702 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
   7703 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   7704 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   7705 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   7706 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   7707 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   7708 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   7709 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   7710 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   7711 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   7712 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   7713 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   7714 ; SSE4-NEXT:    retq
   7715 ;
   7716 ; AVX1-LABEL: test154:
   7717 ; AVX1:       # BB#0: # %entry
   7718 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   7719 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   7720 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7721 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
   7722 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7723 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm6
   7724 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   7725 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   7726 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   7727 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   7728 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   7729 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   7730 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm7
   7731 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
   7732 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   7733 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7734 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7735 ; AVX1-NEXT:    retq
   7736 ;
   7737 ; AVX2-LABEL: test154:
   7738 ; AVX2:       # BB#0: # %entry
   7739 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
   7740 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
   7741 ; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
   7742 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm6
   7743 ; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
   7744 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7745 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7746 ; AVX2-NEXT:    retq
   7747 ;
   7748 ; AVX512F-LABEL: test154:
   7749 ; AVX512F:       # BB#0: # %entry
   7750 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   7751 ; AVX512F-NEXT:    retq
   7752 entry:
   7753   %cmp = icmp sle <8 x i64> %a, %b
   7754   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7755   ret <8 x i64> %sel
   7756 }
   7757 
   7758 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
   7759 ; SSE2-LABEL: test155:
   7760 ; SSE2:       # BB#0: # %entry
   7761 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0]
   7762 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   7763 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   7764 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   7765 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   7766 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
   7767 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
   7768 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
   7769 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
   7770 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   7771 ; SSE2-NEXT:    pand %xmm12, %xmm9
   7772 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
   7773 ; SSE2-NEXT:    por %xmm9, %xmm8
   7774 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   7775 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   7776 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   7777 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   7778 ; SSE2-NEXT:    movdqa %xmm10, %xmm12
   7779 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
   7780 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   7781 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   7782 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   7783 ; SSE2-NEXT:    pand %xmm13, %xmm10
   7784 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   7785 ; SSE2-NEXT:    por %xmm10, %xmm9
   7786 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   7787 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   7788 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   7789 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   7790 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   7791 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
   7792 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   7793 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
   7794 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   7795 ; SSE2-NEXT:    pand %xmm14, %xmm12
   7796 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
   7797 ; SSE2-NEXT:    por %xmm12, %xmm10
   7798 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   7799 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   7800 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   7801 ; SSE2-NEXT:    movdqa %xmm11, %xmm13
   7802 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
   7803 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   7804 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
   7805 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   7806 ; SSE2-NEXT:    pand %xmm14, %xmm12
   7807 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   7808 ; SSE2-NEXT:    por %xmm12, %xmm11
   7809 ; SSE2-NEXT:    pand %xmm11, %xmm4
   7810 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   7811 ; SSE2-NEXT:    por %xmm4, %xmm11
   7812 ; SSE2-NEXT:    pand %xmm10, %xmm5
   7813 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   7814 ; SSE2-NEXT:    por %xmm5, %xmm10
   7815 ; SSE2-NEXT:    pand %xmm9, %xmm6
   7816 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   7817 ; SSE2-NEXT:    por %xmm6, %xmm9
   7818 ; SSE2-NEXT:    pand %xmm8, %xmm7
   7819 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   7820 ; SSE2-NEXT:    por %xmm7, %xmm8
   7821 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   7822 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   7823 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   7824 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7825 ; SSE2-NEXT:    retq
   7826 ;
   7827 ; SSE4-LABEL: test155:
   7828 ; SSE4:       # BB#0: # %entry
   7829 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7830 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   7831 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
   7832 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   7833 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
   7834 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   7835 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
   7836 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   7837 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   7838 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   7839 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   7840 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   7841 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   7842 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   7843 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   7844 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   7845 ; SSE4-NEXT:    retq
   7846 ;
   7847 ; AVX1-LABEL: test155:
   7848 ; AVX1:       # BB#0: # %entry
   7849 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   7850 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   7851 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7852 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm5
   7853 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   7854 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   7855 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   7856 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   7857 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm6
   7858 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
   7859 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7860 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7861 ; AVX1-NEXT:    retq
   7862 ;
   7863 ; AVX2-LABEL: test155:
   7864 ; AVX2:       # BB#0: # %entry
   7865 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
   7866 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm5
   7867 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   7868 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   7869 ; AVX2-NEXT:    retq
   7870 ;
   7871 ; AVX512F-LABEL: test155:
   7872 ; AVX512F:       # BB#0: # %entry
   7873 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   7874 ; AVX512F-NEXT:    retq
   7875 entry:
   7876   %cmp = icmp sgt <8 x i64> %a, %b
   7877   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7878   ret <8 x i64> %sel
   7879 }
   7880 
   7881 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
   7882 ; SSE2-LABEL: test156:
   7883 ; SSE2:       # BB#0: # %entry
   7884 ; SSE2-NEXT:    movdqa %xmm7, %xmm11
   7885 ; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
   7886 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   7887 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   7888 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   7889 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   7890 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   7891 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   7892 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   7893 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   7894 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   7895 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   7896 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   7897 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   7898 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   7899 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   7900 ; SSE2-NEXT:    pand %xmm12, %xmm0
   7901 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   7902 ; SSE2-NEXT:    por %xmm0, %xmm12
   7903 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   7904 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   7905 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   7906 ; SSE2-NEXT:    movdqa %xmm3, %xmm11
   7907 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7908 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   7909 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   7910 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   7911 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7912 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   7913 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   7914 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   7915 ; SSE2-NEXT:    pand %xmm15, %xmm11
   7916 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   7917 ; SSE2-NEXT:    por %xmm11, %xmm13
   7918 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   7919 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7920 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   7921 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   7922 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   7923 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   7924 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   7925 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   7926 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   7927 ; SSE2-NEXT:    pand %xmm11, %xmm14
   7928 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   7929 ; SSE2-NEXT:    por %xmm14, %xmm15
   7930 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
   7931 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   7932 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   7933 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   7934 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   7935 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   7936 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   7937 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   7938 ; SSE2-NEXT:    pand %xmm11, %xmm0
   7939 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   7940 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   7941 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   7942 ; SSE2-NEXT:    por %xmm0, %xmm14
   7943 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   7944 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   7945 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   7946 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   7947 ; SSE2-NEXT:    pandn %xmm9, %xmm1
   7948 ; SSE2-NEXT:    por %xmm14, %xmm1
   7949 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   7950 ; SSE2-NEXT:    pandn %xmm2, %xmm11
   7951 ; SSE2-NEXT:    por %xmm15, %xmm11
   7952 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   7953 ; SSE2-NEXT:    pandn %xmm3, %xmm10
   7954 ; SSE2-NEXT:    por %xmm13, %xmm10
   7955 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
   7956 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   7957 ; SSE2-NEXT:    por %xmm12, %xmm8
   7958 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   7959 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   7960 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   7961 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   7962 ; SSE2-NEXT:    retq
   7963 ;
   7964 ; SSE4-LABEL: test156:
   7965 ; SSE4:       # BB#0: # %entry
   7966 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7967 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   7968 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
   7969 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   7970 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   7971 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   7972 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
   7973 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   7974 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   7975 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
   7976 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   7977 ; SSE4-NEXT:    movdqa %xmm4, %xmm12
   7978 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm12
   7979 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   7980 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   7981 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   7982 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   7983 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   7984 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   7985 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   7986 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   7987 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   7988 ; SSE4-NEXT:    retq
   7989 ;
   7990 ; AVX1-LABEL: test156:
   7991 ; AVX1:       # BB#0: # %entry
   7992 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7993 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
   7994 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7995 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
   7996 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7997 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm6
   7998 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   7999 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   8000 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   8001 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   8002 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8003 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   8004 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm7
   8005 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
   8006 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8007 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8008 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8009 ; AVX1-NEXT:    retq
   8010 ;
   8011 ; AVX2-LABEL: test156:
   8012 ; AVX2:       # BB#0: # %entry
   8013 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
   8014 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
   8015 ; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
   8016 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm6
   8017 ; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
   8018 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8019 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8020 ; AVX2-NEXT:    retq
   8021 ;
   8022 ; AVX512F-LABEL: test156:
   8023 ; AVX512F:       # BB#0: # %entry
   8024 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   8025 ; AVX512F-NEXT:    retq
   8026 entry:
   8027   %cmp = icmp sge <8 x i64> %a, %b
   8028   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8029   ret <8 x i64> %sel
   8030 }
   8031 
   8032 define <8 x i64> @test157(<8 x i64> %a, <8 x i64> %b) {
   8033 ; SSE2-LABEL: test157:
   8034 ; SSE2:       # BB#0: # %entry
   8035 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
   8036 ; SSE2-NEXT:    movdqa %xmm3, %xmm8
   8037 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   8038 ; SSE2-NEXT:    movdqa %xmm7, %xmm9
   8039 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   8040 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
   8041 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
   8042 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
   8043 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
   8044 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   8045 ; SSE2-NEXT:    pand %xmm12, %xmm9
   8046 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
   8047 ; SSE2-NEXT:    por %xmm9, %xmm8
   8048 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
   8049 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   8050 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
   8051 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   8052 ; SSE2-NEXT:    movdqa %xmm10, %xmm12
   8053 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
   8054 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   8055 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   8056 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   8057 ; SSE2-NEXT:    pand %xmm13, %xmm10
   8058 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   8059 ; SSE2-NEXT:    por %xmm10, %xmm9
   8060 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
   8061 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   8062 ; SSE2-NEXT:    movdqa %xmm5, %xmm12
   8063 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   8064 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   8065 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
   8066 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   8067 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
   8068 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   8069 ; SSE2-NEXT:    pand %xmm14, %xmm12
   8070 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
   8071 ; SSE2-NEXT:    por %xmm12, %xmm10
   8072 ; SSE2-NEXT:    movdqa %xmm0, %xmm12
   8073 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   8074 ; SSE2-NEXT:    pxor %xmm4, %xmm11
   8075 ; SSE2-NEXT:    movdqa %xmm11, %xmm13
   8076 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
   8077 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   8078 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
   8079 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   8080 ; SSE2-NEXT:    pand %xmm14, %xmm12
   8081 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   8082 ; SSE2-NEXT:    por %xmm12, %xmm11
   8083 ; SSE2-NEXT:    pand %xmm11, %xmm4
   8084 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   8085 ; SSE2-NEXT:    por %xmm4, %xmm11
   8086 ; SSE2-NEXT:    pand %xmm10, %xmm5
   8087 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   8088 ; SSE2-NEXT:    por %xmm5, %xmm10
   8089 ; SSE2-NEXT:    pand %xmm9, %xmm6
   8090 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   8091 ; SSE2-NEXT:    por %xmm6, %xmm9
   8092 ; SSE2-NEXT:    pand %xmm8, %xmm7
   8093 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   8094 ; SSE2-NEXT:    por %xmm7, %xmm8
   8095 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   8096 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   8097 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   8098 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   8099 ; SSE2-NEXT:    retq
   8100 ;
   8101 ; SSE4-LABEL: test157:
   8102 ; SSE4:       # BB#0: # %entry
   8103 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   8104 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   8105 ; SSE4-NEXT:    movdqa %xmm3, %xmm10
   8106 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8107 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   8108 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   8109 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   8110 ; SSE4-NEXT:    movdqa %xmm2, %xmm11
   8111 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8112 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   8113 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8114 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   8115 ; SSE4-NEXT:    movdqa %xmm1, %xmm12
   8116 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   8117 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   8118 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8119 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
   8120 ; SSE4-NEXT:    movdqa %xmm8, %xmm12
   8121 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   8122 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   8123 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
   8124 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   8125 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   8126 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   8127 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   8128 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   8129 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   8130 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   8131 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   8132 ; SSE4-NEXT:    retq
   8133 ;
   8134 ; AVX1-LABEL: test157:
   8135 ; AVX1:       # BB#0: # %entry
   8136 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   8137 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8138 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   8139 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
   8140 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8141 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   8142 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
   8143 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
   8144 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8145 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   8146 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   8147 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8148 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   8149 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   8150 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8151 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
   8152 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
   8153 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   8154 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8155 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8156 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8157 ; AVX1-NEXT:    retq
   8158 ;
   8159 ; AVX2-LABEL: test157:
   8160 ; AVX2:       # BB#0: # %entry
   8161 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   8162 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
   8163 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
   8164 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   8165 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
   8166 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
   8167 ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
   8168 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
   8169 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
   8170 ; AVX2-NEXT:    retq
   8171 ;
   8172 ; AVX512F-LABEL: test157:
   8173 ; AVX512F:       # BB#0: # %entry
   8174 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   8175 ; AVX512F-NEXT:    retq
   8176 entry:
   8177   %cmp = icmp ult <8 x i64> %a, %b
   8178   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8179   ret <8 x i64> %sel
   8180 }
   8181 
   8182 define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) {
   8183 ; SSE2-LABEL: test158:
   8184 ; SSE2:       # BB#0: # %entry
   8185 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   8186 ; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
   8187 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   8188 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   8189 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8190 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   8191 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   8192 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   8193 ; SSE2-NEXT:    movdqa %xmm7, %xmm0
   8194 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   8195 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   8196 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   8197 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   8198 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   8199 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   8200 ; SSE2-NEXT:    pand %xmm12, %xmm0
   8201 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   8202 ; SSE2-NEXT:    por %xmm0, %xmm12
   8203 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   8204 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   8205 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   8206 ; SSE2-NEXT:    movdqa %xmm6, %xmm11
   8207 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8208 ; SSE2-NEXT:    movdqa %xmm3, %xmm13
   8209 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   8210 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   8211 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   8212 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   8213 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   8214 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   8215 ; SSE2-NEXT:    pand %xmm15, %xmm11
   8216 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   8217 ; SSE2-NEXT:    por %xmm11, %xmm13
   8218 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   8219 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8220 ; SSE2-NEXT:    movdqa %xmm2, %xmm14
   8221 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   8222 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   8223 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   8224 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   8225 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   8226 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   8227 ; SSE2-NEXT:    pand %xmm11, %xmm14
   8228 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   8229 ; SSE2-NEXT:    por %xmm14, %xmm15
   8230 ; SSE2-NEXT:    movdqa %xmm4, %xmm11
   8231 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8232 ; SSE2-NEXT:    pxor %xmm9, %xmm10
   8233 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   8234 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   8235 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   8236 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   8237 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   8238 ; SSE2-NEXT:    pand %xmm11, %xmm0
   8239 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   8240 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   8241 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   8242 ; SSE2-NEXT:    por %xmm0, %xmm14
   8243 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   8244 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   8245 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   8246 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   8247 ; SSE2-NEXT:    pandn %xmm9, %xmm1
   8248 ; SSE2-NEXT:    por %xmm14, %xmm1
   8249 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   8250 ; SSE2-NEXT:    pandn %xmm2, %xmm11
   8251 ; SSE2-NEXT:    por %xmm15, %xmm11
   8252 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   8253 ; SSE2-NEXT:    pandn %xmm3, %xmm10
   8254 ; SSE2-NEXT:    por %xmm13, %xmm10
   8255 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
   8256 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   8257 ; SSE2-NEXT:    por %xmm12, %xmm8
   8258 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   8259 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   8260 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   8261 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   8262 ; SSE2-NEXT:    retq
   8263 ;
   8264 ; SSE4-LABEL: test158:
   8265 ; SSE4:       # BB#0: # %entry
   8266 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   8267 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   8268 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
   8269 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8270 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   8271 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   8272 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   8273 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   8274 ; SSE4-NEXT:    pxor %xmm12, %xmm9
   8275 ; SSE4-NEXT:    movdqa %xmm6, %xmm11
   8276 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8277 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   8278 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8279 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   8280 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   8281 ; SSE4-NEXT:    movdqa %xmm5, %xmm13
   8282 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   8283 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   8284 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8285 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
   8286 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   8287 ; SSE4-NEXT:    movdqa %xmm4, %xmm13
   8288 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   8289 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   8290 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
   8291 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   8292 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   8293 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   8294 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   8295 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   8296 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   8297 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   8298 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   8299 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   8300 ; SSE4-NEXT:    retq
   8301 ;
   8302 ; AVX1-LABEL: test158:
   8303 ; AVX1:       # BB#0: # %entry
   8304 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   8305 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8306 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   8307 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
   8308 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8309 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   8310 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
   8311 ; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
   8312 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
   8313 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
   8314 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
   8315 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   8316 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   8317 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   8318 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8319 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   8320 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   8321 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8322 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   8323 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
   8324 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
   8325 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   8326 ; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
   8327 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8328 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8329 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8330 ; AVX1-NEXT:    retq
   8331 ;
   8332 ; AVX2-LABEL: test158:
   8333 ; AVX2:       # BB#0: # %entry
   8334 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   8335 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
   8336 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
   8337 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   8338 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
   8339 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
   8340 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm7
   8341 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
   8342 ; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
   8343 ; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
   8344 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
   8345 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
   8346 ; AVX2-NEXT:    retq
   8347 ;
   8348 ; AVX512F-LABEL: test158:
   8349 ; AVX512F:       # BB#0: # %entry
   8350 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   8351 ; AVX512F-NEXT:    retq
   8352 entry:
   8353   %cmp = icmp ule <8 x i64> %a, %b
   8354   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8355   ret <8 x i64> %sel
   8356 }
   8357 
   8358 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
   8359 ; SSE2-LABEL: test159:
   8360 ; SSE2:       # BB#0: # %entry
   8361 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
   8362 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   8363 ; SSE2-NEXT:    pxor %xmm11, %xmm8
   8364 ; SSE2-NEXT:    movdqa %xmm3, %xmm9
   8365 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   8366 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
   8367 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
   8368 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
   8369 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
   8370 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
   8371 ; SSE2-NEXT:    pand %xmm12, %xmm9
   8372 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
   8373 ; SSE2-NEXT:    por %xmm9, %xmm8
   8374 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   8375 ; SSE2-NEXT:    pxor %xmm11, %xmm9
   8376 ; SSE2-NEXT:    movdqa %xmm2, %xmm10
   8377 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   8378 ; SSE2-NEXT:    movdqa %xmm10, %xmm12
   8379 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
   8380 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   8381 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   8382 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
   8383 ; SSE2-NEXT:    pand %xmm13, %xmm10
   8384 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   8385 ; SSE2-NEXT:    por %xmm10, %xmm9
   8386 ; SSE2-NEXT:    movdqa %xmm5, %xmm10
   8387 ; SSE2-NEXT:    pxor %xmm11, %xmm10
   8388 ; SSE2-NEXT:    movdqa %xmm1, %xmm12
   8389 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   8390 ; SSE2-NEXT:    movdqa %xmm12, %xmm13
   8391 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
   8392 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   8393 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
   8394 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   8395 ; SSE2-NEXT:    pand %xmm14, %xmm12
   8396 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
   8397 ; SSE2-NEXT:    por %xmm12, %xmm10
   8398 ; SSE2-NEXT:    movdqa %xmm4, %xmm12
   8399 ; SSE2-NEXT:    pxor %xmm11, %xmm12
   8400 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   8401 ; SSE2-NEXT:    movdqa %xmm11, %xmm13
   8402 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
   8403 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
   8404 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
   8405 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   8406 ; SSE2-NEXT:    pand %xmm14, %xmm12
   8407 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   8408 ; SSE2-NEXT:    por %xmm12, %xmm11
   8409 ; SSE2-NEXT:    pand %xmm11, %xmm4
   8410 ; SSE2-NEXT:    pandn %xmm0, %xmm11
   8411 ; SSE2-NEXT:    por %xmm4, %xmm11
   8412 ; SSE2-NEXT:    pand %xmm10, %xmm5
   8413 ; SSE2-NEXT:    pandn %xmm1, %xmm10
   8414 ; SSE2-NEXT:    por %xmm5, %xmm10
   8415 ; SSE2-NEXT:    pand %xmm9, %xmm6
   8416 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   8417 ; SSE2-NEXT:    por %xmm6, %xmm9
   8418 ; SSE2-NEXT:    pand %xmm8, %xmm7
   8419 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   8420 ; SSE2-NEXT:    por %xmm7, %xmm8
   8421 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   8422 ; SSE2-NEXT:    movdqa %xmm10, %xmm1
   8423 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   8424 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   8425 ; SSE2-NEXT:    retq
   8426 ;
   8427 ; SSE4-LABEL: test159:
   8428 ; SSE4:       # BB#0: # %entry
   8429 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   8430 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   8431 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
   8432 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8433 ; SSE4-NEXT:    movdqa %xmm3, %xmm9
   8434 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   8435 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   8436 ; SSE4-NEXT:    movdqa %xmm6, %xmm11
   8437 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8438 ; SSE4-NEXT:    movdqa %xmm2, %xmm10
   8439 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8440 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   8441 ; SSE4-NEXT:    movdqa %xmm5, %xmm12
   8442 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   8443 ; SSE4-NEXT:    movdqa %xmm1, %xmm11
   8444 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8445 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
   8446 ; SSE4-NEXT:    movdqa %xmm4, %xmm12
   8447 ; SSE4-NEXT:    pxor %xmm0, %xmm12
   8448 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   8449 ; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
   8450 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   8451 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   8452 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   8453 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   8454 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   8455 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   8456 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   8457 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   8458 ; SSE4-NEXT:    retq
   8459 ;
   8460 ; AVX1-LABEL: test159:
   8461 ; AVX1:       # BB#0: # %entry
   8462 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   8463 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8464 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   8465 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
   8466 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8467 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   8468 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
   8469 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
   8470 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8471 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   8472 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   8473 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8474 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
   8475 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   8476 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8477 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
   8478 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
   8479 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   8480 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8481 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8482 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8483 ; AVX1-NEXT:    retq
   8484 ;
   8485 ; AVX2-LABEL: test159:
   8486 ; AVX2:       # BB#0: # %entry
   8487 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   8488 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
   8489 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
   8490 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   8491 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
   8492 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
   8493 ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
   8494 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
   8495 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
   8496 ; AVX2-NEXT:    retq
   8497 ;
   8498 ; AVX512F-LABEL: test159:
   8499 ; AVX512F:       # BB#0: # %entry
   8500 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   8501 ; AVX512F-NEXT:    retq
   8502 entry:
   8503   %cmp = icmp ugt <8 x i64> %a, %b
   8504   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8505   ret <8 x i64> %sel
   8506 }
   8507 
   8508 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
   8509 ; SSE2-LABEL: test160:
   8510 ; SSE2:       # BB#0: # %entry
   8511 ; SSE2-NEXT:    movdqa %xmm7, %xmm11
   8512 ; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
   8513 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
   8514 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   8515 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8516 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   8517 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
   8518 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   8519 ; SSE2-NEXT:    pxor %xmm10, %xmm8
   8520 ; SSE2-NEXT:    movdqa %xmm11, %xmm0
   8521 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   8522 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
   8523 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
   8524 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   8525 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   8526 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   8527 ; SSE2-NEXT:    pand %xmm12, %xmm0
   8528 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
   8529 ; SSE2-NEXT:    por %xmm0, %xmm12
   8530 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
   8531 ; SSE2-NEXT:    movdqa %xmm12, %xmm8
   8532 ; SSE2-NEXT:    pxor %xmm1, %xmm8
   8533 ; SSE2-NEXT:    movdqa %xmm3, %xmm11
   8534 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8535 ; SSE2-NEXT:    movdqa %xmm6, %xmm13
   8536 ; SSE2-NEXT:    pxor %xmm10, %xmm13
   8537 ; SSE2-NEXT:    movdqa %xmm13, %xmm14
   8538 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   8539 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
   8540 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
   8541 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
   8542 ; SSE2-NEXT:    pand %xmm15, %xmm11
   8543 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
   8544 ; SSE2-NEXT:    por %xmm11, %xmm13
   8545 ; SSE2-NEXT:    movdqa %xmm2, %xmm11
   8546 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8547 ; SSE2-NEXT:    movdqa %xmm5, %xmm14
   8548 ; SSE2-NEXT:    pxor %xmm10, %xmm14
   8549 ; SSE2-NEXT:    movdqa %xmm14, %xmm15
   8550 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
   8551 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
   8552 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
   8553 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   8554 ; SSE2-NEXT:    pand %xmm11, %xmm14
   8555 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
   8556 ; SSE2-NEXT:    por %xmm14, %xmm15
   8557 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
   8558 ; SSE2-NEXT:    pxor %xmm10, %xmm11
   8559 ; SSE2-NEXT:    pxor %xmm4, %xmm10
   8560 ; SSE2-NEXT:    movdqa %xmm10, %xmm14
   8561 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
   8562 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
   8563 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
   8564 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   8565 ; SSE2-NEXT:    pand %xmm11, %xmm0
   8566 ; SSE2-NEXT:    movdqa %xmm13, %xmm10
   8567 ; SSE2-NEXT:    pxor %xmm1, %xmm10
   8568 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
   8569 ; SSE2-NEXT:    por %xmm0, %xmm14
   8570 ; SSE2-NEXT:    movdqa %xmm15, %xmm11
   8571 ; SSE2-NEXT:    pxor %xmm1, %xmm11
   8572 ; SSE2-NEXT:    pxor %xmm14, %xmm1
   8573 ; SSE2-NEXT:    pandn %xmm4, %xmm14
   8574 ; SSE2-NEXT:    pandn %xmm9, %xmm1
   8575 ; SSE2-NEXT:    por %xmm14, %xmm1
   8576 ; SSE2-NEXT:    pandn %xmm5, %xmm15
   8577 ; SSE2-NEXT:    pandn %xmm2, %xmm11
   8578 ; SSE2-NEXT:    por %xmm15, %xmm11
   8579 ; SSE2-NEXT:    pandn %xmm6, %xmm13
   8580 ; SSE2-NEXT:    pandn %xmm3, %xmm10
   8581 ; SSE2-NEXT:    por %xmm13, %xmm10
   8582 ; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
   8583 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   8584 ; SSE2-NEXT:    por %xmm12, %xmm8
   8585 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   8586 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   8587 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
   8588 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   8589 ; SSE2-NEXT:    retq
   8590 ;
   8591 ; SSE4-LABEL: test160:
   8592 ; SSE4:       # BB#0: # %entry
   8593 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   8594 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   8595 ; SSE4-NEXT:    movdqa %xmm3, %xmm10
   8596 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8597 ; SSE4-NEXT:    movdqa %xmm7, %xmm9
   8598 ; SSE4-NEXT:    pxor %xmm0, %xmm9
   8599 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
   8600 ; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
   8601 ; SSE4-NEXT:    pxor %xmm12, %xmm9
   8602 ; SSE4-NEXT:    movdqa %xmm2, %xmm11
   8603 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8604 ; SSE4-NEXT:    movdqa %xmm6, %xmm10
   8605 ; SSE4-NEXT:    pxor %xmm0, %xmm10
   8606 ; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
   8607 ; SSE4-NEXT:    pxor %xmm12, %xmm10
   8608 ; SSE4-NEXT:    movdqa %xmm1, %xmm13
   8609 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   8610 ; SSE4-NEXT:    movdqa %xmm5, %xmm11
   8611 ; SSE4-NEXT:    pxor %xmm0, %xmm11
   8612 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
   8613 ; SSE4-NEXT:    pxor %xmm12, %xmm11
   8614 ; SSE4-NEXT:    movdqa %xmm8, %xmm13
   8615 ; SSE4-NEXT:    pxor %xmm0, %xmm13
   8616 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   8617 ; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
   8618 ; SSE4-NEXT:    pxor %xmm12, %xmm0
   8619 ; SSE4-NEXT:    blendvpd %xmm4, %xmm8
   8620 ; SSE4-NEXT:    movdqa %xmm11, %xmm0
   8621 ; SSE4-NEXT:    blendvpd %xmm5, %xmm1
   8622 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
   8623 ; SSE4-NEXT:    blendvpd %xmm6, %xmm2
   8624 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
   8625 ; SSE4-NEXT:    blendvpd %xmm7, %xmm3
   8626 ; SSE4-NEXT:    movapd %xmm8, %xmm0
   8627 ; SSE4-NEXT:    retq
   8628 ;
   8629 ; AVX1-LABEL: test160:
   8630 ; AVX1:       # BB#0: # %entry
   8631 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   8632 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8633 ; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
   8634 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
   8635 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8636 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   8637 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
   8638 ; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
   8639 ; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
   8640 ; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
   8641 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
   8642 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   8643 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   8644 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   8645 ; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
   8646 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
   8647 ; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
   8648 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   8649 ; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
   8650 ; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
   8651 ; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
   8652 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
   8653 ; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
   8654 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
   8655 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
   8656 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
   8657 ; AVX1-NEXT:    retq
   8658 ;
   8659 ; AVX2-LABEL: test160:
   8660 ; AVX2:       # BB#0: # %entry
   8661 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
   8662 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
   8663 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
   8664 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   8665 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
   8666 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
   8667 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm7
   8668 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
   8669 ; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
   8670 ; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
   8671 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
   8672 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
   8673 ; AVX2-NEXT:    retq
   8674 ;
   8675 ; AVX512F-LABEL: test160:
   8676 ; AVX512F:       # BB#0: # %entry
   8677 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   8678 ; AVX512F-NEXT:    retq
   8679 entry:
   8680   %cmp = icmp uge <8 x i64> %a, %b
   8681   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   8682   ret <8 x i64> %sel
   8683 }
   8684 
   8685 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
   8686 ; SSE2-LABEL: test161:
   8687 ; SSE2:       # BB#0: # %entry
   8688 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   8689 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   8690 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8691 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   8692 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8693 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8694 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8695 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8696 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8697 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8698 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8699 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8700 ; SSE2-NEXT:    por %xmm5, %xmm6
   8701 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   8702 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8703 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   8704 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
   8705 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8706 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8707 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
   8708 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   8709 ; SSE2-NEXT:    pand %xmm8, %xmm4
   8710 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   8711 ; SSE2-NEXT:    por %xmm4, %xmm5
   8712 ; SSE2-NEXT:    pand %xmm5, %xmm0
   8713 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   8714 ; SSE2-NEXT:    por %xmm5, %xmm0
   8715 ; SSE2-NEXT:    pand %xmm6, %xmm1
   8716 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   8717 ; SSE2-NEXT:    por %xmm6, %xmm1
   8718 ; SSE2-NEXT:    retq
   8719 ;
   8720 ; SSE4-LABEL: test161:
   8721 ; SSE4:       # BB#0: # %entry
   8722 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8723 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   8724 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
   8725 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   8726 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   8727 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   8728 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8729 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   8730 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8731 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8732 ; SSE4-NEXT:    retq
   8733 ;
   8734 ; AVX1-LABEL: test161:
   8735 ; AVX1:       # BB#0: # %entry
   8736 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8737 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   8738 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8739 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
   8740 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8741 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8742 ; AVX1-NEXT:    retq
   8743 ;
   8744 ; AVX2-LABEL: test161:
   8745 ; AVX2:       # BB#0: # %entry
   8746 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   8747 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8748 ; AVX2-NEXT:    retq
   8749 ;
   8750 ; AVX512BW-LABEL: test161:
   8751 ; AVX512BW:       # BB#0: # %entry
   8752 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   8753 ; AVX512BW-NEXT:    retq
   8754 entry:
   8755   %cmp = icmp slt <4 x i64> %a, %b
   8756   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8757   ret <4 x i64> %sel
   8758 }
   8759 
   8760 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
   8761 ; SSE2-LABEL: test162:
   8762 ; SSE2:       # BB#0: # %entry
   8763 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
   8764 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   8765 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   8766 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   8767 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   8768 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   8769 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   8770 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   8771 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   8772 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8773 ; SSE2-NEXT:    pand %xmm8, %xmm4
   8774 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   8775 ; SSE2-NEXT:    por %xmm4, %xmm8
   8776 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   8777 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   8778 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   8779 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   8780 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   8781 ; SSE2-NEXT:    pxor %xmm0, %xmm7
   8782 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   8783 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   8784 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   8785 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   8786 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8787 ; SSE2-NEXT:    pand %xmm10, %xmm6
   8788 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   8789 ; SSE2-NEXT:    por %xmm6, %xmm5
   8790 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   8791 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   8792 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   8793 ; SSE2-NEXT:    por %xmm5, %xmm4
   8794 ; SSE2-NEXT:    pandn %xmm1, %xmm8
   8795 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   8796 ; SSE2-NEXT:    por %xmm8, %xmm9
   8797 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   8798 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   8799 ; SSE2-NEXT:    retq
   8800 ;
   8801 ; SSE4-LABEL: test162:
   8802 ; SSE4:       # BB#0: # %entry
   8803 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8804 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   8805 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
   8806 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   8807 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   8808 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   8809 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   8810 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   8811 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8812 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   8813 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8814 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8815 ; SSE4-NEXT:    retq
   8816 ;
   8817 ; AVX1-LABEL: test162:
   8818 ; AVX1:       # BB#0: # %entry
   8819 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8820 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   8821 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8822 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   8823 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8824 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm4
   8825 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
   8826 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8827 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8828 ; AVX1-NEXT:    retq
   8829 ;
   8830 ; AVX2-LABEL: test162:
   8831 ; AVX2:       # BB#0: # %entry
   8832 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   8833 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   8834 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   8835 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8836 ; AVX2-NEXT:    retq
   8837 ;
   8838 ; AVX512BW-LABEL: test162:
   8839 ; AVX512BW:       # BB#0: # %entry
   8840 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   8841 ; AVX512BW-NEXT:    retq
   8842 entry:
   8843   %cmp = icmp sle <4 x i64> %a, %b
   8844   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8845   ret <4 x i64> %sel
   8846 }
   8847 
   8848 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
   8849 ; SSE2-LABEL: test163:
   8850 ; SSE2:       # BB#0: # %entry
   8851 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   8852 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   8853 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8854 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   8855 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8856 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8857 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8858 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8859 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8860 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8861 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8862 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8863 ; SSE2-NEXT:    por %xmm5, %xmm6
   8864 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   8865 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8866 ; SSE2-NEXT:    pxor %xmm0, %xmm4
   8867 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
   8868 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8869 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8870 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
   8871 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   8872 ; SSE2-NEXT:    pand %xmm8, %xmm4
   8873 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   8874 ; SSE2-NEXT:    por %xmm4, %xmm5
   8875 ; SSE2-NEXT:    pand %xmm5, %xmm0
   8876 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   8877 ; SSE2-NEXT:    por %xmm5, %xmm0
   8878 ; SSE2-NEXT:    pand %xmm6, %xmm1
   8879 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   8880 ; SSE2-NEXT:    por %xmm6, %xmm1
   8881 ; SSE2-NEXT:    retq
   8882 ;
   8883 ; SSE4-LABEL: test163:
   8884 ; SSE4:       # BB#0: # %entry
   8885 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8886 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   8887 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
   8888 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   8889 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   8890 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8891 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   8892 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8893 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8894 ; SSE4-NEXT:    retq
   8895 ;
   8896 ; AVX1-LABEL: test163:
   8897 ; AVX1:       # BB#0: # %entry
   8898 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8899 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   8900 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8901 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
   8902 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8903 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8904 ; AVX1-NEXT:    retq
   8905 ;
   8906 ; AVX2-LABEL: test163:
   8907 ; AVX2:       # BB#0: # %entry
   8908 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   8909 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8910 ; AVX2-NEXT:    retq
   8911 ;
   8912 ; AVX512BW-LABEL: test163:
   8913 ; AVX512BW:       # BB#0: # %entry
   8914 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   8915 ; AVX512BW-NEXT:    retq
   8916 entry:
   8917   %cmp = icmp sgt <4 x i64> %a, %b
   8918   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8919   ret <4 x i64> %sel
   8920 }
   8921 
   8922 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
   8923 ; SSE2-LABEL: test164:
   8924 ; SSE2:       # BB#0: # %entry
   8925 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
   8926 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   8927 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   8928 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   8929 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   8930 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   8931 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   8932 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   8933 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   8934 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8935 ; SSE2-NEXT:    pand %xmm8, %xmm4
   8936 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   8937 ; SSE2-NEXT:    por %xmm4, %xmm8
   8938 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   8939 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   8940 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   8941 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   8942 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   8943 ; SSE2-NEXT:    pxor %xmm2, %xmm7
   8944 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   8945 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   8946 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   8947 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   8948 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8949 ; SSE2-NEXT:    pand %xmm10, %xmm6
   8950 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   8951 ; SSE2-NEXT:    por %xmm6, %xmm5
   8952 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   8953 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   8954 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   8955 ; SSE2-NEXT:    por %xmm5, %xmm4
   8956 ; SSE2-NEXT:    pandn %xmm1, %xmm8
   8957 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   8958 ; SSE2-NEXT:    por %xmm8, %xmm9
   8959 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   8960 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   8961 ; SSE2-NEXT:    retq
   8962 ;
   8963 ; SSE4-LABEL: test164:
   8964 ; SSE4:       # BB#0: # %entry
   8965 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8966 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   8967 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
   8968 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   8969 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   8970 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   8971 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm6
   8972 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   8973 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   8974 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8975 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   8976 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8977 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8978 ; SSE4-NEXT:    retq
   8979 ;
   8980 ; AVX1-LABEL: test164:
   8981 ; AVX1:       # BB#0: # %entry
   8982 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8983 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   8984 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8985 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   8986 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8987 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm4
   8988 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
   8989 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8990 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8991 ; AVX1-NEXT:    retq
   8992 ;
   8993 ; AVX2-LABEL: test164:
   8994 ; AVX2:       # BB#0: # %entry
   8995 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   8996 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   8997 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   8998 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8999 ; AVX2-NEXT:    retq
   9000 ;
   9001 ; AVX512BW-LABEL: test164:
   9002 ; AVX512BW:       # BB#0: # %entry
   9003 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   9004 ; AVX512BW-NEXT:    retq
   9005 entry:
   9006   %cmp = icmp sge <4 x i64> %a, %b
   9007   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9008   ret <4 x i64> %sel
   9009 }
   9010 
   9011 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
   9012 ; SSE2-LABEL: test165:
   9013 ; SSE2:       # BB#0: # %entry
   9014 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   9015 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   9016 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   9017 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   9018 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   9019 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9020 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   9021 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9022 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   9023 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   9024 ; SSE2-NEXT:    pand %xmm8, %xmm5
   9025 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9026 ; SSE2-NEXT:    por %xmm5, %xmm6
   9027 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   9028 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   9029 ; SSE2-NEXT:    pxor %xmm2, %xmm4
   9030 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
   9031 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   9032 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9033 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
   9034 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   9035 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9036 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9037 ; SSE2-NEXT:    por %xmm4, %xmm5
   9038 ; SSE2-NEXT:    pand %xmm5, %xmm0
   9039 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9040 ; SSE2-NEXT:    por %xmm5, %xmm0
   9041 ; SSE2-NEXT:    pand %xmm6, %xmm1
   9042 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   9043 ; SSE2-NEXT:    por %xmm6, %xmm1
   9044 ; SSE2-NEXT:    retq
   9045 ;
   9046 ; SSE4-LABEL: test165:
   9047 ; SSE4:       # BB#0: # %entry
   9048 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9049 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9050 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
   9051 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9052 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9053 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9054 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9055 ; SSE4-NEXT:    movdqa %xmm4, %xmm6
   9056 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9057 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9058 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   9059 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   9060 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9061 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   9062 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   9063 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   9064 ; SSE4-NEXT:    retq
   9065 ;
   9066 ; AVX1-LABEL: test165:
   9067 ; AVX1:       # BB#0: # %entry
   9068 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9069 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9070 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9071 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   9072 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9073 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9074 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm4
   9075 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
   9076 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   9077 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9078 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9079 ; AVX1-NEXT:    retq
   9080 ;
   9081 ; AVX2-LABEL: test165:
   9082 ; AVX2:       # BB#0: # %entry
   9083 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9084 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   9085 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   9086 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9087 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9088 ; AVX2-NEXT:    retq
   9089 ;
   9090 ; AVX512BW-LABEL: test165:
   9091 ; AVX512BW:       # BB#0: # %entry
   9092 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   9093 ; AVX512BW-NEXT:    retq
   9094 entry:
   9095   %cmp = icmp ult <4 x i64> %a, %b
   9096   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9097   ret <4 x i64> %sel
   9098 }
   9099 
   9100 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
   9101 ; SSE2-LABEL: test166:
   9102 ; SSE2:       # BB#0: # %entry
   9103 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
   9104 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9105 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9106 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   9107 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9108 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9109 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9110 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9111 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9112 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9113 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9114 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9115 ; SSE2-NEXT:    por %xmm4, %xmm8
   9116 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9117 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9118 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9119 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9120 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9121 ; SSE2-NEXT:    pxor %xmm0, %xmm7
   9122 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9123 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9124 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9125 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9126 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9127 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9128 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9129 ; SSE2-NEXT:    por %xmm6, %xmm5
   9130 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9131 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9132 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   9133 ; SSE2-NEXT:    por %xmm5, %xmm4
   9134 ; SSE2-NEXT:    pandn %xmm1, %xmm8
   9135 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   9136 ; SSE2-NEXT:    por %xmm8, %xmm9
   9137 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9138 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9139 ; SSE2-NEXT:    retq
   9140 ;
   9141 ; SSE4-LABEL: test166:
   9142 ; SSE4:       # BB#0: # %entry
   9143 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9144 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9145 ; SSE4-NEXT:    movdqa %xmm3, %xmm6
   9146 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9147 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9148 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9149 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9150 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   9151 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   9152 ; SSE4-NEXT:    movdqa %xmm2, %xmm7
   9153 ; SSE4-NEXT:    pxor %xmm0, %xmm7
   9154 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   9155 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   9156 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9157 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   9158 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9159 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   9160 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   9161 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   9162 ; SSE4-NEXT:    retq
   9163 ;
   9164 ; AVX1-LABEL: test166:
   9165 ; AVX1:       # BB#0: # %entry
   9166 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9167 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9168 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9169 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   9170 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9171 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9172 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
   9173 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
   9174 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm5
   9175 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
   9176 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
   9177 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
   9178 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9179 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9180 ; AVX1-NEXT:    retq
   9181 ;
   9182 ; AVX2-LABEL: test166:
   9183 ; AVX2:       # BB#0: # %entry
   9184 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9185 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   9186 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   9187 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9188 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9189 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9190 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9191 ; AVX2-NEXT:    retq
   9192 ;
   9193 ; AVX512BW-LABEL: test166:
   9194 ; AVX512BW:       # BB#0: # %entry
   9195 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   9196 ; AVX512BW-NEXT:    retq
   9197 entry:
   9198   %cmp = icmp ule <4 x i64> %a, %b
   9199   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9200   ret <4 x i64> %sel
   9201 }
   9202 
   9203 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
   9204 ; SSE2-LABEL: test167:
   9205 ; SSE2:       # BB#0: # %entry
   9206 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   9207 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   9208 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   9209 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   9210 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   9211 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9212 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   9213 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9214 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   9215 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   9216 ; SSE2-NEXT:    pand %xmm8, %xmm5
   9217 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9218 ; SSE2-NEXT:    por %xmm5, %xmm6
   9219 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   9220 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   9221 ; SSE2-NEXT:    pxor %xmm0, %xmm4
   9222 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
   9223 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   9224 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9225 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
   9226 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   9227 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9228 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9229 ; SSE2-NEXT:    por %xmm4, %xmm5
   9230 ; SSE2-NEXT:    pand %xmm5, %xmm0
   9231 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9232 ; SSE2-NEXT:    por %xmm5, %xmm0
   9233 ; SSE2-NEXT:    pand %xmm6, %xmm1
   9234 ; SSE2-NEXT:    pandn %xmm3, %xmm6
   9235 ; SSE2-NEXT:    por %xmm6, %xmm1
   9236 ; SSE2-NEXT:    retq
   9237 ;
   9238 ; SSE4-LABEL: test167:
   9239 ; SSE4:       # BB#0: # %entry
   9240 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9241 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9242 ; SSE4-NEXT:    movdqa %xmm3, %xmm6
   9243 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9244 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9245 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9246 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9247 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   9248 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9249 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   9250 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   9251 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   9252 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9253 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   9254 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   9255 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   9256 ; SSE4-NEXT:    retq
   9257 ;
   9258 ; AVX1-LABEL: test167:
   9259 ; AVX1:       # BB#0: # %entry
   9260 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9261 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9262 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9263 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   9264 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9265 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9266 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm4
   9267 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
   9268 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   9269 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9270 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9271 ; AVX1-NEXT:    retq
   9272 ;
   9273 ; AVX2-LABEL: test167:
   9274 ; AVX2:       # BB#0: # %entry
   9275 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9276 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   9277 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   9278 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9279 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9280 ; AVX2-NEXT:    retq
   9281 ;
   9282 ; AVX512BW-LABEL: test167:
   9283 ; AVX512BW:       # BB#0: # %entry
   9284 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   9285 ; AVX512BW-NEXT:    retq
   9286 entry:
   9287   %cmp = icmp ugt <4 x i64> %a, %b
   9288   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9289   ret <4 x i64> %sel
   9290 }
   9291 
   9292 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
   9293 ; SSE2-LABEL: test168:
   9294 ; SSE2:       # BB#0: # %entry
   9295 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
   9296 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   9297 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9298 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   9299 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9300 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9301 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9302 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9303 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9304 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9305 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9306 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9307 ; SSE2-NEXT:    por %xmm4, %xmm8
   9308 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9309 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9310 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9311 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   9312 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9313 ; SSE2-NEXT:    pxor %xmm2, %xmm7
   9314 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9315 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9316 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9317 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9318 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9319 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9320 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9321 ; SSE2-NEXT:    por %xmm6, %xmm5
   9322 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9323 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9324 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   9325 ; SSE2-NEXT:    por %xmm5, %xmm4
   9326 ; SSE2-NEXT:    pandn %xmm1, %xmm8
   9327 ; SSE2-NEXT:    pandn %xmm3, %xmm9
   9328 ; SSE2-NEXT:    por %xmm8, %xmm9
   9329 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9330 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9331 ; SSE2-NEXT:    retq
   9332 ;
   9333 ; SSE4-LABEL: test168:
   9334 ; SSE4:       # BB#0: # %entry
   9335 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9336 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9337 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
   9338 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9339 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9340 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9341 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9342 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   9343 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   9344 ; SSE4-NEXT:    movdqa %xmm4, %xmm7
   9345 ; SSE4-NEXT:    pxor %xmm0, %xmm7
   9346 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9347 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   9348 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9349 ; SSE4-NEXT:    blendvpd %xmm4, %xmm2
   9350 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9351 ; SSE4-NEXT:    blendvpd %xmm1, %xmm3
   9352 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   9353 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   9354 ; SSE4-NEXT:    retq
   9355 ;
   9356 ; AVX1-LABEL: test168:
   9357 ; AVX1:       # BB#0: # %entry
   9358 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9359 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9360 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9361 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   9362 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9363 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9364 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
   9365 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
   9366 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm5
   9367 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
   9368 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
   9369 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
   9370 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9371 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9372 ; AVX1-NEXT:    retq
   9373 ;
   9374 ; AVX2-LABEL: test168:
   9375 ; AVX2:       # BB#0: # %entry
   9376 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9377 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   9378 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   9379 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9380 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9381 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9382 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   9383 ; AVX2-NEXT:    retq
   9384 ;
   9385 ; AVX512BW-LABEL: test168:
   9386 ; AVX512BW:       # BB#0: # %entry
   9387 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   9388 ; AVX512BW-NEXT:    retq
   9389 entry:
   9390   %cmp = icmp uge <4 x i64> %a, %b
   9391   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   9392   ret <4 x i64> %sel
   9393 }
   9394 
   9395 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
   9396 ; SSE2-LABEL: test169:
   9397 ; SSE2:       # BB#0: # %entry
   9398 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0]
   9399 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   9400 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9401 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   9402 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9403 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9404 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   9405 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9406 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
   9407 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   9408 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9409 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
   9410 ; SSE2-NEXT:    por %xmm6, %xmm4
   9411 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   9412 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9413 ; SSE2-NEXT:    pxor %xmm2, %xmm5
   9414 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
   9415 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
   9416 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9417 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
   9418 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
   9419 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9420 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9421 ; SSE2-NEXT:    por %xmm6, %xmm5
   9422 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9423 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9424 ; SSE2-NEXT:    por %xmm2, %xmm5
   9425 ; SSE2-NEXT:    pand %xmm4, %xmm3
   9426 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   9427 ; SSE2-NEXT:    por %xmm3, %xmm4
   9428 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   9429 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   9430 ; SSE2-NEXT:    retq
   9431 ;
   9432 ; SSE4-LABEL: test169:
   9433 ; SSE4:       # BB#0: # %entry
   9434 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9435 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9436 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
   9437 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   9438 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   9439 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9440 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9441 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9442 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9443 ; SSE4-NEXT:    retq
   9444 ;
   9445 ; AVX1-LABEL: test169:
   9446 ; AVX1:       # BB#0: # %entry
   9447 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9448 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   9449 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   9450 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
   9451 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9452 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9453 ; AVX1-NEXT:    retq
   9454 ;
   9455 ; AVX2-LABEL: test169:
   9456 ; AVX2:       # BB#0: # %entry
   9457 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   9458 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9459 ; AVX2-NEXT:    retq
   9460 ;
   9461 ; AVX512BW-LABEL: test169:
   9462 ; AVX512BW:       # BB#0: # %entry
   9463 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   9464 ; AVX512BW-NEXT:    retq
   9465 entry:
   9466   %cmp = icmp slt <4 x i64> %a, %b
   9467   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9468   ret <4 x i64> %sel
   9469 }
   9470 
   9471 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
   9472 ; SSE2-LABEL: test170:
   9473 ; SSE2:       # BB#0: # %entry
   9474 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
   9475 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9476 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9477 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   9478 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9479 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9480 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9481 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9482 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9483 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9484 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9485 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9486 ; SSE2-NEXT:    por %xmm4, %xmm8
   9487 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9488 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9489 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9490 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9491 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9492 ; SSE2-NEXT:    pxor %xmm0, %xmm7
   9493 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9494 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9495 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9496 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9497 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9498 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9499 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9500 ; SSE2-NEXT:    por %xmm6, %xmm5
   9501 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9502 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9503 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   9504 ; SSE2-NEXT:    por %xmm5, %xmm4
   9505 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   9506 ; SSE2-NEXT:    pandn %xmm1, %xmm9
   9507 ; SSE2-NEXT:    por %xmm8, %xmm9
   9508 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9509 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9510 ; SSE2-NEXT:    retq
   9511 ;
   9512 ; SSE4-LABEL: test170:
   9513 ; SSE4:       # BB#0: # %entry
   9514 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9515 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9516 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
   9517 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   9518 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   9519 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   9520 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9521 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9522 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9523 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9524 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9525 ; SSE4-NEXT:    retq
   9526 ;
   9527 ; AVX1-LABEL: test170:
   9528 ; AVX1:       # BB#0: # %entry
   9529 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9530 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   9531 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   9532 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   9533 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   9534 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm4
   9535 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
   9536 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9537 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9538 ; AVX1-NEXT:    retq
   9539 ;
   9540 ; AVX2-LABEL: test170:
   9541 ; AVX2:       # BB#0: # %entry
   9542 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   9543 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9544 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9545 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9546 ; AVX2-NEXT:    retq
   9547 ;
   9548 ; AVX512BW-LABEL: test170:
   9549 ; AVX512BW:       # BB#0: # %entry
   9550 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   9551 ; AVX512BW-NEXT:    retq
   9552 entry:
   9553   %cmp = icmp sle <4 x i64> %a, %b
   9554   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9555   ret <4 x i64> %sel
   9556 }
   9557 
   9558 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
   9559 ; SSE2-LABEL: test171:
   9560 ; SSE2:       # BB#0: # %entry
   9561 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0]
   9562 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9563 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9564 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   9565 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9566 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9567 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   9568 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9569 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
   9570 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   9571 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9572 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
   9573 ; SSE2-NEXT:    por %xmm6, %xmm4
   9574 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9575 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9576 ; SSE2-NEXT:    pxor %xmm0, %xmm5
   9577 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
   9578 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
   9579 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9580 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
   9581 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
   9582 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9583 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9584 ; SSE2-NEXT:    por %xmm6, %xmm5
   9585 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9586 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9587 ; SSE2-NEXT:    por %xmm2, %xmm5
   9588 ; SSE2-NEXT:    pand %xmm4, %xmm3
   9589 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   9590 ; SSE2-NEXT:    por %xmm3, %xmm4
   9591 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   9592 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   9593 ; SSE2-NEXT:    retq
   9594 ;
   9595 ; SSE4-LABEL: test171:
   9596 ; SSE4:       # BB#0: # %entry
   9597 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9598 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9599 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
   9600 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   9601 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9602 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9603 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9604 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9605 ; SSE4-NEXT:    retq
   9606 ;
   9607 ; AVX1-LABEL: test171:
   9608 ; AVX1:       # BB#0: # %entry
   9609 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9610 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   9611 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   9612 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
   9613 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9614 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9615 ; AVX1-NEXT:    retq
   9616 ;
   9617 ; AVX2-LABEL: test171:
   9618 ; AVX2:       # BB#0: # %entry
   9619 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   9620 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9621 ; AVX2-NEXT:    retq
   9622 ;
   9623 ; AVX512BW-LABEL: test171:
   9624 ; AVX512BW:       # BB#0: # %entry
   9625 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   9626 ; AVX512BW-NEXT:    retq
   9627 entry:
   9628   %cmp = icmp sgt <4 x i64> %a, %b
   9629   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9630   ret <4 x i64> %sel
   9631 }
   9632 
   9633 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
   9634 ; SSE2-LABEL: test172:
   9635 ; SSE2:       # BB#0: # %entry
   9636 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
   9637 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   9638 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9639 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   9640 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9641 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9642 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9643 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9644 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9645 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9646 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9647 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9648 ; SSE2-NEXT:    por %xmm4, %xmm8
   9649 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9650 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9651 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9652 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   9653 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9654 ; SSE2-NEXT:    pxor %xmm2, %xmm7
   9655 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9656 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9657 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9658 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9659 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9660 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9661 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9662 ; SSE2-NEXT:    por %xmm6, %xmm5
   9663 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9664 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9665 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   9666 ; SSE2-NEXT:    por %xmm5, %xmm4
   9667 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   9668 ; SSE2-NEXT:    pandn %xmm1, %xmm9
   9669 ; SSE2-NEXT:    por %xmm8, %xmm9
   9670 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9671 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9672 ; SSE2-NEXT:    retq
   9673 ;
   9674 ; SSE4-LABEL: test172:
   9675 ; SSE4:       # BB#0: # %entry
   9676 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9677 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9678 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
   9679 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   9680 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9681 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   9682 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm6
   9683 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9684 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9685 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9686 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9687 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9688 ; SSE4-NEXT:    retq
   9689 ;
   9690 ; AVX1-LABEL: test172:
   9691 ; AVX1:       # BB#0: # %entry
   9692 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9693 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   9694 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   9695 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   9696 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   9697 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm4
   9698 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
   9699 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9700 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9701 ; AVX1-NEXT:    retq
   9702 ;
   9703 ; AVX2-LABEL: test172:
   9704 ; AVX2:       # BB#0: # %entry
   9705 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   9706 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9707 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9708 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9709 ; AVX2-NEXT:    retq
   9710 ;
   9711 ; AVX512BW-LABEL: test172:
   9712 ; AVX512BW:       # BB#0: # %entry
   9713 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   9714 ; AVX512BW-NEXT:    retq
   9715 entry:
   9716   %cmp = icmp sge <4 x i64> %a, %b
   9717   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9718   ret <4 x i64> %sel
   9719 }
   9720 
   9721 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
   9722 ; SSE2-LABEL: test173:
   9723 ; SSE2:       # BB#0: # %entry
   9724 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   9725 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   9726 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9727 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   9728 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9729 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9730 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   9731 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9732 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
   9733 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   9734 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9735 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
   9736 ; SSE2-NEXT:    por %xmm6, %xmm4
   9737 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   9738 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9739 ; SSE2-NEXT:    pxor %xmm2, %xmm5
   9740 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
   9741 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
   9742 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9743 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
   9744 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
   9745 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9746 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9747 ; SSE2-NEXT:    por %xmm6, %xmm5
   9748 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9749 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9750 ; SSE2-NEXT:    por %xmm2, %xmm5
   9751 ; SSE2-NEXT:    pand %xmm4, %xmm3
   9752 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   9753 ; SSE2-NEXT:    por %xmm3, %xmm4
   9754 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   9755 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   9756 ; SSE2-NEXT:    retq
   9757 ;
   9758 ; SSE4-LABEL: test173:
   9759 ; SSE4:       # BB#0: # %entry
   9760 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9761 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9762 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
   9763 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9764 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   9765 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9766 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9767 ; SSE4-NEXT:    movdqa %xmm4, %xmm6
   9768 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9769 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9770 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   9771 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9772 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9773 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9774 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9775 ; SSE4-NEXT:    retq
   9776 ;
   9777 ; AVX1-LABEL: test173:
   9778 ; AVX1:       # BB#0: # %entry
   9779 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   9780 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9781 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9782 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   9783 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9784 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9785 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm4
   9786 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
   9787 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   9788 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9789 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9790 ; AVX1-NEXT:    retq
   9791 ;
   9792 ; AVX2-LABEL: test173:
   9793 ; AVX2:       # BB#0: # %entry
   9794 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9795 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   9796 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   9797 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9798 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9799 ; AVX2-NEXT:    retq
   9800 ;
   9801 ; AVX512BW-LABEL: test173:
   9802 ; AVX512BW:       # BB#0: # %entry
   9803 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   9804 ; AVX512BW-NEXT:    retq
   9805 entry:
   9806   %cmp = icmp ult <4 x i64> %a, %b
   9807   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9808   ret <4 x i64> %sel
   9809 }
   9810 
   9811 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
   9812 ; SSE2-LABEL: test174:
   9813 ; SSE2:       # BB#0: # %entry
   9814 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
   9815 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9816 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   9817 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
   9818 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   9819 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   9820 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   9821 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   9822 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   9823 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   9824 ; SSE2-NEXT:    pand %xmm8, %xmm4
   9825 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   9826 ; SSE2-NEXT:    por %xmm4, %xmm8
   9827 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   9828 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   9829 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   9830 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9831 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   9832 ; SSE2-NEXT:    pxor %xmm0, %xmm7
   9833 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   9834 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   9835 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   9836 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   9837 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   9838 ; SSE2-NEXT:    pand %xmm10, %xmm6
   9839 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   9840 ; SSE2-NEXT:    por %xmm6, %xmm5
   9841 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9842 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   9843 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   9844 ; SSE2-NEXT:    por %xmm5, %xmm4
   9845 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   9846 ; SSE2-NEXT:    pandn %xmm1, %xmm9
   9847 ; SSE2-NEXT:    por %xmm8, %xmm9
   9848 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   9849 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   9850 ; SSE2-NEXT:    retq
   9851 ;
   9852 ; SSE4-LABEL: test174:
   9853 ; SSE4:       # BB#0: # %entry
   9854 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9855 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9856 ; SSE4-NEXT:    movdqa %xmm3, %xmm6
   9857 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9858 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9859 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9860 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9861 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   9862 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   9863 ; SSE4-NEXT:    movdqa %xmm2, %xmm7
   9864 ; SSE4-NEXT:    pxor %xmm0, %xmm7
   9865 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   9866 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   9867 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   9868 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9869 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9870 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9871 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9872 ; SSE4-NEXT:    retq
   9873 ;
   9874 ; AVX1-LABEL: test174:
   9875 ; AVX1:       # BB#0: # %entry
   9876 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9877 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9878 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9879 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   9880 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9881 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9882 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
   9883 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
   9884 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm5
   9885 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
   9886 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
   9887 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
   9888 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9889 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9890 ; AVX1-NEXT:    retq
   9891 ;
   9892 ; AVX2-LABEL: test174:
   9893 ; AVX2:       # BB#0: # %entry
   9894 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9895 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   9896 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   9897 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9898 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   9899 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   9900 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9901 ; AVX2-NEXT:    retq
   9902 ;
   9903 ; AVX512BW-LABEL: test174:
   9904 ; AVX512BW:       # BB#0: # %entry
   9905 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   9906 ; AVX512BW-NEXT:    retq
   9907 entry:
   9908   %cmp = icmp ule <4 x i64> %a, %b
   9909   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9910   ret <4 x i64> %sel
   9911 }
   9912 
   9913 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
   9914 ; SSE2-LABEL: test175:
   9915 ; SSE2:       # BB#0: # %entry
   9916 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   9917 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   9918 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   9919 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
   9920 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9921 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   9922 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
   9923 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9924 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
   9925 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   9926 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9927 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
   9928 ; SSE2-NEXT:    por %xmm6, %xmm4
   9929 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   9930 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   9931 ; SSE2-NEXT:    pxor %xmm0, %xmm5
   9932 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
   9933 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
   9934 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   9935 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
   9936 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
   9937 ; SSE2-NEXT:    pand %xmm8, %xmm6
   9938 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   9939 ; SSE2-NEXT:    por %xmm6, %xmm5
   9940 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9941 ; SSE2-NEXT:    pandn %xmm0, %xmm5
   9942 ; SSE2-NEXT:    por %xmm2, %xmm5
   9943 ; SSE2-NEXT:    pand %xmm4, %xmm3
   9944 ; SSE2-NEXT:    pandn %xmm1, %xmm4
   9945 ; SSE2-NEXT:    por %xmm3, %xmm4
   9946 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   9947 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   9948 ; SSE2-NEXT:    retq
   9949 ;
   9950 ; SSE4-LABEL: test175:
   9951 ; SSE4:       # BB#0: # %entry
   9952 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   9953 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9954 ; SSE4-NEXT:    movdqa %xmm3, %xmm6
   9955 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9956 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
   9957 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   9958 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   9959 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   9960 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   9961 ; SSE4-NEXT:    pxor %xmm4, %xmm0
   9962 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   9963 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   9964 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   9965 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   9966 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   9967 ; SSE4-NEXT:    retq
   9968 ;
   9969 ; AVX1-LABEL: test175:
   9970 ; AVX1:       # BB#0: # %entry
   9971 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   9972 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   9973 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   9974 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   9975 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   9976 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   9977 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm4
   9978 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
   9979 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   9980 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   9981 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9982 ; AVX1-NEXT:    retq
   9983 ;
   9984 ; AVX2-LABEL: test175:
   9985 ; AVX2:       # BB#0: # %entry
   9986 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   9987 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   9988 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   9989 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   9990 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   9991 ; AVX2-NEXT:    retq
   9992 ;
   9993 ; AVX512BW-LABEL: test175:
   9994 ; AVX512BW:       # BB#0: # %entry
   9995 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   9996 ; AVX512BW-NEXT:    retq
   9997 entry:
   9998   %cmp = icmp ugt <4 x i64> %a, %b
   9999   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   10000   ret <4 x i64> %sel
   10001 }
   10002 
   10003 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
   10004 ; SSE2-LABEL: test176:
   10005 ; SSE2:       # BB#0: # %entry
   10006 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
   10007 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   10008 ; SSE2-NEXT:    pxor %xmm7, %xmm4
   10009 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
   10010 ; SSE2-NEXT:    pxor %xmm7, %xmm5
   10011 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   10012 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   10013 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
   10014 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   10015 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   10016 ; SSE2-NEXT:    pand %xmm8, %xmm4
   10017 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
   10018 ; SSE2-NEXT:    por %xmm4, %xmm8
   10019 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
   10020 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
   10021 ; SSE2-NEXT:    pxor %xmm4, %xmm9
   10022 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   10023 ; SSE2-NEXT:    pxor %xmm7, %xmm6
   10024 ; SSE2-NEXT:    pxor %xmm2, %xmm7
   10025 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
   10026 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   10027 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
   10028 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
   10029 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   10030 ; SSE2-NEXT:    pand %xmm10, %xmm6
   10031 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   10032 ; SSE2-NEXT:    por %xmm6, %xmm5
   10033 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   10034 ; SSE2-NEXT:    pandn %xmm2, %xmm5
   10035 ; SSE2-NEXT:    pandn %xmm0, %xmm4
   10036 ; SSE2-NEXT:    por %xmm5, %xmm4
   10037 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   10038 ; SSE2-NEXT:    pandn %xmm1, %xmm9
   10039 ; SSE2-NEXT:    por %xmm8, %xmm9
   10040 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   10041 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
   10042 ; SSE2-NEXT:    retq
   10043 ;
   10044 ; SSE4-LABEL: test176:
   10045 ; SSE4:       # BB#0: # %entry
   10046 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   10047 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10048 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
   10049 ; SSE4-NEXT:    pxor %xmm0, %xmm6
   10050 ; SSE4-NEXT:    movdqa %xmm3, %xmm5
   10051 ; SSE4-NEXT:    pxor %xmm0, %xmm5
   10052 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
   10053 ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
   10054 ; SSE4-NEXT:    pxor %xmm6, %xmm5
   10055 ; SSE4-NEXT:    movdqa %xmm4, %xmm7
   10056 ; SSE4-NEXT:    pxor %xmm0, %xmm7
   10057 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   10058 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   10059 ; SSE4-NEXT:    pxor %xmm6, %xmm0
   10060 ; SSE4-NEXT:    blendvpd %xmm2, %xmm4
   10061 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   10062 ; SSE4-NEXT:    blendvpd %xmm3, %xmm1
   10063 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   10064 ; SSE4-NEXT:    retq
   10065 ;
   10066 ; AVX1-LABEL: test176:
   10067 ; AVX1:       # BB#0: # %entry
   10068 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   10069 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   10070 ; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
   10071 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   10072 ; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
   10073 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   10074 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
   10075 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
   10076 ; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm5
   10077 ; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
   10078 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
   10079 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
   10080 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   10081 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   10082 ; AVX1-NEXT:    retq
   10083 ;
   10084 ; AVX2-LABEL: test176:
   10085 ; AVX2:       # BB#0: # %entry
   10086 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
   10087 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   10088 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   10089 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   10090 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
   10091 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
   10092 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
   10093 ; AVX2-NEXT:    retq
   10094 ;
   10095 ; AVX512BW-LABEL: test176:
   10096 ; AVX512BW:       # BB#0: # %entry
   10097 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   10098 ; AVX512BW-NEXT:    retq
   10099 entry:
   10100   %cmp = icmp uge <4 x i64> %a, %b
   10101   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   10102   ret <4 x i64> %sel
   10103 }
   10104 
   10105 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
   10106 ; SSE2-LABEL: test177:
   10107 ; SSE2:       # BB#0: # %entry
   10108 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10109 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10110 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10111 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10112 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10113 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10114 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10115 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10116 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10117 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10118 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10119 ; SSE2-NEXT:    por %xmm2, %xmm3
   10120 ; SSE2-NEXT:    pand %xmm3, %xmm0
   10121 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10122 ; SSE2-NEXT:    por %xmm3, %xmm0
   10123 ; SSE2-NEXT:    retq
   10124 ;
   10125 ; SSE4-LABEL: test177:
   10126 ; SSE4:       # BB#0: # %entry
   10127 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10128 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   10129 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   10130 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10131 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10132 ; SSE4-NEXT:    retq
   10133 ;
   10134 ; AVX1-LABEL: test177:
   10135 ; AVX1:       # BB#0: # %entry
   10136 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10137 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10138 ; AVX1-NEXT:    retq
   10139 ;
   10140 ; AVX2-LABEL: test177:
   10141 ; AVX2:       # BB#0: # %entry
   10142 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10143 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10144 ; AVX2-NEXT:    retq
   10145 ;
   10146 ; AVX512BW-LABEL: test177:
   10147 ; AVX512BW:       # BB#0: # %entry
   10148 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   10149 ; AVX512BW-NEXT:    retq
   10150 entry:
   10151   %cmp = icmp slt <2 x i64> %a, %b
   10152   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10153   ret <2 x i64> %sel
   10154 }
   10155 
   10156 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
   10157 ; SSE2-LABEL: test178:
   10158 ; SSE2:       # BB#0: # %entry
   10159 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10160 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10161 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10162 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10163 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10164 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10165 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10166 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10167 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10168 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10169 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10170 ; SSE2-NEXT:    por %xmm2, %xmm3
   10171 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10172 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10173 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   10174 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   10175 ; SSE2-NEXT:    por %xmm3, %xmm2
   10176 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10177 ; SSE2-NEXT:    retq
   10178 ;
   10179 ; SSE4-LABEL: test178:
   10180 ; SSE4:       # BB#0: # %entry
   10181 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10182 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   10183 ; SSE4-NEXT:    pcmpeqd %xmm3, %xmm3
   10184 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10185 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10186 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10187 ; SSE4-NEXT:    retq
   10188 ;
   10189 ; AVX1-LABEL: test178:
   10190 ; AVX1:       # BB#0: # %entry
   10191 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10192 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10193 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10194 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10195 ; AVX1-NEXT:    retq
   10196 ;
   10197 ; AVX2-LABEL: test178:
   10198 ; AVX2:       # BB#0: # %entry
   10199 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10200 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10201 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10202 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10203 ; AVX2-NEXT:    retq
   10204 ;
   10205 ; AVX512BW-LABEL: test178:
   10206 ; AVX512BW:       # BB#0: # %entry
   10207 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   10208 ; AVX512BW-NEXT:    retq
   10209 entry:
   10210   %cmp = icmp sle <2 x i64> %a, %b
   10211   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10212   ret <2 x i64> %sel
   10213 }
   10214 
   10215 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
   10216 ; SSE2-LABEL: test179:
   10217 ; SSE2:       # BB#0: # %entry
   10218 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10219 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10220 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10221 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10222 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10223 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10224 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10225 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10226 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10227 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10228 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10229 ; SSE2-NEXT:    por %xmm2, %xmm3
   10230 ; SSE2-NEXT:    pand %xmm3, %xmm0
   10231 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10232 ; SSE2-NEXT:    por %xmm3, %xmm0
   10233 ; SSE2-NEXT:    retq
   10234 ;
   10235 ; SSE4-LABEL: test179:
   10236 ; SSE4:       # BB#0: # %entry
   10237 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10238 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   10239 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10240 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10241 ; SSE4-NEXT:    retq
   10242 ;
   10243 ; AVX1-LABEL: test179:
   10244 ; AVX1:       # BB#0: # %entry
   10245 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10246 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10247 ; AVX1-NEXT:    retq
   10248 ;
   10249 ; AVX2-LABEL: test179:
   10250 ; AVX2:       # BB#0: # %entry
   10251 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10252 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10253 ; AVX2-NEXT:    retq
   10254 ;
   10255 ; AVX512BW-LABEL: test179:
   10256 ; AVX512BW:       # BB#0: # %entry
   10257 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   10258 ; AVX512BW-NEXT:    retq
   10259 entry:
   10260   %cmp = icmp sgt <2 x i64> %a, %b
   10261   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10262   ret <2 x i64> %sel
   10263 }
   10264 
   10265 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
   10266 ; SSE2-LABEL: test180:
   10267 ; SSE2:       # BB#0: # %entry
   10268 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10269 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10270 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10271 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10272 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10273 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10274 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10275 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10276 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10277 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10278 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10279 ; SSE2-NEXT:    por %xmm2, %xmm3
   10280 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10281 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10282 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   10283 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   10284 ; SSE2-NEXT:    por %xmm3, %xmm2
   10285 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10286 ; SSE2-NEXT:    retq
   10287 ;
   10288 ; SSE4-LABEL: test180:
   10289 ; SSE4:       # BB#0: # %entry
   10290 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10291 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   10292 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm3
   10293 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10294 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10295 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10296 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10297 ; SSE4-NEXT:    retq
   10298 ;
   10299 ; AVX1-LABEL: test180:
   10300 ; AVX1:       # BB#0: # %entry
   10301 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10302 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10303 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10304 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10305 ; AVX1-NEXT:    retq
   10306 ;
   10307 ; AVX2-LABEL: test180:
   10308 ; AVX2:       # BB#0: # %entry
   10309 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10310 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10311 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10312 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10313 ; AVX2-NEXT:    retq
   10314 ;
   10315 ; AVX512BW-LABEL: test180:
   10316 ; AVX512BW:       # BB#0: # %entry
   10317 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   10318 ; AVX512BW-NEXT:    retq
   10319 entry:
   10320   %cmp = icmp sge <2 x i64> %a, %b
   10321   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10322   ret <2 x i64> %sel
   10323 }
   10324 
   10325 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
   10326 ; SSE2-LABEL: test181:
   10327 ; SSE2:       # BB#0: # %entry
   10328 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10329 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10330 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10331 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10332 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10333 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10334 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10335 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10336 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10337 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10338 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10339 ; SSE2-NEXT:    por %xmm2, %xmm3
   10340 ; SSE2-NEXT:    pand %xmm3, %xmm0
   10341 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10342 ; SSE2-NEXT:    por %xmm3, %xmm0
   10343 ; SSE2-NEXT:    retq
   10344 ;
   10345 ; SSE4-LABEL: test181:
   10346 ; SSE4:       # BB#0: # %entry
   10347 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10348 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10349 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
   10350 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   10351 ; SSE4-NEXT:    pxor %xmm1, %xmm0
   10352 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   10353 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10354 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10355 ; SSE4-NEXT:    retq
   10356 ;
   10357 ; AVX1-LABEL: test181:
   10358 ; AVX1:       # BB#0: # %entry
   10359 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10360 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10361 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10362 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10363 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10364 ; AVX1-NEXT:    retq
   10365 ;
   10366 ; AVX2-LABEL: test181:
   10367 ; AVX2:       # BB#0: # %entry
   10368 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10369 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10370 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10371 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10372 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10373 ; AVX2-NEXT:    retq
   10374 ;
   10375 ; AVX512BW-LABEL: test181:
   10376 ; AVX512BW:       # BB#0: # %entry
   10377 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   10378 ; AVX512BW-NEXT:    retq
   10379 entry:
   10380   %cmp = icmp ult <2 x i64> %a, %b
   10381   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10382   ret <2 x i64> %sel
   10383 }
   10384 
   10385 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
   10386 ; SSE2-LABEL: test182:
   10387 ; SSE2:       # BB#0: # %entry
   10388 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10389 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10390 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10391 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10392 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10393 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10394 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10395 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10396 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10397 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10398 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10399 ; SSE2-NEXT:    por %xmm2, %xmm3
   10400 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10401 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10402 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   10403 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   10404 ; SSE2-NEXT:    por %xmm3, %xmm2
   10405 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10406 ; SSE2-NEXT:    retq
   10407 ;
   10408 ; SSE4-LABEL: test182:
   10409 ; SSE4:       # BB#0: # %entry
   10410 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10411 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   10412 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   10413 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10414 ; SSE4-NEXT:    pxor %xmm2, %xmm3
   10415 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
   10416 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10417 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10418 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10419 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10420 ; SSE4-NEXT:    retq
   10421 ;
   10422 ; AVX1-LABEL: test182:
   10423 ; AVX1:       # BB#0: # %entry
   10424 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10425 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10426 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10427 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10428 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10429 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10430 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10431 ; AVX1-NEXT:    retq
   10432 ;
   10433 ; AVX2-LABEL: test182:
   10434 ; AVX2:       # BB#0: # %entry
   10435 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10436 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10437 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10438 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10439 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10440 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10441 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10442 ; AVX2-NEXT:    retq
   10443 ;
   10444 ; AVX512BW-LABEL: test182:
   10445 ; AVX512BW:       # BB#0: # %entry
   10446 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   10447 ; AVX512BW-NEXT:    retq
   10448 entry:
   10449   %cmp = icmp ule <2 x i64> %a, %b
   10450   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10451   ret <2 x i64> %sel
   10452 }
   10453 
   10454 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
   10455 ; SSE2-LABEL: test183:
   10456 ; SSE2:       # BB#0: # %entry
   10457 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10458 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10459 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10460 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10461 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10462 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10463 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10464 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10465 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10466 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10467 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10468 ; SSE2-NEXT:    por %xmm2, %xmm3
   10469 ; SSE2-NEXT:    pand %xmm3, %xmm0
   10470 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10471 ; SSE2-NEXT:    por %xmm3, %xmm0
   10472 ; SSE2-NEXT:    retq
   10473 ;
   10474 ; SSE4-LABEL: test183:
   10475 ; SSE4:       # BB#0: # %entry
   10476 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10477 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10478 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   10479 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   10480 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   10481 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   10482 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10483 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10484 ; SSE4-NEXT:    retq
   10485 ;
   10486 ; AVX1-LABEL: test183:
   10487 ; AVX1:       # BB#0: # %entry
   10488 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10489 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10490 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10491 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10492 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10493 ; AVX1-NEXT:    retq
   10494 ;
   10495 ; AVX2-LABEL: test183:
   10496 ; AVX2:       # BB#0: # %entry
   10497 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10498 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10499 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10500 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10501 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10502 ; AVX2-NEXT:    retq
   10503 ;
   10504 ; AVX512BW-LABEL: test183:
   10505 ; AVX512BW:       # BB#0: # %entry
   10506 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   10507 ; AVX512BW-NEXT:    retq
   10508 entry:
   10509   %cmp = icmp ugt <2 x i64> %a, %b
   10510   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10511   ret <2 x i64> %sel
   10512 }
   10513 
   10514 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
   10515 ; SSE2-LABEL: test184:
   10516 ; SSE2:       # BB#0: # %entry
   10517 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10518 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10519 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10520 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10521 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10522 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10523 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10524 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10525 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10526 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10527 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10528 ; SSE2-NEXT:    por %xmm2, %xmm3
   10529 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10530 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10531 ; SSE2-NEXT:    pandn %xmm0, %xmm3
   10532 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   10533 ; SSE2-NEXT:    por %xmm3, %xmm2
   10534 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10535 ; SSE2-NEXT:    retq
   10536 ;
   10537 ; SSE4-LABEL: test184:
   10538 ; SSE4:       # BB#0: # %entry
   10539 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10540 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   10541 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10542 ; SSE4-NEXT:    pxor %xmm1, %xmm3
   10543 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
   10544 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10545 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10546 ; SSE4-NEXT:    blendvpd %xmm2, %xmm1
   10547 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   10548 ; SSE4-NEXT:    retq
   10549 ;
   10550 ; AVX1-LABEL: test184:
   10551 ; AVX1:       # BB#0: # %entry
   10552 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10553 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10554 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10555 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10556 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10557 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10558 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10559 ; AVX1-NEXT:    retq
   10560 ;
   10561 ; AVX2-LABEL: test184:
   10562 ; AVX2:       # BB#0: # %entry
   10563 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10564 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10565 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10566 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10567 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10568 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10569 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   10570 ; AVX2-NEXT:    retq
   10571 ;
   10572 ; AVX512BW-LABEL: test184:
   10573 ; AVX512BW:       # BB#0: # %entry
   10574 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   10575 ; AVX512BW-NEXT:    retq
   10576 entry:
   10577   %cmp = icmp uge <2 x i64> %a, %b
   10578   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   10579   ret <2 x i64> %sel
   10580 }
   10581 
   10582 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
   10583 ; SSE2-LABEL: test185:
   10584 ; SSE2:       # BB#0: # %entry
   10585 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10586 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10587 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10588 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10589 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10590 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10591 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10592 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10593 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
   10594 ; SSE2-NEXT:    pand %xmm5, %xmm3
   10595 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   10596 ; SSE2-NEXT:    por %xmm3, %xmm2
   10597 ; SSE2-NEXT:    pand %xmm2, %xmm1
   10598 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10599 ; SSE2-NEXT:    por %xmm1, %xmm2
   10600 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10601 ; SSE2-NEXT:    retq
   10602 ;
   10603 ; SSE4-LABEL: test185:
   10604 ; SSE4:       # BB#0: # %entry
   10605 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10606 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   10607 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   10608 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10609 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10610 ; SSE4-NEXT:    retq
   10611 ;
   10612 ; AVX1-LABEL: test185:
   10613 ; AVX1:       # BB#0: # %entry
   10614 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10615 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10616 ; AVX1-NEXT:    retq
   10617 ;
   10618 ; AVX2-LABEL: test185:
   10619 ; AVX2:       # BB#0: # %entry
   10620 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10621 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10622 ; AVX2-NEXT:    retq
   10623 ;
   10624 ; AVX512BW-LABEL: test185:
   10625 ; AVX512BW:       # BB#0: # %entry
   10626 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   10627 ; AVX512BW-NEXT:    retq
   10628 entry:
   10629   %cmp = icmp slt <2 x i64> %a, %b
   10630   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10631   ret <2 x i64> %sel
   10632 }
   10633 
   10634 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
   10635 ; SSE2-LABEL: test186:
   10636 ; SSE2:       # BB#0: # %entry
   10637 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10638 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10639 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10640 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10641 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10642 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10643 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10644 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10645 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10646 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10647 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10648 ; SSE2-NEXT:    por %xmm2, %xmm3
   10649 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10650 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10651 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10652 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10653 ; SSE2-NEXT:    por %xmm3, %xmm2
   10654 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10655 ; SSE2-NEXT:    retq
   10656 ;
   10657 ; SSE4-LABEL: test186:
   10658 ; SSE4:       # BB#0: # %entry
   10659 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10660 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   10661 ; SSE4-NEXT:    pcmpeqd %xmm3, %xmm3
   10662 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10663 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10664 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10665 ; SSE4-NEXT:    retq
   10666 ;
   10667 ; AVX1-LABEL: test186:
   10668 ; AVX1:       # BB#0: # %entry
   10669 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10670 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10671 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10672 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10673 ; AVX1-NEXT:    retq
   10674 ;
   10675 ; AVX2-LABEL: test186:
   10676 ; AVX2:       # BB#0: # %entry
   10677 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10678 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10679 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10680 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10681 ; AVX2-NEXT:    retq
   10682 ;
   10683 ; AVX512BW-LABEL: test186:
   10684 ; AVX512BW:       # BB#0: # %entry
   10685 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   10686 ; AVX512BW-NEXT:    retq
   10687 entry:
   10688   %cmp = icmp sle <2 x i64> %a, %b
   10689   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10690   ret <2 x i64> %sel
   10691 }
   10692 
   10693 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
   10694 ; SSE2-LABEL: test187:
   10695 ; SSE2:       # BB#0: # %entry
   10696 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10697 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10698 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10699 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10700 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10701 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10702 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10703 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10704 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
   10705 ; SSE2-NEXT:    pand %xmm5, %xmm3
   10706 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   10707 ; SSE2-NEXT:    por %xmm3, %xmm2
   10708 ; SSE2-NEXT:    pand %xmm2, %xmm1
   10709 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10710 ; SSE2-NEXT:    por %xmm1, %xmm2
   10711 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10712 ; SSE2-NEXT:    retq
   10713 ;
   10714 ; SSE4-LABEL: test187:
   10715 ; SSE4:       # BB#0: # %entry
   10716 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10717 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   10718 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10719 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10720 ; SSE4-NEXT:    retq
   10721 ;
   10722 ; AVX1-LABEL: test187:
   10723 ; AVX1:       # BB#0: # %entry
   10724 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10725 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10726 ; AVX1-NEXT:    retq
   10727 ;
   10728 ; AVX2-LABEL: test187:
   10729 ; AVX2:       # BB#0: # %entry
   10730 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   10731 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10732 ; AVX2-NEXT:    retq
   10733 ;
   10734 ; AVX512BW-LABEL: test187:
   10735 ; AVX512BW:       # BB#0: # %entry
   10736 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   10737 ; AVX512BW-NEXT:    retq
   10738 entry:
   10739   %cmp = icmp sgt <2 x i64> %a, %b
   10740   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10741   ret <2 x i64> %sel
   10742 }
   10743 
   10744 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
   10745 ; SSE2-LABEL: test188:
   10746 ; SSE2:       # BB#0: # %entry
   10747 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   10748 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10749 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10750 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10751 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10752 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10753 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10754 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10755 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10756 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10757 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10758 ; SSE2-NEXT:    por %xmm2, %xmm3
   10759 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10760 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10761 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10762 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10763 ; SSE2-NEXT:    por %xmm3, %xmm2
   10764 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10765 ; SSE2-NEXT:    retq
   10766 ;
   10767 ; SSE4-LABEL: test188:
   10768 ; SSE4:       # BB#0: # %entry
   10769 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10770 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   10771 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm3
   10772 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10773 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10774 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10775 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10776 ; SSE4-NEXT:    retq
   10777 ;
   10778 ; AVX1-LABEL: test188:
   10779 ; AVX1:       # BB#0: # %entry
   10780 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10781 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10782 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10783 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10784 ; AVX1-NEXT:    retq
   10785 ;
   10786 ; AVX2-LABEL: test188:
   10787 ; AVX2:       # BB#0: # %entry
   10788 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   10789 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10790 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10791 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10792 ; AVX2-NEXT:    retq
   10793 ;
   10794 ; AVX512BW-LABEL: test188:
   10795 ; AVX512BW:       # BB#0: # %entry
   10796 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   10797 ; AVX512BW-NEXT:    retq
   10798 entry:
   10799   %cmp = icmp sge <2 x i64> %a, %b
   10800   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10801   ret <2 x i64> %sel
   10802 }
   10803 
   10804 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
   10805 ; SSE2-LABEL: test189:
   10806 ; SSE2:       # BB#0: # %entry
   10807 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10808 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   10809 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10810 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   10811 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10812 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10813 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10814 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10815 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
   10816 ; SSE2-NEXT:    pand %xmm5, %xmm3
   10817 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   10818 ; SSE2-NEXT:    por %xmm3, %xmm2
   10819 ; SSE2-NEXT:    pand %xmm2, %xmm1
   10820 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10821 ; SSE2-NEXT:    por %xmm1, %xmm2
   10822 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10823 ; SSE2-NEXT:    retq
   10824 ;
   10825 ; SSE4-LABEL: test189:
   10826 ; SSE4:       # BB#0: # %entry
   10827 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10828 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10829 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
   10830 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   10831 ; SSE4-NEXT:    pxor %xmm1, %xmm0
   10832 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   10833 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10834 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10835 ; SSE4-NEXT:    retq
   10836 ;
   10837 ; AVX1-LABEL: test189:
   10838 ; AVX1:       # BB#0: # %entry
   10839 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10840 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10841 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10842 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10843 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10844 ; AVX1-NEXT:    retq
   10845 ;
   10846 ; AVX2-LABEL: test189:
   10847 ; AVX2:       # BB#0: # %entry
   10848 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10849 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   10850 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   10851 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10852 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10853 ; AVX2-NEXT:    retq
   10854 ;
   10855 ; AVX512BW-LABEL: test189:
   10856 ; AVX512BW:       # BB#0: # %entry
   10857 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   10858 ; AVX512BW-NEXT:    retq
   10859 entry:
   10860   %cmp = icmp ult <2 x i64> %a, %b
   10861   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10862   ret <2 x i64> %sel
   10863 }
   10864 
   10865 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
   10866 ; SSE2-LABEL: test190:
   10867 ; SSE2:       # BB#0: # %entry
   10868 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10869 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10870 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10871 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10872 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10873 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10874 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10875 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10876 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   10877 ; SSE2-NEXT:    pand %xmm5, %xmm2
   10878 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   10879 ; SSE2-NEXT:    por %xmm2, %xmm3
   10880 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   10881 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   10882 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   10883 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10884 ; SSE2-NEXT:    por %xmm3, %xmm2
   10885 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10886 ; SSE2-NEXT:    retq
   10887 ;
   10888 ; SSE4-LABEL: test190:
   10889 ; SSE4:       # BB#0: # %entry
   10890 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10891 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   10892 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   10893 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10894 ; SSE4-NEXT:    pxor %xmm2, %xmm3
   10895 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
   10896 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   10897 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   10898 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10899 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10900 ; SSE4-NEXT:    retq
   10901 ;
   10902 ; AVX1-LABEL: test190:
   10903 ; AVX1:       # BB#0: # %entry
   10904 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10905 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10906 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10907 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10908 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10909 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10910 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10911 ; AVX1-NEXT:    retq
   10912 ;
   10913 ; AVX2-LABEL: test190:
   10914 ; AVX2:       # BB#0: # %entry
   10915 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10916 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10917 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10918 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10919 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   10920 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   10921 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10922 ; AVX2-NEXT:    retq
   10923 ;
   10924 ; AVX512BW-LABEL: test190:
   10925 ; AVX512BW:       # BB#0: # %entry
   10926 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   10927 ; AVX512BW-NEXT:    retq
   10928 entry:
   10929   %cmp = icmp ule <2 x i64> %a, %b
   10930   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10931   ret <2 x i64> %sel
   10932 }
   10933 
   10934 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
   10935 ; SSE2-LABEL: test191:
   10936 ; SSE2:       # BB#0: # %entry
   10937 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10938 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   10939 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   10940 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   10941 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   10942 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   10943 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   10944 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   10945 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
   10946 ; SSE2-NEXT:    pand %xmm5, %xmm3
   10947 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   10948 ; SSE2-NEXT:    por %xmm3, %xmm2
   10949 ; SSE2-NEXT:    pand %xmm2, %xmm1
   10950 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   10951 ; SSE2-NEXT:    por %xmm1, %xmm2
   10952 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   10953 ; SSE2-NEXT:    retq
   10954 ;
   10955 ; SSE4-LABEL: test191:
   10956 ; SSE4:       # BB#0: # %entry
   10957 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   10958 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   10959 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   10960 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   10961 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   10962 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   10963 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   10964 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   10965 ; SSE4-NEXT:    retq
   10966 ;
   10967 ; AVX1-LABEL: test191:
   10968 ; AVX1:       # BB#0: # %entry
   10969 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10970 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10971 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10972 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10973 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10974 ; AVX1-NEXT:    retq
   10975 ;
   10976 ; AVX2-LABEL: test191:
   10977 ; AVX2:       # BB#0: # %entry
   10978 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   10979 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   10980 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   10981 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   10982 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   10983 ; AVX2-NEXT:    retq
   10984 ;
   10985 ; AVX512BW-LABEL: test191:
   10986 ; AVX512BW:       # BB#0: # %entry
   10987 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   10988 ; AVX512BW-NEXT:    retq
   10989 entry:
   10990   %cmp = icmp ugt <2 x i64> %a, %b
   10991   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   10992   ret <2 x i64> %sel
   10993 }
   10994 
   10995 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
   10996 ; SSE2-LABEL: test192:
   10997 ; SSE2:       # BB#0: # %entry
   10998 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   10999 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   11000 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   11001 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   11002 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   11003 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   11004 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   11005 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   11006 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   11007 ; SSE2-NEXT:    pand %xmm5, %xmm2
   11008 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   11009 ; SSE2-NEXT:    por %xmm2, %xmm3
   11010 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
   11011 ; SSE2-NEXT:    pxor %xmm3, %xmm2
   11012 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   11013 ; SSE2-NEXT:    pandn %xmm0, %xmm2
   11014 ; SSE2-NEXT:    por %xmm3, %xmm2
   11015 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   11016 ; SSE2-NEXT:    retq
   11017 ;
   11018 ; SSE4-LABEL: test192:
   11019 ; SSE4:       # BB#0: # %entry
   11020 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   11021 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   11022 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   11023 ; SSE4-NEXT:    pxor %xmm1, %xmm3
   11024 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
   11025 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
   11026 ; SSE4-NEXT:    pxor %xmm3, %xmm0
   11027 ; SSE4-NEXT:    blendvpd %xmm1, %xmm2
   11028 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   11029 ; SSE4-NEXT:    retq
   11030 ;
   11031 ; AVX1-LABEL: test192:
   11032 ; AVX1:       # BB#0: # %entry
   11033 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   11034 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   11035 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   11036 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   11037 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   11038 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   11039 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   11040 ; AVX1-NEXT:    retq
   11041 ;
   11042 ; AVX2-LABEL: test192:
   11043 ; AVX2:       # BB#0: # %entry
   11044 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   11045 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   11046 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   11047 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   11048 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
   11049 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   11050 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
   11051 ; AVX2-NEXT:    retq
   11052 ;
   11053 ; AVX512BW-LABEL: test192:
   11054 ; AVX512BW:       # BB#0: # %entry
   11055 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   11056 ; AVX512BW-NEXT:    retq
   11057 entry:
   11058   %cmp = icmp uge <2 x i64> %a, %b
   11059   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   11060   ret <2 x i64> %sel
   11061 }
   11062