Home | History | Annotate | Download | only in InstSimplify
      1 ; RUN: opt < %s -instsimplify -S | FileCheck %s
      2 
      3 ; Cycle through all pairs of predicates to test
      4 ; simplification of range-intersection or range-union.
      5 
      6 ; eq
      7 ; x == 13 && x == 17
      8 
      9 define i1 @and_eq_eq(i8 %x) {
     10 ; CHECK-LABEL: @and_eq_eq(
     11 ; CHECK-NEXT:    ret i1 false
     12 ;
     13   %a = icmp eq i8 %x, 13
     14   %b = icmp eq i8 %x, 17
     15   %c = and i1 %a, %b
     16   ret i1 %c
     17 }
     18 
     19 ; x == 13 && x != 17
     20 
     21 define i1 @and_eq_ne(i8 %x) {
     22 ; CHECK-LABEL: @and_eq_ne(
     23 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
     24 ; CHECK-NEXT:    ret i1 [[A]]
     25 ;
     26   %a = icmp eq i8 %x, 13
     27   %b = icmp ne i8 %x, 17
     28   %c = and i1 %a, %b
     29   ret i1 %c
     30 }
     31 
     32 ; x == 13 && x >=s 17
     33 
     34 define i1 @and_eq_sge(i8 %x) {
     35 ; CHECK-LABEL: @and_eq_sge(
     36 ; CHECK-NEXT:    ret i1 false
     37 ;
     38   %a = icmp eq i8 %x, 13
     39   %b = icmp sge i8 %x, 17
     40   %c = and i1 %a, %b
     41   ret i1 %c
     42 }
     43 
     44 ; x == 13 && x >s 17
     45 
     46 define i1 @and_eq_sgt(i8 %x) {
     47 ; CHECK-LABEL: @and_eq_sgt(
     48 ; CHECK-NEXT:    ret i1 false
     49 ;
     50   %a = icmp eq i8 %x, 13
     51   %b = icmp sgt i8 %x, 17
     52   %c = and i1 %a, %b
     53   ret i1 %c
     54 }
     55 
     56 ; x == 13 && x <=s 17
     57 
     58 define i1 @and_eq_sle(i8 %x) {
     59 ; CHECK-LABEL: @and_eq_sle(
     60 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
     61 ; CHECK-NEXT:    ret i1 [[A]]
     62 ;
     63   %a = icmp eq i8 %x, 13
     64   %b = icmp sle i8 %x, 17
     65   %c = and i1 %a, %b
     66   ret i1 %c
     67 }
     68 
     69 ; x == 13 && x <s 17
     70 
     71 define i1 @and_eq_slt(i8 %x) {
     72 ; CHECK-LABEL: @and_eq_slt(
     73 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
     74 ; CHECK-NEXT:    ret i1 [[A]]
     75 ;
     76   %a = icmp eq i8 %x, 13
     77   %b = icmp slt i8 %x, 17
     78   %c = and i1 %a, %b
     79   ret i1 %c
     80 }
     81 
     82 ; x == 13 && x >=u 17
     83 
     84 define i1 @and_eq_uge(i8 %x) {
     85 ; CHECK-LABEL: @and_eq_uge(
     86 ; CHECK-NEXT:    ret i1 false
     87 ;
     88   %a = icmp eq i8 %x, 13
     89   %b = icmp uge i8 %x, 17
     90   %c = and i1 %a, %b
     91   ret i1 %c
     92 }
     93 
     94 ; x == 13 && x >u 17
     95 
     96 define i1 @and_eq_ugt(i8 %x) {
     97 ; CHECK-LABEL: @and_eq_ugt(
     98 ; CHECK-NEXT:    ret i1 false
     99 ;
    100   %a = icmp eq i8 %x, 13
    101   %b = icmp ugt i8 %x, 17
    102   %c = and i1 %a, %b
    103   ret i1 %c
    104 }
    105 
    106 ; x == 13 && x <=u 17
    107 
    108 define i1 @and_eq_ule(i8 %x) {
    109 ; CHECK-LABEL: @and_eq_ule(
    110 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
    111 ; CHECK-NEXT:    ret i1 [[A]]
    112 ;
    113   %a = icmp eq i8 %x, 13
    114   %b = icmp ule i8 %x, 17
    115   %c = and i1 %a, %b
    116   ret i1 %c
    117 }
    118 
    119 ; x == 13 && x <u 17
    120 
    121 define i1 @and_eq_ult(i8 %x) {
    122 ; CHECK-LABEL: @and_eq_ult(
    123 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
    124 ; CHECK-NEXT:    ret i1 [[A]]
    125 ;
    126   %a = icmp eq i8 %x, 13
    127   %b = icmp ult i8 %x, 17
    128   %c = and i1 %a, %b
    129   ret i1 %c
    130 }
    131 
    132 ; ne
    133 ; x != 13 && x == 17
    134 
    135 define i1 @and_ne_eq(i8 %x) {
    136 ; CHECK-LABEL: @and_ne_eq(
    137 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
    138 ; CHECK-NEXT:    ret i1 [[B]]
    139 ;
    140   %a = icmp ne i8 %x, 13
    141   %b = icmp eq i8 %x, 17
    142   %c = and i1 %a, %b
    143   ret i1 %c
    144 }
    145 
    146 ; x != 13 && x != 17
    147 
    148 define i1 @and_ne_ne(i8 %x) {
    149 ; CHECK-LABEL: @and_ne_ne(
    150 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
    151 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
    152 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    153 ; CHECK-NEXT:    ret i1 [[C]]
    154 ;
    155   %a = icmp ne i8 %x, 13
    156   %b = icmp ne i8 %x, 17
    157   %c = and i1 %a, %b
    158   ret i1 %c
    159 }
    160 
    161 ; x != 13 && x >=s 17
    162 
    163 define i1 @and_ne_sge(i8 %x) {
    164 ; CHECK-LABEL: @and_ne_sge(
    165 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
    166 ; CHECK-NEXT:    ret i1 [[B]]
    167 ;
    168   %a = icmp ne i8 %x, 13
    169   %b = icmp sge i8 %x, 17
    170   %c = and i1 %a, %b
    171   ret i1 %c
    172 }
    173 
    174 ; x != 13 && x >s 17
    175 
    176 define i1 @and_ne_sgt(i8 %x) {
    177 ; CHECK-LABEL: @and_ne_sgt(
    178 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
    179 ; CHECK-NEXT:    ret i1 [[B]]
    180 ;
    181   %a = icmp ne i8 %x, 13
    182   %b = icmp sgt i8 %x, 17
    183   %c = and i1 %a, %b
    184   ret i1 %c
    185 }
    186 
    187 ; x != 13 && x <=s 17
    188 
    189 define i1 @and_ne_sle(i8 %x) {
    190 ; CHECK-LABEL: @and_ne_sle(
    191 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
    192 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
    193 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    194 ; CHECK-NEXT:    ret i1 [[C]]
    195 ;
    196   %a = icmp ne i8 %x, 13
    197   %b = icmp sle i8 %x, 17
    198   %c = and i1 %a, %b
    199   ret i1 %c
    200 }
    201 
    202 ; x != 13 && x <s 17
    203 
    204 define i1 @and_ne_slt(i8 %x) {
    205 ; CHECK-LABEL: @and_ne_slt(
    206 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
    207 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
    208 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    209 ; CHECK-NEXT:    ret i1 [[C]]
    210 ;
    211   %a = icmp ne i8 %x, 13
    212   %b = icmp slt i8 %x, 17
    213   %c = and i1 %a, %b
    214   ret i1 %c
    215 }
    216 
    217 ; x != 13 && x >=u 17
    218 
    219 define i1 @and_ne_uge(i8 %x) {
    220 ; CHECK-LABEL: @and_ne_uge(
    221 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
    222 ; CHECK-NEXT:    ret i1 [[B]]
    223 ;
    224   %a = icmp ne i8 %x, 13
    225   %b = icmp uge i8 %x, 17
    226   %c = and i1 %a, %b
    227   ret i1 %c
    228 }
    229 
    230 ; x != 13 && x >u 17
    231 
    232 define i1 @and_ne_ugt(i8 %x) {
    233 ; CHECK-LABEL: @and_ne_ugt(
    234 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
    235 ; CHECK-NEXT:    ret i1 [[B]]
    236 ;
    237   %a = icmp ne i8 %x, 13
    238   %b = icmp ugt i8 %x, 17
    239   %c = and i1 %a, %b
    240   ret i1 %c
    241 }
    242 
    243 ; x != 13 && x <=u 17
    244 
    245 define i1 @and_ne_ule(i8 %x) {
    246 ; CHECK-LABEL: @and_ne_ule(
    247 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
    248 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
    249 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    250 ; CHECK-NEXT:    ret i1 [[C]]
    251 ;
    252   %a = icmp ne i8 %x, 13
    253   %b = icmp ule i8 %x, 17
    254   %c = and i1 %a, %b
    255   ret i1 %c
    256 }
    257 
    258 ; x != 13 && x <u 17
    259 
    260 define i1 @and_ne_ult(i8 %x) {
    261 ; CHECK-LABEL: @and_ne_ult(
    262 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
    263 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
    264 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    265 ; CHECK-NEXT:    ret i1 [[C]]
    266 ;
    267   %a = icmp ne i8 %x, 13
    268   %b = icmp ult i8 %x, 17
    269   %c = and i1 %a, %b
    270   ret i1 %c
    271 }
    272 
    273 ; sge
    274 ; x >=s 13 && x == 17
    275 
    276 define i1 @and_sge_eq(i8 %x) {
    277 ; CHECK-LABEL: @and_sge_eq(
    278 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
    279 ; CHECK-NEXT:    ret i1 [[B]]
    280 ;
    281   %a = icmp sge i8 %x, 13
    282   %b = icmp eq i8 %x, 17
    283   %c = and i1 %a, %b
    284   ret i1 %c
    285 }
    286 
    287 ; x >=s 13 && x != 17
    288 
    289 define i1 @and_sge_ne(i8 %x) {
    290 ; CHECK-LABEL: @and_sge_ne(
    291 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
    292 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
    293 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    294 ; CHECK-NEXT:    ret i1 [[C]]
    295 ;
    296   %a = icmp sge i8 %x, 13
    297   %b = icmp ne i8 %x, 17
    298   %c = and i1 %a, %b
    299   ret i1 %c
    300 }
    301 
    302 ; x >=s 13 && x >=s 17
    303 
    304 define i1 @and_sge_sge(i8 %x) {
    305 ; CHECK-LABEL: @and_sge_sge(
    306 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
    307 ; CHECK-NEXT:    ret i1 [[B]]
    308 ;
    309   %a = icmp sge i8 %x, 13
    310   %b = icmp sge i8 %x, 17
    311   %c = and i1 %a, %b
    312   ret i1 %c
    313 }
    314 
    315 ; x >=s 13 && x >s 17
    316 
    317 define i1 @and_sge_sgt(i8 %x) {
    318 ; CHECK-LABEL: @and_sge_sgt(
    319 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
    320 ; CHECK-NEXT:    ret i1 [[B]]
    321 ;
    322   %a = icmp sge i8 %x, 13
    323   %b = icmp sgt i8 %x, 17
    324   %c = and i1 %a, %b
    325   ret i1 %c
    326 }
    327 
    328 ; x >=s 13 && x <=s 17
    329 
    330 define i1 @and_sge_sle(i8 %x) {
    331 ; CHECK-LABEL: @and_sge_sle(
    332 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
    333 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
    334 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    335 ; CHECK-NEXT:    ret i1 [[C]]
    336 ;
    337   %a = icmp sge i8 %x, 13
    338   %b = icmp sle i8 %x, 17
    339   %c = and i1 %a, %b
    340   ret i1 %c
    341 }
    342 
    343 ; x >=s 13 && x <s 17
    344 
    345 define i1 @and_sge_slt(i8 %x) {
    346 ; CHECK-LABEL: @and_sge_slt(
    347 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
    348 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
    349 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    350 ; CHECK-NEXT:    ret i1 [[C]]
    351 ;
    352   %a = icmp sge i8 %x, 13
    353   %b = icmp slt i8 %x, 17
    354   %c = and i1 %a, %b
    355   ret i1 %c
    356 }
    357 
    358 ; x >=s 13 && x >=u 17
    359 
    360 define i1 @and_sge_uge(i8 %x) {
    361 ; CHECK-LABEL: @and_sge_uge(
    362 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
    363 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
    364 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    365 ; CHECK-NEXT:    ret i1 [[C]]
    366 ;
    367   %a = icmp sge i8 %x, 13
    368   %b = icmp uge i8 %x, 17
    369   %c = and i1 %a, %b
    370   ret i1 %c
    371 }
    372 
    373 ; x >=s 13 && x >u 17
    374 
    375 define i1 @and_sge_ugt(i8 %x) {
    376 ; CHECK-LABEL: @and_sge_ugt(
    377 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
    378 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
    379 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    380 ; CHECK-NEXT:    ret i1 [[C]]
    381 ;
    382   %a = icmp sge i8 %x, 13
    383   %b = icmp ugt i8 %x, 17
    384   %c = and i1 %a, %b
    385   ret i1 %c
    386 }
    387 
    388 ; x >=s 13 && x <=u 17
    389 
    390 define i1 @and_sge_ule(i8 %x) {
    391 ; CHECK-LABEL: @and_sge_ule(
    392 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
    393 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
    394 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    395 ; CHECK-NEXT:    ret i1 [[C]]
    396 ;
    397   %a = icmp sge i8 %x, 13
    398   %b = icmp ule i8 %x, 17
    399   %c = and i1 %a, %b
    400   ret i1 %c
    401 }
    402 
    403 ; x >=s 13 && x <u 17
    404 
    405 define i1 @and_sge_ult(i8 %x) {
    406 ; CHECK-LABEL: @and_sge_ult(
    407 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
    408 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
    409 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    410 ; CHECK-NEXT:    ret i1 [[C]]
    411 ;
    412   %a = icmp sge i8 %x, 13
    413   %b = icmp ult i8 %x, 17
    414   %c = and i1 %a, %b
    415   ret i1 %c
    416 }
    417 
    418 ; sgt
    419 ; x >s 13 && x == 17
    420 
    421 define i1 @and_sgt_eq(i8 %x) {
    422 ; CHECK-LABEL: @and_sgt_eq(
    423 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
    424 ; CHECK-NEXT:    ret i1 [[B]]
    425 ;
    426   %a = icmp sgt i8 %x, 13
    427   %b = icmp eq i8 %x, 17
    428   %c = and i1 %a, %b
    429   ret i1 %c
    430 }
    431 
    432 ; x >s 13 && x != 17
    433 
    434 define i1 @and_sgt_ne(i8 %x) {
    435 ; CHECK-LABEL: @and_sgt_ne(
    436 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
    437 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
    438 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    439 ; CHECK-NEXT:    ret i1 [[C]]
    440 ;
    441   %a = icmp sgt i8 %x, 13
    442   %b = icmp ne i8 %x, 17
    443   %c = and i1 %a, %b
    444   ret i1 %c
    445 }
    446 
    447 ; x >s 13 && x >=s 17
    448 
    449 define i1 @and_sgt_sge(i8 %x) {
    450 ; CHECK-LABEL: @and_sgt_sge(
    451 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
    452 ; CHECK-NEXT:    ret i1 [[B]]
    453 ;
    454   %a = icmp sgt i8 %x, 13
    455   %b = icmp sge i8 %x, 17
    456   %c = and i1 %a, %b
    457   ret i1 %c
    458 }
    459 
    460 ; x >s 13 && x >s 17
    461 
    462 define i1 @and_sgt_sgt(i8 %x) {
    463 ; CHECK-LABEL: @and_sgt_sgt(
    464 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
    465 ; CHECK-NEXT:    ret i1 [[B]]
    466 ;
    467   %a = icmp sgt i8 %x, 13
    468   %b = icmp sgt i8 %x, 17
    469   %c = and i1 %a, %b
    470   ret i1 %c
    471 }
    472 
    473 ; x >s 13 && x <=s 17
    474 
    475 define i1 @and_sgt_sle(i8 %x) {
    476 ; CHECK-LABEL: @and_sgt_sle(
    477 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
    478 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
    479 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    480 ; CHECK-NEXT:    ret i1 [[C]]
    481 ;
    482   %a = icmp sgt i8 %x, 13
    483   %b = icmp sle i8 %x, 17
    484   %c = and i1 %a, %b
    485   ret i1 %c
    486 }
    487 
    488 ; x >s 13 && x <s 17
    489 
    490 define i1 @and_sgt_slt(i8 %x) {
    491 ; CHECK-LABEL: @and_sgt_slt(
    492 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
    493 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
    494 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    495 ; CHECK-NEXT:    ret i1 [[C]]
    496 ;
    497   %a = icmp sgt i8 %x, 13
    498   %b = icmp slt i8 %x, 17
    499   %c = and i1 %a, %b
    500   ret i1 %c
    501 }
    502 
    503 ; x >s 13 && x >=u 17
    504 
    505 define i1 @and_sgt_uge(i8 %x) {
    506 ; CHECK-LABEL: @and_sgt_uge(
    507 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
    508 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
    509 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    510 ; CHECK-NEXT:    ret i1 [[C]]
    511 ;
    512   %a = icmp sgt i8 %x, 13
    513   %b = icmp uge i8 %x, 17
    514   %c = and i1 %a, %b
    515   ret i1 %c
    516 }
    517 
    518 ; x >s 13 && x >u 17
    519 
    520 define i1 @and_sgt_ugt(i8 %x) {
    521 ; CHECK-LABEL: @and_sgt_ugt(
    522 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
    523 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
    524 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    525 ; CHECK-NEXT:    ret i1 [[C]]
    526 ;
    527   %a = icmp sgt i8 %x, 13
    528   %b = icmp ugt i8 %x, 17
    529   %c = and i1 %a, %b
    530   ret i1 %c
    531 }
    532 
    533 ; x >s 13 && x <=u 17
    534 
    535 define i1 @and_sgt_ule(i8 %x) {
    536 ; CHECK-LABEL: @and_sgt_ule(
    537 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
    538 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
    539 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    540 ; CHECK-NEXT:    ret i1 [[C]]
    541 ;
    542   %a = icmp sgt i8 %x, 13
    543   %b = icmp ule i8 %x, 17
    544   %c = and i1 %a, %b
    545   ret i1 %c
    546 }
    547 
    548 ; x >s 13 && x <u 17
    549 
    550 define i1 @and_sgt_ult(i8 %x) {
    551 ; CHECK-LABEL: @and_sgt_ult(
    552 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
    553 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
    554 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    555 ; CHECK-NEXT:    ret i1 [[C]]
    556 ;
    557   %a = icmp sgt i8 %x, 13
    558   %b = icmp ult i8 %x, 17
    559   %c = and i1 %a, %b
    560   ret i1 %c
    561 }
    562 
    563 ; sle
    564 ; x <=s 13 && x == 17
    565 
    566 define i1 @and_sle_eq(i8 %x) {
    567 ; CHECK-LABEL: @and_sle_eq(
    568 ; CHECK-NEXT:    ret i1 false
    569 ;
    570   %a = icmp sle i8 %x, 13
    571   %b = icmp eq i8 %x, 17
    572   %c = and i1 %a, %b
    573   ret i1 %c
    574 }
    575 
    576 ; x <=s 13 && x != 17
    577 
    578 define i1 @and_sle_ne(i8 %x) {
    579 ; CHECK-LABEL: @and_sle_ne(
    580 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
    581 ; CHECK-NEXT:    ret i1 [[A]]
    582 ;
    583   %a = icmp sle i8 %x, 13
    584   %b = icmp ne i8 %x, 17
    585   %c = and i1 %a, %b
    586   ret i1 %c
    587 }
    588 
    589 ; x <=s 13 && x >=s 17
    590 
    591 define i1 @and_sle_sge(i8 %x) {
    592 ; CHECK-LABEL: @and_sle_sge(
    593 ; CHECK-NEXT:    ret i1 false
    594 ;
    595   %a = icmp sle i8 %x, 13
    596   %b = icmp sge i8 %x, 17
    597   %c = and i1 %a, %b
    598   ret i1 %c
    599 }
    600 
    601 ; x <=s 13 && x >s 17
    602 
    603 define i1 @and_sle_sgt(i8 %x) {
    604 ; CHECK-LABEL: @and_sle_sgt(
    605 ; CHECK-NEXT:    ret i1 false
    606 ;
    607   %a = icmp sle i8 %x, 13
    608   %b = icmp sgt i8 %x, 17
    609   %c = and i1 %a, %b
    610   ret i1 %c
    611 }
    612 
    613 ; x <=s 13 && x <=s 17
    614 
    615 define i1 @and_sle_sle(i8 %x) {
    616 ; CHECK-LABEL: @and_sle_sle(
    617 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
    618 ; CHECK-NEXT:    ret i1 [[A]]
    619 ;
    620   %a = icmp sle i8 %x, 13
    621   %b = icmp sle i8 %x, 17
    622   %c = and i1 %a, %b
    623   ret i1 %c
    624 }
    625 
    626 ; x <=s 13 && x <s 17
    627 
    628 define i1 @and_sle_slt(i8 %x) {
    629 ; CHECK-LABEL: @and_sle_slt(
    630 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
    631 ; CHECK-NEXT:    ret i1 [[A]]
    632 ;
    633   %a = icmp sle i8 %x, 13
    634   %b = icmp slt i8 %x, 17
    635   %c = and i1 %a, %b
    636   ret i1 %c
    637 }
    638 
    639 ; x <=s 13 && x >=u 17
    640 
    641 define i1 @and_sle_uge(i8 %x) {
    642 ; CHECK-LABEL: @and_sle_uge(
    643 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
    644 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
    645 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    646 ; CHECK-NEXT:    ret i1 [[C]]
    647 ;
    648   %a = icmp sle i8 %x, 13
    649   %b = icmp uge i8 %x, 17
    650   %c = and i1 %a, %b
    651   ret i1 %c
    652 }
    653 
    654 ; x <=s 13 && x >u 17
    655 
    656 define i1 @and_sle_ugt(i8 %x) {
    657 ; CHECK-LABEL: @and_sle_ugt(
    658 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
    659 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
    660 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    661 ; CHECK-NEXT:    ret i1 [[C]]
    662 ;
    663   %a = icmp sle i8 %x, 13
    664   %b = icmp ugt i8 %x, 17
    665   %c = and i1 %a, %b
    666   ret i1 %c
    667 }
    668 
    669 ; x <=s 13 && x <=u 17
    670 
    671 define i1 @and_sle_ule(i8 %x) {
    672 ; CHECK-LABEL: @and_sle_ule(
    673 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
    674 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
    675 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    676 ; CHECK-NEXT:    ret i1 [[C]]
    677 ;
    678   %a = icmp sle i8 %x, 13
    679   %b = icmp ule i8 %x, 17
    680   %c = and i1 %a, %b
    681   ret i1 %c
    682 }
    683 
    684 ; x <=s 13 && x <u 17
    685 
    686 define i1 @and_sle_ult(i8 %x) {
    687 ; CHECK-LABEL: @and_sle_ult(
    688 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
    689 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
    690 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    691 ; CHECK-NEXT:    ret i1 [[C]]
    692 ;
    693   %a = icmp sle i8 %x, 13
    694   %b = icmp ult i8 %x, 17
    695   %c = and i1 %a, %b
    696   ret i1 %c
    697 }
    698 
    699 ; slt
    700 ; x <s 13 && x == 17
    701 
    702 define i1 @and_slt_eq(i8 %x) {
    703 ; CHECK-LABEL: @and_slt_eq(
    704 ; CHECK-NEXT:    ret i1 false
    705 ;
    706   %a = icmp slt i8 %x, 13
    707   %b = icmp eq i8 %x, 17
    708   %c = and i1 %a, %b
    709   ret i1 %c
    710 }
    711 
    712 ; x <s 13 && x != 17
    713 
    714 define i1 @and_slt_ne(i8 %x) {
    715 ; CHECK-LABEL: @and_slt_ne(
    716 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
    717 ; CHECK-NEXT:    ret i1 [[A]]
    718 ;
    719   %a = icmp slt i8 %x, 13
    720   %b = icmp ne i8 %x, 17
    721   %c = and i1 %a, %b
    722   ret i1 %c
    723 }
    724 
    725 ; x <s 13 && x >=s 17
    726 
    727 define i1 @and_slt_sge(i8 %x) {
    728 ; CHECK-LABEL: @and_slt_sge(
    729 ; CHECK-NEXT:    ret i1 false
    730 ;
    731   %a = icmp slt i8 %x, 13
    732   %b = icmp sge i8 %x, 17
    733   %c = and i1 %a, %b
    734   ret i1 %c
    735 }
    736 
    737 ; x <s 13 && x >s 17
    738 
    739 define i1 @and_slt_sgt(i8 %x) {
    740 ; CHECK-LABEL: @and_slt_sgt(
    741 ; CHECK-NEXT:    ret i1 false
    742 ;
    743   %a = icmp slt i8 %x, 13
    744   %b = icmp sgt i8 %x, 17
    745   %c = and i1 %a, %b
    746   ret i1 %c
    747 }
    748 
    749 ; x <s 13 && x <=s 17
    750 
    751 define i1 @and_slt_sle(i8 %x) {
    752 ; CHECK-LABEL: @and_slt_sle(
    753 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
    754 ; CHECK-NEXT:    ret i1 [[A]]
    755 ;
    756   %a = icmp slt i8 %x, 13
    757   %b = icmp sle i8 %x, 17
    758   %c = and i1 %a, %b
    759   ret i1 %c
    760 }
    761 
    762 ; x <s 13 && x <s 17
    763 
    764 define i1 @and_slt_slt(i8 %x) {
    765 ; CHECK-LABEL: @and_slt_slt(
    766 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
    767 ; CHECK-NEXT:    ret i1 [[A]]
    768 ;
    769   %a = icmp slt i8 %x, 13
    770   %b = icmp slt i8 %x, 17
    771   %c = and i1 %a, %b
    772   ret i1 %c
    773 }
    774 
    775 ; x <s 13 && x >=u 17
    776 
    777 define i1 @and_slt_uge(i8 %x) {
    778 ; CHECK-LABEL: @and_slt_uge(
    779 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
    780 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
    781 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    782 ; CHECK-NEXT:    ret i1 [[C]]
    783 ;
    784   %a = icmp slt i8 %x, 13
    785   %b = icmp uge i8 %x, 17
    786   %c = and i1 %a, %b
    787   ret i1 %c
    788 }
    789 
    790 ; x <s 13 && x >u 17
    791 
    792 define i1 @and_slt_ugt(i8 %x) {
    793 ; CHECK-LABEL: @and_slt_ugt(
    794 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
    795 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
    796 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    797 ; CHECK-NEXT:    ret i1 [[C]]
    798 ;
    799   %a = icmp slt i8 %x, 13
    800   %b = icmp ugt i8 %x, 17
    801   %c = and i1 %a, %b
    802   ret i1 %c
    803 }
    804 
    805 ; x <s 13 && x <=u 17
    806 
    807 define i1 @and_slt_ule(i8 %x) {
    808 ; CHECK-LABEL: @and_slt_ule(
    809 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
    810 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
    811 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    812 ; CHECK-NEXT:    ret i1 [[C]]
    813 ;
    814   %a = icmp slt i8 %x, 13
    815   %b = icmp ule i8 %x, 17
    816   %c = and i1 %a, %b
    817   ret i1 %c
    818 }
    819 
    820 ; x <s 13 && x <u 17
    821 
    822 define i1 @and_slt_ult(i8 %x) {
    823 ; CHECK-LABEL: @and_slt_ult(
    824 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
    825 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
    826 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    827 ; CHECK-NEXT:    ret i1 [[C]]
    828 ;
    829   %a = icmp slt i8 %x, 13
    830   %b = icmp ult i8 %x, 17
    831   %c = and i1 %a, %b
    832   ret i1 %c
    833 }
    834 
    835 ; uge
    836 ; x >=u 13 && x == 17
    837 
    838 define i1 @and_uge_eq(i8 %x) {
    839 ; CHECK-LABEL: @and_uge_eq(
    840 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
    841 ; CHECK-NEXT:    ret i1 [[B]]
    842 ;
    843   %a = icmp uge i8 %x, 13
    844   %b = icmp eq i8 %x, 17
    845   %c = and i1 %a, %b
    846   ret i1 %c
    847 }
    848 
    849 ; x >=u 13 && x != 17
    850 
    851 define i1 @and_uge_ne(i8 %x) {
    852 ; CHECK-LABEL: @and_uge_ne(
    853 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
    854 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
    855 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    856 ; CHECK-NEXT:    ret i1 [[C]]
    857 ;
    858   %a = icmp uge i8 %x, 13
    859   %b = icmp ne i8 %x, 17
    860   %c = and i1 %a, %b
    861   ret i1 %c
    862 }
    863 
    864 ; x >=u 13 && x >=s 17
    865 
    866 define i1 @and_uge_sge(i8 %x) {
    867 ; CHECK-LABEL: @and_uge_sge(
    868 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
    869 ; CHECK-NEXT:    ret i1 [[B]]
    870 ;
    871   %a = icmp uge i8 %x, 13
    872   %b = icmp sge i8 %x, 17
    873   %c = and i1 %a, %b
    874   ret i1 %c
    875 }
    876 
    877 ; x >=u 13 && x >s 17
    878 
    879 define i1 @and_uge_sgt(i8 %x) {
    880 ; CHECK-LABEL: @and_uge_sgt(
    881 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
    882 ; CHECK-NEXT:    ret i1 [[B]]
    883 ;
    884   %a = icmp uge i8 %x, 13
    885   %b = icmp sgt i8 %x, 17
    886   %c = and i1 %a, %b
    887   ret i1 %c
    888 }
    889 
    890 ; x >=u 13 && x <=s 17
    891 
    892 define i1 @and_uge_sle(i8 %x) {
    893 ; CHECK-LABEL: @and_uge_sle(
    894 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
    895 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
    896 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    897 ; CHECK-NEXT:    ret i1 [[C]]
    898 ;
    899   %a = icmp uge i8 %x, 13
    900   %b = icmp sle i8 %x, 17
    901   %c = and i1 %a, %b
    902   ret i1 %c
    903 }
    904 
    905 ; x >=u 13 && x <s 17
    906 
    907 define i1 @and_uge_slt(i8 %x) {
    908 ; CHECK-LABEL: @and_uge_slt(
    909 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
    910 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
    911 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    912 ; CHECK-NEXT:    ret i1 [[C]]
    913 ;
    914   %a = icmp uge i8 %x, 13
    915   %b = icmp slt i8 %x, 17
    916   %c = and i1 %a, %b
    917   ret i1 %c
    918 }
    919 
    920 ; x >=u 13 && x >=u 17
    921 
    922 define i1 @and_uge_uge(i8 %x) {
    923 ; CHECK-LABEL: @and_uge_uge(
    924 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
    925 ; CHECK-NEXT:    ret i1 [[B]]
    926 ;
    927   %a = icmp uge i8 %x, 13
    928   %b = icmp uge i8 %x, 17
    929   %c = and i1 %a, %b
    930   ret i1 %c
    931 }
    932 
    933 ; x >=u 13 && x >u 17
    934 
    935 define i1 @and_uge_ugt(i8 %x) {
    936 ; CHECK-LABEL: @and_uge_ugt(
    937 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
    938 ; CHECK-NEXT:    ret i1 [[B]]
    939 ;
    940   %a = icmp uge i8 %x, 13
    941   %b = icmp ugt i8 %x, 17
    942   %c = and i1 %a, %b
    943   ret i1 %c
    944 }
    945 
    946 ; x >=u 13 && x <=u 17
    947 
    948 define i1 @and_uge_ule(i8 %x) {
    949 ; CHECK-LABEL: @and_uge_ule(
    950 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
    951 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
    952 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    953 ; CHECK-NEXT:    ret i1 [[C]]
    954 ;
    955   %a = icmp uge i8 %x, 13
    956   %b = icmp ule i8 %x, 17
    957   %c = and i1 %a, %b
    958   ret i1 %c
    959 }
    960 
    961 ; x >=u 13 && x <u 17
    962 
    963 define i1 @and_uge_ult(i8 %x) {
    964 ; CHECK-LABEL: @and_uge_ult(
    965 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
    966 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
    967 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    968 ; CHECK-NEXT:    ret i1 [[C]]
    969 ;
    970   %a = icmp uge i8 %x, 13
    971   %b = icmp ult i8 %x, 17
    972   %c = and i1 %a, %b
    973   ret i1 %c
    974 }
    975 
    976 ; ugt
    977 ; x >u 13 && x == 17
    978 
    979 define i1 @and_ugt_eq(i8 %x) {
    980 ; CHECK-LABEL: @and_ugt_eq(
    981 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
    982 ; CHECK-NEXT:    ret i1 [[B]]
    983 ;
    984   %a = icmp ugt i8 %x, 13
    985   %b = icmp eq i8 %x, 17
    986   %c = and i1 %a, %b
    987   ret i1 %c
    988 }
    989 
    990 ; x >u 13 && x != 17
    991 
    992 define i1 @and_ugt_ne(i8 %x) {
    993 ; CHECK-LABEL: @and_ugt_ne(
    994 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
    995 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
    996 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
    997 ; CHECK-NEXT:    ret i1 [[C]]
    998 ;
    999   %a = icmp ugt i8 %x, 13
   1000   %b = icmp ne i8 %x, 17
   1001   %c = and i1 %a, %b
   1002   ret i1 %c
   1003 }
   1004 
   1005 ; x >u 13 && x >=s 17
   1006 
   1007 define i1 @and_ugt_sge(i8 %x) {
   1008 ; CHECK-LABEL: @and_ugt_sge(
   1009 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   1010 ; CHECK-NEXT:    ret i1 [[B]]
   1011 ;
   1012   %a = icmp ugt i8 %x, 13
   1013   %b = icmp sge i8 %x, 17
   1014   %c = and i1 %a, %b
   1015   ret i1 %c
   1016 }
   1017 
   1018 ; x >u 13 && x >s 17
   1019 
   1020 define i1 @and_ugt_sgt(i8 %x) {
   1021 ; CHECK-LABEL: @and_ugt_sgt(
   1022 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   1023 ; CHECK-NEXT:    ret i1 [[B]]
   1024 ;
   1025   %a = icmp ugt i8 %x, 13
   1026   %b = icmp sgt i8 %x, 17
   1027   %c = and i1 %a, %b
   1028   ret i1 %c
   1029 }
   1030 
   1031 ; x >u 13 && x <=s 17
   1032 
   1033 define i1 @and_ugt_sle(i8 %x) {
   1034 ; CHECK-LABEL: @and_ugt_sle(
   1035 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
   1036 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   1037 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1038 ; CHECK-NEXT:    ret i1 [[C]]
   1039 ;
   1040   %a = icmp ugt i8 %x, 13
   1041   %b = icmp sle i8 %x, 17
   1042   %c = and i1 %a, %b
   1043   ret i1 %c
   1044 }
   1045 
   1046 ; x >u 13 && x <s 17
   1047 
   1048 define i1 @and_ugt_slt(i8 %x) {
   1049 ; CHECK-LABEL: @and_ugt_slt(
   1050 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
   1051 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   1052 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1053 ; CHECK-NEXT:    ret i1 [[C]]
   1054 ;
   1055   %a = icmp ugt i8 %x, 13
   1056   %b = icmp slt i8 %x, 17
   1057   %c = and i1 %a, %b
   1058   ret i1 %c
   1059 }
   1060 
   1061 ; x >u 13 && x >=u 17
   1062 
   1063 define i1 @and_ugt_uge(i8 %x) {
   1064 ; CHECK-LABEL: @and_ugt_uge(
   1065 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   1066 ; CHECK-NEXT:    ret i1 [[B]]
   1067 ;
   1068   %a = icmp ugt i8 %x, 13
   1069   %b = icmp uge i8 %x, 17
   1070   %c = and i1 %a, %b
   1071   ret i1 %c
   1072 }
   1073 
   1074 ; x >u 13 && x >u 17
   1075 
   1076 define i1 @and_ugt_ugt(i8 %x) {
   1077 ; CHECK-LABEL: @and_ugt_ugt(
   1078 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   1079 ; CHECK-NEXT:    ret i1 [[B]]
   1080 ;
   1081   %a = icmp ugt i8 %x, 13
   1082   %b = icmp ugt i8 %x, 17
   1083   %c = and i1 %a, %b
   1084   ret i1 %c
   1085 }
   1086 
   1087 ; x >u 13 && x <=u 17
   1088 
   1089 define i1 @and_ugt_ule(i8 %x) {
   1090 ; CHECK-LABEL: @and_ugt_ule(
   1091 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
   1092 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   1093 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1094 ; CHECK-NEXT:    ret i1 [[C]]
   1095 ;
   1096   %a = icmp ugt i8 %x, 13
   1097   %b = icmp ule i8 %x, 17
   1098   %c = and i1 %a, %b
   1099   ret i1 %c
   1100 }
   1101 
   1102 ; x >u 13 && x <u 17
   1103 
   1104 define i1 @and_ugt_ult(i8 %x) {
   1105 ; CHECK-LABEL: @and_ugt_ult(
   1106 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
   1107 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   1108 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1109 ; CHECK-NEXT:    ret i1 [[C]]
   1110 ;
   1111   %a = icmp ugt i8 %x, 13
   1112   %b = icmp ult i8 %x, 17
   1113   %c = and i1 %a, %b
   1114   ret i1 %c
   1115 }
   1116 
   1117 ; ule
   1118 ; x <=u 13 && x == 17
   1119 
   1120 define i1 @and_ule_eq(i8 %x) {
   1121 ; CHECK-LABEL: @and_ule_eq(
   1122 ; CHECK-NEXT:    ret i1 false
   1123 ;
   1124   %a = icmp ule i8 %x, 13
   1125   %b = icmp eq i8 %x, 17
   1126   %c = and i1 %a, %b
   1127   ret i1 %c
   1128 }
   1129 
   1130 ; x <=u 13 && x != 17
   1131 
   1132 define i1 @and_ule_ne(i8 %x) {
   1133 ; CHECK-LABEL: @and_ule_ne(
   1134 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   1135 ; CHECK-NEXT:    ret i1 [[A]]
   1136 ;
   1137   %a = icmp ule i8 %x, 13
   1138   %b = icmp ne i8 %x, 17
   1139   %c = and i1 %a, %b
   1140   ret i1 %c
   1141 }
   1142 
   1143 ; x <=u 13 && x >=s 17
   1144 
   1145 define i1 @and_ule_sge(i8 %x) {
   1146 ; CHECK-LABEL: @and_ule_sge(
   1147 ; CHECK-NEXT:    ret i1 false
   1148 ;
   1149   %a = icmp ule i8 %x, 13
   1150   %b = icmp sge i8 %x, 17
   1151   %c = and i1 %a, %b
   1152   ret i1 %c
   1153 }
   1154 
   1155 ; x <=u 13 && x >s 17
   1156 
   1157 define i1 @and_ule_sgt(i8 %x) {
   1158 ; CHECK-LABEL: @and_ule_sgt(
   1159 ; CHECK-NEXT:    ret i1 false
   1160 ;
   1161   %a = icmp ule i8 %x, 13
   1162   %b = icmp sgt i8 %x, 17
   1163   %c = and i1 %a, %b
   1164   ret i1 %c
   1165 }
   1166 
   1167 ; x <=u 13 && x <=s 17
   1168 
   1169 define i1 @and_ule_sle(i8 %x) {
   1170 ; CHECK-LABEL: @and_ule_sle(
   1171 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   1172 ; CHECK-NEXT:    ret i1 [[A]]
   1173 ;
   1174   %a = icmp ule i8 %x, 13
   1175   %b = icmp sle i8 %x, 17
   1176   %c = and i1 %a, %b
   1177   ret i1 %c
   1178 }
   1179 
   1180 ; x <=u 13 && x <s 17
   1181 
   1182 define i1 @and_ule_slt(i8 %x) {
   1183 ; CHECK-LABEL: @and_ule_slt(
   1184 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   1185 ; CHECK-NEXT:    ret i1 [[A]]
   1186 ;
   1187   %a = icmp ule i8 %x, 13
   1188   %b = icmp slt i8 %x, 17
   1189   %c = and i1 %a, %b
   1190   ret i1 %c
   1191 }
   1192 
   1193 ; x <=u 13 && x >=u 17
   1194 
   1195 define i1 @and_ule_uge(i8 %x) {
   1196 ; CHECK-LABEL: @and_ule_uge(
   1197 ; CHECK-NEXT:    ret i1 false
   1198 ;
   1199   %a = icmp ule i8 %x, 13
   1200   %b = icmp uge i8 %x, 17
   1201   %c = and i1 %a, %b
   1202   ret i1 %c
   1203 }
   1204 
   1205 ; x <=u 13 && x >u 17
   1206 
   1207 define i1 @and_ule_ugt(i8 %x) {
   1208 ; CHECK-LABEL: @and_ule_ugt(
   1209 ; CHECK-NEXT:    ret i1 false
   1210 ;
   1211   %a = icmp ule i8 %x, 13
   1212   %b = icmp ugt i8 %x, 17
   1213   %c = and i1 %a, %b
   1214   ret i1 %c
   1215 }
   1216 
   1217 ; x <=u 13 && x <=u 17
   1218 
   1219 define i1 @and_ule_ule(i8 %x) {
   1220 ; CHECK-LABEL: @and_ule_ule(
   1221 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   1222 ; CHECK-NEXT:    ret i1 [[A]]
   1223 ;
   1224   %a = icmp ule i8 %x, 13
   1225   %b = icmp ule i8 %x, 17
   1226   %c = and i1 %a, %b
   1227   ret i1 %c
   1228 }
   1229 
   1230 ; x <=u 13 && x <u 17
   1231 
   1232 define i1 @and_ule_ult(i8 %x) {
   1233 ; CHECK-LABEL: @and_ule_ult(
   1234 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   1235 ; CHECK-NEXT:    ret i1 [[A]]
   1236 ;
   1237   %a = icmp ule i8 %x, 13
   1238   %b = icmp ult i8 %x, 17
   1239   %c = and i1 %a, %b
   1240   ret i1 %c
   1241 }
   1242 
   1243 ; ult
   1244 ; x <u 13 && x == 17
   1245 
   1246 define i1 @and_ult_eq(i8 %x) {
   1247 ; CHECK-LABEL: @and_ult_eq(
   1248 ; CHECK-NEXT:    ret i1 false
   1249 ;
   1250   %a = icmp ult i8 %x, 13
   1251   %b = icmp eq i8 %x, 17
   1252   %c = and i1 %a, %b
   1253   ret i1 %c
   1254 }
   1255 
   1256 ; x <u 13 && x != 17
   1257 
   1258 define i1 @and_ult_ne(i8 %x) {
   1259 ; CHECK-LABEL: @and_ult_ne(
   1260 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   1261 ; CHECK-NEXT:    ret i1 [[A]]
   1262 ;
   1263   %a = icmp ult i8 %x, 13
   1264   %b = icmp ne i8 %x, 17
   1265   %c = and i1 %a, %b
   1266   ret i1 %c
   1267 }
   1268 
   1269 ; x <u 13 && x >=s 17
   1270 
   1271 define i1 @and_ult_sge(i8 %x) {
   1272 ; CHECK-LABEL: @and_ult_sge(
   1273 ; CHECK-NEXT:    ret i1 false
   1274 ;
   1275   %a = icmp ult i8 %x, 13
   1276   %b = icmp sge i8 %x, 17
   1277   %c = and i1 %a, %b
   1278   ret i1 %c
   1279 }
   1280 
   1281 ; x <u 13 && x >s 17
   1282 
   1283 define i1 @and_ult_sgt(i8 %x) {
   1284 ; CHECK-LABEL: @and_ult_sgt(
   1285 ; CHECK-NEXT:    ret i1 false
   1286 ;
   1287   %a = icmp ult i8 %x, 13
   1288   %b = icmp sgt i8 %x, 17
   1289   %c = and i1 %a, %b
   1290   ret i1 %c
   1291 }
   1292 
   1293 ; x <u 13 && x <=s 17
   1294 
   1295 define i1 @and_ult_sle(i8 %x) {
   1296 ; CHECK-LABEL: @and_ult_sle(
   1297 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   1298 ; CHECK-NEXT:    ret i1 [[A]]
   1299 ;
   1300   %a = icmp ult i8 %x, 13
   1301   %b = icmp sle i8 %x, 17
   1302   %c = and i1 %a, %b
   1303   ret i1 %c
   1304 }
   1305 
   1306 ; x <u 13 && x <s 17
   1307 
   1308 define i1 @and_ult_slt(i8 %x) {
   1309 ; CHECK-LABEL: @and_ult_slt(
   1310 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   1311 ; CHECK-NEXT:    ret i1 [[A]]
   1312 ;
   1313   %a = icmp ult i8 %x, 13
   1314   %b = icmp slt i8 %x, 17
   1315   %c = and i1 %a, %b
   1316   ret i1 %c
   1317 }
   1318 
   1319 ; x <u 13 && x >=u 17
   1320 
   1321 define i1 @and_ult_uge(i8 %x) {
   1322 ; CHECK-LABEL: @and_ult_uge(
   1323 ; CHECK-NEXT:    ret i1 false
   1324 ;
   1325   %a = icmp ult i8 %x, 13
   1326   %b = icmp uge i8 %x, 17
   1327   %c = and i1 %a, %b
   1328   ret i1 %c
   1329 }
   1330 
   1331 ; x <u 13 && x >u 17
   1332 
   1333 define i1 @and_ult_ugt(i8 %x) {
   1334 ; CHECK-LABEL: @and_ult_ugt(
   1335 ; CHECK-NEXT:    ret i1 false
   1336 ;
   1337   %a = icmp ult i8 %x, 13
   1338   %b = icmp ugt i8 %x, 17
   1339   %c = and i1 %a, %b
   1340   ret i1 %c
   1341 }
   1342 
   1343 ; x <u 13 && x <=u 17
   1344 
   1345 define i1 @and_ult_ule(i8 %x) {
   1346 ; CHECK-LABEL: @and_ult_ule(
   1347 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   1348 ; CHECK-NEXT:    ret i1 [[A]]
   1349 ;
   1350   %a = icmp ult i8 %x, 13
   1351   %b = icmp ule i8 %x, 17
   1352   %c = and i1 %a, %b
   1353   ret i1 %c
   1354 }
   1355 
   1356 ; x <u 13 && x <u 17
   1357 
   1358 define i1 @and_ult_ult(i8 %x) {
   1359 ; CHECK-LABEL: @and_ult_ult(
   1360 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   1361 ; CHECK-NEXT:    ret i1 [[A]]
   1362 ;
   1363   %a = icmp ult i8 %x, 13
   1364   %b = icmp ult i8 %x, 17
   1365   %c = and i1 %a, %b
   1366   ret i1 %c
   1367 }
   1368 
   1369 ; eq
   1370 ; x == 23 && x == 17
   1371 
   1372 define i1 @and_eq_eq_swap(i8 %x) {
   1373 ; CHECK-LABEL: @and_eq_eq_swap(
   1374 ; CHECK-NEXT:    ret i1 false
   1375 ;
   1376   %a = icmp eq i8 %x, 23
   1377   %b = icmp eq i8 %x, 17
   1378   %c = and i1 %a, %b
   1379   ret i1 %c
   1380 }
   1381 
   1382 ; x == 23 && x != 17
   1383 
   1384 define i1 @and_eq_ne_swap(i8 %x) {
   1385 ; CHECK-LABEL: @and_eq_ne_swap(
   1386 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   1387 ; CHECK-NEXT:    ret i1 [[A]]
   1388 ;
   1389   %a = icmp eq i8 %x, 23
   1390   %b = icmp ne i8 %x, 17
   1391   %c = and i1 %a, %b
   1392   ret i1 %c
   1393 }
   1394 
   1395 ; x == 23 && x >=s 17
   1396 
   1397 define i1 @and_eq_sge_swap(i8 %x) {
   1398 ; CHECK-LABEL: @and_eq_sge_swap(
   1399 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   1400 ; CHECK-NEXT:    ret i1 [[A]]
   1401 ;
   1402   %a = icmp eq i8 %x, 23
   1403   %b = icmp sge i8 %x, 17
   1404   %c = and i1 %a, %b
   1405   ret i1 %c
   1406 }
   1407 
   1408 ; x == 23 && x >s 17
   1409 
   1410 define i1 @and_eq_sgt_swap(i8 %x) {
   1411 ; CHECK-LABEL: @and_eq_sgt_swap(
   1412 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   1413 ; CHECK-NEXT:    ret i1 [[A]]
   1414 ;
   1415   %a = icmp eq i8 %x, 23
   1416   %b = icmp sgt i8 %x, 17
   1417   %c = and i1 %a, %b
   1418   ret i1 %c
   1419 }
   1420 
   1421 ; x == 23 && x <=s 17
   1422 
   1423 define i1 @and_eq_sle_swap(i8 %x) {
   1424 ; CHECK-LABEL: @and_eq_sle_swap(
   1425 ; CHECK-NEXT:    ret i1 false
   1426 ;
   1427   %a = icmp eq i8 %x, 23
   1428   %b = icmp sle i8 %x, 17
   1429   %c = and i1 %a, %b
   1430   ret i1 %c
   1431 }
   1432 
   1433 ; x == 23 && x <s 17
   1434 
   1435 define i1 @and_eq_slt_swap(i8 %x) {
   1436 ; CHECK-LABEL: @and_eq_slt_swap(
   1437 ; CHECK-NEXT:    ret i1 false
   1438 ;
   1439   %a = icmp eq i8 %x, 23
   1440   %b = icmp slt i8 %x, 17
   1441   %c = and i1 %a, %b
   1442   ret i1 %c
   1443 }
   1444 
   1445 ; x == 23 && x >=u 17
   1446 
   1447 define i1 @and_eq_uge_swap(i8 %x) {
   1448 ; CHECK-LABEL: @and_eq_uge_swap(
   1449 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   1450 ; CHECK-NEXT:    ret i1 [[A]]
   1451 ;
   1452   %a = icmp eq i8 %x, 23
   1453   %b = icmp uge i8 %x, 17
   1454   %c = and i1 %a, %b
   1455   ret i1 %c
   1456 }
   1457 
   1458 ; x == 23 && x >u 17
   1459 
   1460 define i1 @and_eq_ugt_swap(i8 %x) {
   1461 ; CHECK-LABEL: @and_eq_ugt_swap(
   1462 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   1463 ; CHECK-NEXT:    ret i1 [[A]]
   1464 ;
   1465   %a = icmp eq i8 %x, 23
   1466   %b = icmp ugt i8 %x, 17
   1467   %c = and i1 %a, %b
   1468   ret i1 %c
   1469 }
   1470 
   1471 ; x == 23 && x <=u 17
   1472 
   1473 define i1 @and_eq_ule_swap(i8 %x) {
   1474 ; CHECK-LABEL: @and_eq_ule_swap(
   1475 ; CHECK-NEXT:    ret i1 false
   1476 ;
   1477   %a = icmp eq i8 %x, 23
   1478   %b = icmp ule i8 %x, 17
   1479   %c = and i1 %a, %b
   1480   ret i1 %c
   1481 }
   1482 
   1483 ; x == 23 && x <u 17
   1484 
   1485 define i1 @and_eq_ult_swap(i8 %x) {
   1486 ; CHECK-LABEL: @and_eq_ult_swap(
   1487 ; CHECK-NEXT:    ret i1 false
   1488 ;
   1489   %a = icmp eq i8 %x, 23
   1490   %b = icmp ult i8 %x, 17
   1491   %c = and i1 %a, %b
   1492   ret i1 %c
   1493 }
   1494 
   1495 ; ne
   1496 ; x != 23 && x == 17
   1497 
   1498 define i1 @and_ne_eq_swap(i8 %x) {
   1499 ; CHECK-LABEL: @and_ne_eq_swap(
   1500 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   1501 ; CHECK-NEXT:    ret i1 [[B]]
   1502 ;
   1503   %a = icmp ne i8 %x, 23
   1504   %b = icmp eq i8 %x, 17
   1505   %c = and i1 %a, %b
   1506   ret i1 %c
   1507 }
   1508 
   1509 ; x != 23 && x != 17
   1510 
   1511 define i1 @and_ne_ne_swap(i8 %x) {
   1512 ; CHECK-LABEL: @and_ne_ne_swap(
   1513 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   1514 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   1515 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1516 ; CHECK-NEXT:    ret i1 [[C]]
   1517 ;
   1518   %a = icmp ne i8 %x, 23
   1519   %b = icmp ne i8 %x, 17
   1520   %c = and i1 %a, %b
   1521   ret i1 %c
   1522 }
   1523 
   1524 ; x != 23 && x >=s 17
   1525 
   1526 define i1 @and_ne_sge_swap(i8 %x) {
   1527 ; CHECK-LABEL: @and_ne_sge_swap(
   1528 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   1529 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   1530 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1531 ; CHECK-NEXT:    ret i1 [[C]]
   1532 ;
   1533   %a = icmp ne i8 %x, 23
   1534   %b = icmp sge i8 %x, 17
   1535   %c = and i1 %a, %b
   1536   ret i1 %c
   1537 }
   1538 
   1539 ; x != 23 && x >s 17
   1540 
   1541 define i1 @and_ne_sgt_swap(i8 %x) {
   1542 ; CHECK-LABEL: @and_ne_sgt_swap(
   1543 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   1544 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   1545 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1546 ; CHECK-NEXT:    ret i1 [[C]]
   1547 ;
   1548   %a = icmp ne i8 %x, 23
   1549   %b = icmp sgt i8 %x, 17
   1550   %c = and i1 %a, %b
   1551   ret i1 %c
   1552 }
   1553 
   1554 ; x != 23 && x <=s 17
   1555 
   1556 define i1 @and_ne_sle_swap(i8 %x) {
   1557 ; CHECK-LABEL: @and_ne_sle_swap(
   1558 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   1559 ; CHECK-NEXT:    ret i1 [[B]]
   1560 ;
   1561   %a = icmp ne i8 %x, 23
   1562   %b = icmp sle i8 %x, 17
   1563   %c = and i1 %a, %b
   1564   ret i1 %c
   1565 }
   1566 
   1567 ; x != 23 && x <s 17
   1568 
   1569 define i1 @and_ne_slt_swap(i8 %x) {
   1570 ; CHECK-LABEL: @and_ne_slt_swap(
   1571 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   1572 ; CHECK-NEXT:    ret i1 [[B]]
   1573 ;
   1574   %a = icmp ne i8 %x, 23
   1575   %b = icmp slt i8 %x, 17
   1576   %c = and i1 %a, %b
   1577   ret i1 %c
   1578 }
   1579 
   1580 ; x != 23 && x >=u 17
   1581 
   1582 define i1 @and_ne_uge_swap(i8 %x) {
   1583 ; CHECK-LABEL: @and_ne_uge_swap(
   1584 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   1585 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   1586 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1587 ; CHECK-NEXT:    ret i1 [[C]]
   1588 ;
   1589   %a = icmp ne i8 %x, 23
   1590   %b = icmp uge i8 %x, 17
   1591   %c = and i1 %a, %b
   1592   ret i1 %c
   1593 }
   1594 
   1595 ; x != 23 && x >u 17
   1596 
   1597 define i1 @and_ne_ugt_swap(i8 %x) {
   1598 ; CHECK-LABEL: @and_ne_ugt_swap(
   1599 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   1600 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   1601 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1602 ; CHECK-NEXT:    ret i1 [[C]]
   1603 ;
   1604   %a = icmp ne i8 %x, 23
   1605   %b = icmp ugt i8 %x, 17
   1606   %c = and i1 %a, %b
   1607   ret i1 %c
   1608 }
   1609 
   1610 ; x != 23 && x <=u 17
   1611 
   1612 define i1 @and_ne_ule_swap(i8 %x) {
   1613 ; CHECK-LABEL: @and_ne_ule_swap(
   1614 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   1615 ; CHECK-NEXT:    ret i1 [[B]]
   1616 ;
   1617   %a = icmp ne i8 %x, 23
   1618   %b = icmp ule i8 %x, 17
   1619   %c = and i1 %a, %b
   1620   ret i1 %c
   1621 }
   1622 
   1623 ; x != 23 && x <u 17
   1624 
   1625 define i1 @and_ne_ult_swap(i8 %x) {
   1626 ; CHECK-LABEL: @and_ne_ult_swap(
   1627 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   1628 ; CHECK-NEXT:    ret i1 [[B]]
   1629 ;
   1630   %a = icmp ne i8 %x, 23
   1631   %b = icmp ult i8 %x, 17
   1632   %c = and i1 %a, %b
   1633   ret i1 %c
   1634 }
   1635 
   1636 ; sge
   1637 ; x >=s 23 && x == 17
   1638 
   1639 define i1 @and_sge_eq_swap(i8 %x) {
   1640 ; CHECK-LABEL: @and_sge_eq_swap(
   1641 ; CHECK-NEXT:    ret i1 false
   1642 ;
   1643   %a = icmp sge i8 %x, 23
   1644   %b = icmp eq i8 %x, 17
   1645   %c = and i1 %a, %b
   1646   ret i1 %c
   1647 }
   1648 
   1649 ; x >=s 23 && x != 17
   1650 
   1651 define i1 @and_sge_ne_swap(i8 %x) {
   1652 ; CHECK-LABEL: @and_sge_ne_swap(
   1653 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   1654 ; CHECK-NEXT:    ret i1 [[A]]
   1655 ;
   1656   %a = icmp sge i8 %x, 23
   1657   %b = icmp ne i8 %x, 17
   1658   %c = and i1 %a, %b
   1659   ret i1 %c
   1660 }
   1661 
   1662 ; x >=s 23 && x >=s 17
   1663 
   1664 define i1 @and_sge_sge_swap(i8 %x) {
   1665 ; CHECK-LABEL: @and_sge_sge_swap(
   1666 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   1667 ; CHECK-NEXT:    ret i1 [[A]]
   1668 ;
   1669   %a = icmp sge i8 %x, 23
   1670   %b = icmp sge i8 %x, 17
   1671   %c = and i1 %a, %b
   1672   ret i1 %c
   1673 }
   1674 
   1675 ; x >=s 23 && x >s 17
   1676 
   1677 define i1 @and_sge_sgt_swap(i8 %x) {
   1678 ; CHECK-LABEL: @and_sge_sgt_swap(
   1679 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   1680 ; CHECK-NEXT:    ret i1 [[A]]
   1681 ;
   1682   %a = icmp sge i8 %x, 23
   1683   %b = icmp sgt i8 %x, 17
   1684   %c = and i1 %a, %b
   1685   ret i1 %c
   1686 }
   1687 
   1688 ; x >=s 23 && x <=s 17
   1689 
   1690 define i1 @and_sge_sle_swap(i8 %x) {
   1691 ; CHECK-LABEL: @and_sge_sle_swap(
   1692 ; CHECK-NEXT:    ret i1 false
   1693 ;
   1694   %a = icmp sge i8 %x, 23
   1695   %b = icmp sle i8 %x, 17
   1696   %c = and i1 %a, %b
   1697   ret i1 %c
   1698 }
   1699 
   1700 ; x >=s 23 && x <s 17
   1701 
   1702 define i1 @and_sge_slt_swap(i8 %x) {
   1703 ; CHECK-LABEL: @and_sge_slt_swap(
   1704 ; CHECK-NEXT:    ret i1 false
   1705 ;
   1706   %a = icmp sge i8 %x, 23
   1707   %b = icmp slt i8 %x, 17
   1708   %c = and i1 %a, %b
   1709   ret i1 %c
   1710 }
   1711 
   1712 ; x >=s 23 && x >=u 17
   1713 
   1714 define i1 @and_sge_uge_swap(i8 %x) {
   1715 ; CHECK-LABEL: @and_sge_uge_swap(
   1716 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   1717 ; CHECK-NEXT:    ret i1 [[A]]
   1718 ;
   1719   %a = icmp sge i8 %x, 23
   1720   %b = icmp uge i8 %x, 17
   1721   %c = and i1 %a, %b
   1722   ret i1 %c
   1723 }
   1724 
   1725 ; x >=s 23 && x >u 17
   1726 
   1727 define i1 @and_sge_ugt_swap(i8 %x) {
   1728 ; CHECK-LABEL: @and_sge_ugt_swap(
   1729 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   1730 ; CHECK-NEXT:    ret i1 [[A]]
   1731 ;
   1732   %a = icmp sge i8 %x, 23
   1733   %b = icmp ugt i8 %x, 17
   1734   %c = and i1 %a, %b
   1735   ret i1 %c
   1736 }
   1737 
   1738 ; x >=s 23 && x <=u 17
   1739 
   1740 define i1 @and_sge_ule_swap(i8 %x) {
   1741 ; CHECK-LABEL: @and_sge_ule_swap(
   1742 ; CHECK-NEXT:    ret i1 false
   1743 ;
   1744   %a = icmp sge i8 %x, 23
   1745   %b = icmp ule i8 %x, 17
   1746   %c = and i1 %a, %b
   1747   ret i1 %c
   1748 }
   1749 
   1750 ; x >=s 23 && x <u 17
   1751 
   1752 define i1 @and_sge_ult_swap(i8 %x) {
   1753 ; CHECK-LABEL: @and_sge_ult_swap(
   1754 ; CHECK-NEXT:    ret i1 false
   1755 ;
   1756   %a = icmp sge i8 %x, 23
   1757   %b = icmp ult i8 %x, 17
   1758   %c = and i1 %a, %b
   1759   ret i1 %c
   1760 }
   1761 
   1762 ; sgt
   1763 ; x >s 23 && x == 17
   1764 
   1765 define i1 @and_sgt_eq_swap(i8 %x) {
   1766 ; CHECK-LABEL: @and_sgt_eq_swap(
   1767 ; CHECK-NEXT:    ret i1 false
   1768 ;
   1769   %a = icmp sgt i8 %x, 23
   1770   %b = icmp eq i8 %x, 17
   1771   %c = and i1 %a, %b
   1772   ret i1 %c
   1773 }
   1774 
   1775 ; x >s 23 && x != 17
   1776 
   1777 define i1 @and_sgt_ne_swap(i8 %x) {
   1778 ; CHECK-LABEL: @and_sgt_ne_swap(
   1779 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   1780 ; CHECK-NEXT:    ret i1 [[A]]
   1781 ;
   1782   %a = icmp sgt i8 %x, 23
   1783   %b = icmp ne i8 %x, 17
   1784   %c = and i1 %a, %b
   1785   ret i1 %c
   1786 }
   1787 
   1788 ; x >s 23 && x >=s 17
   1789 
   1790 define i1 @and_sgt_sge_swap(i8 %x) {
   1791 ; CHECK-LABEL: @and_sgt_sge_swap(
   1792 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   1793 ; CHECK-NEXT:    ret i1 [[A]]
   1794 ;
   1795   %a = icmp sgt i8 %x, 23
   1796   %b = icmp sge i8 %x, 17
   1797   %c = and i1 %a, %b
   1798   ret i1 %c
   1799 }
   1800 
   1801 ; x >s 23 && x >s 17
   1802 
   1803 define i1 @and_sgt_sgt_swap(i8 %x) {
   1804 ; CHECK-LABEL: @and_sgt_sgt_swap(
   1805 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   1806 ; CHECK-NEXT:    ret i1 [[A]]
   1807 ;
   1808   %a = icmp sgt i8 %x, 23
   1809   %b = icmp sgt i8 %x, 17
   1810   %c = and i1 %a, %b
   1811   ret i1 %c
   1812 }
   1813 
   1814 ; x >s 23 && x <=s 17
   1815 
   1816 define i1 @and_sgt_sle_swap(i8 %x) {
   1817 ; CHECK-LABEL: @and_sgt_sle_swap(
   1818 ; CHECK-NEXT:    ret i1 false
   1819 ;
   1820   %a = icmp sgt i8 %x, 23
   1821   %b = icmp sle i8 %x, 17
   1822   %c = and i1 %a, %b
   1823   ret i1 %c
   1824 }
   1825 
   1826 ; x >s 23 && x <s 17
   1827 
   1828 define i1 @and_sgt_slt_swap(i8 %x) {
   1829 ; CHECK-LABEL: @and_sgt_slt_swap(
   1830 ; CHECK-NEXT:    ret i1 false
   1831 ;
   1832   %a = icmp sgt i8 %x, 23
   1833   %b = icmp slt i8 %x, 17
   1834   %c = and i1 %a, %b
   1835   ret i1 %c
   1836 }
   1837 
   1838 ; x >s 23 && x >=u 17
   1839 
   1840 define i1 @and_sgt_uge_swap(i8 %x) {
   1841 ; CHECK-LABEL: @and_sgt_uge_swap(
   1842 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   1843 ; CHECK-NEXT:    ret i1 [[A]]
   1844 ;
   1845   %a = icmp sgt i8 %x, 23
   1846   %b = icmp uge i8 %x, 17
   1847   %c = and i1 %a, %b
   1848   ret i1 %c
   1849 }
   1850 
   1851 ; x >s 23 && x >u 17
   1852 
   1853 define i1 @and_sgt_ugt_swap(i8 %x) {
   1854 ; CHECK-LABEL: @and_sgt_ugt_swap(
   1855 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   1856 ; CHECK-NEXT:    ret i1 [[A]]
   1857 ;
   1858   %a = icmp sgt i8 %x, 23
   1859   %b = icmp ugt i8 %x, 17
   1860   %c = and i1 %a, %b
   1861   ret i1 %c
   1862 }
   1863 
   1864 ; x >s 23 && x <=u 17
   1865 
   1866 define i1 @and_sgt_ule_swap(i8 %x) {
   1867 ; CHECK-LABEL: @and_sgt_ule_swap(
   1868 ; CHECK-NEXT:    ret i1 false
   1869 ;
   1870   %a = icmp sgt i8 %x, 23
   1871   %b = icmp ule i8 %x, 17
   1872   %c = and i1 %a, %b
   1873   ret i1 %c
   1874 }
   1875 
   1876 ; x >s 23 && x <u 17
   1877 
   1878 define i1 @and_sgt_ult_swap(i8 %x) {
   1879 ; CHECK-LABEL: @and_sgt_ult_swap(
   1880 ; CHECK-NEXT:    ret i1 false
   1881 ;
   1882   %a = icmp sgt i8 %x, 23
   1883   %b = icmp ult i8 %x, 17
   1884   %c = and i1 %a, %b
   1885   ret i1 %c
   1886 }
   1887 
   1888 ; sle
   1889 ; x <=s 23 && x == 17
   1890 
   1891 define i1 @and_sle_eq_swap(i8 %x) {
   1892 ; CHECK-LABEL: @and_sle_eq_swap(
   1893 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   1894 ; CHECK-NEXT:    ret i1 [[B]]
   1895 ;
   1896   %a = icmp sle i8 %x, 23
   1897   %b = icmp eq i8 %x, 17
   1898   %c = and i1 %a, %b
   1899   ret i1 %c
   1900 }
   1901 
   1902 ; x <=s 23 && x != 17
   1903 
   1904 define i1 @and_sle_ne_swap(i8 %x) {
   1905 ; CHECK-LABEL: @and_sle_ne_swap(
   1906 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   1907 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   1908 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1909 ; CHECK-NEXT:    ret i1 [[C]]
   1910 ;
   1911   %a = icmp sle i8 %x, 23
   1912   %b = icmp ne i8 %x, 17
   1913   %c = and i1 %a, %b
   1914   ret i1 %c
   1915 }
   1916 
   1917 ; x <=s 23 && x >=s 17
   1918 
   1919 define i1 @and_sle_sge_swap(i8 %x) {
   1920 ; CHECK-LABEL: @and_sle_sge_swap(
   1921 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   1922 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   1923 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1924 ; CHECK-NEXT:    ret i1 [[C]]
   1925 ;
   1926   %a = icmp sle i8 %x, 23
   1927   %b = icmp sge i8 %x, 17
   1928   %c = and i1 %a, %b
   1929   ret i1 %c
   1930 }
   1931 
   1932 ; x <=s 23 && x >s 17
   1933 
   1934 define i1 @and_sle_sgt_swap(i8 %x) {
   1935 ; CHECK-LABEL: @and_sle_sgt_swap(
   1936 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   1937 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   1938 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1939 ; CHECK-NEXT:    ret i1 [[C]]
   1940 ;
   1941   %a = icmp sle i8 %x, 23
   1942   %b = icmp sgt i8 %x, 17
   1943   %c = and i1 %a, %b
   1944   ret i1 %c
   1945 }
   1946 
   1947 ; x <=s 23 && x <=s 17
   1948 
   1949 define i1 @and_sle_sle_swap(i8 %x) {
   1950 ; CHECK-LABEL: @and_sle_sle_swap(
   1951 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   1952 ; CHECK-NEXT:    ret i1 [[B]]
   1953 ;
   1954   %a = icmp sle i8 %x, 23
   1955   %b = icmp sle i8 %x, 17
   1956   %c = and i1 %a, %b
   1957   ret i1 %c
   1958 }
   1959 
   1960 ; x <=s 23 && x <s 17
   1961 
   1962 define i1 @and_sle_slt_swap(i8 %x) {
   1963 ; CHECK-LABEL: @and_sle_slt_swap(
   1964 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   1965 ; CHECK-NEXT:    ret i1 [[B]]
   1966 ;
   1967   %a = icmp sle i8 %x, 23
   1968   %b = icmp slt i8 %x, 17
   1969   %c = and i1 %a, %b
   1970   ret i1 %c
   1971 }
   1972 
   1973 ; x <=s 23 && x >=u 17
   1974 
   1975 define i1 @and_sle_uge_swap(i8 %x) {
   1976 ; CHECK-LABEL: @and_sle_uge_swap(
   1977 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   1978 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   1979 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1980 ; CHECK-NEXT:    ret i1 [[C]]
   1981 ;
   1982   %a = icmp sle i8 %x, 23
   1983   %b = icmp uge i8 %x, 17
   1984   %c = and i1 %a, %b
   1985   ret i1 %c
   1986 }
   1987 
   1988 ; x <=s 23 && x >u 17
   1989 
   1990 define i1 @and_sle_ugt_swap(i8 %x) {
   1991 ; CHECK-LABEL: @and_sle_ugt_swap(
   1992 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   1993 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   1994 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   1995 ; CHECK-NEXT:    ret i1 [[C]]
   1996 ;
   1997   %a = icmp sle i8 %x, 23
   1998   %b = icmp ugt i8 %x, 17
   1999   %c = and i1 %a, %b
   2000   ret i1 %c
   2001 }
   2002 
   2003 ; x <=s 23 && x <=u 17
   2004 
   2005 define i1 @and_sle_ule_swap(i8 %x) {
   2006 ; CHECK-LABEL: @and_sle_ule_swap(
   2007 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   2008 ; CHECK-NEXT:    ret i1 [[B]]
   2009 ;
   2010   %a = icmp sle i8 %x, 23
   2011   %b = icmp ule i8 %x, 17
   2012   %c = and i1 %a, %b
   2013   ret i1 %c
   2014 }
   2015 
   2016 ; x <=s 23 && x <u 17
   2017 
   2018 define i1 @and_sle_ult_swap(i8 %x) {
   2019 ; CHECK-LABEL: @and_sle_ult_swap(
   2020 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   2021 ; CHECK-NEXT:    ret i1 [[B]]
   2022 ;
   2023   %a = icmp sle i8 %x, 23
   2024   %b = icmp ult i8 %x, 17
   2025   %c = and i1 %a, %b
   2026   ret i1 %c
   2027 }
   2028 
   2029 ; slt
   2030 ; x <s 23 && x == 17
   2031 
   2032 define i1 @and_slt_eq_swap(i8 %x) {
   2033 ; CHECK-LABEL: @and_slt_eq_swap(
   2034 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   2035 ; CHECK-NEXT:    ret i1 [[B]]
   2036 ;
   2037   %a = icmp slt i8 %x, 23
   2038   %b = icmp eq i8 %x, 17
   2039   %c = and i1 %a, %b
   2040   ret i1 %c
   2041 }
   2042 
   2043 ; x <s 23 && x != 17
   2044 
   2045 define i1 @and_slt_ne_swap(i8 %x) {
   2046 ; CHECK-LABEL: @and_slt_ne_swap(
   2047 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   2048 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   2049 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2050 ; CHECK-NEXT:    ret i1 [[C]]
   2051 ;
   2052   %a = icmp slt i8 %x, 23
   2053   %b = icmp ne i8 %x, 17
   2054   %c = and i1 %a, %b
   2055   ret i1 %c
   2056 }
   2057 
   2058 ; x <s 23 && x >=s 17
   2059 
   2060 define i1 @and_slt_sge_swap(i8 %x) {
   2061 ; CHECK-LABEL: @and_slt_sge_swap(
   2062 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   2063 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   2064 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2065 ; CHECK-NEXT:    ret i1 [[C]]
   2066 ;
   2067   %a = icmp slt i8 %x, 23
   2068   %b = icmp sge i8 %x, 17
   2069   %c = and i1 %a, %b
   2070   ret i1 %c
   2071 }
   2072 
   2073 ; x <s 23 && x >s 17
   2074 
   2075 define i1 @and_slt_sgt_swap(i8 %x) {
   2076 ; CHECK-LABEL: @and_slt_sgt_swap(
   2077 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   2078 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   2079 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2080 ; CHECK-NEXT:    ret i1 [[C]]
   2081 ;
   2082   %a = icmp slt i8 %x, 23
   2083   %b = icmp sgt i8 %x, 17
   2084   %c = and i1 %a, %b
   2085   ret i1 %c
   2086 }
   2087 
   2088 ; x <s 23 && x <=s 17
   2089 
   2090 define i1 @and_slt_sle_swap(i8 %x) {
   2091 ; CHECK-LABEL: @and_slt_sle_swap(
   2092 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   2093 ; CHECK-NEXT:    ret i1 [[B]]
   2094 ;
   2095   %a = icmp slt i8 %x, 23
   2096   %b = icmp sle i8 %x, 17
   2097   %c = and i1 %a, %b
   2098   ret i1 %c
   2099 }
   2100 
   2101 ; x <s 23 && x <s 17
   2102 
   2103 define i1 @and_slt_slt_swap(i8 %x) {
   2104 ; CHECK-LABEL: @and_slt_slt_swap(
   2105 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   2106 ; CHECK-NEXT:    ret i1 [[B]]
   2107 ;
   2108   %a = icmp slt i8 %x, 23
   2109   %b = icmp slt i8 %x, 17
   2110   %c = and i1 %a, %b
   2111   ret i1 %c
   2112 }
   2113 
   2114 ; x <s 23 && x >=u 17
   2115 
   2116 define i1 @and_slt_uge_swap(i8 %x) {
   2117 ; CHECK-LABEL: @and_slt_uge_swap(
   2118 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   2119 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   2120 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2121 ; CHECK-NEXT:    ret i1 [[C]]
   2122 ;
   2123   %a = icmp slt i8 %x, 23
   2124   %b = icmp uge i8 %x, 17
   2125   %c = and i1 %a, %b
   2126   ret i1 %c
   2127 }
   2128 
   2129 ; x <s 23 && x >u 17
   2130 
   2131 define i1 @and_slt_ugt_swap(i8 %x) {
   2132 ; CHECK-LABEL: @and_slt_ugt_swap(
   2133 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   2134 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   2135 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2136 ; CHECK-NEXT:    ret i1 [[C]]
   2137 ;
   2138   %a = icmp slt i8 %x, 23
   2139   %b = icmp ugt i8 %x, 17
   2140   %c = and i1 %a, %b
   2141   ret i1 %c
   2142 }
   2143 
   2144 ; x <s 23 && x <=u 17
   2145 
   2146 define i1 @and_slt_ule_swap(i8 %x) {
   2147 ; CHECK-LABEL: @and_slt_ule_swap(
   2148 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   2149 ; CHECK-NEXT:    ret i1 [[B]]
   2150 ;
   2151   %a = icmp slt i8 %x, 23
   2152   %b = icmp ule i8 %x, 17
   2153   %c = and i1 %a, %b
   2154   ret i1 %c
   2155 }
   2156 
   2157 ; x <s 23 && x <u 17
   2158 
   2159 define i1 @and_slt_ult_swap(i8 %x) {
   2160 ; CHECK-LABEL: @and_slt_ult_swap(
   2161 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   2162 ; CHECK-NEXT:    ret i1 [[B]]
   2163 ;
   2164   %a = icmp slt i8 %x, 23
   2165   %b = icmp ult i8 %x, 17
   2166   %c = and i1 %a, %b
   2167   ret i1 %c
   2168 }
   2169 
   2170 ; uge
   2171 ; x >=u 23 && x == 17
   2172 
   2173 define i1 @and_uge_eq_swap(i8 %x) {
   2174 ; CHECK-LABEL: @and_uge_eq_swap(
   2175 ; CHECK-NEXT:    ret i1 false
   2176 ;
   2177   %a = icmp uge i8 %x, 23
   2178   %b = icmp eq i8 %x, 17
   2179   %c = and i1 %a, %b
   2180   ret i1 %c
   2181 }
   2182 
   2183 ; x >=u 23 && x != 17
   2184 
   2185 define i1 @and_uge_ne_swap(i8 %x) {
   2186 ; CHECK-LABEL: @and_uge_ne_swap(
   2187 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   2188 ; CHECK-NEXT:    ret i1 [[A]]
   2189 ;
   2190   %a = icmp uge i8 %x, 23
   2191   %b = icmp ne i8 %x, 17
   2192   %c = and i1 %a, %b
   2193   ret i1 %c
   2194 }
   2195 
   2196 ; x >=u 23 && x >=s 17
   2197 
   2198 define i1 @and_uge_sge_swap(i8 %x) {
   2199 ; CHECK-LABEL: @and_uge_sge_swap(
   2200 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   2201 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   2202 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2203 ; CHECK-NEXT:    ret i1 [[C]]
   2204 ;
   2205   %a = icmp uge i8 %x, 23
   2206   %b = icmp sge i8 %x, 17
   2207   %c = and i1 %a, %b
   2208   ret i1 %c
   2209 }
   2210 
   2211 ; x >=u 23 && x >s 17
   2212 
   2213 define i1 @and_uge_sgt_swap(i8 %x) {
   2214 ; CHECK-LABEL: @and_uge_sgt_swap(
   2215 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   2216 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   2217 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2218 ; CHECK-NEXT:    ret i1 [[C]]
   2219 ;
   2220   %a = icmp uge i8 %x, 23
   2221   %b = icmp sgt i8 %x, 17
   2222   %c = and i1 %a, %b
   2223   ret i1 %c
   2224 }
   2225 
   2226 ; x >=u 23 && x <=s 17
   2227 
   2228 define i1 @and_uge_sle_swap(i8 %x) {
   2229 ; CHECK-LABEL: @and_uge_sle_swap(
   2230 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   2231 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   2232 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2233 ; CHECK-NEXT:    ret i1 [[C]]
   2234 ;
   2235   %a = icmp uge i8 %x, 23
   2236   %b = icmp sle i8 %x, 17
   2237   %c = and i1 %a, %b
   2238   ret i1 %c
   2239 }
   2240 
   2241 ; x >=u 23 && x <s 17
   2242 
   2243 define i1 @and_uge_slt_swap(i8 %x) {
   2244 ; CHECK-LABEL: @and_uge_slt_swap(
   2245 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   2246 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   2247 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2248 ; CHECK-NEXT:    ret i1 [[C]]
   2249 ;
   2250   %a = icmp uge i8 %x, 23
   2251   %b = icmp slt i8 %x, 17
   2252   %c = and i1 %a, %b
   2253   ret i1 %c
   2254 }
   2255 
   2256 ; x >=u 23 && x >=u 17
   2257 
   2258 define i1 @and_uge_uge_swap(i8 %x) {
   2259 ; CHECK-LABEL: @and_uge_uge_swap(
   2260 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   2261 ; CHECK-NEXT:    ret i1 [[A]]
   2262 ;
   2263   %a = icmp uge i8 %x, 23
   2264   %b = icmp uge i8 %x, 17
   2265   %c = and i1 %a, %b
   2266   ret i1 %c
   2267 }
   2268 
   2269 ; x >=u 23 && x >u 17
   2270 
   2271 define i1 @and_uge_ugt_swap(i8 %x) {
   2272 ; CHECK-LABEL: @and_uge_ugt_swap(
   2273 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   2274 ; CHECK-NEXT:    ret i1 [[A]]
   2275 ;
   2276   %a = icmp uge i8 %x, 23
   2277   %b = icmp ugt i8 %x, 17
   2278   %c = and i1 %a, %b
   2279   ret i1 %c
   2280 }
   2281 
   2282 ; x >=u 23 && x <=u 17
   2283 
   2284 define i1 @and_uge_ule_swap(i8 %x) {
   2285 ; CHECK-LABEL: @and_uge_ule_swap(
   2286 ; CHECK-NEXT:    ret i1 false
   2287 ;
   2288   %a = icmp uge i8 %x, 23
   2289   %b = icmp ule i8 %x, 17
   2290   %c = and i1 %a, %b
   2291   ret i1 %c
   2292 }
   2293 
   2294 ; x >=u 23 && x <u 17
   2295 
   2296 define i1 @and_uge_ult_swap(i8 %x) {
   2297 ; CHECK-LABEL: @and_uge_ult_swap(
   2298 ; CHECK-NEXT:    ret i1 false
   2299 ;
   2300   %a = icmp uge i8 %x, 23
   2301   %b = icmp ult i8 %x, 17
   2302   %c = and i1 %a, %b
   2303   ret i1 %c
   2304 }
   2305 
   2306 ; ugt
   2307 ; x >u 23 && x == 17
   2308 
   2309 define i1 @and_ugt_eq_swap(i8 %x) {
   2310 ; CHECK-LABEL: @and_ugt_eq_swap(
   2311 ; CHECK-NEXT:    ret i1 false
   2312 ;
   2313   %a = icmp ugt i8 %x, 23
   2314   %b = icmp eq i8 %x, 17
   2315   %c = and i1 %a, %b
   2316   ret i1 %c
   2317 }
   2318 
   2319 ; x >u 23 && x != 17
   2320 
   2321 define i1 @and_ugt_ne_swap(i8 %x) {
   2322 ; CHECK-LABEL: @and_ugt_ne_swap(
   2323 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   2324 ; CHECK-NEXT:    ret i1 [[A]]
   2325 ;
   2326   %a = icmp ugt i8 %x, 23
   2327   %b = icmp ne i8 %x, 17
   2328   %c = and i1 %a, %b
   2329   ret i1 %c
   2330 }
   2331 
   2332 ; x >u 23 && x >=s 17
   2333 
   2334 define i1 @and_ugt_sge_swap(i8 %x) {
   2335 ; CHECK-LABEL: @and_ugt_sge_swap(
   2336 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   2337 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   2338 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2339 ; CHECK-NEXT:    ret i1 [[C]]
   2340 ;
   2341   %a = icmp ugt i8 %x, 23
   2342   %b = icmp sge i8 %x, 17
   2343   %c = and i1 %a, %b
   2344   ret i1 %c
   2345 }
   2346 
   2347 ; x >u 23 && x >s 17
   2348 
   2349 define i1 @and_ugt_sgt_swap(i8 %x) {
   2350 ; CHECK-LABEL: @and_ugt_sgt_swap(
   2351 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   2352 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   2353 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2354 ; CHECK-NEXT:    ret i1 [[C]]
   2355 ;
   2356   %a = icmp ugt i8 %x, 23
   2357   %b = icmp sgt i8 %x, 17
   2358   %c = and i1 %a, %b
   2359   ret i1 %c
   2360 }
   2361 
   2362 ; x >u 23 && x <=s 17
   2363 
   2364 define i1 @and_ugt_sle_swap(i8 %x) {
   2365 ; CHECK-LABEL: @and_ugt_sle_swap(
   2366 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   2367 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   2368 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2369 ; CHECK-NEXT:    ret i1 [[C]]
   2370 ;
   2371   %a = icmp ugt i8 %x, 23
   2372   %b = icmp sle i8 %x, 17
   2373   %c = and i1 %a, %b
   2374   ret i1 %c
   2375 }
   2376 
   2377 ; x >u 23 && x <s 17
   2378 
   2379 define i1 @and_ugt_slt_swap(i8 %x) {
   2380 ; CHECK-LABEL: @and_ugt_slt_swap(
   2381 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   2382 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   2383 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2384 ; CHECK-NEXT:    ret i1 [[C]]
   2385 ;
   2386   %a = icmp ugt i8 %x, 23
   2387   %b = icmp slt i8 %x, 17
   2388   %c = and i1 %a, %b
   2389   ret i1 %c
   2390 }
   2391 
   2392 ; x >u 23 && x >=u 17
   2393 
   2394 define i1 @and_ugt_uge_swap(i8 %x) {
   2395 ; CHECK-LABEL: @and_ugt_uge_swap(
   2396 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   2397 ; CHECK-NEXT:    ret i1 [[A]]
   2398 ;
   2399   %a = icmp ugt i8 %x, 23
   2400   %b = icmp uge i8 %x, 17
   2401   %c = and i1 %a, %b
   2402   ret i1 %c
   2403 }
   2404 
   2405 ; x >u 23 && x >u 17
   2406 
   2407 define i1 @and_ugt_ugt_swap(i8 %x) {
   2408 ; CHECK-LABEL: @and_ugt_ugt_swap(
   2409 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   2410 ; CHECK-NEXT:    ret i1 [[A]]
   2411 ;
   2412   %a = icmp ugt i8 %x, 23
   2413   %b = icmp ugt i8 %x, 17
   2414   %c = and i1 %a, %b
   2415   ret i1 %c
   2416 }
   2417 
   2418 ; x >u 23 && x <=u 17
   2419 
   2420 define i1 @and_ugt_ule_swap(i8 %x) {
   2421 ; CHECK-LABEL: @and_ugt_ule_swap(
   2422 ; CHECK-NEXT:    ret i1 false
   2423 ;
   2424   %a = icmp ugt i8 %x, 23
   2425   %b = icmp ule i8 %x, 17
   2426   %c = and i1 %a, %b
   2427   ret i1 %c
   2428 }
   2429 
   2430 ; x >u 23 && x <u 17
   2431 
   2432 define i1 @and_ugt_ult_swap(i8 %x) {
   2433 ; CHECK-LABEL: @and_ugt_ult_swap(
   2434 ; CHECK-NEXT:    ret i1 false
   2435 ;
   2436   %a = icmp ugt i8 %x, 23
   2437   %b = icmp ult i8 %x, 17
   2438   %c = and i1 %a, %b
   2439   ret i1 %c
   2440 }
   2441 
   2442 ; ule
   2443 ; x <=u 23 && x == 17
   2444 
   2445 define i1 @and_ule_eq_swap(i8 %x) {
   2446 ; CHECK-LABEL: @and_ule_eq_swap(
   2447 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   2448 ; CHECK-NEXT:    ret i1 [[B]]
   2449 ;
   2450   %a = icmp ule i8 %x, 23
   2451   %b = icmp eq i8 %x, 17
   2452   %c = and i1 %a, %b
   2453   ret i1 %c
   2454 }
   2455 
   2456 ; x <=u 23 && x != 17
   2457 
   2458 define i1 @and_ule_ne_swap(i8 %x) {
   2459 ; CHECK-LABEL: @and_ule_ne_swap(
   2460 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   2461 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   2462 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2463 ; CHECK-NEXT:    ret i1 [[C]]
   2464 ;
   2465   %a = icmp ule i8 %x, 23
   2466   %b = icmp ne i8 %x, 17
   2467   %c = and i1 %a, %b
   2468   ret i1 %c
   2469 }
   2470 
   2471 ; x <=u 23 && x >=s 17
   2472 
   2473 define i1 @and_ule_sge_swap(i8 %x) {
   2474 ; CHECK-LABEL: @and_ule_sge_swap(
   2475 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   2476 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   2477 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2478 ; CHECK-NEXT:    ret i1 [[C]]
   2479 ;
   2480   %a = icmp ule i8 %x, 23
   2481   %b = icmp sge i8 %x, 17
   2482   %c = and i1 %a, %b
   2483   ret i1 %c
   2484 }
   2485 
   2486 ; x <=u 23 && x >s 17
   2487 
   2488 define i1 @and_ule_sgt_swap(i8 %x) {
   2489 ; CHECK-LABEL: @and_ule_sgt_swap(
   2490 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   2491 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   2492 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2493 ; CHECK-NEXT:    ret i1 [[C]]
   2494 ;
   2495   %a = icmp ule i8 %x, 23
   2496   %b = icmp sgt i8 %x, 17
   2497   %c = and i1 %a, %b
   2498   ret i1 %c
   2499 }
   2500 
   2501 ; x <=u 23 && x <=s 17
   2502 
   2503 define i1 @and_ule_sle_swap(i8 %x) {
   2504 ; CHECK-LABEL: @and_ule_sle_swap(
   2505 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   2506 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   2507 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2508 ; CHECK-NEXT:    ret i1 [[C]]
   2509 ;
   2510   %a = icmp ule i8 %x, 23
   2511   %b = icmp sle i8 %x, 17
   2512   %c = and i1 %a, %b
   2513   ret i1 %c
   2514 }
   2515 
   2516 ; x <=u 23 && x <s 17
   2517 
   2518 define i1 @and_ule_slt_swap(i8 %x) {
   2519 ; CHECK-LABEL: @and_ule_slt_swap(
   2520 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   2521 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   2522 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2523 ; CHECK-NEXT:    ret i1 [[C]]
   2524 ;
   2525   %a = icmp ule i8 %x, 23
   2526   %b = icmp slt i8 %x, 17
   2527   %c = and i1 %a, %b
   2528   ret i1 %c
   2529 }
   2530 
   2531 ; x <=u 23 && x >=u 17
   2532 
   2533 define i1 @and_ule_uge_swap(i8 %x) {
   2534 ; CHECK-LABEL: @and_ule_uge_swap(
   2535 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   2536 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   2537 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2538 ; CHECK-NEXT:    ret i1 [[C]]
   2539 ;
   2540   %a = icmp ule i8 %x, 23
   2541   %b = icmp uge i8 %x, 17
   2542   %c = and i1 %a, %b
   2543   ret i1 %c
   2544 }
   2545 
   2546 ; x <=u 23 && x >u 17
   2547 
   2548 define i1 @and_ule_ugt_swap(i8 %x) {
   2549 ; CHECK-LABEL: @and_ule_ugt_swap(
   2550 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   2551 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   2552 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2553 ; CHECK-NEXT:    ret i1 [[C]]
   2554 ;
   2555   %a = icmp ule i8 %x, 23
   2556   %b = icmp ugt i8 %x, 17
   2557   %c = and i1 %a, %b
   2558   ret i1 %c
   2559 }
   2560 
   2561 ; x <=u 23 && x <=u 17
   2562 
   2563 define i1 @and_ule_ule_swap(i8 %x) {
   2564 ; CHECK-LABEL: @and_ule_ule_swap(
   2565 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   2566 ; CHECK-NEXT:    ret i1 [[B]]
   2567 ;
   2568   %a = icmp ule i8 %x, 23
   2569   %b = icmp ule i8 %x, 17
   2570   %c = and i1 %a, %b
   2571   ret i1 %c
   2572 }
   2573 
   2574 ; x <=u 23 && x <u 17
   2575 
   2576 define i1 @and_ule_ult_swap(i8 %x) {
   2577 ; CHECK-LABEL: @and_ule_ult_swap(
   2578 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   2579 ; CHECK-NEXT:    ret i1 [[B]]
   2580 ;
   2581   %a = icmp ule i8 %x, 23
   2582   %b = icmp ult i8 %x, 17
   2583   %c = and i1 %a, %b
   2584   ret i1 %c
   2585 }
   2586 
   2587 ; ult
   2588 ; x <u 23 && x == 17
   2589 
   2590 define i1 @and_ult_eq_swap(i8 %x) {
   2591 ; CHECK-LABEL: @and_ult_eq_swap(
   2592 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   2593 ; CHECK-NEXT:    ret i1 [[B]]
   2594 ;
   2595   %a = icmp ult i8 %x, 23
   2596   %b = icmp eq i8 %x, 17
   2597   %c = and i1 %a, %b
   2598   ret i1 %c
   2599 }
   2600 
   2601 ; x <u 23 && x != 17
   2602 
   2603 define i1 @and_ult_ne_swap(i8 %x) {
   2604 ; CHECK-LABEL: @and_ult_ne_swap(
   2605 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   2606 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   2607 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2608 ; CHECK-NEXT:    ret i1 [[C]]
   2609 ;
   2610   %a = icmp ult i8 %x, 23
   2611   %b = icmp ne i8 %x, 17
   2612   %c = and i1 %a, %b
   2613   ret i1 %c
   2614 }
   2615 
   2616 ; x <u 23 && x >=s 17
   2617 
   2618 define i1 @and_ult_sge_swap(i8 %x) {
   2619 ; CHECK-LABEL: @and_ult_sge_swap(
   2620 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   2621 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   2622 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2623 ; CHECK-NEXT:    ret i1 [[C]]
   2624 ;
   2625   %a = icmp ult i8 %x, 23
   2626   %b = icmp sge i8 %x, 17
   2627   %c = and i1 %a, %b
   2628   ret i1 %c
   2629 }
   2630 
   2631 ; x <u 23 && x >s 17
   2632 
   2633 define i1 @and_ult_sgt_swap(i8 %x) {
   2634 ; CHECK-LABEL: @and_ult_sgt_swap(
   2635 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   2636 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   2637 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2638 ; CHECK-NEXT:    ret i1 [[C]]
   2639 ;
   2640   %a = icmp ult i8 %x, 23
   2641   %b = icmp sgt i8 %x, 17
   2642   %c = and i1 %a, %b
   2643   ret i1 %c
   2644 }
   2645 
   2646 ; x <u 23 && x <=s 17
   2647 
   2648 define i1 @and_ult_sle_swap(i8 %x) {
   2649 ; CHECK-LABEL: @and_ult_sle_swap(
   2650 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   2651 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   2652 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2653 ; CHECK-NEXT:    ret i1 [[C]]
   2654 ;
   2655   %a = icmp ult i8 %x, 23
   2656   %b = icmp sle i8 %x, 17
   2657   %c = and i1 %a, %b
   2658   ret i1 %c
   2659 }
   2660 
   2661 ; x <u 23 && x <s 17
   2662 
   2663 define i1 @and_ult_slt_swap(i8 %x) {
   2664 ; CHECK-LABEL: @and_ult_slt_swap(
   2665 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   2666 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   2667 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2668 ; CHECK-NEXT:    ret i1 [[C]]
   2669 ;
   2670   %a = icmp ult i8 %x, 23
   2671   %b = icmp slt i8 %x, 17
   2672   %c = and i1 %a, %b
   2673   ret i1 %c
   2674 }
   2675 
   2676 ; x <u 23 && x >=u 17
   2677 
   2678 define i1 @and_ult_uge_swap(i8 %x) {
   2679 ; CHECK-LABEL: @and_ult_uge_swap(
   2680 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   2681 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   2682 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2683 ; CHECK-NEXT:    ret i1 [[C]]
   2684 ;
   2685   %a = icmp ult i8 %x, 23
   2686   %b = icmp uge i8 %x, 17
   2687   %c = and i1 %a, %b
   2688   ret i1 %c
   2689 }
   2690 
   2691 ; x <u 23 && x >u 17
   2692 
   2693 define i1 @and_ult_ugt_swap(i8 %x) {
   2694 ; CHECK-LABEL: @and_ult_ugt_swap(
   2695 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   2696 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   2697 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
   2698 ; CHECK-NEXT:    ret i1 [[C]]
   2699 ;
   2700   %a = icmp ult i8 %x, 23
   2701   %b = icmp ugt i8 %x, 17
   2702   %c = and i1 %a, %b
   2703   ret i1 %c
   2704 }
   2705 
   2706 ; x <u 23 && x <=u 17
   2707 
   2708 define i1 @and_ult_ule_swap(i8 %x) {
   2709 ; CHECK-LABEL: @and_ult_ule_swap(
   2710 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   2711 ; CHECK-NEXT:    ret i1 [[B]]
   2712 ;
   2713   %a = icmp ult i8 %x, 23
   2714   %b = icmp ule i8 %x, 17
   2715   %c = and i1 %a, %b
   2716   ret i1 %c
   2717 }
   2718 
   2719 ; x <u 23 && x <u 17
   2720 
   2721 define i1 @and_ult_ult_swap(i8 %x) {
   2722 ; CHECK-LABEL: @and_ult_ult_swap(
   2723 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   2724 ; CHECK-NEXT:    ret i1 [[B]]
   2725 ;
   2726   %a = icmp ult i8 %x, 23
   2727   %b = icmp ult i8 %x, 17
   2728   %c = and i1 %a, %b
   2729   ret i1 %c
   2730 }
   2731 
   2732 ; eq
   2733 ; x == 13 || x == 17
   2734 
   2735 define i1 @or_eq_eq(i8 %x) {
   2736 ; CHECK-LABEL: @or_eq_eq(
   2737 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
   2738 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   2739 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   2740 ; CHECK-NEXT:    ret i1 [[C]]
   2741 ;
   2742   %a = icmp eq i8 %x, 13
   2743   %b = icmp eq i8 %x, 17
   2744   %c = or i1 %a, %b
   2745   ret i1 %c
   2746 }
   2747 
   2748 ; x == 13 || x != 17
   2749 
   2750 define i1 @or_eq_ne(i8 %x) {
   2751 ; CHECK-LABEL: @or_eq_ne(
   2752 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   2753 ; CHECK-NEXT:    ret i1 [[B]]
   2754 ;
   2755   %a = icmp eq i8 %x, 13
   2756   %b = icmp ne i8 %x, 17
   2757   %c = or i1 %a, %b
   2758   ret i1 %c
   2759 }
   2760 
   2761 ; x == 13 || x >=s 17
   2762 
   2763 define i1 @or_eq_sge(i8 %x) {
   2764 ; CHECK-LABEL: @or_eq_sge(
   2765 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
   2766 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   2767 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   2768 ; CHECK-NEXT:    ret i1 [[C]]
   2769 ;
   2770   %a = icmp eq i8 %x, 13
   2771   %b = icmp sge i8 %x, 17
   2772   %c = or i1 %a, %b
   2773   ret i1 %c
   2774 }
   2775 
   2776 ; x == 13 || x >s 17
   2777 
   2778 define i1 @or_eq_sgt(i8 %x) {
   2779 ; CHECK-LABEL: @or_eq_sgt(
   2780 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
   2781 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   2782 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   2783 ; CHECK-NEXT:    ret i1 [[C]]
   2784 ;
   2785   %a = icmp eq i8 %x, 13
   2786   %b = icmp sgt i8 %x, 17
   2787   %c = or i1 %a, %b
   2788   ret i1 %c
   2789 }
   2790 
   2791 ; x == 13 || x <=s 17
   2792 
   2793 define i1 @or_eq_sle(i8 %x) {
   2794 ; CHECK-LABEL: @or_eq_sle(
   2795 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   2796 ; CHECK-NEXT:    ret i1 [[B]]
   2797 ;
   2798   %a = icmp eq i8 %x, 13
   2799   %b = icmp sle i8 %x, 17
   2800   %c = or i1 %a, %b
   2801   ret i1 %c
   2802 }
   2803 
   2804 ; x == 13 || x <s 17
   2805 
   2806 define i1 @or_eq_slt(i8 %x) {
   2807 ; CHECK-LABEL: @or_eq_slt(
   2808 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   2809 ; CHECK-NEXT:    ret i1 [[B]]
   2810 ;
   2811   %a = icmp eq i8 %x, 13
   2812   %b = icmp slt i8 %x, 17
   2813   %c = or i1 %a, %b
   2814   ret i1 %c
   2815 }
   2816 
   2817 ; x == 13 || x >=u 17
   2818 
   2819 define i1 @or_eq_uge(i8 %x) {
   2820 ; CHECK-LABEL: @or_eq_uge(
   2821 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
   2822 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   2823 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   2824 ; CHECK-NEXT:    ret i1 [[C]]
   2825 ;
   2826   %a = icmp eq i8 %x, 13
   2827   %b = icmp uge i8 %x, 17
   2828   %c = or i1 %a, %b
   2829   ret i1 %c
   2830 }
   2831 
   2832 ; x == 13 || x >u 17
   2833 
   2834 define i1 @or_eq_ugt(i8 %x) {
   2835 ; CHECK-LABEL: @or_eq_ugt(
   2836 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
   2837 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   2838 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   2839 ; CHECK-NEXT:    ret i1 [[C]]
   2840 ;
   2841   %a = icmp eq i8 %x, 13
   2842   %b = icmp ugt i8 %x, 17
   2843   %c = or i1 %a, %b
   2844   ret i1 %c
   2845 }
   2846 
   2847 ; x == 13 || x <=u 17
   2848 
   2849 define i1 @or_eq_ule(i8 %x) {
   2850 ; CHECK-LABEL: @or_eq_ule(
   2851 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   2852 ; CHECK-NEXT:    ret i1 [[B]]
   2853 ;
   2854   %a = icmp eq i8 %x, 13
   2855   %b = icmp ule i8 %x, 17
   2856   %c = or i1 %a, %b
   2857   ret i1 %c
   2858 }
   2859 
   2860 ; x == 13 || x <u 17
   2861 
   2862 define i1 @or_eq_ult(i8 %x) {
   2863 ; CHECK-LABEL: @or_eq_ult(
   2864 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   2865 ; CHECK-NEXT:    ret i1 [[B]]
   2866 ;
   2867   %a = icmp eq i8 %x, 13
   2868   %b = icmp ult i8 %x, 17
   2869   %c = or i1 %a, %b
   2870   ret i1 %c
   2871 }
   2872 
   2873 ; ne
   2874 ; x != 13 || x == 17
   2875 
   2876 define i1 @or_ne_eq(i8 %x) {
   2877 ; CHECK-LABEL: @or_ne_eq(
   2878 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
   2879 ; CHECK-NEXT:    ret i1 [[A]]
   2880 ;
   2881   %a = icmp ne i8 %x, 13
   2882   %b = icmp eq i8 %x, 17
   2883   %c = or i1 %a, %b
   2884   ret i1 %c
   2885 }
   2886 
   2887 ; x != 13 || x != 17
   2888 
   2889 define i1 @or_ne_ne(i8 %x) {
   2890 ; CHECK-LABEL: @or_ne_ne(
   2891 ; CHECK-NEXT:    ret i1 true
   2892 ;
   2893   %a = icmp ne i8 %x, 13
   2894   %b = icmp ne i8 %x, 17
   2895   %c = or i1 %a, %b
   2896   ret i1 %c
   2897 }
   2898 
   2899 ; x != 13 || x >=s 17
   2900 
   2901 define i1 @or_ne_sge(i8 %x) {
   2902 ; CHECK-LABEL: @or_ne_sge(
   2903 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
   2904 ; CHECK-NEXT:    ret i1 [[A]]
   2905 ;
   2906   %a = icmp ne i8 %x, 13
   2907   %b = icmp sge i8 %x, 17
   2908   %c = or i1 %a, %b
   2909   ret i1 %c
   2910 }
   2911 
   2912 ; x != 13 || x >s 17
   2913 
   2914 define i1 @or_ne_sgt(i8 %x) {
   2915 ; CHECK-LABEL: @or_ne_sgt(
   2916 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
   2917 ; CHECK-NEXT:    ret i1 [[A]]
   2918 ;
   2919   %a = icmp ne i8 %x, 13
   2920   %b = icmp sgt i8 %x, 17
   2921   %c = or i1 %a, %b
   2922   ret i1 %c
   2923 }
   2924 
   2925 ; x != 13 || x <=s 17
   2926 
   2927 define i1 @or_ne_sle(i8 %x) {
   2928 ; CHECK-LABEL: @or_ne_sle(
   2929 ; CHECK-NEXT:    ret i1 true
   2930 ;
   2931   %a = icmp ne i8 %x, 13
   2932   %b = icmp sle i8 %x, 17
   2933   %c = or i1 %a, %b
   2934   ret i1 %c
   2935 }
   2936 
   2937 ; x != 13 || x <s 17
   2938 
   2939 define i1 @or_ne_slt(i8 %x) {
   2940 ; CHECK-LABEL: @or_ne_slt(
   2941 ; CHECK-NEXT:    ret i1 true
   2942 ;
   2943   %a = icmp ne i8 %x, 13
   2944   %b = icmp slt i8 %x, 17
   2945   %c = or i1 %a, %b
   2946   ret i1 %c
   2947 }
   2948 
   2949 ; x != 13 || x >=u 17
   2950 
   2951 define i1 @or_ne_uge(i8 %x) {
   2952 ; CHECK-LABEL: @or_ne_uge(
   2953 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
   2954 ; CHECK-NEXT:    ret i1 [[A]]
   2955 ;
   2956   %a = icmp ne i8 %x, 13
   2957   %b = icmp uge i8 %x, 17
   2958   %c = or i1 %a, %b
   2959   ret i1 %c
   2960 }
   2961 
   2962 ; x != 13 || x >u 17
   2963 
   2964 define i1 @or_ne_ugt(i8 %x) {
   2965 ; CHECK-LABEL: @or_ne_ugt(
   2966 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
   2967 ; CHECK-NEXT:    ret i1 [[A]]
   2968 ;
   2969   %a = icmp ne i8 %x, 13
   2970   %b = icmp ugt i8 %x, 17
   2971   %c = or i1 %a, %b
   2972   ret i1 %c
   2973 }
   2974 
   2975 ; x != 13 || x <=u 17
   2976 
   2977 define i1 @or_ne_ule(i8 %x) {
   2978 ; CHECK-LABEL: @or_ne_ule(
   2979 ; CHECK-NEXT:    ret i1 true
   2980 ;
   2981   %a = icmp ne i8 %x, 13
   2982   %b = icmp ule i8 %x, 17
   2983   %c = or i1 %a, %b
   2984   ret i1 %c
   2985 }
   2986 
   2987 ; x != 13 || x <u 17
   2988 
   2989 define i1 @or_ne_ult(i8 %x) {
   2990 ; CHECK-LABEL: @or_ne_ult(
   2991 ; CHECK-NEXT:    ret i1 true
   2992 ;
   2993   %a = icmp ne i8 %x, 13
   2994   %b = icmp ult i8 %x, 17
   2995   %c = or i1 %a, %b
   2996   ret i1 %c
   2997 }
   2998 
   2999 ; sge
   3000 ; x >=s 13 || x == 17
   3001 
   3002 define i1 @or_sge_eq(i8 %x) {
   3003 ; CHECK-LABEL: @or_sge_eq(
   3004 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
   3005 ; CHECK-NEXT:    ret i1 [[A]]
   3006 ;
   3007   %a = icmp sge i8 %x, 13
   3008   %b = icmp eq i8 %x, 17
   3009   %c = or i1 %a, %b
   3010   ret i1 %c
   3011 }
   3012 
   3013 ; x >=s 13 || x != 17
   3014 
   3015 define i1 @or_sge_ne(i8 %x) {
   3016 ; CHECK-LABEL: @or_sge_ne(
   3017 ; CHECK-NEXT:    ret i1 true
   3018 ;
   3019   %a = icmp sge i8 %x, 13
   3020   %b = icmp ne i8 %x, 17
   3021   %c = or i1 %a, %b
   3022   ret i1 %c
   3023 }
   3024 
   3025 ; x >=s 13 || x >=s 17
   3026 
   3027 define i1 @or_sge_sge(i8 %x) {
   3028 ; CHECK-LABEL: @or_sge_sge(
   3029 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
   3030 ; CHECK-NEXT:    ret i1 [[A]]
   3031 ;
   3032   %a = icmp sge i8 %x, 13
   3033   %b = icmp sge i8 %x, 17
   3034   %c = or i1 %a, %b
   3035   ret i1 %c
   3036 }
   3037 
   3038 ; x >=s 13 || x >s 17
   3039 
   3040 define i1 @or_sge_sgt(i8 %x) {
   3041 ; CHECK-LABEL: @or_sge_sgt(
   3042 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
   3043 ; CHECK-NEXT:    ret i1 [[A]]
   3044 ;
   3045   %a = icmp sge i8 %x, 13
   3046   %b = icmp sgt i8 %x, 17
   3047   %c = or i1 %a, %b
   3048   ret i1 %c
   3049 }
   3050 
   3051 ; x >=s 13 || x <=s 17
   3052 
   3053 define i1 @or_sge_sle(i8 %x) {
   3054 ; CHECK-LABEL: @or_sge_sle(
   3055 ; CHECK-NEXT:    ret i1 true
   3056 ;
   3057   %a = icmp sge i8 %x, 13
   3058   %b = icmp sle i8 %x, 17
   3059   %c = or i1 %a, %b
   3060   ret i1 %c
   3061 }
   3062 
   3063 ; x >=s 13 || x <s 17
   3064 
   3065 define i1 @or_sge_slt(i8 %x) {
   3066 ; CHECK-LABEL: @or_sge_slt(
   3067 ; CHECK-NEXT:    ret i1 true
   3068 ;
   3069   %a = icmp sge i8 %x, 13
   3070   %b = icmp slt i8 %x, 17
   3071   %c = or i1 %a, %b
   3072   ret i1 %c
   3073 }
   3074 
   3075 ; x >=s 13 || x >=u 17
   3076 
   3077 define i1 @or_sge_uge(i8 %x) {
   3078 ; CHECK-LABEL: @or_sge_uge(
   3079 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
   3080 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   3081 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3082 ; CHECK-NEXT:    ret i1 [[C]]
   3083 ;
   3084   %a = icmp sge i8 %x, 13
   3085   %b = icmp uge i8 %x, 17
   3086   %c = or i1 %a, %b
   3087   ret i1 %c
   3088 }
   3089 
   3090 ; x >=s 13 || x >u 17
   3091 
   3092 define i1 @or_sge_ugt(i8 %x) {
   3093 ; CHECK-LABEL: @or_sge_ugt(
   3094 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
   3095 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   3096 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3097 ; CHECK-NEXT:    ret i1 [[C]]
   3098 ;
   3099   %a = icmp sge i8 %x, 13
   3100   %b = icmp ugt i8 %x, 17
   3101   %c = or i1 %a, %b
   3102   ret i1 %c
   3103 }
   3104 
   3105 ; x >=s 13 || x <=u 17
   3106 
   3107 define i1 @or_sge_ule(i8 %x) {
   3108 ; CHECK-LABEL: @or_sge_ule(
   3109 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
   3110 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   3111 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3112 ; CHECK-NEXT:    ret i1 [[C]]
   3113 ;
   3114   %a = icmp sge i8 %x, 13
   3115   %b = icmp ule i8 %x, 17
   3116   %c = or i1 %a, %b
   3117   ret i1 %c
   3118 }
   3119 
   3120 ; x >=s 13 || x <u 17
   3121 
   3122 define i1 @or_sge_ult(i8 %x) {
   3123 ; CHECK-LABEL: @or_sge_ult(
   3124 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
   3125 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   3126 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3127 ; CHECK-NEXT:    ret i1 [[C]]
   3128 ;
   3129   %a = icmp sge i8 %x, 13
   3130   %b = icmp ult i8 %x, 17
   3131   %c = or i1 %a, %b
   3132   ret i1 %c
   3133 }
   3134 
   3135 ; sgt
   3136 ; x >s 13 || x == 17
   3137 
   3138 define i1 @or_sgt_eq(i8 %x) {
   3139 ; CHECK-LABEL: @or_sgt_eq(
   3140 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
   3141 ; CHECK-NEXT:    ret i1 [[A]]
   3142 ;
   3143   %a = icmp sgt i8 %x, 13
   3144   %b = icmp eq i8 %x, 17
   3145   %c = or i1 %a, %b
   3146   ret i1 %c
   3147 }
   3148 
   3149 ; x >s 13 || x != 17
   3150 
   3151 define i1 @or_sgt_ne(i8 %x) {
   3152 ; CHECK-LABEL: @or_sgt_ne(
   3153 ; CHECK-NEXT:    ret i1 true
   3154 ;
   3155   %a = icmp sgt i8 %x, 13
   3156   %b = icmp ne i8 %x, 17
   3157   %c = or i1 %a, %b
   3158   ret i1 %c
   3159 }
   3160 
   3161 ; x >s 13 || x >=s 17
   3162 
   3163 define i1 @or_sgt_sge(i8 %x) {
   3164 ; CHECK-LABEL: @or_sgt_sge(
   3165 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
   3166 ; CHECK-NEXT:    ret i1 [[A]]
   3167 ;
   3168   %a = icmp sgt i8 %x, 13
   3169   %b = icmp sge i8 %x, 17
   3170   %c = or i1 %a, %b
   3171   ret i1 %c
   3172 }
   3173 
   3174 ; x >s 13 || x >s 17
   3175 
   3176 define i1 @or_sgt_sgt(i8 %x) {
   3177 ; CHECK-LABEL: @or_sgt_sgt(
   3178 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
   3179 ; CHECK-NEXT:    ret i1 [[A]]
   3180 ;
   3181   %a = icmp sgt i8 %x, 13
   3182   %b = icmp sgt i8 %x, 17
   3183   %c = or i1 %a, %b
   3184   ret i1 %c
   3185 }
   3186 
   3187 ; x >s 13 || x <=s 17
   3188 
   3189 define i1 @or_sgt_sle(i8 %x) {
   3190 ; CHECK-LABEL: @or_sgt_sle(
   3191 ; CHECK-NEXT:    ret i1 true
   3192 ;
   3193   %a = icmp sgt i8 %x, 13
   3194   %b = icmp sle i8 %x, 17
   3195   %c = or i1 %a, %b
   3196   ret i1 %c
   3197 }
   3198 
   3199 ; x >s 13 || x <s 17
   3200 
   3201 define i1 @or_sgt_slt(i8 %x) {
   3202 ; CHECK-LABEL: @or_sgt_slt(
   3203 ; CHECK-NEXT:    ret i1 true
   3204 ;
   3205   %a = icmp sgt i8 %x, 13
   3206   %b = icmp slt i8 %x, 17
   3207   %c = or i1 %a, %b
   3208   ret i1 %c
   3209 }
   3210 
   3211 ; x >s 13 || x >=u 17
   3212 
   3213 define i1 @or_sgt_uge(i8 %x) {
   3214 ; CHECK-LABEL: @or_sgt_uge(
   3215 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
   3216 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   3217 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3218 ; CHECK-NEXT:    ret i1 [[C]]
   3219 ;
   3220   %a = icmp sgt i8 %x, 13
   3221   %b = icmp uge i8 %x, 17
   3222   %c = or i1 %a, %b
   3223   ret i1 %c
   3224 }
   3225 
   3226 ; x >s 13 || x >u 17
   3227 
   3228 define i1 @or_sgt_ugt(i8 %x) {
   3229 ; CHECK-LABEL: @or_sgt_ugt(
   3230 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
   3231 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   3232 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3233 ; CHECK-NEXT:    ret i1 [[C]]
   3234 ;
   3235   %a = icmp sgt i8 %x, 13
   3236   %b = icmp ugt i8 %x, 17
   3237   %c = or i1 %a, %b
   3238   ret i1 %c
   3239 }
   3240 
   3241 ; x >s 13 || x <=u 17
   3242 
   3243 define i1 @or_sgt_ule(i8 %x) {
   3244 ; CHECK-LABEL: @or_sgt_ule(
   3245 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
   3246 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   3247 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3248 ; CHECK-NEXT:    ret i1 [[C]]
   3249 ;
   3250   %a = icmp sgt i8 %x, 13
   3251   %b = icmp ule i8 %x, 17
   3252   %c = or i1 %a, %b
   3253   ret i1 %c
   3254 }
   3255 
   3256 ; x >s 13 || x <u 17
   3257 
   3258 define i1 @or_sgt_ult(i8 %x) {
   3259 ; CHECK-LABEL: @or_sgt_ult(
   3260 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
   3261 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   3262 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3263 ; CHECK-NEXT:    ret i1 [[C]]
   3264 ;
   3265   %a = icmp sgt i8 %x, 13
   3266   %b = icmp ult i8 %x, 17
   3267   %c = or i1 %a, %b
   3268   ret i1 %c
   3269 }
   3270 
   3271 ; sle
   3272 ; x <=s 13 || x == 17
   3273 
   3274 define i1 @or_sle_eq(i8 %x) {
   3275 ; CHECK-LABEL: @or_sle_eq(
   3276 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
   3277 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   3278 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3279 ; CHECK-NEXT:    ret i1 [[C]]
   3280 ;
   3281   %a = icmp sle i8 %x, 13
   3282   %b = icmp eq i8 %x, 17
   3283   %c = or i1 %a, %b
   3284   ret i1 %c
   3285 }
   3286 
   3287 ; x <=s 13 || x != 17
   3288 
   3289 define i1 @or_sle_ne(i8 %x) {
   3290 ; CHECK-LABEL: @or_sle_ne(
   3291 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   3292 ; CHECK-NEXT:    ret i1 [[B]]
   3293 ;
   3294   %a = icmp sle i8 %x, 13
   3295   %b = icmp ne i8 %x, 17
   3296   %c = or i1 %a, %b
   3297   ret i1 %c
   3298 }
   3299 
   3300 ; x <=s 13 || x >=s 17
   3301 
   3302 define i1 @or_sle_sge(i8 %x) {
   3303 ; CHECK-LABEL: @or_sle_sge(
   3304 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
   3305 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   3306 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3307 ; CHECK-NEXT:    ret i1 [[C]]
   3308 ;
   3309   %a = icmp sle i8 %x, 13
   3310   %b = icmp sge i8 %x, 17
   3311   %c = or i1 %a, %b
   3312   ret i1 %c
   3313 }
   3314 
   3315 ; x <=s 13 || x >s 17
   3316 
   3317 define i1 @or_sle_sgt(i8 %x) {
   3318 ; CHECK-LABEL: @or_sle_sgt(
   3319 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
   3320 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   3321 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3322 ; CHECK-NEXT:    ret i1 [[C]]
   3323 ;
   3324   %a = icmp sle i8 %x, 13
   3325   %b = icmp sgt i8 %x, 17
   3326   %c = or i1 %a, %b
   3327   ret i1 %c
   3328 }
   3329 
   3330 ; x <=s 13 || x <=s 17
   3331 
   3332 define i1 @or_sle_sle(i8 %x) {
   3333 ; CHECK-LABEL: @or_sle_sle(
   3334 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   3335 ; CHECK-NEXT:    ret i1 [[B]]
   3336 ;
   3337   %a = icmp sle i8 %x, 13
   3338   %b = icmp sle i8 %x, 17
   3339   %c = or i1 %a, %b
   3340   ret i1 %c
   3341 }
   3342 
   3343 ; x <=s 13 || x <s 17
   3344 
   3345 define i1 @or_sle_slt(i8 %x) {
   3346 ; CHECK-LABEL: @or_sle_slt(
   3347 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   3348 ; CHECK-NEXT:    ret i1 [[B]]
   3349 ;
   3350   %a = icmp sle i8 %x, 13
   3351   %b = icmp slt i8 %x, 17
   3352   %c = or i1 %a, %b
   3353   ret i1 %c
   3354 }
   3355 
   3356 ; x <=s 13 || x >=u 17
   3357 
   3358 define i1 @or_sle_uge(i8 %x) {
   3359 ; CHECK-LABEL: @or_sle_uge(
   3360 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
   3361 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   3362 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3363 ; CHECK-NEXT:    ret i1 [[C]]
   3364 ;
   3365   %a = icmp sle i8 %x, 13
   3366   %b = icmp uge i8 %x, 17
   3367   %c = or i1 %a, %b
   3368   ret i1 %c
   3369 }
   3370 
   3371 ; x <=s 13 || x >u 17
   3372 
   3373 define i1 @or_sle_ugt(i8 %x) {
   3374 ; CHECK-LABEL: @or_sle_ugt(
   3375 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
   3376 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   3377 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3378 ; CHECK-NEXT:    ret i1 [[C]]
   3379 ;
   3380   %a = icmp sle i8 %x, 13
   3381   %b = icmp ugt i8 %x, 17
   3382   %c = or i1 %a, %b
   3383   ret i1 %c
   3384 }
   3385 
   3386 ; x <=s 13 || x <=u 17
   3387 
   3388 define i1 @or_sle_ule(i8 %x) {
   3389 ; CHECK-LABEL: @or_sle_ule(
   3390 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
   3391 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   3392 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3393 ; CHECK-NEXT:    ret i1 [[C]]
   3394 ;
   3395   %a = icmp sle i8 %x, 13
   3396   %b = icmp ule i8 %x, 17
   3397   %c = or i1 %a, %b
   3398   ret i1 %c
   3399 }
   3400 
   3401 ; x <=s 13 || x <u 17
   3402 
   3403 define i1 @or_sle_ult(i8 %x) {
   3404 ; CHECK-LABEL: @or_sle_ult(
   3405 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
   3406 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   3407 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3408 ; CHECK-NEXT:    ret i1 [[C]]
   3409 ;
   3410   %a = icmp sle i8 %x, 13
   3411   %b = icmp ult i8 %x, 17
   3412   %c = or i1 %a, %b
   3413   ret i1 %c
   3414 }
   3415 
   3416 ; slt
   3417 ; x <s 13 || x == 17
   3418 
   3419 define i1 @or_slt_eq(i8 %x) {
   3420 ; CHECK-LABEL: @or_slt_eq(
   3421 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
   3422 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   3423 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3424 ; CHECK-NEXT:    ret i1 [[C]]
   3425 ;
   3426   %a = icmp slt i8 %x, 13
   3427   %b = icmp eq i8 %x, 17
   3428   %c = or i1 %a, %b
   3429   ret i1 %c
   3430 }
   3431 
   3432 ; x <s 13 || x != 17
   3433 
   3434 define i1 @or_slt_ne(i8 %x) {
   3435 ; CHECK-LABEL: @or_slt_ne(
   3436 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   3437 ; CHECK-NEXT:    ret i1 [[B]]
   3438 ;
   3439   %a = icmp slt i8 %x, 13
   3440   %b = icmp ne i8 %x, 17
   3441   %c = or i1 %a, %b
   3442   ret i1 %c
   3443 }
   3444 
   3445 ; x <s 13 || x >=s 17
   3446 
   3447 define i1 @or_slt_sge(i8 %x) {
   3448 ; CHECK-LABEL: @or_slt_sge(
   3449 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
   3450 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   3451 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3452 ; CHECK-NEXT:    ret i1 [[C]]
   3453 ;
   3454   %a = icmp slt i8 %x, 13
   3455   %b = icmp sge i8 %x, 17
   3456   %c = or i1 %a, %b
   3457   ret i1 %c
   3458 }
   3459 
   3460 ; x <s 13 || x >s 17
   3461 
   3462 define i1 @or_slt_sgt(i8 %x) {
   3463 ; CHECK-LABEL: @or_slt_sgt(
   3464 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
   3465 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   3466 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3467 ; CHECK-NEXT:    ret i1 [[C]]
   3468 ;
   3469   %a = icmp slt i8 %x, 13
   3470   %b = icmp sgt i8 %x, 17
   3471   %c = or i1 %a, %b
   3472   ret i1 %c
   3473 }
   3474 
   3475 ; x <s 13 || x <=s 17
   3476 
   3477 define i1 @or_slt_sle(i8 %x) {
   3478 ; CHECK-LABEL: @or_slt_sle(
   3479 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   3480 ; CHECK-NEXT:    ret i1 [[B]]
   3481 ;
   3482   %a = icmp slt i8 %x, 13
   3483   %b = icmp sle i8 %x, 17
   3484   %c = or i1 %a, %b
   3485   ret i1 %c
   3486 }
   3487 
   3488 ; x <s 13 || x <s 17
   3489 
   3490 define i1 @or_slt_slt(i8 %x) {
   3491 ; CHECK-LABEL: @or_slt_slt(
   3492 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   3493 ; CHECK-NEXT:    ret i1 [[B]]
   3494 ;
   3495   %a = icmp slt i8 %x, 13
   3496   %b = icmp slt i8 %x, 17
   3497   %c = or i1 %a, %b
   3498   ret i1 %c
   3499 }
   3500 
   3501 ; x <s 13 || x >=u 17
   3502 
   3503 define i1 @or_slt_uge(i8 %x) {
   3504 ; CHECK-LABEL: @or_slt_uge(
   3505 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
   3506 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   3507 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3508 ; CHECK-NEXT:    ret i1 [[C]]
   3509 ;
   3510   %a = icmp slt i8 %x, 13
   3511   %b = icmp uge i8 %x, 17
   3512   %c = or i1 %a, %b
   3513   ret i1 %c
   3514 }
   3515 
   3516 ; x <s 13 || x >u 17
   3517 
   3518 define i1 @or_slt_ugt(i8 %x) {
   3519 ; CHECK-LABEL: @or_slt_ugt(
   3520 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
   3521 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   3522 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3523 ; CHECK-NEXT:    ret i1 [[C]]
   3524 ;
   3525   %a = icmp slt i8 %x, 13
   3526   %b = icmp ugt i8 %x, 17
   3527   %c = or i1 %a, %b
   3528   ret i1 %c
   3529 }
   3530 
   3531 ; x <s 13 || x <=u 17
   3532 
   3533 define i1 @or_slt_ule(i8 %x) {
   3534 ; CHECK-LABEL: @or_slt_ule(
   3535 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
   3536 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   3537 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3538 ; CHECK-NEXT:    ret i1 [[C]]
   3539 ;
   3540   %a = icmp slt i8 %x, 13
   3541   %b = icmp ule i8 %x, 17
   3542   %c = or i1 %a, %b
   3543   ret i1 %c
   3544 }
   3545 
   3546 ; x <s 13 || x <u 17
   3547 
   3548 define i1 @or_slt_ult(i8 %x) {
   3549 ; CHECK-LABEL: @or_slt_ult(
   3550 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
   3551 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   3552 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3553 ; CHECK-NEXT:    ret i1 [[C]]
   3554 ;
   3555   %a = icmp slt i8 %x, 13
   3556   %b = icmp ult i8 %x, 17
   3557   %c = or i1 %a, %b
   3558   ret i1 %c
   3559 }
   3560 
   3561 ; uge
   3562 ; x >=u 13 || x == 17
   3563 
   3564 define i1 @or_uge_eq(i8 %x) {
   3565 ; CHECK-LABEL: @or_uge_eq(
   3566 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
   3567 ; CHECK-NEXT:    ret i1 [[A]]
   3568 ;
   3569   %a = icmp uge i8 %x, 13
   3570   %b = icmp eq i8 %x, 17
   3571   %c = or i1 %a, %b
   3572   ret i1 %c
   3573 }
   3574 
   3575 ; x >=u 13 || x != 17
   3576 
   3577 define i1 @or_uge_ne(i8 %x) {
   3578 ; CHECK-LABEL: @or_uge_ne(
   3579 ; CHECK-NEXT:    ret i1 true
   3580 ;
   3581   %a = icmp uge i8 %x, 13
   3582   %b = icmp ne i8 %x, 17
   3583   %c = or i1 %a, %b
   3584   ret i1 %c
   3585 }
   3586 
   3587 ; x >=u 13 || x >=s 17
   3588 
   3589 define i1 @or_uge_sge(i8 %x) {
   3590 ; CHECK-LABEL: @or_uge_sge(
   3591 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
   3592 ; CHECK-NEXT:    ret i1 [[A]]
   3593 ;
   3594   %a = icmp uge i8 %x, 13
   3595   %b = icmp sge i8 %x, 17
   3596   %c = or i1 %a, %b
   3597   ret i1 %c
   3598 }
   3599 
   3600 ; x >=u 13 || x >s 17
   3601 
   3602 define i1 @or_uge_sgt(i8 %x) {
   3603 ; CHECK-LABEL: @or_uge_sgt(
   3604 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
   3605 ; CHECK-NEXT:    ret i1 [[A]]
   3606 ;
   3607   %a = icmp uge i8 %x, 13
   3608   %b = icmp sgt i8 %x, 17
   3609   %c = or i1 %a, %b
   3610   ret i1 %c
   3611 }
   3612 
   3613 ; x >=u 13 || x <=s 17
   3614 
   3615 define i1 @or_uge_sle(i8 %x) {
   3616 ; CHECK-LABEL: @or_uge_sle(
   3617 ; CHECK-NEXT:    ret i1 true
   3618 ;
   3619   %a = icmp uge i8 %x, 13
   3620   %b = icmp sle i8 %x, 17
   3621   %c = or i1 %a, %b
   3622   ret i1 %c
   3623 }
   3624 
   3625 ; x >=u 13 || x <s 17
   3626 
   3627 define i1 @or_uge_slt(i8 %x) {
   3628 ; CHECK-LABEL: @or_uge_slt(
   3629 ; CHECK-NEXT:    ret i1 true
   3630 ;
   3631   %a = icmp uge i8 %x, 13
   3632   %b = icmp slt i8 %x, 17
   3633   %c = or i1 %a, %b
   3634   ret i1 %c
   3635 }
   3636 
   3637 ; x >=u 13 || x >=u 17
   3638 
   3639 define i1 @or_uge_uge(i8 %x) {
   3640 ; CHECK-LABEL: @or_uge_uge(
   3641 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
   3642 ; CHECK-NEXT:    ret i1 [[A]]
   3643 ;
   3644   %a = icmp uge i8 %x, 13
   3645   %b = icmp uge i8 %x, 17
   3646   %c = or i1 %a, %b
   3647   ret i1 %c
   3648 }
   3649 
   3650 ; x >=u 13 || x >u 17
   3651 
   3652 define i1 @or_uge_ugt(i8 %x) {
   3653 ; CHECK-LABEL: @or_uge_ugt(
   3654 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
   3655 ; CHECK-NEXT:    ret i1 [[A]]
   3656 ;
   3657   %a = icmp uge i8 %x, 13
   3658   %b = icmp ugt i8 %x, 17
   3659   %c = or i1 %a, %b
   3660   ret i1 %c
   3661 }
   3662 
   3663 ; x >=u 13 || x <=u 17
   3664 
   3665 define i1 @or_uge_ule(i8 %x) {
   3666 ; CHECK-LABEL: @or_uge_ule(
   3667 ; CHECK-NEXT:    ret i1 true
   3668 ;
   3669   %a = icmp uge i8 %x, 13
   3670   %b = icmp ule i8 %x, 17
   3671   %c = or i1 %a, %b
   3672   ret i1 %c
   3673 }
   3674 
   3675 ; x >=u 13 || x <u 17
   3676 
   3677 define i1 @or_uge_ult(i8 %x) {
   3678 ; CHECK-LABEL: @or_uge_ult(
   3679 ; CHECK-NEXT:    ret i1 true
   3680 ;
   3681   %a = icmp uge i8 %x, 13
   3682   %b = icmp ult i8 %x, 17
   3683   %c = or i1 %a, %b
   3684   ret i1 %c
   3685 }
   3686 
   3687 ; ugt
   3688 ; x >u 13 || x == 17
   3689 
   3690 define i1 @or_ugt_eq(i8 %x) {
   3691 ; CHECK-LABEL: @or_ugt_eq(
   3692 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
   3693 ; CHECK-NEXT:    ret i1 [[A]]
   3694 ;
   3695   %a = icmp ugt i8 %x, 13
   3696   %b = icmp eq i8 %x, 17
   3697   %c = or i1 %a, %b
   3698   ret i1 %c
   3699 }
   3700 
   3701 ; x >u 13 || x != 17
   3702 
   3703 define i1 @or_ugt_ne(i8 %x) {
   3704 ; CHECK-LABEL: @or_ugt_ne(
   3705 ; CHECK-NEXT:    ret i1 true
   3706 ;
   3707   %a = icmp ugt i8 %x, 13
   3708   %b = icmp ne i8 %x, 17
   3709   %c = or i1 %a, %b
   3710   ret i1 %c
   3711 }
   3712 
   3713 ; x >u 13 || x >=s 17
   3714 
   3715 define i1 @or_ugt_sge(i8 %x) {
   3716 ; CHECK-LABEL: @or_ugt_sge(
   3717 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
   3718 ; CHECK-NEXT:    ret i1 [[A]]
   3719 ;
   3720   %a = icmp ugt i8 %x, 13
   3721   %b = icmp sge i8 %x, 17
   3722   %c = or i1 %a, %b
   3723   ret i1 %c
   3724 }
   3725 
   3726 ; x >u 13 || x >s 17
   3727 
   3728 define i1 @or_ugt_sgt(i8 %x) {
   3729 ; CHECK-LABEL: @or_ugt_sgt(
   3730 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
   3731 ; CHECK-NEXT:    ret i1 [[A]]
   3732 ;
   3733   %a = icmp ugt i8 %x, 13
   3734   %b = icmp sgt i8 %x, 17
   3735   %c = or i1 %a, %b
   3736   ret i1 %c
   3737 }
   3738 
   3739 ; x >u 13 || x <=s 17
   3740 
   3741 define i1 @or_ugt_sle(i8 %x) {
   3742 ; CHECK-LABEL: @or_ugt_sle(
   3743 ; CHECK-NEXT:    ret i1 true
   3744 ;
   3745   %a = icmp ugt i8 %x, 13
   3746   %b = icmp sle i8 %x, 17
   3747   %c = or i1 %a, %b
   3748   ret i1 %c
   3749 }
   3750 
   3751 ; x >u 13 || x <s 17
   3752 
   3753 define i1 @or_ugt_slt(i8 %x) {
   3754 ; CHECK-LABEL: @or_ugt_slt(
   3755 ; CHECK-NEXT:    ret i1 true
   3756 ;
   3757   %a = icmp ugt i8 %x, 13
   3758   %b = icmp slt i8 %x, 17
   3759   %c = or i1 %a, %b
   3760   ret i1 %c
   3761 }
   3762 
   3763 ; x >u 13 || x >=u 17
   3764 
   3765 define i1 @or_ugt_uge(i8 %x) {
   3766 ; CHECK-LABEL: @or_ugt_uge(
   3767 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
   3768 ; CHECK-NEXT:    ret i1 [[A]]
   3769 ;
   3770   %a = icmp ugt i8 %x, 13
   3771   %b = icmp uge i8 %x, 17
   3772   %c = or i1 %a, %b
   3773   ret i1 %c
   3774 }
   3775 
   3776 ; x >u 13 || x >u 17
   3777 
   3778 define i1 @or_ugt_ugt(i8 %x) {
   3779 ; CHECK-LABEL: @or_ugt_ugt(
   3780 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
   3781 ; CHECK-NEXT:    ret i1 [[A]]
   3782 ;
   3783   %a = icmp ugt i8 %x, 13
   3784   %b = icmp ugt i8 %x, 17
   3785   %c = or i1 %a, %b
   3786   ret i1 %c
   3787 }
   3788 
   3789 ; x >u 13 || x <=u 17
   3790 
   3791 define i1 @or_ugt_ule(i8 %x) {
   3792 ; CHECK-LABEL: @or_ugt_ule(
   3793 ; CHECK-NEXT:    ret i1 true
   3794 ;
   3795   %a = icmp ugt i8 %x, 13
   3796   %b = icmp ule i8 %x, 17
   3797   %c = or i1 %a, %b
   3798   ret i1 %c
   3799 }
   3800 
   3801 ; x >u 13 || x <u 17
   3802 
   3803 define i1 @or_ugt_ult(i8 %x) {
   3804 ; CHECK-LABEL: @or_ugt_ult(
   3805 ; CHECK-NEXT:    ret i1 true
   3806 ;
   3807   %a = icmp ugt i8 %x, 13
   3808   %b = icmp ult i8 %x, 17
   3809   %c = or i1 %a, %b
   3810   ret i1 %c
   3811 }
   3812 
   3813 ; ule
   3814 ; x <=u 13 || x == 17
   3815 
   3816 define i1 @or_ule_eq(i8 %x) {
   3817 ; CHECK-LABEL: @or_ule_eq(
   3818 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   3819 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   3820 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3821 ; CHECK-NEXT:    ret i1 [[C]]
   3822 ;
   3823   %a = icmp ule i8 %x, 13
   3824   %b = icmp eq i8 %x, 17
   3825   %c = or i1 %a, %b
   3826   ret i1 %c
   3827 }
   3828 
   3829 ; x <=u 13 || x != 17
   3830 
   3831 define i1 @or_ule_ne(i8 %x) {
   3832 ; CHECK-LABEL: @or_ule_ne(
   3833 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   3834 ; CHECK-NEXT:    ret i1 [[B]]
   3835 ;
   3836   %a = icmp ule i8 %x, 13
   3837   %b = icmp ne i8 %x, 17
   3838   %c = or i1 %a, %b
   3839   ret i1 %c
   3840 }
   3841 
   3842 ; x <=u 13 || x >=s 17
   3843 
   3844 define i1 @or_ule_sge(i8 %x) {
   3845 ; CHECK-LABEL: @or_ule_sge(
   3846 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   3847 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   3848 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3849 ; CHECK-NEXT:    ret i1 [[C]]
   3850 ;
   3851   %a = icmp ule i8 %x, 13
   3852   %b = icmp sge i8 %x, 17
   3853   %c = or i1 %a, %b
   3854   ret i1 %c
   3855 }
   3856 
   3857 ; x <=u 13 || x >s 17
   3858 
   3859 define i1 @or_ule_sgt(i8 %x) {
   3860 ; CHECK-LABEL: @or_ule_sgt(
   3861 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   3862 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   3863 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3864 ; CHECK-NEXT:    ret i1 [[C]]
   3865 ;
   3866   %a = icmp ule i8 %x, 13
   3867   %b = icmp sgt i8 %x, 17
   3868   %c = or i1 %a, %b
   3869   ret i1 %c
   3870 }
   3871 
   3872 ; x <=u 13 || x <=s 17
   3873 
   3874 define i1 @or_ule_sle(i8 %x) {
   3875 ; CHECK-LABEL: @or_ule_sle(
   3876 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   3877 ; CHECK-NEXT:    ret i1 [[B]]
   3878 ;
   3879   %a = icmp ule i8 %x, 13
   3880   %b = icmp sle i8 %x, 17
   3881   %c = or i1 %a, %b
   3882   ret i1 %c
   3883 }
   3884 
   3885 ; x <=u 13 || x <s 17
   3886 
   3887 define i1 @or_ule_slt(i8 %x) {
   3888 ; CHECK-LABEL: @or_ule_slt(
   3889 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   3890 ; CHECK-NEXT:    ret i1 [[B]]
   3891 ;
   3892   %a = icmp ule i8 %x, 13
   3893   %b = icmp slt i8 %x, 17
   3894   %c = or i1 %a, %b
   3895   ret i1 %c
   3896 }
   3897 
   3898 ; x <=u 13 || x >=u 17
   3899 
   3900 define i1 @or_ule_uge(i8 %x) {
   3901 ; CHECK-LABEL: @or_ule_uge(
   3902 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   3903 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   3904 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3905 ; CHECK-NEXT:    ret i1 [[C]]
   3906 ;
   3907   %a = icmp ule i8 %x, 13
   3908   %b = icmp uge i8 %x, 17
   3909   %c = or i1 %a, %b
   3910   ret i1 %c
   3911 }
   3912 
   3913 ; x <=u 13 || x >u 17
   3914 
   3915 define i1 @or_ule_ugt(i8 %x) {
   3916 ; CHECK-LABEL: @or_ule_ugt(
   3917 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
   3918 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   3919 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3920 ; CHECK-NEXT:    ret i1 [[C]]
   3921 ;
   3922   %a = icmp ule i8 %x, 13
   3923   %b = icmp ugt i8 %x, 17
   3924   %c = or i1 %a, %b
   3925   ret i1 %c
   3926 }
   3927 
   3928 ; x <=u 13 || x <=u 17
   3929 
   3930 define i1 @or_ule_ule(i8 %x) {
   3931 ; CHECK-LABEL: @or_ule_ule(
   3932 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   3933 ; CHECK-NEXT:    ret i1 [[B]]
   3934 ;
   3935   %a = icmp ule i8 %x, 13
   3936   %b = icmp ule i8 %x, 17
   3937   %c = or i1 %a, %b
   3938   ret i1 %c
   3939 }
   3940 
   3941 ; x <=u 13 || x <u 17
   3942 
   3943 define i1 @or_ule_ult(i8 %x) {
   3944 ; CHECK-LABEL: @or_ule_ult(
   3945 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   3946 ; CHECK-NEXT:    ret i1 [[B]]
   3947 ;
   3948   %a = icmp ule i8 %x, 13
   3949   %b = icmp ult i8 %x, 17
   3950   %c = or i1 %a, %b
   3951   ret i1 %c
   3952 }
   3953 
   3954 ; ult
   3955 ; x <u 13 || x == 17
   3956 
   3957 define i1 @or_ult_eq(i8 %x) {
   3958 ; CHECK-LABEL: @or_ult_eq(
   3959 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   3960 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   3961 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3962 ; CHECK-NEXT:    ret i1 [[C]]
   3963 ;
   3964   %a = icmp ult i8 %x, 13
   3965   %b = icmp eq i8 %x, 17
   3966   %c = or i1 %a, %b
   3967   ret i1 %c
   3968 }
   3969 
   3970 ; x <u 13 || x != 17
   3971 
   3972 define i1 @or_ult_ne(i8 %x) {
   3973 ; CHECK-LABEL: @or_ult_ne(
   3974 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   3975 ; CHECK-NEXT:    ret i1 [[B]]
   3976 ;
   3977   %a = icmp ult i8 %x, 13
   3978   %b = icmp ne i8 %x, 17
   3979   %c = or i1 %a, %b
   3980   ret i1 %c
   3981 }
   3982 
   3983 ; x <u 13 || x >=s 17
   3984 
   3985 define i1 @or_ult_sge(i8 %x) {
   3986 ; CHECK-LABEL: @or_ult_sge(
   3987 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   3988 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   3989 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   3990 ; CHECK-NEXT:    ret i1 [[C]]
   3991 ;
   3992   %a = icmp ult i8 %x, 13
   3993   %b = icmp sge i8 %x, 17
   3994   %c = or i1 %a, %b
   3995   ret i1 %c
   3996 }
   3997 
   3998 ; x <u 13 || x >s 17
   3999 
   4000 define i1 @or_ult_sgt(i8 %x) {
   4001 ; CHECK-LABEL: @or_ult_sgt(
   4002 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   4003 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   4004 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4005 ; CHECK-NEXT:    ret i1 [[C]]
   4006 ;
   4007   %a = icmp ult i8 %x, 13
   4008   %b = icmp sgt i8 %x, 17
   4009   %c = or i1 %a, %b
   4010   ret i1 %c
   4011 }
   4012 
   4013 ; x <u 13 || x <=s 17
   4014 
   4015 define i1 @or_ult_sle(i8 %x) {
   4016 ; CHECK-LABEL: @or_ult_sle(
   4017 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   4018 ; CHECK-NEXT:    ret i1 [[B]]
   4019 ;
   4020   %a = icmp ult i8 %x, 13
   4021   %b = icmp sle i8 %x, 17
   4022   %c = or i1 %a, %b
   4023   ret i1 %c
   4024 }
   4025 
   4026 ; x <u 13 || x <s 17
   4027 
   4028 define i1 @or_ult_slt(i8 %x) {
   4029 ; CHECK-LABEL: @or_ult_slt(
   4030 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   4031 ; CHECK-NEXT:    ret i1 [[B]]
   4032 ;
   4033   %a = icmp ult i8 %x, 13
   4034   %b = icmp slt i8 %x, 17
   4035   %c = or i1 %a, %b
   4036   ret i1 %c
   4037 }
   4038 
   4039 ; x <u 13 || x >=u 17
   4040 
   4041 define i1 @or_ult_uge(i8 %x) {
   4042 ; CHECK-LABEL: @or_ult_uge(
   4043 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   4044 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   4045 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4046 ; CHECK-NEXT:    ret i1 [[C]]
   4047 ;
   4048   %a = icmp ult i8 %x, 13
   4049   %b = icmp uge i8 %x, 17
   4050   %c = or i1 %a, %b
   4051   ret i1 %c
   4052 }
   4053 
   4054 ; x <u 13 || x >u 17
   4055 
   4056 define i1 @or_ult_ugt(i8 %x) {
   4057 ; CHECK-LABEL: @or_ult_ugt(
   4058 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
   4059 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   4060 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4061 ; CHECK-NEXT:    ret i1 [[C]]
   4062 ;
   4063   %a = icmp ult i8 %x, 13
   4064   %b = icmp ugt i8 %x, 17
   4065   %c = or i1 %a, %b
   4066   ret i1 %c
   4067 }
   4068 
   4069 ; x <u 13 || x <=u 17
   4070 
   4071 define i1 @or_ult_ule(i8 %x) {
   4072 ; CHECK-LABEL: @or_ult_ule(
   4073 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   4074 ; CHECK-NEXT:    ret i1 [[B]]
   4075 ;
   4076   %a = icmp ult i8 %x, 13
   4077   %b = icmp ule i8 %x, 17
   4078   %c = or i1 %a, %b
   4079   ret i1 %c
   4080 }
   4081 
   4082 ; x <u 13 || x <u 17
   4083 
   4084 define i1 @or_ult_ult(i8 %x) {
   4085 ; CHECK-LABEL: @or_ult_ult(
   4086 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   4087 ; CHECK-NEXT:    ret i1 [[B]]
   4088 ;
   4089   %a = icmp ult i8 %x, 13
   4090   %b = icmp ult i8 %x, 17
   4091   %c = or i1 %a, %b
   4092   ret i1 %c
   4093 }
   4094 
   4095 ; eq
   4096 ; x == 23 || x == 17
   4097 
   4098 define i1 @or_eq_eq_swap(i8 %x) {
   4099 ; CHECK-LABEL: @or_eq_eq_swap(
   4100 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   4101 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   4102 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4103 ; CHECK-NEXT:    ret i1 [[C]]
   4104 ;
   4105   %a = icmp eq i8 %x, 23
   4106   %b = icmp eq i8 %x, 17
   4107   %c = or i1 %a, %b
   4108   ret i1 %c
   4109 }
   4110 
   4111 ; x == 23 || x != 17
   4112 
   4113 define i1 @or_eq_ne_swap(i8 %x) {
   4114 ; CHECK-LABEL: @or_eq_ne_swap(
   4115 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   4116 ; CHECK-NEXT:    ret i1 [[B]]
   4117 ;
   4118   %a = icmp eq i8 %x, 23
   4119   %b = icmp ne i8 %x, 17
   4120   %c = or i1 %a, %b
   4121   ret i1 %c
   4122 }
   4123 
   4124 ; x == 23 || x >=s 17
   4125 
   4126 define i1 @or_eq_sge_swap(i8 %x) {
   4127 ; CHECK-LABEL: @or_eq_sge_swap(
   4128 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   4129 ; CHECK-NEXT:    ret i1 [[B]]
   4130 ;
   4131   %a = icmp eq i8 %x, 23
   4132   %b = icmp sge i8 %x, 17
   4133   %c = or i1 %a, %b
   4134   ret i1 %c
   4135 }
   4136 
   4137 ; x == 23 || x >s 17
   4138 
   4139 define i1 @or_eq_sgt_swap(i8 %x) {
   4140 ; CHECK-LABEL: @or_eq_sgt_swap(
   4141 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   4142 ; CHECK-NEXT:    ret i1 [[B]]
   4143 ;
   4144   %a = icmp eq i8 %x, 23
   4145   %b = icmp sgt i8 %x, 17
   4146   %c = or i1 %a, %b
   4147   ret i1 %c
   4148 }
   4149 
   4150 ; x == 23 || x <=s 17
   4151 
   4152 define i1 @or_eq_sle_swap(i8 %x) {
   4153 ; CHECK-LABEL: @or_eq_sle_swap(
   4154 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   4155 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   4156 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4157 ; CHECK-NEXT:    ret i1 [[C]]
   4158 ;
   4159   %a = icmp eq i8 %x, 23
   4160   %b = icmp sle i8 %x, 17
   4161   %c = or i1 %a, %b
   4162   ret i1 %c
   4163 }
   4164 
   4165 ; x == 23 || x <s 17
   4166 
   4167 define i1 @or_eq_slt_swap(i8 %x) {
   4168 ; CHECK-LABEL: @or_eq_slt_swap(
   4169 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   4170 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   4171 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4172 ; CHECK-NEXT:    ret i1 [[C]]
   4173 ;
   4174   %a = icmp eq i8 %x, 23
   4175   %b = icmp slt i8 %x, 17
   4176   %c = or i1 %a, %b
   4177   ret i1 %c
   4178 }
   4179 
   4180 ; x == 23 || x >=u 17
   4181 
   4182 define i1 @or_eq_uge_swap(i8 %x) {
   4183 ; CHECK-LABEL: @or_eq_uge_swap(
   4184 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   4185 ; CHECK-NEXT:    ret i1 [[B]]
   4186 ;
   4187   %a = icmp eq i8 %x, 23
   4188   %b = icmp uge i8 %x, 17
   4189   %c = or i1 %a, %b
   4190   ret i1 %c
   4191 }
   4192 
   4193 ; x == 23 || x >u 17
   4194 
   4195 define i1 @or_eq_ugt_swap(i8 %x) {
   4196 ; CHECK-LABEL: @or_eq_ugt_swap(
   4197 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   4198 ; CHECK-NEXT:    ret i1 [[B]]
   4199 ;
   4200   %a = icmp eq i8 %x, 23
   4201   %b = icmp ugt i8 %x, 17
   4202   %c = or i1 %a, %b
   4203   ret i1 %c
   4204 }
   4205 
   4206 ; x == 23 || x <=u 17
   4207 
   4208 define i1 @or_eq_ule_swap(i8 %x) {
   4209 ; CHECK-LABEL: @or_eq_ule_swap(
   4210 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   4211 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   4212 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4213 ; CHECK-NEXT:    ret i1 [[C]]
   4214 ;
   4215   %a = icmp eq i8 %x, 23
   4216   %b = icmp ule i8 %x, 17
   4217   %c = or i1 %a, %b
   4218   ret i1 %c
   4219 }
   4220 
   4221 ; x == 23 || x <u 17
   4222 
   4223 define i1 @or_eq_ult_swap(i8 %x) {
   4224 ; CHECK-LABEL: @or_eq_ult_swap(
   4225 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
   4226 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   4227 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4228 ; CHECK-NEXT:    ret i1 [[C]]
   4229 ;
   4230   %a = icmp eq i8 %x, 23
   4231   %b = icmp ult i8 %x, 17
   4232   %c = or i1 %a, %b
   4233   ret i1 %c
   4234 }
   4235 
   4236 ; ne
   4237 ; x != 23 || x == 17
   4238 
   4239 define i1 @or_ne_eq_swap(i8 %x) {
   4240 ; CHECK-LABEL: @or_ne_eq_swap(
   4241 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   4242 ; CHECK-NEXT:    ret i1 [[A]]
   4243 ;
   4244   %a = icmp ne i8 %x, 23
   4245   %b = icmp eq i8 %x, 17
   4246   %c = or i1 %a, %b
   4247   ret i1 %c
   4248 }
   4249 
   4250 ; x != 23 || x != 17
   4251 
   4252 define i1 @or_ne_ne_swap(i8 %x) {
   4253 ; CHECK-LABEL: @or_ne_ne_swap(
   4254 ; CHECK-NEXT:    ret i1 true
   4255 ;
   4256   %a = icmp ne i8 %x, 23
   4257   %b = icmp ne i8 %x, 17
   4258   %c = or i1 %a, %b
   4259   ret i1 %c
   4260 }
   4261 
   4262 ; x != 23 || x >=s 17
   4263 
   4264 define i1 @or_ne_sge_swap(i8 %x) {
   4265 ; CHECK-LABEL: @or_ne_sge_swap(
   4266 ; CHECK-NEXT:    ret i1 true
   4267 ;
   4268   %a = icmp ne i8 %x, 23
   4269   %b = icmp sge i8 %x, 17
   4270   %c = or i1 %a, %b
   4271   ret i1 %c
   4272 }
   4273 
   4274 ; x != 23 || x >s 17
   4275 
   4276 define i1 @or_ne_sgt_swap(i8 %x) {
   4277 ; CHECK-LABEL: @or_ne_sgt_swap(
   4278 ; CHECK-NEXT:    ret i1 true
   4279 ;
   4280   %a = icmp ne i8 %x, 23
   4281   %b = icmp sgt i8 %x, 17
   4282   %c = or i1 %a, %b
   4283   ret i1 %c
   4284 }
   4285 
   4286 ; x != 23 || x <=s 17
   4287 
   4288 define i1 @or_ne_sle_swap(i8 %x) {
   4289 ; CHECK-LABEL: @or_ne_sle_swap(
   4290 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   4291 ; CHECK-NEXT:    ret i1 [[A]]
   4292 ;
   4293   %a = icmp ne i8 %x, 23
   4294   %b = icmp sle i8 %x, 17
   4295   %c = or i1 %a, %b
   4296   ret i1 %c
   4297 }
   4298 
   4299 ; x != 23 || x <s 17
   4300 
   4301 define i1 @or_ne_slt_swap(i8 %x) {
   4302 ; CHECK-LABEL: @or_ne_slt_swap(
   4303 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   4304 ; CHECK-NEXT:    ret i1 [[A]]
   4305 ;
   4306   %a = icmp ne i8 %x, 23
   4307   %b = icmp slt i8 %x, 17
   4308   %c = or i1 %a, %b
   4309   ret i1 %c
   4310 }
   4311 
   4312 ; x != 23 || x >=u 17
   4313 
   4314 define i1 @or_ne_uge_swap(i8 %x) {
   4315 ; CHECK-LABEL: @or_ne_uge_swap(
   4316 ; CHECK-NEXT:    ret i1 true
   4317 ;
   4318   %a = icmp ne i8 %x, 23
   4319   %b = icmp uge i8 %x, 17
   4320   %c = or i1 %a, %b
   4321   ret i1 %c
   4322 }
   4323 
   4324 ; x != 23 || x >u 17
   4325 
   4326 define i1 @or_ne_ugt_swap(i8 %x) {
   4327 ; CHECK-LABEL: @or_ne_ugt_swap(
   4328 ; CHECK-NEXT:    ret i1 true
   4329 ;
   4330   %a = icmp ne i8 %x, 23
   4331   %b = icmp ugt i8 %x, 17
   4332   %c = or i1 %a, %b
   4333   ret i1 %c
   4334 }
   4335 
   4336 ; x != 23 || x <=u 17
   4337 
   4338 define i1 @or_ne_ule_swap(i8 %x) {
   4339 ; CHECK-LABEL: @or_ne_ule_swap(
   4340 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   4341 ; CHECK-NEXT:    ret i1 [[A]]
   4342 ;
   4343   %a = icmp ne i8 %x, 23
   4344   %b = icmp ule i8 %x, 17
   4345   %c = or i1 %a, %b
   4346   ret i1 %c
   4347 }
   4348 
   4349 ; x != 23 || x <u 17
   4350 
   4351 define i1 @or_ne_ult_swap(i8 %x) {
   4352 ; CHECK-LABEL: @or_ne_ult_swap(
   4353 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
   4354 ; CHECK-NEXT:    ret i1 [[A]]
   4355 ;
   4356   %a = icmp ne i8 %x, 23
   4357   %b = icmp ult i8 %x, 17
   4358   %c = or i1 %a, %b
   4359   ret i1 %c
   4360 }
   4361 
   4362 ; sge
   4363 ; x >=s 23 || x == 17
   4364 
   4365 define i1 @or_sge_eq_swap(i8 %x) {
   4366 ; CHECK-LABEL: @or_sge_eq_swap(
   4367 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   4368 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   4369 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4370 ; CHECK-NEXT:    ret i1 [[C]]
   4371 ;
   4372   %a = icmp sge i8 %x, 23
   4373   %b = icmp eq i8 %x, 17
   4374   %c = or i1 %a, %b
   4375   ret i1 %c
   4376 }
   4377 
   4378 ; x >=s 23 || x != 17
   4379 
   4380 define i1 @or_sge_ne_swap(i8 %x) {
   4381 ; CHECK-LABEL: @or_sge_ne_swap(
   4382 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   4383 ; CHECK-NEXT:    ret i1 [[B]]
   4384 ;
   4385   %a = icmp sge i8 %x, 23
   4386   %b = icmp ne i8 %x, 17
   4387   %c = or i1 %a, %b
   4388   ret i1 %c
   4389 }
   4390 
   4391 ; x >=s 23 || x >=s 17
   4392 
   4393 define i1 @or_sge_sge_swap(i8 %x) {
   4394 ; CHECK-LABEL: @or_sge_sge_swap(
   4395 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   4396 ; CHECK-NEXT:    ret i1 [[B]]
   4397 ;
   4398   %a = icmp sge i8 %x, 23
   4399   %b = icmp sge i8 %x, 17
   4400   %c = or i1 %a, %b
   4401   ret i1 %c
   4402 }
   4403 
   4404 ; x >=s 23 || x >s 17
   4405 
   4406 define i1 @or_sge_sgt_swap(i8 %x) {
   4407 ; CHECK-LABEL: @or_sge_sgt_swap(
   4408 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   4409 ; CHECK-NEXT:    ret i1 [[B]]
   4410 ;
   4411   %a = icmp sge i8 %x, 23
   4412   %b = icmp sgt i8 %x, 17
   4413   %c = or i1 %a, %b
   4414   ret i1 %c
   4415 }
   4416 
   4417 ; x >=s 23 || x <=s 17
   4418 
   4419 define i1 @or_sge_sle_swap(i8 %x) {
   4420 ; CHECK-LABEL: @or_sge_sle_swap(
   4421 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   4422 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   4423 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4424 ; CHECK-NEXT:    ret i1 [[C]]
   4425 ;
   4426   %a = icmp sge i8 %x, 23
   4427   %b = icmp sle i8 %x, 17
   4428   %c = or i1 %a, %b
   4429   ret i1 %c
   4430 }
   4431 
   4432 ; x >=s 23 || x <s 17
   4433 
   4434 define i1 @or_sge_slt_swap(i8 %x) {
   4435 ; CHECK-LABEL: @or_sge_slt_swap(
   4436 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   4437 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   4438 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4439 ; CHECK-NEXT:    ret i1 [[C]]
   4440 ;
   4441   %a = icmp sge i8 %x, 23
   4442   %b = icmp slt i8 %x, 17
   4443   %c = or i1 %a, %b
   4444   ret i1 %c
   4445 }
   4446 
   4447 ; x >=s 23 || x >=u 17
   4448 
   4449 define i1 @or_sge_uge_swap(i8 %x) {
   4450 ; CHECK-LABEL: @or_sge_uge_swap(
   4451 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   4452 ; CHECK-NEXT:    ret i1 [[B]]
   4453 ;
   4454   %a = icmp sge i8 %x, 23
   4455   %b = icmp uge i8 %x, 17
   4456   %c = or i1 %a, %b
   4457   ret i1 %c
   4458 }
   4459 
   4460 ; x >=s 23 || x >u 17
   4461 
   4462 define i1 @or_sge_ugt_swap(i8 %x) {
   4463 ; CHECK-LABEL: @or_sge_ugt_swap(
   4464 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   4465 ; CHECK-NEXT:    ret i1 [[B]]
   4466 ;
   4467   %a = icmp sge i8 %x, 23
   4468   %b = icmp ugt i8 %x, 17
   4469   %c = or i1 %a, %b
   4470   ret i1 %c
   4471 }
   4472 
   4473 ; x >=s 23 || x <=u 17
   4474 
   4475 define i1 @or_sge_ule_swap(i8 %x) {
   4476 ; CHECK-LABEL: @or_sge_ule_swap(
   4477 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   4478 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   4479 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4480 ; CHECK-NEXT:    ret i1 [[C]]
   4481 ;
   4482   %a = icmp sge i8 %x, 23
   4483   %b = icmp ule i8 %x, 17
   4484   %c = or i1 %a, %b
   4485   ret i1 %c
   4486 }
   4487 
   4488 ; x >=s 23 || x <u 17
   4489 
   4490 define i1 @or_sge_ult_swap(i8 %x) {
   4491 ; CHECK-LABEL: @or_sge_ult_swap(
   4492 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
   4493 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   4494 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4495 ; CHECK-NEXT:    ret i1 [[C]]
   4496 ;
   4497   %a = icmp sge i8 %x, 23
   4498   %b = icmp ult i8 %x, 17
   4499   %c = or i1 %a, %b
   4500   ret i1 %c
   4501 }
   4502 
   4503 ; sgt
   4504 ; x >s 23 || x == 17
   4505 
   4506 define i1 @or_sgt_eq_swap(i8 %x) {
   4507 ; CHECK-LABEL: @or_sgt_eq_swap(
   4508 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   4509 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   4510 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4511 ; CHECK-NEXT:    ret i1 [[C]]
   4512 ;
   4513   %a = icmp sgt i8 %x, 23
   4514   %b = icmp eq i8 %x, 17
   4515   %c = or i1 %a, %b
   4516   ret i1 %c
   4517 }
   4518 
   4519 ; x >s 23 || x != 17
   4520 
   4521 define i1 @or_sgt_ne_swap(i8 %x) {
   4522 ; CHECK-LABEL: @or_sgt_ne_swap(
   4523 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   4524 ; CHECK-NEXT:    ret i1 [[B]]
   4525 ;
   4526   %a = icmp sgt i8 %x, 23
   4527   %b = icmp ne i8 %x, 17
   4528   %c = or i1 %a, %b
   4529   ret i1 %c
   4530 }
   4531 
   4532 ; x >s 23 || x >=s 17
   4533 
   4534 define i1 @or_sgt_sge_swap(i8 %x) {
   4535 ; CHECK-LABEL: @or_sgt_sge_swap(
   4536 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   4537 ; CHECK-NEXT:    ret i1 [[B]]
   4538 ;
   4539   %a = icmp sgt i8 %x, 23
   4540   %b = icmp sge i8 %x, 17
   4541   %c = or i1 %a, %b
   4542   ret i1 %c
   4543 }
   4544 
   4545 ; x >s 23 || x >s 17
   4546 
   4547 define i1 @or_sgt_sgt_swap(i8 %x) {
   4548 ; CHECK-LABEL: @or_sgt_sgt_swap(
   4549 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   4550 ; CHECK-NEXT:    ret i1 [[B]]
   4551 ;
   4552   %a = icmp sgt i8 %x, 23
   4553   %b = icmp sgt i8 %x, 17
   4554   %c = or i1 %a, %b
   4555   ret i1 %c
   4556 }
   4557 
   4558 ; x >s 23 || x <=s 17
   4559 
   4560 define i1 @or_sgt_sle_swap(i8 %x) {
   4561 ; CHECK-LABEL: @or_sgt_sle_swap(
   4562 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   4563 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   4564 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4565 ; CHECK-NEXT:    ret i1 [[C]]
   4566 ;
   4567   %a = icmp sgt i8 %x, 23
   4568   %b = icmp sle i8 %x, 17
   4569   %c = or i1 %a, %b
   4570   ret i1 %c
   4571 }
   4572 
   4573 ; x >s 23 || x <s 17
   4574 
   4575 define i1 @or_sgt_slt_swap(i8 %x) {
   4576 ; CHECK-LABEL: @or_sgt_slt_swap(
   4577 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   4578 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   4579 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4580 ; CHECK-NEXT:    ret i1 [[C]]
   4581 ;
   4582   %a = icmp sgt i8 %x, 23
   4583   %b = icmp slt i8 %x, 17
   4584   %c = or i1 %a, %b
   4585   ret i1 %c
   4586 }
   4587 
   4588 ; x >s 23 || x >=u 17
   4589 
   4590 define i1 @or_sgt_uge_swap(i8 %x) {
   4591 ; CHECK-LABEL: @or_sgt_uge_swap(
   4592 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   4593 ; CHECK-NEXT:    ret i1 [[B]]
   4594 ;
   4595   %a = icmp sgt i8 %x, 23
   4596   %b = icmp uge i8 %x, 17
   4597   %c = or i1 %a, %b
   4598   ret i1 %c
   4599 }
   4600 
   4601 ; x >s 23 || x >u 17
   4602 
   4603 define i1 @or_sgt_ugt_swap(i8 %x) {
   4604 ; CHECK-LABEL: @or_sgt_ugt_swap(
   4605 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   4606 ; CHECK-NEXT:    ret i1 [[B]]
   4607 ;
   4608   %a = icmp sgt i8 %x, 23
   4609   %b = icmp ugt i8 %x, 17
   4610   %c = or i1 %a, %b
   4611   ret i1 %c
   4612 }
   4613 
   4614 ; x >s 23 || x <=u 17
   4615 
   4616 define i1 @or_sgt_ule_swap(i8 %x) {
   4617 ; CHECK-LABEL: @or_sgt_ule_swap(
   4618 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   4619 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   4620 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4621 ; CHECK-NEXT:    ret i1 [[C]]
   4622 ;
   4623   %a = icmp sgt i8 %x, 23
   4624   %b = icmp ule i8 %x, 17
   4625   %c = or i1 %a, %b
   4626   ret i1 %c
   4627 }
   4628 
   4629 ; x >s 23 || x <u 17
   4630 
   4631 define i1 @or_sgt_ult_swap(i8 %x) {
   4632 ; CHECK-LABEL: @or_sgt_ult_swap(
   4633 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
   4634 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   4635 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4636 ; CHECK-NEXT:    ret i1 [[C]]
   4637 ;
   4638   %a = icmp sgt i8 %x, 23
   4639   %b = icmp ult i8 %x, 17
   4640   %c = or i1 %a, %b
   4641   ret i1 %c
   4642 }
   4643 
   4644 ; sle
   4645 ; x <=s 23 || x == 17
   4646 
   4647 define i1 @or_sle_eq_swap(i8 %x) {
   4648 ; CHECK-LABEL: @or_sle_eq_swap(
   4649 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   4650 ; CHECK-NEXT:    ret i1 [[A]]
   4651 ;
   4652   %a = icmp sle i8 %x, 23
   4653   %b = icmp eq i8 %x, 17
   4654   %c = or i1 %a, %b
   4655   ret i1 %c
   4656 }
   4657 
   4658 ; x <=s 23 || x != 17
   4659 
   4660 define i1 @or_sle_ne_swap(i8 %x) {
   4661 ; CHECK-LABEL: @or_sle_ne_swap(
   4662 ; CHECK-NEXT:    ret i1 true
   4663 ;
   4664   %a = icmp sle i8 %x, 23
   4665   %b = icmp ne i8 %x, 17
   4666   %c = or i1 %a, %b
   4667   ret i1 %c
   4668 }
   4669 
   4670 ; x <=s 23 || x >=s 17
   4671 
   4672 define i1 @or_sle_sge_swap(i8 %x) {
   4673 ; CHECK-LABEL: @or_sle_sge_swap(
   4674 ; CHECK-NEXT:    ret i1 true
   4675 ;
   4676   %a = icmp sle i8 %x, 23
   4677   %b = icmp sge i8 %x, 17
   4678   %c = or i1 %a, %b
   4679   ret i1 %c
   4680 }
   4681 
   4682 ; x <=s 23 || x >s 17
   4683 
   4684 define i1 @or_sle_sgt_swap(i8 %x) {
   4685 ; CHECK-LABEL: @or_sle_sgt_swap(
   4686 ; CHECK-NEXT:    ret i1 true
   4687 ;
   4688   %a = icmp sle i8 %x, 23
   4689   %b = icmp sgt i8 %x, 17
   4690   %c = or i1 %a, %b
   4691   ret i1 %c
   4692 }
   4693 
   4694 ; x <=s 23 || x <=s 17
   4695 
   4696 define i1 @or_sle_sle_swap(i8 %x) {
   4697 ; CHECK-LABEL: @or_sle_sle_swap(
   4698 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   4699 ; CHECK-NEXT:    ret i1 [[A]]
   4700 ;
   4701   %a = icmp sle i8 %x, 23
   4702   %b = icmp sle i8 %x, 17
   4703   %c = or i1 %a, %b
   4704   ret i1 %c
   4705 }
   4706 
   4707 ; x <=s 23 || x <s 17
   4708 
   4709 define i1 @or_sle_slt_swap(i8 %x) {
   4710 ; CHECK-LABEL: @or_sle_slt_swap(
   4711 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   4712 ; CHECK-NEXT:    ret i1 [[A]]
   4713 ;
   4714   %a = icmp sle i8 %x, 23
   4715   %b = icmp slt i8 %x, 17
   4716   %c = or i1 %a, %b
   4717   ret i1 %c
   4718 }
   4719 
   4720 ; x <=s 23 || x >=u 17
   4721 
   4722 define i1 @or_sle_uge_swap(i8 %x) {
   4723 ; CHECK-LABEL: @or_sle_uge_swap(
   4724 ; CHECK-NEXT:    ret i1 true
   4725 ;
   4726   %a = icmp sle i8 %x, 23
   4727   %b = icmp uge i8 %x, 17
   4728   %c = or i1 %a, %b
   4729   ret i1 %c
   4730 }
   4731 
   4732 ; x <=s 23 || x >u 17
   4733 
   4734 define i1 @or_sle_ugt_swap(i8 %x) {
   4735 ; CHECK-LABEL: @or_sle_ugt_swap(
   4736 ; CHECK-NEXT:    ret i1 true
   4737 ;
   4738   %a = icmp sle i8 %x, 23
   4739   %b = icmp ugt i8 %x, 17
   4740   %c = or i1 %a, %b
   4741   ret i1 %c
   4742 }
   4743 
   4744 ; x <=s 23 || x <=u 17
   4745 
   4746 define i1 @or_sle_ule_swap(i8 %x) {
   4747 ; CHECK-LABEL: @or_sle_ule_swap(
   4748 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   4749 ; CHECK-NEXT:    ret i1 [[A]]
   4750 ;
   4751   %a = icmp sle i8 %x, 23
   4752   %b = icmp ule i8 %x, 17
   4753   %c = or i1 %a, %b
   4754   ret i1 %c
   4755 }
   4756 
   4757 ; x <=s 23 || x <u 17
   4758 
   4759 define i1 @or_sle_ult_swap(i8 %x) {
   4760 ; CHECK-LABEL: @or_sle_ult_swap(
   4761 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
   4762 ; CHECK-NEXT:    ret i1 [[A]]
   4763 ;
   4764   %a = icmp sle i8 %x, 23
   4765   %b = icmp ult i8 %x, 17
   4766   %c = or i1 %a, %b
   4767   ret i1 %c
   4768 }
   4769 
   4770 ; slt
   4771 ; x <s 23 || x == 17
   4772 
   4773 define i1 @or_slt_eq_swap(i8 %x) {
   4774 ; CHECK-LABEL: @or_slt_eq_swap(
   4775 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   4776 ; CHECK-NEXT:    ret i1 [[A]]
   4777 ;
   4778   %a = icmp slt i8 %x, 23
   4779   %b = icmp eq i8 %x, 17
   4780   %c = or i1 %a, %b
   4781   ret i1 %c
   4782 }
   4783 
   4784 ; x <s 23 || x != 17
   4785 
   4786 define i1 @or_slt_ne_swap(i8 %x) {
   4787 ; CHECK-LABEL: @or_slt_ne_swap(
   4788 ; CHECK-NEXT:    ret i1 true
   4789 ;
   4790   %a = icmp slt i8 %x, 23
   4791   %b = icmp ne i8 %x, 17
   4792   %c = or i1 %a, %b
   4793   ret i1 %c
   4794 }
   4795 
   4796 ; x <s 23 || x >=s 17
   4797 
   4798 define i1 @or_slt_sge_swap(i8 %x) {
   4799 ; CHECK-LABEL: @or_slt_sge_swap(
   4800 ; CHECK-NEXT:    ret i1 true
   4801 ;
   4802   %a = icmp slt i8 %x, 23
   4803   %b = icmp sge i8 %x, 17
   4804   %c = or i1 %a, %b
   4805   ret i1 %c
   4806 }
   4807 
   4808 ; x <s 23 || x >s 17
   4809 
   4810 define i1 @or_slt_sgt_swap(i8 %x) {
   4811 ; CHECK-LABEL: @or_slt_sgt_swap(
   4812 ; CHECK-NEXT:    ret i1 true
   4813 ;
   4814   %a = icmp slt i8 %x, 23
   4815   %b = icmp sgt i8 %x, 17
   4816   %c = or i1 %a, %b
   4817   ret i1 %c
   4818 }
   4819 
   4820 ; x <s 23 || x <=s 17
   4821 
   4822 define i1 @or_slt_sle_swap(i8 %x) {
   4823 ; CHECK-LABEL: @or_slt_sle_swap(
   4824 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   4825 ; CHECK-NEXT:    ret i1 [[A]]
   4826 ;
   4827   %a = icmp slt i8 %x, 23
   4828   %b = icmp sle i8 %x, 17
   4829   %c = or i1 %a, %b
   4830   ret i1 %c
   4831 }
   4832 
   4833 ; x <s 23 || x <s 17
   4834 
   4835 define i1 @or_slt_slt_swap(i8 %x) {
   4836 ; CHECK-LABEL: @or_slt_slt_swap(
   4837 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   4838 ; CHECK-NEXT:    ret i1 [[A]]
   4839 ;
   4840   %a = icmp slt i8 %x, 23
   4841   %b = icmp slt i8 %x, 17
   4842   %c = or i1 %a, %b
   4843   ret i1 %c
   4844 }
   4845 
   4846 ; x <s 23 || x >=u 17
   4847 
   4848 define i1 @or_slt_uge_swap(i8 %x) {
   4849 ; CHECK-LABEL: @or_slt_uge_swap(
   4850 ; CHECK-NEXT:    ret i1 true
   4851 ;
   4852   %a = icmp slt i8 %x, 23
   4853   %b = icmp uge i8 %x, 17
   4854   %c = or i1 %a, %b
   4855   ret i1 %c
   4856 }
   4857 
   4858 ; x <s 23 || x >u 17
   4859 
   4860 define i1 @or_slt_ugt_swap(i8 %x) {
   4861 ; CHECK-LABEL: @or_slt_ugt_swap(
   4862 ; CHECK-NEXT:    ret i1 true
   4863 ;
   4864   %a = icmp slt i8 %x, 23
   4865   %b = icmp ugt i8 %x, 17
   4866   %c = or i1 %a, %b
   4867   ret i1 %c
   4868 }
   4869 
   4870 ; x <s 23 || x <=u 17
   4871 
   4872 define i1 @or_slt_ule_swap(i8 %x) {
   4873 ; CHECK-LABEL: @or_slt_ule_swap(
   4874 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   4875 ; CHECK-NEXT:    ret i1 [[A]]
   4876 ;
   4877   %a = icmp slt i8 %x, 23
   4878   %b = icmp ule i8 %x, 17
   4879   %c = or i1 %a, %b
   4880   ret i1 %c
   4881 }
   4882 
   4883 ; x <s 23 || x <u 17
   4884 
   4885 define i1 @or_slt_ult_swap(i8 %x) {
   4886 ; CHECK-LABEL: @or_slt_ult_swap(
   4887 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
   4888 ; CHECK-NEXT:    ret i1 [[A]]
   4889 ;
   4890   %a = icmp slt i8 %x, 23
   4891   %b = icmp ult i8 %x, 17
   4892   %c = or i1 %a, %b
   4893   ret i1 %c
   4894 }
   4895 
   4896 ; uge
   4897 ; x >=u 23 || x == 17
   4898 
   4899 define i1 @or_uge_eq_swap(i8 %x) {
   4900 ; CHECK-LABEL: @or_uge_eq_swap(
   4901 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   4902 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   4903 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4904 ; CHECK-NEXT:    ret i1 [[C]]
   4905 ;
   4906   %a = icmp uge i8 %x, 23
   4907   %b = icmp eq i8 %x, 17
   4908   %c = or i1 %a, %b
   4909   ret i1 %c
   4910 }
   4911 
   4912 ; x >=u 23 || x != 17
   4913 
   4914 define i1 @or_uge_ne_swap(i8 %x) {
   4915 ; CHECK-LABEL: @or_uge_ne_swap(
   4916 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   4917 ; CHECK-NEXT:    ret i1 [[B]]
   4918 ;
   4919   %a = icmp uge i8 %x, 23
   4920   %b = icmp ne i8 %x, 17
   4921   %c = or i1 %a, %b
   4922   ret i1 %c
   4923 }
   4924 
   4925 ; x >=u 23 || x >=s 17
   4926 
   4927 define i1 @or_uge_sge_swap(i8 %x) {
   4928 ; CHECK-LABEL: @or_uge_sge_swap(
   4929 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   4930 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   4931 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4932 ; CHECK-NEXT:    ret i1 [[C]]
   4933 ;
   4934   %a = icmp uge i8 %x, 23
   4935   %b = icmp sge i8 %x, 17
   4936   %c = or i1 %a, %b
   4937   ret i1 %c
   4938 }
   4939 
   4940 ; x >=u 23 || x >s 17
   4941 
   4942 define i1 @or_uge_sgt_swap(i8 %x) {
   4943 ; CHECK-LABEL: @or_uge_sgt_swap(
   4944 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   4945 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   4946 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4947 ; CHECK-NEXT:    ret i1 [[C]]
   4948 ;
   4949   %a = icmp uge i8 %x, 23
   4950   %b = icmp sgt i8 %x, 17
   4951   %c = or i1 %a, %b
   4952   ret i1 %c
   4953 }
   4954 
   4955 ; x >=u 23 || x <=s 17
   4956 
   4957 define i1 @or_uge_sle_swap(i8 %x) {
   4958 ; CHECK-LABEL: @or_uge_sle_swap(
   4959 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   4960 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   4961 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4962 ; CHECK-NEXT:    ret i1 [[C]]
   4963 ;
   4964   %a = icmp uge i8 %x, 23
   4965   %b = icmp sle i8 %x, 17
   4966   %c = or i1 %a, %b
   4967   ret i1 %c
   4968 }
   4969 
   4970 ; x >=u 23 || x <s 17
   4971 
   4972 define i1 @or_uge_slt_swap(i8 %x) {
   4973 ; CHECK-LABEL: @or_uge_slt_swap(
   4974 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   4975 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   4976 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   4977 ; CHECK-NEXT:    ret i1 [[C]]
   4978 ;
   4979   %a = icmp uge i8 %x, 23
   4980   %b = icmp slt i8 %x, 17
   4981   %c = or i1 %a, %b
   4982   ret i1 %c
   4983 }
   4984 
   4985 ; x >=u 23 || x >=u 17
   4986 
   4987 define i1 @or_uge_uge_swap(i8 %x) {
   4988 ; CHECK-LABEL: @or_uge_uge_swap(
   4989 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   4990 ; CHECK-NEXT:    ret i1 [[B]]
   4991 ;
   4992   %a = icmp uge i8 %x, 23
   4993   %b = icmp uge i8 %x, 17
   4994   %c = or i1 %a, %b
   4995   ret i1 %c
   4996 }
   4997 
   4998 ; x >=u 23 || x >u 17
   4999 
   5000 define i1 @or_uge_ugt_swap(i8 %x) {
   5001 ; CHECK-LABEL: @or_uge_ugt_swap(
   5002 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   5003 ; CHECK-NEXT:    ret i1 [[B]]
   5004 ;
   5005   %a = icmp uge i8 %x, 23
   5006   %b = icmp ugt i8 %x, 17
   5007   %c = or i1 %a, %b
   5008   ret i1 %c
   5009 }
   5010 
   5011 ; x >=u 23 || x <=u 17
   5012 
   5013 define i1 @or_uge_ule_swap(i8 %x) {
   5014 ; CHECK-LABEL: @or_uge_ule_swap(
   5015 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   5016 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   5017 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5018 ; CHECK-NEXT:    ret i1 [[C]]
   5019 ;
   5020   %a = icmp uge i8 %x, 23
   5021   %b = icmp ule i8 %x, 17
   5022   %c = or i1 %a, %b
   5023   ret i1 %c
   5024 }
   5025 
   5026 ; x >=u 23 || x <u 17
   5027 
   5028 define i1 @or_uge_ult_swap(i8 %x) {
   5029 ; CHECK-LABEL: @or_uge_ult_swap(
   5030 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
   5031 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   5032 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5033 ; CHECK-NEXT:    ret i1 [[C]]
   5034 ;
   5035   %a = icmp uge i8 %x, 23
   5036   %b = icmp ult i8 %x, 17
   5037   %c = or i1 %a, %b
   5038   ret i1 %c
   5039 }
   5040 
   5041 ; ugt
   5042 ; x >u 23 || x == 17
   5043 
   5044 define i1 @or_ugt_eq_swap(i8 %x) {
   5045 ; CHECK-LABEL: @or_ugt_eq_swap(
   5046 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   5047 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
   5048 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5049 ; CHECK-NEXT:    ret i1 [[C]]
   5050 ;
   5051   %a = icmp ugt i8 %x, 23
   5052   %b = icmp eq i8 %x, 17
   5053   %c = or i1 %a, %b
   5054   ret i1 %c
   5055 }
   5056 
   5057 ; x >u 23 || x != 17
   5058 
   5059 define i1 @or_ugt_ne_swap(i8 %x) {
   5060 ; CHECK-LABEL: @or_ugt_ne_swap(
   5061 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
   5062 ; CHECK-NEXT:    ret i1 [[B]]
   5063 ;
   5064   %a = icmp ugt i8 %x, 23
   5065   %b = icmp ne i8 %x, 17
   5066   %c = or i1 %a, %b
   5067   ret i1 %c
   5068 }
   5069 
   5070 ; x >u 23 || x >=s 17
   5071 
   5072 define i1 @or_ugt_sge_swap(i8 %x) {
   5073 ; CHECK-LABEL: @or_ugt_sge_swap(
   5074 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   5075 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   5076 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5077 ; CHECK-NEXT:    ret i1 [[C]]
   5078 ;
   5079   %a = icmp ugt i8 %x, 23
   5080   %b = icmp sge i8 %x, 17
   5081   %c = or i1 %a, %b
   5082   ret i1 %c
   5083 }
   5084 
   5085 ; x >u 23 || x >s 17
   5086 
   5087 define i1 @or_ugt_sgt_swap(i8 %x) {
   5088 ; CHECK-LABEL: @or_ugt_sgt_swap(
   5089 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   5090 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   5091 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5092 ; CHECK-NEXT:    ret i1 [[C]]
   5093 ;
   5094   %a = icmp ugt i8 %x, 23
   5095   %b = icmp sgt i8 %x, 17
   5096   %c = or i1 %a, %b
   5097   ret i1 %c
   5098 }
   5099 
   5100 ; x >u 23 || x <=s 17
   5101 
   5102 define i1 @or_ugt_sle_swap(i8 %x) {
   5103 ; CHECK-LABEL: @or_ugt_sle_swap(
   5104 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   5105 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   5106 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5107 ; CHECK-NEXT:    ret i1 [[C]]
   5108 ;
   5109   %a = icmp ugt i8 %x, 23
   5110   %b = icmp sle i8 %x, 17
   5111   %c = or i1 %a, %b
   5112   ret i1 %c
   5113 }
   5114 
   5115 ; x >u 23 || x <s 17
   5116 
   5117 define i1 @or_ugt_slt_swap(i8 %x) {
   5118 ; CHECK-LABEL: @or_ugt_slt_swap(
   5119 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   5120 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   5121 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5122 ; CHECK-NEXT:    ret i1 [[C]]
   5123 ;
   5124   %a = icmp ugt i8 %x, 23
   5125   %b = icmp slt i8 %x, 17
   5126   %c = or i1 %a, %b
   5127   ret i1 %c
   5128 }
   5129 
   5130 ; x >u 23 || x >=u 17
   5131 
   5132 define i1 @or_ugt_uge_swap(i8 %x) {
   5133 ; CHECK-LABEL: @or_ugt_uge_swap(
   5134 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
   5135 ; CHECK-NEXT:    ret i1 [[B]]
   5136 ;
   5137   %a = icmp ugt i8 %x, 23
   5138   %b = icmp uge i8 %x, 17
   5139   %c = or i1 %a, %b
   5140   ret i1 %c
   5141 }
   5142 
   5143 ; x >u 23 || x >u 17
   5144 
   5145 define i1 @or_ugt_ugt_swap(i8 %x) {
   5146 ; CHECK-LABEL: @or_ugt_ugt_swap(
   5147 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
   5148 ; CHECK-NEXT:    ret i1 [[B]]
   5149 ;
   5150   %a = icmp ugt i8 %x, 23
   5151   %b = icmp ugt i8 %x, 17
   5152   %c = or i1 %a, %b
   5153   ret i1 %c
   5154 }
   5155 
   5156 ; x >u 23 || x <=u 17
   5157 
   5158 define i1 @or_ugt_ule_swap(i8 %x) {
   5159 ; CHECK-LABEL: @or_ugt_ule_swap(
   5160 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   5161 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
   5162 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5163 ; CHECK-NEXT:    ret i1 [[C]]
   5164 ;
   5165   %a = icmp ugt i8 %x, 23
   5166   %b = icmp ule i8 %x, 17
   5167   %c = or i1 %a, %b
   5168   ret i1 %c
   5169 }
   5170 
   5171 ; x >u 23 || x <u 17
   5172 
   5173 define i1 @or_ugt_ult_swap(i8 %x) {
   5174 ; CHECK-LABEL: @or_ugt_ult_swap(
   5175 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
   5176 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
   5177 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5178 ; CHECK-NEXT:    ret i1 [[C]]
   5179 ;
   5180   %a = icmp ugt i8 %x, 23
   5181   %b = icmp ult i8 %x, 17
   5182   %c = or i1 %a, %b
   5183   ret i1 %c
   5184 }
   5185 
   5186 ; ule
   5187 ; x <=u 23 || x == 17
   5188 
   5189 define i1 @or_ule_eq_swap(i8 %x) {
   5190 ; CHECK-LABEL: @or_ule_eq_swap(
   5191 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   5192 ; CHECK-NEXT:    ret i1 [[A]]
   5193 ;
   5194   %a = icmp ule i8 %x, 23
   5195   %b = icmp eq i8 %x, 17
   5196   %c = or i1 %a, %b
   5197   ret i1 %c
   5198 }
   5199 
   5200 ; x <=u 23 || x != 17
   5201 
   5202 define i1 @or_ule_ne_swap(i8 %x) {
   5203 ; CHECK-LABEL: @or_ule_ne_swap(
   5204 ; CHECK-NEXT:    ret i1 true
   5205 ;
   5206   %a = icmp ule i8 %x, 23
   5207   %b = icmp ne i8 %x, 17
   5208   %c = or i1 %a, %b
   5209   ret i1 %c
   5210 }
   5211 
   5212 ; x <=u 23 || x >=s 17
   5213 
   5214 define i1 @or_ule_sge_swap(i8 %x) {
   5215 ; CHECK-LABEL: @or_ule_sge_swap(
   5216 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   5217 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   5218 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5219 ; CHECK-NEXT:    ret i1 [[C]]
   5220 ;
   5221   %a = icmp ule i8 %x, 23
   5222   %b = icmp sge i8 %x, 17
   5223   %c = or i1 %a, %b
   5224   ret i1 %c
   5225 }
   5226 
   5227 ; x <=u 23 || x >s 17
   5228 
   5229 define i1 @or_ule_sgt_swap(i8 %x) {
   5230 ; CHECK-LABEL: @or_ule_sgt_swap(
   5231 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   5232 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   5233 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5234 ; CHECK-NEXT:    ret i1 [[C]]
   5235 ;
   5236   %a = icmp ule i8 %x, 23
   5237   %b = icmp sgt i8 %x, 17
   5238   %c = or i1 %a, %b
   5239   ret i1 %c
   5240 }
   5241 
   5242 ; x <=u 23 || x <=s 17
   5243 
   5244 define i1 @or_ule_sle_swap(i8 %x) {
   5245 ; CHECK-LABEL: @or_ule_sle_swap(
   5246 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   5247 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   5248 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5249 ; CHECK-NEXT:    ret i1 [[C]]
   5250 ;
   5251   %a = icmp ule i8 %x, 23
   5252   %b = icmp sle i8 %x, 17
   5253   %c = or i1 %a, %b
   5254   ret i1 %c
   5255 }
   5256 
   5257 ; x <=u 23 || x <s 17
   5258 
   5259 define i1 @or_ule_slt_swap(i8 %x) {
   5260 ; CHECK-LABEL: @or_ule_slt_swap(
   5261 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   5262 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   5263 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5264 ; CHECK-NEXT:    ret i1 [[C]]
   5265 ;
   5266   %a = icmp ule i8 %x, 23
   5267   %b = icmp slt i8 %x, 17
   5268   %c = or i1 %a, %b
   5269   ret i1 %c
   5270 }
   5271 
   5272 ; x <=u 23 || x >=u 17
   5273 
   5274 define i1 @or_ule_uge_swap(i8 %x) {
   5275 ; CHECK-LABEL: @or_ule_uge_swap(
   5276 ; CHECK-NEXT:    ret i1 true
   5277 ;
   5278   %a = icmp ule i8 %x, 23
   5279   %b = icmp uge i8 %x, 17
   5280   %c = or i1 %a, %b
   5281   ret i1 %c
   5282 }
   5283 
   5284 ; x <=u 23 || x >u 17
   5285 
   5286 define i1 @or_ule_ugt_swap(i8 %x) {
   5287 ; CHECK-LABEL: @or_ule_ugt_swap(
   5288 ; CHECK-NEXT:    ret i1 true
   5289 ;
   5290   %a = icmp ule i8 %x, 23
   5291   %b = icmp ugt i8 %x, 17
   5292   %c = or i1 %a, %b
   5293   ret i1 %c
   5294 }
   5295 
   5296 ; x <=u 23 || x <=u 17
   5297 
   5298 define i1 @or_ule_ule_swap(i8 %x) {
   5299 ; CHECK-LABEL: @or_ule_ule_swap(
   5300 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   5301 ; CHECK-NEXT:    ret i1 [[A]]
   5302 ;
   5303   %a = icmp ule i8 %x, 23
   5304   %b = icmp ule i8 %x, 17
   5305   %c = or i1 %a, %b
   5306   ret i1 %c
   5307 }
   5308 
   5309 ; x <=u 23 || x <u 17
   5310 
   5311 define i1 @or_ule_ult_swap(i8 %x) {
   5312 ; CHECK-LABEL: @or_ule_ult_swap(
   5313 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
   5314 ; CHECK-NEXT:    ret i1 [[A]]
   5315 ;
   5316   %a = icmp ule i8 %x, 23
   5317   %b = icmp ult i8 %x, 17
   5318   %c = or i1 %a, %b
   5319   ret i1 %c
   5320 }
   5321 
   5322 ; ult
   5323 ; x <u 23 || x == 17
   5324 
   5325 define i1 @or_ult_eq_swap(i8 %x) {
   5326 ; CHECK-LABEL: @or_ult_eq_swap(
   5327 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   5328 ; CHECK-NEXT:    ret i1 [[A]]
   5329 ;
   5330   %a = icmp ult i8 %x, 23
   5331   %b = icmp eq i8 %x, 17
   5332   %c = or i1 %a, %b
   5333   ret i1 %c
   5334 }
   5335 
   5336 ; x <u 23 || x != 17
   5337 
   5338 define i1 @or_ult_ne_swap(i8 %x) {
   5339 ; CHECK-LABEL: @or_ult_ne_swap(
   5340 ; CHECK-NEXT:    ret i1 true
   5341 ;
   5342   %a = icmp ult i8 %x, 23
   5343   %b = icmp ne i8 %x, 17
   5344   %c = or i1 %a, %b
   5345   ret i1 %c
   5346 }
   5347 
   5348 ; x <u 23 || x >=s 17
   5349 
   5350 define i1 @or_ult_sge_swap(i8 %x) {
   5351 ; CHECK-LABEL: @or_ult_sge_swap(
   5352 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   5353 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
   5354 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5355 ; CHECK-NEXT:    ret i1 [[C]]
   5356 ;
   5357   %a = icmp ult i8 %x, 23
   5358   %b = icmp sge i8 %x, 17
   5359   %c = or i1 %a, %b
   5360   ret i1 %c
   5361 }
   5362 
   5363 ; x <u 23 || x >s 17
   5364 
   5365 define i1 @or_ult_sgt_swap(i8 %x) {
   5366 ; CHECK-LABEL: @or_ult_sgt_swap(
   5367 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   5368 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
   5369 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5370 ; CHECK-NEXT:    ret i1 [[C]]
   5371 ;
   5372   %a = icmp ult i8 %x, 23
   5373   %b = icmp sgt i8 %x, 17
   5374   %c = or i1 %a, %b
   5375   ret i1 %c
   5376 }
   5377 
   5378 ; x <u 23 || x <=s 17
   5379 
   5380 define i1 @or_ult_sle_swap(i8 %x) {
   5381 ; CHECK-LABEL: @or_ult_sle_swap(
   5382 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   5383 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
   5384 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5385 ; CHECK-NEXT:    ret i1 [[C]]
   5386 ;
   5387   %a = icmp ult i8 %x, 23
   5388   %b = icmp sle i8 %x, 17
   5389   %c = or i1 %a, %b
   5390   ret i1 %c
   5391 }
   5392 
   5393 ; x <u 23 || x <s 17
   5394 
   5395 define i1 @or_ult_slt_swap(i8 %x) {
   5396 ; CHECK-LABEL: @or_ult_slt_swap(
   5397 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   5398 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
   5399 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
   5400 ; CHECK-NEXT:    ret i1 [[C]]
   5401 ;
   5402   %a = icmp ult i8 %x, 23
   5403   %b = icmp slt i8 %x, 17
   5404   %c = or i1 %a, %b
   5405   ret i1 %c
   5406 }
   5407 
   5408 ; x <u 23 || x >=u 17
   5409 
   5410 define i1 @or_ult_uge_swap(i8 %x) {
   5411 ; CHECK-LABEL: @or_ult_uge_swap(
   5412 ; CHECK-NEXT:    ret i1 true
   5413 ;
   5414   %a = icmp ult i8 %x, 23
   5415   %b = icmp uge i8 %x, 17
   5416   %c = or i1 %a, %b
   5417   ret i1 %c
   5418 }
   5419 
   5420 ; x <u 23 || x >u 17
   5421 
   5422 define i1 @or_ult_ugt_swap(i8 %x) {
   5423 ; CHECK-LABEL: @or_ult_ugt_swap(
   5424 ; CHECK-NEXT:    ret i1 true
   5425 ;
   5426   %a = icmp ult i8 %x, 23
   5427   %b = icmp ugt i8 %x, 17
   5428   %c = or i1 %a, %b
   5429   ret i1 %c
   5430 }
   5431 
   5432 ; x <u 23 || x <=u 17
   5433 
   5434 define i1 @or_ult_ule_swap(i8 %x) {
   5435 ; CHECK-LABEL: @or_ult_ule_swap(
   5436 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   5437 ; CHECK-NEXT:    ret i1 [[A]]
   5438 ;
   5439   %a = icmp ult i8 %x, 23
   5440   %b = icmp ule i8 %x, 17
   5441   %c = or i1 %a, %b
   5442   ret i1 %c
   5443 }
   5444 
   5445 ; x <u 23 || x <u 17
   5446 
   5447 define i1 @or_ult_ult_swap(i8 %x) {
   5448 ; CHECK-LABEL: @or_ult_ult_swap(
   5449 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
   5450 ; CHECK-NEXT:    ret i1 [[A]]
   5451 ;
   5452   %a = icmp ult i8 %x, 23
   5453   %b = icmp ult i8 %x, 17
   5454   %c = or i1 %a, %b
   5455   ret i1 %c
   5456 }
   5457 
   5458 ; Special case - slt is uge
   5459 ; x <u 31 && x <s 0
   5460 
   5461 define i1 @empty2(i32 %x) {
   5462 ; CHECK-LABEL: @empty2(
   5463 ; CHECK-NEXT:    ret i1 false
   5464 ;
   5465   %a = icmp ult i32 %x, 31
   5466   %b = icmp slt i32 %x, 0
   5467   %c = and i1 %a, %b
   5468   ret i1 %c
   5469 }
   5470 
   5471