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 %xmm1, %xmm2
     38 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
     39 ; SSE2-NEXT:    pand %xmm2, %xmm0
     40 ; SSE2-NEXT:    pandn %xmm1, %xmm2
     41 ; SSE2-NEXT:    por %xmm2, %xmm0
     42 ; SSE2-NEXT:    retq
     43 ;
     44 ; SSE4-LABEL: test2:
     45 ; SSE4:       # %bb.0: # %entry
     46 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
     47 ; SSE4-NEXT:    retq
     48 ;
     49 ; AVX-LABEL: test2:
     50 ; AVX:       # %bb.0: # %entry
     51 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
     52 ; AVX-NEXT:    retq
     53 entry:
     54   %cmp = icmp sle <16 x i8> %a, %b
     55   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
     56   ret <16 x i8> %sel
     57 }
     58 
     59 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
     60 ; SSE2-LABEL: test3:
     61 ; SSE2:       # %bb.0: # %entry
     62 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
     63 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
     64 ; SSE2-NEXT:    pand %xmm2, %xmm0
     65 ; SSE2-NEXT:    pandn %xmm1, %xmm2
     66 ; SSE2-NEXT:    por %xmm0, %xmm2
     67 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
     68 ; SSE2-NEXT:    retq
     69 ;
     70 ; SSE4-LABEL: test3:
     71 ; SSE4:       # %bb.0: # %entry
     72 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
     73 ; SSE4-NEXT:    retq
     74 ;
     75 ; AVX-LABEL: test3:
     76 ; AVX:       # %bb.0: # %entry
     77 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
     78 ; AVX-NEXT:    retq
     79 entry:
     80   %cmp = icmp sgt <16 x i8> %a, %b
     81   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
     82   ret <16 x i8> %sel
     83 }
     84 
     85 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
     86 ; SSE2-LABEL: test4:
     87 ; SSE2:       # %bb.0: # %entry
     88 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
     89 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
     90 ; SSE2-NEXT:    pand %xmm2, %xmm0
     91 ; SSE2-NEXT:    pandn %xmm1, %xmm2
     92 ; SSE2-NEXT:    por %xmm0, %xmm2
     93 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
     94 ; SSE2-NEXT:    retq
     95 ;
     96 ; SSE4-LABEL: test4:
     97 ; SSE4:       # %bb.0: # %entry
     98 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
     99 ; SSE4-NEXT:    retq
    100 ;
    101 ; AVX-LABEL: test4:
    102 ; AVX:       # %bb.0: # %entry
    103 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    104 ; AVX-NEXT:    retq
    105 entry:
    106   %cmp = icmp sge <16 x i8> %a, %b
    107   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    108   ret <16 x i8> %sel
    109 }
    110 
    111 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
    112 ; SSE-LABEL: test5:
    113 ; SSE:       # %bb.0: # %entry
    114 ; SSE-NEXT:    pminub %xmm1, %xmm0
    115 ; SSE-NEXT:    retq
    116 ;
    117 ; AVX-LABEL: test5:
    118 ; AVX:       # %bb.0: # %entry
    119 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    120 ; AVX-NEXT:    retq
    121 entry:
    122   %cmp = icmp ult <16 x i8> %a, %b
    123   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    124   ret <16 x i8> %sel
    125 }
    126 
    127 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
    128 ; SSE-LABEL: test6:
    129 ; SSE:       # %bb.0: # %entry
    130 ; SSE-NEXT:    pminub %xmm1, %xmm0
    131 ; SSE-NEXT:    retq
    132 ;
    133 ; AVX-LABEL: test6:
    134 ; AVX:       # %bb.0: # %entry
    135 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    136 ; AVX-NEXT:    retq
    137 entry:
    138   %cmp = icmp ule <16 x i8> %a, %b
    139   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    140   ret <16 x i8> %sel
    141 }
    142 
    143 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
    144 ; SSE-LABEL: test7:
    145 ; SSE:       # %bb.0: # %entry
    146 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
    147 ; SSE-NEXT:    retq
    148 ;
    149 ; AVX-LABEL: test7:
    150 ; AVX:       # %bb.0: # %entry
    151 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    152 ; AVX-NEXT:    retq
    153 entry:
    154   %cmp = icmp ugt <16 x i8> %a, %b
    155   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    156   ret <16 x i8> %sel
    157 }
    158 
    159 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
    160 ; SSE-LABEL: test8:
    161 ; SSE:       # %bb.0: # %entry
    162 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
    163 ; SSE-NEXT:    retq
    164 ;
    165 ; AVX-LABEL: test8:
    166 ; AVX:       # %bb.0: # %entry
    167 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    168 ; AVX-NEXT:    retq
    169 entry:
    170   %cmp = icmp uge <16 x i8> %a, %b
    171   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
    172   ret <16 x i8> %sel
    173 }
    174 
    175 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
    176 ; SSE-LABEL: test9:
    177 ; SSE:       # %bb.0: # %entry
    178 ; SSE-NEXT:    pminsw %xmm1, %xmm0
    179 ; SSE-NEXT:    retq
    180 ;
    181 ; AVX-LABEL: test9:
    182 ; AVX:       # %bb.0: # %entry
    183 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    184 ; AVX-NEXT:    retq
    185 entry:
    186   %cmp = icmp slt <8 x i16> %a, %b
    187   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    188   ret <8 x i16> %sel
    189 }
    190 
    191 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
    192 ; SSE-LABEL: test10:
    193 ; SSE:       # %bb.0: # %entry
    194 ; SSE-NEXT:    pminsw %xmm1, %xmm0
    195 ; SSE-NEXT:    retq
    196 ;
    197 ; AVX-LABEL: test10:
    198 ; AVX:       # %bb.0: # %entry
    199 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    200 ; AVX-NEXT:    retq
    201 entry:
    202   %cmp = icmp sle <8 x i16> %a, %b
    203   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    204   ret <8 x i16> %sel
    205 }
    206 
    207 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
    208 ; SSE-LABEL: test11:
    209 ; SSE:       # %bb.0: # %entry
    210 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
    211 ; SSE-NEXT:    retq
    212 ;
    213 ; AVX-LABEL: test11:
    214 ; AVX:       # %bb.0: # %entry
    215 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    216 ; AVX-NEXT:    retq
    217 entry:
    218   %cmp = icmp sgt <8 x i16> %a, %b
    219   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    220   ret <8 x i16> %sel
    221 }
    222 
    223 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
    224 ; SSE-LABEL: test12:
    225 ; SSE:       # %bb.0: # %entry
    226 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
    227 ; SSE-NEXT:    retq
    228 ;
    229 ; AVX-LABEL: test12:
    230 ; AVX:       # %bb.0: # %entry
    231 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    232 ; AVX-NEXT:    retq
    233 entry:
    234   %cmp = icmp sge <8 x i16> %a, %b
    235   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    236   ret <8 x i16> %sel
    237 }
    238 
    239 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
    240 ; SSE2-LABEL: test13:
    241 ; SSE2:       # %bb.0: # %entry
    242 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
    243 ; SSE2-NEXT:    pxor %xmm2, %xmm1
    244 ; SSE2-NEXT:    pxor %xmm2, %xmm0
    245 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
    246 ; SSE2-NEXT:    pxor %xmm2, %xmm0
    247 ; SSE2-NEXT:    retq
    248 ;
    249 ; SSE4-LABEL: test13:
    250 ; SSE4:       # %bb.0: # %entry
    251 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
    252 ; SSE4-NEXT:    retq
    253 ;
    254 ; AVX-LABEL: test13:
    255 ; AVX:       # %bb.0: # %entry
    256 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
    257 ; AVX-NEXT:    retq
    258 entry:
    259   %cmp = icmp ult <8 x i16> %a, %b
    260   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    261   ret <8 x i16> %sel
    262 }
    263 
    264 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
    265 ; SSE2-LABEL: test14:
    266 ; SSE2:       # %bb.0: # %entry
    267 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
    268 ; SSE2-NEXT:    pxor %xmm2, %xmm1
    269 ; SSE2-NEXT:    pxor %xmm2, %xmm0
    270 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
    271 ; SSE2-NEXT:    pxor %xmm2, %xmm0
    272 ; SSE2-NEXT:    retq
    273 ;
    274 ; SSE4-LABEL: test14:
    275 ; SSE4:       # %bb.0: # %entry
    276 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
    277 ; SSE4-NEXT:    retq
    278 ;
    279 ; AVX-LABEL: test14:
    280 ; AVX:       # %bb.0: # %entry
    281 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
    282 ; AVX-NEXT:    retq
    283 entry:
    284   %cmp = icmp ule <8 x i16> %a, %b
    285   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    286   ret <8 x i16> %sel
    287 }
    288 
    289 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
    290 ; SSE2-LABEL: test15:
    291 ; SSE2:       # %bb.0: # %entry
    292 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
    293 ; SSE2-NEXT:    pxor %xmm2, %xmm1
    294 ; SSE2-NEXT:    pxor %xmm2, %xmm0
    295 ; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
    296 ; SSE2-NEXT:    pxor %xmm2, %xmm0
    297 ; SSE2-NEXT:    retq
    298 ;
    299 ; SSE4-LABEL: test15:
    300 ; SSE4:       # %bb.0: # %entry
    301 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
    302 ; SSE4-NEXT:    retq
    303 ;
    304 ; AVX-LABEL: test15:
    305 ; AVX:       # %bb.0: # %entry
    306 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
    307 ; AVX-NEXT:    retq
    308 entry:
    309   %cmp = icmp ugt <8 x i16> %a, %b
    310   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    311   ret <8 x i16> %sel
    312 }
    313 
    314 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
    315 ; SSE2-LABEL: test16:
    316 ; SSE2:       # %bb.0: # %entry
    317 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
    318 ; SSE2-NEXT:    pxor %xmm2, %xmm1
    319 ; SSE2-NEXT:    pxor %xmm2, %xmm0
    320 ; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
    321 ; SSE2-NEXT:    pxor %xmm2, %xmm0
    322 ; SSE2-NEXT:    retq
    323 ;
    324 ; SSE4-LABEL: test16:
    325 ; SSE4:       # %bb.0: # %entry
    326 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
    327 ; SSE4-NEXT:    retq
    328 ;
    329 ; AVX-LABEL: test16:
    330 ; AVX:       # %bb.0: # %entry
    331 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
    332 ; AVX-NEXT:    retq
    333 entry:
    334   %cmp = icmp uge <8 x i16> %a, %b
    335   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
    336   ret <8 x i16> %sel
    337 }
    338 
    339 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
    340 ; SSE2-LABEL: test17:
    341 ; SSE2:       # %bb.0: # %entry
    342 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    343 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
    344 ; SSE2-NEXT:    pand %xmm2, %xmm0
    345 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    346 ; SSE2-NEXT:    por %xmm2, %xmm0
    347 ; SSE2-NEXT:    retq
    348 ;
    349 ; SSE4-LABEL: test17:
    350 ; SSE4:       # %bb.0: # %entry
    351 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
    352 ; SSE4-NEXT:    retq
    353 ;
    354 ; AVX-LABEL: test17:
    355 ; AVX:       # %bb.0: # %entry
    356 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
    357 ; AVX-NEXT:    retq
    358 entry:
    359   %cmp = icmp slt <4 x i32> %a, %b
    360   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    361   ret <4 x i32> %sel
    362 }
    363 
    364 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
    365 ; SSE2-LABEL: test18:
    366 ; SSE2:       # %bb.0: # %entry
    367 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    368 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
    369 ; SSE2-NEXT:    pand %xmm2, %xmm0
    370 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    371 ; SSE2-NEXT:    por %xmm2, %xmm0
    372 ; SSE2-NEXT:    retq
    373 ;
    374 ; SSE4-LABEL: test18:
    375 ; SSE4:       # %bb.0: # %entry
    376 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
    377 ; SSE4-NEXT:    retq
    378 ;
    379 ; AVX-LABEL: test18:
    380 ; AVX:       # %bb.0: # %entry
    381 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
    382 ; AVX-NEXT:    retq
    383 entry:
    384   %cmp = icmp sle <4 x i32> %a, %b
    385   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    386   ret <4 x i32> %sel
    387 }
    388 
    389 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
    390 ; SSE2-LABEL: test19:
    391 ; SSE2:       # %bb.0: # %entry
    392 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    393 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
    394 ; SSE2-NEXT:    pand %xmm2, %xmm0
    395 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    396 ; SSE2-NEXT:    por %xmm0, %xmm2
    397 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    398 ; SSE2-NEXT:    retq
    399 ;
    400 ; SSE4-LABEL: test19:
    401 ; SSE4:       # %bb.0: # %entry
    402 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
    403 ; SSE4-NEXT:    retq
    404 ;
    405 ; AVX-LABEL: test19:
    406 ; AVX:       # %bb.0: # %entry
    407 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    408 ; AVX-NEXT:    retq
    409 entry:
    410   %cmp = icmp sgt <4 x i32> %a, %b
    411   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    412   ret <4 x i32> %sel
    413 }
    414 
    415 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
    416 ; SSE2-LABEL: test20:
    417 ; SSE2:       # %bb.0: # %entry
    418 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    419 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
    420 ; SSE2-NEXT:    pand %xmm2, %xmm0
    421 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    422 ; SSE2-NEXT:    por %xmm0, %xmm2
    423 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    424 ; SSE2-NEXT:    retq
    425 ;
    426 ; SSE4-LABEL: test20:
    427 ; SSE4:       # %bb.0: # %entry
    428 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
    429 ; SSE4-NEXT:    retq
    430 ;
    431 ; AVX-LABEL: test20:
    432 ; AVX:       # %bb.0: # %entry
    433 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
    434 ; AVX-NEXT:    retq
    435 entry:
    436   %cmp = icmp sge <4 x i32> %a, %b
    437   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    438   ret <4 x i32> %sel
    439 }
    440 
    441 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
    442 ; SSE2-LABEL: test21:
    443 ; SSE2:       # %bb.0: # %entry
    444 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
    445 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
    446 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    447 ; SSE2-NEXT:    pxor %xmm1, %xmm2
    448 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
    449 ; SSE2-NEXT:    pand %xmm2, %xmm0
    450 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    451 ; SSE2-NEXT:    por %xmm2, %xmm0
    452 ; SSE2-NEXT:    retq
    453 ;
    454 ; SSE4-LABEL: test21:
    455 ; SSE4:       # %bb.0: # %entry
    456 ; SSE4-NEXT:    pminud %xmm1, %xmm0
    457 ; SSE4-NEXT:    retq
    458 ;
    459 ; AVX-LABEL: test21:
    460 ; AVX:       # %bb.0: # %entry
    461 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
    462 ; AVX-NEXT:    retq
    463 entry:
    464   %cmp = icmp ult <4 x i32> %a, %b
    465   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    466   ret <4 x i32> %sel
    467 }
    468 
    469 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
    470 ; SSE2-LABEL: test22:
    471 ; SSE2:       # %bb.0: # %entry
    472 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
    473 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
    474 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    475 ; SSE2-NEXT:    pxor %xmm1, %xmm2
    476 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
    477 ; SSE2-NEXT:    pand %xmm2, %xmm0
    478 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    479 ; SSE2-NEXT:    por %xmm2, %xmm0
    480 ; SSE2-NEXT:    retq
    481 ;
    482 ; SSE4-LABEL: test22:
    483 ; SSE4:       # %bb.0: # %entry
    484 ; SSE4-NEXT:    pminud %xmm1, %xmm0
    485 ; SSE4-NEXT:    retq
    486 ;
    487 ; AVX-LABEL: test22:
    488 ; AVX:       # %bb.0: # %entry
    489 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
    490 ; AVX-NEXT:    retq
    491 entry:
    492   %cmp = icmp ule <4 x i32> %a, %b
    493   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    494   ret <4 x i32> %sel
    495 }
    496 
    497 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
    498 ; SSE2-LABEL: test23:
    499 ; SSE2:       # %bb.0: # %entry
    500 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
    501 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    502 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    503 ; SSE2-NEXT:    pxor %xmm0, %xmm2
    504 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
    505 ; SSE2-NEXT:    pand %xmm2, %xmm0
    506 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    507 ; SSE2-NEXT:    por %xmm2, %xmm0
    508 ; SSE2-NEXT:    retq
    509 ;
    510 ; SSE4-LABEL: test23:
    511 ; SSE4:       # %bb.0: # %entry
    512 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
    513 ; SSE4-NEXT:    retq
    514 ;
    515 ; AVX-LABEL: test23:
    516 ; AVX:       # %bb.0: # %entry
    517 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
    518 ; AVX-NEXT:    retq
    519 entry:
    520   %cmp = icmp ugt <4 x i32> %a, %b
    521   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    522   ret <4 x i32> %sel
    523 }
    524 
    525 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
    526 ; SSE2-LABEL: test24:
    527 ; SSE2:       # %bb.0: # %entry
    528 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
    529 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    530 ; SSE2-NEXT:    pxor %xmm2, %xmm3
    531 ; SSE2-NEXT:    pxor %xmm0, %xmm2
    532 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
    533 ; SSE2-NEXT:    pand %xmm2, %xmm0
    534 ; SSE2-NEXT:    pandn %xmm1, %xmm2
    535 ; SSE2-NEXT:    por %xmm2, %xmm0
    536 ; SSE2-NEXT:    retq
    537 ;
    538 ; SSE4-LABEL: test24:
    539 ; SSE4:       # %bb.0: # %entry
    540 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
    541 ; SSE4-NEXT:    retq
    542 ;
    543 ; AVX-LABEL: test24:
    544 ; AVX:       # %bb.0: # %entry
    545 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
    546 ; AVX-NEXT:    retq
    547 entry:
    548   %cmp = icmp uge <4 x i32> %a, %b
    549   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
    550   ret <4 x i32> %sel
    551 }
    552 
    553 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
    554 ; SSE2-LABEL: test25:
    555 ; SSE2:       # %bb.0: # %entry
    556 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
    557 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
    558 ; SSE2-NEXT:    pand %xmm4, %xmm0
    559 ; SSE2-NEXT:    pandn %xmm2, %xmm4
    560 ; SSE2-NEXT:    por %xmm4, %xmm0
    561 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
    562 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
    563 ; SSE2-NEXT:    pand %xmm2, %xmm1
    564 ; SSE2-NEXT:    pandn %xmm3, %xmm2
    565 ; SSE2-NEXT:    por %xmm2, %xmm1
    566 ; SSE2-NEXT:    retq
    567 ;
    568 ; SSE4-LABEL: test25:
    569 ; SSE4:       # %bb.0: # %entry
    570 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
    571 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
    572 ; SSE4-NEXT:    retq
    573 ;
    574 ; AVX1-LABEL: test25:
    575 ; AVX1:       # %bb.0: # %entry
    576 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    577 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    578 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
    579 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
    580 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    581 ; AVX1-NEXT:    retq
    582 ;
    583 ; AVX2-LABEL: test25:
    584 ; AVX2:       # %bb.0: # %entry
    585 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    586 ; AVX2-NEXT:    retq
    587 ;
    588 ; AVX512F-LABEL: test25:
    589 ; AVX512F:       # %bb.0: # %entry
    590 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    591 ; AVX512F-NEXT:    retq
    592 entry:
    593   %cmp = icmp slt <32 x i8> %a, %b
    594   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    595   ret <32 x i8> %sel
    596 }
    597 
    598 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
    599 ; SSE2-LABEL: test26:
    600 ; SSE2:       # %bb.0: # %entry
    601 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
    602 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
    603 ; SSE2-NEXT:    pand %xmm4, %xmm0
    604 ; SSE2-NEXT:    pandn %xmm2, %xmm4
    605 ; SSE2-NEXT:    por %xmm4, %xmm0
    606 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
    607 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
    608 ; SSE2-NEXT:    pand %xmm2, %xmm1
    609 ; SSE2-NEXT:    pandn %xmm3, %xmm2
    610 ; SSE2-NEXT:    por %xmm2, %xmm1
    611 ; SSE2-NEXT:    retq
    612 ;
    613 ; SSE4-LABEL: test26:
    614 ; SSE4:       # %bb.0: # %entry
    615 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
    616 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
    617 ; SSE4-NEXT:    retq
    618 ;
    619 ; AVX1-LABEL: test26:
    620 ; AVX1:       # %bb.0: # %entry
    621 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    622 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    623 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
    624 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
    625 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    626 ; AVX1-NEXT:    retq
    627 ;
    628 ; AVX2-LABEL: test26:
    629 ; AVX2:       # %bb.0: # %entry
    630 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    631 ; AVX2-NEXT:    retq
    632 ;
    633 ; AVX512F-LABEL: test26:
    634 ; AVX512F:       # %bb.0: # %entry
    635 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
    636 ; AVX512F-NEXT:    retq
    637 entry:
    638   %cmp = icmp sle <32 x i8> %a, %b
    639   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    640   ret <32 x i8> %sel
    641 }
    642 
    643 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
    644 ; SSE2-LABEL: test27:
    645 ; SSE2:       # %bb.0: # %entry
    646 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
    647 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
    648 ; SSE2-NEXT:    pand %xmm4, %xmm0
    649 ; SSE2-NEXT:    pandn %xmm2, %xmm4
    650 ; SSE2-NEXT:    por %xmm0, %xmm4
    651 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    652 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
    653 ; SSE2-NEXT:    pand %xmm2, %xmm1
    654 ; SSE2-NEXT:    pandn %xmm3, %xmm2
    655 ; SSE2-NEXT:    por %xmm1, %xmm2
    656 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    657 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
    658 ; SSE2-NEXT:    retq
    659 ;
    660 ; SSE4-LABEL: test27:
    661 ; SSE4:       # %bb.0: # %entry
    662 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
    663 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
    664 ; SSE4-NEXT:    retq
    665 ;
    666 ; AVX1-LABEL: test27:
    667 ; AVX1:       # %bb.0: # %entry
    668 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    669 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    670 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
    671 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    672 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    673 ; AVX1-NEXT:    retq
    674 ;
    675 ; AVX2-LABEL: test27:
    676 ; AVX2:       # %bb.0: # %entry
    677 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    678 ; AVX2-NEXT:    retq
    679 ;
    680 ; AVX512F-LABEL: test27:
    681 ; AVX512F:       # %bb.0: # %entry
    682 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    683 ; AVX512F-NEXT:    retq
    684 entry:
    685   %cmp = icmp sgt <32 x i8> %a, %b
    686   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    687   ret <32 x i8> %sel
    688 }
    689 
    690 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
    691 ; SSE2-LABEL: test28:
    692 ; SSE2:       # %bb.0: # %entry
    693 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
    694 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
    695 ; SSE2-NEXT:    pand %xmm4, %xmm0
    696 ; SSE2-NEXT:    pandn %xmm2, %xmm4
    697 ; SSE2-NEXT:    por %xmm0, %xmm4
    698 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    699 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
    700 ; SSE2-NEXT:    pand %xmm2, %xmm1
    701 ; SSE2-NEXT:    pandn %xmm3, %xmm2
    702 ; SSE2-NEXT:    por %xmm1, %xmm2
    703 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    704 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
    705 ; SSE2-NEXT:    retq
    706 ;
    707 ; SSE4-LABEL: test28:
    708 ; SSE4:       # %bb.0: # %entry
    709 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
    710 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
    711 ; SSE4-NEXT:    retq
    712 ;
    713 ; AVX1-LABEL: test28:
    714 ; AVX1:       # %bb.0: # %entry
    715 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    716 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    717 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
    718 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
    719 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    720 ; AVX1-NEXT:    retq
    721 ;
    722 ; AVX2-LABEL: test28:
    723 ; AVX2:       # %bb.0: # %entry
    724 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    725 ; AVX2-NEXT:    retq
    726 ;
    727 ; AVX512F-LABEL: test28:
    728 ; AVX512F:       # %bb.0: # %entry
    729 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
    730 ; AVX512F-NEXT:    retq
    731 entry:
    732   %cmp = icmp sge <32 x i8> %a, %b
    733   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    734   ret <32 x i8> %sel
    735 }
    736 
    737 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
    738 ; SSE-LABEL: test29:
    739 ; SSE:       # %bb.0: # %entry
    740 ; SSE-NEXT:    pminub %xmm2, %xmm0
    741 ; SSE-NEXT:    pminub %xmm3, %xmm1
    742 ; SSE-NEXT:    retq
    743 ;
    744 ; AVX1-LABEL: test29:
    745 ; AVX1:       # %bb.0: # %entry
    746 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    747 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    748 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
    749 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    750 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    751 ; AVX1-NEXT:    retq
    752 ;
    753 ; AVX2-LABEL: test29:
    754 ; AVX2:       # %bb.0: # %entry
    755 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    756 ; AVX2-NEXT:    retq
    757 ;
    758 ; AVX512F-LABEL: test29:
    759 ; AVX512F:       # %bb.0: # %entry
    760 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    761 ; AVX512F-NEXT:    retq
    762 entry:
    763   %cmp = icmp ult <32 x i8> %a, %b
    764   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    765   ret <32 x i8> %sel
    766 }
    767 
    768 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
    769 ; SSE-LABEL: test30:
    770 ; SSE:       # %bb.0: # %entry
    771 ; SSE-NEXT:    pminub %xmm2, %xmm0
    772 ; SSE-NEXT:    pminub %xmm3, %xmm1
    773 ; SSE-NEXT:    retq
    774 ;
    775 ; AVX1-LABEL: test30:
    776 ; AVX1:       # %bb.0: # %entry
    777 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    778 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    779 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
    780 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
    781 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    782 ; AVX1-NEXT:    retq
    783 ;
    784 ; AVX2-LABEL: test30:
    785 ; AVX2:       # %bb.0: # %entry
    786 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    787 ; AVX2-NEXT:    retq
    788 ;
    789 ; AVX512F-LABEL: test30:
    790 ; AVX512F:       # %bb.0: # %entry
    791 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
    792 ; AVX512F-NEXT:    retq
    793 entry:
    794   %cmp = icmp ule <32 x i8> %a, %b
    795   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    796   ret <32 x i8> %sel
    797 }
    798 
    799 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
    800 ; SSE-LABEL: test31:
    801 ; SSE:       # %bb.0: # %entry
    802 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
    803 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
    804 ; SSE-NEXT:    retq
    805 ;
    806 ; AVX1-LABEL: test31:
    807 ; AVX1:       # %bb.0: # %entry
    808 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    809 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    810 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
    811 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    812 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    813 ; AVX1-NEXT:    retq
    814 ;
    815 ; AVX2-LABEL: test31:
    816 ; AVX2:       # %bb.0: # %entry
    817 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    818 ; AVX2-NEXT:    retq
    819 ;
    820 ; AVX512F-LABEL: test31:
    821 ; AVX512F:       # %bb.0: # %entry
    822 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    823 ; AVX512F-NEXT:    retq
    824 entry:
    825   %cmp = icmp ugt <32 x i8> %a, %b
    826   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    827   ret <32 x i8> %sel
    828 }
    829 
    830 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
    831 ; SSE-LABEL: test32:
    832 ; SSE:       # %bb.0: # %entry
    833 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
    834 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
    835 ; SSE-NEXT:    retq
    836 ;
    837 ; AVX1-LABEL: test32:
    838 ; AVX1:       # %bb.0: # %entry
    839 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    840 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    841 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
    842 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
    843 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    844 ; AVX1-NEXT:    retq
    845 ;
    846 ; AVX2-LABEL: test32:
    847 ; AVX2:       # %bb.0: # %entry
    848 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    849 ; AVX2-NEXT:    retq
    850 ;
    851 ; AVX512F-LABEL: test32:
    852 ; AVX512F:       # %bb.0: # %entry
    853 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
    854 ; AVX512F-NEXT:    retq
    855 entry:
    856   %cmp = icmp uge <32 x i8> %a, %b
    857   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
    858   ret <32 x i8> %sel
    859 }
    860 
    861 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
    862 ; SSE-LABEL: test33:
    863 ; SSE:       # %bb.0: # %entry
    864 ; SSE-NEXT:    pminsw %xmm2, %xmm0
    865 ; SSE-NEXT:    pminsw %xmm3, %xmm1
    866 ; SSE-NEXT:    retq
    867 ;
    868 ; AVX1-LABEL: test33:
    869 ; AVX1:       # %bb.0: # %entry
    870 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    871 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    872 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
    873 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    874 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    875 ; AVX1-NEXT:    retq
    876 ;
    877 ; AVX2-LABEL: test33:
    878 ; AVX2:       # %bb.0: # %entry
    879 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    880 ; AVX2-NEXT:    retq
    881 ;
    882 ; AVX512F-LABEL: test33:
    883 ; AVX512F:       # %bb.0: # %entry
    884 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    885 ; AVX512F-NEXT:    retq
    886 entry:
    887   %cmp = icmp slt <16 x i16> %a, %b
    888   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    889   ret <16 x i16> %sel
    890 }
    891 
    892 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
    893 ; SSE-LABEL: test34:
    894 ; SSE:       # %bb.0: # %entry
    895 ; SSE-NEXT:    pminsw %xmm2, %xmm0
    896 ; SSE-NEXT:    pminsw %xmm3, %xmm1
    897 ; SSE-NEXT:    retq
    898 ;
    899 ; AVX1-LABEL: test34:
    900 ; AVX1:       # %bb.0: # %entry
    901 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    902 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    903 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
    904 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
    905 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    906 ; AVX1-NEXT:    retq
    907 ;
    908 ; AVX2-LABEL: test34:
    909 ; AVX2:       # %bb.0: # %entry
    910 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    911 ; AVX2-NEXT:    retq
    912 ;
    913 ; AVX512F-LABEL: test34:
    914 ; AVX512F:       # %bb.0: # %entry
    915 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
    916 ; AVX512F-NEXT:    retq
    917 entry:
    918   %cmp = icmp sle <16 x i16> %a, %b
    919   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    920   ret <16 x i16> %sel
    921 }
    922 
    923 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
    924 ; SSE-LABEL: test35:
    925 ; SSE:       # %bb.0: # %entry
    926 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
    927 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
    928 ; SSE-NEXT:    retq
    929 ;
    930 ; AVX1-LABEL: test35:
    931 ; AVX1:       # %bb.0: # %entry
    932 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    933 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    934 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
    935 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    936 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    937 ; AVX1-NEXT:    retq
    938 ;
    939 ; AVX2-LABEL: test35:
    940 ; AVX2:       # %bb.0: # %entry
    941 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    942 ; AVX2-NEXT:    retq
    943 ;
    944 ; AVX512F-LABEL: test35:
    945 ; AVX512F:       # %bb.0: # %entry
    946 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    947 ; AVX512F-NEXT:    retq
    948 entry:
    949   %cmp = icmp sgt <16 x i16> %a, %b
    950   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    951   ret <16 x i16> %sel
    952 }
    953 
    954 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
    955 ; SSE-LABEL: test36:
    956 ; SSE:       # %bb.0: # %entry
    957 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
    958 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
    959 ; SSE-NEXT:    retq
    960 ;
    961 ; AVX1-LABEL: test36:
    962 ; AVX1:       # %bb.0: # %entry
    963 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    964 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    965 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
    966 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
    967 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    968 ; AVX1-NEXT:    retq
    969 ;
    970 ; AVX2-LABEL: test36:
    971 ; AVX2:       # %bb.0: # %entry
    972 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    973 ; AVX2-NEXT:    retq
    974 ;
    975 ; AVX512F-LABEL: test36:
    976 ; AVX512F:       # %bb.0: # %entry
    977 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
    978 ; AVX512F-NEXT:    retq
    979 entry:
    980   %cmp = icmp sge <16 x i16> %a, %b
    981   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
    982   ret <16 x i16> %sel
    983 }
    984 
    985 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
    986 ; SSE2-LABEL: test37:
    987 ; SSE2:       # %bb.0: # %entry
    988 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
    989 ; SSE2-NEXT:    pxor %xmm4, %xmm2
    990 ; SSE2-NEXT:    pxor %xmm4, %xmm0
    991 ; SSE2-NEXT:    pminsw %xmm2, %xmm0
    992 ; SSE2-NEXT:    pxor %xmm4, %xmm0
    993 ; SSE2-NEXT:    pxor %xmm4, %xmm3
    994 ; SSE2-NEXT:    pxor %xmm4, %xmm1
    995 ; SSE2-NEXT:    pminsw %xmm3, %xmm1
    996 ; SSE2-NEXT:    pxor %xmm4, %xmm1
    997 ; SSE2-NEXT:    retq
    998 ;
    999 ; SSE4-LABEL: test37:
   1000 ; SSE4:       # %bb.0: # %entry
   1001 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   1002 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   1003 ; SSE4-NEXT:    retq
   1004 ;
   1005 ; AVX1-LABEL: test37:
   1006 ; AVX1:       # %bb.0: # %entry
   1007 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1008 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1009 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   1010 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1011 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1012 ; AVX1-NEXT:    retq
   1013 ;
   1014 ; AVX2-LABEL: test37:
   1015 ; AVX2:       # %bb.0: # %entry
   1016 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1017 ; AVX2-NEXT:    retq
   1018 ;
   1019 ; AVX512F-LABEL: test37:
   1020 ; AVX512F:       # %bb.0: # %entry
   1021 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1022 ; AVX512F-NEXT:    retq
   1023 entry:
   1024   %cmp = icmp ult <16 x i16> %a, %b
   1025   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1026   ret <16 x i16> %sel
   1027 }
   1028 
   1029 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
   1030 ; SSE2-LABEL: test38:
   1031 ; SSE2:       # %bb.0: # %entry
   1032 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1033 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   1034 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   1035 ; SSE2-NEXT:    pminsw %xmm2, %xmm0
   1036 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   1037 ; SSE2-NEXT:    pxor %xmm4, %xmm3
   1038 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   1039 ; SSE2-NEXT:    pminsw %xmm3, %xmm1
   1040 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   1041 ; SSE2-NEXT:    retq
   1042 ;
   1043 ; SSE4-LABEL: test38:
   1044 ; SSE4:       # %bb.0: # %entry
   1045 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   1046 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   1047 ; SSE4-NEXT:    retq
   1048 ;
   1049 ; AVX1-LABEL: test38:
   1050 ; AVX1:       # %bb.0: # %entry
   1051 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1052 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1053 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   1054 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1055 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1056 ; AVX1-NEXT:    retq
   1057 ;
   1058 ; AVX2-LABEL: test38:
   1059 ; AVX2:       # %bb.0: # %entry
   1060 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1061 ; AVX2-NEXT:    retq
   1062 ;
   1063 ; AVX512F-LABEL: test38:
   1064 ; AVX512F:       # %bb.0: # %entry
   1065 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   1066 ; AVX512F-NEXT:    retq
   1067 entry:
   1068   %cmp = icmp ule <16 x i16> %a, %b
   1069   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1070   ret <16 x i16> %sel
   1071 }
   1072 
   1073 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
   1074 ; SSE2-LABEL: test39:
   1075 ; SSE2:       # %bb.0: # %entry
   1076 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1077 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   1078 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   1079 ; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
   1080 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   1081 ; SSE2-NEXT:    pxor %xmm4, %xmm3
   1082 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   1083 ; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
   1084 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   1085 ; SSE2-NEXT:    retq
   1086 ;
   1087 ; SSE4-LABEL: test39:
   1088 ; SSE4:       # %bb.0: # %entry
   1089 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   1090 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   1091 ; SSE4-NEXT:    retq
   1092 ;
   1093 ; AVX1-LABEL: test39:
   1094 ; AVX1:       # %bb.0: # %entry
   1095 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1096 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1097 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   1098 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1099 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1100 ; AVX1-NEXT:    retq
   1101 ;
   1102 ; AVX2-LABEL: test39:
   1103 ; AVX2:       # %bb.0: # %entry
   1104 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1105 ; AVX2-NEXT:    retq
   1106 ;
   1107 ; AVX512F-LABEL: test39:
   1108 ; AVX512F:       # %bb.0: # %entry
   1109 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1110 ; AVX512F-NEXT:    retq
   1111 entry:
   1112   %cmp = icmp ugt <16 x i16> %a, %b
   1113   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1114   ret <16 x i16> %sel
   1115 }
   1116 
   1117 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
   1118 ; SSE2-LABEL: test40:
   1119 ; SSE2:       # %bb.0: # %entry
   1120 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1121 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   1122 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   1123 ; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
   1124 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   1125 ; SSE2-NEXT:    pxor %xmm4, %xmm3
   1126 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   1127 ; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
   1128 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   1129 ; SSE2-NEXT:    retq
   1130 ;
   1131 ; SSE4-LABEL: test40:
   1132 ; SSE4:       # %bb.0: # %entry
   1133 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   1134 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   1135 ; SSE4-NEXT:    retq
   1136 ;
   1137 ; AVX1-LABEL: test40:
   1138 ; AVX1:       # %bb.0: # %entry
   1139 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1140 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1141 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   1142 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1143 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1144 ; AVX1-NEXT:    retq
   1145 ;
   1146 ; AVX2-LABEL: test40:
   1147 ; AVX2:       # %bb.0: # %entry
   1148 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1149 ; AVX2-NEXT:    retq
   1150 ;
   1151 ; AVX512F-LABEL: test40:
   1152 ; AVX512F:       # %bb.0: # %entry
   1153 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   1154 ; AVX512F-NEXT:    retq
   1155 entry:
   1156   %cmp = icmp uge <16 x i16> %a, %b
   1157   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
   1158   ret <16 x i16> %sel
   1159 }
   1160 
   1161 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
   1162 ; SSE2-LABEL: test41:
   1163 ; SSE2:       # %bb.0: # %entry
   1164 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   1165 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
   1166 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1167 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1168 ; SSE2-NEXT:    por %xmm4, %xmm0
   1169 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   1170 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   1171 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1172 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   1173 ; SSE2-NEXT:    por %xmm2, %xmm1
   1174 ; SSE2-NEXT:    retq
   1175 ;
   1176 ; SSE4-LABEL: test41:
   1177 ; SSE4:       # %bb.0: # %entry
   1178 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   1179 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   1180 ; SSE4-NEXT:    retq
   1181 ;
   1182 ; AVX1-LABEL: test41:
   1183 ; AVX1:       # %bb.0: # %entry
   1184 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1185 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1186 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   1187 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1188 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1189 ; AVX1-NEXT:    retq
   1190 ;
   1191 ; AVX2-LABEL: test41:
   1192 ; AVX2:       # %bb.0: # %entry
   1193 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1194 ; AVX2-NEXT:    retq
   1195 ;
   1196 ; AVX512F-LABEL: test41:
   1197 ; AVX512F:       # %bb.0: # %entry
   1198 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1199 ; AVX512F-NEXT:    retq
   1200 entry:
   1201   %cmp = icmp slt <8 x i32> %a, %b
   1202   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1203   ret <8 x i32> %sel
   1204 }
   1205 
   1206 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
   1207 ; SSE2-LABEL: test42:
   1208 ; SSE2:       # %bb.0: # %entry
   1209 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   1210 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
   1211 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1212 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1213 ; SSE2-NEXT:    por %xmm4, %xmm0
   1214 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   1215 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   1216 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1217 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   1218 ; SSE2-NEXT:    por %xmm2, %xmm1
   1219 ; SSE2-NEXT:    retq
   1220 ;
   1221 ; SSE4-LABEL: test42:
   1222 ; SSE4:       # %bb.0: # %entry
   1223 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   1224 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   1225 ; SSE4-NEXT:    retq
   1226 ;
   1227 ; AVX1-LABEL: test42:
   1228 ; AVX1:       # %bb.0: # %entry
   1229 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1230 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1231 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   1232 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1233 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1234 ; AVX1-NEXT:    retq
   1235 ;
   1236 ; AVX2-LABEL: test42:
   1237 ; AVX2:       # %bb.0: # %entry
   1238 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1239 ; AVX2-NEXT:    retq
   1240 ;
   1241 ; AVX512F-LABEL: test42:
   1242 ; AVX512F:       # %bb.0: # %entry
   1243 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1244 ; AVX512F-NEXT:    retq
   1245 entry:
   1246   %cmp = icmp sle <8 x i32> %a, %b
   1247   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1248   ret <8 x i32> %sel
   1249 }
   1250 
   1251 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
   1252 ; SSE2-LABEL: test43:
   1253 ; SSE2:       # %bb.0: # %entry
   1254 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   1255 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   1256 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1257 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1258 ; SSE2-NEXT:    por %xmm0, %xmm4
   1259 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1260 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   1261 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1262 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   1263 ; SSE2-NEXT:    por %xmm1, %xmm2
   1264 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1265 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
   1266 ; SSE2-NEXT:    retq
   1267 ;
   1268 ; SSE4-LABEL: test43:
   1269 ; SSE4:       # %bb.0: # %entry
   1270 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   1271 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   1272 ; SSE4-NEXT:    retq
   1273 ;
   1274 ; AVX1-LABEL: test43:
   1275 ; AVX1:       # %bb.0: # %entry
   1276 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1277 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1278 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   1279 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   1280 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1281 ; AVX1-NEXT:    retq
   1282 ;
   1283 ; AVX2-LABEL: test43:
   1284 ; AVX2:       # %bb.0: # %entry
   1285 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1286 ; AVX2-NEXT:    retq
   1287 ;
   1288 ; AVX512F-LABEL: test43:
   1289 ; AVX512F:       # %bb.0: # %entry
   1290 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1291 ; AVX512F-NEXT:    retq
   1292 entry:
   1293   %cmp = icmp sgt <8 x i32> %a, %b
   1294   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1295   ret <8 x i32> %sel
   1296 }
   1297 
   1298 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
   1299 ; SSE2-LABEL: test44:
   1300 ; SSE2:       # %bb.0: # %entry
   1301 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   1302 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   1303 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1304 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1305 ; SSE2-NEXT:    por %xmm0, %xmm4
   1306 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1307 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   1308 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1309 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   1310 ; SSE2-NEXT:    por %xmm1, %xmm2
   1311 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1312 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
   1313 ; SSE2-NEXT:    retq
   1314 ;
   1315 ; SSE4-LABEL: test44:
   1316 ; SSE4:       # %bb.0: # %entry
   1317 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   1318 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   1319 ; SSE4-NEXT:    retq
   1320 ;
   1321 ; AVX1-LABEL: test44:
   1322 ; AVX1:       # %bb.0: # %entry
   1323 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1324 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1325 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   1326 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   1327 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1328 ; AVX1-NEXT:    retq
   1329 ;
   1330 ; AVX2-LABEL: test44:
   1331 ; AVX2:       # %bb.0: # %entry
   1332 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1333 ; AVX2-NEXT:    retq
   1334 ;
   1335 ; AVX512F-LABEL: test44:
   1336 ; AVX512F:       # %bb.0: # %entry
   1337 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1338 ; AVX512F-NEXT:    retq
   1339 entry:
   1340   %cmp = icmp sge <8 x i32> %a, %b
   1341   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1342   ret <8 x i32> %sel
   1343 }
   1344 
   1345 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
   1346 ; SSE2-LABEL: test45:
   1347 ; SSE2:       # %bb.0: # %entry
   1348 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   1349 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1350 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1351 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1352 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   1353 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
   1354 ; SSE2-NEXT:    pand %xmm6, %xmm0
   1355 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   1356 ; SSE2-NEXT:    por %xmm6, %xmm0
   1357 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1358 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   1359 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   1360 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   1361 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1362 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1363 ; SSE2-NEXT:    por %xmm4, %xmm1
   1364 ; SSE2-NEXT:    retq
   1365 ;
   1366 ; SSE4-LABEL: test45:
   1367 ; SSE4:       # %bb.0: # %entry
   1368 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   1369 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   1370 ; SSE4-NEXT:    retq
   1371 ;
   1372 ; AVX1-LABEL: test45:
   1373 ; AVX1:       # %bb.0: # %entry
   1374 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1375 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1376 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   1377 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   1378 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1379 ; AVX1-NEXT:    retq
   1380 ;
   1381 ; AVX2-LABEL: test45:
   1382 ; AVX2:       # %bb.0: # %entry
   1383 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1384 ; AVX2-NEXT:    retq
   1385 ;
   1386 ; AVX512F-LABEL: test45:
   1387 ; AVX512F:       # %bb.0: # %entry
   1388 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1389 ; AVX512F-NEXT:    retq
   1390 entry:
   1391   %cmp = icmp ult <8 x i32> %a, %b
   1392   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1393   ret <8 x i32> %sel
   1394 }
   1395 
   1396 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
   1397 ; SSE2-LABEL: test46:
   1398 ; SSE2:       # %bb.0: # %entry
   1399 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   1400 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   1401 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   1402 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1403 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   1404 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
   1405 ; SSE2-NEXT:    pand %xmm6, %xmm0
   1406 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   1407 ; SSE2-NEXT:    por %xmm6, %xmm0
   1408 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1409 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   1410 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   1411 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   1412 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1413 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   1414 ; SSE2-NEXT:    por %xmm4, %xmm1
   1415 ; SSE2-NEXT:    retq
   1416 ;
   1417 ; SSE4-LABEL: test46:
   1418 ; SSE4:       # %bb.0: # %entry
   1419 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   1420 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   1421 ; SSE4-NEXT:    retq
   1422 ;
   1423 ; AVX1-LABEL: test46:
   1424 ; AVX1:       # %bb.0: # %entry
   1425 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1426 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1427 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   1428 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   1429 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1430 ; AVX1-NEXT:    retq
   1431 ;
   1432 ; AVX2-LABEL: test46:
   1433 ; AVX2:       # %bb.0: # %entry
   1434 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1435 ; AVX2-NEXT:    retq
   1436 ;
   1437 ; AVX512F-LABEL: test46:
   1438 ; AVX512F:       # %bb.0: # %entry
   1439 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   1440 ; AVX512F-NEXT:    retq
   1441 entry:
   1442   %cmp = icmp ule <8 x i32> %a, %b
   1443   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1444   ret <8 x i32> %sel
   1445 }
   1446 
   1447 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
   1448 ; SSE2-LABEL: test47:
   1449 ; SSE2:       # %bb.0: # %entry
   1450 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   1451 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1452 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1453 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   1454 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   1455 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   1456 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1457 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1458 ; SSE2-NEXT:    por %xmm0, %xmm4
   1459 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   1460 ; SSE2-NEXT:    pxor %xmm5, %xmm0
   1461 ; SSE2-NEXT:    pxor %xmm1, %xmm5
   1462 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   1463 ; SSE2-NEXT:    pand %xmm5, %xmm1
   1464 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   1465 ; SSE2-NEXT:    por %xmm5, %xmm1
   1466 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1467 ; SSE2-NEXT:    retq
   1468 ;
   1469 ; SSE4-LABEL: test47:
   1470 ; SSE4:       # %bb.0: # %entry
   1471 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   1472 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   1473 ; SSE4-NEXT:    retq
   1474 ;
   1475 ; AVX1-LABEL: test47:
   1476 ; AVX1:       # %bb.0: # %entry
   1477 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1478 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1479 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   1480 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   1481 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1482 ; AVX1-NEXT:    retq
   1483 ;
   1484 ; AVX2-LABEL: test47:
   1485 ; AVX2:       # %bb.0: # %entry
   1486 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1487 ; AVX2-NEXT:    retq
   1488 ;
   1489 ; AVX512F-LABEL: test47:
   1490 ; AVX512F:       # %bb.0: # %entry
   1491 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1492 ; AVX512F-NEXT:    retq
   1493 entry:
   1494   %cmp = icmp ugt <8 x i32> %a, %b
   1495   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1496   ret <8 x i32> %sel
   1497 }
   1498 
   1499 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
   1500 ; SSE2-LABEL: test48:
   1501 ; SSE2:       # %bb.0: # %entry
   1502 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   1503 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   1504 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   1505 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   1506 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   1507 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   1508 ; SSE2-NEXT:    pand %xmm4, %xmm0
   1509 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   1510 ; SSE2-NEXT:    por %xmm0, %xmm4
   1511 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   1512 ; SSE2-NEXT:    pxor %xmm5, %xmm0
   1513 ; SSE2-NEXT:    pxor %xmm1, %xmm5
   1514 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   1515 ; SSE2-NEXT:    pand %xmm5, %xmm1
   1516 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   1517 ; SSE2-NEXT:    por %xmm5, %xmm1
   1518 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1519 ; SSE2-NEXT:    retq
   1520 ;
   1521 ; SSE4-LABEL: test48:
   1522 ; SSE4:       # %bb.0: # %entry
   1523 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   1524 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   1525 ; SSE4-NEXT:    retq
   1526 ;
   1527 ; AVX1-LABEL: test48:
   1528 ; AVX1:       # %bb.0: # %entry
   1529 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1530 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1531 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   1532 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   1533 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1534 ; AVX1-NEXT:    retq
   1535 ;
   1536 ; AVX2-LABEL: test48:
   1537 ; AVX2:       # %bb.0: # %entry
   1538 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1539 ; AVX2-NEXT:    retq
   1540 ;
   1541 ; AVX512F-LABEL: test48:
   1542 ; AVX512F:       # %bb.0: # %entry
   1543 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   1544 ; AVX512F-NEXT:    retq
   1545 entry:
   1546   %cmp = icmp uge <8 x i32> %a, %b
   1547   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
   1548   ret <8 x i32> %sel
   1549 }
   1550 
   1551 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
   1552 ; SSE2-LABEL: test49:
   1553 ; SSE2:       # %bb.0: # %entry
   1554 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1555 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
   1556 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1557 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1558 ; SSE2-NEXT:    por %xmm0, %xmm2
   1559 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1560 ; SSE2-NEXT:    retq
   1561 ;
   1562 ; SSE4-LABEL: test49:
   1563 ; SSE4:       # %bb.0: # %entry
   1564 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
   1565 ; SSE4-NEXT:    retq
   1566 ;
   1567 ; AVX-LABEL: test49:
   1568 ; AVX:       # %bb.0: # %entry
   1569 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   1570 ; AVX-NEXT:    retq
   1571 entry:
   1572   %cmp = icmp slt <16 x i8> %a, %b
   1573   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1574   ret <16 x i8> %sel
   1575 }
   1576 
   1577 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
   1578 ; SSE2-LABEL: test50:
   1579 ; SSE2:       # %bb.0: # %entry
   1580 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1581 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
   1582 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1583 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1584 ; SSE2-NEXT:    por %xmm0, %xmm2
   1585 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1586 ; SSE2-NEXT:    retq
   1587 ;
   1588 ; SSE4-LABEL: test50:
   1589 ; SSE4:       # %bb.0: # %entry
   1590 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
   1591 ; SSE4-NEXT:    retq
   1592 ;
   1593 ; AVX-LABEL: test50:
   1594 ; AVX:       # %bb.0: # %entry
   1595 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   1596 ; AVX-NEXT:    retq
   1597 entry:
   1598   %cmp = icmp sle <16 x i8> %a, %b
   1599   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1600   ret <16 x i8> %sel
   1601 }
   1602 
   1603 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
   1604 ; SSE2-LABEL: test51:
   1605 ; SSE2:       # %bb.0: # %entry
   1606 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1607 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
   1608 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1609 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1610 ; SSE2-NEXT:    por %xmm2, %xmm0
   1611 ; SSE2-NEXT:    retq
   1612 ;
   1613 ; SSE4-LABEL: test51:
   1614 ; SSE4:       # %bb.0: # %entry
   1615 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
   1616 ; SSE4-NEXT:    retq
   1617 ;
   1618 ; AVX-LABEL: test51:
   1619 ; AVX:       # %bb.0: # %entry
   1620 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1621 ; AVX-NEXT:    retq
   1622 entry:
   1623   %cmp = icmp sgt <16 x i8> %a, %b
   1624   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1625   ret <16 x i8> %sel
   1626 }
   1627 
   1628 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
   1629 ; SSE2-LABEL: test52:
   1630 ; SSE2:       # %bb.0: # %entry
   1631 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1632 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
   1633 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1634 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1635 ; SSE2-NEXT:    por %xmm2, %xmm0
   1636 ; SSE2-NEXT:    retq
   1637 ;
   1638 ; SSE4-LABEL: test52:
   1639 ; SSE4:       # %bb.0: # %entry
   1640 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
   1641 ; SSE4-NEXT:    retq
   1642 ;
   1643 ; AVX-LABEL: test52:
   1644 ; AVX:       # %bb.0: # %entry
   1645 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   1646 ; AVX-NEXT:    retq
   1647 entry:
   1648   %cmp = icmp sge <16 x i8> %a, %b
   1649   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1650   ret <16 x i8> %sel
   1651 }
   1652 
   1653 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
   1654 ; SSE-LABEL: test53:
   1655 ; SSE:       # %bb.0: # %entry
   1656 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
   1657 ; SSE-NEXT:    retq
   1658 ;
   1659 ; AVX-LABEL: test53:
   1660 ; AVX:       # %bb.0: # %entry
   1661 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   1662 ; AVX-NEXT:    retq
   1663 entry:
   1664   %cmp = icmp ult <16 x i8> %a, %b
   1665   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1666   ret <16 x i8> %sel
   1667 }
   1668 
   1669 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
   1670 ; SSE-LABEL: test54:
   1671 ; SSE:       # %bb.0: # %entry
   1672 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
   1673 ; SSE-NEXT:    retq
   1674 ;
   1675 ; AVX-LABEL: test54:
   1676 ; AVX:       # %bb.0: # %entry
   1677 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   1678 ; AVX-NEXT:    retq
   1679 entry:
   1680   %cmp = icmp ule <16 x i8> %a, %b
   1681   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1682   ret <16 x i8> %sel
   1683 }
   1684 
   1685 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
   1686 ; SSE-LABEL: test55:
   1687 ; SSE:       # %bb.0: # %entry
   1688 ; SSE-NEXT:    pminub %xmm1, %xmm0
   1689 ; SSE-NEXT:    retq
   1690 ;
   1691 ; AVX-LABEL: test55:
   1692 ; AVX:       # %bb.0: # %entry
   1693 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   1694 ; AVX-NEXT:    retq
   1695 entry:
   1696   %cmp = icmp ugt <16 x i8> %a, %b
   1697   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1698   ret <16 x i8> %sel
   1699 }
   1700 
   1701 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
   1702 ; SSE-LABEL: test56:
   1703 ; SSE:       # %bb.0: # %entry
   1704 ; SSE-NEXT:    pminub %xmm1, %xmm0
   1705 ; SSE-NEXT:    retq
   1706 ;
   1707 ; AVX-LABEL: test56:
   1708 ; AVX:       # %bb.0: # %entry
   1709 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   1710 ; AVX-NEXT:    retq
   1711 entry:
   1712   %cmp = icmp uge <16 x i8> %a, %b
   1713   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
   1714   ret <16 x i8> %sel
   1715 }
   1716 
   1717 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
   1718 ; SSE-LABEL: test57:
   1719 ; SSE:       # %bb.0: # %entry
   1720 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
   1721 ; SSE-NEXT:    retq
   1722 ;
   1723 ; AVX-LABEL: test57:
   1724 ; AVX:       # %bb.0: # %entry
   1725 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   1726 ; AVX-NEXT:    retq
   1727 entry:
   1728   %cmp = icmp slt <8 x i16> %a, %b
   1729   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1730   ret <8 x i16> %sel
   1731 }
   1732 
   1733 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
   1734 ; SSE-LABEL: test58:
   1735 ; SSE:       # %bb.0: # %entry
   1736 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
   1737 ; SSE-NEXT:    retq
   1738 ;
   1739 ; AVX-LABEL: test58:
   1740 ; AVX:       # %bb.0: # %entry
   1741 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   1742 ; AVX-NEXT:    retq
   1743 entry:
   1744   %cmp = icmp sle <8 x i16> %a, %b
   1745   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1746   ret <8 x i16> %sel
   1747 }
   1748 
   1749 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
   1750 ; SSE-LABEL: test59:
   1751 ; SSE:       # %bb.0: # %entry
   1752 ; SSE-NEXT:    pminsw %xmm1, %xmm0
   1753 ; SSE-NEXT:    retq
   1754 ;
   1755 ; AVX-LABEL: test59:
   1756 ; AVX:       # %bb.0: # %entry
   1757 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1758 ; AVX-NEXT:    retq
   1759 entry:
   1760   %cmp = icmp sgt <8 x i16> %a, %b
   1761   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1762   ret <8 x i16> %sel
   1763 }
   1764 
   1765 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
   1766 ; SSE-LABEL: test60:
   1767 ; SSE:       # %bb.0: # %entry
   1768 ; SSE-NEXT:    pminsw %xmm1, %xmm0
   1769 ; SSE-NEXT:    retq
   1770 ;
   1771 ; AVX-LABEL: test60:
   1772 ; AVX:       # %bb.0: # %entry
   1773 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   1774 ; AVX-NEXT:    retq
   1775 entry:
   1776   %cmp = icmp sge <8 x i16> %a, %b
   1777   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1778   ret <8 x i16> %sel
   1779 }
   1780 
   1781 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
   1782 ; SSE2-LABEL: test61:
   1783 ; SSE2:       # %bb.0: # %entry
   1784 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1785 ; SSE2-NEXT:    pxor %xmm2, %xmm1
   1786 ; SSE2-NEXT:    pxor %xmm2, %xmm0
   1787 ; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
   1788 ; SSE2-NEXT:    pxor %xmm2, %xmm0
   1789 ; SSE2-NEXT:    retq
   1790 ;
   1791 ; SSE4-LABEL: test61:
   1792 ; SSE4:       # %bb.0: # %entry
   1793 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
   1794 ; SSE4-NEXT:    retq
   1795 ;
   1796 ; AVX-LABEL: test61:
   1797 ; AVX:       # %bb.0: # %entry
   1798 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1799 ; AVX-NEXT:    retq
   1800 entry:
   1801   %cmp = icmp ult <8 x i16> %a, %b
   1802   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1803   ret <8 x i16> %sel
   1804 }
   1805 
   1806 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
   1807 ; SSE2-LABEL: test62:
   1808 ; SSE2:       # %bb.0: # %entry
   1809 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1810 ; SSE2-NEXT:    pxor %xmm2, %xmm1
   1811 ; SSE2-NEXT:    pxor %xmm2, %xmm0
   1812 ; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
   1813 ; SSE2-NEXT:    pxor %xmm2, %xmm0
   1814 ; SSE2-NEXT:    retq
   1815 ;
   1816 ; SSE4-LABEL: test62:
   1817 ; SSE4:       # %bb.0: # %entry
   1818 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
   1819 ; SSE4-NEXT:    retq
   1820 ;
   1821 ; AVX-LABEL: test62:
   1822 ; AVX:       # %bb.0: # %entry
   1823 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   1824 ; AVX-NEXT:    retq
   1825 entry:
   1826   %cmp = icmp ule <8 x i16> %a, %b
   1827   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1828   ret <8 x i16> %sel
   1829 }
   1830 
   1831 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
   1832 ; SSE2-LABEL: test63:
   1833 ; SSE2:       # %bb.0: # %entry
   1834 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1835 ; SSE2-NEXT:    pxor %xmm2, %xmm1
   1836 ; SSE2-NEXT:    pxor %xmm2, %xmm0
   1837 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
   1838 ; SSE2-NEXT:    pxor %xmm2, %xmm0
   1839 ; SSE2-NEXT:    retq
   1840 ;
   1841 ; SSE4-LABEL: test63:
   1842 ; SSE4:       # %bb.0: # %entry
   1843 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
   1844 ; SSE4-NEXT:    retq
   1845 ;
   1846 ; AVX-LABEL: test63:
   1847 ; AVX:       # %bb.0: # %entry
   1848 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1849 ; AVX-NEXT:    retq
   1850 entry:
   1851   %cmp = icmp ugt <8 x i16> %a, %b
   1852   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1853   ret <8 x i16> %sel
   1854 }
   1855 
   1856 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
   1857 ; SSE2-LABEL: test64:
   1858 ; SSE2:       # %bb.0: # %entry
   1859 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
   1860 ; SSE2-NEXT:    pxor %xmm2, %xmm1
   1861 ; SSE2-NEXT:    pxor %xmm2, %xmm0
   1862 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
   1863 ; SSE2-NEXT:    pxor %xmm2, %xmm0
   1864 ; SSE2-NEXT:    retq
   1865 ;
   1866 ; SSE4-LABEL: test64:
   1867 ; SSE4:       # %bb.0: # %entry
   1868 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
   1869 ; SSE4-NEXT:    retq
   1870 ;
   1871 ; AVX-LABEL: test64:
   1872 ; AVX:       # %bb.0: # %entry
   1873 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   1874 ; AVX-NEXT:    retq
   1875 entry:
   1876   %cmp = icmp uge <8 x i16> %a, %b
   1877   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
   1878   ret <8 x i16> %sel
   1879 }
   1880 
   1881 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
   1882 ; SSE2-LABEL: test65:
   1883 ; SSE2:       # %bb.0: # %entry
   1884 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1885 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   1886 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1887 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1888 ; SSE2-NEXT:    por %xmm0, %xmm2
   1889 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1890 ; SSE2-NEXT:    retq
   1891 ;
   1892 ; SSE4-LABEL: test65:
   1893 ; SSE4:       # %bb.0: # %entry
   1894 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
   1895 ; SSE4-NEXT:    retq
   1896 ;
   1897 ; AVX-LABEL: test65:
   1898 ; AVX:       # %bb.0: # %entry
   1899 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   1900 ; AVX-NEXT:    retq
   1901 entry:
   1902   %cmp = icmp slt <4 x i32> %a, %b
   1903   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   1904   ret <4 x i32> %sel
   1905 }
   1906 
   1907 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
   1908 ; SSE2-LABEL: test66:
   1909 ; SSE2:       # %bb.0: # %entry
   1910 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1911 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   1912 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1913 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1914 ; SSE2-NEXT:    por %xmm0, %xmm2
   1915 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   1916 ; SSE2-NEXT:    retq
   1917 ;
   1918 ; SSE4-LABEL: test66:
   1919 ; SSE4:       # %bb.0: # %entry
   1920 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
   1921 ; SSE4-NEXT:    retq
   1922 ;
   1923 ; AVX-LABEL: test66:
   1924 ; AVX:       # %bb.0: # %entry
   1925 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   1926 ; AVX-NEXT:    retq
   1927 entry:
   1928   %cmp = icmp sle <4 x i32> %a, %b
   1929   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   1930   ret <4 x i32> %sel
   1931 }
   1932 
   1933 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
   1934 ; SSE2-LABEL: test67:
   1935 ; SSE2:       # %bb.0: # %entry
   1936 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1937 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
   1938 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1939 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1940 ; SSE2-NEXT:    por %xmm2, %xmm0
   1941 ; SSE2-NEXT:    retq
   1942 ;
   1943 ; SSE4-LABEL: test67:
   1944 ; SSE4:       # %bb.0: # %entry
   1945 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
   1946 ; SSE4-NEXT:    retq
   1947 ;
   1948 ; AVX-LABEL: test67:
   1949 ; AVX:       # %bb.0: # %entry
   1950 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1951 ; AVX-NEXT:    retq
   1952 entry:
   1953   %cmp = icmp sgt <4 x i32> %a, %b
   1954   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   1955   ret <4 x i32> %sel
   1956 }
   1957 
   1958 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
   1959 ; SSE2-LABEL: test68:
   1960 ; SSE2:       # %bb.0: # %entry
   1961 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1962 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
   1963 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1964 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1965 ; SSE2-NEXT:    por %xmm2, %xmm0
   1966 ; SSE2-NEXT:    retq
   1967 ;
   1968 ; SSE4-LABEL: test68:
   1969 ; SSE4:       # %bb.0: # %entry
   1970 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
   1971 ; SSE4-NEXT:    retq
   1972 ;
   1973 ; AVX-LABEL: test68:
   1974 ; AVX:       # %bb.0: # %entry
   1975 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   1976 ; AVX-NEXT:    retq
   1977 entry:
   1978   %cmp = icmp sge <4 x i32> %a, %b
   1979   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   1980   ret <4 x i32> %sel
   1981 }
   1982 
   1983 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
   1984 ; SSE2-LABEL: test69:
   1985 ; SSE2:       # %bb.0: # %entry
   1986 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   1987 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1988 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   1989 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   1990 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   1991 ; SSE2-NEXT:    pand %xmm2, %xmm0
   1992 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   1993 ; SSE2-NEXT:    por %xmm2, %xmm0
   1994 ; SSE2-NEXT:    retq
   1995 ;
   1996 ; SSE4-LABEL: test69:
   1997 ; SSE4:       # %bb.0: # %entry
   1998 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
   1999 ; SSE4-NEXT:    retq
   2000 ;
   2001 ; AVX-LABEL: test69:
   2002 ; AVX:       # %bb.0: # %entry
   2003 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   2004 ; AVX-NEXT:    retq
   2005 entry:
   2006   %cmp = icmp ult <4 x i32> %a, %b
   2007   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2008   ret <4 x i32> %sel
   2009 }
   2010 
   2011 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
   2012 ; SSE2-LABEL: test70:
   2013 ; SSE2:       # %bb.0: # %entry
   2014 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   2015 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   2016 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   2017 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   2018 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   2019 ; SSE2-NEXT:    pand %xmm2, %xmm0
   2020 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   2021 ; SSE2-NEXT:    por %xmm2, %xmm0
   2022 ; SSE2-NEXT:    retq
   2023 ;
   2024 ; SSE4-LABEL: test70:
   2025 ; SSE4:       # %bb.0: # %entry
   2026 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
   2027 ; SSE4-NEXT:    retq
   2028 ;
   2029 ; AVX-LABEL: test70:
   2030 ; AVX:       # %bb.0: # %entry
   2031 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   2032 ; AVX-NEXT:    retq
   2033 entry:
   2034   %cmp = icmp ule <4 x i32> %a, %b
   2035   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2036   ret <4 x i32> %sel
   2037 }
   2038 
   2039 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
   2040 ; SSE2-LABEL: test71:
   2041 ; SSE2:       # %bb.0: # %entry
   2042 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   2043 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   2044 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   2045 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   2046 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   2047 ; SSE2-NEXT:    pand %xmm2, %xmm0
   2048 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   2049 ; SSE2-NEXT:    por %xmm2, %xmm0
   2050 ; SSE2-NEXT:    retq
   2051 ;
   2052 ; SSE4-LABEL: test71:
   2053 ; SSE4:       # %bb.0: # %entry
   2054 ; SSE4-NEXT:    pminud %xmm1, %xmm0
   2055 ; SSE4-NEXT:    retq
   2056 ;
   2057 ; AVX-LABEL: test71:
   2058 ; AVX:       # %bb.0: # %entry
   2059 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   2060 ; AVX-NEXT:    retq
   2061 entry:
   2062   %cmp = icmp ugt <4 x i32> %a, %b
   2063   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2064   ret <4 x i32> %sel
   2065 }
   2066 
   2067 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
   2068 ; SSE2-LABEL: test72:
   2069 ; SSE2:       # %bb.0: # %entry
   2070 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   2071 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   2072 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   2073 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   2074 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   2075 ; SSE2-NEXT:    pand %xmm2, %xmm0
   2076 ; SSE2-NEXT:    pandn %xmm1, %xmm2
   2077 ; SSE2-NEXT:    por %xmm2, %xmm0
   2078 ; SSE2-NEXT:    retq
   2079 ;
   2080 ; SSE4-LABEL: test72:
   2081 ; SSE4:       # %bb.0: # %entry
   2082 ; SSE4-NEXT:    pminud %xmm1, %xmm0
   2083 ; SSE4-NEXT:    retq
   2084 ;
   2085 ; AVX-LABEL: test72:
   2086 ; AVX:       # %bb.0: # %entry
   2087 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   2088 ; AVX-NEXT:    retq
   2089 entry:
   2090   %cmp = icmp uge <4 x i32> %a, %b
   2091   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
   2092   ret <4 x i32> %sel
   2093 }
   2094 
   2095 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
   2096 ; SSE2-LABEL: test73:
   2097 ; SSE2:       # %bb.0: # %entry
   2098 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   2099 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
   2100 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2101 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2102 ; SSE2-NEXT:    por %xmm0, %xmm4
   2103 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   2104 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
   2105 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2106 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   2107 ; SSE2-NEXT:    por %xmm1, %xmm2
   2108 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2109 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
   2110 ; SSE2-NEXT:    retq
   2111 ;
   2112 ; SSE4-LABEL: test73:
   2113 ; SSE4:       # %bb.0: # %entry
   2114 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
   2115 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
   2116 ; SSE4-NEXT:    retq
   2117 ;
   2118 ; AVX1-LABEL: test73:
   2119 ; AVX1:       # %bb.0: # %entry
   2120 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2121 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2122 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
   2123 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   2124 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2125 ; AVX1-NEXT:    retq
   2126 ;
   2127 ; AVX2-LABEL: test73:
   2128 ; AVX2:       # %bb.0: # %entry
   2129 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2130 ; AVX2-NEXT:    retq
   2131 ;
   2132 ; AVX512F-LABEL: test73:
   2133 ; AVX512F:       # %bb.0: # %entry
   2134 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2135 ; AVX512F-NEXT:    retq
   2136 entry:
   2137   %cmp = icmp slt <32 x i8> %a, %b
   2138   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2139   ret <32 x i8> %sel
   2140 }
   2141 
   2142 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
   2143 ; SSE2-LABEL: test74:
   2144 ; SSE2:       # %bb.0: # %entry
   2145 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   2146 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
   2147 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2148 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2149 ; SSE2-NEXT:    por %xmm0, %xmm4
   2150 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   2151 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
   2152 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2153 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   2154 ; SSE2-NEXT:    por %xmm1, %xmm2
   2155 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2156 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
   2157 ; SSE2-NEXT:    retq
   2158 ;
   2159 ; SSE4-LABEL: test74:
   2160 ; SSE4:       # %bb.0: # %entry
   2161 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
   2162 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
   2163 ; SSE4-NEXT:    retq
   2164 ;
   2165 ; AVX1-LABEL: test74:
   2166 ; AVX1:       # %bb.0: # %entry
   2167 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2168 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2169 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
   2170 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
   2171 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2172 ; AVX1-NEXT:    retq
   2173 ;
   2174 ; AVX2-LABEL: test74:
   2175 ; AVX2:       # %bb.0: # %entry
   2176 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2177 ; AVX2-NEXT:    retq
   2178 ;
   2179 ; AVX512F-LABEL: test74:
   2180 ; AVX512F:       # %bb.0: # %entry
   2181 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
   2182 ; AVX512F-NEXT:    retq
   2183 entry:
   2184   %cmp = icmp sle <32 x i8> %a, %b
   2185   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2186   ret <32 x i8> %sel
   2187 }
   2188 
   2189 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
   2190 ; SSE2-LABEL: test75:
   2191 ; SSE2:       # %bb.0: # %entry
   2192 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   2193 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
   2194 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2195 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2196 ; SSE2-NEXT:    por %xmm4, %xmm0
   2197 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   2198 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
   2199 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2200 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   2201 ; SSE2-NEXT:    por %xmm2, %xmm1
   2202 ; SSE2-NEXT:    retq
   2203 ;
   2204 ; SSE4-LABEL: test75:
   2205 ; SSE4:       # %bb.0: # %entry
   2206 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
   2207 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
   2208 ; SSE4-NEXT:    retq
   2209 ;
   2210 ; AVX1-LABEL: test75:
   2211 ; AVX1:       # %bb.0: # %entry
   2212 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2213 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2214 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
   2215 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   2216 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2217 ; AVX1-NEXT:    retq
   2218 ;
   2219 ; AVX2-LABEL: test75:
   2220 ; AVX2:       # %bb.0: # %entry
   2221 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2222 ; AVX2-NEXT:    retq
   2223 ;
   2224 ; AVX512F-LABEL: test75:
   2225 ; AVX512F:       # %bb.0: # %entry
   2226 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2227 ; AVX512F-NEXT:    retq
   2228 entry:
   2229   %cmp = icmp sgt <32 x i8> %a, %b
   2230   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2231   ret <32 x i8> %sel
   2232 }
   2233 
   2234 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
   2235 ; SSE2-LABEL: test76:
   2236 ; SSE2:       # %bb.0: # %entry
   2237 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   2238 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
   2239 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2240 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2241 ; SSE2-NEXT:    por %xmm4, %xmm0
   2242 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   2243 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
   2244 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2245 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   2246 ; SSE2-NEXT:    por %xmm2, %xmm1
   2247 ; SSE2-NEXT:    retq
   2248 ;
   2249 ; SSE4-LABEL: test76:
   2250 ; SSE4:       # %bb.0: # %entry
   2251 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
   2252 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
   2253 ; SSE4-NEXT:    retq
   2254 ;
   2255 ; AVX1-LABEL: test76:
   2256 ; AVX1:       # %bb.0: # %entry
   2257 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2258 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2259 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
   2260 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
   2261 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2262 ; AVX1-NEXT:    retq
   2263 ;
   2264 ; AVX2-LABEL: test76:
   2265 ; AVX2:       # %bb.0: # %entry
   2266 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2267 ; AVX2-NEXT:    retq
   2268 ;
   2269 ; AVX512F-LABEL: test76:
   2270 ; AVX512F:       # %bb.0: # %entry
   2271 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
   2272 ; AVX512F-NEXT:    retq
   2273 entry:
   2274   %cmp = icmp sge <32 x i8> %a, %b
   2275   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2276   ret <32 x i8> %sel
   2277 }
   2278 
   2279 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
   2280 ; SSE-LABEL: test77:
   2281 ; SSE:       # %bb.0: # %entry
   2282 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
   2283 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
   2284 ; SSE-NEXT:    retq
   2285 ;
   2286 ; AVX1-LABEL: test77:
   2287 ; AVX1:       # %bb.0: # %entry
   2288 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2289 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2290 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
   2291 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   2292 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2293 ; AVX1-NEXT:    retq
   2294 ;
   2295 ; AVX2-LABEL: test77:
   2296 ; AVX2:       # %bb.0: # %entry
   2297 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2298 ; AVX2-NEXT:    retq
   2299 ;
   2300 ; AVX512F-LABEL: test77:
   2301 ; AVX512F:       # %bb.0: # %entry
   2302 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2303 ; AVX512F-NEXT:    retq
   2304 entry:
   2305   %cmp = icmp ult <32 x i8> %a, %b
   2306   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2307   ret <32 x i8> %sel
   2308 }
   2309 
   2310 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
   2311 ; SSE-LABEL: test78:
   2312 ; SSE:       # %bb.0: # %entry
   2313 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
   2314 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
   2315 ; SSE-NEXT:    retq
   2316 ;
   2317 ; AVX1-LABEL: test78:
   2318 ; AVX1:       # %bb.0: # %entry
   2319 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2320 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2321 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
   2322 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
   2323 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2324 ; AVX1-NEXT:    retq
   2325 ;
   2326 ; AVX2-LABEL: test78:
   2327 ; AVX2:       # %bb.0: # %entry
   2328 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2329 ; AVX2-NEXT:    retq
   2330 ;
   2331 ; AVX512F-LABEL: test78:
   2332 ; AVX512F:       # %bb.0: # %entry
   2333 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
   2334 ; AVX512F-NEXT:    retq
   2335 entry:
   2336   %cmp = icmp ule <32 x i8> %a, %b
   2337   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2338   ret <32 x i8> %sel
   2339 }
   2340 
   2341 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
   2342 ; SSE-LABEL: test79:
   2343 ; SSE:       # %bb.0: # %entry
   2344 ; SSE-NEXT:    pminub %xmm2, %xmm0
   2345 ; SSE-NEXT:    pminub %xmm3, %xmm1
   2346 ; SSE-NEXT:    retq
   2347 ;
   2348 ; AVX1-LABEL: test79:
   2349 ; AVX1:       # %bb.0: # %entry
   2350 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2351 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2352 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
   2353 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   2354 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2355 ; AVX1-NEXT:    retq
   2356 ;
   2357 ; AVX2-LABEL: test79:
   2358 ; AVX2:       # %bb.0: # %entry
   2359 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2360 ; AVX2-NEXT:    retq
   2361 ;
   2362 ; AVX512F-LABEL: test79:
   2363 ; AVX512F:       # %bb.0: # %entry
   2364 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2365 ; AVX512F-NEXT:    retq
   2366 entry:
   2367   %cmp = icmp ugt <32 x i8> %a, %b
   2368   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2369   ret <32 x i8> %sel
   2370 }
   2371 
   2372 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
   2373 ; SSE-LABEL: test80:
   2374 ; SSE:       # %bb.0: # %entry
   2375 ; SSE-NEXT:    pminub %xmm2, %xmm0
   2376 ; SSE-NEXT:    pminub %xmm3, %xmm1
   2377 ; SSE-NEXT:    retq
   2378 ;
   2379 ; AVX1-LABEL: test80:
   2380 ; AVX1:       # %bb.0: # %entry
   2381 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2382 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2383 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
   2384 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
   2385 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2386 ; AVX1-NEXT:    retq
   2387 ;
   2388 ; AVX2-LABEL: test80:
   2389 ; AVX2:       # %bb.0: # %entry
   2390 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2391 ; AVX2-NEXT:    retq
   2392 ;
   2393 ; AVX512F-LABEL: test80:
   2394 ; AVX512F:       # %bb.0: # %entry
   2395 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
   2396 ; AVX512F-NEXT:    retq
   2397 entry:
   2398   %cmp = icmp uge <32 x i8> %a, %b
   2399   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
   2400   ret <32 x i8> %sel
   2401 }
   2402 
   2403 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
   2404 ; SSE-LABEL: test81:
   2405 ; SSE:       # %bb.0: # %entry
   2406 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
   2407 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
   2408 ; SSE-NEXT:    retq
   2409 ;
   2410 ; AVX1-LABEL: test81:
   2411 ; AVX1:       # %bb.0: # %entry
   2412 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2413 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2414 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
   2415 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   2416 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2417 ; AVX1-NEXT:    retq
   2418 ;
   2419 ; AVX2-LABEL: test81:
   2420 ; AVX2:       # %bb.0: # %entry
   2421 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2422 ; AVX2-NEXT:    retq
   2423 ;
   2424 ; AVX512F-LABEL: test81:
   2425 ; AVX512F:       # %bb.0: # %entry
   2426 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2427 ; AVX512F-NEXT:    retq
   2428 entry:
   2429   %cmp = icmp slt <16 x i16> %a, %b
   2430   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2431   ret <16 x i16> %sel
   2432 }
   2433 
   2434 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
   2435 ; SSE-LABEL: test82:
   2436 ; SSE:       # %bb.0: # %entry
   2437 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
   2438 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
   2439 ; SSE-NEXT:    retq
   2440 ;
   2441 ; AVX1-LABEL: test82:
   2442 ; AVX1:       # %bb.0: # %entry
   2443 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2444 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2445 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
   2446 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
   2447 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2448 ; AVX1-NEXT:    retq
   2449 ;
   2450 ; AVX2-LABEL: test82:
   2451 ; AVX2:       # %bb.0: # %entry
   2452 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2453 ; AVX2-NEXT:    retq
   2454 ;
   2455 ; AVX512F-LABEL: test82:
   2456 ; AVX512F:       # %bb.0: # %entry
   2457 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   2458 ; AVX512F-NEXT:    retq
   2459 entry:
   2460   %cmp = icmp sle <16 x i16> %a, %b
   2461   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2462   ret <16 x i16> %sel
   2463 }
   2464 
   2465 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
   2466 ; SSE-LABEL: test83:
   2467 ; SSE:       # %bb.0: # %entry
   2468 ; SSE-NEXT:    pminsw %xmm2, %xmm0
   2469 ; SSE-NEXT:    pminsw %xmm3, %xmm1
   2470 ; SSE-NEXT:    retq
   2471 ;
   2472 ; AVX1-LABEL: test83:
   2473 ; AVX1:       # %bb.0: # %entry
   2474 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2475 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2476 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
   2477 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   2478 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2479 ; AVX1-NEXT:    retq
   2480 ;
   2481 ; AVX2-LABEL: test83:
   2482 ; AVX2:       # %bb.0: # %entry
   2483 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2484 ; AVX2-NEXT:    retq
   2485 ;
   2486 ; AVX512F-LABEL: test83:
   2487 ; AVX512F:       # %bb.0: # %entry
   2488 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2489 ; AVX512F-NEXT:    retq
   2490 entry:
   2491   %cmp = icmp sgt <16 x i16> %a, %b
   2492   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2493   ret <16 x i16> %sel
   2494 }
   2495 
   2496 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
   2497 ; SSE-LABEL: test84:
   2498 ; SSE:       # %bb.0: # %entry
   2499 ; SSE-NEXT:    pminsw %xmm2, %xmm0
   2500 ; SSE-NEXT:    pminsw %xmm3, %xmm1
   2501 ; SSE-NEXT:    retq
   2502 ;
   2503 ; AVX1-LABEL: test84:
   2504 ; AVX1:       # %bb.0: # %entry
   2505 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2506 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2507 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
   2508 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
   2509 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2510 ; AVX1-NEXT:    retq
   2511 ;
   2512 ; AVX2-LABEL: test84:
   2513 ; AVX2:       # %bb.0: # %entry
   2514 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2515 ; AVX2-NEXT:    retq
   2516 ;
   2517 ; AVX512F-LABEL: test84:
   2518 ; AVX512F:       # %bb.0: # %entry
   2519 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
   2520 ; AVX512F-NEXT:    retq
   2521 entry:
   2522   %cmp = icmp sge <16 x i16> %a, %b
   2523   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2524   ret <16 x i16> %sel
   2525 }
   2526 
   2527 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
   2528 ; SSE2-LABEL: test85:
   2529 ; SSE2:       # %bb.0: # %entry
   2530 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   2531 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   2532 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   2533 ; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
   2534 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   2535 ; SSE2-NEXT:    pxor %xmm4, %xmm3
   2536 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   2537 ; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
   2538 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   2539 ; SSE2-NEXT:    retq
   2540 ;
   2541 ; SSE4-LABEL: test85:
   2542 ; SSE4:       # %bb.0: # %entry
   2543 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   2544 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   2545 ; SSE4-NEXT:    retq
   2546 ;
   2547 ; AVX1-LABEL: test85:
   2548 ; AVX1:       # %bb.0: # %entry
   2549 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2550 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2551 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   2552 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   2553 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2554 ; AVX1-NEXT:    retq
   2555 ;
   2556 ; AVX2-LABEL: test85:
   2557 ; AVX2:       # %bb.0: # %entry
   2558 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2559 ; AVX2-NEXT:    retq
   2560 ;
   2561 ; AVX512F-LABEL: test85:
   2562 ; AVX512F:       # %bb.0: # %entry
   2563 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2564 ; AVX512F-NEXT:    retq
   2565 entry:
   2566   %cmp = icmp ult <16 x i16> %a, %b
   2567   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2568   ret <16 x i16> %sel
   2569 }
   2570 
   2571 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
   2572 ; SSE2-LABEL: test86:
   2573 ; SSE2:       # %bb.0: # %entry
   2574 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   2575 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   2576 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   2577 ; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
   2578 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   2579 ; SSE2-NEXT:    pxor %xmm4, %xmm3
   2580 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   2581 ; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
   2582 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   2583 ; SSE2-NEXT:    retq
   2584 ;
   2585 ; SSE4-LABEL: test86:
   2586 ; SSE4:       # %bb.0: # %entry
   2587 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
   2588 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
   2589 ; SSE4-NEXT:    retq
   2590 ;
   2591 ; AVX1-LABEL: test86:
   2592 ; AVX1:       # %bb.0: # %entry
   2593 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2594 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2595 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
   2596 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
   2597 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2598 ; AVX1-NEXT:    retq
   2599 ;
   2600 ; AVX2-LABEL: test86:
   2601 ; AVX2:       # %bb.0: # %entry
   2602 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2603 ; AVX2-NEXT:    retq
   2604 ;
   2605 ; AVX512F-LABEL: test86:
   2606 ; AVX512F:       # %bb.0: # %entry
   2607 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
   2608 ; AVX512F-NEXT:    retq
   2609 entry:
   2610   %cmp = icmp ule <16 x i16> %a, %b
   2611   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2612   ret <16 x i16> %sel
   2613 }
   2614 
   2615 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
   2616 ; SSE2-LABEL: test87:
   2617 ; SSE2:       # %bb.0: # %entry
   2618 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   2619 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   2620 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   2621 ; SSE2-NEXT:    pminsw %xmm2, %xmm0
   2622 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   2623 ; SSE2-NEXT:    pxor %xmm4, %xmm3
   2624 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   2625 ; SSE2-NEXT:    pminsw %xmm3, %xmm1
   2626 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   2627 ; SSE2-NEXT:    retq
   2628 ;
   2629 ; SSE4-LABEL: test87:
   2630 ; SSE4:       # %bb.0: # %entry
   2631 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   2632 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   2633 ; SSE4-NEXT:    retq
   2634 ;
   2635 ; AVX1-LABEL: test87:
   2636 ; AVX1:       # %bb.0: # %entry
   2637 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2638 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2639 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   2640 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   2641 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2642 ; AVX1-NEXT:    retq
   2643 ;
   2644 ; AVX2-LABEL: test87:
   2645 ; AVX2:       # %bb.0: # %entry
   2646 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2647 ; AVX2-NEXT:    retq
   2648 ;
   2649 ; AVX512F-LABEL: test87:
   2650 ; AVX512F:       # %bb.0: # %entry
   2651 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2652 ; AVX512F-NEXT:    retq
   2653 entry:
   2654   %cmp = icmp ugt <16 x i16> %a, %b
   2655   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2656   ret <16 x i16> %sel
   2657 }
   2658 
   2659 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
   2660 ; SSE2-LABEL: test88:
   2661 ; SSE2:       # %bb.0: # %entry
   2662 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
   2663 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   2664 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   2665 ; SSE2-NEXT:    pminsw %xmm2, %xmm0
   2666 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   2667 ; SSE2-NEXT:    pxor %xmm4, %xmm3
   2668 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   2669 ; SSE2-NEXT:    pminsw %xmm3, %xmm1
   2670 ; SSE2-NEXT:    pxor %xmm4, %xmm1
   2671 ; SSE2-NEXT:    retq
   2672 ;
   2673 ; SSE4-LABEL: test88:
   2674 ; SSE4:       # %bb.0: # %entry
   2675 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
   2676 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
   2677 ; SSE4-NEXT:    retq
   2678 ;
   2679 ; AVX1-LABEL: test88:
   2680 ; AVX1:       # %bb.0: # %entry
   2681 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2682 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2683 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
   2684 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
   2685 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2686 ; AVX1-NEXT:    retq
   2687 ;
   2688 ; AVX2-LABEL: test88:
   2689 ; AVX2:       # %bb.0: # %entry
   2690 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2691 ; AVX2-NEXT:    retq
   2692 ;
   2693 ; AVX512F-LABEL: test88:
   2694 ; AVX512F:       # %bb.0: # %entry
   2695 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
   2696 ; AVX512F-NEXT:    retq
   2697 entry:
   2698   %cmp = icmp uge <16 x i16> %a, %b
   2699   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
   2700   ret <16 x i16> %sel
   2701 }
   2702 
   2703 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
   2704 ; SSE2-LABEL: test89:
   2705 ; SSE2:       # %bb.0: # %entry
   2706 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   2707 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   2708 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2709 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2710 ; SSE2-NEXT:    por %xmm0, %xmm4
   2711 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   2712 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   2713 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2714 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   2715 ; SSE2-NEXT:    por %xmm1, %xmm2
   2716 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2717 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
   2718 ; SSE2-NEXT:    retq
   2719 ;
   2720 ; SSE4-LABEL: test89:
   2721 ; SSE4:       # %bb.0: # %entry
   2722 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   2723 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   2724 ; SSE4-NEXT:    retq
   2725 ;
   2726 ; AVX1-LABEL: test89:
   2727 ; AVX1:       # %bb.0: # %entry
   2728 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2729 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2730 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   2731 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2732 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2733 ; AVX1-NEXT:    retq
   2734 ;
   2735 ; AVX2-LABEL: test89:
   2736 ; AVX2:       # %bb.0: # %entry
   2737 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2738 ; AVX2-NEXT:    retq
   2739 ;
   2740 ; AVX512F-LABEL: test89:
   2741 ; AVX512F:       # %bb.0: # %entry
   2742 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2743 ; AVX512F-NEXT:    retq
   2744 entry:
   2745   %cmp = icmp slt <8 x i32> %a, %b
   2746   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2747   ret <8 x i32> %sel
   2748 }
   2749 
   2750 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
   2751 ; SSE2-LABEL: test90:
   2752 ; SSE2:       # %bb.0: # %entry
   2753 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   2754 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   2755 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2756 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2757 ; SSE2-NEXT:    por %xmm0, %xmm4
   2758 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   2759 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
   2760 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2761 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   2762 ; SSE2-NEXT:    por %xmm1, %xmm2
   2763 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2764 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
   2765 ; SSE2-NEXT:    retq
   2766 ;
   2767 ; SSE4-LABEL: test90:
   2768 ; SSE4:       # %bb.0: # %entry
   2769 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
   2770 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
   2771 ; SSE4-NEXT:    retq
   2772 ;
   2773 ; AVX1-LABEL: test90:
   2774 ; AVX1:       # %bb.0: # %entry
   2775 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2776 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2777 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
   2778 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2779 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2780 ; AVX1-NEXT:    retq
   2781 ;
   2782 ; AVX2-LABEL: test90:
   2783 ; AVX2:       # %bb.0: # %entry
   2784 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2785 ; AVX2-NEXT:    retq
   2786 ;
   2787 ; AVX512F-LABEL: test90:
   2788 ; AVX512F:       # %bb.0: # %entry
   2789 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2790 ; AVX512F-NEXT:    retq
   2791 entry:
   2792   %cmp = icmp sle <8 x i32> %a, %b
   2793   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2794   ret <8 x i32> %sel
   2795 }
   2796 
   2797 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
   2798 ; SSE2-LABEL: test91:
   2799 ; SSE2:       # %bb.0: # %entry
   2800 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   2801 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
   2802 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2803 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2804 ; SSE2-NEXT:    por %xmm4, %xmm0
   2805 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   2806 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   2807 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2808 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   2809 ; SSE2-NEXT:    por %xmm2, %xmm1
   2810 ; SSE2-NEXT:    retq
   2811 ;
   2812 ; SSE4-LABEL: test91:
   2813 ; SSE4:       # %bb.0: # %entry
   2814 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   2815 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   2816 ; SSE4-NEXT:    retq
   2817 ;
   2818 ; AVX1-LABEL: test91:
   2819 ; AVX1:       # %bb.0: # %entry
   2820 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2821 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2822 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   2823 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   2824 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2825 ; AVX1-NEXT:    retq
   2826 ;
   2827 ; AVX2-LABEL: test91:
   2828 ; AVX2:       # %bb.0: # %entry
   2829 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2830 ; AVX2-NEXT:    retq
   2831 ;
   2832 ; AVX512F-LABEL: test91:
   2833 ; AVX512F:       # %bb.0: # %entry
   2834 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2835 ; AVX512F-NEXT:    retq
   2836 entry:
   2837   %cmp = icmp sgt <8 x i32> %a, %b
   2838   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2839   ret <8 x i32> %sel
   2840 }
   2841 
   2842 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
   2843 ; SSE2-LABEL: test92:
   2844 ; SSE2:       # %bb.0: # %entry
   2845 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   2846 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
   2847 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2848 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2849 ; SSE2-NEXT:    por %xmm4, %xmm0
   2850 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   2851 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   2852 ; SSE2-NEXT:    pand %xmm2, %xmm1
   2853 ; SSE2-NEXT:    pandn %xmm3, %xmm2
   2854 ; SSE2-NEXT:    por %xmm2, %xmm1
   2855 ; SSE2-NEXT:    retq
   2856 ;
   2857 ; SSE4-LABEL: test92:
   2858 ; SSE4:       # %bb.0: # %entry
   2859 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
   2860 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
   2861 ; SSE4-NEXT:    retq
   2862 ;
   2863 ; AVX1-LABEL: test92:
   2864 ; AVX1:       # %bb.0: # %entry
   2865 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2866 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2867 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
   2868 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   2869 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2870 ; AVX1-NEXT:    retq
   2871 ;
   2872 ; AVX2-LABEL: test92:
   2873 ; AVX2:       # %bb.0: # %entry
   2874 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2875 ; AVX2-NEXT:    retq
   2876 ;
   2877 ; AVX512F-LABEL: test92:
   2878 ; AVX512F:       # %bb.0: # %entry
   2879 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2880 ; AVX512F-NEXT:    retq
   2881 entry:
   2882   %cmp = icmp sge <8 x i32> %a, %b
   2883   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2884   ret <8 x i32> %sel
   2885 }
   2886 
   2887 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
   2888 ; SSE2-LABEL: test93:
   2889 ; SSE2:       # %bb.0: # %entry
   2890 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   2891 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   2892 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   2893 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   2894 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   2895 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   2896 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2897 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2898 ; SSE2-NEXT:    por %xmm0, %xmm4
   2899 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   2900 ; SSE2-NEXT:    pxor %xmm5, %xmm0
   2901 ; SSE2-NEXT:    pxor %xmm1, %xmm5
   2902 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   2903 ; SSE2-NEXT:    pand %xmm5, %xmm1
   2904 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   2905 ; SSE2-NEXT:    por %xmm5, %xmm1
   2906 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2907 ; SSE2-NEXT:    retq
   2908 ;
   2909 ; SSE4-LABEL: test93:
   2910 ; SSE4:       # %bb.0: # %entry
   2911 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   2912 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   2913 ; SSE4-NEXT:    retq
   2914 ;
   2915 ; AVX1-LABEL: test93:
   2916 ; AVX1:       # %bb.0: # %entry
   2917 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2918 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2919 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   2920 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   2921 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2922 ; AVX1-NEXT:    retq
   2923 ;
   2924 ; AVX2-LABEL: test93:
   2925 ; AVX2:       # %bb.0: # %entry
   2926 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   2927 ; AVX2-NEXT:    retq
   2928 ;
   2929 ; AVX512F-LABEL: test93:
   2930 ; AVX512F:       # %bb.0: # %entry
   2931 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   2932 ; AVX512F-NEXT:    retq
   2933 entry:
   2934   %cmp = icmp ult <8 x i32> %a, %b
   2935   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2936   ret <8 x i32> %sel
   2937 }
   2938 
   2939 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
   2940 ; SSE2-LABEL: test94:
   2941 ; SSE2:       # %bb.0: # %entry
   2942 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
   2943 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   2944 ; SSE2-NEXT:    pxor %xmm5, %xmm6
   2945 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   2946 ; SSE2-NEXT:    pxor %xmm5, %xmm4
   2947 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
   2948 ; SSE2-NEXT:    pand %xmm4, %xmm0
   2949 ; SSE2-NEXT:    pandn %xmm2, %xmm4
   2950 ; SSE2-NEXT:    por %xmm0, %xmm4
   2951 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   2952 ; SSE2-NEXT:    pxor %xmm5, %xmm0
   2953 ; SSE2-NEXT:    pxor %xmm1, %xmm5
   2954 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   2955 ; SSE2-NEXT:    pand %xmm5, %xmm1
   2956 ; SSE2-NEXT:    pandn %xmm3, %xmm5
   2957 ; SSE2-NEXT:    por %xmm5, %xmm1
   2958 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2959 ; SSE2-NEXT:    retq
   2960 ;
   2961 ; SSE4-LABEL: test94:
   2962 ; SSE4:       # %bb.0: # %entry
   2963 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
   2964 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
   2965 ; SSE4-NEXT:    retq
   2966 ;
   2967 ; AVX1-LABEL: test94:
   2968 ; AVX1:       # %bb.0: # %entry
   2969 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   2970 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2971 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
   2972 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
   2973 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   2974 ; AVX1-NEXT:    retq
   2975 ;
   2976 ; AVX2-LABEL: test94:
   2977 ; AVX2:       # %bb.0: # %entry
   2978 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   2979 ; AVX2-NEXT:    retq
   2980 ;
   2981 ; AVX512F-LABEL: test94:
   2982 ; AVX512F:       # %bb.0: # %entry
   2983 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
   2984 ; AVX512F-NEXT:    retq
   2985 entry:
   2986   %cmp = icmp ule <8 x i32> %a, %b
   2987   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   2988   ret <8 x i32> %sel
   2989 }
   2990 
   2991 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
   2992 ; SSE2-LABEL: test95:
   2993 ; SSE2:       # %bb.0: # %entry
   2994 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   2995 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   2996 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   2997 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   2998 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   2999 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
   3000 ; SSE2-NEXT:    pand %xmm6, %xmm0
   3001 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   3002 ; SSE2-NEXT:    por %xmm6, %xmm0
   3003 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   3004 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   3005 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   3006 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   3007 ; SSE2-NEXT:    pand %xmm4, %xmm1
   3008 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   3009 ; SSE2-NEXT:    por %xmm4, %xmm1
   3010 ; SSE2-NEXT:    retq
   3011 ;
   3012 ; SSE4-LABEL: test95:
   3013 ; SSE4:       # %bb.0: # %entry
   3014 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   3015 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   3016 ; SSE4-NEXT:    retq
   3017 ;
   3018 ; AVX1-LABEL: test95:
   3019 ; AVX1:       # %bb.0: # %entry
   3020 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3021 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3022 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   3023 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   3024 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3025 ; AVX1-NEXT:    retq
   3026 ;
   3027 ; AVX2-LABEL: test95:
   3028 ; AVX2:       # %bb.0: # %entry
   3029 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3030 ; AVX2-NEXT:    retq
   3031 ;
   3032 ; AVX512F-LABEL: test95:
   3033 ; AVX512F:       # %bb.0: # %entry
   3034 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3035 ; AVX512F-NEXT:    retq
   3036 entry:
   3037   %cmp = icmp ugt <8 x i32> %a, %b
   3038   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3039   ret <8 x i32> %sel
   3040 }
   3041 
   3042 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
   3043 ; SSE2-LABEL: test96:
   3044 ; SSE2:       # %bb.0: # %entry
   3045 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   3046 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   3047 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   3048 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   3049 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   3050 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
   3051 ; SSE2-NEXT:    pand %xmm6, %xmm0
   3052 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   3053 ; SSE2-NEXT:    por %xmm6, %xmm0
   3054 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   3055 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   3056 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   3057 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   3058 ; SSE2-NEXT:    pand %xmm4, %xmm1
   3059 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   3060 ; SSE2-NEXT:    por %xmm4, %xmm1
   3061 ; SSE2-NEXT:    retq
   3062 ;
   3063 ; SSE4-LABEL: test96:
   3064 ; SSE4:       # %bb.0: # %entry
   3065 ; SSE4-NEXT:    pminud %xmm2, %xmm0
   3066 ; SSE4-NEXT:    pminud %xmm3, %xmm1
   3067 ; SSE4-NEXT:    retq
   3068 ;
   3069 ; AVX1-LABEL: test96:
   3070 ; AVX1:       # %bb.0: # %entry
   3071 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3072 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   3073 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
   3074 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
   3075 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   3076 ; AVX1-NEXT:    retq
   3077 ;
   3078 ; AVX2-LABEL: test96:
   3079 ; AVX2:       # %bb.0: # %entry
   3080 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3081 ; AVX2-NEXT:    retq
   3082 ;
   3083 ; AVX512F-LABEL: test96:
   3084 ; AVX512F:       # %bb.0: # %entry
   3085 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
   3086 ; AVX512F-NEXT:    retq
   3087 entry:
   3088   %cmp = icmp uge <8 x i32> %a, %b
   3089   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
   3090   ret <8 x i32> %sel
   3091 }
   3092 
   3093 ; ----------------------------
   3094 
   3095 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
   3096 ; SSE2-LABEL: test97:
   3097 ; SSE2:       # %bb.0: # %entry
   3098 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
   3099 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
   3100 ; SSE2-NEXT:    pand %xmm8, %xmm0
   3101 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   3102 ; SSE2-NEXT:    por %xmm8, %xmm0
   3103 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   3104 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
   3105 ; SSE2-NEXT:    pand %xmm4, %xmm1
   3106 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   3107 ; SSE2-NEXT:    por %xmm4, %xmm1
   3108 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   3109 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
   3110 ; SSE2-NEXT:    pand %xmm4, %xmm2
   3111 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   3112 ; SSE2-NEXT:    por %xmm4, %xmm2
   3113 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   3114 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
   3115 ; SSE2-NEXT:    pand %xmm4, %xmm3
   3116 ; SSE2-NEXT:    pandn %xmm7, %xmm4
   3117 ; SSE2-NEXT:    por %xmm4, %xmm3
   3118 ; SSE2-NEXT:    retq
   3119 ;
   3120 ; SSE4-LABEL: test97:
   3121 ; SSE4:       # %bb.0: # %entry
   3122 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   3123 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   3124 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   3125 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   3126 ; SSE4-NEXT:    retq
   3127 ;
   3128 ; AVX1-LABEL: test97:
   3129 ; AVX1:       # %bb.0: # %entry
   3130 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3131 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3132 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   3133 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   3134 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3135 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3136 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3137 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   3138 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   3139 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3140 ; AVX1-NEXT:    retq
   3141 ;
   3142 ; AVX2-LABEL: test97:
   3143 ; AVX2:       # %bb.0: # %entry
   3144 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   3145 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   3146 ; AVX2-NEXT:    retq
   3147 ;
   3148 ; AVX512BW-LABEL: test97:
   3149 ; AVX512BW:       # %bb.0: # %entry
   3150 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   3151 ; AVX512BW-NEXT:    retq
   3152 entry:
   3153   %cmp = icmp slt <64 x i8> %a, %b
   3154   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3155   ret <64 x i8> %sel
   3156 }
   3157 
   3158 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
   3159 ; SSE2-LABEL: test98:
   3160 ; SSE2:       # %bb.0: # %entry
   3161 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
   3162 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
   3163 ; SSE2-NEXT:    pand %xmm8, %xmm0
   3164 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   3165 ; SSE2-NEXT:    por %xmm8, %xmm0
   3166 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   3167 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
   3168 ; SSE2-NEXT:    pand %xmm4, %xmm1
   3169 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   3170 ; SSE2-NEXT:    por %xmm4, %xmm1
   3171 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   3172 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
   3173 ; SSE2-NEXT:    pand %xmm4, %xmm2
   3174 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   3175 ; SSE2-NEXT:    por %xmm4, %xmm2
   3176 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   3177 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
   3178 ; SSE2-NEXT:    pand %xmm4, %xmm3
   3179 ; SSE2-NEXT:    pandn %xmm7, %xmm4
   3180 ; SSE2-NEXT:    por %xmm4, %xmm3
   3181 ; SSE2-NEXT:    retq
   3182 ;
   3183 ; SSE4-LABEL: test98:
   3184 ; SSE4:       # %bb.0: # %entry
   3185 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   3186 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   3187 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   3188 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   3189 ; SSE4-NEXT:    retq
   3190 ;
   3191 ; AVX1-LABEL: test98:
   3192 ; AVX1:       # %bb.0: # %entry
   3193 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3194 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3195 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   3196 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   3197 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3198 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3199 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3200 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   3201 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   3202 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3203 ; AVX1-NEXT:    retq
   3204 ;
   3205 ; AVX2-LABEL: test98:
   3206 ; AVX2:       # %bb.0: # %entry
   3207 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   3208 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   3209 ; AVX2-NEXT:    retq
   3210 ;
   3211 ; AVX512BW-LABEL: test98:
   3212 ; AVX512BW:       # %bb.0: # %entry
   3213 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   3214 ; AVX512BW-NEXT:    retq
   3215 entry:
   3216   %cmp = icmp sle <64 x i8> %a, %b
   3217   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3218   ret <64 x i8> %sel
   3219 }
   3220 
   3221 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
   3222 ; SSE2-LABEL: test99:
   3223 ; SSE2:       # %bb.0: # %entry
   3224 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   3225 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
   3226 ; SSE2-NEXT:    pand %xmm8, %xmm0
   3227 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   3228 ; SSE2-NEXT:    por %xmm0, %xmm8
   3229 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   3230 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
   3231 ; SSE2-NEXT:    pand %xmm4, %xmm1
   3232 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   3233 ; SSE2-NEXT:    por %xmm1, %xmm4
   3234 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   3235 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
   3236 ; SSE2-NEXT:    pand %xmm5, %xmm2
   3237 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   3238 ; SSE2-NEXT:    por %xmm2, %xmm5
   3239 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   3240 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
   3241 ; SSE2-NEXT:    pand %xmm6, %xmm3
   3242 ; SSE2-NEXT:    pandn %xmm7, %xmm6
   3243 ; SSE2-NEXT:    por %xmm3, %xmm6
   3244 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
   3245 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   3246 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
   3247 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
   3248 ; SSE2-NEXT:    retq
   3249 ;
   3250 ; SSE4-LABEL: test99:
   3251 ; SSE4:       # %bb.0: # %entry
   3252 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   3253 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   3254 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   3255 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   3256 ; SSE4-NEXT:    retq
   3257 ;
   3258 ; AVX1-LABEL: test99:
   3259 ; AVX1:       # %bb.0: # %entry
   3260 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3261 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3262 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   3263 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   3264 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3265 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3266 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3267 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   3268 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   3269 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3270 ; AVX1-NEXT:    retq
   3271 ;
   3272 ; AVX2-LABEL: test99:
   3273 ; AVX2:       # %bb.0: # %entry
   3274 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   3275 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   3276 ; AVX2-NEXT:    retq
   3277 ;
   3278 ; AVX512BW-LABEL: test99:
   3279 ; AVX512BW:       # %bb.0: # %entry
   3280 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   3281 ; AVX512BW-NEXT:    retq
   3282 entry:
   3283   %cmp = icmp sgt <64 x i8> %a, %b
   3284   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3285   ret <64 x i8> %sel
   3286 }
   3287 
   3288 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
   3289 ; SSE2-LABEL: test100:
   3290 ; SSE2:       # %bb.0: # %entry
   3291 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   3292 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
   3293 ; SSE2-NEXT:    pand %xmm8, %xmm0
   3294 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   3295 ; SSE2-NEXT:    por %xmm0, %xmm8
   3296 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   3297 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
   3298 ; SSE2-NEXT:    pand %xmm4, %xmm1
   3299 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   3300 ; SSE2-NEXT:    por %xmm1, %xmm4
   3301 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   3302 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
   3303 ; SSE2-NEXT:    pand %xmm5, %xmm2
   3304 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   3305 ; SSE2-NEXT:    por %xmm2, %xmm5
   3306 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   3307 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
   3308 ; SSE2-NEXT:    pand %xmm6, %xmm3
   3309 ; SSE2-NEXT:    pandn %xmm7, %xmm6
   3310 ; SSE2-NEXT:    por %xmm3, %xmm6
   3311 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
   3312 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   3313 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
   3314 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
   3315 ; SSE2-NEXT:    retq
   3316 ;
   3317 ; SSE4-LABEL: test100:
   3318 ; SSE4:       # %bb.0: # %entry
   3319 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   3320 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   3321 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   3322 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   3323 ; SSE4-NEXT:    retq
   3324 ;
   3325 ; AVX1-LABEL: test100:
   3326 ; AVX1:       # %bb.0: # %entry
   3327 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3328 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3329 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   3330 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   3331 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3332 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3333 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3334 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   3335 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   3336 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3337 ; AVX1-NEXT:    retq
   3338 ;
   3339 ; AVX2-LABEL: test100:
   3340 ; AVX2:       # %bb.0: # %entry
   3341 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   3342 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   3343 ; AVX2-NEXT:    retq
   3344 ;
   3345 ; AVX512BW-LABEL: test100:
   3346 ; AVX512BW:       # %bb.0: # %entry
   3347 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   3348 ; AVX512BW-NEXT:    retq
   3349 entry:
   3350   %cmp = icmp sge <64 x i8> %a, %b
   3351   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3352   ret <64 x i8> %sel
   3353 }
   3354 
   3355 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
   3356 ; SSE-LABEL: test101:
   3357 ; SSE:       # %bb.0: # %entry
   3358 ; SSE-NEXT:    pminub %xmm4, %xmm0
   3359 ; SSE-NEXT:    pminub %xmm5, %xmm1
   3360 ; SSE-NEXT:    pminub %xmm6, %xmm2
   3361 ; SSE-NEXT:    pminub %xmm7, %xmm3
   3362 ; SSE-NEXT:    retq
   3363 ;
   3364 ; AVX1-LABEL: test101:
   3365 ; AVX1:       # %bb.0: # %entry
   3366 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3367 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3368 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   3369 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   3370 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3371 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3372 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3373 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   3374 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   3375 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3376 ; AVX1-NEXT:    retq
   3377 ;
   3378 ; AVX2-LABEL: test101:
   3379 ; AVX2:       # %bb.0: # %entry
   3380 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   3381 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   3382 ; AVX2-NEXT:    retq
   3383 ;
   3384 ; AVX512BW-LABEL: test101:
   3385 ; AVX512BW:       # %bb.0: # %entry
   3386 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   3387 ; AVX512BW-NEXT:    retq
   3388 entry:
   3389   %cmp = icmp ult <64 x i8> %a, %b
   3390   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3391   ret <64 x i8> %sel
   3392 }
   3393 
   3394 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
   3395 ; SSE-LABEL: test102:
   3396 ; SSE:       # %bb.0: # %entry
   3397 ; SSE-NEXT:    pminub %xmm4, %xmm0
   3398 ; SSE-NEXT:    pminub %xmm5, %xmm1
   3399 ; SSE-NEXT:    pminub %xmm6, %xmm2
   3400 ; SSE-NEXT:    pminub %xmm7, %xmm3
   3401 ; SSE-NEXT:    retq
   3402 ;
   3403 ; AVX1-LABEL: test102:
   3404 ; AVX1:       # %bb.0: # %entry
   3405 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3406 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3407 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   3408 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   3409 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3410 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3411 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3412 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   3413 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   3414 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3415 ; AVX1-NEXT:    retq
   3416 ;
   3417 ; AVX2-LABEL: test102:
   3418 ; AVX2:       # %bb.0: # %entry
   3419 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   3420 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   3421 ; AVX2-NEXT:    retq
   3422 ;
   3423 ; AVX512BW-LABEL: test102:
   3424 ; AVX512BW:       # %bb.0: # %entry
   3425 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   3426 ; AVX512BW-NEXT:    retq
   3427 entry:
   3428   %cmp = icmp ule <64 x i8> %a, %b
   3429   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3430   ret <64 x i8> %sel
   3431 }
   3432 
   3433 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
   3434 ; SSE-LABEL: test103:
   3435 ; SSE:       # %bb.0: # %entry
   3436 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   3437 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   3438 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   3439 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   3440 ; SSE-NEXT:    retq
   3441 ;
   3442 ; AVX1-LABEL: test103:
   3443 ; AVX1:       # %bb.0: # %entry
   3444 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3445 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3446 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   3447 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   3448 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3449 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3450 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3451 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   3452 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   3453 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3454 ; AVX1-NEXT:    retq
   3455 ;
   3456 ; AVX2-LABEL: test103:
   3457 ; AVX2:       # %bb.0: # %entry
   3458 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   3459 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   3460 ; AVX2-NEXT:    retq
   3461 ;
   3462 ; AVX512BW-LABEL: test103:
   3463 ; AVX512BW:       # %bb.0: # %entry
   3464 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   3465 ; AVX512BW-NEXT:    retq
   3466 entry:
   3467   %cmp = icmp ugt <64 x i8> %a, %b
   3468   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3469   ret <64 x i8> %sel
   3470 }
   3471 
   3472 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
   3473 ; SSE-LABEL: test104:
   3474 ; SSE:       # %bb.0: # %entry
   3475 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   3476 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   3477 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   3478 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   3479 ; SSE-NEXT:    retq
   3480 ;
   3481 ; AVX1-LABEL: test104:
   3482 ; AVX1:       # %bb.0: # %entry
   3483 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3484 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3485 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   3486 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   3487 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3488 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3489 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3490 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   3491 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   3492 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3493 ; AVX1-NEXT:    retq
   3494 ;
   3495 ; AVX2-LABEL: test104:
   3496 ; AVX2:       # %bb.0: # %entry
   3497 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   3498 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   3499 ; AVX2-NEXT:    retq
   3500 ;
   3501 ; AVX512BW-LABEL: test104:
   3502 ; AVX512BW:       # %bb.0: # %entry
   3503 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   3504 ; AVX512BW-NEXT:    retq
   3505 entry:
   3506   %cmp = icmp uge <64 x i8> %a, %b
   3507   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
   3508   ret <64 x i8> %sel
   3509 }
   3510 
   3511 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
   3512 ; SSE-LABEL: test105:
   3513 ; SSE:       # %bb.0: # %entry
   3514 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   3515 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   3516 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   3517 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   3518 ; SSE-NEXT:    retq
   3519 ;
   3520 ; AVX1-LABEL: test105:
   3521 ; AVX1:       # %bb.0: # %entry
   3522 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3523 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3524 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   3525 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   3526 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3527 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3528 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3529 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   3530 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   3531 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3532 ; AVX1-NEXT:    retq
   3533 ;
   3534 ; AVX2-LABEL: test105:
   3535 ; AVX2:       # %bb.0: # %entry
   3536 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   3537 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   3538 ; AVX2-NEXT:    retq
   3539 ;
   3540 ; AVX512BW-LABEL: test105:
   3541 ; AVX512BW:       # %bb.0: # %entry
   3542 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   3543 ; AVX512BW-NEXT:    retq
   3544 entry:
   3545   %cmp = icmp slt <32 x i16> %a, %b
   3546   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3547   ret <32 x i16> %sel
   3548 }
   3549 
   3550 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
   3551 ; SSE-LABEL: test106:
   3552 ; SSE:       # %bb.0: # %entry
   3553 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   3554 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   3555 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   3556 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   3557 ; SSE-NEXT:    retq
   3558 ;
   3559 ; AVX1-LABEL: test106:
   3560 ; AVX1:       # %bb.0: # %entry
   3561 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3562 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3563 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   3564 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   3565 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3566 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3567 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3568 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   3569 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   3570 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3571 ; AVX1-NEXT:    retq
   3572 ;
   3573 ; AVX2-LABEL: test106:
   3574 ; AVX2:       # %bb.0: # %entry
   3575 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   3576 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   3577 ; AVX2-NEXT:    retq
   3578 ;
   3579 ; AVX512BW-LABEL: test106:
   3580 ; AVX512BW:       # %bb.0: # %entry
   3581 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   3582 ; AVX512BW-NEXT:    retq
   3583 entry:
   3584   %cmp = icmp sle <32 x i16> %a, %b
   3585   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3586   ret <32 x i16> %sel
   3587 }
   3588 
   3589 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
   3590 ; SSE-LABEL: test107:
   3591 ; SSE:       # %bb.0: # %entry
   3592 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   3593 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   3594 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   3595 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   3596 ; SSE-NEXT:    retq
   3597 ;
   3598 ; AVX1-LABEL: test107:
   3599 ; AVX1:       # %bb.0: # %entry
   3600 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3601 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3602 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   3603 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   3604 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3605 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3606 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3607 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   3608 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   3609 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3610 ; AVX1-NEXT:    retq
   3611 ;
   3612 ; AVX2-LABEL: test107:
   3613 ; AVX2:       # %bb.0: # %entry
   3614 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   3615 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   3616 ; AVX2-NEXT:    retq
   3617 ;
   3618 ; AVX512BW-LABEL: test107:
   3619 ; AVX512BW:       # %bb.0: # %entry
   3620 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   3621 ; AVX512BW-NEXT:    retq
   3622 entry:
   3623   %cmp = icmp sgt <32 x i16> %a, %b
   3624   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3625   ret <32 x i16> %sel
   3626 }
   3627 
   3628 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
   3629 ; SSE-LABEL: test108:
   3630 ; SSE:       # %bb.0: # %entry
   3631 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   3632 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   3633 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   3634 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   3635 ; SSE-NEXT:    retq
   3636 ;
   3637 ; AVX1-LABEL: test108:
   3638 ; AVX1:       # %bb.0: # %entry
   3639 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3640 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3641 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   3642 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   3643 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3644 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3645 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3646 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   3647 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   3648 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3649 ; AVX1-NEXT:    retq
   3650 ;
   3651 ; AVX2-LABEL: test108:
   3652 ; AVX2:       # %bb.0: # %entry
   3653 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   3654 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   3655 ; AVX2-NEXT:    retq
   3656 ;
   3657 ; AVX512BW-LABEL: test108:
   3658 ; AVX512BW:       # %bb.0: # %entry
   3659 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   3660 ; AVX512BW-NEXT:    retq
   3661 entry:
   3662   %cmp = icmp sge <32 x i16> %a, %b
   3663   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3664   ret <32 x i16> %sel
   3665 }
   3666 
   3667 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
   3668 ; SSE2-LABEL: test109:
   3669 ; SSE2:       # %bb.0: # %entry
   3670 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
   3671 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   3672 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   3673 ; SSE2-NEXT:    pminsw %xmm4, %xmm0
   3674 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   3675 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   3676 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   3677 ; SSE2-NEXT:    pminsw %xmm5, %xmm1
   3678 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   3679 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   3680 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   3681 ; SSE2-NEXT:    pminsw %xmm6, %xmm2
   3682 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   3683 ; SSE2-NEXT:    pxor %xmm8, %xmm7
   3684 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   3685 ; SSE2-NEXT:    pminsw %xmm7, %xmm3
   3686 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   3687 ; SSE2-NEXT:    retq
   3688 ;
   3689 ; SSE4-LABEL: test109:
   3690 ; SSE4:       # %bb.0: # %entry
   3691 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   3692 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   3693 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   3694 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   3695 ; SSE4-NEXT:    retq
   3696 ;
   3697 ; AVX1-LABEL: test109:
   3698 ; AVX1:       # %bb.0: # %entry
   3699 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3700 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3701 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   3702 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   3703 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3704 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3705 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3706 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   3707 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   3708 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3709 ; AVX1-NEXT:    retq
   3710 ;
   3711 ; AVX2-LABEL: test109:
   3712 ; AVX2:       # %bb.0: # %entry
   3713 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   3714 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   3715 ; AVX2-NEXT:    retq
   3716 ;
   3717 ; AVX512BW-LABEL: test109:
   3718 ; AVX512BW:       # %bb.0: # %entry
   3719 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   3720 ; AVX512BW-NEXT:    retq
   3721 entry:
   3722   %cmp = icmp ult <32 x i16> %a, %b
   3723   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3724   ret <32 x i16> %sel
   3725 }
   3726 
   3727 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
   3728 ; SSE2-LABEL: test110:
   3729 ; SSE2:       # %bb.0: # %entry
   3730 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
   3731 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   3732 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   3733 ; SSE2-NEXT:    pminsw %xmm4, %xmm0
   3734 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   3735 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   3736 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   3737 ; SSE2-NEXT:    pminsw %xmm5, %xmm1
   3738 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   3739 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   3740 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   3741 ; SSE2-NEXT:    pminsw %xmm6, %xmm2
   3742 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   3743 ; SSE2-NEXT:    pxor %xmm8, %xmm7
   3744 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   3745 ; SSE2-NEXT:    pminsw %xmm7, %xmm3
   3746 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   3747 ; SSE2-NEXT:    retq
   3748 ;
   3749 ; SSE4-LABEL: test110:
   3750 ; SSE4:       # %bb.0: # %entry
   3751 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   3752 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   3753 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   3754 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   3755 ; SSE4-NEXT:    retq
   3756 ;
   3757 ; AVX1-LABEL: test110:
   3758 ; AVX1:       # %bb.0: # %entry
   3759 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3760 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3761 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   3762 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   3763 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3764 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3765 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3766 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   3767 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   3768 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3769 ; AVX1-NEXT:    retq
   3770 ;
   3771 ; AVX2-LABEL: test110:
   3772 ; AVX2:       # %bb.0: # %entry
   3773 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   3774 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   3775 ; AVX2-NEXT:    retq
   3776 ;
   3777 ; AVX512BW-LABEL: test110:
   3778 ; AVX512BW:       # %bb.0: # %entry
   3779 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   3780 ; AVX512BW-NEXT:    retq
   3781 entry:
   3782   %cmp = icmp ule <32 x i16> %a, %b
   3783   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3784   ret <32 x i16> %sel
   3785 }
   3786 
   3787 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
   3788 ; SSE2-LABEL: test111:
   3789 ; SSE2:       # %bb.0: # %entry
   3790 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
   3791 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   3792 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   3793 ; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
   3794 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   3795 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   3796 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   3797 ; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
   3798 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   3799 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   3800 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   3801 ; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
   3802 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   3803 ; SSE2-NEXT:    pxor %xmm8, %xmm7
   3804 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   3805 ; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
   3806 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   3807 ; SSE2-NEXT:    retq
   3808 ;
   3809 ; SSE4-LABEL: test111:
   3810 ; SSE4:       # %bb.0: # %entry
   3811 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   3812 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   3813 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   3814 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   3815 ; SSE4-NEXT:    retq
   3816 ;
   3817 ; AVX1-LABEL: test111:
   3818 ; AVX1:       # %bb.0: # %entry
   3819 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3820 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3821 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   3822 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   3823 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3824 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3825 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3826 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   3827 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   3828 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3829 ; AVX1-NEXT:    retq
   3830 ;
   3831 ; AVX2-LABEL: test111:
   3832 ; AVX2:       # %bb.0: # %entry
   3833 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   3834 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   3835 ; AVX2-NEXT:    retq
   3836 ;
   3837 ; AVX512BW-LABEL: test111:
   3838 ; AVX512BW:       # %bb.0: # %entry
   3839 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   3840 ; AVX512BW-NEXT:    retq
   3841 entry:
   3842   %cmp = icmp ugt <32 x i16> %a, %b
   3843   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3844   ret <32 x i16> %sel
   3845 }
   3846 
   3847 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
   3848 ; SSE2-LABEL: test112:
   3849 ; SSE2:       # %bb.0: # %entry
   3850 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
   3851 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   3852 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   3853 ; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
   3854 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   3855 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   3856 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   3857 ; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
   3858 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   3859 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   3860 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   3861 ; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
   3862 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   3863 ; SSE2-NEXT:    pxor %xmm8, %xmm7
   3864 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   3865 ; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
   3866 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   3867 ; SSE2-NEXT:    retq
   3868 ;
   3869 ; SSE4-LABEL: test112:
   3870 ; SSE4:       # %bb.0: # %entry
   3871 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   3872 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   3873 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   3874 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   3875 ; SSE4-NEXT:    retq
   3876 ;
   3877 ; AVX1-LABEL: test112:
   3878 ; AVX1:       # %bb.0: # %entry
   3879 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3880 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3881 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   3882 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   3883 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3884 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3885 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3886 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   3887 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   3888 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3889 ; AVX1-NEXT:    retq
   3890 ;
   3891 ; AVX2-LABEL: test112:
   3892 ; AVX2:       # %bb.0: # %entry
   3893 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   3894 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   3895 ; AVX2-NEXT:    retq
   3896 ;
   3897 ; AVX512BW-LABEL: test112:
   3898 ; AVX512BW:       # %bb.0: # %entry
   3899 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   3900 ; AVX512BW-NEXT:    retq
   3901 entry:
   3902   %cmp = icmp uge <32 x i16> %a, %b
   3903   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
   3904   ret <32 x i16> %sel
   3905 }
   3906 
   3907 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
   3908 ; SSE2-LABEL: test113:
   3909 ; SSE2:       # %bb.0: # %entry
   3910 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
   3911 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
   3912 ; SSE2-NEXT:    pand %xmm8, %xmm0
   3913 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   3914 ; SSE2-NEXT:    por %xmm8, %xmm0
   3915 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   3916 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   3917 ; SSE2-NEXT:    pand %xmm4, %xmm1
   3918 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   3919 ; SSE2-NEXT:    por %xmm4, %xmm1
   3920 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   3921 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   3922 ; SSE2-NEXT:    pand %xmm4, %xmm2
   3923 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   3924 ; SSE2-NEXT:    por %xmm4, %xmm2
   3925 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   3926 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   3927 ; SSE2-NEXT:    pand %xmm4, %xmm3
   3928 ; SSE2-NEXT:    pandn %xmm7, %xmm4
   3929 ; SSE2-NEXT:    por %xmm4, %xmm3
   3930 ; SSE2-NEXT:    retq
   3931 ;
   3932 ; SSE4-LABEL: test113:
   3933 ; SSE4:       # %bb.0: # %entry
   3934 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   3935 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   3936 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   3937 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   3938 ; SSE4-NEXT:    retq
   3939 ;
   3940 ; AVX1-LABEL: test113:
   3941 ; AVX1:       # %bb.0: # %entry
   3942 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   3943 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   3944 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   3945 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   3946 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   3947 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   3948 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   3949 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   3950 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   3951 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   3952 ; AVX1-NEXT:    retq
   3953 ;
   3954 ; AVX2-LABEL: test113:
   3955 ; AVX2:       # %bb.0: # %entry
   3956 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   3957 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   3958 ; AVX2-NEXT:    retq
   3959 ;
   3960 ; AVX512F-LABEL: test113:
   3961 ; AVX512F:       # %bb.0: # %entry
   3962 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   3963 ; AVX512F-NEXT:    retq
   3964 entry:
   3965   %cmp = icmp slt <16 x i32> %a, %b
   3966   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   3967   ret <16 x i32> %sel
   3968 }
   3969 
   3970 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
   3971 ; SSE2-LABEL: test114:
   3972 ; SSE2:       # %bb.0: # %entry
   3973 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
   3974 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
   3975 ; SSE2-NEXT:    pand %xmm8, %xmm0
   3976 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   3977 ; SSE2-NEXT:    por %xmm8, %xmm0
   3978 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   3979 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   3980 ; SSE2-NEXT:    pand %xmm4, %xmm1
   3981 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   3982 ; SSE2-NEXT:    por %xmm4, %xmm1
   3983 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   3984 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   3985 ; SSE2-NEXT:    pand %xmm4, %xmm2
   3986 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   3987 ; SSE2-NEXT:    por %xmm4, %xmm2
   3988 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   3989 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   3990 ; SSE2-NEXT:    pand %xmm4, %xmm3
   3991 ; SSE2-NEXT:    pandn %xmm7, %xmm4
   3992 ; SSE2-NEXT:    por %xmm4, %xmm3
   3993 ; SSE2-NEXT:    retq
   3994 ;
   3995 ; SSE4-LABEL: test114:
   3996 ; SSE4:       # %bb.0: # %entry
   3997 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   3998 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   3999 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   4000 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   4001 ; SSE4-NEXT:    retq
   4002 ;
   4003 ; AVX1-LABEL: test114:
   4004 ; AVX1:       # %bb.0: # %entry
   4005 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4006 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4007 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   4008 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   4009 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4010 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4011 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4012 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   4013 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   4014 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4015 ; AVX1-NEXT:    retq
   4016 ;
   4017 ; AVX2-LABEL: test114:
   4018 ; AVX2:       # %bb.0: # %entry
   4019 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   4020 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   4021 ; AVX2-NEXT:    retq
   4022 ;
   4023 ; AVX512F-LABEL: test114:
   4024 ; AVX512F:       # %bb.0: # %entry
   4025 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   4026 ; AVX512F-NEXT:    retq
   4027 entry:
   4028   %cmp = icmp sle <16 x i32> %a, %b
   4029   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4030   ret <16 x i32> %sel
   4031 }
   4032 
   4033 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
   4034 ; SSE2-LABEL: test115:
   4035 ; SSE2:       # %bb.0: # %entry
   4036 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   4037 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
   4038 ; SSE2-NEXT:    pand %xmm8, %xmm0
   4039 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   4040 ; SSE2-NEXT:    por %xmm0, %xmm8
   4041 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   4042 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   4043 ; SSE2-NEXT:    pand %xmm4, %xmm1
   4044 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   4045 ; SSE2-NEXT:    por %xmm1, %xmm4
   4046 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   4047 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   4048 ; SSE2-NEXT:    pand %xmm5, %xmm2
   4049 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   4050 ; SSE2-NEXT:    por %xmm2, %xmm5
   4051 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   4052 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
   4053 ; SSE2-NEXT:    pand %xmm6, %xmm3
   4054 ; SSE2-NEXT:    pandn %xmm7, %xmm6
   4055 ; SSE2-NEXT:    por %xmm3, %xmm6
   4056 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
   4057 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   4058 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
   4059 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
   4060 ; SSE2-NEXT:    retq
   4061 ;
   4062 ; SSE4-LABEL: test115:
   4063 ; SSE4:       # %bb.0: # %entry
   4064 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   4065 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   4066 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   4067 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   4068 ; SSE4-NEXT:    retq
   4069 ;
   4070 ; AVX1-LABEL: test115:
   4071 ; AVX1:       # %bb.0: # %entry
   4072 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4073 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4074 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   4075 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   4076 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4077 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4078 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4079 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   4080 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   4081 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4082 ; AVX1-NEXT:    retq
   4083 ;
   4084 ; AVX2-LABEL: test115:
   4085 ; AVX2:       # %bb.0: # %entry
   4086 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   4087 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   4088 ; AVX2-NEXT:    retq
   4089 ;
   4090 ; AVX512F-LABEL: test115:
   4091 ; AVX512F:       # %bb.0: # %entry
   4092 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   4093 ; AVX512F-NEXT:    retq
   4094 entry:
   4095   %cmp = icmp sgt <16 x i32> %a, %b
   4096   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4097   ret <16 x i32> %sel
   4098 }
   4099 
   4100 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
   4101 ; SSE2-LABEL: test116:
   4102 ; SSE2:       # %bb.0: # %entry
   4103 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   4104 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
   4105 ; SSE2-NEXT:    pand %xmm8, %xmm0
   4106 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   4107 ; SSE2-NEXT:    por %xmm0, %xmm8
   4108 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   4109 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   4110 ; SSE2-NEXT:    pand %xmm4, %xmm1
   4111 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   4112 ; SSE2-NEXT:    por %xmm1, %xmm4
   4113 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   4114 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   4115 ; SSE2-NEXT:    pand %xmm5, %xmm2
   4116 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   4117 ; SSE2-NEXT:    por %xmm2, %xmm5
   4118 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   4119 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
   4120 ; SSE2-NEXT:    pand %xmm6, %xmm3
   4121 ; SSE2-NEXT:    pandn %xmm7, %xmm6
   4122 ; SSE2-NEXT:    por %xmm3, %xmm6
   4123 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
   4124 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   4125 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
   4126 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
   4127 ; SSE2-NEXT:    retq
   4128 ;
   4129 ; SSE4-LABEL: test116:
   4130 ; SSE4:       # %bb.0: # %entry
   4131 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   4132 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   4133 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   4134 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   4135 ; SSE4-NEXT:    retq
   4136 ;
   4137 ; AVX1-LABEL: test116:
   4138 ; AVX1:       # %bb.0: # %entry
   4139 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4140 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4141 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   4142 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   4143 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4144 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4145 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4146 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   4147 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   4148 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4149 ; AVX1-NEXT:    retq
   4150 ;
   4151 ; AVX2-LABEL: test116:
   4152 ; AVX2:       # %bb.0: # %entry
   4153 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   4154 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   4155 ; AVX2-NEXT:    retq
   4156 ;
   4157 ; AVX512F-LABEL: test116:
   4158 ; AVX512F:       # %bb.0: # %entry
   4159 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   4160 ; AVX512F-NEXT:    retq
   4161 entry:
   4162   %cmp = icmp sge <16 x i32> %a, %b
   4163   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4164   ret <16 x i32> %sel
   4165 }
   4166 
   4167 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
   4168 ; SSE2-LABEL: test117:
   4169 ; SSE2:       # %bb.0: # %entry
   4170 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   4171 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   4172 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4173 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4174 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   4175 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   4176 ; SSE2-NEXT:    pand %xmm10, %xmm0
   4177 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   4178 ; SSE2-NEXT:    por %xmm10, %xmm0
   4179 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   4180 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4181 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   4182 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4183 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
   4184 ; SSE2-NEXT:    pand %xmm4, %xmm1
   4185 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   4186 ; SSE2-NEXT:    por %xmm4, %xmm1
   4187 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   4188 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4189 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   4190 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   4191 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   4192 ; SSE2-NEXT:    pand %xmm5, %xmm2
   4193 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   4194 ; SSE2-NEXT:    por %xmm5, %xmm2
   4195 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   4196 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4197 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   4198 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
   4199 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4200 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4201 ; SSE2-NEXT:    por %xmm8, %xmm3
   4202 ; SSE2-NEXT:    retq
   4203 ;
   4204 ; SSE4-LABEL: test117:
   4205 ; SSE4:       # %bb.0: # %entry
   4206 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   4207 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   4208 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   4209 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   4210 ; SSE4-NEXT:    retq
   4211 ;
   4212 ; AVX1-LABEL: test117:
   4213 ; AVX1:       # %bb.0: # %entry
   4214 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4215 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4216 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   4217 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   4218 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4219 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4220 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4221 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   4222 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   4223 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4224 ; AVX1-NEXT:    retq
   4225 ;
   4226 ; AVX2-LABEL: test117:
   4227 ; AVX2:       # %bb.0: # %entry
   4228 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   4229 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   4230 ; AVX2-NEXT:    retq
   4231 ;
   4232 ; AVX512F-LABEL: test117:
   4233 ; AVX512F:       # %bb.0: # %entry
   4234 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   4235 ; AVX512F-NEXT:    retq
   4236 entry:
   4237   %cmp = icmp ult <16 x i32> %a, %b
   4238   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4239   ret <16 x i32> %sel
   4240 }
   4241 
   4242 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
   4243 ; SSE2-LABEL: test118:
   4244 ; SSE2:       # %bb.0: # %entry
   4245 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   4246 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   4247 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4248 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4249 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   4250 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   4251 ; SSE2-NEXT:    pand %xmm10, %xmm0
   4252 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   4253 ; SSE2-NEXT:    por %xmm10, %xmm0
   4254 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   4255 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4256 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   4257 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4258 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
   4259 ; SSE2-NEXT:    pand %xmm4, %xmm1
   4260 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   4261 ; SSE2-NEXT:    por %xmm4, %xmm1
   4262 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   4263 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4264 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   4265 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   4266 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   4267 ; SSE2-NEXT:    pand %xmm5, %xmm2
   4268 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   4269 ; SSE2-NEXT:    por %xmm5, %xmm2
   4270 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   4271 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4272 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   4273 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
   4274 ; SSE2-NEXT:    pand %xmm8, %xmm3
   4275 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   4276 ; SSE2-NEXT:    por %xmm8, %xmm3
   4277 ; SSE2-NEXT:    retq
   4278 ;
   4279 ; SSE4-LABEL: test118:
   4280 ; SSE4:       # %bb.0: # %entry
   4281 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   4282 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   4283 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   4284 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   4285 ; SSE4-NEXT:    retq
   4286 ;
   4287 ; AVX1-LABEL: test118:
   4288 ; AVX1:       # %bb.0: # %entry
   4289 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4290 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4291 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   4292 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   4293 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4294 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4295 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4296 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   4297 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   4298 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4299 ; AVX1-NEXT:    retq
   4300 ;
   4301 ; AVX2-LABEL: test118:
   4302 ; AVX2:       # %bb.0: # %entry
   4303 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   4304 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   4305 ; AVX2-NEXT:    retq
   4306 ;
   4307 ; AVX512F-LABEL: test118:
   4308 ; AVX512F:       # %bb.0: # %entry
   4309 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   4310 ; AVX512F-NEXT:    retq
   4311 entry:
   4312   %cmp = icmp ule <16 x i32> %a, %b
   4313   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4314   ret <16 x i32> %sel
   4315 }
   4316 
   4317 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
   4318 ; SSE2-LABEL: test119:
   4319 ; SSE2:       # %bb.0: # %entry
   4320 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
   4321 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4322 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
   4323 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   4324 ; SSE2-NEXT:    pxor %xmm9, %xmm1
   4325 ; SSE2-NEXT:    pxor %xmm9, %xmm0
   4326 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
   4327 ; SSE2-NEXT:    pand %xmm0, %xmm10
   4328 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   4329 ; SSE2-NEXT:    por %xmm10, %xmm0
   4330 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   4331 ; SSE2-NEXT:    pxor %xmm9, %xmm4
   4332 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
   4333 ; SSE2-NEXT:    pxor %xmm9, %xmm1
   4334 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
   4335 ; SSE2-NEXT:    pand %xmm1, %xmm8
   4336 ; SSE2-NEXT:    pandn %xmm5, %xmm1
   4337 ; SSE2-NEXT:    por %xmm8, %xmm1
   4338 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   4339 ; SSE2-NEXT:    pxor %xmm9, %xmm5
   4340 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   4341 ; SSE2-NEXT:    pxor %xmm9, %xmm4
   4342 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   4343 ; SSE2-NEXT:    pand %xmm4, %xmm2
   4344 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   4345 ; SSE2-NEXT:    por %xmm2, %xmm4
   4346 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
   4347 ; SSE2-NEXT:    pxor %xmm9, %xmm2
   4348 ; SSE2-NEXT:    pxor %xmm3, %xmm9
   4349 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
   4350 ; SSE2-NEXT:    pand %xmm9, %xmm3
   4351 ; SSE2-NEXT:    pandn %xmm7, %xmm9
   4352 ; SSE2-NEXT:    por %xmm9, %xmm3
   4353 ; SSE2-NEXT:    movdqa %xmm4, %xmm2
   4354 ; SSE2-NEXT:    retq
   4355 ;
   4356 ; SSE4-LABEL: test119:
   4357 ; SSE4:       # %bb.0: # %entry
   4358 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   4359 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   4360 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   4361 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   4362 ; SSE4-NEXT:    retq
   4363 ;
   4364 ; AVX1-LABEL: test119:
   4365 ; AVX1:       # %bb.0: # %entry
   4366 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4367 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4368 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   4369 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   4370 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4371 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4372 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4373 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   4374 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   4375 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4376 ; AVX1-NEXT:    retq
   4377 ;
   4378 ; AVX2-LABEL: test119:
   4379 ; AVX2:       # %bb.0: # %entry
   4380 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   4381 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   4382 ; AVX2-NEXT:    retq
   4383 ;
   4384 ; AVX512F-LABEL: test119:
   4385 ; AVX512F:       # %bb.0: # %entry
   4386 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   4387 ; AVX512F-NEXT:    retq
   4388 entry:
   4389   %cmp = icmp ugt <16 x i32> %a, %b
   4390   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4391   ret <16 x i32> %sel
   4392 }
   4393 
   4394 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
   4395 ; SSE2-LABEL: test120:
   4396 ; SSE2:       # %bb.0: # %entry
   4397 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
   4398 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4399 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
   4400 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   4401 ; SSE2-NEXT:    pxor %xmm9, %xmm1
   4402 ; SSE2-NEXT:    pxor %xmm9, %xmm0
   4403 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
   4404 ; SSE2-NEXT:    pand %xmm0, %xmm10
   4405 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   4406 ; SSE2-NEXT:    por %xmm10, %xmm0
   4407 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   4408 ; SSE2-NEXT:    pxor %xmm9, %xmm4
   4409 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
   4410 ; SSE2-NEXT:    pxor %xmm9, %xmm1
   4411 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
   4412 ; SSE2-NEXT:    pand %xmm1, %xmm8
   4413 ; SSE2-NEXT:    pandn %xmm5, %xmm1
   4414 ; SSE2-NEXT:    por %xmm8, %xmm1
   4415 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   4416 ; SSE2-NEXT:    pxor %xmm9, %xmm5
   4417 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   4418 ; SSE2-NEXT:    pxor %xmm9, %xmm4
   4419 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   4420 ; SSE2-NEXT:    pand %xmm4, %xmm2
   4421 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   4422 ; SSE2-NEXT:    por %xmm2, %xmm4
   4423 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
   4424 ; SSE2-NEXT:    pxor %xmm9, %xmm2
   4425 ; SSE2-NEXT:    pxor %xmm3, %xmm9
   4426 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
   4427 ; SSE2-NEXT:    pand %xmm9, %xmm3
   4428 ; SSE2-NEXT:    pandn %xmm7, %xmm9
   4429 ; SSE2-NEXT:    por %xmm9, %xmm3
   4430 ; SSE2-NEXT:    movdqa %xmm4, %xmm2
   4431 ; SSE2-NEXT:    retq
   4432 ;
   4433 ; SSE4-LABEL: test120:
   4434 ; SSE4:       # %bb.0: # %entry
   4435 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   4436 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   4437 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   4438 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   4439 ; SSE4-NEXT:    retq
   4440 ;
   4441 ; AVX1-LABEL: test120:
   4442 ; AVX1:       # %bb.0: # %entry
   4443 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4444 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4445 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   4446 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   4447 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   4448 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4449 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4450 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   4451 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   4452 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   4453 ; AVX1-NEXT:    retq
   4454 ;
   4455 ; AVX2-LABEL: test120:
   4456 ; AVX2:       # %bb.0: # %entry
   4457 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   4458 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   4459 ; AVX2-NEXT:    retq
   4460 ;
   4461 ; AVX512F-LABEL: test120:
   4462 ; AVX512F:       # %bb.0: # %entry
   4463 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   4464 ; AVX512F-NEXT:    retq
   4465 entry:
   4466   %cmp = icmp uge <16 x i32> %a, %b
   4467   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
   4468   ret <16 x i32> %sel
   4469 }
   4470 
   4471 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
   4472 ; SSE2-LABEL: test121:
   4473 ; SSE2:       # %bb.0: # %entry
   4474 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
   4475 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   4476 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4477 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4478 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   4479 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   4480 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   4481 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   4482 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   4483 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   4484 ; SSE2-NEXT:    pand %xmm12, %xmm9
   4485 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   4486 ; SSE2-NEXT:    por %xmm9, %xmm10
   4487 ; SSE2-NEXT:    pand %xmm10, %xmm0
   4488 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   4489 ; SSE2-NEXT:    por %xmm10, %xmm0
   4490 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   4491 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4492 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   4493 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4494 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4495 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   4496 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   4497 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   4498 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   4499 ; SSE2-NEXT:    pand %xmm11, %xmm9
   4500 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   4501 ; SSE2-NEXT:    por %xmm9, %xmm4
   4502 ; SSE2-NEXT:    pand %xmm4, %xmm1
   4503 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   4504 ; SSE2-NEXT:    por %xmm4, %xmm1
   4505 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   4506 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4507 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   4508 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   4509 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   4510 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   4511 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   4512 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   4513 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   4514 ; SSE2-NEXT:    pand %xmm10, %xmm4
   4515 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   4516 ; SSE2-NEXT:    por %xmm4, %xmm5
   4517 ; SSE2-NEXT:    pand %xmm5, %xmm2
   4518 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   4519 ; SSE2-NEXT:    por %xmm5, %xmm2
   4520 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   4521 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4522 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   4523 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   4524 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   4525 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   4526 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   4527 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   4528 ; SSE2-NEXT:    pand %xmm6, %xmm4
   4529 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   4530 ; SSE2-NEXT:    por %xmm4, %xmm5
   4531 ; SSE2-NEXT:    pand %xmm5, %xmm3
   4532 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   4533 ; SSE2-NEXT:    por %xmm5, %xmm3
   4534 ; SSE2-NEXT:    retq
   4535 ;
   4536 ; SSE4-LABEL: test121:
   4537 ; SSE4:       # %bb.0: # %entry
   4538 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   4539 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   4540 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
   4541 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
   4542 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   4543 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   4544 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   4545 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
   4546 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   4547 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   4548 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
   4549 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   4550 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   4551 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   4552 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   4553 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   4554 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   4555 ; SSE4-NEXT:    retq
   4556 ;
   4557 ; AVX1-LABEL: test121:
   4558 ; AVX1:       # %bb.0: # %entry
   4559 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   4560 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   4561 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   4562 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
   4563 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   4564 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   4565 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   4566 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   4567 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   4568 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
   4569 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   4570 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   4571 ; AVX1-NEXT:    retq
   4572 ;
   4573 ; AVX2-LABEL: test121:
   4574 ; AVX2:       # %bb.0: # %entry
   4575 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
   4576 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   4577 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
   4578 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   4579 ; AVX2-NEXT:    retq
   4580 ;
   4581 ; AVX512F-LABEL: test121:
   4582 ; AVX512F:       # %bb.0: # %entry
   4583 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   4584 ; AVX512F-NEXT:    retq
   4585 entry:
   4586   %cmp = icmp slt <8 x i64> %a, %b
   4587   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   4588   ret <8 x i64> %sel
   4589 }
   4590 
   4591 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
   4592 ; SSE2-LABEL: test122:
   4593 ; SSE2:       # %bb.0: # %entry
   4594 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
   4595 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   4596 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4597 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4598 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   4599 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   4600 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   4601 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   4602 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   4603 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   4604 ; SSE2-NEXT:    pand %xmm12, %xmm9
   4605 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   4606 ; SSE2-NEXT:    por %xmm9, %xmm10
   4607 ; SSE2-NEXT:    pand %xmm10, %xmm0
   4608 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   4609 ; SSE2-NEXT:    por %xmm10, %xmm0
   4610 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   4611 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4612 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   4613 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4614 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4615 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   4616 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   4617 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   4618 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   4619 ; SSE2-NEXT:    pand %xmm11, %xmm9
   4620 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   4621 ; SSE2-NEXT:    por %xmm9, %xmm4
   4622 ; SSE2-NEXT:    pand %xmm4, %xmm1
   4623 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   4624 ; SSE2-NEXT:    por %xmm4, %xmm1
   4625 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   4626 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4627 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   4628 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   4629 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   4630 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   4631 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   4632 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   4633 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   4634 ; SSE2-NEXT:    pand %xmm10, %xmm4
   4635 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   4636 ; SSE2-NEXT:    por %xmm4, %xmm5
   4637 ; SSE2-NEXT:    pand %xmm5, %xmm2
   4638 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   4639 ; SSE2-NEXT:    por %xmm5, %xmm2
   4640 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   4641 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4642 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   4643 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   4644 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   4645 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   4646 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   4647 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   4648 ; SSE2-NEXT:    pand %xmm6, %xmm4
   4649 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   4650 ; SSE2-NEXT:    por %xmm4, %xmm5
   4651 ; SSE2-NEXT:    pand %xmm5, %xmm3
   4652 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   4653 ; SSE2-NEXT:    por %xmm5, %xmm3
   4654 ; SSE2-NEXT:    retq
   4655 ;
   4656 ; SSE4-LABEL: test122:
   4657 ; SSE4:       # %bb.0: # %entry
   4658 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   4659 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   4660 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
   4661 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
   4662 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   4663 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   4664 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   4665 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
   4666 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   4667 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   4668 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
   4669 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   4670 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   4671 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   4672 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   4673 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   4674 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   4675 ; SSE4-NEXT:    retq
   4676 ;
   4677 ; AVX1-LABEL: test122:
   4678 ; AVX1:       # %bb.0: # %entry
   4679 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   4680 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   4681 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   4682 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
   4683 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   4684 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   4685 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   4686 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   4687 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   4688 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
   4689 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   4690 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   4691 ; AVX1-NEXT:    retq
   4692 ;
   4693 ; AVX2-LABEL: test122:
   4694 ; AVX2:       # %bb.0: # %entry
   4695 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
   4696 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   4697 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
   4698 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   4699 ; AVX2-NEXT:    retq
   4700 ;
   4701 ; AVX512F-LABEL: test122:
   4702 ; AVX512F:       # %bb.0: # %entry
   4703 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   4704 ; AVX512F-NEXT:    retq
   4705 entry:
   4706   %cmp = icmp sle <8 x i64> %a, %b
   4707   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   4708   ret <8 x i64> %sel
   4709 }
   4710 
   4711 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
   4712 ; SSE2-LABEL: test123:
   4713 ; SSE2:       # %bb.0: # %entry
   4714 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
   4715 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
   4716 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4717 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4718 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   4719 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   4720 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   4721 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   4722 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   4723 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   4724 ; SSE2-NEXT:    pand %xmm12, %xmm9
   4725 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   4726 ; SSE2-NEXT:    por %xmm9, %xmm10
   4727 ; SSE2-NEXT:    pand %xmm10, %xmm0
   4728 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   4729 ; SSE2-NEXT:    por %xmm10, %xmm0
   4730 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   4731 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4732 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   4733 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4734 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4735 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   4736 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   4737 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   4738 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   4739 ; SSE2-NEXT:    pand %xmm11, %xmm9
   4740 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   4741 ; SSE2-NEXT:    por %xmm9, %xmm4
   4742 ; SSE2-NEXT:    pand %xmm4, %xmm1
   4743 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   4744 ; SSE2-NEXT:    por %xmm4, %xmm1
   4745 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   4746 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4747 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   4748 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   4749 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   4750 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   4751 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   4752 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   4753 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   4754 ; SSE2-NEXT:    pand %xmm10, %xmm4
   4755 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   4756 ; SSE2-NEXT:    por %xmm4, %xmm5
   4757 ; SSE2-NEXT:    pand %xmm5, %xmm2
   4758 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   4759 ; SSE2-NEXT:    por %xmm5, %xmm2
   4760 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   4761 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4762 ; SSE2-NEXT:    pxor %xmm3, %xmm8
   4763 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   4764 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   4765 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   4766 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   4767 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   4768 ; SSE2-NEXT:    pand %xmm6, %xmm4
   4769 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   4770 ; SSE2-NEXT:    por %xmm4, %xmm5
   4771 ; SSE2-NEXT:    pand %xmm5, %xmm3
   4772 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   4773 ; SSE2-NEXT:    por %xmm5, %xmm3
   4774 ; SSE2-NEXT:    retq
   4775 ;
   4776 ; SSE4-LABEL: test123:
   4777 ; SSE4:       # %bb.0: # %entry
   4778 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   4779 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   4780 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
   4781 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   4782 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
   4783 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   4784 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   4785 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   4786 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   4787 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   4788 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   4789 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   4790 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   4791 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   4792 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   4793 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   4794 ; SSE4-NEXT:    retq
   4795 ;
   4796 ; AVX1-LABEL: test123:
   4797 ; AVX1:       # %bb.0: # %entry
   4798 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4799 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4800 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   4801 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
   4802 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   4803 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   4804 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4805 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4806 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   4807 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
   4808 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   4809 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   4810 ; AVX1-NEXT:    retq
   4811 ;
   4812 ; AVX2-LABEL: test123:
   4813 ; AVX2:       # %bb.0: # %entry
   4814 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
   4815 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   4816 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
   4817 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   4818 ; AVX2-NEXT:    retq
   4819 ;
   4820 ; AVX512F-LABEL: test123:
   4821 ; AVX512F:       # %bb.0: # %entry
   4822 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   4823 ; AVX512F-NEXT:    retq
   4824 entry:
   4825   %cmp = icmp sgt <8 x i64> %a, %b
   4826   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   4827   ret <8 x i64> %sel
   4828 }
   4829 
   4830 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
   4831 ; SSE2-LABEL: test124:
   4832 ; SSE2:       # %bb.0: # %entry
   4833 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
   4834 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
   4835 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4836 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   4837 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   4838 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   4839 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   4840 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   4841 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   4842 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   4843 ; SSE2-NEXT:    pand %xmm12, %xmm9
   4844 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   4845 ; SSE2-NEXT:    por %xmm9, %xmm10
   4846 ; SSE2-NEXT:    pand %xmm10, %xmm0
   4847 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   4848 ; SSE2-NEXT:    por %xmm10, %xmm0
   4849 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   4850 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4851 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   4852 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4853 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4854 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   4855 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   4856 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   4857 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   4858 ; SSE2-NEXT:    pand %xmm11, %xmm9
   4859 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   4860 ; SSE2-NEXT:    por %xmm9, %xmm4
   4861 ; SSE2-NEXT:    pand %xmm4, %xmm1
   4862 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   4863 ; SSE2-NEXT:    por %xmm4, %xmm1
   4864 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   4865 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4866 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   4867 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   4868 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   4869 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   4870 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   4871 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   4872 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   4873 ; SSE2-NEXT:    pand %xmm10, %xmm4
   4874 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   4875 ; SSE2-NEXT:    por %xmm4, %xmm5
   4876 ; SSE2-NEXT:    pand %xmm5, %xmm2
   4877 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   4878 ; SSE2-NEXT:    por %xmm5, %xmm2
   4879 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   4880 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4881 ; SSE2-NEXT:    pxor %xmm3, %xmm8
   4882 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   4883 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   4884 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   4885 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   4886 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   4887 ; SSE2-NEXT:    pand %xmm6, %xmm4
   4888 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   4889 ; SSE2-NEXT:    por %xmm4, %xmm5
   4890 ; SSE2-NEXT:    pand %xmm5, %xmm3
   4891 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   4892 ; SSE2-NEXT:    por %xmm5, %xmm3
   4893 ; SSE2-NEXT:    retq
   4894 ;
   4895 ; SSE4-LABEL: test124:
   4896 ; SSE4:       # %bb.0: # %entry
   4897 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   4898 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   4899 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
   4900 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   4901 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
   4902 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   4903 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   4904 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   4905 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   4906 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   4907 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   4908 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   4909 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   4910 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   4911 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   4912 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   4913 ; SSE4-NEXT:    retq
   4914 ;
   4915 ; AVX1-LABEL: test124:
   4916 ; AVX1:       # %bb.0: # %entry
   4917 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   4918 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   4919 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   4920 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
   4921 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   4922 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   4923 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   4924 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   4925 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   4926 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
   4927 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   4928 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   4929 ; AVX1-NEXT:    retq
   4930 ;
   4931 ; AVX2-LABEL: test124:
   4932 ; AVX2:       # %bb.0: # %entry
   4933 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
   4934 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   4935 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
   4936 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   4937 ; AVX2-NEXT:    retq
   4938 ;
   4939 ; AVX512F-LABEL: test124:
   4940 ; AVX512F:       # %bb.0: # %entry
   4941 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   4942 ; AVX512F-NEXT:    retq
   4943 entry:
   4944   %cmp = icmp sge <8 x i64> %a, %b
   4945   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   4946   ret <8 x i64> %sel
   4947 }
   4948 
   4949 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
   4950 ; SSE2-LABEL: test125:
   4951 ; SSE2:       # %bb.0: # %entry
   4952 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   4953 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   4954 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4955 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4956 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   4957 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   4958 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   4959 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   4960 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   4961 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   4962 ; SSE2-NEXT:    pand %xmm12, %xmm9
   4963 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   4964 ; SSE2-NEXT:    por %xmm9, %xmm10
   4965 ; SSE2-NEXT:    pand %xmm10, %xmm0
   4966 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   4967 ; SSE2-NEXT:    por %xmm10, %xmm0
   4968 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   4969 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   4970 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   4971 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4972 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   4973 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   4974 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   4975 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   4976 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   4977 ; SSE2-NEXT:    pand %xmm11, %xmm9
   4978 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   4979 ; SSE2-NEXT:    por %xmm9, %xmm4
   4980 ; SSE2-NEXT:    pand %xmm4, %xmm1
   4981 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   4982 ; SSE2-NEXT:    por %xmm4, %xmm1
   4983 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   4984 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   4985 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   4986 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   4987 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   4988 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   4989 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   4990 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   4991 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   4992 ; SSE2-NEXT:    pand %xmm10, %xmm4
   4993 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   4994 ; SSE2-NEXT:    por %xmm4, %xmm5
   4995 ; SSE2-NEXT:    pand %xmm5, %xmm2
   4996 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   4997 ; SSE2-NEXT:    por %xmm5, %xmm2
   4998 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   4999 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5000 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   5001 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   5002 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   5003 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   5004 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   5005 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   5006 ; SSE2-NEXT:    pand %xmm6, %xmm4
   5007 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   5008 ; SSE2-NEXT:    por %xmm4, %xmm5
   5009 ; SSE2-NEXT:    pand %xmm5, %xmm3
   5010 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   5011 ; SSE2-NEXT:    por %xmm5, %xmm3
   5012 ; SSE2-NEXT:    retq
   5013 ;
   5014 ; SSE4-LABEL: test125:
   5015 ; SSE4:       # %bb.0: # %entry
   5016 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   5017 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
   5018 ; SSE4-NEXT:    movdqa %xmm0, %xmm10
   5019 ; SSE4-NEXT:    pxor %xmm8, %xmm10
   5020 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   5021 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5022 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
   5023 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
   5024 ; SSE4-NEXT:    movdqa %xmm1, %xmm9
   5025 ; SSE4-NEXT:    pxor %xmm8, %xmm9
   5026 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   5027 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5028 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
   5029 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   5030 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
   5031 ; SSE4-NEXT:    pxor %xmm8, %xmm1
   5032 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
   5033 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5034 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   5035 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   5036 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   5037 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5038 ; SSE4-NEXT:    pxor %xmm7, %xmm8
   5039 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
   5040 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   5041 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   5042 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5043 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5044 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5045 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5046 ; SSE4-NEXT:    retq
   5047 ;
   5048 ; AVX1-LABEL: test125:
   5049 ; AVX1:       # %bb.0: # %entry
   5050 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   5051 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5052 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5053 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   5054 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5055 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5056 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
   5057 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
   5058 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5059 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5060 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5061 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   5062 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
   5063 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5064 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5065 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   5066 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
   5067 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
   5068 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5069 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   5070 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   5071 ; AVX1-NEXT:    retq
   5072 ;
   5073 ; AVX2-LABEL: test125:
   5074 ; AVX2:       # %bb.0: # %entry
   5075 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   5076 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
   5077 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
   5078 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5079 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5080 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
   5081 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
   5082 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
   5083 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   5084 ; AVX2-NEXT:    retq
   5085 ;
   5086 ; AVX512F-LABEL: test125:
   5087 ; AVX512F:       # %bb.0: # %entry
   5088 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   5089 ; AVX512F-NEXT:    retq
   5090 entry:
   5091   %cmp = icmp ult <8 x i64> %a, %b
   5092   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5093   ret <8 x i64> %sel
   5094 }
   5095 
   5096 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
   5097 ; SSE2-LABEL: test126:
   5098 ; SSE2:       # %bb.0: # %entry
   5099 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   5100 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   5101 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   5102 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   5103 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   5104 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   5105 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   5106 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5107 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   5108 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   5109 ; SSE2-NEXT:    pand %xmm12, %xmm9
   5110 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   5111 ; SSE2-NEXT:    por %xmm9, %xmm10
   5112 ; SSE2-NEXT:    pand %xmm10, %xmm0
   5113 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   5114 ; SSE2-NEXT:    por %xmm10, %xmm0
   5115 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   5116 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   5117 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   5118 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5119 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   5120 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   5121 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   5122 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   5123 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   5124 ; SSE2-NEXT:    pand %xmm11, %xmm9
   5125 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   5126 ; SSE2-NEXT:    por %xmm9, %xmm4
   5127 ; SSE2-NEXT:    pand %xmm4, %xmm1
   5128 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   5129 ; SSE2-NEXT:    por %xmm4, %xmm1
   5130 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   5131 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5132 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   5133 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   5134 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   5135 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   5136 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   5137 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   5138 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   5139 ; SSE2-NEXT:    pand %xmm10, %xmm4
   5140 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   5141 ; SSE2-NEXT:    por %xmm4, %xmm5
   5142 ; SSE2-NEXT:    pand %xmm5, %xmm2
   5143 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   5144 ; SSE2-NEXT:    por %xmm5, %xmm2
   5145 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   5146 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5147 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   5148 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   5149 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   5150 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   5151 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   5152 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   5153 ; SSE2-NEXT:    pand %xmm6, %xmm4
   5154 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   5155 ; SSE2-NEXT:    por %xmm4, %xmm5
   5156 ; SSE2-NEXT:    pand %xmm5, %xmm3
   5157 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   5158 ; SSE2-NEXT:    por %xmm5, %xmm3
   5159 ; SSE2-NEXT:    retq
   5160 ;
   5161 ; SSE4-LABEL: test126:
   5162 ; SSE4:       # %bb.0: # %entry
   5163 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   5164 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
   5165 ; SSE4-NEXT:    movdqa %xmm0, %xmm10
   5166 ; SSE4-NEXT:    pxor %xmm8, %xmm10
   5167 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   5168 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5169 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
   5170 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
   5171 ; SSE4-NEXT:    movdqa %xmm1, %xmm9
   5172 ; SSE4-NEXT:    pxor %xmm8, %xmm9
   5173 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   5174 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5175 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
   5176 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   5177 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
   5178 ; SSE4-NEXT:    pxor %xmm8, %xmm1
   5179 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
   5180 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5181 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   5182 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   5183 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   5184 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5185 ; SSE4-NEXT:    pxor %xmm7, %xmm8
   5186 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
   5187 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   5188 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   5189 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5190 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5191 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5192 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5193 ; SSE4-NEXT:    retq
   5194 ;
   5195 ; AVX1-LABEL: test126:
   5196 ; AVX1:       # %bb.0: # %entry
   5197 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   5198 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5199 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5200 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   5201 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5202 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5203 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
   5204 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
   5205 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5206 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5207 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5208 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   5209 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
   5210 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   5211 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5212 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   5213 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
   5214 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
   5215 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5216 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   5217 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   5218 ; AVX1-NEXT:    retq
   5219 ;
   5220 ; AVX2-LABEL: test126:
   5221 ; AVX2:       # %bb.0: # %entry
   5222 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   5223 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
   5224 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
   5225 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5226 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5227 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
   5228 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
   5229 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
   5230 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   5231 ; AVX2-NEXT:    retq
   5232 ;
   5233 ; AVX512F-LABEL: test126:
   5234 ; AVX512F:       # %bb.0: # %entry
   5235 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   5236 ; AVX512F-NEXT:    retq
   5237 entry:
   5238   %cmp = icmp ule <8 x i64> %a, %b
   5239   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5240   ret <8 x i64> %sel
   5241 }
   5242 
   5243 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
   5244 ; SSE2-LABEL: test127:
   5245 ; SSE2:       # %bb.0: # %entry
   5246 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   5247 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
   5248 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   5249 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   5250 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   5251 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   5252 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   5253 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5254 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   5255 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   5256 ; SSE2-NEXT:    pand %xmm12, %xmm9
   5257 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   5258 ; SSE2-NEXT:    por %xmm9, %xmm10
   5259 ; SSE2-NEXT:    pand %xmm10, %xmm0
   5260 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   5261 ; SSE2-NEXT:    por %xmm10, %xmm0
   5262 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   5263 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   5264 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   5265 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5266 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   5267 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   5268 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   5269 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   5270 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   5271 ; SSE2-NEXT:    pand %xmm11, %xmm9
   5272 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   5273 ; SSE2-NEXT:    por %xmm9, %xmm4
   5274 ; SSE2-NEXT:    pand %xmm4, %xmm1
   5275 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   5276 ; SSE2-NEXT:    por %xmm4, %xmm1
   5277 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   5278 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5279 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   5280 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   5281 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   5282 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   5283 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   5284 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   5285 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   5286 ; SSE2-NEXT:    pand %xmm10, %xmm4
   5287 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   5288 ; SSE2-NEXT:    por %xmm4, %xmm5
   5289 ; SSE2-NEXT:    pand %xmm5, %xmm2
   5290 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   5291 ; SSE2-NEXT:    por %xmm5, %xmm2
   5292 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   5293 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5294 ; SSE2-NEXT:    pxor %xmm3, %xmm8
   5295 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   5296 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   5297 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   5298 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   5299 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   5300 ; SSE2-NEXT:    pand %xmm6, %xmm4
   5301 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   5302 ; SSE2-NEXT:    por %xmm4, %xmm5
   5303 ; SSE2-NEXT:    pand %xmm5, %xmm3
   5304 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   5305 ; SSE2-NEXT:    por %xmm5, %xmm3
   5306 ; SSE2-NEXT:    retq
   5307 ;
   5308 ; SSE4-LABEL: test127:
   5309 ; SSE4:       # %bb.0: # %entry
   5310 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   5311 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
   5312 ; SSE4-NEXT:    movdqa %xmm4, %xmm10
   5313 ; SSE4-NEXT:    pxor %xmm8, %xmm10
   5314 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5315 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
   5316 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
   5317 ; SSE4-NEXT:    movdqa %xmm5, %xmm9
   5318 ; SSE4-NEXT:    pxor %xmm8, %xmm9
   5319 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   5320 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5321 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
   5322 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   5323 ; SSE4-NEXT:    movdqa %xmm6, %xmm1
   5324 ; SSE4-NEXT:    pxor %xmm8, %xmm1
   5325 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   5326 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5327 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   5328 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   5329 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
   5330 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5331 ; SSE4-NEXT:    pxor %xmm3, %xmm8
   5332 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
   5333 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   5334 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   5335 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5336 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5337 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5338 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5339 ; SSE4-NEXT:    retq
   5340 ;
   5341 ; AVX1-LABEL: test127:
   5342 ; AVX1:       # %bb.0: # %entry
   5343 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5344 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5345 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5346 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5347 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5348 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5349 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
   5350 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
   5351 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5352 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5353 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5354 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5355 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
   5356 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5357 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5358 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   5359 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
   5360 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
   5361 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5362 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   5363 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   5364 ; AVX1-NEXT:    retq
   5365 ;
   5366 ; AVX2-LABEL: test127:
   5367 ; AVX2:       # %bb.0: # %entry
   5368 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   5369 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
   5370 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
   5371 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5372 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5373 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
   5374 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
   5375 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
   5376 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   5377 ; AVX2-NEXT:    retq
   5378 ;
   5379 ; AVX512F-LABEL: test127:
   5380 ; AVX512F:       # %bb.0: # %entry
   5381 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   5382 ; AVX512F-NEXT:    retq
   5383 entry:
   5384   %cmp = icmp ugt <8 x i64> %a, %b
   5385   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5386   ret <8 x i64> %sel
   5387 }
   5388 
   5389 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
   5390 ; SSE2-LABEL: test128:
   5391 ; SSE2:       # %bb.0: # %entry
   5392 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   5393 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
   5394 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   5395 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   5396 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   5397 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   5398 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   5399 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   5400 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   5401 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   5402 ; SSE2-NEXT:    pand %xmm12, %xmm9
   5403 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   5404 ; SSE2-NEXT:    por %xmm9, %xmm10
   5405 ; SSE2-NEXT:    pand %xmm10, %xmm0
   5406 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   5407 ; SSE2-NEXT:    por %xmm10, %xmm0
   5408 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   5409 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   5410 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   5411 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5412 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   5413 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   5414 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   5415 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   5416 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   5417 ; SSE2-NEXT:    pand %xmm11, %xmm9
   5418 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   5419 ; SSE2-NEXT:    por %xmm9, %xmm4
   5420 ; SSE2-NEXT:    pand %xmm4, %xmm1
   5421 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   5422 ; SSE2-NEXT:    por %xmm4, %xmm1
   5423 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   5424 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5425 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   5426 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   5427 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   5428 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   5429 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   5430 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   5431 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   5432 ; SSE2-NEXT:    pand %xmm10, %xmm4
   5433 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   5434 ; SSE2-NEXT:    por %xmm4, %xmm5
   5435 ; SSE2-NEXT:    pand %xmm5, %xmm2
   5436 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   5437 ; SSE2-NEXT:    por %xmm5, %xmm2
   5438 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   5439 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   5440 ; SSE2-NEXT:    pxor %xmm3, %xmm8
   5441 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   5442 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   5443 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   5444 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   5445 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   5446 ; SSE2-NEXT:    pand %xmm6, %xmm4
   5447 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   5448 ; SSE2-NEXT:    por %xmm4, %xmm5
   5449 ; SSE2-NEXT:    pand %xmm5, %xmm3
   5450 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   5451 ; SSE2-NEXT:    por %xmm5, %xmm3
   5452 ; SSE2-NEXT:    retq
   5453 ;
   5454 ; SSE4-LABEL: test128:
   5455 ; SSE4:       # %bb.0: # %entry
   5456 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   5457 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
   5458 ; SSE4-NEXT:    movdqa %xmm4, %xmm10
   5459 ; SSE4-NEXT:    pxor %xmm8, %xmm10
   5460 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5461 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
   5462 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
   5463 ; SSE4-NEXT:    movdqa %xmm5, %xmm9
   5464 ; SSE4-NEXT:    pxor %xmm8, %xmm9
   5465 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   5466 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5467 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
   5468 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   5469 ; SSE4-NEXT:    movdqa %xmm6, %xmm1
   5470 ; SSE4-NEXT:    pxor %xmm8, %xmm1
   5471 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   5472 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5473 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   5474 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   5475 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
   5476 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   5477 ; SSE4-NEXT:    pxor %xmm3, %xmm8
   5478 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
   5479 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   5480 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   5481 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   5482 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   5483 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   5484 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   5485 ; SSE4-NEXT:    retq
   5486 ;
   5487 ; AVX1-LABEL: test128:
   5488 ; AVX1:       # %bb.0: # %entry
   5489 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5490 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   5491 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5492 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   5493 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   5494 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   5495 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
   5496 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
   5497 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   5498 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   5499 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   5500 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5501 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
   5502 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5503 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   5504 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   5505 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
   5506 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
   5507 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   5508 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   5509 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   5510 ; AVX1-NEXT:    retq
   5511 ;
   5512 ; AVX2-LABEL: test128:
   5513 ; AVX2:       # %bb.0: # %entry
   5514 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   5515 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
   5516 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
   5517 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   5518 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   5519 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
   5520 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
   5521 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
   5522 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   5523 ; AVX2-NEXT:    retq
   5524 ;
   5525 ; AVX512F-LABEL: test128:
   5526 ; AVX512F:       # %bb.0: # %entry
   5527 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   5528 ; AVX512F-NEXT:    retq
   5529 entry:
   5530   %cmp = icmp uge <8 x i64> %a, %b
   5531   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
   5532   ret <8 x i64> %sel
   5533 }
   5534 
   5535 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
   5536 ; SSE2-LABEL: test129:
   5537 ; SSE2:       # %bb.0: # %entry
   5538 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   5539 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
   5540 ; SSE2-NEXT:    pand %xmm8, %xmm0
   5541 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   5542 ; SSE2-NEXT:    por %xmm0, %xmm8
   5543 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   5544 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
   5545 ; SSE2-NEXT:    pand %xmm4, %xmm1
   5546 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   5547 ; SSE2-NEXT:    por %xmm1, %xmm4
   5548 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   5549 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
   5550 ; SSE2-NEXT:    pand %xmm5, %xmm2
   5551 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   5552 ; SSE2-NEXT:    por %xmm2, %xmm5
   5553 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   5554 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
   5555 ; SSE2-NEXT:    pand %xmm6, %xmm3
   5556 ; SSE2-NEXT:    pandn %xmm7, %xmm6
   5557 ; SSE2-NEXT:    por %xmm3, %xmm6
   5558 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
   5559 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   5560 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
   5561 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
   5562 ; SSE2-NEXT:    retq
   5563 ;
   5564 ; SSE4-LABEL: test129:
   5565 ; SSE4:       # %bb.0: # %entry
   5566 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   5567 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   5568 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   5569 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   5570 ; SSE4-NEXT:    retq
   5571 ;
   5572 ; AVX1-LABEL: test129:
   5573 ; AVX1:       # %bb.0: # %entry
   5574 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5575 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   5576 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   5577 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   5578 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   5579 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5580 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5581 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   5582 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   5583 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   5584 ; AVX1-NEXT:    retq
   5585 ;
   5586 ; AVX2-LABEL: test129:
   5587 ; AVX2:       # %bb.0: # %entry
   5588 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   5589 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   5590 ; AVX2-NEXT:    retq
   5591 ;
   5592 ; AVX512BW-LABEL: test129:
   5593 ; AVX512BW:       # %bb.0: # %entry
   5594 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   5595 ; AVX512BW-NEXT:    retq
   5596 entry:
   5597   %cmp = icmp slt <64 x i8> %a, %b
   5598   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   5599   ret <64 x i8> %sel
   5600 }
   5601 
   5602 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
   5603 ; SSE2-LABEL: test130:
   5604 ; SSE2:       # %bb.0: # %entry
   5605 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   5606 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
   5607 ; SSE2-NEXT:    pand %xmm8, %xmm0
   5608 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   5609 ; SSE2-NEXT:    por %xmm0, %xmm8
   5610 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   5611 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
   5612 ; SSE2-NEXT:    pand %xmm4, %xmm1
   5613 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   5614 ; SSE2-NEXT:    por %xmm1, %xmm4
   5615 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   5616 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
   5617 ; SSE2-NEXT:    pand %xmm5, %xmm2
   5618 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   5619 ; SSE2-NEXT:    por %xmm2, %xmm5
   5620 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   5621 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
   5622 ; SSE2-NEXT:    pand %xmm6, %xmm3
   5623 ; SSE2-NEXT:    pandn %xmm7, %xmm6
   5624 ; SSE2-NEXT:    por %xmm3, %xmm6
   5625 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
   5626 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   5627 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
   5628 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
   5629 ; SSE2-NEXT:    retq
   5630 ;
   5631 ; SSE4-LABEL: test130:
   5632 ; SSE4:       # %bb.0: # %entry
   5633 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
   5634 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
   5635 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
   5636 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
   5637 ; SSE4-NEXT:    retq
   5638 ;
   5639 ; AVX1-LABEL: test130:
   5640 ; AVX1:       # %bb.0: # %entry
   5641 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5642 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   5643 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
   5644 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
   5645 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   5646 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5647 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5648 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
   5649 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
   5650 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   5651 ; AVX1-NEXT:    retq
   5652 ;
   5653 ; AVX2-LABEL: test130:
   5654 ; AVX2:       # %bb.0: # %entry
   5655 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
   5656 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
   5657 ; AVX2-NEXT:    retq
   5658 ;
   5659 ; AVX512BW-LABEL: test130:
   5660 ; AVX512BW:       # %bb.0: # %entry
   5661 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
   5662 ; AVX512BW-NEXT:    retq
   5663 entry:
   5664   %cmp = icmp sle <64 x i8> %a, %b
   5665   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   5666   ret <64 x i8> %sel
   5667 }
   5668 
   5669 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
   5670 ; SSE2-LABEL: test131:
   5671 ; SSE2:       # %bb.0: # %entry
   5672 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
   5673 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
   5674 ; SSE2-NEXT:    pand %xmm8, %xmm0
   5675 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   5676 ; SSE2-NEXT:    por %xmm8, %xmm0
   5677 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   5678 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
   5679 ; SSE2-NEXT:    pand %xmm4, %xmm1
   5680 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   5681 ; SSE2-NEXT:    por %xmm4, %xmm1
   5682 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   5683 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
   5684 ; SSE2-NEXT:    pand %xmm4, %xmm2
   5685 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   5686 ; SSE2-NEXT:    por %xmm4, %xmm2
   5687 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   5688 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
   5689 ; SSE2-NEXT:    pand %xmm4, %xmm3
   5690 ; SSE2-NEXT:    pandn %xmm7, %xmm4
   5691 ; SSE2-NEXT:    por %xmm4, %xmm3
   5692 ; SSE2-NEXT:    retq
   5693 ;
   5694 ; SSE4-LABEL: test131:
   5695 ; SSE4:       # %bb.0: # %entry
   5696 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   5697 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   5698 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   5699 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   5700 ; SSE4-NEXT:    retq
   5701 ;
   5702 ; AVX1-LABEL: test131:
   5703 ; AVX1:       # %bb.0: # %entry
   5704 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5705 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   5706 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   5707 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   5708 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   5709 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5710 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5711 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   5712 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   5713 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   5714 ; AVX1-NEXT:    retq
   5715 ;
   5716 ; AVX2-LABEL: test131:
   5717 ; AVX2:       # %bb.0: # %entry
   5718 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   5719 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   5720 ; AVX2-NEXT:    retq
   5721 ;
   5722 ; AVX512BW-LABEL: test131:
   5723 ; AVX512BW:       # %bb.0: # %entry
   5724 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   5725 ; AVX512BW-NEXT:    retq
   5726 entry:
   5727   %cmp = icmp sgt <64 x i8> %a, %b
   5728   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   5729   ret <64 x i8> %sel
   5730 }
   5731 
   5732 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
   5733 ; SSE2-LABEL: test132:
   5734 ; SSE2:       # %bb.0: # %entry
   5735 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
   5736 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
   5737 ; SSE2-NEXT:    pand %xmm8, %xmm0
   5738 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   5739 ; SSE2-NEXT:    por %xmm8, %xmm0
   5740 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   5741 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
   5742 ; SSE2-NEXT:    pand %xmm4, %xmm1
   5743 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   5744 ; SSE2-NEXT:    por %xmm4, %xmm1
   5745 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   5746 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
   5747 ; SSE2-NEXT:    pand %xmm4, %xmm2
   5748 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   5749 ; SSE2-NEXT:    por %xmm4, %xmm2
   5750 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   5751 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
   5752 ; SSE2-NEXT:    pand %xmm4, %xmm3
   5753 ; SSE2-NEXT:    pandn %xmm7, %xmm4
   5754 ; SSE2-NEXT:    por %xmm4, %xmm3
   5755 ; SSE2-NEXT:    retq
   5756 ;
   5757 ; SSE4-LABEL: test132:
   5758 ; SSE4:       # %bb.0: # %entry
   5759 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
   5760 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
   5761 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
   5762 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
   5763 ; SSE4-NEXT:    retq
   5764 ;
   5765 ; AVX1-LABEL: test132:
   5766 ; AVX1:       # %bb.0: # %entry
   5767 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5768 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   5769 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
   5770 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
   5771 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   5772 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5773 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5774 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
   5775 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
   5776 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   5777 ; AVX1-NEXT:    retq
   5778 ;
   5779 ; AVX2-LABEL: test132:
   5780 ; AVX2:       # %bb.0: # %entry
   5781 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
   5782 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
   5783 ; AVX2-NEXT:    retq
   5784 ;
   5785 ; AVX512BW-LABEL: test132:
   5786 ; AVX512BW:       # %bb.0: # %entry
   5787 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
   5788 ; AVX512BW-NEXT:    retq
   5789 entry:
   5790   %cmp = icmp sge <64 x i8> %a, %b
   5791   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   5792   ret <64 x i8> %sel
   5793 }
   5794 
   5795 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
   5796 ; SSE-LABEL: test133:
   5797 ; SSE:       # %bb.0: # %entry
   5798 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   5799 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   5800 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   5801 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   5802 ; SSE-NEXT:    retq
   5803 ;
   5804 ; AVX1-LABEL: test133:
   5805 ; AVX1:       # %bb.0: # %entry
   5806 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5807 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   5808 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   5809 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   5810 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   5811 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5812 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5813 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   5814 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   5815 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   5816 ; AVX1-NEXT:    retq
   5817 ;
   5818 ; AVX2-LABEL: test133:
   5819 ; AVX2:       # %bb.0: # %entry
   5820 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   5821 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   5822 ; AVX2-NEXT:    retq
   5823 ;
   5824 ; AVX512BW-LABEL: test133:
   5825 ; AVX512BW:       # %bb.0: # %entry
   5826 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   5827 ; AVX512BW-NEXT:    retq
   5828 entry:
   5829   %cmp = icmp ult <64 x i8> %a, %b
   5830   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   5831   ret <64 x i8> %sel
   5832 }
   5833 
   5834 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
   5835 ; SSE-LABEL: test134:
   5836 ; SSE:       # %bb.0: # %entry
   5837 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
   5838 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
   5839 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
   5840 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
   5841 ; SSE-NEXT:    retq
   5842 ;
   5843 ; AVX1-LABEL: test134:
   5844 ; AVX1:       # %bb.0: # %entry
   5845 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5846 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   5847 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
   5848 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
   5849 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   5850 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5851 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5852 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
   5853 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
   5854 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   5855 ; AVX1-NEXT:    retq
   5856 ;
   5857 ; AVX2-LABEL: test134:
   5858 ; AVX2:       # %bb.0: # %entry
   5859 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
   5860 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
   5861 ; AVX2-NEXT:    retq
   5862 ;
   5863 ; AVX512BW-LABEL: test134:
   5864 ; AVX512BW:       # %bb.0: # %entry
   5865 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
   5866 ; AVX512BW-NEXT:    retq
   5867 entry:
   5868   %cmp = icmp ule <64 x i8> %a, %b
   5869   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   5870   ret <64 x i8> %sel
   5871 }
   5872 
   5873 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
   5874 ; SSE-LABEL: test135:
   5875 ; SSE:       # %bb.0: # %entry
   5876 ; SSE-NEXT:    pminub %xmm4, %xmm0
   5877 ; SSE-NEXT:    pminub %xmm5, %xmm1
   5878 ; SSE-NEXT:    pminub %xmm6, %xmm2
   5879 ; SSE-NEXT:    pminub %xmm7, %xmm3
   5880 ; SSE-NEXT:    retq
   5881 ;
   5882 ; AVX1-LABEL: test135:
   5883 ; AVX1:       # %bb.0: # %entry
   5884 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5885 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   5886 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   5887 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   5888 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   5889 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5890 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5891 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   5892 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   5893 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   5894 ; AVX1-NEXT:    retq
   5895 ;
   5896 ; AVX2-LABEL: test135:
   5897 ; AVX2:       # %bb.0: # %entry
   5898 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   5899 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   5900 ; AVX2-NEXT:    retq
   5901 ;
   5902 ; AVX512BW-LABEL: test135:
   5903 ; AVX512BW:       # %bb.0: # %entry
   5904 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   5905 ; AVX512BW-NEXT:    retq
   5906 entry:
   5907   %cmp = icmp ugt <64 x i8> %a, %b
   5908   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   5909   ret <64 x i8> %sel
   5910 }
   5911 
   5912 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
   5913 ; SSE-LABEL: test136:
   5914 ; SSE:       # %bb.0: # %entry
   5915 ; SSE-NEXT:    pminub %xmm4, %xmm0
   5916 ; SSE-NEXT:    pminub %xmm5, %xmm1
   5917 ; SSE-NEXT:    pminub %xmm6, %xmm2
   5918 ; SSE-NEXT:    pminub %xmm7, %xmm3
   5919 ; SSE-NEXT:    retq
   5920 ;
   5921 ; AVX1-LABEL: test136:
   5922 ; AVX1:       # %bb.0: # %entry
   5923 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5924 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   5925 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
   5926 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
   5927 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   5928 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5929 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5930 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
   5931 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
   5932 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   5933 ; AVX1-NEXT:    retq
   5934 ;
   5935 ; AVX2-LABEL: test136:
   5936 ; AVX2:       # %bb.0: # %entry
   5937 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
   5938 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
   5939 ; AVX2-NEXT:    retq
   5940 ;
   5941 ; AVX512BW-LABEL: test136:
   5942 ; AVX512BW:       # %bb.0: # %entry
   5943 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
   5944 ; AVX512BW-NEXT:    retq
   5945 entry:
   5946   %cmp = icmp uge <64 x i8> %a, %b
   5947   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
   5948   ret <64 x i8> %sel
   5949 }
   5950 
   5951 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
   5952 ; SSE-LABEL: test137:
   5953 ; SSE:       # %bb.0: # %entry
   5954 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   5955 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   5956 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   5957 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   5958 ; SSE-NEXT:    retq
   5959 ;
   5960 ; AVX1-LABEL: test137:
   5961 ; AVX1:       # %bb.0: # %entry
   5962 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   5963 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   5964 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   5965 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   5966 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   5967 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   5968 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   5969 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   5970 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   5971 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   5972 ; AVX1-NEXT:    retq
   5973 ;
   5974 ; AVX2-LABEL: test137:
   5975 ; AVX2:       # %bb.0: # %entry
   5976 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   5977 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   5978 ; AVX2-NEXT:    retq
   5979 ;
   5980 ; AVX512BW-LABEL: test137:
   5981 ; AVX512BW:       # %bb.0: # %entry
   5982 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   5983 ; AVX512BW-NEXT:    retq
   5984 entry:
   5985   %cmp = icmp slt <32 x i16> %a, %b
   5986   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   5987   ret <32 x i16> %sel
   5988 }
   5989 
   5990 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
   5991 ; SSE-LABEL: test138:
   5992 ; SSE:       # %bb.0: # %entry
   5993 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
   5994 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
   5995 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
   5996 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
   5997 ; SSE-NEXT:    retq
   5998 ;
   5999 ; AVX1-LABEL: test138:
   6000 ; AVX1:       # %bb.0: # %entry
   6001 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6002 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6003 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
   6004 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
   6005 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6006 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6007 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6008 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
   6009 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
   6010 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6011 ; AVX1-NEXT:    retq
   6012 ;
   6013 ; AVX2-LABEL: test138:
   6014 ; AVX2:       # %bb.0: # %entry
   6015 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   6016 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
   6017 ; AVX2-NEXT:    retq
   6018 ;
   6019 ; AVX512BW-LABEL: test138:
   6020 ; AVX512BW:       # %bb.0: # %entry
   6021 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   6022 ; AVX512BW-NEXT:    retq
   6023 entry:
   6024   %cmp = icmp sle <32 x i16> %a, %b
   6025   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6026   ret <32 x i16> %sel
   6027 }
   6028 
   6029 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
   6030 ; SSE-LABEL: test139:
   6031 ; SSE:       # %bb.0: # %entry
   6032 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   6033 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   6034 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   6035 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   6036 ; SSE-NEXT:    retq
   6037 ;
   6038 ; AVX1-LABEL: test139:
   6039 ; AVX1:       # %bb.0: # %entry
   6040 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6041 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6042 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   6043 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   6044 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6045 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6046 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6047 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   6048 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   6049 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6050 ; AVX1-NEXT:    retq
   6051 ;
   6052 ; AVX2-LABEL: test139:
   6053 ; AVX2:       # %bb.0: # %entry
   6054 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   6055 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   6056 ; AVX2-NEXT:    retq
   6057 ;
   6058 ; AVX512BW-LABEL: test139:
   6059 ; AVX512BW:       # %bb.0: # %entry
   6060 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   6061 ; AVX512BW-NEXT:    retq
   6062 entry:
   6063   %cmp = icmp sgt <32 x i16> %a, %b
   6064   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6065   ret <32 x i16> %sel
   6066 }
   6067 
   6068 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
   6069 ; SSE-LABEL: test140:
   6070 ; SSE:       # %bb.0: # %entry
   6071 ; SSE-NEXT:    pminsw %xmm4, %xmm0
   6072 ; SSE-NEXT:    pminsw %xmm5, %xmm1
   6073 ; SSE-NEXT:    pminsw %xmm6, %xmm2
   6074 ; SSE-NEXT:    pminsw %xmm7, %xmm3
   6075 ; SSE-NEXT:    retq
   6076 ;
   6077 ; AVX1-LABEL: test140:
   6078 ; AVX1:       # %bb.0: # %entry
   6079 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6080 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6081 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
   6082 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
   6083 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6084 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6085 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6086 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
   6087 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
   6088 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6089 ; AVX1-NEXT:    retq
   6090 ;
   6091 ; AVX2-LABEL: test140:
   6092 ; AVX2:       # %bb.0: # %entry
   6093 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   6094 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
   6095 ; AVX2-NEXT:    retq
   6096 ;
   6097 ; AVX512BW-LABEL: test140:
   6098 ; AVX512BW:       # %bb.0: # %entry
   6099 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
   6100 ; AVX512BW-NEXT:    retq
   6101 entry:
   6102   %cmp = icmp sge <32 x i16> %a, %b
   6103   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6104   ret <32 x i16> %sel
   6105 }
   6106 
   6107 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
   6108 ; SSE2-LABEL: test141:
   6109 ; SSE2:       # %bb.0: # %entry
   6110 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
   6111 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6112 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   6113 ; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
   6114 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   6115 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   6116 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   6117 ; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
   6118 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   6119 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   6120 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   6121 ; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
   6122 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   6123 ; SSE2-NEXT:    pxor %xmm8, %xmm7
   6124 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   6125 ; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
   6126 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   6127 ; SSE2-NEXT:    retq
   6128 ;
   6129 ; SSE4-LABEL: test141:
   6130 ; SSE4:       # %bb.0: # %entry
   6131 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   6132 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   6133 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   6134 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   6135 ; SSE4-NEXT:    retq
   6136 ;
   6137 ; AVX1-LABEL: test141:
   6138 ; AVX1:       # %bb.0: # %entry
   6139 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6140 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6141 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   6142 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   6143 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6144 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6145 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6146 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   6147 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   6148 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6149 ; AVX1-NEXT:    retq
   6150 ;
   6151 ; AVX2-LABEL: test141:
   6152 ; AVX2:       # %bb.0: # %entry
   6153 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   6154 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   6155 ; AVX2-NEXT:    retq
   6156 ;
   6157 ; AVX512BW-LABEL: test141:
   6158 ; AVX512BW:       # %bb.0: # %entry
   6159 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   6160 ; AVX512BW-NEXT:    retq
   6161 entry:
   6162   %cmp = icmp ult <32 x i16> %a, %b
   6163   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6164   ret <32 x i16> %sel
   6165 }
   6166 
   6167 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
   6168 ; SSE2-LABEL: test142:
   6169 ; SSE2:       # %bb.0: # %entry
   6170 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
   6171 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6172 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   6173 ; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
   6174 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   6175 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   6176 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   6177 ; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
   6178 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   6179 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   6180 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   6181 ; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
   6182 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   6183 ; SSE2-NEXT:    pxor %xmm8, %xmm7
   6184 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   6185 ; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
   6186 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   6187 ; SSE2-NEXT:    retq
   6188 ;
   6189 ; SSE4-LABEL: test142:
   6190 ; SSE4:       # %bb.0: # %entry
   6191 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
   6192 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
   6193 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
   6194 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
   6195 ; SSE4-NEXT:    retq
   6196 ;
   6197 ; AVX1-LABEL: test142:
   6198 ; AVX1:       # %bb.0: # %entry
   6199 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6200 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6201 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
   6202 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
   6203 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6204 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6205 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6206 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
   6207 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
   6208 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6209 ; AVX1-NEXT:    retq
   6210 ;
   6211 ; AVX2-LABEL: test142:
   6212 ; AVX2:       # %bb.0: # %entry
   6213 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
   6214 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
   6215 ; AVX2-NEXT:    retq
   6216 ;
   6217 ; AVX512BW-LABEL: test142:
   6218 ; AVX512BW:       # %bb.0: # %entry
   6219 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
   6220 ; AVX512BW-NEXT:    retq
   6221 entry:
   6222   %cmp = icmp ule <32 x i16> %a, %b
   6223   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6224   ret <32 x i16> %sel
   6225 }
   6226 
   6227 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
   6228 ; SSE2-LABEL: test143:
   6229 ; SSE2:       # %bb.0: # %entry
   6230 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
   6231 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6232 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   6233 ; SSE2-NEXT:    pminsw %xmm4, %xmm0
   6234 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   6235 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   6236 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   6237 ; SSE2-NEXT:    pminsw %xmm5, %xmm1
   6238 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   6239 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   6240 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   6241 ; SSE2-NEXT:    pminsw %xmm6, %xmm2
   6242 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   6243 ; SSE2-NEXT:    pxor %xmm8, %xmm7
   6244 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   6245 ; SSE2-NEXT:    pminsw %xmm7, %xmm3
   6246 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   6247 ; SSE2-NEXT:    retq
   6248 ;
   6249 ; SSE4-LABEL: test143:
   6250 ; SSE4:       # %bb.0: # %entry
   6251 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   6252 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   6253 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   6254 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   6255 ; SSE4-NEXT:    retq
   6256 ;
   6257 ; AVX1-LABEL: test143:
   6258 ; AVX1:       # %bb.0: # %entry
   6259 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6260 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6261 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   6262 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   6263 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6264 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6265 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6266 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   6267 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   6268 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6269 ; AVX1-NEXT:    retq
   6270 ;
   6271 ; AVX2-LABEL: test143:
   6272 ; AVX2:       # %bb.0: # %entry
   6273 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   6274 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   6275 ; AVX2-NEXT:    retq
   6276 ;
   6277 ; AVX512BW-LABEL: test143:
   6278 ; AVX512BW:       # %bb.0: # %entry
   6279 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   6280 ; AVX512BW-NEXT:    retq
   6281 entry:
   6282   %cmp = icmp ugt <32 x i16> %a, %b
   6283   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6284   ret <32 x i16> %sel
   6285 }
   6286 
   6287 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
   6288 ; SSE2-LABEL: test144:
   6289 ; SSE2:       # %bb.0: # %entry
   6290 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
   6291 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6292 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   6293 ; SSE2-NEXT:    pminsw %xmm4, %xmm0
   6294 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   6295 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   6296 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   6297 ; SSE2-NEXT:    pminsw %xmm5, %xmm1
   6298 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   6299 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   6300 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   6301 ; SSE2-NEXT:    pminsw %xmm6, %xmm2
   6302 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   6303 ; SSE2-NEXT:    pxor %xmm8, %xmm7
   6304 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   6305 ; SSE2-NEXT:    pminsw %xmm7, %xmm3
   6306 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   6307 ; SSE2-NEXT:    retq
   6308 ;
   6309 ; SSE4-LABEL: test144:
   6310 ; SSE4:       # %bb.0: # %entry
   6311 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
   6312 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
   6313 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
   6314 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
   6315 ; SSE4-NEXT:    retq
   6316 ;
   6317 ; AVX1-LABEL: test144:
   6318 ; AVX1:       # %bb.0: # %entry
   6319 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6320 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6321 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
   6322 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
   6323 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6324 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6325 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6326 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
   6327 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
   6328 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6329 ; AVX1-NEXT:    retq
   6330 ;
   6331 ; AVX2-LABEL: test144:
   6332 ; AVX2:       # %bb.0: # %entry
   6333 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
   6334 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
   6335 ; AVX2-NEXT:    retq
   6336 ;
   6337 ; AVX512BW-LABEL: test144:
   6338 ; AVX512BW:       # %bb.0: # %entry
   6339 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
   6340 ; AVX512BW-NEXT:    retq
   6341 entry:
   6342   %cmp = icmp uge <32 x i16> %a, %b
   6343   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
   6344   ret <32 x i16> %sel
   6345 }
   6346 
   6347 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
   6348 ; SSE2-LABEL: test145:
   6349 ; SSE2:       # %bb.0: # %entry
   6350 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   6351 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
   6352 ; SSE2-NEXT:    pand %xmm8, %xmm0
   6353 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   6354 ; SSE2-NEXT:    por %xmm0, %xmm8
   6355 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   6356 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   6357 ; SSE2-NEXT:    pand %xmm4, %xmm1
   6358 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   6359 ; SSE2-NEXT:    por %xmm1, %xmm4
   6360 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   6361 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   6362 ; SSE2-NEXT:    pand %xmm5, %xmm2
   6363 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   6364 ; SSE2-NEXT:    por %xmm2, %xmm5
   6365 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   6366 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
   6367 ; SSE2-NEXT:    pand %xmm6, %xmm3
   6368 ; SSE2-NEXT:    pandn %xmm7, %xmm6
   6369 ; SSE2-NEXT:    por %xmm3, %xmm6
   6370 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
   6371 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   6372 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
   6373 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
   6374 ; SSE2-NEXT:    retq
   6375 ;
   6376 ; SSE4-LABEL: test145:
   6377 ; SSE4:       # %bb.0: # %entry
   6378 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   6379 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   6380 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   6381 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   6382 ; SSE4-NEXT:    retq
   6383 ;
   6384 ; AVX1-LABEL: test145:
   6385 ; AVX1:       # %bb.0: # %entry
   6386 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6387 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6388 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   6389 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   6390 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6391 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6392 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6393 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   6394 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   6395 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6396 ; AVX1-NEXT:    retq
   6397 ;
   6398 ; AVX2-LABEL: test145:
   6399 ; AVX2:       # %bb.0: # %entry
   6400 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   6401 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   6402 ; AVX2-NEXT:    retq
   6403 ;
   6404 ; AVX512F-LABEL: test145:
   6405 ; AVX512F:       # %bb.0: # %entry
   6406 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   6407 ; AVX512F-NEXT:    retq
   6408 entry:
   6409   %cmp = icmp slt <16 x i32> %a, %b
   6410   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6411   ret <16 x i32> %sel
   6412 }
   6413 
   6414 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
   6415 ; SSE2-LABEL: test146:
   6416 ; SSE2:       # %bb.0: # %entry
   6417 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
   6418 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
   6419 ; SSE2-NEXT:    pand %xmm8, %xmm0
   6420 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   6421 ; SSE2-NEXT:    por %xmm0, %xmm8
   6422 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   6423 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   6424 ; SSE2-NEXT:    pand %xmm4, %xmm1
   6425 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   6426 ; SSE2-NEXT:    por %xmm1, %xmm4
   6427 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   6428 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
   6429 ; SSE2-NEXT:    pand %xmm5, %xmm2
   6430 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   6431 ; SSE2-NEXT:    por %xmm2, %xmm5
   6432 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
   6433 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
   6434 ; SSE2-NEXT:    pand %xmm6, %xmm3
   6435 ; SSE2-NEXT:    pandn %xmm7, %xmm6
   6436 ; SSE2-NEXT:    por %xmm3, %xmm6
   6437 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
   6438 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   6439 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
   6440 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
   6441 ; SSE2-NEXT:    retq
   6442 ;
   6443 ; SSE4-LABEL: test146:
   6444 ; SSE4:       # %bb.0: # %entry
   6445 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
   6446 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
   6447 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
   6448 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
   6449 ; SSE4-NEXT:    retq
   6450 ;
   6451 ; AVX1-LABEL: test146:
   6452 ; AVX1:       # %bb.0: # %entry
   6453 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6454 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6455 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
   6456 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
   6457 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6458 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6459 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6460 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
   6461 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
   6462 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6463 ; AVX1-NEXT:    retq
   6464 ;
   6465 ; AVX2-LABEL: test146:
   6466 ; AVX2:       # %bb.0: # %entry
   6467 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
   6468 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
   6469 ; AVX2-NEXT:    retq
   6470 ;
   6471 ; AVX512F-LABEL: test146:
   6472 ; AVX512F:       # %bb.0: # %entry
   6473 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   6474 ; AVX512F-NEXT:    retq
   6475 entry:
   6476   %cmp = icmp sle <16 x i32> %a, %b
   6477   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6478   ret <16 x i32> %sel
   6479 }
   6480 
   6481 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
   6482 ; SSE2-LABEL: test147:
   6483 ; SSE2:       # %bb.0: # %entry
   6484 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
   6485 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
   6486 ; SSE2-NEXT:    pand %xmm8, %xmm0
   6487 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   6488 ; SSE2-NEXT:    por %xmm8, %xmm0
   6489 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   6490 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   6491 ; SSE2-NEXT:    pand %xmm4, %xmm1
   6492 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   6493 ; SSE2-NEXT:    por %xmm4, %xmm1
   6494 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   6495 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   6496 ; SSE2-NEXT:    pand %xmm4, %xmm2
   6497 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   6498 ; SSE2-NEXT:    por %xmm4, %xmm2
   6499 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   6500 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   6501 ; SSE2-NEXT:    pand %xmm4, %xmm3
   6502 ; SSE2-NEXT:    pandn %xmm7, %xmm4
   6503 ; SSE2-NEXT:    por %xmm4, %xmm3
   6504 ; SSE2-NEXT:    retq
   6505 ;
   6506 ; SSE4-LABEL: test147:
   6507 ; SSE4:       # %bb.0: # %entry
   6508 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   6509 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   6510 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   6511 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   6512 ; SSE4-NEXT:    retq
   6513 ;
   6514 ; AVX1-LABEL: test147:
   6515 ; AVX1:       # %bb.0: # %entry
   6516 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6517 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6518 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   6519 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   6520 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6521 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6522 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6523 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   6524 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   6525 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6526 ; AVX1-NEXT:    retq
   6527 ;
   6528 ; AVX2-LABEL: test147:
   6529 ; AVX2:       # %bb.0: # %entry
   6530 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   6531 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   6532 ; AVX2-NEXT:    retq
   6533 ;
   6534 ; AVX512F-LABEL: test147:
   6535 ; AVX512F:       # %bb.0: # %entry
   6536 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   6537 ; AVX512F-NEXT:    retq
   6538 entry:
   6539   %cmp = icmp sgt <16 x i32> %a, %b
   6540   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6541   ret <16 x i32> %sel
   6542 }
   6543 
   6544 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
   6545 ; SSE2-LABEL: test148:
   6546 ; SSE2:       # %bb.0: # %entry
   6547 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
   6548 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
   6549 ; SSE2-NEXT:    pand %xmm8, %xmm0
   6550 ; SSE2-NEXT:    pandn %xmm4, %xmm8
   6551 ; SSE2-NEXT:    por %xmm8, %xmm0
   6552 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   6553 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   6554 ; SSE2-NEXT:    pand %xmm4, %xmm1
   6555 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   6556 ; SSE2-NEXT:    por %xmm4, %xmm1
   6557 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   6558 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   6559 ; SSE2-NEXT:    pand %xmm4, %xmm2
   6560 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   6561 ; SSE2-NEXT:    por %xmm4, %xmm2
   6562 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   6563 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   6564 ; SSE2-NEXT:    pand %xmm4, %xmm3
   6565 ; SSE2-NEXT:    pandn %xmm7, %xmm4
   6566 ; SSE2-NEXT:    por %xmm4, %xmm3
   6567 ; SSE2-NEXT:    retq
   6568 ;
   6569 ; SSE4-LABEL: test148:
   6570 ; SSE4:       # %bb.0: # %entry
   6571 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
   6572 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
   6573 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
   6574 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
   6575 ; SSE4-NEXT:    retq
   6576 ;
   6577 ; AVX1-LABEL: test148:
   6578 ; AVX1:       # %bb.0: # %entry
   6579 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6580 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6581 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
   6582 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
   6583 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6584 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6585 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6586 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
   6587 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
   6588 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6589 ; AVX1-NEXT:    retq
   6590 ;
   6591 ; AVX2-LABEL: test148:
   6592 ; AVX2:       # %bb.0: # %entry
   6593 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
   6594 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
   6595 ; AVX2-NEXT:    retq
   6596 ;
   6597 ; AVX512F-LABEL: test148:
   6598 ; AVX512F:       # %bb.0: # %entry
   6599 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
   6600 ; AVX512F-NEXT:    retq
   6601 entry:
   6602   %cmp = icmp sge <16 x i32> %a, %b
   6603   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6604   ret <16 x i32> %sel
   6605 }
   6606 
   6607 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
   6608 ; SSE2-LABEL: test149:
   6609 ; SSE2:       # %bb.0: # %entry
   6610 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
   6611 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   6612 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
   6613 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   6614 ; SSE2-NEXT:    pxor %xmm9, %xmm1
   6615 ; SSE2-NEXT:    pxor %xmm9, %xmm0
   6616 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
   6617 ; SSE2-NEXT:    pand %xmm0, %xmm10
   6618 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   6619 ; SSE2-NEXT:    por %xmm10, %xmm0
   6620 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   6621 ; SSE2-NEXT:    pxor %xmm9, %xmm4
   6622 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
   6623 ; SSE2-NEXT:    pxor %xmm9, %xmm1
   6624 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
   6625 ; SSE2-NEXT:    pand %xmm1, %xmm8
   6626 ; SSE2-NEXT:    pandn %xmm5, %xmm1
   6627 ; SSE2-NEXT:    por %xmm8, %xmm1
   6628 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   6629 ; SSE2-NEXT:    pxor %xmm9, %xmm5
   6630 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   6631 ; SSE2-NEXT:    pxor %xmm9, %xmm4
   6632 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   6633 ; SSE2-NEXT:    pand %xmm4, %xmm2
   6634 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   6635 ; SSE2-NEXT:    por %xmm2, %xmm4
   6636 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
   6637 ; SSE2-NEXT:    pxor %xmm9, %xmm2
   6638 ; SSE2-NEXT:    pxor %xmm3, %xmm9
   6639 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
   6640 ; SSE2-NEXT:    pand %xmm9, %xmm3
   6641 ; SSE2-NEXT:    pandn %xmm7, %xmm9
   6642 ; SSE2-NEXT:    por %xmm9, %xmm3
   6643 ; SSE2-NEXT:    movdqa %xmm4, %xmm2
   6644 ; SSE2-NEXT:    retq
   6645 ;
   6646 ; SSE4-LABEL: test149:
   6647 ; SSE4:       # %bb.0: # %entry
   6648 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   6649 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   6650 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   6651 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   6652 ; SSE4-NEXT:    retq
   6653 ;
   6654 ; AVX1-LABEL: test149:
   6655 ; AVX1:       # %bb.0: # %entry
   6656 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6657 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6658 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   6659 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   6660 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6661 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6662 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6663 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   6664 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   6665 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6666 ; AVX1-NEXT:    retq
   6667 ;
   6668 ; AVX2-LABEL: test149:
   6669 ; AVX2:       # %bb.0: # %entry
   6670 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   6671 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   6672 ; AVX2-NEXT:    retq
   6673 ;
   6674 ; AVX512F-LABEL: test149:
   6675 ; AVX512F:       # %bb.0: # %entry
   6676 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   6677 ; AVX512F-NEXT:    retq
   6678 entry:
   6679   %cmp = icmp ult <16 x i32> %a, %b
   6680   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6681   ret <16 x i32> %sel
   6682 }
   6683 
   6684 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
   6685 ; SSE2-LABEL: test150:
   6686 ; SSE2:       # %bb.0: # %entry
   6687 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
   6688 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   6689 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
   6690 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
   6691 ; SSE2-NEXT:    pxor %xmm9, %xmm1
   6692 ; SSE2-NEXT:    pxor %xmm9, %xmm0
   6693 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
   6694 ; SSE2-NEXT:    pand %xmm0, %xmm10
   6695 ; SSE2-NEXT:    pandn %xmm4, %xmm0
   6696 ; SSE2-NEXT:    por %xmm10, %xmm0
   6697 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   6698 ; SSE2-NEXT:    pxor %xmm9, %xmm4
   6699 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
   6700 ; SSE2-NEXT:    pxor %xmm9, %xmm1
   6701 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
   6702 ; SSE2-NEXT:    pand %xmm1, %xmm8
   6703 ; SSE2-NEXT:    pandn %xmm5, %xmm1
   6704 ; SSE2-NEXT:    por %xmm8, %xmm1
   6705 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   6706 ; SSE2-NEXT:    pxor %xmm9, %xmm5
   6707 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   6708 ; SSE2-NEXT:    pxor %xmm9, %xmm4
   6709 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
   6710 ; SSE2-NEXT:    pand %xmm4, %xmm2
   6711 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   6712 ; SSE2-NEXT:    por %xmm2, %xmm4
   6713 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
   6714 ; SSE2-NEXT:    pxor %xmm9, %xmm2
   6715 ; SSE2-NEXT:    pxor %xmm3, %xmm9
   6716 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
   6717 ; SSE2-NEXT:    pand %xmm9, %xmm3
   6718 ; SSE2-NEXT:    pandn %xmm7, %xmm9
   6719 ; SSE2-NEXT:    por %xmm9, %xmm3
   6720 ; SSE2-NEXT:    movdqa %xmm4, %xmm2
   6721 ; SSE2-NEXT:    retq
   6722 ;
   6723 ; SSE4-LABEL: test150:
   6724 ; SSE4:       # %bb.0: # %entry
   6725 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
   6726 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
   6727 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
   6728 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
   6729 ; SSE4-NEXT:    retq
   6730 ;
   6731 ; AVX1-LABEL: test150:
   6732 ; AVX1:       # %bb.0: # %entry
   6733 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6734 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6735 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
   6736 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
   6737 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6738 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6739 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6740 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
   6741 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
   6742 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6743 ; AVX1-NEXT:    retq
   6744 ;
   6745 ; AVX2-LABEL: test150:
   6746 ; AVX2:       # %bb.0: # %entry
   6747 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
   6748 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
   6749 ; AVX2-NEXT:    retq
   6750 ;
   6751 ; AVX512F-LABEL: test150:
   6752 ; AVX512F:       # %bb.0: # %entry
   6753 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
   6754 ; AVX512F-NEXT:    retq
   6755 entry:
   6756   %cmp = icmp ule <16 x i32> %a, %b
   6757   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6758   ret <16 x i32> %sel
   6759 }
   6760 
   6761 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
   6762 ; SSE2-LABEL: test151:
   6763 ; SSE2:       # %bb.0: # %entry
   6764 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   6765 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   6766 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   6767 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   6768 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   6769 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   6770 ; SSE2-NEXT:    pand %xmm10, %xmm0
   6771 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   6772 ; SSE2-NEXT:    por %xmm10, %xmm0
   6773 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   6774 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   6775 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   6776 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6777 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
   6778 ; SSE2-NEXT:    pand %xmm4, %xmm1
   6779 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   6780 ; SSE2-NEXT:    por %xmm4, %xmm1
   6781 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   6782 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6783 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   6784 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   6785 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   6786 ; SSE2-NEXT:    pand %xmm5, %xmm2
   6787 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   6788 ; SSE2-NEXT:    por %xmm5, %xmm2
   6789 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   6790 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6791 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   6792 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
   6793 ; SSE2-NEXT:    pand %xmm8, %xmm3
   6794 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   6795 ; SSE2-NEXT:    por %xmm8, %xmm3
   6796 ; SSE2-NEXT:    retq
   6797 ;
   6798 ; SSE4-LABEL: test151:
   6799 ; SSE4:       # %bb.0: # %entry
   6800 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   6801 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   6802 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   6803 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   6804 ; SSE4-NEXT:    retq
   6805 ;
   6806 ; AVX1-LABEL: test151:
   6807 ; AVX1:       # %bb.0: # %entry
   6808 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6809 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6810 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   6811 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   6812 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6813 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6814 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6815 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   6816 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   6817 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6818 ; AVX1-NEXT:    retq
   6819 ;
   6820 ; AVX2-LABEL: test151:
   6821 ; AVX2:       # %bb.0: # %entry
   6822 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   6823 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   6824 ; AVX2-NEXT:    retq
   6825 ;
   6826 ; AVX512F-LABEL: test151:
   6827 ; AVX512F:       # %bb.0: # %entry
   6828 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   6829 ; AVX512F-NEXT:    retq
   6830 entry:
   6831   %cmp = icmp ugt <16 x i32> %a, %b
   6832   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6833   ret <16 x i32> %sel
   6834 }
   6835 
   6836 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
   6837 ; SSE2-LABEL: test152:
   6838 ; SSE2:       # %bb.0: # %entry
   6839 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   6840 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   6841 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   6842 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   6843 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   6844 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   6845 ; SSE2-NEXT:    pand %xmm10, %xmm0
   6846 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   6847 ; SSE2-NEXT:    por %xmm10, %xmm0
   6848 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   6849 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   6850 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   6851 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6852 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
   6853 ; SSE2-NEXT:    pand %xmm4, %xmm1
   6854 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   6855 ; SSE2-NEXT:    por %xmm4, %xmm1
   6856 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   6857 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6858 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   6859 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   6860 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   6861 ; SSE2-NEXT:    pand %xmm5, %xmm2
   6862 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   6863 ; SSE2-NEXT:    por %xmm5, %xmm2
   6864 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   6865 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6866 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   6867 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
   6868 ; SSE2-NEXT:    pand %xmm8, %xmm3
   6869 ; SSE2-NEXT:    pandn %xmm7, %xmm8
   6870 ; SSE2-NEXT:    por %xmm8, %xmm3
   6871 ; SSE2-NEXT:    retq
   6872 ;
   6873 ; SSE4-LABEL: test152:
   6874 ; SSE4:       # %bb.0: # %entry
   6875 ; SSE4-NEXT:    pminud %xmm4, %xmm0
   6876 ; SSE4-NEXT:    pminud %xmm5, %xmm1
   6877 ; SSE4-NEXT:    pminud %xmm6, %xmm2
   6878 ; SSE4-NEXT:    pminud %xmm7, %xmm3
   6879 ; SSE4-NEXT:    retq
   6880 ;
   6881 ; AVX1-LABEL: test152:
   6882 ; AVX1:       # %bb.0: # %entry
   6883 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   6884 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   6885 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
   6886 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
   6887 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   6888 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   6889 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   6890 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
   6891 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
   6892 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   6893 ; AVX1-NEXT:    retq
   6894 ;
   6895 ; AVX2-LABEL: test152:
   6896 ; AVX2:       # %bb.0: # %entry
   6897 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
   6898 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
   6899 ; AVX2-NEXT:    retq
   6900 ;
   6901 ; AVX512F-LABEL: test152:
   6902 ; AVX512F:       # %bb.0: # %entry
   6903 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
   6904 ; AVX512F-NEXT:    retq
   6905 entry:
   6906   %cmp = icmp uge <16 x i32> %a, %b
   6907   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
   6908   ret <16 x i32> %sel
   6909 }
   6910 
   6911 ; -----------------------
   6912 
   6913 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
   6914 ; SSE2-LABEL: test153:
   6915 ; SSE2:       # %bb.0: # %entry
   6916 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
   6917 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
   6918 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   6919 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   6920 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   6921 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   6922 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   6923 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   6924 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   6925 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   6926 ; SSE2-NEXT:    pand %xmm12, %xmm9
   6927 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   6928 ; SSE2-NEXT:    por %xmm9, %xmm10
   6929 ; SSE2-NEXT:    pand %xmm10, %xmm0
   6930 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   6931 ; SSE2-NEXT:    por %xmm10, %xmm0
   6932 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   6933 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   6934 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   6935 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6936 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   6937 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   6938 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   6939 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   6940 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   6941 ; SSE2-NEXT:    pand %xmm11, %xmm9
   6942 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   6943 ; SSE2-NEXT:    por %xmm9, %xmm4
   6944 ; SSE2-NEXT:    pand %xmm4, %xmm1
   6945 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   6946 ; SSE2-NEXT:    por %xmm4, %xmm1
   6947 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   6948 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6949 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   6950 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   6951 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   6952 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   6953 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   6954 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   6955 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   6956 ; SSE2-NEXT:    pand %xmm10, %xmm4
   6957 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   6958 ; SSE2-NEXT:    por %xmm4, %xmm5
   6959 ; SSE2-NEXT:    pand %xmm5, %xmm2
   6960 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   6961 ; SSE2-NEXT:    por %xmm5, %xmm2
   6962 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   6963 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   6964 ; SSE2-NEXT:    pxor %xmm3, %xmm8
   6965 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   6966 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   6967 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   6968 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   6969 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   6970 ; SSE2-NEXT:    pand %xmm6, %xmm4
   6971 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   6972 ; SSE2-NEXT:    por %xmm4, %xmm5
   6973 ; SSE2-NEXT:    pand %xmm5, %xmm3
   6974 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   6975 ; SSE2-NEXT:    por %xmm5, %xmm3
   6976 ; SSE2-NEXT:    retq
   6977 ;
   6978 ; SSE4-LABEL: test153:
   6979 ; SSE4:       # %bb.0: # %entry
   6980 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   6981 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   6982 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
   6983 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   6984 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
   6985 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   6986 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   6987 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   6988 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   6989 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   6990 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   6991 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   6992 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   6993 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   6994 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   6995 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   6996 ; SSE4-NEXT:    retq
   6997 ;
   6998 ; AVX1-LABEL: test153:
   6999 ; AVX1:       # %bb.0: # %entry
   7000 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7001 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7002 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7003 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
   7004 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   7005 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   7006 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7007 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7008 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   7009 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
   7010 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   7011 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7012 ; AVX1-NEXT:    retq
   7013 ;
   7014 ; AVX2-LABEL: test153:
   7015 ; AVX2:       # %bb.0: # %entry
   7016 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
   7017 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   7018 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
   7019 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7020 ; AVX2-NEXT:    retq
   7021 ;
   7022 ; AVX512F-LABEL: test153:
   7023 ; AVX512F:       # %bb.0: # %entry
   7024 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   7025 ; AVX512F-NEXT:    retq
   7026 entry:
   7027   %cmp = icmp slt <8 x i64> %a, %b
   7028   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7029   ret <8 x i64> %sel
   7030 }
   7031 
   7032 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
   7033 ; SSE2-LABEL: test154:
   7034 ; SSE2:       # %bb.0: # %entry
   7035 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
   7036 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
   7037 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7038 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   7039 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   7040 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   7041 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   7042 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   7043 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   7044 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   7045 ; SSE2-NEXT:    pand %xmm12, %xmm9
   7046 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   7047 ; SSE2-NEXT:    por %xmm9, %xmm10
   7048 ; SSE2-NEXT:    pand %xmm10, %xmm0
   7049 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   7050 ; SSE2-NEXT:    por %xmm10, %xmm0
   7051 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   7052 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7053 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   7054 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7055 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   7056 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   7057 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   7058 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   7059 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   7060 ; SSE2-NEXT:    pand %xmm11, %xmm9
   7061 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   7062 ; SSE2-NEXT:    por %xmm9, %xmm4
   7063 ; SSE2-NEXT:    pand %xmm4, %xmm1
   7064 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   7065 ; SSE2-NEXT:    por %xmm4, %xmm1
   7066 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   7067 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7068 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   7069 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   7070 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   7071 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   7072 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   7073 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   7074 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   7075 ; SSE2-NEXT:    pand %xmm10, %xmm4
   7076 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   7077 ; SSE2-NEXT:    por %xmm4, %xmm5
   7078 ; SSE2-NEXT:    pand %xmm5, %xmm2
   7079 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   7080 ; SSE2-NEXT:    por %xmm5, %xmm2
   7081 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   7082 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7083 ; SSE2-NEXT:    pxor %xmm3, %xmm8
   7084 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   7085 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   7086 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   7087 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   7088 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   7089 ; SSE2-NEXT:    pand %xmm6, %xmm4
   7090 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   7091 ; SSE2-NEXT:    por %xmm4, %xmm5
   7092 ; SSE2-NEXT:    pand %xmm5, %xmm3
   7093 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   7094 ; SSE2-NEXT:    por %xmm5, %xmm3
   7095 ; SSE2-NEXT:    retq
   7096 ;
   7097 ; SSE4-LABEL: test154:
   7098 ; SSE4:       # %bb.0: # %entry
   7099 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7100 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   7101 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
   7102 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   7103 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
   7104 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   7105 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   7106 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   7107 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   7108 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   7109 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
   7110 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   7111 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   7112 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   7113 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   7114 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   7115 ; SSE4-NEXT:    retq
   7116 ;
   7117 ; AVX1-LABEL: test154:
   7118 ; AVX1:       # %bb.0: # %entry
   7119 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7120 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   7121 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7122 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
   7123 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   7124 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   7125 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7126 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7127 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   7128 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
   7129 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   7130 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7131 ; AVX1-NEXT:    retq
   7132 ;
   7133 ; AVX2-LABEL: test154:
   7134 ; AVX2:       # %bb.0: # %entry
   7135 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
   7136 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   7137 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
   7138 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7139 ; AVX2-NEXT:    retq
   7140 ;
   7141 ; AVX512F-LABEL: test154:
   7142 ; AVX512F:       # %bb.0: # %entry
   7143 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   7144 ; AVX512F-NEXT:    retq
   7145 entry:
   7146   %cmp = icmp sle <8 x i64> %a, %b
   7147   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7148   ret <8 x i64> %sel
   7149 }
   7150 
   7151 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
   7152 ; SSE2-LABEL: test155:
   7153 ; SSE2:       # %bb.0: # %entry
   7154 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
   7155 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   7156 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7157 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   7158 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   7159 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   7160 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   7161 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   7162 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   7163 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   7164 ; SSE2-NEXT:    pand %xmm12, %xmm9
   7165 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   7166 ; SSE2-NEXT:    por %xmm9, %xmm10
   7167 ; SSE2-NEXT:    pand %xmm10, %xmm0
   7168 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   7169 ; SSE2-NEXT:    por %xmm10, %xmm0
   7170 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   7171 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7172 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   7173 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7174 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   7175 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   7176 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   7177 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   7178 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   7179 ; SSE2-NEXT:    pand %xmm11, %xmm9
   7180 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   7181 ; SSE2-NEXT:    por %xmm9, %xmm4
   7182 ; SSE2-NEXT:    pand %xmm4, %xmm1
   7183 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   7184 ; SSE2-NEXT:    por %xmm4, %xmm1
   7185 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   7186 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7187 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   7188 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   7189 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   7190 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   7191 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   7192 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   7193 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   7194 ; SSE2-NEXT:    pand %xmm10, %xmm4
   7195 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   7196 ; SSE2-NEXT:    por %xmm4, %xmm5
   7197 ; SSE2-NEXT:    pand %xmm5, %xmm2
   7198 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   7199 ; SSE2-NEXT:    por %xmm5, %xmm2
   7200 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   7201 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7202 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   7203 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   7204 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   7205 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   7206 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   7207 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   7208 ; SSE2-NEXT:    pand %xmm6, %xmm4
   7209 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   7210 ; SSE2-NEXT:    por %xmm4, %xmm5
   7211 ; SSE2-NEXT:    pand %xmm5, %xmm3
   7212 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   7213 ; SSE2-NEXT:    por %xmm5, %xmm3
   7214 ; SSE2-NEXT:    retq
   7215 ;
   7216 ; SSE4-LABEL: test155:
   7217 ; SSE4:       # %bb.0: # %entry
   7218 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
   7219 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   7220 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
   7221 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
   7222 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   7223 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   7224 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   7225 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
   7226 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   7227 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   7228 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
   7229 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   7230 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   7231 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   7232 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   7233 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   7234 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   7235 ; SSE4-NEXT:    retq
   7236 ;
   7237 ; AVX1-LABEL: test155:
   7238 ; AVX1:       # %bb.0: # %entry
   7239 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   7240 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   7241 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7242 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
   7243 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
   7244 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   7245 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   7246 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   7247 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   7248 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
   7249 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   7250 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7251 ; AVX1-NEXT:    retq
   7252 ;
   7253 ; AVX2-LABEL: test155:
   7254 ; AVX2:       # %bb.0: # %entry
   7255 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
   7256 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   7257 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
   7258 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7259 ; AVX2-NEXT:    retq
   7260 ;
   7261 ; AVX512F-LABEL: test155:
   7262 ; AVX512F:       # %bb.0: # %entry
   7263 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
   7264 ; AVX512F-NEXT:    retq
   7265 entry:
   7266   %cmp = icmp sgt <8 x i64> %a, %b
   7267   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7268   ret <8 x i64> %sel
   7269 }
   7270 
   7271 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
   7272 ; SSE2-LABEL: test156:
   7273 ; SSE2:       # %bb.0: # %entry
   7274 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   7275 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
   7276 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7277 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   7278 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   7279 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   7280 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   7281 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   7282 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   7283 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   7284 ; SSE2-NEXT:    pand %xmm12, %xmm9
   7285 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   7286 ; SSE2-NEXT:    por %xmm9, %xmm10
   7287 ; SSE2-NEXT:    pand %xmm10, %xmm0
   7288 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   7289 ; SSE2-NEXT:    por %xmm10, %xmm0
   7290 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   7291 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7292 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   7293 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7294 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   7295 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   7296 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   7297 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   7298 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   7299 ; SSE2-NEXT:    pand %xmm11, %xmm9
   7300 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   7301 ; SSE2-NEXT:    por %xmm9, %xmm4
   7302 ; SSE2-NEXT:    pand %xmm4, %xmm1
   7303 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   7304 ; SSE2-NEXT:    por %xmm4, %xmm1
   7305 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   7306 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7307 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   7308 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   7309 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   7310 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   7311 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   7312 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   7313 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   7314 ; SSE2-NEXT:    pand %xmm10, %xmm4
   7315 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   7316 ; SSE2-NEXT:    por %xmm4, %xmm5
   7317 ; SSE2-NEXT:    pand %xmm5, %xmm2
   7318 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   7319 ; SSE2-NEXT:    por %xmm5, %xmm2
   7320 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
   7321 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7322 ; SSE2-NEXT:    pxor %xmm3, %xmm8
   7323 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   7324 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   7325 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   7326 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   7327 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   7328 ; SSE2-NEXT:    pand %xmm6, %xmm4
   7329 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   7330 ; SSE2-NEXT:    por %xmm4, %xmm5
   7331 ; SSE2-NEXT:    pand %xmm5, %xmm3
   7332 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   7333 ; SSE2-NEXT:    por %xmm5, %xmm3
   7334 ; SSE2-NEXT:    retq
   7335 ;
   7336 ; SSE4-LABEL: test156:
   7337 ; SSE4:       # %bb.0: # %entry
   7338 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   7339 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
   7340 ; SSE4-NEXT:    movdqa %xmm4, %xmm10
   7341 ; SSE4-NEXT:    pxor %xmm8, %xmm10
   7342 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7343 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
   7344 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
   7345 ; SSE4-NEXT:    movdqa %xmm5, %xmm9
   7346 ; SSE4-NEXT:    pxor %xmm8, %xmm9
   7347 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   7348 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7349 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
   7350 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   7351 ; SSE4-NEXT:    movdqa %xmm6, %xmm1
   7352 ; SSE4-NEXT:    pxor %xmm8, %xmm1
   7353 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   7354 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7355 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   7356 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   7357 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
   7358 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7359 ; SSE4-NEXT:    pxor %xmm3, %xmm8
   7360 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
   7361 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   7362 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   7363 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   7364 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   7365 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   7366 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   7367 ; SSE4-NEXT:    retq
   7368 ;
   7369 ; AVX1-LABEL: test156:
   7370 ; AVX1:       # %bb.0: # %entry
   7371 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   7372 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   7373 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7374 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   7375 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   7376 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   7377 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
   7378 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
   7379 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   7380 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   7381 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   7382 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
   7383 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
   7384 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   7385 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7386 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   7387 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
   7388 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
   7389 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7390 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   7391 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7392 ; AVX1-NEXT:    retq
   7393 ;
   7394 ; AVX2-LABEL: test156:
   7395 ; AVX2:       # %bb.0: # %entry
   7396 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   7397 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
   7398 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
   7399 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   7400 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   7401 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
   7402 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
   7403 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
   7404 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7405 ; AVX2-NEXT:    retq
   7406 ;
   7407 ; AVX512F-LABEL: test156:
   7408 ; AVX512F:       # %bb.0: # %entry
   7409 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
   7410 ; AVX512F-NEXT:    retq
   7411 entry:
   7412   %cmp = icmp ule <8 x i64> %a, %b
   7413   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7414   ret <8 x i64> %sel
   7415 }
   7416 
   7417 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
   7418 ; SSE2-LABEL: test159:
   7419 ; SSE2:       # %bb.0: # %entry
   7420 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   7421 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   7422 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7423 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   7424 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   7425 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   7426 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   7427 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   7428 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   7429 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   7430 ; SSE2-NEXT:    pand %xmm12, %xmm9
   7431 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   7432 ; SSE2-NEXT:    por %xmm9, %xmm10
   7433 ; SSE2-NEXT:    pand %xmm10, %xmm0
   7434 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   7435 ; SSE2-NEXT:    por %xmm10, %xmm0
   7436 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   7437 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7438 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   7439 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7440 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   7441 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   7442 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   7443 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   7444 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   7445 ; SSE2-NEXT:    pand %xmm11, %xmm9
   7446 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   7447 ; SSE2-NEXT:    por %xmm9, %xmm4
   7448 ; SSE2-NEXT:    pand %xmm4, %xmm1
   7449 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   7450 ; SSE2-NEXT:    por %xmm4, %xmm1
   7451 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   7452 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7453 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   7454 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   7455 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   7456 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   7457 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   7458 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   7459 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   7460 ; SSE2-NEXT:    pand %xmm10, %xmm4
   7461 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   7462 ; SSE2-NEXT:    por %xmm4, %xmm5
   7463 ; SSE2-NEXT:    pand %xmm5, %xmm2
   7464 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   7465 ; SSE2-NEXT:    por %xmm5, %xmm2
   7466 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   7467 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7468 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   7469 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   7470 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   7471 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   7472 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   7473 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   7474 ; SSE2-NEXT:    pand %xmm6, %xmm4
   7475 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   7476 ; SSE2-NEXT:    por %xmm4, %xmm5
   7477 ; SSE2-NEXT:    pand %xmm5, %xmm3
   7478 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   7479 ; SSE2-NEXT:    por %xmm5, %xmm3
   7480 ; SSE2-NEXT:    retq
   7481 ;
   7482 ; SSE4-LABEL: test159:
   7483 ; SSE4:       # %bb.0: # %entry
   7484 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   7485 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
   7486 ; SSE4-NEXT:    movdqa %xmm0, %xmm10
   7487 ; SSE4-NEXT:    pxor %xmm8, %xmm10
   7488 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   7489 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7490 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
   7491 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
   7492 ; SSE4-NEXT:    movdqa %xmm1, %xmm9
   7493 ; SSE4-NEXT:    pxor %xmm8, %xmm9
   7494 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   7495 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7496 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
   7497 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   7498 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
   7499 ; SSE4-NEXT:    pxor %xmm8, %xmm1
   7500 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
   7501 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7502 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   7503 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   7504 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   7505 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7506 ; SSE4-NEXT:    pxor %xmm7, %xmm8
   7507 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
   7508 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   7509 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   7510 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   7511 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   7512 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   7513 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   7514 ; SSE4-NEXT:    retq
   7515 ;
   7516 ; AVX1-LABEL: test159:
   7517 ; AVX1:       # %bb.0: # %entry
   7518 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   7519 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   7520 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7521 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   7522 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   7523 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   7524 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
   7525 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
   7526 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   7527 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   7528 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   7529 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   7530 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
   7531 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   7532 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7533 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   7534 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
   7535 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
   7536 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7537 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   7538 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7539 ; AVX1-NEXT:    retq
   7540 ;
   7541 ; AVX2-LABEL: test159:
   7542 ; AVX2:       # %bb.0: # %entry
   7543 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   7544 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
   7545 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
   7546 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   7547 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   7548 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
   7549 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
   7550 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
   7551 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7552 ; AVX2-NEXT:    retq
   7553 ;
   7554 ; AVX512F-LABEL: test159:
   7555 ; AVX512F:       # %bb.0: # %entry
   7556 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   7557 ; AVX512F-NEXT:    retq
   7558 entry:
   7559   %cmp = icmp ugt <8 x i64> %a, %b
   7560   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7561   ret <8 x i64> %sel
   7562 }
   7563 
   7564 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
   7565 ; SSE2-LABEL: test160:
   7566 ; SSE2:       # %bb.0: # %entry
   7567 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
   7568 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
   7569 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7570 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   7571 ; SSE2-NEXT:    pxor %xmm8, %xmm10
   7572 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
   7573 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
   7574 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
   7575 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
   7576 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
   7577 ; SSE2-NEXT:    pand %xmm12, %xmm9
   7578 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
   7579 ; SSE2-NEXT:    por %xmm9, %xmm10
   7580 ; SSE2-NEXT:    pand %xmm10, %xmm0
   7581 ; SSE2-NEXT:    pandn %xmm4, %xmm10
   7582 ; SSE2-NEXT:    por %xmm10, %xmm0
   7583 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
   7584 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   7585 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   7586 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7587 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
   7588 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
   7589 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
   7590 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   7591 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
   7592 ; SSE2-NEXT:    pand %xmm11, %xmm9
   7593 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
   7594 ; SSE2-NEXT:    por %xmm9, %xmm4
   7595 ; SSE2-NEXT:    pand %xmm4, %xmm1
   7596 ; SSE2-NEXT:    pandn %xmm5, %xmm4
   7597 ; SSE2-NEXT:    por %xmm4, %xmm1
   7598 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   7599 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7600 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   7601 ; SSE2-NEXT:    pxor %xmm8, %xmm5
   7602 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
   7603 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
   7604 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
   7605 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
   7606 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   7607 ; SSE2-NEXT:    pand %xmm10, %xmm4
   7608 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
   7609 ; SSE2-NEXT:    por %xmm4, %xmm5
   7610 ; SSE2-NEXT:    pand %xmm5, %xmm2
   7611 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   7612 ; SSE2-NEXT:    por %xmm5, %xmm2
   7613 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   7614 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   7615 ; SSE2-NEXT:    pxor %xmm7, %xmm8
   7616 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
   7617 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   7618 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   7619 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
   7620 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
   7621 ; SSE2-NEXT:    pand %xmm6, %xmm4
   7622 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   7623 ; SSE2-NEXT:    por %xmm4, %xmm5
   7624 ; SSE2-NEXT:    pand %xmm5, %xmm3
   7625 ; SSE2-NEXT:    pandn %xmm7, %xmm5
   7626 ; SSE2-NEXT:    por %xmm5, %xmm3
   7627 ; SSE2-NEXT:    retq
   7628 ;
   7629 ; SSE4-LABEL: test160:
   7630 ; SSE4:       # %bb.0: # %entry
   7631 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
   7632 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
   7633 ; SSE4-NEXT:    movdqa %xmm0, %xmm10
   7634 ; SSE4-NEXT:    pxor %xmm8, %xmm10
   7635 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
   7636 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7637 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
   7638 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
   7639 ; SSE4-NEXT:    movdqa %xmm1, %xmm9
   7640 ; SSE4-NEXT:    pxor %xmm8, %xmm9
   7641 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   7642 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7643 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
   7644 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
   7645 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
   7646 ; SSE4-NEXT:    pxor %xmm8, %xmm1
   7647 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
   7648 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7649 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   7650 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
   7651 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   7652 ; SSE4-NEXT:    pxor %xmm8, %xmm0
   7653 ; SSE4-NEXT:    pxor %xmm7, %xmm8
   7654 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
   7655 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
   7656 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
   7657 ; SSE4-NEXT:    movapd %xmm4, %xmm0
   7658 ; SSE4-NEXT:    movapd %xmm5, %xmm1
   7659 ; SSE4-NEXT:    movapd %xmm6, %xmm2
   7660 ; SSE4-NEXT:    movapd %xmm7, %xmm3
   7661 ; SSE4-NEXT:    retq
   7662 ;
   7663 ; AVX1-LABEL: test160:
   7664 ; AVX1:       # %bb.0: # %entry
   7665 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   7666 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   7667 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7668 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
   7669 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
   7670 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
   7671 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
   7672 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
   7673 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
   7674 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
   7675 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
   7676 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   7677 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
   7678 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   7679 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
   7680 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   7681 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
   7682 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
   7683 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
   7684 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
   7685 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7686 ; AVX1-NEXT:    retq
   7687 ;
   7688 ; AVX2-LABEL: test160:
   7689 ; AVX2:       # %bb.0: # %entry
   7690 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   7691 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
   7692 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
   7693 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
   7694 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
   7695 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
   7696 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
   7697 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
   7698 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
   7699 ; AVX2-NEXT:    retq
   7700 ;
   7701 ; AVX512F-LABEL: test160:
   7702 ; AVX512F:       # %bb.0: # %entry
   7703 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
   7704 ; AVX512F-NEXT:    retq
   7705 entry:
   7706   %cmp = icmp uge <8 x i64> %a, %b
   7707   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
   7708   ret <8 x i64> %sel
   7709 }
   7710 
   7711 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
   7712 ; SSE2-LABEL: test161:
   7713 ; SSE2:       # %bb.0: # %entry
   7714 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   7715 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   7716 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   7717 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   7718 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   7719 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   7720 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   7721 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   7722 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   7723 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   7724 ; SSE2-NEXT:    pand %xmm8, %xmm5
   7725 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   7726 ; SSE2-NEXT:    por %xmm5, %xmm6
   7727 ; SSE2-NEXT:    pand %xmm6, %xmm0
   7728 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   7729 ; SSE2-NEXT:    por %xmm6, %xmm0
   7730 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   7731 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   7732 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   7733 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   7734 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   7735 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   7736 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   7737 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   7738 ; SSE2-NEXT:    pand %xmm6, %xmm2
   7739 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   7740 ; SSE2-NEXT:    por %xmm2, %xmm4
   7741 ; SSE2-NEXT:    pand %xmm4, %xmm1
   7742 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   7743 ; SSE2-NEXT:    por %xmm4, %xmm1
   7744 ; SSE2-NEXT:    retq
   7745 ;
   7746 ; SSE4-LABEL: test161:
   7747 ; SSE4:       # %bb.0: # %entry
   7748 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   7749 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   7750 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   7751 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   7752 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   7753 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   7754 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   7755 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   7756 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   7757 ; SSE4-NEXT:    retq
   7758 ;
   7759 ; AVX1-LABEL: test161:
   7760 ; AVX1:       # %bb.0: # %entry
   7761 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   7762 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   7763 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   7764 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
   7765 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   7766 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   7767 ; AVX1-NEXT:    retq
   7768 ;
   7769 ; AVX2-LABEL: test161:
   7770 ; AVX2:       # %bb.0: # %entry
   7771 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   7772 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   7773 ; AVX2-NEXT:    retq
   7774 ;
   7775 ; AVX512BW-LABEL: test161:
   7776 ; AVX512BW:       # %bb.0: # %entry
   7777 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   7778 ; AVX512BW-NEXT:    retq
   7779 entry:
   7780   %cmp = icmp slt <4 x i64> %a, %b
   7781   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   7782   ret <4 x i64> %sel
   7783 }
   7784 
   7785 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
   7786 ; SSE2-LABEL: test162:
   7787 ; SSE2:       # %bb.0: # %entry
   7788 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   7789 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   7790 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   7791 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   7792 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   7793 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   7794 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   7795 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   7796 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   7797 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   7798 ; SSE2-NEXT:    pand %xmm8, %xmm5
   7799 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   7800 ; SSE2-NEXT:    por %xmm5, %xmm6
   7801 ; SSE2-NEXT:    pand %xmm6, %xmm0
   7802 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   7803 ; SSE2-NEXT:    por %xmm6, %xmm0
   7804 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   7805 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   7806 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   7807 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   7808 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   7809 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   7810 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   7811 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   7812 ; SSE2-NEXT:    pand %xmm6, %xmm2
   7813 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   7814 ; SSE2-NEXT:    por %xmm2, %xmm4
   7815 ; SSE2-NEXT:    pand %xmm4, %xmm1
   7816 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   7817 ; SSE2-NEXT:    por %xmm4, %xmm1
   7818 ; SSE2-NEXT:    retq
   7819 ;
   7820 ; SSE4-LABEL: test162:
   7821 ; SSE4:       # %bb.0: # %entry
   7822 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   7823 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   7824 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   7825 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   7826 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   7827 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   7828 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   7829 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   7830 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   7831 ; SSE4-NEXT:    retq
   7832 ;
   7833 ; AVX1-LABEL: test162:
   7834 ; AVX1:       # %bb.0: # %entry
   7835 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   7836 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   7837 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   7838 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
   7839 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   7840 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   7841 ; AVX1-NEXT:    retq
   7842 ;
   7843 ; AVX2-LABEL: test162:
   7844 ; AVX2:       # %bb.0: # %entry
   7845 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   7846 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   7847 ; AVX2-NEXT:    retq
   7848 ;
   7849 ; AVX512BW-LABEL: test162:
   7850 ; AVX512BW:       # %bb.0: # %entry
   7851 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   7852 ; AVX512BW-NEXT:    retq
   7853 entry:
   7854   %cmp = icmp sle <4 x i64> %a, %b
   7855   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   7856   ret <4 x i64> %sel
   7857 }
   7858 
   7859 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
   7860 ; SSE2-LABEL: test163:
   7861 ; SSE2:       # %bb.0: # %entry
   7862 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   7863 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   7864 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   7865 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   7866 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   7867 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   7868 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   7869 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   7870 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   7871 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   7872 ; SSE2-NEXT:    pand %xmm8, %xmm5
   7873 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   7874 ; SSE2-NEXT:    por %xmm5, %xmm6
   7875 ; SSE2-NEXT:    pand %xmm6, %xmm0
   7876 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   7877 ; SSE2-NEXT:    por %xmm6, %xmm0
   7878 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   7879 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   7880 ; SSE2-NEXT:    pxor %xmm1, %xmm4
   7881 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   7882 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   7883 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   7884 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   7885 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   7886 ; SSE2-NEXT:    pand %xmm6, %xmm2
   7887 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   7888 ; SSE2-NEXT:    por %xmm2, %xmm4
   7889 ; SSE2-NEXT:    pand %xmm4, %xmm1
   7890 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   7891 ; SSE2-NEXT:    por %xmm4, %xmm1
   7892 ; SSE2-NEXT:    retq
   7893 ;
   7894 ; SSE4-LABEL: test163:
   7895 ; SSE4:       # %bb.0: # %entry
   7896 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   7897 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   7898 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   7899 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   7900 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   7901 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   7902 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   7903 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   7904 ; SSE4-NEXT:    retq
   7905 ;
   7906 ; AVX1-LABEL: test163:
   7907 ; AVX1:       # %bb.0: # %entry
   7908 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   7909 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   7910 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   7911 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
   7912 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   7913 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   7914 ; AVX1-NEXT:    retq
   7915 ;
   7916 ; AVX2-LABEL: test163:
   7917 ; AVX2:       # %bb.0: # %entry
   7918 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   7919 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   7920 ; AVX2-NEXT:    retq
   7921 ;
   7922 ; AVX512BW-LABEL: test163:
   7923 ; AVX512BW:       # %bb.0: # %entry
   7924 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   7925 ; AVX512BW-NEXT:    retq
   7926 entry:
   7927   %cmp = icmp sgt <4 x i64> %a, %b
   7928   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   7929   ret <4 x i64> %sel
   7930 }
   7931 
   7932 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
   7933 ; SSE2-LABEL: test164:
   7934 ; SSE2:       # %bb.0: # %entry
   7935 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   7936 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   7937 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   7938 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   7939 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   7940 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   7941 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   7942 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   7943 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   7944 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   7945 ; SSE2-NEXT:    pand %xmm8, %xmm5
   7946 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   7947 ; SSE2-NEXT:    por %xmm5, %xmm6
   7948 ; SSE2-NEXT:    pand %xmm6, %xmm0
   7949 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   7950 ; SSE2-NEXT:    por %xmm6, %xmm0
   7951 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   7952 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   7953 ; SSE2-NEXT:    pxor %xmm1, %xmm4
   7954 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   7955 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   7956 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   7957 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   7958 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   7959 ; SSE2-NEXT:    pand %xmm6, %xmm2
   7960 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   7961 ; SSE2-NEXT:    por %xmm2, %xmm4
   7962 ; SSE2-NEXT:    pand %xmm4, %xmm1
   7963 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   7964 ; SSE2-NEXT:    por %xmm4, %xmm1
   7965 ; SSE2-NEXT:    retq
   7966 ;
   7967 ; SSE4-LABEL: test164:
   7968 ; SSE4:       # %bb.0: # %entry
   7969 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   7970 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   7971 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   7972 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   7973 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   7974 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   7975 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   7976 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   7977 ; SSE4-NEXT:    retq
   7978 ;
   7979 ; AVX1-LABEL: test164:
   7980 ; AVX1:       # %bb.0: # %entry
   7981 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   7982 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   7983 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   7984 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
   7985 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   7986 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   7987 ; AVX1-NEXT:    retq
   7988 ;
   7989 ; AVX2-LABEL: test164:
   7990 ; AVX2:       # %bb.0: # %entry
   7991 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   7992 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   7993 ; AVX2-NEXT:    retq
   7994 ;
   7995 ; AVX512BW-LABEL: test164:
   7996 ; AVX512BW:       # %bb.0: # %entry
   7997 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   7998 ; AVX512BW-NEXT:    retq
   7999 entry:
   8000   %cmp = icmp sge <4 x i64> %a, %b
   8001   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8002   ret <4 x i64> %sel
   8003 }
   8004 
   8005 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
   8006 ; SSE2-LABEL: test165:
   8007 ; SSE2:       # %bb.0: # %entry
   8008 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   8009 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   8010 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8011 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   8012 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8013 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8014 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8015 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8016 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8017 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8018 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8019 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8020 ; SSE2-NEXT:    por %xmm5, %xmm6
   8021 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8022 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8023 ; SSE2-NEXT:    por %xmm6, %xmm0
   8024 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8025 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8026 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   8027 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8028 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8029 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8030 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8031 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8032 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8033 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8034 ; SSE2-NEXT:    por %xmm2, %xmm4
   8035 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8036 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8037 ; SSE2-NEXT:    por %xmm4, %xmm1
   8038 ; SSE2-NEXT:    retq
   8039 ;
   8040 ; SSE4-LABEL: test165:
   8041 ; SSE4:       # %bb.0: # %entry
   8042 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8043 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8044 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
   8045 ; SSE4-NEXT:    pxor %xmm5, %xmm6
   8046 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   8047 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8048 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   8049 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8050 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   8051 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8052 ; SSE4-NEXT:    pxor %xmm3, %xmm5
   8053 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
   8054 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8055 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8056 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8057 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8058 ; SSE4-NEXT:    retq
   8059 ;
   8060 ; AVX1-LABEL: test165:
   8061 ; AVX1:       # %bb.0: # %entry
   8062 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8063 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   8064 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8065 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   8066 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
   8067 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   8068 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
   8069 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
   8070 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   8071 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8072 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8073 ; AVX1-NEXT:    retq
   8074 ;
   8075 ; AVX2-LABEL: test165:
   8076 ; AVX2:       # %bb.0: # %entry
   8077 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   8078 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   8079 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   8080 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   8081 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8082 ; AVX2-NEXT:    retq
   8083 ;
   8084 ; AVX512BW-LABEL: test165:
   8085 ; AVX512BW:       # %bb.0: # %entry
   8086 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   8087 ; AVX512BW-NEXT:    retq
   8088 entry:
   8089   %cmp = icmp ult <4 x i64> %a, %b
   8090   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8091   ret <4 x i64> %sel
   8092 }
   8093 
   8094 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
   8095 ; SSE2-LABEL: test166:
   8096 ; SSE2:       # %bb.0: # %entry
   8097 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   8098 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   8099 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8100 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   8101 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8102 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8103 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8104 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8105 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8106 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8107 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8108 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8109 ; SSE2-NEXT:    por %xmm5, %xmm6
   8110 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8111 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8112 ; SSE2-NEXT:    por %xmm6, %xmm0
   8113 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8114 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8115 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   8116 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8117 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8118 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8119 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8120 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8121 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8122 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8123 ; SSE2-NEXT:    por %xmm2, %xmm4
   8124 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8125 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8126 ; SSE2-NEXT:    por %xmm4, %xmm1
   8127 ; SSE2-NEXT:    retq
   8128 ;
   8129 ; SSE4-LABEL: test166:
   8130 ; SSE4:       # %bb.0: # %entry
   8131 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8132 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8133 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
   8134 ; SSE4-NEXT:    pxor %xmm5, %xmm6
   8135 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   8136 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8137 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   8138 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8139 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   8140 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8141 ; SSE4-NEXT:    pxor %xmm3, %xmm5
   8142 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
   8143 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8144 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8145 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8146 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8147 ; SSE4-NEXT:    retq
   8148 ;
   8149 ; AVX1-LABEL: test166:
   8150 ; AVX1:       # %bb.0: # %entry
   8151 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8152 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   8153 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8154 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   8155 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
   8156 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   8157 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
   8158 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
   8159 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   8160 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8161 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8162 ; AVX1-NEXT:    retq
   8163 ;
   8164 ; AVX2-LABEL: test166:
   8165 ; AVX2:       # %bb.0: # %entry
   8166 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   8167 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   8168 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   8169 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   8170 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8171 ; AVX2-NEXT:    retq
   8172 ;
   8173 ; AVX512BW-LABEL: test166:
   8174 ; AVX512BW:       # %bb.0: # %entry
   8175 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   8176 ; AVX512BW-NEXT:    retq
   8177 entry:
   8178   %cmp = icmp ule <4 x i64> %a, %b
   8179   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8180   ret <4 x i64> %sel
   8181 }
   8182 
   8183 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
   8184 ; SSE2-LABEL: test167:
   8185 ; SSE2:       # %bb.0: # %entry
   8186 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   8187 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   8188 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8189 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   8190 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8191 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8192 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8193 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8194 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8195 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8196 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8197 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8198 ; SSE2-NEXT:    por %xmm5, %xmm6
   8199 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8200 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8201 ; SSE2-NEXT:    por %xmm6, %xmm0
   8202 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   8203 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8204 ; SSE2-NEXT:    pxor %xmm1, %xmm4
   8205 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8206 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8207 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8208 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8209 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8210 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8211 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8212 ; SSE2-NEXT:    por %xmm2, %xmm4
   8213 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8214 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8215 ; SSE2-NEXT:    por %xmm4, %xmm1
   8216 ; SSE2-NEXT:    retq
   8217 ;
   8218 ; SSE4-LABEL: test167:
   8219 ; SSE4:       # %bb.0: # %entry
   8220 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8221 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8222 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   8223 ; SSE4-NEXT:    pxor %xmm5, %xmm6
   8224 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8225 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   8226 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8227 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   8228 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8229 ; SSE4-NEXT:    pxor %xmm1, %xmm5
   8230 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
   8231 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8232 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8233 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8234 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8235 ; SSE4-NEXT:    retq
   8236 ;
   8237 ; AVX1-LABEL: test167:
   8238 ; AVX1:       # %bb.0: # %entry
   8239 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8240 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   8241 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8242 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   8243 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
   8244 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   8245 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
   8246 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
   8247 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   8248 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8249 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8250 ; AVX1-NEXT:    retq
   8251 ;
   8252 ; AVX2-LABEL: test167:
   8253 ; AVX2:       # %bb.0: # %entry
   8254 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   8255 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   8256 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   8257 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   8258 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8259 ; AVX2-NEXT:    retq
   8260 ;
   8261 ; AVX512BW-LABEL: test167:
   8262 ; AVX512BW:       # %bb.0: # %entry
   8263 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   8264 ; AVX512BW-NEXT:    retq
   8265 entry:
   8266   %cmp = icmp ugt <4 x i64> %a, %b
   8267   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8268   ret <4 x i64> %sel
   8269 }
   8270 
   8271 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
   8272 ; SSE2-LABEL: test168:
   8273 ; SSE2:       # %bb.0: # %entry
   8274 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   8275 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   8276 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8277 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   8278 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8279 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8280 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8281 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8282 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8283 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8284 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8285 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8286 ; SSE2-NEXT:    por %xmm5, %xmm6
   8287 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8288 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8289 ; SSE2-NEXT:    por %xmm6, %xmm0
   8290 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   8291 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8292 ; SSE2-NEXT:    pxor %xmm1, %xmm4
   8293 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8294 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8295 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8296 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8297 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8298 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8299 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8300 ; SSE2-NEXT:    por %xmm2, %xmm4
   8301 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8302 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8303 ; SSE2-NEXT:    por %xmm4, %xmm1
   8304 ; SSE2-NEXT:    retq
   8305 ;
   8306 ; SSE4-LABEL: test168:
   8307 ; SSE4:       # %bb.0: # %entry
   8308 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8309 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8310 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   8311 ; SSE4-NEXT:    pxor %xmm5, %xmm6
   8312 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8313 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   8314 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8315 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   8316 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8317 ; SSE4-NEXT:    pxor %xmm1, %xmm5
   8318 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
   8319 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8320 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8321 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8322 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8323 ; SSE4-NEXT:    retq
   8324 ;
   8325 ; AVX1-LABEL: test168:
   8326 ; AVX1:       # %bb.0: # %entry
   8327 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8328 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   8329 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8330 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   8331 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
   8332 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   8333 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
   8334 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
   8335 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   8336 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8337 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8338 ; AVX1-NEXT:    retq
   8339 ;
   8340 ; AVX2-LABEL: test168:
   8341 ; AVX2:       # %bb.0: # %entry
   8342 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   8343 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   8344 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   8345 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   8346 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8347 ; AVX2-NEXT:    retq
   8348 ;
   8349 ; AVX512BW-LABEL: test168:
   8350 ; AVX512BW:       # %bb.0: # %entry
   8351 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   8352 ; AVX512BW-NEXT:    retq
   8353 entry:
   8354   %cmp = icmp uge <4 x i64> %a, %b
   8355   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
   8356   ret <4 x i64> %sel
   8357 }
   8358 
   8359 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
   8360 ; SSE2-LABEL: test169:
   8361 ; SSE2:       # %bb.0: # %entry
   8362 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   8363 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   8364 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8365 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   8366 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8367 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8368 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8369 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8370 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8371 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8372 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8373 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8374 ; SSE2-NEXT:    por %xmm5, %xmm6
   8375 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8376 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8377 ; SSE2-NEXT:    por %xmm6, %xmm0
   8378 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   8379 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8380 ; SSE2-NEXT:    pxor %xmm1, %xmm4
   8381 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8382 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8383 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8384 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8385 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8386 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8387 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8388 ; SSE2-NEXT:    por %xmm2, %xmm4
   8389 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8390 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8391 ; SSE2-NEXT:    por %xmm4, %xmm1
   8392 ; SSE2-NEXT:    retq
   8393 ;
   8394 ; SSE4-LABEL: test169:
   8395 ; SSE4:       # %bb.0: # %entry
   8396 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8397 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   8398 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8399 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   8400 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   8401 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8402 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8403 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8404 ; SSE4-NEXT:    retq
   8405 ;
   8406 ; AVX1-LABEL: test169:
   8407 ; AVX1:       # %bb.0: # %entry
   8408 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8409 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   8410 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8411 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
   8412 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8413 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8414 ; AVX1-NEXT:    retq
   8415 ;
   8416 ; AVX2-LABEL: test169:
   8417 ; AVX2:       # %bb.0: # %entry
   8418 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   8419 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8420 ; AVX2-NEXT:    retq
   8421 ;
   8422 ; AVX512BW-LABEL: test169:
   8423 ; AVX512BW:       # %bb.0: # %entry
   8424 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   8425 ; AVX512BW-NEXT:    retq
   8426 entry:
   8427   %cmp = icmp slt <4 x i64> %a, %b
   8428   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   8429   ret <4 x i64> %sel
   8430 }
   8431 
   8432 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
   8433 ; SSE2-LABEL: test170:
   8434 ; SSE2:       # %bb.0: # %entry
   8435 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   8436 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   8437 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8438 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   8439 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8440 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8441 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8442 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8443 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8444 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8445 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8446 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8447 ; SSE2-NEXT:    por %xmm5, %xmm6
   8448 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8449 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8450 ; SSE2-NEXT:    por %xmm6, %xmm0
   8451 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   8452 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8453 ; SSE2-NEXT:    pxor %xmm1, %xmm4
   8454 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8455 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8456 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8457 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8458 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8459 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8460 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8461 ; SSE2-NEXT:    por %xmm2, %xmm4
   8462 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8463 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8464 ; SSE2-NEXT:    por %xmm4, %xmm1
   8465 ; SSE2-NEXT:    retq
   8466 ;
   8467 ; SSE4-LABEL: test170:
   8468 ; SSE4:       # %bb.0: # %entry
   8469 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8470 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   8471 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8472 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   8473 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   8474 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8475 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8476 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8477 ; SSE4-NEXT:    retq
   8478 ;
   8479 ; AVX1-LABEL: test170:
   8480 ; AVX1:       # %bb.0: # %entry
   8481 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8482 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   8483 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8484 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
   8485 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8486 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8487 ; AVX1-NEXT:    retq
   8488 ;
   8489 ; AVX2-LABEL: test170:
   8490 ; AVX2:       # %bb.0: # %entry
   8491 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
   8492 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8493 ; AVX2-NEXT:    retq
   8494 ;
   8495 ; AVX512BW-LABEL: test170:
   8496 ; AVX512BW:       # %bb.0: # %entry
   8497 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
   8498 ; AVX512BW-NEXT:    retq
   8499 entry:
   8500   %cmp = icmp sle <4 x i64> %a, %b
   8501   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   8502   ret <4 x i64> %sel
   8503 }
   8504 
   8505 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
   8506 ; SSE2-LABEL: test171:
   8507 ; SSE2:       # %bb.0: # %entry
   8508 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   8509 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   8510 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8511 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   8512 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8513 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8514 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8515 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8516 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8517 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8518 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8519 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8520 ; SSE2-NEXT:    por %xmm5, %xmm6
   8521 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8522 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8523 ; SSE2-NEXT:    por %xmm6, %xmm0
   8524 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8525 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8526 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   8527 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8528 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8529 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8530 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8531 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8532 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8533 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8534 ; SSE2-NEXT:    por %xmm2, %xmm4
   8535 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8536 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8537 ; SSE2-NEXT:    por %xmm4, %xmm1
   8538 ; SSE2-NEXT:    retq
   8539 ;
   8540 ; SSE4-LABEL: test171:
   8541 ; SSE4:       # %bb.0: # %entry
   8542 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8543 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   8544 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   8545 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8546 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   8547 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   8548 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8549 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8550 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8551 ; SSE4-NEXT:    retq
   8552 ;
   8553 ; AVX1-LABEL: test171:
   8554 ; AVX1:       # %bb.0: # %entry
   8555 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8556 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   8557 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8558 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
   8559 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8560 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8561 ; AVX1-NEXT:    retq
   8562 ;
   8563 ; AVX2-LABEL: test171:
   8564 ; AVX2:       # %bb.0: # %entry
   8565 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   8566 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8567 ; AVX2-NEXT:    retq
   8568 ;
   8569 ; AVX512BW-LABEL: test171:
   8570 ; AVX512BW:       # %bb.0: # %entry
   8571 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   8572 ; AVX512BW-NEXT:    retq
   8573 entry:
   8574   %cmp = icmp sgt <4 x i64> %a, %b
   8575   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   8576   ret <4 x i64> %sel
   8577 }
   8578 
   8579 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
   8580 ; SSE2-LABEL: test172:
   8581 ; SSE2:       # %bb.0: # %entry
   8582 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
   8583 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   8584 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8585 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   8586 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8587 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8588 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8589 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8590 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8591 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8592 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8593 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8594 ; SSE2-NEXT:    por %xmm5, %xmm6
   8595 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8596 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8597 ; SSE2-NEXT:    por %xmm6, %xmm0
   8598 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8599 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8600 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   8601 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8602 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8603 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8604 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8605 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8606 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8607 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8608 ; SSE2-NEXT:    por %xmm2, %xmm4
   8609 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8610 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8611 ; SSE2-NEXT:    por %xmm4, %xmm1
   8612 ; SSE2-NEXT:    retq
   8613 ;
   8614 ; SSE4-LABEL: test172:
   8615 ; SSE4:       # %bb.0: # %entry
   8616 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8617 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   8618 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
   8619 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8620 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   8621 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   8622 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8623 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8624 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8625 ; SSE4-NEXT:    retq
   8626 ;
   8627 ; AVX1-LABEL: test172:
   8628 ; AVX1:       # %bb.0: # %entry
   8629 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8630 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   8631 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   8632 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
   8633 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8634 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8635 ; AVX1-NEXT:    retq
   8636 ;
   8637 ; AVX2-LABEL: test172:
   8638 ; AVX2:       # %bb.0: # %entry
   8639 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
   8640 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8641 ; AVX2-NEXT:    retq
   8642 ;
   8643 ; AVX512BW-LABEL: test172:
   8644 ; AVX512BW:       # %bb.0: # %entry
   8645 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
   8646 ; AVX512BW-NEXT:    retq
   8647 entry:
   8648   %cmp = icmp sge <4 x i64> %a, %b
   8649   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   8650   ret <4 x i64> %sel
   8651 }
   8652 
   8653 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
   8654 ; SSE2-LABEL: test173:
   8655 ; SSE2:       # %bb.0: # %entry
   8656 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   8657 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   8658 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8659 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   8660 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8661 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8662 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8663 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8664 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8665 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8666 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8667 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8668 ; SSE2-NEXT:    por %xmm5, %xmm6
   8669 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8670 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8671 ; SSE2-NEXT:    por %xmm6, %xmm0
   8672 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   8673 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8674 ; SSE2-NEXT:    pxor %xmm1, %xmm4
   8675 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8676 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8677 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8678 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8679 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8680 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8681 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8682 ; SSE2-NEXT:    por %xmm2, %xmm4
   8683 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8684 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8685 ; SSE2-NEXT:    por %xmm4, %xmm1
   8686 ; SSE2-NEXT:    retq
   8687 ;
   8688 ; SSE4-LABEL: test173:
   8689 ; SSE4:       # %bb.0: # %entry
   8690 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8691 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8692 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   8693 ; SSE4-NEXT:    pxor %xmm5, %xmm6
   8694 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8695 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   8696 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8697 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   8698 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8699 ; SSE4-NEXT:    pxor %xmm1, %xmm5
   8700 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
   8701 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8702 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8703 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8704 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8705 ; SSE4-NEXT:    retq
   8706 ;
   8707 ; AVX1-LABEL: test173:
   8708 ; AVX1:       # %bb.0: # %entry
   8709 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8710 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   8711 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8712 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   8713 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
   8714 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   8715 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
   8716 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
   8717 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   8718 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8719 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8720 ; AVX1-NEXT:    retq
   8721 ;
   8722 ; AVX2-LABEL: test173:
   8723 ; AVX2:       # %bb.0: # %entry
   8724 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   8725 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   8726 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   8727 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   8728 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8729 ; AVX2-NEXT:    retq
   8730 ;
   8731 ; AVX512BW-LABEL: test173:
   8732 ; AVX512BW:       # %bb.0: # %entry
   8733 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   8734 ; AVX512BW-NEXT:    retq
   8735 entry:
   8736   %cmp = icmp ult <4 x i64> %a, %b
   8737   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   8738   ret <4 x i64> %sel
   8739 }
   8740 
   8741 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
   8742 ; SSE2-LABEL: test174:
   8743 ; SSE2:       # %bb.0: # %entry
   8744 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   8745 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   8746 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8747 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
   8748 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8749 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8750 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8751 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8752 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8753 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8754 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8755 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8756 ; SSE2-NEXT:    por %xmm5, %xmm6
   8757 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8758 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8759 ; SSE2-NEXT:    por %xmm6, %xmm0
   8760 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   8761 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8762 ; SSE2-NEXT:    pxor %xmm1, %xmm4
   8763 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8764 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8765 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8766 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8767 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8768 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8769 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8770 ; SSE2-NEXT:    por %xmm2, %xmm4
   8771 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8772 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8773 ; SSE2-NEXT:    por %xmm4, %xmm1
   8774 ; SSE2-NEXT:    retq
   8775 ;
   8776 ; SSE4-LABEL: test174:
   8777 ; SSE4:       # %bb.0: # %entry
   8778 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8779 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8780 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
   8781 ; SSE4-NEXT:    pxor %xmm5, %xmm6
   8782 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8783 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   8784 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8785 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
   8786 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8787 ; SSE4-NEXT:    pxor %xmm1, %xmm5
   8788 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
   8789 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8790 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8791 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8792 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8793 ; SSE4-NEXT:    retq
   8794 ;
   8795 ; AVX1-LABEL: test174:
   8796 ; AVX1:       # %bb.0: # %entry
   8797 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   8798 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   8799 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8800 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   8801 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
   8802 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   8803 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
   8804 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
   8805 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   8806 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8807 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8808 ; AVX1-NEXT:    retq
   8809 ;
   8810 ; AVX2-LABEL: test174:
   8811 ; AVX2:       # %bb.0: # %entry
   8812 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   8813 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
   8814 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
   8815 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   8816 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8817 ; AVX2-NEXT:    retq
   8818 ;
   8819 ; AVX512BW-LABEL: test174:
   8820 ; AVX512BW:       # %bb.0: # %entry
   8821 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
   8822 ; AVX512BW-NEXT:    retq
   8823 entry:
   8824   %cmp = icmp ule <4 x i64> %a, %b
   8825   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   8826   ret <4 x i64> %sel
   8827 }
   8828 
   8829 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
   8830 ; SSE2-LABEL: test175:
   8831 ; SSE2:       # %bb.0: # %entry
   8832 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   8833 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   8834 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8835 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   8836 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8837 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8838 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8839 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8840 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8841 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8842 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8843 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8844 ; SSE2-NEXT:    por %xmm5, %xmm6
   8845 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8846 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8847 ; SSE2-NEXT:    por %xmm6, %xmm0
   8848 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8849 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8850 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   8851 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8852 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8853 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8854 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8855 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8856 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8857 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8858 ; SSE2-NEXT:    por %xmm2, %xmm4
   8859 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8860 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8861 ; SSE2-NEXT:    por %xmm4, %xmm1
   8862 ; SSE2-NEXT:    retq
   8863 ;
   8864 ; SSE4-LABEL: test175:
   8865 ; SSE4:       # %bb.0: # %entry
   8866 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8867 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8868 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
   8869 ; SSE4-NEXT:    pxor %xmm5, %xmm6
   8870 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   8871 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8872 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   8873 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8874 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   8875 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8876 ; SSE4-NEXT:    pxor %xmm3, %xmm5
   8877 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
   8878 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8879 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8880 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8881 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8882 ; SSE4-NEXT:    retq
   8883 ;
   8884 ; AVX1-LABEL: test175:
   8885 ; AVX1:       # %bb.0: # %entry
   8886 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8887 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   8888 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8889 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   8890 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
   8891 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   8892 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
   8893 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
   8894 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   8895 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8896 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8897 ; AVX1-NEXT:    retq
   8898 ;
   8899 ; AVX2-LABEL: test175:
   8900 ; AVX2:       # %bb.0: # %entry
   8901 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   8902 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   8903 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   8904 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   8905 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8906 ; AVX2-NEXT:    retq
   8907 ;
   8908 ; AVX512BW-LABEL: test175:
   8909 ; AVX512BW:       # %bb.0: # %entry
   8910 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   8911 ; AVX512BW-NEXT:    retq
   8912 entry:
   8913   %cmp = icmp ugt <4 x i64> %a, %b
   8914   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   8915   ret <4 x i64> %sel
   8916 }
   8917 
   8918 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
   8919 ; SSE2-LABEL: test176:
   8920 ; SSE2:       # %bb.0: # %entry
   8921 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
   8922 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
   8923 ; SSE2-NEXT:    pxor %xmm4, %xmm5
   8924 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
   8925 ; SSE2-NEXT:    pxor %xmm4, %xmm6
   8926 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
   8927 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   8928 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
   8929 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
   8930 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
   8931 ; SSE2-NEXT:    pand %xmm8, %xmm5
   8932 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
   8933 ; SSE2-NEXT:    por %xmm5, %xmm6
   8934 ; SSE2-NEXT:    pand %xmm6, %xmm0
   8935 ; SSE2-NEXT:    pandn %xmm2, %xmm6
   8936 ; SSE2-NEXT:    por %xmm6, %xmm0
   8937 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   8938 ; SSE2-NEXT:    pxor %xmm4, %xmm2
   8939 ; SSE2-NEXT:    pxor %xmm3, %xmm4
   8940 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   8941 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   8942 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   8943 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
   8944 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   8945 ; SSE2-NEXT:    pand %xmm6, %xmm2
   8946 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   8947 ; SSE2-NEXT:    por %xmm2, %xmm4
   8948 ; SSE2-NEXT:    pand %xmm4, %xmm1
   8949 ; SSE2-NEXT:    pandn %xmm3, %xmm4
   8950 ; SSE2-NEXT:    por %xmm4, %xmm1
   8951 ; SSE2-NEXT:    retq
   8952 ;
   8953 ; SSE4-LABEL: test176:
   8954 ; SSE4:       # %bb.0: # %entry
   8955 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
   8956 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
   8957 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
   8958 ; SSE4-NEXT:    pxor %xmm5, %xmm6
   8959 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
   8960 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8961 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
   8962 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
   8963 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   8964 ; SSE4-NEXT:    pxor %xmm5, %xmm0
   8965 ; SSE4-NEXT:    pxor %xmm3, %xmm5
   8966 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
   8967 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
   8968 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
   8969 ; SSE4-NEXT:    movapd %xmm2, %xmm0
   8970 ; SSE4-NEXT:    movapd %xmm3, %xmm1
   8971 ; SSE4-NEXT:    retq
   8972 ;
   8973 ; AVX1-LABEL: test176:
   8974 ; AVX1:       # %bb.0: # %entry
   8975 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   8976 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
   8977 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
   8978 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   8979 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
   8980 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
   8981 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
   8982 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
   8983 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
   8984 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
   8985 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8986 ; AVX1-NEXT:    retq
   8987 ;
   8988 ; AVX2-LABEL: test176:
   8989 ; AVX2:       # %bb.0: # %entry
   8990 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
   8991 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
   8992 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
   8993 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
   8994 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
   8995 ; AVX2-NEXT:    retq
   8996 ;
   8997 ; AVX512BW-LABEL: test176:
   8998 ; AVX512BW:       # %bb.0: # %entry
   8999 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
   9000 ; AVX512BW-NEXT:    retq
   9001 entry:
   9002   %cmp = icmp uge <4 x i64> %a, %b
   9003   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
   9004   ret <4 x i64> %sel
   9005 }
   9006 
   9007 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
   9008 ; SSE2-LABEL: test177:
   9009 ; SSE2:       # %bb.0: # %entry
   9010 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   9011 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   9012 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9013 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   9014 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9015 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9016 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9017 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9018 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9019 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9020 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9021 ; SSE2-NEXT:    por %xmm2, %xmm3
   9022 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9023 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9024 ; SSE2-NEXT:    por %xmm3, %xmm0
   9025 ; SSE2-NEXT:    retq
   9026 ;
   9027 ; SSE4-LABEL: test177:
   9028 ; SSE4:       # %bb.0: # %entry
   9029 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9030 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   9031 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   9032 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9033 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9034 ; SSE4-NEXT:    retq
   9035 ;
   9036 ; AVX1-LABEL: test177:
   9037 ; AVX1:       # %bb.0: # %entry
   9038 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   9039 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9040 ; AVX1-NEXT:    retq
   9041 ;
   9042 ; AVX2-LABEL: test177:
   9043 ; AVX2:       # %bb.0: # %entry
   9044 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   9045 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9046 ; AVX2-NEXT:    retq
   9047 ;
   9048 ; AVX512BW-LABEL: test177:
   9049 ; AVX512BW:       # %bb.0: # %entry
   9050 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   9051 ; AVX512BW-NEXT:    retq
   9052 entry:
   9053   %cmp = icmp slt <2 x i64> %a, %b
   9054   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   9055   ret <2 x i64> %sel
   9056 }
   9057 
   9058 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
   9059 ; SSE2-LABEL: test178:
   9060 ; SSE2:       # %bb.0: # %entry
   9061 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   9062 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   9063 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9064 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   9065 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9066 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9067 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9068 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9069 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9070 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9071 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9072 ; SSE2-NEXT:    por %xmm2, %xmm3
   9073 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9074 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9075 ; SSE2-NEXT:    por %xmm3, %xmm0
   9076 ; SSE2-NEXT:    retq
   9077 ;
   9078 ; SSE4-LABEL: test178:
   9079 ; SSE4:       # %bb.0: # %entry
   9080 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9081 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   9082 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   9083 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9084 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9085 ; SSE4-NEXT:    retq
   9086 ;
   9087 ; AVX1-LABEL: test178:
   9088 ; AVX1:       # %bb.0: # %entry
   9089 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   9090 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9091 ; AVX1-NEXT:    retq
   9092 ;
   9093 ; AVX2-LABEL: test178:
   9094 ; AVX2:       # %bb.0: # %entry
   9095 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   9096 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9097 ; AVX2-NEXT:    retq
   9098 ;
   9099 ; AVX512BW-LABEL: test178:
   9100 ; AVX512BW:       # %bb.0: # %entry
   9101 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   9102 ; AVX512BW-NEXT:    retq
   9103 entry:
   9104   %cmp = icmp sle <2 x i64> %a, %b
   9105   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   9106   ret <2 x i64> %sel
   9107 }
   9108 
   9109 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
   9110 ; SSE2-LABEL: test179:
   9111 ; SSE2:       # %bb.0: # %entry
   9112 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   9113 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   9114 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9115 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   9116 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9117 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9118 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9119 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9120 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9121 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9122 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9123 ; SSE2-NEXT:    por %xmm2, %xmm3
   9124 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9125 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9126 ; SSE2-NEXT:    por %xmm3, %xmm0
   9127 ; SSE2-NEXT:    retq
   9128 ;
   9129 ; SSE4-LABEL: test179:
   9130 ; SSE4:       # %bb.0: # %entry
   9131 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9132 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   9133 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9134 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9135 ; SSE4-NEXT:    retq
   9136 ;
   9137 ; AVX1-LABEL: test179:
   9138 ; AVX1:       # %bb.0: # %entry
   9139 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   9140 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9141 ; AVX1-NEXT:    retq
   9142 ;
   9143 ; AVX2-LABEL: test179:
   9144 ; AVX2:       # %bb.0: # %entry
   9145 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   9146 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9147 ; AVX2-NEXT:    retq
   9148 ;
   9149 ; AVX512BW-LABEL: test179:
   9150 ; AVX512BW:       # %bb.0: # %entry
   9151 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   9152 ; AVX512BW-NEXT:    retq
   9153 entry:
   9154   %cmp = icmp sgt <2 x i64> %a, %b
   9155   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   9156   ret <2 x i64> %sel
   9157 }
   9158 
   9159 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
   9160 ; SSE2-LABEL: test180:
   9161 ; SSE2:       # %bb.0: # %entry
   9162 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   9163 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   9164 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9165 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   9166 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9167 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9168 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9169 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9170 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9171 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9172 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9173 ; SSE2-NEXT:    por %xmm2, %xmm3
   9174 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9175 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9176 ; SSE2-NEXT:    por %xmm3, %xmm0
   9177 ; SSE2-NEXT:    retq
   9178 ;
   9179 ; SSE4-LABEL: test180:
   9180 ; SSE4:       # %bb.0: # %entry
   9181 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9182 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   9183 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9184 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9185 ; SSE4-NEXT:    retq
   9186 ;
   9187 ; AVX1-LABEL: test180:
   9188 ; AVX1:       # %bb.0: # %entry
   9189 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   9190 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9191 ; AVX1-NEXT:    retq
   9192 ;
   9193 ; AVX2-LABEL: test180:
   9194 ; AVX2:       # %bb.0: # %entry
   9195 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   9196 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9197 ; AVX2-NEXT:    retq
   9198 ;
   9199 ; AVX512BW-LABEL: test180:
   9200 ; AVX512BW:       # %bb.0: # %entry
   9201 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   9202 ; AVX512BW-NEXT:    retq
   9203 entry:
   9204   %cmp = icmp sge <2 x i64> %a, %b
   9205   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   9206   ret <2 x i64> %sel
   9207 }
   9208 
   9209 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
   9210 ; SSE2-LABEL: test181:
   9211 ; SSE2:       # %bb.0: # %entry
   9212 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   9213 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   9214 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9215 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   9216 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9217 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9218 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9219 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9220 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9221 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9222 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9223 ; SSE2-NEXT:    por %xmm2, %xmm3
   9224 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9225 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9226 ; SSE2-NEXT:    por %xmm3, %xmm0
   9227 ; SSE2-NEXT:    retq
   9228 ;
   9229 ; SSE4-LABEL: test181:
   9230 ; SSE4:       # %bb.0: # %entry
   9231 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9232 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9233 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
   9234 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   9235 ; SSE4-NEXT:    pxor %xmm1, %xmm0
   9236 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   9237 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9238 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9239 ; SSE4-NEXT:    retq
   9240 ;
   9241 ; AVX1-LABEL: test181:
   9242 ; AVX1:       # %bb.0: # %entry
   9243 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9244 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   9245 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   9246 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9247 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9248 ; AVX1-NEXT:    retq
   9249 ;
   9250 ; AVX2-LABEL: test181:
   9251 ; AVX2:       # %bb.0: # %entry
   9252 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9253 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   9254 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   9255 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9256 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9257 ; AVX2-NEXT:    retq
   9258 ;
   9259 ; AVX512BW-LABEL: test181:
   9260 ; AVX512BW:       # %bb.0: # %entry
   9261 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   9262 ; AVX512BW-NEXT:    retq
   9263 entry:
   9264   %cmp = icmp ult <2 x i64> %a, %b
   9265   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   9266   ret <2 x i64> %sel
   9267 }
   9268 
   9269 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
   9270 ; SSE2-LABEL: test182:
   9271 ; SSE2:       # %bb.0: # %entry
   9272 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   9273 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   9274 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9275 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   9276 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9277 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9278 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9279 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9280 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9281 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9282 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9283 ; SSE2-NEXT:    por %xmm2, %xmm3
   9284 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9285 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9286 ; SSE2-NEXT:    por %xmm3, %xmm0
   9287 ; SSE2-NEXT:    retq
   9288 ;
   9289 ; SSE4-LABEL: test182:
   9290 ; SSE4:       # %bb.0: # %entry
   9291 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9292 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9293 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
   9294 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   9295 ; SSE4-NEXT:    pxor %xmm1, %xmm0
   9296 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   9297 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9298 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9299 ; SSE4-NEXT:    retq
   9300 ;
   9301 ; AVX1-LABEL: test182:
   9302 ; AVX1:       # %bb.0: # %entry
   9303 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9304 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   9305 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   9306 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9307 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9308 ; AVX1-NEXT:    retq
   9309 ;
   9310 ; AVX2-LABEL: test182:
   9311 ; AVX2:       # %bb.0: # %entry
   9312 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9313 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   9314 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   9315 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9316 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9317 ; AVX2-NEXT:    retq
   9318 ;
   9319 ; AVX512BW-LABEL: test182:
   9320 ; AVX512BW:       # %bb.0: # %entry
   9321 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   9322 ; AVX512BW-NEXT:    retq
   9323 entry:
   9324   %cmp = icmp ule <2 x i64> %a, %b
   9325   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   9326   ret <2 x i64> %sel
   9327 }
   9328 
   9329 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
   9330 ; SSE2-LABEL: test183:
   9331 ; SSE2:       # %bb.0: # %entry
   9332 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   9333 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   9334 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9335 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   9336 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9337 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9338 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9339 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9340 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9341 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9342 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9343 ; SSE2-NEXT:    por %xmm2, %xmm3
   9344 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9345 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9346 ; SSE2-NEXT:    por %xmm3, %xmm0
   9347 ; SSE2-NEXT:    retq
   9348 ;
   9349 ; SSE4-LABEL: test183:
   9350 ; SSE4:       # %bb.0: # %entry
   9351 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9352 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9353 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   9354 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   9355 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9356 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   9357 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9358 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9359 ; SSE4-NEXT:    retq
   9360 ;
   9361 ; AVX1-LABEL: test183:
   9362 ; AVX1:       # %bb.0: # %entry
   9363 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9364 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   9365 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   9366 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9367 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9368 ; AVX1-NEXT:    retq
   9369 ;
   9370 ; AVX2-LABEL: test183:
   9371 ; AVX2:       # %bb.0: # %entry
   9372 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9373 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   9374 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   9375 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9376 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9377 ; AVX2-NEXT:    retq
   9378 ;
   9379 ; AVX512BW-LABEL: test183:
   9380 ; AVX512BW:       # %bb.0: # %entry
   9381 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   9382 ; AVX512BW-NEXT:    retq
   9383 entry:
   9384   %cmp = icmp ugt <2 x i64> %a, %b
   9385   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   9386   ret <2 x i64> %sel
   9387 }
   9388 
   9389 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
   9390 ; SSE2-LABEL: test184:
   9391 ; SSE2:       # %bb.0: # %entry
   9392 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   9393 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   9394 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9395 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   9396 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9397 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9398 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9399 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9400 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9401 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9402 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9403 ; SSE2-NEXT:    por %xmm2, %xmm3
   9404 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9405 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9406 ; SSE2-NEXT:    por %xmm3, %xmm0
   9407 ; SSE2-NEXT:    retq
   9408 ;
   9409 ; SSE4-LABEL: test184:
   9410 ; SSE4:       # %bb.0: # %entry
   9411 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9412 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9413 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   9414 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   9415 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9416 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   9417 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9418 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9419 ; SSE4-NEXT:    retq
   9420 ;
   9421 ; AVX1-LABEL: test184:
   9422 ; AVX1:       # %bb.0: # %entry
   9423 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9424 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   9425 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   9426 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9427 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9428 ; AVX1-NEXT:    retq
   9429 ;
   9430 ; AVX2-LABEL: test184:
   9431 ; AVX2:       # %bb.0: # %entry
   9432 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9433 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   9434 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   9435 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9436 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9437 ; AVX2-NEXT:    retq
   9438 ;
   9439 ; AVX512BW-LABEL: test184:
   9440 ; AVX512BW:       # %bb.0: # %entry
   9441 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   9442 ; AVX512BW-NEXT:    retq
   9443 entry:
   9444   %cmp = icmp uge <2 x i64> %a, %b
   9445   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
   9446   ret <2 x i64> %sel
   9447 }
   9448 
   9449 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
   9450 ; SSE2-LABEL: test185:
   9451 ; SSE2:       # %bb.0: # %entry
   9452 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   9453 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   9454 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9455 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   9456 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9457 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9458 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9459 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9460 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9461 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9462 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9463 ; SSE2-NEXT:    por %xmm2, %xmm3
   9464 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9465 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9466 ; SSE2-NEXT:    por %xmm3, %xmm0
   9467 ; SSE2-NEXT:    retq
   9468 ;
   9469 ; SSE4-LABEL: test185:
   9470 ; SSE4:       # %bb.0: # %entry
   9471 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9472 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   9473 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9474 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9475 ; SSE4-NEXT:    retq
   9476 ;
   9477 ; AVX1-LABEL: test185:
   9478 ; AVX1:       # %bb.0: # %entry
   9479 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   9480 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9481 ; AVX1-NEXT:    retq
   9482 ;
   9483 ; AVX2-LABEL: test185:
   9484 ; AVX2:       # %bb.0: # %entry
   9485 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   9486 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9487 ; AVX2-NEXT:    retq
   9488 ;
   9489 ; AVX512BW-LABEL: test185:
   9490 ; AVX512BW:       # %bb.0: # %entry
   9491 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   9492 ; AVX512BW-NEXT:    retq
   9493 entry:
   9494   %cmp = icmp slt <2 x i64> %a, %b
   9495   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   9496   ret <2 x i64> %sel
   9497 }
   9498 
   9499 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
   9500 ; SSE2-LABEL: test186:
   9501 ; SSE2:       # %bb.0: # %entry
   9502 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   9503 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   9504 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9505 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   9506 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9507 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9508 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9509 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9510 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9511 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9512 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9513 ; SSE2-NEXT:    por %xmm2, %xmm3
   9514 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9515 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9516 ; SSE2-NEXT:    por %xmm3, %xmm0
   9517 ; SSE2-NEXT:    retq
   9518 ;
   9519 ; SSE4-LABEL: test186:
   9520 ; SSE4:       # %bb.0: # %entry
   9521 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9522 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
   9523 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9524 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9525 ; SSE4-NEXT:    retq
   9526 ;
   9527 ; AVX1-LABEL: test186:
   9528 ; AVX1:       # %bb.0: # %entry
   9529 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   9530 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9531 ; AVX1-NEXT:    retq
   9532 ;
   9533 ; AVX2-LABEL: test186:
   9534 ; AVX2:       # %bb.0: # %entry
   9535 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
   9536 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9537 ; AVX2-NEXT:    retq
   9538 ;
   9539 ; AVX512BW-LABEL: test186:
   9540 ; AVX512BW:       # %bb.0: # %entry
   9541 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
   9542 ; AVX512BW-NEXT:    retq
   9543 entry:
   9544   %cmp = icmp sle <2 x i64> %a, %b
   9545   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   9546   ret <2 x i64> %sel
   9547 }
   9548 
   9549 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
   9550 ; SSE2-LABEL: test187:
   9551 ; SSE2:       # %bb.0: # %entry
   9552 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   9553 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   9554 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9555 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   9556 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9557 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9558 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9559 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9560 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9561 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9562 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9563 ; SSE2-NEXT:    por %xmm2, %xmm3
   9564 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9565 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9566 ; SSE2-NEXT:    por %xmm3, %xmm0
   9567 ; SSE2-NEXT:    retq
   9568 ;
   9569 ; SSE4-LABEL: test187:
   9570 ; SSE4:       # %bb.0: # %entry
   9571 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9572 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   9573 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   9574 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9575 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9576 ; SSE4-NEXT:    retq
   9577 ;
   9578 ; AVX1-LABEL: test187:
   9579 ; AVX1:       # %bb.0: # %entry
   9580 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   9581 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9582 ; AVX1-NEXT:    retq
   9583 ;
   9584 ; AVX2-LABEL: test187:
   9585 ; AVX2:       # %bb.0: # %entry
   9586 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   9587 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9588 ; AVX2-NEXT:    retq
   9589 ;
   9590 ; AVX512BW-LABEL: test187:
   9591 ; AVX512BW:       # %bb.0: # %entry
   9592 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   9593 ; AVX512BW-NEXT:    retq
   9594 entry:
   9595   %cmp = icmp sgt <2 x i64> %a, %b
   9596   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   9597   ret <2 x i64> %sel
   9598 }
   9599 
   9600 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
   9601 ; SSE2-LABEL: test188:
   9602 ; SSE2:       # %bb.0: # %entry
   9603 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
   9604 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   9605 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9606 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   9607 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9608 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9609 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9610 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9611 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9612 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9613 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9614 ; SSE2-NEXT:    por %xmm2, %xmm3
   9615 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9616 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9617 ; SSE2-NEXT:    por %xmm3, %xmm0
   9618 ; SSE2-NEXT:    retq
   9619 ;
   9620 ; SSE4-LABEL: test188:
   9621 ; SSE4:       # %bb.0: # %entry
   9622 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9623 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
   9624 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
   9625 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9626 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9627 ; SSE4-NEXT:    retq
   9628 ;
   9629 ; AVX1-LABEL: test188:
   9630 ; AVX1:       # %bb.0: # %entry
   9631 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   9632 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9633 ; AVX1-NEXT:    retq
   9634 ;
   9635 ; AVX2-LABEL: test188:
   9636 ; AVX2:       # %bb.0: # %entry
   9637 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
   9638 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9639 ; AVX2-NEXT:    retq
   9640 ;
   9641 ; AVX512BW-LABEL: test188:
   9642 ; AVX512BW:       # %bb.0: # %entry
   9643 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
   9644 ; AVX512BW-NEXT:    retq
   9645 entry:
   9646   %cmp = icmp sge <2 x i64> %a, %b
   9647   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   9648   ret <2 x i64> %sel
   9649 }
   9650 
   9651 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
   9652 ; SSE2-LABEL: test189:
   9653 ; SSE2:       # %bb.0: # %entry
   9654 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   9655 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   9656 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9657 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   9658 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9659 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9660 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9661 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9662 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9663 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9664 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9665 ; SSE2-NEXT:    por %xmm2, %xmm3
   9666 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9667 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9668 ; SSE2-NEXT:    por %xmm3, %xmm0
   9669 ; SSE2-NEXT:    retq
   9670 ;
   9671 ; SSE4-LABEL: test189:
   9672 ; SSE4:       # %bb.0: # %entry
   9673 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9674 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9675 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   9676 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   9677 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9678 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   9679 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9680 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9681 ; SSE4-NEXT:    retq
   9682 ;
   9683 ; AVX1-LABEL: test189:
   9684 ; AVX1:       # %bb.0: # %entry
   9685 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9686 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   9687 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   9688 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9689 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9690 ; AVX1-NEXT:    retq
   9691 ;
   9692 ; AVX2-LABEL: test189:
   9693 ; AVX2:       # %bb.0: # %entry
   9694 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9695 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   9696 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   9697 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9698 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9699 ; AVX2-NEXT:    retq
   9700 ;
   9701 ; AVX512BW-LABEL: test189:
   9702 ; AVX512BW:       # %bb.0: # %entry
   9703 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   9704 ; AVX512BW-NEXT:    retq
   9705 entry:
   9706   %cmp = icmp ult <2 x i64> %a, %b
   9707   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   9708   ret <2 x i64> %sel
   9709 }
   9710 
   9711 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
   9712 ; SSE2-LABEL: test190:
   9713 ; SSE2:       # %bb.0: # %entry
   9714 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   9715 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   9716 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9717 ; SSE2-NEXT:    pxor %xmm0, %xmm2
   9718 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9719 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9720 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9721 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9722 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9723 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9724 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9725 ; SSE2-NEXT:    por %xmm2, %xmm3
   9726 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9727 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9728 ; SSE2-NEXT:    por %xmm3, %xmm0
   9729 ; SSE2-NEXT:    retq
   9730 ;
   9731 ; SSE4-LABEL: test190:
   9732 ; SSE4:       # %bb.0: # %entry
   9733 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9734 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9735 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
   9736 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   9737 ; SSE4-NEXT:    pxor %xmm2, %xmm0
   9738 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   9739 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9740 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9741 ; SSE4-NEXT:    retq
   9742 ;
   9743 ; AVX1-LABEL: test190:
   9744 ; AVX1:       # %bb.0: # %entry
   9745 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9746 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   9747 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   9748 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9749 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9750 ; AVX1-NEXT:    retq
   9751 ;
   9752 ; AVX2-LABEL: test190:
   9753 ; AVX2:       # %bb.0: # %entry
   9754 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9755 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
   9756 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
   9757 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9758 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9759 ; AVX2-NEXT:    retq
   9760 ;
   9761 ; AVX512BW-LABEL: test190:
   9762 ; AVX512BW:       # %bb.0: # %entry
   9763 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
   9764 ; AVX512BW-NEXT:    retq
   9765 entry:
   9766   %cmp = icmp ule <2 x i64> %a, %b
   9767   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   9768   ret <2 x i64> %sel
   9769 }
   9770 
   9771 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
   9772 ; SSE2-LABEL: test191:
   9773 ; SSE2:       # %bb.0: # %entry
   9774 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   9775 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   9776 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9777 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   9778 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9779 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9780 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9781 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9782 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9783 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9784 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9785 ; SSE2-NEXT:    por %xmm2, %xmm3
   9786 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9787 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9788 ; SSE2-NEXT:    por %xmm3, %xmm0
   9789 ; SSE2-NEXT:    retq
   9790 ;
   9791 ; SSE4-LABEL: test191:
   9792 ; SSE4:       # %bb.0: # %entry
   9793 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9794 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9795 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
   9796 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   9797 ; SSE4-NEXT:    pxor %xmm1, %xmm0
   9798 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   9799 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9800 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9801 ; SSE4-NEXT:    retq
   9802 ;
   9803 ; AVX1-LABEL: test191:
   9804 ; AVX1:       # %bb.0: # %entry
   9805 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9806 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   9807 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   9808 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9809 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9810 ; AVX1-NEXT:    retq
   9811 ;
   9812 ; AVX2-LABEL: test191:
   9813 ; AVX2:       # %bb.0: # %entry
   9814 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9815 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   9816 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   9817 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9818 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9819 ; AVX2-NEXT:    retq
   9820 ;
   9821 ; AVX512BW-LABEL: test191:
   9822 ; AVX512BW:       # %bb.0: # %entry
   9823 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   9824 ; AVX512BW-NEXT:    retq
   9825 entry:
   9826   %cmp = icmp ugt <2 x i64> %a, %b
   9827   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   9828   ret <2 x i64> %sel
   9829 }
   9830 
   9831 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
   9832 ; SSE2-LABEL: test192:
   9833 ; SSE2:       # %bb.0: # %entry
   9834 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
   9835 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   9836 ; SSE2-NEXT:    pxor %xmm2, %xmm3
   9837 ; SSE2-NEXT:    pxor %xmm1, %xmm2
   9838 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   9839 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   9840 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   9841 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
   9842 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   9843 ; SSE2-NEXT:    pand %xmm5, %xmm2
   9844 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   9845 ; SSE2-NEXT:    por %xmm2, %xmm3
   9846 ; SSE2-NEXT:    pand %xmm3, %xmm0
   9847 ; SSE2-NEXT:    pandn %xmm1, %xmm3
   9848 ; SSE2-NEXT:    por %xmm3, %xmm0
   9849 ; SSE2-NEXT:    retq
   9850 ;
   9851 ; SSE4-LABEL: test192:
   9852 ; SSE4:       # %bb.0: # %entry
   9853 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
   9854 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
   9855 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
   9856 ; SSE4-NEXT:    pxor %xmm0, %xmm3
   9857 ; SSE4-NEXT:    pxor %xmm1, %xmm0
   9858 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
   9859 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
   9860 ; SSE4-NEXT:    movapd %xmm1, %xmm0
   9861 ; SSE4-NEXT:    retq
   9862 ;
   9863 ; AVX1-LABEL: test192:
   9864 ; AVX1:       # %bb.0: # %entry
   9865 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9866 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   9867 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   9868 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9869 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9870 ; AVX1-NEXT:    retq
   9871 ;
   9872 ; AVX2-LABEL: test192:
   9873 ; AVX2:       # %bb.0: # %entry
   9874 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
   9875 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
   9876 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
   9877 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
   9878 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
   9879 ; AVX2-NEXT:    retq
   9880 ;
   9881 ; AVX512BW-LABEL: test192:
   9882 ; AVX512BW:       # %bb.0: # %entry
   9883 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
   9884 ; AVX512BW-NEXT:    retq
   9885 entry:
   9886   %cmp = icmp uge <2 x i64> %a, %b
   9887   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
   9888   ret <2 x i64> %sel
   9889 }
   9890