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