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