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