1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -instsimplify -S | FileCheck %s 3 4; There are 10 * 10 combinations of icmp predicates that can be OR'd together. 5; The majority of these can be simplified to always true or just one of the icmps. 6 7define i1 @eq_eq(i8 %a, i8 %b) { 8; CHECK-LABEL: @eq_eq( 9; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b 10; CHECK-NEXT: ret i1 [[CMP2]] 11; 12 %cmp1 = icmp eq i8 %a, %b 13 %cmp2 = icmp eq i8 %a, %b 14 %or = or i1 %cmp1, %cmp2 15 ret i1 %or 16} 17 18define i1 @eq_ne(i8 %a, i8 %b) { 19; CHECK-LABEL: @eq_ne( 20; CHECK-NEXT: ret i1 true 21; 22 %cmp1 = icmp eq i8 %a, %b 23 %cmp2 = icmp ne i8 %a, %b 24 %or = or i1 %cmp1, %cmp2 25 ret i1 %or 26} 27 28define i1 @eq_sge(i8 %a, i8 %b) { 29; CHECK-LABEL: @eq_sge( 30; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b 31; CHECK-NEXT: ret i1 [[CMP2]] 32; 33 %cmp1 = icmp eq i8 %a, %b 34 %cmp2 = icmp sge i8 %a, %b 35 %or = or i1 %cmp1, %cmp2 36 ret i1 %or 37} 38 39define i1 @eq_sgt(i8 %a, i8 %b) { 40; CHECK-LABEL: @eq_sgt( 41; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b 42; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b 43; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 44; CHECK-NEXT: ret i1 [[OR]] 45; 46 %cmp1 = icmp eq i8 %a, %b 47 %cmp2 = icmp sgt i8 %a, %b 48 %or = or i1 %cmp1, %cmp2 49 ret i1 %or 50} 51 52define i1 @eq_sle(i8 %a, i8 %b) { 53; CHECK-LABEL: @eq_sle( 54; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b 55; CHECK-NEXT: ret i1 [[CMP2]] 56; 57 %cmp1 = icmp eq i8 %a, %b 58 %cmp2 = icmp sle i8 %a, %b 59 %or = or i1 %cmp1, %cmp2 60 ret i1 %or 61} 62 63define i1 @eq_slt(i8 %a, i8 %b) { 64; CHECK-LABEL: @eq_slt( 65; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b 66; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b 67; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 68; CHECK-NEXT: ret i1 [[OR]] 69; 70 %cmp1 = icmp eq i8 %a, %b 71 %cmp2 = icmp slt i8 %a, %b 72 %or = or i1 %cmp1, %cmp2 73 ret i1 %or 74} 75 76define i1 @eq_uge(i8 %a, i8 %b) { 77; CHECK-LABEL: @eq_uge( 78; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b 79; CHECK-NEXT: ret i1 [[CMP2]] 80; 81 %cmp1 = icmp eq i8 %a, %b 82 %cmp2 = icmp uge i8 %a, %b 83 %or = or i1 %cmp1, %cmp2 84 ret i1 %or 85} 86 87define i1 @eq_ugt(i8 %a, i8 %b) { 88; CHECK-LABEL: @eq_ugt( 89; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b 90; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b 91; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 92; CHECK-NEXT: ret i1 [[OR]] 93; 94 %cmp1 = icmp eq i8 %a, %b 95 %cmp2 = icmp ugt i8 %a, %b 96 %or = or i1 %cmp1, %cmp2 97 ret i1 %or 98} 99 100define i1 @eq_ule(i8 %a, i8 %b) { 101; CHECK-LABEL: @eq_ule( 102; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b 103; CHECK-NEXT: ret i1 [[CMP2]] 104; 105 %cmp1 = icmp eq i8 %a, %b 106 %cmp2 = icmp ule i8 %a, %b 107 %or = or i1 %cmp1, %cmp2 108 ret i1 %or 109} 110 111define i1 @eq_ult(i8 %a, i8 %b) { 112; CHECK-LABEL: @eq_ult( 113; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b 114; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b 115; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 116; CHECK-NEXT: ret i1 [[OR]] 117; 118 %cmp1 = icmp eq i8 %a, %b 119 %cmp2 = icmp ult i8 %a, %b 120 %or = or i1 %cmp1, %cmp2 121 ret i1 %or 122} 123 124; 125 126define i1 @ne_eq(i8 %a, i8 %b) { 127; CHECK-LABEL: @ne_eq( 128; CHECK-NEXT: ret i1 true 129; 130 %cmp1 = icmp ne i8 %a, %b 131 %cmp2 = icmp eq i8 %a, %b 132 %or = or i1 %cmp1, %cmp2 133 ret i1 %or 134} 135 136define i1 @ne_ne(i8 %a, i8 %b) { 137; CHECK-LABEL: @ne_ne( 138; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b 139; CHECK-NEXT: ret i1 [[CMP2]] 140; 141 %cmp1 = icmp ne i8 %a, %b 142 %cmp2 = icmp ne i8 %a, %b 143 %or = or i1 %cmp1, %cmp2 144 ret i1 %or 145} 146 147define i1 @ne_sge(i8 %a, i8 %b) { 148; CHECK-LABEL: @ne_sge( 149; CHECK-NEXT: ret i1 true 150; 151 %cmp1 = icmp ne i8 %a, %b 152 %cmp2 = icmp sge i8 %a, %b 153 %or = or i1 %cmp1, %cmp2 154 ret i1 %or 155} 156 157define i1 @ne_sgt(i8 %a, i8 %b) { 158; CHECK-LABEL: @ne_sgt( 159; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b 160; CHECK-NEXT: ret i1 [[CMP1]] 161; 162 %cmp1 = icmp ne i8 %a, %b 163 %cmp2 = icmp sgt i8 %a, %b 164 %or = or i1 %cmp1, %cmp2 165 ret i1 %or 166} 167 168define i1 @ne_sle(i8 %a, i8 %b) { 169; CHECK-LABEL: @ne_sle( 170; CHECK-NEXT: ret i1 true 171; 172 %cmp1 = icmp ne i8 %a, %b 173 %cmp2 = icmp sle i8 %a, %b 174 %or = or i1 %cmp1, %cmp2 175 ret i1 %or 176} 177 178define i1 @ne_slt(i8 %a, i8 %b) { 179; CHECK-LABEL: @ne_slt( 180; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b 181; CHECK-NEXT: ret i1 [[CMP1]] 182; 183 %cmp1 = icmp ne i8 %a, %b 184 %cmp2 = icmp slt i8 %a, %b 185 %or = or i1 %cmp1, %cmp2 186 ret i1 %or 187} 188 189define i1 @ne_uge(i8 %a, i8 %b) { 190; CHECK-LABEL: @ne_uge( 191; CHECK-NEXT: ret i1 true 192; 193 %cmp1 = icmp ne i8 %a, %b 194 %cmp2 = icmp uge i8 %a, %b 195 %or = or i1 %cmp1, %cmp2 196 ret i1 %or 197} 198 199define i1 @ne_ugt(i8 %a, i8 %b) { 200; CHECK-LABEL: @ne_ugt( 201; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b 202; CHECK-NEXT: ret i1 [[CMP1]] 203; 204 %cmp1 = icmp ne i8 %a, %b 205 %cmp2 = icmp ugt i8 %a, %b 206 %or = or i1 %cmp1, %cmp2 207 ret i1 %or 208} 209 210define i1 @ne_ule(i8 %a, i8 %b) { 211; CHECK-LABEL: @ne_ule( 212; CHECK-NEXT: ret i1 true 213; 214 %cmp1 = icmp ne i8 %a, %b 215 %cmp2 = icmp ule i8 %a, %b 216 %or = or i1 %cmp1, %cmp2 217 ret i1 %or 218} 219 220define i1 @ne_ult(i8 %a, i8 %b) { 221; CHECK-LABEL: @ne_ult( 222; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b 223; CHECK-NEXT: ret i1 [[CMP1]] 224; 225 %cmp1 = icmp ne i8 %a, %b 226 %cmp2 = icmp ult i8 %a, %b 227 %or = or i1 %cmp1, %cmp2 228 ret i1 %or 229} 230 231; 232 233define i1 @sge_eq(i8 %a, i8 %b) { 234; CHECK-LABEL: @sge_eq( 235; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b 236; CHECK-NEXT: ret i1 [[CMP1]] 237; 238 %cmp1 = icmp sge i8 %a, %b 239 %cmp2 = icmp eq i8 %a, %b 240 %or = or i1 %cmp1, %cmp2 241 ret i1 %or 242} 243 244define i1 @sge_ne(i8 %a, i8 %b) { 245; CHECK-LABEL: @sge_ne( 246; CHECK-NEXT: ret i1 true 247; 248 %cmp1 = icmp sge i8 %a, %b 249 %cmp2 = icmp ne i8 %a, %b 250 %or = or i1 %cmp1, %cmp2 251 ret i1 %or 252} 253 254define i1 @sge_sge(i8 %a, i8 %b) { 255; CHECK-LABEL: @sge_sge( 256; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b 257; CHECK-NEXT: ret i1 [[CMP2]] 258; 259 %cmp1 = icmp sge i8 %a, %b 260 %cmp2 = icmp sge i8 %a, %b 261 %or = or i1 %cmp1, %cmp2 262 ret i1 %or 263} 264 265define i1 @sge_sgt(i8 %a, i8 %b) { 266; CHECK-LABEL: @sge_sgt( 267; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b 268; CHECK-NEXT: ret i1 [[CMP1]] 269; 270 %cmp1 = icmp sge i8 %a, %b 271 %cmp2 = icmp sgt i8 %a, %b 272 %or = or i1 %cmp1, %cmp2 273 ret i1 %or 274} 275 276define i1 @sge_sle(i8 %a, i8 %b) { 277; CHECK-LABEL: @sge_sle( 278; CHECK-NEXT: ret i1 true 279; 280 %cmp1 = icmp sge i8 %a, %b 281 %cmp2 = icmp sle i8 %a, %b 282 %or = or i1 %cmp1, %cmp2 283 ret i1 %or 284} 285 286define i1 @sge_slt(i8 %a, i8 %b) { 287; CHECK-LABEL: @sge_slt( 288; CHECK-NEXT: ret i1 true 289; 290 %cmp1 = icmp sge i8 %a, %b 291 %cmp2 = icmp slt i8 %a, %b 292 %or = or i1 %cmp1, %cmp2 293 ret i1 %or 294} 295 296define i1 @sge_uge(i8 %a, i8 %b) { 297; CHECK-LABEL: @sge_uge( 298; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b 299; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b 300; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 301; CHECK-NEXT: ret i1 [[OR]] 302; 303 %cmp1 = icmp sge i8 %a, %b 304 %cmp2 = icmp uge i8 %a, %b 305 %or = or i1 %cmp1, %cmp2 306 ret i1 %or 307} 308 309define i1 @sge_ugt(i8 %a, i8 %b) { 310; CHECK-LABEL: @sge_ugt( 311; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b 312; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b 313; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 314; CHECK-NEXT: ret i1 [[OR]] 315; 316 %cmp1 = icmp sge i8 %a, %b 317 %cmp2 = icmp ugt i8 %a, %b 318 %or = or i1 %cmp1, %cmp2 319 ret i1 %or 320} 321 322define i1 @sge_ule(i8 %a, i8 %b) { 323; CHECK-LABEL: @sge_ule( 324; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b 325; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b 326; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 327; CHECK-NEXT: ret i1 [[OR]] 328; 329 %cmp1 = icmp sge i8 %a, %b 330 %cmp2 = icmp ule i8 %a, %b 331 %or = or i1 %cmp1, %cmp2 332 ret i1 %or 333} 334 335define i1 @sge_ult(i8 %a, i8 %b) { 336; CHECK-LABEL: @sge_ult( 337; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b 338; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b 339; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 340; CHECK-NEXT: ret i1 [[OR]] 341; 342 %cmp1 = icmp sge i8 %a, %b 343 %cmp2 = icmp ult i8 %a, %b 344 %or = or i1 %cmp1, %cmp2 345 ret i1 %or 346} 347 348; 349 350define i1 @sgt_eq(i8 %a, i8 %b) { 351; CHECK-LABEL: @sgt_eq( 352; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b 353; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b 354; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 355; CHECK-NEXT: ret i1 [[OR]] 356; 357 %cmp1 = icmp sgt i8 %a, %b 358 %cmp2 = icmp eq i8 %a, %b 359 %or = or i1 %cmp1, %cmp2 360 ret i1 %or 361} 362 363define i1 @sgt_ne(i8 %a, i8 %b) { 364; CHECK-LABEL: @sgt_ne( 365; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b 366; CHECK-NEXT: ret i1 [[CMP2]] 367; 368 %cmp1 = icmp sgt i8 %a, %b 369 %cmp2 = icmp ne i8 %a, %b 370 %or = or i1 %cmp1, %cmp2 371 ret i1 %or 372} 373 374define i1 @sgt_sge(i8 %a, i8 %b) { 375; CHECK-LABEL: @sgt_sge( 376; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b 377; CHECK-NEXT: ret i1 [[CMP2]] 378; 379 %cmp1 = icmp sgt i8 %a, %b 380 %cmp2 = icmp sge i8 %a, %b 381 %or = or i1 %cmp1, %cmp2 382 ret i1 %or 383} 384 385define i1 @sgt_sgt(i8 %a, i8 %b) { 386; CHECK-LABEL: @sgt_sgt( 387; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b 388; CHECK-NEXT: ret i1 [[CMP2]] 389; 390 %cmp1 = icmp sgt i8 %a, %b 391 %cmp2 = icmp sgt i8 %a, %b 392 %or = or i1 %cmp1, %cmp2 393 ret i1 %or 394} 395 396define i1 @sgt_sle(i8 %a, i8 %b) { 397; CHECK-LABEL: @sgt_sle( 398; CHECK-NEXT: ret i1 true 399; 400 %cmp1 = icmp sgt i8 %a, %b 401 %cmp2 = icmp sle i8 %a, %b 402 %or = or i1 %cmp1, %cmp2 403 ret i1 %or 404} 405 406define i1 @sgt_slt(i8 %a, i8 %b) { 407; CHECK-LABEL: @sgt_slt( 408; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b 409; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b 410; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 411; CHECK-NEXT: ret i1 [[OR]] 412; 413 %cmp1 = icmp sgt i8 %a, %b 414 %cmp2 = icmp slt i8 %a, %b 415 %or = or i1 %cmp1, %cmp2 416 ret i1 %or 417} 418 419define i1 @sgt_uge(i8 %a, i8 %b) { 420; CHECK-LABEL: @sgt_uge( 421; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b 422; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b 423; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 424; CHECK-NEXT: ret i1 [[OR]] 425; 426 %cmp1 = icmp sgt i8 %a, %b 427 %cmp2 = icmp uge i8 %a, %b 428 %or = or i1 %cmp1, %cmp2 429 ret i1 %or 430} 431 432define i1 @sgt_ugt(i8 %a, i8 %b) { 433; CHECK-LABEL: @sgt_ugt( 434; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b 435; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b 436; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 437; CHECK-NEXT: ret i1 [[OR]] 438; 439 %cmp1 = icmp sgt i8 %a, %b 440 %cmp2 = icmp ugt i8 %a, %b 441 %or = or i1 %cmp1, %cmp2 442 ret i1 %or 443} 444 445define i1 @sgt_ule(i8 %a, i8 %b) { 446; CHECK-LABEL: @sgt_ule( 447; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b 448; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b 449; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 450; CHECK-NEXT: ret i1 [[OR]] 451; 452 %cmp1 = icmp sgt i8 %a, %b 453 %cmp2 = icmp ule i8 %a, %b 454 %or = or i1 %cmp1, %cmp2 455 ret i1 %or 456} 457 458define i1 @sgt_ult(i8 %a, i8 %b) { 459; CHECK-LABEL: @sgt_ult( 460; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b 461; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b 462; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 463; CHECK-NEXT: ret i1 [[OR]] 464; 465 %cmp1 = icmp sgt i8 %a, %b 466 %cmp2 = icmp ult i8 %a, %b 467 %or = or i1 %cmp1, %cmp2 468 ret i1 %or 469} 470 471; 472 473define i1 @sle_eq(i8 %a, i8 %b) { 474; CHECK-LABEL: @sle_eq( 475; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b 476; CHECK-NEXT: ret i1 [[CMP1]] 477; 478 %cmp1 = icmp sle i8 %a, %b 479 %cmp2 = icmp eq i8 %a, %b 480 %or = or i1 %cmp1, %cmp2 481 ret i1 %or 482} 483 484define i1 @sle_ne(i8 %a, i8 %b) { 485; CHECK-LABEL: @sle_ne( 486; CHECK-NEXT: ret i1 true 487; 488 %cmp1 = icmp sle i8 %a, %b 489 %cmp2 = icmp ne i8 %a, %b 490 %or = or i1 %cmp1, %cmp2 491 ret i1 %or 492} 493 494define i1 @sle_sge(i8 %a, i8 %b) { 495; CHECK-LABEL: @sle_sge( 496; CHECK-NEXT: ret i1 true 497; 498 %cmp1 = icmp sle i8 %a, %b 499 %cmp2 = icmp sge i8 %a, %b 500 %or = or i1 %cmp1, %cmp2 501 ret i1 %or 502} 503 504define i1 @sle_sgt(i8 %a, i8 %b) { 505; CHECK-LABEL: @sle_sgt( 506; CHECK-NEXT: ret i1 true 507; 508 %cmp1 = icmp sle i8 %a, %b 509 %cmp2 = icmp sgt i8 %a, %b 510 %or = or i1 %cmp1, %cmp2 511 ret i1 %or 512} 513 514define i1 @sle_sle(i8 %a, i8 %b) { 515; CHECK-LABEL: @sle_sle( 516; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b 517; CHECK-NEXT: ret i1 [[CMP2]] 518; 519 %cmp1 = icmp sle i8 %a, %b 520 %cmp2 = icmp sle i8 %a, %b 521 %or = or i1 %cmp1, %cmp2 522 ret i1 %or 523} 524 525define i1 @sle_slt(i8 %a, i8 %b) { 526; CHECK-LABEL: @sle_slt( 527; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b 528; CHECK-NEXT: ret i1 [[CMP1]] 529; 530 %cmp1 = icmp sle i8 %a, %b 531 %cmp2 = icmp slt i8 %a, %b 532 %or = or i1 %cmp1, %cmp2 533 ret i1 %or 534} 535 536define i1 @sle_uge(i8 %a, i8 %b) { 537; CHECK-LABEL: @sle_uge( 538; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b 539; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b 540; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 541; CHECK-NEXT: ret i1 [[OR]] 542; 543 %cmp1 = icmp sle i8 %a, %b 544 %cmp2 = icmp uge i8 %a, %b 545 %or = or i1 %cmp1, %cmp2 546 ret i1 %or 547} 548 549define i1 @sle_ugt(i8 %a, i8 %b) { 550; CHECK-LABEL: @sle_ugt( 551; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b 552; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b 553; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 554; CHECK-NEXT: ret i1 [[OR]] 555; 556 %cmp1 = icmp sle i8 %a, %b 557 %cmp2 = icmp ugt i8 %a, %b 558 %or = or i1 %cmp1, %cmp2 559 ret i1 %or 560} 561 562define i1 @sle_ule(i8 %a, i8 %b) { 563; CHECK-LABEL: @sle_ule( 564; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b 565; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b 566; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 567; CHECK-NEXT: ret i1 [[OR]] 568; 569 %cmp1 = icmp sle i8 %a, %b 570 %cmp2 = icmp ule i8 %a, %b 571 %or = or i1 %cmp1, %cmp2 572 ret i1 %or 573} 574 575define i1 @sle_ult(i8 %a, i8 %b) { 576; CHECK-LABEL: @sle_ult( 577; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b 578; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b 579; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 580; CHECK-NEXT: ret i1 [[OR]] 581; 582 %cmp1 = icmp sle i8 %a, %b 583 %cmp2 = icmp ult i8 %a, %b 584 %or = or i1 %cmp1, %cmp2 585 ret i1 %or 586} 587 588; 589 590define i1 @slt_eq(i8 %a, i8 %b) { 591; CHECK-LABEL: @slt_eq( 592; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b 593; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b 594; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 595; CHECK-NEXT: ret i1 [[OR]] 596; 597 %cmp1 = icmp slt i8 %a, %b 598 %cmp2 = icmp eq i8 %a, %b 599 %or = or i1 %cmp1, %cmp2 600 ret i1 %or 601} 602 603define i1 @slt_ne(i8 %a, i8 %b) { 604; CHECK-LABEL: @slt_ne( 605; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b 606; CHECK-NEXT: ret i1 [[CMP2]] 607; 608 %cmp1 = icmp slt i8 %a, %b 609 %cmp2 = icmp ne i8 %a, %b 610 %or = or i1 %cmp1, %cmp2 611 ret i1 %or 612} 613 614define i1 @slt_sge(i8 %a, i8 %b) { 615; CHECK-LABEL: @slt_sge( 616; CHECK-NEXT: ret i1 true 617; 618 %cmp1 = icmp slt i8 %a, %b 619 %cmp2 = icmp sge i8 %a, %b 620 %or = or i1 %cmp1, %cmp2 621 ret i1 %or 622} 623 624define i1 @slt_sgt(i8 %a, i8 %b) { 625; CHECK-LABEL: @slt_sgt( 626; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b 627; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b 628; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 629; CHECK-NEXT: ret i1 [[OR]] 630; 631 %cmp1 = icmp slt i8 %a, %b 632 %cmp2 = icmp sgt i8 %a, %b 633 %or = or i1 %cmp1, %cmp2 634 ret i1 %or 635} 636 637define i1 @slt_sle(i8 %a, i8 %b) { 638; CHECK-LABEL: @slt_sle( 639; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b 640; CHECK-NEXT: ret i1 [[CMP2]] 641; 642 %cmp1 = icmp slt i8 %a, %b 643 %cmp2 = icmp sle i8 %a, %b 644 %or = or i1 %cmp1, %cmp2 645 ret i1 %or 646} 647 648define i1 @slt_slt(i8 %a, i8 %b) { 649; CHECK-LABEL: @slt_slt( 650; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b 651; CHECK-NEXT: ret i1 [[CMP2]] 652; 653 %cmp1 = icmp slt i8 %a, %b 654 %cmp2 = icmp slt i8 %a, %b 655 %or = or i1 %cmp1, %cmp2 656 ret i1 %or 657} 658 659define i1 @slt_uge(i8 %a, i8 %b) { 660; CHECK-LABEL: @slt_uge( 661; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b 662; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b 663; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 664; CHECK-NEXT: ret i1 [[OR]] 665; 666 %cmp1 = icmp slt i8 %a, %b 667 %cmp2 = icmp uge i8 %a, %b 668 %or = or i1 %cmp1, %cmp2 669 ret i1 %or 670} 671 672define i1 @slt_ugt(i8 %a, i8 %b) { 673; CHECK-LABEL: @slt_ugt( 674; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b 675; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b 676; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 677; CHECK-NEXT: ret i1 [[OR]] 678; 679 %cmp1 = icmp slt i8 %a, %b 680 %cmp2 = icmp ugt i8 %a, %b 681 %or = or i1 %cmp1, %cmp2 682 ret i1 %or 683} 684 685define i1 @slt_ule(i8 %a, i8 %b) { 686; CHECK-LABEL: @slt_ule( 687; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b 688; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b 689; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 690; CHECK-NEXT: ret i1 [[OR]] 691; 692 %cmp1 = icmp slt i8 %a, %b 693 %cmp2 = icmp ule i8 %a, %b 694 %or = or i1 %cmp1, %cmp2 695 ret i1 %or 696} 697 698define i1 @slt_ult(i8 %a, i8 %b) { 699; CHECK-LABEL: @slt_ult( 700; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b 701; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b 702; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 703; CHECK-NEXT: ret i1 [[OR]] 704; 705 %cmp1 = icmp slt i8 %a, %b 706 %cmp2 = icmp ult i8 %a, %b 707 %or = or i1 %cmp1, %cmp2 708 ret i1 %or 709} 710 711; 712 713define i1 @uge_eq(i8 %a, i8 %b) { 714; CHECK-LABEL: @uge_eq( 715; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b 716; CHECK-NEXT: ret i1 [[CMP1]] 717; 718 %cmp1 = icmp uge i8 %a, %b 719 %cmp2 = icmp eq i8 %a, %b 720 %or = or i1 %cmp1, %cmp2 721 ret i1 %or 722} 723 724define i1 @uge_ne(i8 %a, i8 %b) { 725; CHECK-LABEL: @uge_ne( 726; CHECK-NEXT: ret i1 true 727; 728 %cmp1 = icmp uge i8 %a, %b 729 %cmp2 = icmp ne i8 %a, %b 730 %or = or i1 %cmp1, %cmp2 731 ret i1 %or 732} 733 734define i1 @uge_sge(i8 %a, i8 %b) { 735; CHECK-LABEL: @uge_sge( 736; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b 737; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b 738; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 739; CHECK-NEXT: ret i1 [[OR]] 740; 741 %cmp1 = icmp uge i8 %a, %b 742 %cmp2 = icmp sge i8 %a, %b 743 %or = or i1 %cmp1, %cmp2 744 ret i1 %or 745} 746 747define i1 @uge_sgt(i8 %a, i8 %b) { 748; CHECK-LABEL: @uge_sgt( 749; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b 750; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b 751; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 752; CHECK-NEXT: ret i1 [[OR]] 753; 754 %cmp1 = icmp uge i8 %a, %b 755 %cmp2 = icmp sgt i8 %a, %b 756 %or = or i1 %cmp1, %cmp2 757 ret i1 %or 758} 759 760define i1 @uge_sle(i8 %a, i8 %b) { 761; CHECK-LABEL: @uge_sle( 762; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b 763; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b 764; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 765; CHECK-NEXT: ret i1 [[OR]] 766; 767 %cmp1 = icmp uge i8 %a, %b 768 %cmp2 = icmp sle i8 %a, %b 769 %or = or i1 %cmp1, %cmp2 770 ret i1 %or 771} 772 773define i1 @uge_slt(i8 %a, i8 %b) { 774; CHECK-LABEL: @uge_slt( 775; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b 776; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b 777; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 778; CHECK-NEXT: ret i1 [[OR]] 779; 780 %cmp1 = icmp uge i8 %a, %b 781 %cmp2 = icmp slt i8 %a, %b 782 %or = or i1 %cmp1, %cmp2 783 ret i1 %or 784} 785 786define i1 @uge_uge(i8 %a, i8 %b) { 787; CHECK-LABEL: @uge_uge( 788; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b 789; CHECK-NEXT: ret i1 [[CMP2]] 790; 791 %cmp1 = icmp uge i8 %a, %b 792 %cmp2 = icmp uge i8 %a, %b 793 %or = or i1 %cmp1, %cmp2 794 ret i1 %or 795} 796 797define i1 @uge_ugt(i8 %a, i8 %b) { 798; CHECK-LABEL: @uge_ugt( 799; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b 800; CHECK-NEXT: ret i1 [[CMP1]] 801; 802 %cmp1 = icmp uge i8 %a, %b 803 %cmp2 = icmp ugt i8 %a, %b 804 %or = or i1 %cmp1, %cmp2 805 ret i1 %or 806} 807 808define i1 @uge_ule(i8 %a, i8 %b) { 809; CHECK-LABEL: @uge_ule( 810; CHECK-NEXT: ret i1 true 811; 812 %cmp1 = icmp uge i8 %a, %b 813 %cmp2 = icmp ule i8 %a, %b 814 %or = or i1 %cmp1, %cmp2 815 ret i1 %or 816} 817 818define i1 @uge_ult(i8 %a, i8 %b) { 819; CHECK-LABEL: @uge_ult( 820; CHECK-NEXT: ret i1 true 821; 822 %cmp1 = icmp uge i8 %a, %b 823 %cmp2 = icmp ult i8 %a, %b 824 %or = or i1 %cmp1, %cmp2 825 ret i1 %or 826} 827 828; 829 830define i1 @ugt_eq(i8 %a, i8 %b) { 831; CHECK-LABEL: @ugt_eq( 832; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b 833; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b 834; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 835; CHECK-NEXT: ret i1 [[OR]] 836; 837 %cmp1 = icmp ugt i8 %a, %b 838 %cmp2 = icmp eq i8 %a, %b 839 %or = or i1 %cmp1, %cmp2 840 ret i1 %or 841} 842 843define i1 @ugt_ne(i8 %a, i8 %b) { 844; CHECK-LABEL: @ugt_ne( 845; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b 846; CHECK-NEXT: ret i1 [[CMP2]] 847; 848 %cmp1 = icmp ugt i8 %a, %b 849 %cmp2 = icmp ne i8 %a, %b 850 %or = or i1 %cmp1, %cmp2 851 ret i1 %or 852} 853 854define i1 @ugt_sge(i8 %a, i8 %b) { 855; CHECK-LABEL: @ugt_sge( 856; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b 857; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b 858; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 859; CHECK-NEXT: ret i1 [[OR]] 860; 861 %cmp1 = icmp ugt i8 %a, %b 862 %cmp2 = icmp sge i8 %a, %b 863 %or = or i1 %cmp1, %cmp2 864 ret i1 %or 865} 866 867define i1 @ugt_sgt(i8 %a, i8 %b) { 868; CHECK-LABEL: @ugt_sgt( 869; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b 870; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b 871; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 872; CHECK-NEXT: ret i1 [[OR]] 873; 874 %cmp1 = icmp ugt i8 %a, %b 875 %cmp2 = icmp sgt i8 %a, %b 876 %or = or i1 %cmp1, %cmp2 877 ret i1 %or 878} 879 880define i1 @ugt_sle(i8 %a, i8 %b) { 881; CHECK-LABEL: @ugt_sle( 882; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b 883; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b 884; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 885; CHECK-NEXT: ret i1 [[OR]] 886; 887 %cmp1 = icmp ugt i8 %a, %b 888 %cmp2 = icmp sle i8 %a, %b 889 %or = or i1 %cmp1, %cmp2 890 ret i1 %or 891} 892 893define i1 @ugt_slt(i8 %a, i8 %b) { 894; CHECK-LABEL: @ugt_slt( 895; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b 896; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b 897; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 898; CHECK-NEXT: ret i1 [[OR]] 899; 900 %cmp1 = icmp ugt i8 %a, %b 901 %cmp2 = icmp slt i8 %a, %b 902 %or = or i1 %cmp1, %cmp2 903 ret i1 %or 904} 905 906define i1 @ugt_uge(i8 %a, i8 %b) { 907; CHECK-LABEL: @ugt_uge( 908; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b 909; CHECK-NEXT: ret i1 [[CMP2]] 910; 911 %cmp1 = icmp ugt i8 %a, %b 912 %cmp2 = icmp uge i8 %a, %b 913 %or = or i1 %cmp1, %cmp2 914 ret i1 %or 915} 916 917define i1 @ugt_ugt(i8 %a, i8 %b) { 918; CHECK-LABEL: @ugt_ugt( 919; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b 920; CHECK-NEXT: ret i1 [[CMP2]] 921; 922 %cmp1 = icmp ugt i8 %a, %b 923 %cmp2 = icmp ugt i8 %a, %b 924 %or = or i1 %cmp1, %cmp2 925 ret i1 %or 926} 927 928define i1 @ugt_ule(i8 %a, i8 %b) { 929; CHECK-LABEL: @ugt_ule( 930; CHECK-NEXT: ret i1 true 931; 932 %cmp1 = icmp ugt i8 %a, %b 933 %cmp2 = icmp ule i8 %a, %b 934 %or = or i1 %cmp1, %cmp2 935 ret i1 %or 936} 937 938define i1 @ugt_ult(i8 %a, i8 %b) { 939; CHECK-LABEL: @ugt_ult( 940; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b 941; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b 942; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 943; CHECK-NEXT: ret i1 [[OR]] 944; 945 %cmp1 = icmp ugt i8 %a, %b 946 %cmp2 = icmp ult i8 %a, %b 947 %or = or i1 %cmp1, %cmp2 948 ret i1 %or 949} 950 951; 952 953define i1 @ule_eq(i8 %a, i8 %b) { 954; CHECK-LABEL: @ule_eq( 955; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b 956; CHECK-NEXT: ret i1 [[CMP1]] 957; 958 %cmp1 = icmp ule i8 %a, %b 959 %cmp2 = icmp eq i8 %a, %b 960 %or = or i1 %cmp1, %cmp2 961 ret i1 %or 962} 963 964define i1 @ule_ne(i8 %a, i8 %b) { 965; CHECK-LABEL: @ule_ne( 966; CHECK-NEXT: ret i1 true 967; 968 %cmp1 = icmp ule i8 %a, %b 969 %cmp2 = icmp ne i8 %a, %b 970 %or = or i1 %cmp1, %cmp2 971 ret i1 %or 972} 973 974define i1 @ule_sge(i8 %a, i8 %b) { 975; CHECK-LABEL: @ule_sge( 976; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b 977; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b 978; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 979; CHECK-NEXT: ret i1 [[OR]] 980; 981 %cmp1 = icmp ule i8 %a, %b 982 %cmp2 = icmp sge i8 %a, %b 983 %or = or i1 %cmp1, %cmp2 984 ret i1 %or 985} 986 987define i1 @ule_sgt(i8 %a, i8 %b) { 988; CHECK-LABEL: @ule_sgt( 989; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b 990; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b 991; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 992; CHECK-NEXT: ret i1 [[OR]] 993; 994 %cmp1 = icmp ule i8 %a, %b 995 %cmp2 = icmp sgt i8 %a, %b 996 %or = or i1 %cmp1, %cmp2 997 ret i1 %or 998} 999 1000define i1 @ule_sle(i8 %a, i8 %b) { 1001; CHECK-LABEL: @ule_sle( 1002; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b 1003; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b 1004; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1005; CHECK-NEXT: ret i1 [[OR]] 1006; 1007 %cmp1 = icmp ule i8 %a, %b 1008 %cmp2 = icmp sle i8 %a, %b 1009 %or = or i1 %cmp1, %cmp2 1010 ret i1 %or 1011} 1012 1013define i1 @ule_slt(i8 %a, i8 %b) { 1014; CHECK-LABEL: @ule_slt( 1015; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b 1016; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b 1017; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1018; CHECK-NEXT: ret i1 [[OR]] 1019; 1020 %cmp1 = icmp ule i8 %a, %b 1021 %cmp2 = icmp slt i8 %a, %b 1022 %or = or i1 %cmp1, %cmp2 1023 ret i1 %or 1024} 1025 1026define i1 @ule_uge(i8 %a, i8 %b) { 1027; CHECK-LABEL: @ule_uge( 1028; CHECK-NEXT: ret i1 true 1029; 1030 %cmp1 = icmp ule i8 %a, %b 1031 %cmp2 = icmp uge i8 %a, %b 1032 %or = or i1 %cmp1, %cmp2 1033 ret i1 %or 1034} 1035 1036define i1 @ule_ugt(i8 %a, i8 %b) { 1037; CHECK-LABEL: @ule_ugt( 1038; CHECK-NEXT: ret i1 true 1039; 1040 %cmp1 = icmp ule i8 %a, %b 1041 %cmp2 = icmp ugt i8 %a, %b 1042 %or = or i1 %cmp1, %cmp2 1043 ret i1 %or 1044} 1045 1046define i1 @ule_ule(i8 %a, i8 %b) { 1047; CHECK-LABEL: @ule_ule( 1048; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b 1049; CHECK-NEXT: ret i1 [[CMP2]] 1050; 1051 %cmp1 = icmp ule i8 %a, %b 1052 %cmp2 = icmp ule i8 %a, %b 1053 %or = or i1 %cmp1, %cmp2 1054 ret i1 %or 1055} 1056 1057define i1 @ule_ult(i8 %a, i8 %b) { 1058; CHECK-LABEL: @ule_ult( 1059; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b 1060; CHECK-NEXT: ret i1 [[CMP1]] 1061; 1062 %cmp1 = icmp ule i8 %a, %b 1063 %cmp2 = icmp ult i8 %a, %b 1064 %or = or i1 %cmp1, %cmp2 1065 ret i1 %or 1066} 1067 1068; 1069 1070define i1 @ult_eq(i8 %a, i8 %b) { 1071; CHECK-LABEL: @ult_eq( 1072; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b 1073; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b 1074; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1075; CHECK-NEXT: ret i1 [[OR]] 1076; 1077 %cmp1 = icmp ult i8 %a, %b 1078 %cmp2 = icmp eq i8 %a, %b 1079 %or = or i1 %cmp1, %cmp2 1080 ret i1 %or 1081} 1082 1083define i1 @ult_ne(i8 %a, i8 %b) { 1084; CHECK-LABEL: @ult_ne( 1085; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b 1086; CHECK-NEXT: ret i1 [[CMP2]] 1087; 1088 %cmp1 = icmp ult i8 %a, %b 1089 %cmp2 = icmp ne i8 %a, %b 1090 %or = or i1 %cmp1, %cmp2 1091 ret i1 %or 1092} 1093 1094define i1 @ult_sge(i8 %a, i8 %b) { 1095; CHECK-LABEL: @ult_sge( 1096; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b 1097; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b 1098; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1099; CHECK-NEXT: ret i1 [[OR]] 1100; 1101 %cmp1 = icmp ult i8 %a, %b 1102 %cmp2 = icmp sge i8 %a, %b 1103 %or = or i1 %cmp1, %cmp2 1104 ret i1 %or 1105} 1106 1107define i1 @ult_sgt(i8 %a, i8 %b) { 1108; CHECK-LABEL: @ult_sgt( 1109; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b 1110; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b 1111; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1112; CHECK-NEXT: ret i1 [[OR]] 1113; 1114 %cmp1 = icmp ult i8 %a, %b 1115 %cmp2 = icmp sgt i8 %a, %b 1116 %or = or i1 %cmp1, %cmp2 1117 ret i1 %or 1118} 1119 1120define i1 @ult_sle(i8 %a, i8 %b) { 1121; CHECK-LABEL: @ult_sle( 1122; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b 1123; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b 1124; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1125; CHECK-NEXT: ret i1 [[OR]] 1126; 1127 %cmp1 = icmp ult i8 %a, %b 1128 %cmp2 = icmp sle i8 %a, %b 1129 %or = or i1 %cmp1, %cmp2 1130 ret i1 %or 1131} 1132 1133define i1 @ult_slt(i8 %a, i8 %b) { 1134; CHECK-LABEL: @ult_slt( 1135; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b 1136; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b 1137; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1138; CHECK-NEXT: ret i1 [[OR]] 1139; 1140 %cmp1 = icmp ult i8 %a, %b 1141 %cmp2 = icmp slt i8 %a, %b 1142 %or = or i1 %cmp1, %cmp2 1143 ret i1 %or 1144} 1145 1146define i1 @ult_uge(i8 %a, i8 %b) { 1147; CHECK-LABEL: @ult_uge( 1148; CHECK-NEXT: ret i1 true 1149; 1150 %cmp1 = icmp ult i8 %a, %b 1151 %cmp2 = icmp uge i8 %a, %b 1152 %or = or i1 %cmp1, %cmp2 1153 ret i1 %or 1154} 1155 1156define i1 @ult_ugt(i8 %a, i8 %b) { 1157; CHECK-LABEL: @ult_ugt( 1158; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b 1159; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b 1160; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1161; CHECK-NEXT: ret i1 [[OR]] 1162; 1163 %cmp1 = icmp ult i8 %a, %b 1164 %cmp2 = icmp ugt i8 %a, %b 1165 %or = or i1 %cmp1, %cmp2 1166 ret i1 %or 1167} 1168 1169define i1 @ult_ule(i8 %a, i8 %b) { 1170; CHECK-LABEL: @ult_ule( 1171; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b 1172; CHECK-NEXT: ret i1 [[CMP2]] 1173; 1174 %cmp1 = icmp ult i8 %a, %b 1175 %cmp2 = icmp ule i8 %a, %b 1176 %or = or i1 %cmp1, %cmp2 1177 ret i1 %or 1178} 1179 1180define i1 @ult_ult(i8 %a, i8 %b) { 1181; CHECK-LABEL: @ult_ult( 1182; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b 1183; CHECK-NEXT: ret i1 [[CMP2]] 1184; 1185 %cmp1 = icmp ult i8 %a, %b 1186 %cmp2 = icmp ult i8 %a, %b 1187 %or = or i1 %cmp1, %cmp2 1188 ret i1 %or 1189} 1190 1191; Check a couple of vector variants to make sure those work too. 1192 1193define <2 x i1> @ult_uge_vec(<2 x i8> %a, <2 x i8> %b) { 1194; CHECK-LABEL: @ult_uge_vec( 1195; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true> 1196; 1197 %cmp1 = icmp ult <2 x i8> %a, %b 1198 %cmp2 = icmp uge <2 x i8> %a, %b 1199 %or = or <2 x i1> %cmp1, %cmp2 1200 ret <2 x i1> %or 1201} 1202 1203define <2 x i1> @ult_ule_vec(<2 x i8> %a, <2 x i8> %b) { 1204; CHECK-LABEL: @ult_ule_vec( 1205; CHECK-NEXT: [[CMP2:%.*]] = icmp ule <2 x i8> %a, %b 1206; CHECK-NEXT: ret <2 x i1> [[CMP2]] 1207; 1208 %cmp1 = icmp ult <2 x i8> %a, %b 1209 %cmp2 = icmp ule <2 x i8> %a, %b 1210 %or = or <2 x i1> %cmp1, %cmp2 1211 ret <2 x i1> %or 1212} 1213 1214define i1 @ult_ne_swap(i8 %a, i8 %b) { 1215; CHECK-LABEL: @ult_ne_swap( 1216; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b 1217; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %b, %a 1218; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1219; CHECK-NEXT: ret i1 [[OR]] 1220; 1221 %cmp1 = icmp ult i8 %a, %b 1222 %cmp2 = icmp ne i8 %b, %a 1223 %or = or i1 %cmp1, %cmp2 1224 ret i1 %or 1225} 1226 1227define i1 @ult_ule_swap(i8 %a, i8 %b) { 1228; CHECK-LABEL: @ult_ule_swap( 1229; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b 1230; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %b, %a 1231; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]] 1232; CHECK-NEXT: ret i1 [[OR]] 1233; 1234 %cmp1 = icmp ult i8 %a, %b 1235 %cmp2 = icmp uge i8 %b, %a 1236 %or = or i1 %cmp1, %cmp2 1237 ret i1 %or 1238} 1239 1240