2162 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4; There are 12 basic patterns (or 6 with DeMorganized equivalent) with5; 2 (commute logic op) *6; 2 (swap compare operands) *7; 2 (signed/unsigned)8; variations for a total of 96 tests.9 10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11;12; (X == MAX) && (X < Y) --> false13;14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15 16define i1 @slt_and_max(i8 %x, i8 %y) {17; CHECK-LABEL: @slt_and_max(18; CHECK-NEXT: ret i1 false19;20 %cmp = icmp slt i8 %x, %y21 %cmpeq = icmp eq i8 %x, 12722 %r = and i1 %cmp, %cmpeq23 ret i1 %r24}25 26define i1 @slt_and_max_logical(i8 %x, i8 %y) {27; CHECK-LABEL: @slt_and_max_logical(28; CHECK-NEXT: ret i1 false29;30 %cmp = icmp slt i8 %x, %y31 %cmpeq = icmp eq i8 %x, 12732 %r = select i1 %cmp, i1 %cmpeq, i1 false33 ret i1 %r34}35 36define <2 x i1> @slt_and_max_commute(<2 x i8> %x, <2 x i8> %y) {37; CHECK-LABEL: @slt_and_max_commute(38; CHECK-NEXT: ret <2 x i1> zeroinitializer39;40 %cmp = icmp slt <2 x i8> %x, %y41 %cmpeq = icmp eq <2 x i8> %x, <i8 127, i8 127>42 %r = and <2 x i1> %cmpeq, %cmp43 ret <2 x i1> %r44}45 46define i1 @slt_swap_and_max(i8 %x, i8 %y) {47; CHECK-LABEL: @slt_swap_and_max(48; CHECK-NEXT: ret i1 false49;50 %cmp = icmp sgt i8 %y, %x51 %cmpeq = icmp eq i8 %x, 12752 %r = and i1 %cmp, %cmpeq53 ret i1 %r54}55 56define i1 @slt_swap_and_max_logical(i8 %x, i8 %y) {57; CHECK-LABEL: @slt_swap_and_max_logical(58; CHECK-NEXT: ret i1 false59;60 %cmp = icmp sgt i8 %y, %x61 %cmpeq = icmp eq i8 %x, 12762 %r = select i1 %cmp, i1 %cmpeq, i1 false63 ret i1 %r64}65 66define i1 @slt_swap_and_max_commute(i8 %x, i8 %y) {67; CHECK-LABEL: @slt_swap_and_max_commute(68; CHECK-NEXT: ret i1 false69;70 %cmp = icmp sgt i8 %y, %x71 %cmpeq = icmp eq i8 %x, 12772 %r = and i1 %cmpeq, %cmp73 ret i1 %r74}75 76define i1 @slt_swap_and_max_commute_logical(i8 %x, i8 %y) {77; CHECK-LABEL: @slt_swap_and_max_commute_logical(78; CHECK-NEXT: ret i1 false79;80 %cmp = icmp sgt i8 %y, %x81 %cmpeq = icmp eq i8 %x, 12782 %r = select i1 %cmpeq, i1 %cmp, i1 false83 ret i1 %r84}85 86define i1 @ult_and_max(i8 %x, i8 %y) {87; CHECK-LABEL: @ult_and_max(88; CHECK-NEXT: ret i1 false89;90 %cmp = icmp ult i8 %x, %y91 %cmpeq = icmp eq i8 %x, 25592 %r = and i1 %cmp, %cmpeq93 ret i1 %r94}95 96define i1 @ult_and_max_logical(i8 %x, i8 %y) {97; CHECK-LABEL: @ult_and_max_logical(98; CHECK-NEXT: ret i1 false99;100 %cmp = icmp ult i8 %x, %y101 %cmpeq = icmp eq i8 %x, 255102 %r = select i1 %cmp, i1 %cmpeq, i1 false103 ret i1 %r104}105 106define i1 @ult_and_max_commute(i8 %x, i8 %y) {107; CHECK-LABEL: @ult_and_max_commute(108; CHECK-NEXT: ret i1 false109;110 %cmp = icmp ult i8 %x, %y111 %cmpeq = icmp eq i8 %x, 255112 %r = and i1 %cmpeq, %cmp113 ret i1 %r114}115 116define i1 @ult_and_max_commute_logical(i8 %x, i8 %y) {117; CHECK-LABEL: @ult_and_max_commute_logical(118; CHECK-NEXT: ret i1 false119;120 %cmp = icmp ult i8 %x, %y121 %cmpeq = icmp eq i8 %x, 255122 %r = select i1 %cmpeq, i1 %cmp, i1 false123 ret i1 %r124}125 126define i1 @ult_swap_and_max(i8 %x, i8 %y) {127; CHECK-LABEL: @ult_swap_and_max(128; CHECK-NEXT: ret i1 false129;130 %cmp = icmp ugt i8 %y, %x131 %cmpeq = icmp eq i8 %x, 255132 %r = and i1 %cmp, %cmpeq133 ret i1 %r134}135 136define i1 @ult_swap_and_max_logical(i8 %x, i8 %y) {137; CHECK-LABEL: @ult_swap_and_max_logical(138; CHECK-NEXT: ret i1 false139;140 %cmp = icmp ugt i8 %y, %x141 %cmpeq = icmp eq i8 %x, 255142 %r = select i1 %cmp, i1 %cmpeq, i1 false143 ret i1 %r144}145 146define i1 @ult_swap_and_max_commute(i8 %x, i8 %y) {147; CHECK-LABEL: @ult_swap_and_max_commute(148; CHECK-NEXT: ret i1 false149;150 %cmp = icmp ugt i8 %y, %x151 %cmpeq = icmp eq i8 %x, 255152 %r = and i1 %cmpeq, %cmp153 ret i1 %r154}155 156define i1 @ult_swap_and_max_commute_logical(i8 %x, i8 %y) {157; CHECK-LABEL: @ult_swap_and_max_commute_logical(158; CHECK-NEXT: ret i1 false159;160 %cmp = icmp ugt i8 %y, %x161 %cmpeq = icmp eq i8 %x, 255162 %r = select i1 %cmpeq, i1 %cmp, i1 false163 ret i1 %r164}165 166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;167;168; (X == MIN) && (X > Y) --> false169;170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;171 172define i1 @sgt_and_min(i9 %x, i9 %y) {173; CHECK-LABEL: @sgt_and_min(174; CHECK-NEXT: ret i1 false175;176 %cmp = icmp sgt i9 %x, %y177 %cmpeq = icmp eq i9 %x, 256178 %r = and i1 %cmp, %cmpeq179 ret i1 %r180}181 182define i1 @sgt_and_min_logical(i9 %x, i9 %y) {183; CHECK-LABEL: @sgt_and_min_logical(184; CHECK-NEXT: ret i1 false185;186 %cmp = icmp sgt i9 %x, %y187 %cmpeq = icmp eq i9 %x, 256188 %r = select i1 %cmp, i1 %cmpeq, i1 false189 ret i1 %r190}191 192define i1 @sgt_and_min_commute(i8 %x, i8 %y) {193; CHECK-LABEL: @sgt_and_min_commute(194; CHECK-NEXT: ret i1 false195;196 %cmp = icmp sgt i8 %x, %y197 %cmpeq = icmp eq i8 %x, 128198 %r = and i1 %cmpeq, %cmp199 ret i1 %r200}201 202define i1 @sgt_and_min_commute_logical(i8 %x, i8 %y) {203; CHECK-LABEL: @sgt_and_min_commute_logical(204; CHECK-NEXT: ret i1 false205;206 %cmp = icmp sgt i8 %x, %y207 %cmpeq = icmp eq i8 %x, 128208 %r = select i1 %cmpeq, i1 %cmp, i1 false209 ret i1 %r210}211 212define i1 @sgt_swap_and_min(i8 %x, i8 %y) {213; CHECK-LABEL: @sgt_swap_and_min(214; CHECK-NEXT: ret i1 false215;216 %cmp = icmp slt i8 %y, %x217 %cmpeq = icmp eq i8 %x, 128218 %r = and i1 %cmp, %cmpeq219 ret i1 %r220}221 222define i1 @sgt_swap_and_min_logical(i8 %x, i8 %y) {223; CHECK-LABEL: @sgt_swap_and_min_logical(224; CHECK-NEXT: ret i1 false225;226 %cmp = icmp slt i8 %y, %x227 %cmpeq = icmp eq i8 %x, 128228 %r = select i1 %cmp, i1 %cmpeq, i1 false229 ret i1 %r230}231 232define i1 @sgt_swap_and_min_commute(i8 %x, i8 %y) {233; CHECK-LABEL: @sgt_swap_and_min_commute(234; CHECK-NEXT: ret i1 false235;236 %cmp = icmp slt i8 %y, %x237 %cmpeq = icmp eq i8 %x, 128238 %r = and i1 %cmpeq, %cmp239 ret i1 %r240}241 242define i1 @sgt_swap_and_min_commute_logical(i8 %x, i8 %y) {243; CHECK-LABEL: @sgt_swap_and_min_commute_logical(244; CHECK-NEXT: ret i1 false245;246 %cmp = icmp slt i8 %y, %x247 %cmpeq = icmp eq i8 %x, 128248 %r = select i1 %cmpeq, i1 %cmp, i1 false249 ret i1 %r250}251 252define i1 @ugt_and_min(i8 %x, i8 %y) {253; CHECK-LABEL: @ugt_and_min(254; CHECK-NEXT: ret i1 false255;256 %cmp = icmp ugt i8 %x, %y257 %cmpeq = icmp eq i8 %x, 0258 %r = and i1 %cmp, %cmpeq259 ret i1 %r260}261 262define i1 @ugt_and_min_logical(i8 %x, i8 %y) {263; CHECK-LABEL: @ugt_and_min_logical(264; CHECK-NEXT: ret i1 false265;266 %cmp = icmp ugt i8 %x, %y267 %cmpeq = icmp eq i8 %x, 0268 %r = select i1 %cmp, i1 %cmpeq, i1 false269 ret i1 %r270}271 272define i1 @ugt_and_min_commute(i8 %x, i8 %y) {273; CHECK-LABEL: @ugt_and_min_commute(274; CHECK-NEXT: ret i1 false275;276 %cmp = icmp ugt i8 %x, %y277 %cmpeq = icmp eq i8 %x, 0278 %r = and i1 %cmpeq, %cmp279 ret i1 %r280}281 282define i1 @ugt_and_min_commute_logical(i8 %x, i8 %y) {283; CHECK-LABEL: @ugt_and_min_commute_logical(284; CHECK-NEXT: ret i1 false285;286 %cmp = icmp ugt i8 %x, %y287 %cmpeq = icmp eq i8 %x, 0288 %r = select i1 %cmpeq, i1 %cmp, i1 false289 ret i1 %r290}291 292define i1 @ugt_swap_and_min(i8 %x, i8 %y) {293; CHECK-LABEL: @ugt_swap_and_min(294; CHECK-NEXT: ret i1 false295;296 %cmp = icmp ult i8 %y, %x297 %cmpeq = icmp eq i8 %x, 0298 %r = and i1 %cmp, %cmpeq299 ret i1 %r300}301 302define i1 @ugt_swap_and_min_logical(i8 %x, i8 %y) {303; CHECK-LABEL: @ugt_swap_and_min_logical(304; CHECK-NEXT: ret i1 false305;306 %cmp = icmp ult i8 %y, %x307 %cmpeq = icmp eq i8 %x, 0308 %r = select i1 %cmp, i1 %cmpeq, i1 false309 ret i1 %r310}311 312define i1 @ugt_swap_and_min_commute(i8 %x, i8 %y) {313; CHECK-LABEL: @ugt_swap_and_min_commute(314; CHECK-NEXT: ret i1 false315;316 %cmp = icmp ult i8 %y, %x317 %cmpeq = icmp eq i8 %x, 0318 %r = and i1 %cmpeq, %cmp319 ret i1 %r320}321 322define i1 @ugt_swap_and_min_commute_logical(i8 %x, i8 %y) {323; CHECK-LABEL: @ugt_swap_and_min_commute_logical(324; CHECK-NEXT: ret i1 false325;326 %cmp = icmp ult i8 %y, %x327 %cmpeq = icmp eq i8 %x, 0328 %r = select i1 %cmpeq, i1 %cmp, i1 false329 ret i1 %r330}331 332;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;333;334; (X != MAX) || (X >= Y) --> true335;336;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;337 338define i1 @sge_or_not_max(i8 %x, i8 %y) {339; CHECK-LABEL: @sge_or_not_max(340; CHECK-NEXT: ret i1 true341;342 %cmp = icmp sge i8 %x, %y343 %cmpeq = icmp ne i8 %x, 127344 %r = or i1 %cmp, %cmpeq345 ret i1 %r346}347 348define i1 @sge_or_not_max_logical(i8 %x, i8 %y) {349; CHECK-LABEL: @sge_or_not_max_logical(350; CHECK-NEXT: ret i1 true351;352 %cmp = icmp sge i8 %x, %y353 %cmpeq = icmp ne i8 %x, 127354 %r = select i1 %cmp, i1 true, i1 %cmpeq355 ret i1 %r356}357 358define i1 @sge_or_not_max_commute(i8 %x, i8 %y) {359; CHECK-LABEL: @sge_or_not_max_commute(360; CHECK-NEXT: ret i1 true361;362 %cmp = icmp sge i8 %x, %y363 %cmpeq = icmp ne i8 %x, 127364 %r = or i1 %cmpeq, %cmp365 ret i1 %r366}367 368define i1 @sge_or_not_max_commute_logical(i8 %x, i8 %y) {369; CHECK-LABEL: @sge_or_not_max_commute_logical(370; CHECK-NEXT: ret i1 true371;372 %cmp = icmp sge i8 %x, %y373 %cmpeq = icmp ne i8 %x, 127374 %r = select i1 %cmpeq, i1 true, i1 %cmp375 ret i1 %r376}377 378define i1 @sge_swap_or_not_max(i8 %x, i8 %y) {379; CHECK-LABEL: @sge_swap_or_not_max(380; CHECK-NEXT: ret i1 true381;382 %cmp = icmp sle i8 %y, %x383 %cmpeq = icmp ne i8 %x, 127384 %r = or i1 %cmp, %cmpeq385 ret i1 %r386}387 388define i1 @sge_swap_or_not_max_logical(i8 %x, i8 %y) {389; CHECK-LABEL: @sge_swap_or_not_max_logical(390; CHECK-NEXT: ret i1 true391;392 %cmp = icmp sle i8 %y, %x393 %cmpeq = icmp ne i8 %x, 127394 %r = select i1 %cmp, i1 true, i1 %cmpeq395 ret i1 %r396}397 398define i1 @sge_swap_or_not_max_commute(i8 %x, i8 %y) {399; CHECK-LABEL: @sge_swap_or_not_max_commute(400; CHECK-NEXT: ret i1 true401;402 %cmp = icmp sle i8 %y, %x403 %cmpeq = icmp ne i8 %x, 127404 %r = or i1 %cmpeq, %cmp405 ret i1 %r406}407 408define i1 @sge_swap_or_not_max_commute_logical(i8 %x, i8 %y) {409; CHECK-LABEL: @sge_swap_or_not_max_commute_logical(410; CHECK-NEXT: ret i1 true411;412 %cmp = icmp sle i8 %y, %x413 %cmpeq = icmp ne i8 %x, 127414 %r = select i1 %cmpeq, i1 true, i1 %cmp415 ret i1 %r416}417 418define i1 @uge_or_not_max(i8 %x, i8 %y) {419; CHECK-LABEL: @uge_or_not_max(420; CHECK-NEXT: ret i1 true421;422 %cmp = icmp uge i8 %x, %y423 %cmpeq = icmp ne i8 %x, 255424 %r = or i1 %cmp, %cmpeq425 ret i1 %r426}427 428define i1 @uge_or_not_max_logical(i8 %x, i8 %y) {429; CHECK-LABEL: @uge_or_not_max_logical(430; CHECK-NEXT: ret i1 true431;432 %cmp = icmp uge i8 %x, %y433 %cmpeq = icmp ne i8 %x, 255434 %r = select i1 %cmp, i1 true, i1 %cmpeq435 ret i1 %r436}437 438define i1 @uge_or_not_max_commute(i8 %x, i8 %y) {439; CHECK-LABEL: @uge_or_not_max_commute(440; CHECK-NEXT: ret i1 true441;442 %cmp = icmp uge i8 %x, %y443 %cmpeq = icmp ne i8 %x, 255444 %r = or i1 %cmpeq, %cmp445 ret i1 %r446}447 448define i1 @uge_or_not_max_commute_logical(i8 %x, i8 %y) {449; CHECK-LABEL: @uge_or_not_max_commute_logical(450; CHECK-NEXT: ret i1 true451;452 %cmp = icmp uge i8 %x, %y453 %cmpeq = icmp ne i8 %x, 255454 %r = select i1 %cmpeq, i1 true, i1 %cmp455 ret i1 %r456}457 458define i1 @uge_swap_or_not_max(i8 %x, i8 %y) {459; CHECK-LABEL: @uge_swap_or_not_max(460; CHECK-NEXT: ret i1 true461;462 %cmp = icmp ule i8 %y, %x463 %cmpeq = icmp ne i8 %x, 255464 %r = or i1 %cmp, %cmpeq465 ret i1 %r466}467 468define i1 @uge_swap_or_not_max_logical(i8 %x, i8 %y) {469; CHECK-LABEL: @uge_swap_or_not_max_logical(470; CHECK-NEXT: ret i1 true471;472 %cmp = icmp ule i8 %y, %x473 %cmpeq = icmp ne i8 %x, 255474 %r = select i1 %cmp, i1 true, i1 %cmpeq475 ret i1 %r476}477 478define i1 @uge_swap_or_not_max_commute(i8 %x, i8 %y) {479; CHECK-LABEL: @uge_swap_or_not_max_commute(480; CHECK-NEXT: ret i1 true481;482 %cmp = icmp ule i8 %y, %x483 %cmpeq = icmp ne i8 %x, 255484 %r = or i1 %cmpeq, %cmp485 ret i1 %r486}487 488define i1 @uge_swap_or_not_max_commute_logical(i8 %x, i8 %y) {489; CHECK-LABEL: @uge_swap_or_not_max_commute_logical(490; CHECK-NEXT: ret i1 true491;492 %cmp = icmp ule i8 %y, %x493 %cmpeq = icmp ne i8 %x, 255494 %r = select i1 %cmpeq, i1 true, i1 %cmp495 ret i1 %r496}497 498;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;499;500; (X != MIN) || (X <= Y) --> true501;502;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;503 504define i1 @sle_or_not_min(i8 %x, i8 %y) {505; CHECK-LABEL: @sle_or_not_min(506; CHECK-NEXT: ret i1 true507;508 %cmp = icmp sle i8 %x, %y509 %cmpeq = icmp ne i8 %x, 128510 %r = or i1 %cmp, %cmpeq511 ret i1 %r512}513 514define i1 @sle_or_not_min_logical(i8 %x, i8 %y) {515; CHECK-LABEL: @sle_or_not_min_logical(516; CHECK-NEXT: ret i1 true517;518 %cmp = icmp sle i8 %x, %y519 %cmpeq = icmp ne i8 %x, 128520 %r = select i1 %cmp, i1 true, i1 %cmpeq521 ret i1 %r522}523 524define i1 @sle_or_not_min_commute(i8 %x, i8 %y) {525; CHECK-LABEL: @sle_or_not_min_commute(526; CHECK-NEXT: ret i1 true527;528 %cmp = icmp sle i8 %x, %y529 %cmpeq = icmp ne i8 %x, 128530 %r = or i1 %cmpeq, %cmp531 ret i1 %r532}533 534define i1 @sle_or_not_min_commute_logical(i8 %x, i8 %y) {535; CHECK-LABEL: @sle_or_not_min_commute_logical(536; CHECK-NEXT: ret i1 true537;538 %cmp = icmp sle i8 %x, %y539 %cmpeq = icmp ne i8 %x, 128540 %r = select i1 %cmpeq, i1 true, i1 %cmp541 ret i1 %r542}543 544define i1 @sle_swap_or_not_min(i8 %x, i8 %y) {545; CHECK-LABEL: @sle_swap_or_not_min(546; CHECK-NEXT: ret i1 true547;548 %cmp = icmp sge i8 %y, %x549 %cmpeq = icmp ne i8 %x, 128550 %r = or i1 %cmp, %cmpeq551 ret i1 %r552}553 554define i1 @sle_swap_or_not_min_logical(i8 %x, i8 %y) {555; CHECK-LABEL: @sle_swap_or_not_min_logical(556; CHECK-NEXT: ret i1 true557;558 %cmp = icmp sge i8 %y, %x559 %cmpeq = icmp ne i8 %x, 128560 %r = select i1 %cmp, i1 true, i1 %cmpeq561 ret i1 %r562}563 564define i1 @sle_swap_or_not_min_commute(i8 %x, i8 %y) {565; CHECK-LABEL: @sle_swap_or_not_min_commute(566; CHECK-NEXT: ret i1 true567;568 %cmp = icmp sge i8 %y, %x569 %cmpeq = icmp ne i8 %x, 128570 %r = or i1 %cmpeq, %cmp571 ret i1 %r572}573 574define i1 @sle_swap_or_not_min_commute_logical(i8 %x, i8 %y) {575; CHECK-LABEL: @sle_swap_or_not_min_commute_logical(576; CHECK-NEXT: ret i1 true577;578 %cmp = icmp sge i8 %y, %x579 %cmpeq = icmp ne i8 %x, 128580 %r = select i1 %cmpeq, i1 true, i1 %cmp581 ret i1 %r582}583 584define i1 @ule_or_not_min(i427 %x, i427 %y) {585; CHECK-LABEL: @ule_or_not_min(586; CHECK-NEXT: ret i1 true587;588 %cmp = icmp ule i427 %x, %y589 %cmpeq = icmp ne i427 %x, 0590 %r = or i1 %cmp, %cmpeq591 ret i1 %r592}593 594define i1 @ule_or_not_min_logical(i427 %x, i427 %y) {595; CHECK-LABEL: @ule_or_not_min_logical(596; CHECK-NEXT: ret i1 true597;598 %cmp = icmp ule i427 %x, %y599 %cmpeq = icmp ne i427 %x, 0600 %r = select i1 %cmp, i1 true, i1 %cmpeq601 ret i1 %r602}603 604define i1 @ule_or_not_min_commute(i8 %x, i8 %y) {605; CHECK-LABEL: @ule_or_not_min_commute(606; CHECK-NEXT: ret i1 true607;608 %cmp = icmp ule i8 %x, %y609 %cmpeq = icmp ne i8 %x, 0610 %r = or i1 %cmpeq, %cmp611 ret i1 %r612}613 614define i1 @ule_or_not_min_commute_logical(i8 %x, i8 %y) {615; CHECK-LABEL: @ule_or_not_min_commute_logical(616; CHECK-NEXT: ret i1 true617;618 %cmp = icmp ule i8 %x, %y619 %cmpeq = icmp ne i8 %x, 0620 %r = select i1 %cmpeq, i1 true, i1 %cmp621 ret i1 %r622}623 624define i1 @ule_swap_or_not_min(i8 %x, i8 %y) {625; CHECK-LABEL: @ule_swap_or_not_min(626; CHECK-NEXT: ret i1 true627;628 %cmp = icmp uge i8 %y, %x629 %cmpeq = icmp ne i8 %x, 0630 %r = or i1 %cmp, %cmpeq631 ret i1 %r632}633 634define i1 @ule_swap_or_not_min_logical(i8 %x, i8 %y) {635; CHECK-LABEL: @ule_swap_or_not_min_logical(636; CHECK-NEXT: ret i1 true637;638 %cmp = icmp uge i8 %y, %x639 %cmpeq = icmp ne i8 %x, 0640 %r = select i1 %cmp, i1 true, i1 %cmpeq641 ret i1 %r642}643 644define i1 @ule_swap_or_not_min_commute(i8 %x, i8 %y) {645; CHECK-LABEL: @ule_swap_or_not_min_commute(646; CHECK-NEXT: ret i1 true647;648 %cmp = icmp uge i8 %y, %x649 %cmpeq = icmp ne i8 %x, 0650 %r = or i1 %cmpeq, %cmp651 ret i1 %r652}653 654define i1 @ule_swap_or_not_min_commute_logical(i8 %x, i8 %y) {655; CHECK-LABEL: @ule_swap_or_not_min_commute_logical(656; CHECK-NEXT: ret i1 true657;658 %cmp = icmp uge i8 %y, %x659 %cmpeq = icmp ne i8 %x, 0660 %r = select i1 %cmpeq, i1 true, i1 %cmp661 ret i1 %r662}663 664;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;665;666; (X == MAX) && (X >= Y) --> X == MAX667;668;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;669 670define i1 @sge_and_max(i8 %x, i8 %y) {671; CHECK-LABEL: @sge_and_max(672; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127673; CHECK-NEXT: ret i1 [[CMPEQ]]674;675 %cmp = icmp sge i8 %x, %y676 %cmpeq = icmp eq i8 %x, 127677 %r = and i1 %cmp, %cmpeq678 ret i1 %r679}680 681define i1 @sge_and_max_logical(i8 %x, i8 %y) {682; CHECK-LABEL: @sge_and_max_logical(683; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127684; CHECK-NEXT: ret i1 [[CMPEQ]]685;686 %cmp = icmp sge i8 %x, %y687 %cmpeq = icmp eq i8 %x, 127688 %r = select i1 %cmp, i1 %cmpeq, i1 false689 ret i1 %r690}691 692define i1 @sge_and_max_logical_samesign(i8 %x, i8 %y) {693; CHECK-LABEL: @sge_and_max_logical_samesign(694; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127695; CHECK-NEXT: ret i1 [[CMPEQ]]696;697 %cmp = icmp sge i8 %x, %y698 %cmpeq = icmp samesign eq i8 %x, 127699 %r = select i1 %cmp, i1 %cmpeq, i1 false700 ret i1 %r701}702 703define i1 @sge_and_max_commute(i8 %x, i8 %y) {704; CHECK-LABEL: @sge_and_max_commute(705; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127706; CHECK-NEXT: ret i1 [[CMPEQ]]707;708 %cmp = icmp sge i8 %x, %y709 %cmpeq = icmp eq i8 %x, 127710 %r = and i1 %cmpeq, %cmp711 ret i1 %r712}713 714define i1 @sge_and_max_commute_logical(i8 %x, i8 %y) {715; CHECK-LABEL: @sge_and_max_commute_logical(716; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127717; CHECK-NEXT: ret i1 [[CMPEQ]]718;719 %cmp = icmp sge i8 %x, %y720 %cmpeq = icmp eq i8 %x, 127721 %r = select i1 %cmpeq, i1 %cmp, i1 false722 ret i1 %r723}724 725define i1 @sge_swap_and_max(i8 %x, i8 %y) {726; CHECK-LABEL: @sge_swap_and_max(727; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127728; CHECK-NEXT: ret i1 [[CMPEQ]]729;730 %cmp = icmp sle i8 %y, %x731 %cmpeq = icmp eq i8 %x, 127732 %r = and i1 %cmp, %cmpeq733 ret i1 %r734}735 736define i1 @sge_swap_and_max_logical(i8 %x, i8 %y) {737; CHECK-LABEL: @sge_swap_and_max_logical(738; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127739; CHECK-NEXT: ret i1 [[CMPEQ]]740;741 %cmp = icmp sle i8 %y, %x742 %cmpeq = icmp eq i8 %x, 127743 %r = select i1 %cmp, i1 %cmpeq, i1 false744 ret i1 %r745}746 747define i1 @sge_swap_and_max_commute(i8 %x, i8 %y) {748; CHECK-LABEL: @sge_swap_and_max_commute(749; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127750; CHECK-NEXT: ret i1 [[CMPEQ]]751;752 %cmp = icmp sle i8 %y, %x753 %cmpeq = icmp eq i8 %x, 127754 %r = and i1 %cmpeq, %cmp755 ret i1 %r756}757 758define i1 @sge_swap_and_max_commute_logical(i8 %x, i8 %y) {759; CHECK-LABEL: @sge_swap_and_max_commute_logical(760; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127761; CHECK-NEXT: ret i1 [[CMPEQ]]762;763 %cmp = icmp sle i8 %y, %x764 %cmpeq = icmp eq i8 %x, 127765 %r = select i1 %cmpeq, i1 %cmp, i1 false766 ret i1 %r767}768 769define i1 @uge_and_max(i8 %x, i8 %y) {770; CHECK-LABEL: @uge_and_max(771; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1772; CHECK-NEXT: ret i1 [[CMPEQ]]773;774 %cmp = icmp uge i8 %x, %y775 %cmpeq = icmp eq i8 %x, 255776 %r = and i1 %cmp, %cmpeq777 ret i1 %r778}779 780define i1 @uge_and_max_logical(i8 %x, i8 %y) {781; CHECK-LABEL: @uge_and_max_logical(782; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1783; CHECK-NEXT: ret i1 [[CMPEQ]]784;785 %cmp = icmp uge i8 %x, %y786 %cmpeq = icmp eq i8 %x, 255787 %r = select i1 %cmp, i1 %cmpeq, i1 false788 ret i1 %r789}790 791define i1 @uge_and_max_commute(i8 %x, i8 %y) {792; CHECK-LABEL: @uge_and_max_commute(793; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1794; CHECK-NEXT: ret i1 [[CMPEQ]]795;796 %cmp = icmp uge i8 %x, %y797 %cmpeq = icmp eq i8 %x, 255798 %r = and i1 %cmpeq, %cmp799 ret i1 %r800}801 802define i1 @uge_and_max_commute_logical(i8 %x, i8 %y) {803; CHECK-LABEL: @uge_and_max_commute_logical(804; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1805; CHECK-NEXT: ret i1 [[CMPEQ]]806;807 %cmp = icmp uge i8 %x, %y808 %cmpeq = icmp eq i8 %x, 255809 %r = select i1 %cmpeq, i1 %cmp, i1 false810 ret i1 %r811}812 813define i1 @uge_swap_and_max(i8 %x, i8 %y) {814; CHECK-LABEL: @uge_swap_and_max(815; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1816; CHECK-NEXT: ret i1 [[CMPEQ]]817;818 %cmp = icmp ule i8 %y, %x819 %cmpeq = icmp eq i8 %x, 255820 %r = and i1 %cmp, %cmpeq821 ret i1 %r822}823 824define i1 @uge_swap_and_max_logical(i8 %x, i8 %y) {825; CHECK-LABEL: @uge_swap_and_max_logical(826; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1827; CHECK-NEXT: ret i1 [[CMPEQ]]828;829 %cmp = icmp ule i8 %y, %x830 %cmpeq = icmp eq i8 %x, 255831 %r = select i1 %cmp, i1 %cmpeq, i1 false832 ret i1 %r833}834 835define i1 @uge_swap_and_max_commute(i8 %x, i8 %y) {836; CHECK-LABEL: @uge_swap_and_max_commute(837; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1838; CHECK-NEXT: ret i1 [[CMPEQ]]839;840 %cmp = icmp ule i8 %y, %x841 %cmpeq = icmp eq i8 %x, 255842 %r = and i1 %cmpeq, %cmp843 ret i1 %r844}845 846define i1 @uge_swap_and_max_commute_logical(i8 %x, i8 %y) {847; CHECK-LABEL: @uge_swap_and_max_commute_logical(848; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1849; CHECK-NEXT: ret i1 [[CMPEQ]]850;851 %cmp = icmp ule i8 %y, %x852 %cmpeq = icmp eq i8 %x, 255853 %r = select i1 %cmpeq, i1 %cmp, i1 false854 ret i1 %r855}856 857;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;858;859; (X == MIN) && (X <= Y) --> X == MIN860;861;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;862 863define i1 @sle_and_min(i8 %x, i8 %y) {864; CHECK-LABEL: @sle_and_min(865; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128866; CHECK-NEXT: ret i1 [[CMPEQ]]867;868 %cmp = icmp sle i8 %x, %y869 %cmpeq = icmp eq i8 %x, 128870 %r = and i1 %cmp, %cmpeq871 ret i1 %r872}873 874define i1 @sle_and_min_logical(i8 %x, i8 %y) {875; CHECK-LABEL: @sle_and_min_logical(876; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128877; CHECK-NEXT: ret i1 [[CMPEQ]]878;879 %cmp = icmp sle i8 %x, %y880 %cmpeq = icmp eq i8 %x, 128881 %r = select i1 %cmp, i1 %cmpeq, i1 false882 ret i1 %r883}884 885define i1 @sle_and_min_commute(i8 %x, i8 %y) {886; CHECK-LABEL: @sle_and_min_commute(887; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128888; CHECK-NEXT: ret i1 [[CMPEQ]]889;890 %cmp = icmp sle i8 %x, %y891 %cmpeq = icmp eq i8 %x, 128892 %r = and i1 %cmpeq, %cmp893 ret i1 %r894}895 896define i1 @sle_and_min_commute_logical(i8 %x, i8 %y) {897; CHECK-LABEL: @sle_and_min_commute_logical(898; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128899; CHECK-NEXT: ret i1 [[CMPEQ]]900;901 %cmp = icmp sle i8 %x, %y902 %cmpeq = icmp eq i8 %x, 128903 %r = select i1 %cmpeq, i1 %cmp, i1 false904 ret i1 %r905}906 907define i1 @sle_swap_and_min(i8 %x, i8 %y) {908; CHECK-LABEL: @sle_swap_and_min(909; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128910; CHECK-NEXT: ret i1 [[CMPEQ]]911;912 %cmp = icmp sge i8 %y, %x913 %cmpeq = icmp eq i8 %x, 128914 %r = and i1 %cmp, %cmpeq915 ret i1 %r916}917 918define i1 @sle_swap_and_min_logical(i8 %x, i8 %y) {919; CHECK-LABEL: @sle_swap_and_min_logical(920; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128921; CHECK-NEXT: ret i1 [[CMPEQ]]922;923 %cmp = icmp sge i8 %y, %x924 %cmpeq = icmp eq i8 %x, 128925 %r = select i1 %cmp, i1 %cmpeq, i1 false926 ret i1 %r927}928 929define i1 @sle_swap_and_min_commute(i8 %x, i8 %y) {930; CHECK-LABEL: @sle_swap_and_min_commute(931; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128932; CHECK-NEXT: ret i1 [[CMPEQ]]933;934 %cmp = icmp sge i8 %y, %x935 %cmpeq = icmp eq i8 %x, 128936 %r = and i1 %cmpeq, %cmp937 ret i1 %r938}939 940define i1 @sle_swap_and_min_commute_logical(i8 %x, i8 %y) {941; CHECK-LABEL: @sle_swap_and_min_commute_logical(942; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128943; CHECK-NEXT: ret i1 [[CMPEQ]]944;945 %cmp = icmp sge i8 %y, %x946 %cmpeq = icmp eq i8 %x, 128947 %r = select i1 %cmpeq, i1 %cmp, i1 false948 ret i1 %r949}950 951define i1 @ule_and_min(i8 %x, i8 %y) {952; CHECK-LABEL: @ule_and_min(953; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0954; CHECK-NEXT: ret i1 [[CMPEQ]]955;956 %cmp = icmp ule i8 %x, %y957 %cmpeq = icmp eq i8 %x, 0958 %r = and i1 %cmp, %cmpeq959 ret i1 %r960}961 962define i1 @ule_and_min_logical(i8 %x, i8 %y) {963; CHECK-LABEL: @ule_and_min_logical(964; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0965; CHECK-NEXT: ret i1 [[CMPEQ]]966;967 %cmp = icmp ule i8 %x, %y968 %cmpeq = icmp eq i8 %x, 0969 %r = select i1 %cmp, i1 %cmpeq, i1 false970 ret i1 %r971}972 973define i1 @ule_and_min_commute(i8 %x, i8 %y) {974; CHECK-LABEL: @ule_and_min_commute(975; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0976; CHECK-NEXT: ret i1 [[CMPEQ]]977;978 %cmp = icmp ule i8 %x, %y979 %cmpeq = icmp eq i8 %x, 0980 %r = and i1 %cmpeq, %cmp981 ret i1 %r982}983 984define i1 @ule_and_min_commute_logical(i8 %x, i8 %y) {985; CHECK-LABEL: @ule_and_min_commute_logical(986; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0987; CHECK-NEXT: ret i1 [[CMPEQ]]988;989 %cmp = icmp ule i8 %x, %y990 %cmpeq = icmp eq i8 %x, 0991 %r = select i1 %cmpeq, i1 %cmp, i1 false992 ret i1 %r993}994 995define i1 @ule_swap_and_min(i8 %x, i8 %y) {996; CHECK-LABEL: @ule_swap_and_min(997; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0998; CHECK-NEXT: ret i1 [[CMPEQ]]999;1000 %cmp = icmp uge i8 %y, %x1001 %cmpeq = icmp eq i8 %x, 01002 %r = and i1 %cmp, %cmpeq1003 ret i1 %r1004}1005 1006define i1 @ule_swap_and_min_logical(i8 %x, i8 %y) {1007; CHECK-LABEL: @ule_swap_and_min_logical(1008; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 01009; CHECK-NEXT: ret i1 [[CMPEQ]]1010;1011 %cmp = icmp uge i8 %y, %x1012 %cmpeq = icmp eq i8 %x, 01013 %r = select i1 %cmp, i1 %cmpeq, i1 false1014 ret i1 %r1015}1016 1017define i1 @ule_swap_and_min_commute(i8 %x, i8 %y) {1018; CHECK-LABEL: @ule_swap_and_min_commute(1019; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 01020; CHECK-NEXT: ret i1 [[CMPEQ]]1021;1022 %cmp = icmp uge i8 %y, %x1023 %cmpeq = icmp eq i8 %x, 01024 %r = and i1 %cmpeq, %cmp1025 ret i1 %r1026}1027 1028define i1 @ule_swap_and_min_commute_logical(i8 %x, i8 %y) {1029; CHECK-LABEL: @ule_swap_and_min_commute_logical(1030; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 01031; CHECK-NEXT: ret i1 [[CMPEQ]]1032;1033 %cmp = icmp uge i8 %y, %x1034 %cmpeq = icmp eq i8 %x, 01035 %r = select i1 %cmpeq, i1 %cmp, i1 false1036 ret i1 %r1037}1038 1039;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1040;1041; (X == MAX) || (X >= Y) --> X >= Y1042;1043;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1044 1045define i1 @sge_or_max(i8 %x, i8 %y) {1046; CHECK-LABEL: @sge_or_max(1047; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]1048; CHECK-NEXT: ret i1 [[CMP]]1049;1050 %cmp = icmp sge i8 %x, %y1051 %cmpeq = icmp eq i8 %x, 1271052 %r = or i1 %cmp, %cmpeq1053 ret i1 %r1054}1055 1056define i1 @sge_or_max_logical(i8 %x, i8 %y) {1057; CHECK-LABEL: @sge_or_max_logical(1058; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]1059; CHECK-NEXT: ret i1 [[CMP]]1060;1061 %cmp = icmp sge i8 %x, %y1062 %cmpeq = icmp eq i8 %x, 1271063 %r = select i1 %cmp, i1 true, i1 %cmpeq1064 ret i1 %r1065}1066 1067define i1 @sge_or_max_commute(i8 %x, i8 %y) {1068; CHECK-LABEL: @sge_or_max_commute(1069; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]1070; CHECK-NEXT: ret i1 [[CMP]]1071;1072 %cmp = icmp sge i8 %x, %y1073 %cmpeq = icmp eq i8 %x, 1271074 %r = or i1 %cmpeq, %cmp1075 ret i1 %r1076}1077 1078define i1 @sge_or_max_commute_logical(i8 %x, i8 %y) {1079; CHECK-LABEL: @sge_or_max_commute_logical(1080; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]1081; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 1271082; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]1083; CHECK-NEXT: ret i1 [[R]]1084;1085 %cmp = icmp sge i8 %x, %y1086 %cmpeq = icmp eq i8 %x, 1271087 %r = select i1 %cmpeq, i1 true, i1 %cmp1088 ret i1 %r1089}1090 1091define i1 @sge_swap_or_max(i8 %x, i8 %y) {1092; CHECK-LABEL: @sge_swap_or_max(1093; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]1094; CHECK-NEXT: ret i1 [[CMP]]1095;1096 %cmp = icmp sle i8 %y, %x1097 %cmpeq = icmp eq i8 %x, 1271098 %r = or i1 %cmp, %cmpeq1099 ret i1 %r1100}1101 1102define i1 @sge_swap_or_max_logical(i8 %x, i8 %y) {1103; CHECK-LABEL: @sge_swap_or_max_logical(1104; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]1105; CHECK-NEXT: ret i1 [[CMP]]1106;1107 %cmp = icmp sle i8 %y, %x1108 %cmpeq = icmp eq i8 %x, 1271109 %r = select i1 %cmp, i1 true, i1 %cmpeq1110 ret i1 %r1111}1112 1113define i1 @sge_swap_or_max_commute(i8 %x, i8 %y) {1114; CHECK-LABEL: @sge_swap_or_max_commute(1115; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]1116; CHECK-NEXT: ret i1 [[CMP]]1117;1118 %cmp = icmp sle i8 %y, %x1119 %cmpeq = icmp eq i8 %x, 1271120 %r = or i1 %cmpeq, %cmp1121 ret i1 %r1122}1123 1124define i1 @sge_swap_or_max_commute_logical(i8 %x, i8 %y) {1125; CHECK-LABEL: @sge_swap_or_max_commute_logical(1126; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]1127; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 1271128; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]1129; CHECK-NEXT: ret i1 [[R]]1130;1131 %cmp = icmp sle i8 %y, %x1132 %cmpeq = icmp eq i8 %x, 1271133 %r = select i1 %cmpeq, i1 true, i1 %cmp1134 ret i1 %r1135}1136 1137define i1 @uge_or_max(i8 %x, i8 %y) {1138; CHECK-LABEL: @uge_or_max(1139; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]1140; CHECK-NEXT: ret i1 [[CMP]]1141;1142 %cmp = icmp uge i8 %x, %y1143 %cmpeq = icmp eq i8 %x, 2551144 %r = or i1 %cmp, %cmpeq1145 ret i1 %r1146}1147 1148define i1 @uge_or_max_logical(i8 %x, i8 %y) {1149; CHECK-LABEL: @uge_or_max_logical(1150; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]1151; CHECK-NEXT: ret i1 [[CMP]]1152;1153 %cmp = icmp uge i8 %x, %y1154 %cmpeq = icmp eq i8 %x, 2551155 %r = select i1 %cmp, i1 true, i1 %cmpeq1156 ret i1 %r1157}1158 1159define i1 @uge_or_max_commute(i8 %x, i8 %y) {1160; CHECK-LABEL: @uge_or_max_commute(1161; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]1162; CHECK-NEXT: ret i1 [[CMP]]1163;1164 %cmp = icmp uge i8 %x, %y1165 %cmpeq = icmp eq i8 %x, 2551166 %r = or i1 %cmpeq, %cmp1167 ret i1 %r1168}1169 1170define i1 @uge_or_max_commute_logical(i8 %x, i8 %y) {1171; CHECK-LABEL: @uge_or_max_commute_logical(1172; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]1173; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -11174; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]1175; CHECK-NEXT: ret i1 [[R]]1176;1177 %cmp = icmp uge i8 %x, %y1178 %cmpeq = icmp eq i8 %x, 2551179 %r = select i1 %cmpeq, i1 true, i1 %cmp1180 ret i1 %r1181}1182 1183define i1 @uge_swap_or_max(i8 %x, i8 %y) {1184; CHECK-LABEL: @uge_swap_or_max(1185; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]1186; CHECK-NEXT: ret i1 [[CMP]]1187;1188 %cmp = icmp ule i8 %y, %x1189 %cmpeq = icmp eq i8 %x, 2551190 %r = or i1 %cmp, %cmpeq1191 ret i1 %r1192}1193 1194define i1 @uge_swap_or_max_logical(i8 %x, i8 %y) {1195; CHECK-LABEL: @uge_swap_or_max_logical(1196; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]1197; CHECK-NEXT: ret i1 [[CMP]]1198;1199 %cmp = icmp ule i8 %y, %x1200 %cmpeq = icmp eq i8 %x, 2551201 %r = select i1 %cmp, i1 true, i1 %cmpeq1202 ret i1 %r1203}1204 1205define i1 @uge_swap_or_max_commute(i8 %x, i8 %y) {1206; CHECK-LABEL: @uge_swap_or_max_commute(1207; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]1208; CHECK-NEXT: ret i1 [[CMP]]1209;1210 %cmp = icmp ule i8 %y, %x1211 %cmpeq = icmp eq i8 %x, 2551212 %r = or i1 %cmpeq, %cmp1213 ret i1 %r1214}1215 1216define i1 @uge_swap_or_max_commute_logical(i8 %x, i8 %y) {1217; CHECK-LABEL: @uge_swap_or_max_commute_logical(1218; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]1219; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -11220; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]1221; CHECK-NEXT: ret i1 [[R]]1222;1223 %cmp = icmp ule i8 %y, %x1224 %cmpeq = icmp eq i8 %x, 2551225 %r = select i1 %cmpeq, i1 true, i1 %cmp1226 ret i1 %r1227}1228 1229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1230;1231; (X == MIN) || (X <= Y) --> X <= Y1232;1233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1234 1235define i1 @sle_or_min(i8 %x, i8 %y) {1236; CHECK-LABEL: @sle_or_min(1237; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]1238; CHECK-NEXT: ret i1 [[CMP]]1239;1240 %cmp = icmp sle i8 %x, %y1241 %cmpeq = icmp eq i8 %x, 1281242 %r = or i1 %cmp, %cmpeq1243 ret i1 %r1244}1245 1246define i1 @sle_or_min_logical(i8 %x, i8 %y) {1247; CHECK-LABEL: @sle_or_min_logical(1248; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]1249; CHECK-NEXT: ret i1 [[CMP]]1250;1251 %cmp = icmp sle i8 %x, %y1252 %cmpeq = icmp eq i8 %x, 1281253 %r = select i1 %cmp, i1 true, i1 %cmpeq1254 ret i1 %r1255}1256 1257define i1 @sle_or_min_commute(i8 %x, i8 %y) {1258; CHECK-LABEL: @sle_or_min_commute(1259; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]1260; CHECK-NEXT: ret i1 [[CMP]]1261;1262 %cmp = icmp sle i8 %x, %y1263 %cmpeq = icmp eq i8 %x, 1281264 %r = or i1 %cmpeq, %cmp1265 ret i1 %r1266}1267 1268define i1 @sle_or_min_commute_logical(i8 %x, i8 %y) {1269; CHECK-LABEL: @sle_or_min_commute_logical(1270; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]1271; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -1281272; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]1273; CHECK-NEXT: ret i1 [[R]]1274;1275 %cmp = icmp sle i8 %x, %y1276 %cmpeq = icmp eq i8 %x, 1281277 %r = select i1 %cmpeq, i1 true, i1 %cmp1278 ret i1 %r1279}1280 1281define i1 @sle_swap_or_min(i8 %x, i8 %y) {1282; CHECK-LABEL: @sle_swap_or_min(1283; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]1284; CHECK-NEXT: ret i1 [[CMP]]1285;1286 %cmp = icmp sge i8 %y, %x1287 %cmpeq = icmp eq i8 %x, 1281288 %r = or i1 %cmp, %cmpeq1289 ret i1 %r1290}1291 1292define i1 @sle_swap_or_min_logical(i8 %x, i8 %y) {1293; CHECK-LABEL: @sle_swap_or_min_logical(1294; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]1295; CHECK-NEXT: ret i1 [[CMP]]1296;1297 %cmp = icmp sge i8 %y, %x1298 %cmpeq = icmp eq i8 %x, 1281299 %r = select i1 %cmp, i1 true, i1 %cmpeq1300 ret i1 %r1301}1302 1303define i1 @sle_swap_or_min_commute(i8 %x, i8 %y) {1304; CHECK-LABEL: @sle_swap_or_min_commute(1305; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]1306; CHECK-NEXT: ret i1 [[CMP]]1307;1308 %cmp = icmp sge i8 %y, %x1309 %cmpeq = icmp eq i8 %x, 1281310 %r = or i1 %cmpeq, %cmp1311 ret i1 %r1312}1313 1314define i1 @sle_swap_or_min_commute_logical(i8 %x, i8 %y) {1315; CHECK-LABEL: @sle_swap_or_min_commute_logical(1316; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]1317; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -1281318; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]1319; CHECK-NEXT: ret i1 [[R]]1320;1321 %cmp = icmp sge i8 %y, %x1322 %cmpeq = icmp eq i8 %x, 1281323 %r = select i1 %cmpeq, i1 true, i1 %cmp1324 ret i1 %r1325}1326 1327define i1 @ule_or_min(i8 %x, i8 %y) {1328; CHECK-LABEL: @ule_or_min(1329; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]1330; CHECK-NEXT: ret i1 [[CMP]]1331;1332 %cmp = icmp ule i8 %x, %y1333 %cmpeq = icmp eq i8 %x, 01334 %r = or i1 %cmp, %cmpeq1335 ret i1 %r1336}1337 1338define i1 @ule_or_min_logical(i8 %x, i8 %y) {1339; CHECK-LABEL: @ule_or_min_logical(1340; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]1341; CHECK-NEXT: ret i1 [[CMP]]1342;1343 %cmp = icmp ule i8 %x, %y1344 %cmpeq = icmp eq i8 %x, 01345 %r = select i1 %cmp, i1 true, i1 %cmpeq1346 ret i1 %r1347}1348 1349define i1 @ule_or_min_commute(i8 %x, i8 %y) {1350; CHECK-LABEL: @ule_or_min_commute(1351; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]1352; CHECK-NEXT: ret i1 [[CMP]]1353;1354 %cmp = icmp ule i8 %x, %y1355 %cmpeq = icmp eq i8 %x, 01356 %r = or i1 %cmpeq, %cmp1357 ret i1 %r1358}1359 1360define i1 @ule_or_min_commute_logical(i8 %x, i8 %y) {1361; CHECK-LABEL: @ule_or_min_commute_logical(1362; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]1363; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 01364; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]1365; CHECK-NEXT: ret i1 [[R]]1366;1367 %cmp = icmp ule i8 %x, %y1368 %cmpeq = icmp eq i8 %x, 01369 %r = select i1 %cmpeq, i1 true, i1 %cmp1370 ret i1 %r1371}1372 1373define i1 @ule_swap_or_min(i8 %x, i8 %y) {1374; CHECK-LABEL: @ule_swap_or_min(1375; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]1376; CHECK-NEXT: ret i1 [[CMP]]1377;1378 %cmp = icmp uge i8 %y, %x1379 %cmpeq = icmp eq i8 %x, 01380 %r = or i1 %cmp, %cmpeq1381 ret i1 %r1382}1383 1384define i1 @ule_swap_or_min_logical(i8 %x, i8 %y) {1385; CHECK-LABEL: @ule_swap_or_min_logical(1386; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]1387; CHECK-NEXT: ret i1 [[CMP]]1388;1389 %cmp = icmp uge i8 %y, %x1390 %cmpeq = icmp eq i8 %x, 01391 %r = select i1 %cmp, i1 true, i1 %cmpeq1392 ret i1 %r1393}1394 1395define i1 @ule_swap_or_min_commute(i8 %x, i8 %y) {1396; CHECK-LABEL: @ule_swap_or_min_commute(1397; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]1398; CHECK-NEXT: ret i1 [[CMP]]1399;1400 %cmp = icmp uge i8 %y, %x1401 %cmpeq = icmp eq i8 %x, 01402 %r = or i1 %cmpeq, %cmp1403 ret i1 %r1404}1405 1406define i1 @ule_swap_or_min_commute_logical(i8 %x, i8 %y) {1407; CHECK-LABEL: @ule_swap_or_min_commute_logical(1408; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]1409; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 01410; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]1411; CHECK-NEXT: ret i1 [[R]]1412;1413 %cmp = icmp uge i8 %y, %x1414 %cmpeq = icmp eq i8 %x, 01415 %r = select i1 %cmpeq, i1 true, i1 %cmp1416 ret i1 %r1417}1418 1419;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1420;1421; (X != MAX) && (X < Y) --> X < Y1422;1423;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424 1425define i1 @slt_and_not_max(i8 %x, i8 %y) {1426; CHECK-LABEL: @slt_and_not_max(1427; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]1428; CHECK-NEXT: ret i1 [[CMP]]1429;1430 %cmp = icmp slt i8 %x, %y1431 %cmpeq = icmp ne i8 %x, 1271432 %r = and i1 %cmp, %cmpeq1433 ret i1 %r1434}1435 1436define i1 @slt_and_not_max_logical(i8 %x, i8 %y) {1437; CHECK-LABEL: @slt_and_not_max_logical(1438; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]1439; CHECK-NEXT: ret i1 [[CMP]]1440;1441 %cmp = icmp slt i8 %x, %y1442 %cmpeq = icmp ne i8 %x, 1271443 %r = select i1 %cmp, i1 %cmpeq, i1 false1444 ret i1 %r1445}1446 1447define i1 @slt_and_not_max_commute(i8 %x, i8 %y) {1448; CHECK-LABEL: @slt_and_not_max_commute(1449; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]1450; CHECK-NEXT: ret i1 [[CMP]]1451;1452 %cmp = icmp slt i8 %x, %y1453 %cmpeq = icmp ne i8 %x, 1271454 %r = and i1 %cmpeq, %cmp1455 ret i1 %r1456}1457 1458define i1 @slt_and_not_max_commute_logical(i8 %x, i8 %y) {1459; CHECK-LABEL: @slt_and_not_max_commute_logical(1460; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]1461; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 1271462; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false1463; CHECK-NEXT: ret i1 [[R]]1464;1465 %cmp = icmp slt i8 %x, %y1466 %cmpeq = icmp ne i8 %x, 1271467 %r = select i1 %cmpeq, i1 %cmp, i1 false1468 ret i1 %r1469}1470 1471define i1 @slt_swap_and_not_max(i8 %x, i8 %y) {1472; CHECK-LABEL: @slt_swap_and_not_max(1473; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]1474; CHECK-NEXT: ret i1 [[CMP]]1475;1476 %cmp = icmp sgt i8 %y, %x1477 %cmpeq = icmp ne i8 %x, 1271478 %r = and i1 %cmp, %cmpeq1479 ret i1 %r1480}1481 1482define i1 @slt_swap_and_not_max_logical(i8 %x, i8 %y) {1483; CHECK-LABEL: @slt_swap_and_not_max_logical(1484; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]1485; CHECK-NEXT: ret i1 [[CMP]]1486;1487 %cmp = icmp sgt i8 %y, %x1488 %cmpeq = icmp ne i8 %x, 1271489 %r = select i1 %cmp, i1 %cmpeq, i1 false1490 ret i1 %r1491}1492 1493define i1 @slt_swap_and_not_max_commute(i8 %x, i8 %y) {1494; CHECK-LABEL: @slt_swap_and_not_max_commute(1495; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]1496; CHECK-NEXT: ret i1 [[CMP]]1497;1498 %cmp = icmp sgt i8 %y, %x1499 %cmpeq = icmp ne i8 %x, 1271500 %r = and i1 %cmpeq, %cmp1501 ret i1 %r1502}1503 1504define i1 @slt_swap_and_not_max_commute_logical(i8 %x, i8 %y) {1505; CHECK-LABEL: @slt_swap_and_not_max_commute_logical(1506; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]1507; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 1271508; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false1509; CHECK-NEXT: ret i1 [[R]]1510;1511 %cmp = icmp sgt i8 %y, %x1512 %cmpeq = icmp ne i8 %x, 1271513 %r = select i1 %cmpeq, i1 %cmp, i1 false1514 ret i1 %r1515}1516 1517define i1 @ult_and_not_max(i8 %x, i8 %y) {1518; CHECK-LABEL: @ult_and_not_max(1519; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]1520; CHECK-NEXT: ret i1 [[CMP]]1521;1522 %cmp = icmp ult i8 %x, %y1523 %cmpeq = icmp ne i8 %x, 2551524 %r = and i1 %cmp, %cmpeq1525 ret i1 %r1526}1527 1528define i1 @ult_and_not_max_logical(i8 %x, i8 %y) {1529; CHECK-LABEL: @ult_and_not_max_logical(1530; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]1531; CHECK-NEXT: ret i1 [[CMP]]1532;1533 %cmp = icmp ult i8 %x, %y1534 %cmpeq = icmp ne i8 %x, 2551535 %r = select i1 %cmp, i1 %cmpeq, i1 false1536 ret i1 %r1537}1538 1539define i1 @ult_and_not_max_commute(i8 %x, i8 %y) {1540; CHECK-LABEL: @ult_and_not_max_commute(1541; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]1542; CHECK-NEXT: ret i1 [[CMP]]1543;1544 %cmp = icmp ult i8 %x, %y1545 %cmpeq = icmp ne i8 %x, 2551546 %r = and i1 %cmpeq, %cmp1547 ret i1 %r1548}1549 1550define i1 @ult_and_not_max_commute_logical(i8 %x, i8 %y) {1551; CHECK-LABEL: @ult_and_not_max_commute_logical(1552; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]1553; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -11554; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false1555; CHECK-NEXT: ret i1 [[R]]1556;1557 %cmp = icmp ult i8 %x, %y1558 %cmpeq = icmp ne i8 %x, 2551559 %r = select i1 %cmpeq, i1 %cmp, i1 false1560 ret i1 %r1561}1562 1563define i1 @ult_swap_and_not_max(i8 %x, i8 %y) {1564; CHECK-LABEL: @ult_swap_and_not_max(1565; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]1566; CHECK-NEXT: ret i1 [[CMP]]1567;1568 %cmp = icmp ugt i8 %y, %x1569 %cmpeq = icmp ne i8 %x, 2551570 %r = and i1 %cmp, %cmpeq1571 ret i1 %r1572}1573 1574define i1 @ult_swap_and_not_max_logical(i8 %x, i8 %y) {1575; CHECK-LABEL: @ult_swap_and_not_max_logical(1576; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]1577; CHECK-NEXT: ret i1 [[CMP]]1578;1579 %cmp = icmp ugt i8 %y, %x1580 %cmpeq = icmp ne i8 %x, 2551581 %r = select i1 %cmp, i1 %cmpeq, i1 false1582 ret i1 %r1583}1584 1585define i1 @ult_swap_and_not_max_commute(i8 %x, i8 %y) {1586; CHECK-LABEL: @ult_swap_and_not_max_commute(1587; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]1588; CHECK-NEXT: ret i1 [[CMP]]1589;1590 %cmp = icmp ugt i8 %y, %x1591 %cmpeq = icmp ne i8 %x, 2551592 %r = and i1 %cmpeq, %cmp1593 ret i1 %r1594}1595 1596define i1 @ult_swap_and_not_max_commute_logical(i8 %x, i8 %y) {1597; CHECK-LABEL: @ult_swap_and_not_max_commute_logical(1598; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]1599; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -11600; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false1601; CHECK-NEXT: ret i1 [[R]]1602;1603 %cmp = icmp ugt i8 %y, %x1604 %cmpeq = icmp ne i8 %x, 2551605 %r = select i1 %cmpeq, i1 %cmp, i1 false1606 ret i1 %r1607}1608 1609;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1610;1611; (X != MIN) && (X > Y) --> X > Y1612;1613;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1614 1615define i1 @sgt_and_not_min(i8 %x, i8 %y) {1616; CHECK-LABEL: @sgt_and_not_min(1617; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]1618; CHECK-NEXT: ret i1 [[CMP]]1619;1620 %cmp = icmp sgt i8 %x, %y1621 %cmpeq = icmp ne i8 %x, 1281622 %r = and i1 %cmp, %cmpeq1623 ret i1 %r1624}1625 1626define i1 @sgt_and_not_min_logical(i8 %x, i8 %y) {1627; CHECK-LABEL: @sgt_and_not_min_logical(1628; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]1629; CHECK-NEXT: ret i1 [[CMP]]1630;1631 %cmp = icmp sgt i8 %x, %y1632 %cmpeq = icmp ne i8 %x, 1281633 %r = select i1 %cmp, i1 %cmpeq, i1 false1634 ret i1 %r1635}1636 1637define i1 @sgt_and_not_min_commute(i8 %x, i8 %y) {1638; CHECK-LABEL: @sgt_and_not_min_commute(1639; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]1640; CHECK-NEXT: ret i1 [[CMP]]1641;1642 %cmp = icmp sgt i8 %x, %y1643 %cmpeq = icmp ne i8 %x, 1281644 %r = and i1 %cmpeq, %cmp1645 ret i1 %r1646}1647 1648define i1 @sgt_and_not_min_commute_logical(i8 %x, i8 %y) {1649; CHECK-LABEL: @sgt_and_not_min_commute_logical(1650; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]1651; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -1281652; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false1653; CHECK-NEXT: ret i1 [[R]]1654;1655 %cmp = icmp sgt i8 %x, %y1656 %cmpeq = icmp ne i8 %x, 1281657 %r = select i1 %cmpeq, i1 %cmp, i1 false1658 ret i1 %r1659}1660 1661define i1 @sgt_swap_and_not_min(i8 %x, i8 %y) {1662; CHECK-LABEL: @sgt_swap_and_not_min(1663; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]1664; CHECK-NEXT: ret i1 [[CMP]]1665;1666 %cmp = icmp slt i8 %y, %x1667 %cmpeq = icmp ne i8 %x, 1281668 %r = and i1 %cmp, %cmpeq1669 ret i1 %r1670}1671 1672define i1 @sgt_swap_and_not_min_logical(i8 %x, i8 %y) {1673; CHECK-LABEL: @sgt_swap_and_not_min_logical(1674; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]1675; CHECK-NEXT: ret i1 [[CMP]]1676;1677 %cmp = icmp slt i8 %y, %x1678 %cmpeq = icmp ne i8 %x, 1281679 %r = select i1 %cmp, i1 %cmpeq, i1 false1680 ret i1 %r1681}1682 1683define i1 @sgt_swap_and_not_min_commute(i8 %x, i8 %y) {1684; CHECK-LABEL: @sgt_swap_and_not_min_commute(1685; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]1686; CHECK-NEXT: ret i1 [[CMP]]1687;1688 %cmp = icmp slt i8 %y, %x1689 %cmpeq = icmp ne i8 %x, 1281690 %r = and i1 %cmpeq, %cmp1691 ret i1 %r1692}1693 1694define i1 @sgt_swap_and_not_min_commute_logical(i8 %x, i8 %y) {1695; CHECK-LABEL: @sgt_swap_and_not_min_commute_logical(1696; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]1697; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -1281698; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false1699; CHECK-NEXT: ret i1 [[R]]1700;1701 %cmp = icmp slt i8 %y, %x1702 %cmpeq = icmp ne i8 %x, 1281703 %r = select i1 %cmpeq, i1 %cmp, i1 false1704 ret i1 %r1705}1706 1707define i1 @ugt_and_not_min(i8 %x, i8 %y) {1708; CHECK-LABEL: @ugt_and_not_min(1709; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]1710; CHECK-NEXT: ret i1 [[CMP]]1711;1712 %cmp = icmp ugt i8 %x, %y1713 %cmpeq = icmp ne i8 %x, 01714 %r = and i1 %cmp, %cmpeq1715 ret i1 %r1716}1717 1718define i1 @ugt_and_not_min_logical(i8 %x, i8 %y) {1719; CHECK-LABEL: @ugt_and_not_min_logical(1720; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]1721; CHECK-NEXT: ret i1 [[CMP]]1722;1723 %cmp = icmp ugt i8 %x, %y1724 %cmpeq = icmp ne i8 %x, 01725 %r = select i1 %cmp, i1 %cmpeq, i1 false1726 ret i1 %r1727}1728 1729define i1 @ugt_and_not_min_commute(i8 %x, i8 %y) {1730; CHECK-LABEL: @ugt_and_not_min_commute(1731; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]1732; CHECK-NEXT: ret i1 [[CMP]]1733;1734 %cmp = icmp ugt i8 %x, %y1735 %cmpeq = icmp ne i8 %x, 01736 %r = and i1 %cmpeq, %cmp1737 ret i1 %r1738}1739 1740define i1 @ugt_and_not_min_commute_logical(i8 %x, i8 %y) {1741; CHECK-LABEL: @ugt_and_not_min_commute_logical(1742; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]1743; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 01744; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false1745; CHECK-NEXT: ret i1 [[R]]1746;1747 %cmp = icmp ugt i8 %x, %y1748 %cmpeq = icmp ne i8 %x, 01749 %r = select i1 %cmpeq, i1 %cmp, i1 false1750 ret i1 %r1751}1752 1753define i1 @ugt_swap_and_not_min(i8 %x, i8 %y) {1754; CHECK-LABEL: @ugt_swap_and_not_min(1755; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]1756; CHECK-NEXT: ret i1 [[CMP]]1757;1758 %cmp = icmp ult i8 %y, %x1759 %cmpeq = icmp ne i8 %x, 01760 %r = and i1 %cmp, %cmpeq1761 ret i1 %r1762}1763 1764define i1 @ugt_swap_and_not_min_logical(i8 %x, i8 %y) {1765; CHECK-LABEL: @ugt_swap_and_not_min_logical(1766; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]1767; CHECK-NEXT: ret i1 [[CMP]]1768;1769 %cmp = icmp ult i8 %y, %x1770 %cmpeq = icmp ne i8 %x, 01771 %r = select i1 %cmp, i1 %cmpeq, i1 false1772 ret i1 %r1773}1774 1775define i1 @ugt_swap_and_not_min_commute(i8 %x, i8 %y) {1776; CHECK-LABEL: @ugt_swap_and_not_min_commute(1777; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]1778; CHECK-NEXT: ret i1 [[CMP]]1779;1780 %cmp = icmp ult i8 %y, %x1781 %cmpeq = icmp ne i8 %x, 01782 %r = and i1 %cmpeq, %cmp1783 ret i1 %r1784}1785 1786define i1 @ugt_swap_and_not_min_commute_logical(i8 %x, i8 %y) {1787; CHECK-LABEL: @ugt_swap_and_not_min_commute_logical(1788; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]1789; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 01790; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false1791; CHECK-NEXT: ret i1 [[R]]1792;1793 %cmp = icmp ult i8 %y, %x1794 %cmpeq = icmp ne i8 %x, 01795 %r = select i1 %cmpeq, i1 %cmp, i1 false1796 ret i1 %r1797}1798 1799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1800;1801; (X != MAX) || (X < Y) --> X != MAX1802;1803;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1804 1805define i1 @slt_or_not_max(i8 %x, i8 %y) {1806; CHECK-LABEL: @slt_or_not_max(1807; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 1271808; CHECK-NEXT: ret i1 [[CMPEQ]]1809;1810 %cmp = icmp slt i8 %x, %y1811 %cmpeq = icmp ne i8 %x, 1271812 %r = or i1 %cmp, %cmpeq1813 ret i1 %r1814}1815 1816define i1 @slt_or_not_max_logical(i8 %x, i8 %y) {1817; CHECK-LABEL: @slt_or_not_max_logical(1818; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 1271819; CHECK-NEXT: ret i1 [[CMPEQ]]1820;1821 %cmp = icmp slt i8 %x, %y1822 %cmpeq = icmp ne i8 %x, 1271823 %r = select i1 %cmp, i1 true, i1 %cmpeq1824 ret i1 %r1825}1826 1827define i1 @slt_or_not_max_commute(i8 %x, i8 %y) {1828; CHECK-LABEL: @slt_or_not_max_commute(1829; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 1271830; CHECK-NEXT: ret i1 [[CMPEQ]]1831;1832 %cmp = icmp slt i8 %x, %y1833 %cmpeq = icmp ne i8 %x, 1271834 %r = or i1 %cmpeq, %cmp1835 ret i1 %r1836}1837 1838define i1 @slt_or_not_max_commute_logical(i8 %x, i8 %y) {1839; CHECK-LABEL: @slt_or_not_max_commute_logical(1840; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 1271841; CHECK-NEXT: ret i1 [[CMPEQ]]1842;1843 %cmp = icmp slt i8 %x, %y1844 %cmpeq = icmp ne i8 %x, 1271845 %r = select i1 %cmpeq, i1 true, i1 %cmp1846 ret i1 %r1847}1848 1849define i1 @slt_swap_or_not_max(i8 %x, i8 %y) {1850; CHECK-LABEL: @slt_swap_or_not_max(1851; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 1271852; CHECK-NEXT: ret i1 [[CMPEQ]]1853;1854 %cmp = icmp sgt i8 %y, %x1855 %cmpeq = icmp ne i8 %x, 1271856 %r = or i1 %cmp, %cmpeq1857 ret i1 %r1858}1859 1860define i1 @slt_swap_or_not_max_logical(i8 %x, i8 %y) {1861; CHECK-LABEL: @slt_swap_or_not_max_logical(1862; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 1271863; CHECK-NEXT: ret i1 [[CMPEQ]]1864;1865 %cmp = icmp sgt i8 %y, %x1866 %cmpeq = icmp ne i8 %x, 1271867 %r = select i1 %cmp, i1 true, i1 %cmpeq1868 ret i1 %r1869}1870 1871define i1 @slt_swap_or_not_max_commute(i8 %x, i8 %y) {1872; CHECK-LABEL: @slt_swap_or_not_max_commute(1873; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 1271874; CHECK-NEXT: ret i1 [[CMPEQ]]1875;1876 %cmp = icmp sgt i8 %y, %x1877 %cmpeq = icmp ne i8 %x, 1271878 %r = or i1 %cmpeq, %cmp1879 ret i1 %r1880}1881 1882define i1 @slt_swap_or_not_max_commute_logical(i8 %x, i8 %y) {1883; CHECK-LABEL: @slt_swap_or_not_max_commute_logical(1884; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 1271885; CHECK-NEXT: ret i1 [[CMPEQ]]1886;1887 %cmp = icmp sgt i8 %y, %x1888 %cmpeq = icmp ne i8 %x, 1271889 %r = select i1 %cmpeq, i1 true, i1 %cmp1890 ret i1 %r1891}1892 1893define i1 @ult_or_not_max(i8 %x, i8 %y) {1894; CHECK-LABEL: @ult_or_not_max(1895; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -11896; CHECK-NEXT: ret i1 [[CMPEQ]]1897;1898 %cmp = icmp ult i8 %x, %y1899 %cmpeq = icmp ne i8 %x, 2551900 %r = or i1 %cmp, %cmpeq1901 ret i1 %r1902}1903 1904define i1 @ult_or_not_max_logical(i8 %x, i8 %y) {1905; CHECK-LABEL: @ult_or_not_max_logical(1906; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -11907; CHECK-NEXT: ret i1 [[CMPEQ]]1908;1909 %cmp = icmp ult i8 %x, %y1910 %cmpeq = icmp ne i8 %x, 2551911 %r = select i1 %cmp, i1 true, i1 %cmpeq1912 ret i1 %r1913}1914 1915define i1 @ult_or_not_max_commute(i8 %x, i8 %y) {1916; CHECK-LABEL: @ult_or_not_max_commute(1917; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -11918; CHECK-NEXT: ret i1 [[CMPEQ]]1919;1920 %cmp = icmp ult i8 %x, %y1921 %cmpeq = icmp ne i8 %x, 2551922 %r = or i1 %cmpeq, %cmp1923 ret i1 %r1924}1925 1926define i1 @ult_or_not_max_commute_logical(i8 %x, i8 %y) {1927; CHECK-LABEL: @ult_or_not_max_commute_logical(1928; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -11929; CHECK-NEXT: ret i1 [[CMPEQ]]1930;1931 %cmp = icmp ult i8 %x, %y1932 %cmpeq = icmp ne i8 %x, 2551933 %r = select i1 %cmpeq, i1 true, i1 %cmp1934 ret i1 %r1935}1936 1937define i1 @ult_swap_or_not_max(i8 %x, i8 %y) {1938; CHECK-LABEL: @ult_swap_or_not_max(1939; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -11940; CHECK-NEXT: ret i1 [[CMPEQ]]1941;1942 %cmp = icmp ugt i8 %y, %x1943 %cmpeq = icmp ne i8 %x, 2551944 %r = or i1 %cmp, %cmpeq1945 ret i1 %r1946}1947 1948define i1 @ult_swap_or_not_max_logical(i8 %x, i8 %y) {1949; CHECK-LABEL: @ult_swap_or_not_max_logical(1950; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -11951; CHECK-NEXT: ret i1 [[CMPEQ]]1952;1953 %cmp = icmp ugt i8 %y, %x1954 %cmpeq = icmp ne i8 %x, 2551955 %r = select i1 %cmp, i1 true, i1 %cmpeq1956 ret i1 %r1957}1958 1959define i1 @ult_swap_or_not_max_commute(i8 %x, i8 %y) {1960; CHECK-LABEL: @ult_swap_or_not_max_commute(1961; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -11962; CHECK-NEXT: ret i1 [[CMPEQ]]1963;1964 %cmp = icmp ugt i8 %y, %x1965 %cmpeq = icmp ne i8 %x, 2551966 %r = or i1 %cmpeq, %cmp1967 ret i1 %r1968}1969 1970define i1 @ult_swap_or_not_max_commute_logical(i8 %x, i8 %y) {1971; CHECK-LABEL: @ult_swap_or_not_max_commute_logical(1972; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -11973; CHECK-NEXT: ret i1 [[CMPEQ]]1974;1975 %cmp = icmp ugt i8 %y, %x1976 %cmpeq = icmp ne i8 %x, 2551977 %r = select i1 %cmpeq, i1 true, i1 %cmp1978 ret i1 %r1979}1980 1981;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1982;1983; (X != MIN) || (X > Y) --> X != MIN1984;1985;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1986 1987define i1 @sgt_or_not_min(i8 %x, i8 %y) {1988; CHECK-LABEL: @sgt_or_not_min(1989; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1281990; CHECK-NEXT: ret i1 [[CMPEQ]]1991;1992 %cmp = icmp sgt i8 %x, %y1993 %cmpeq = icmp ne i8 %x, 1281994 %r = or i1 %cmp, %cmpeq1995 ret i1 %r1996}1997 1998define i1 @sgt_or_not_min_logical(i8 %x, i8 %y) {1999; CHECK-LABEL: @sgt_or_not_min_logical(2000; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1282001; CHECK-NEXT: ret i1 [[CMPEQ]]2002;2003 %cmp = icmp sgt i8 %x, %y2004 %cmpeq = icmp ne i8 %x, 1282005 %r = select i1 %cmp, i1 true, i1 %cmpeq2006 ret i1 %r2007}2008 2009define i1 @sgt_or_not_min_commute(i8 %x, i8 %y) {2010; CHECK-LABEL: @sgt_or_not_min_commute(2011; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1282012; CHECK-NEXT: ret i1 [[CMPEQ]]2013;2014 %cmp = icmp sgt i8 %x, %y2015 %cmpeq = icmp ne i8 %x, 1282016 %r = or i1 %cmpeq, %cmp2017 ret i1 %r2018}2019 2020define i1 @sgt_or_not_min_commute_logical(i8 %x, i8 %y) {2021; CHECK-LABEL: @sgt_or_not_min_commute_logical(2022; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1282023; CHECK-NEXT: ret i1 [[CMPEQ]]2024;2025 %cmp = icmp sgt i8 %x, %y2026 %cmpeq = icmp ne i8 %x, 1282027 %r = select i1 %cmpeq, i1 true, i1 %cmp2028 ret i1 %r2029}2030 2031define i1 @sgt_swap_or_not_min(i8 %x, i8 %y) {2032; CHECK-LABEL: @sgt_swap_or_not_min(2033; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1282034; CHECK-NEXT: ret i1 [[CMPEQ]]2035;2036 %cmp = icmp slt i8 %y, %x2037 %cmpeq = icmp ne i8 %x, 1282038 %r = or i1 %cmp, %cmpeq2039 ret i1 %r2040}2041 2042define i1 @sgt_swap_or_not_min_logical(i8 %x, i8 %y) {2043; CHECK-LABEL: @sgt_swap_or_not_min_logical(2044; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1282045; CHECK-NEXT: ret i1 [[CMPEQ]]2046;2047 %cmp = icmp slt i8 %y, %x2048 %cmpeq = icmp ne i8 %x, 1282049 %r = select i1 %cmp, i1 true, i1 %cmpeq2050 ret i1 %r2051}2052 2053define i1 @sgt_swap_or_not_min_commute(i8 %x, i8 %y) {2054; CHECK-LABEL: @sgt_swap_or_not_min_commute(2055; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1282056; CHECK-NEXT: ret i1 [[CMPEQ]]2057;2058 %cmp = icmp slt i8 %y, %x2059 %cmpeq = icmp ne i8 %x, 1282060 %r = or i1 %cmpeq, %cmp2061 ret i1 %r2062}2063 2064define i1 @sgt_swap_or_not_min_commute_logical(i8 %x, i8 %y) {2065; CHECK-LABEL: @sgt_swap_or_not_min_commute_logical(2066; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1282067; CHECK-NEXT: ret i1 [[CMPEQ]]2068;2069 %cmp = icmp slt i8 %y, %x2070 %cmpeq = icmp ne i8 %x, 1282071 %r = select i1 %cmpeq, i1 true, i1 %cmp2072 ret i1 %r2073}2074 2075define i1 @ugt_or_not_min(i8 %x, i8 %y) {2076; CHECK-LABEL: @ugt_or_not_min(2077; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 02078; CHECK-NEXT: ret i1 [[CMPEQ]]2079;2080 %cmp = icmp ugt i8 %x, %y2081 %cmpeq = icmp ne i8 %x, 02082 %r = or i1 %cmp, %cmpeq2083 ret i1 %r2084}2085 2086define i1 @ugt_or_not_min_logical(i8 %x, i8 %y) {2087; CHECK-LABEL: @ugt_or_not_min_logical(2088; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 02089; CHECK-NEXT: ret i1 [[CMPEQ]]2090;2091 %cmp = icmp ugt i8 %x, %y2092 %cmpeq = icmp ne i8 %x, 02093 %r = select i1 %cmp, i1 true, i1 %cmpeq2094 ret i1 %r2095}2096 2097define i1 @ugt_or_not_min_commute(i8 %x, i8 %y) {2098; CHECK-LABEL: @ugt_or_not_min_commute(2099; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 02100; CHECK-NEXT: ret i1 [[CMPEQ]]2101;2102 %cmp = icmp ugt i8 %x, %y2103 %cmpeq = icmp ne i8 %x, 02104 %r = or i1 %cmpeq, %cmp2105 ret i1 %r2106}2107 2108define i1 @ugt_or_not_min_commute_logical(i8 %x, i8 %y) {2109; CHECK-LABEL: @ugt_or_not_min_commute_logical(2110; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 02111; CHECK-NEXT: ret i1 [[CMPEQ]]2112;2113 %cmp = icmp ugt i8 %x, %y2114 %cmpeq = icmp ne i8 %x, 02115 %r = select i1 %cmpeq, i1 true, i1 %cmp2116 ret i1 %r2117}2118 2119define i1 @ugt_swap_or_not_min(i8 %x, i8 %y) {2120; CHECK-LABEL: @ugt_swap_or_not_min(2121; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 02122; CHECK-NEXT: ret i1 [[CMPEQ]]2123;2124 %cmp = icmp ult i8 %y, %x2125 %cmpeq = icmp ne i8 %x, 02126 %r = or i1 %cmp, %cmpeq2127 ret i1 %r2128}2129 2130define i1 @ugt_swap_or_not_min_logical(i8 %x, i8 %y) {2131; CHECK-LABEL: @ugt_swap_or_not_min_logical(2132; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 02133; CHECK-NEXT: ret i1 [[CMPEQ]]2134;2135 %cmp = icmp ult i8 %y, %x2136 %cmpeq = icmp ne i8 %x, 02137 %r = select i1 %cmp, i1 true, i1 %cmpeq2138 ret i1 %r2139}2140 2141define i1 @ugt_swap_or_not_min_commute(i823 %x, i823 %y) {2142; CHECK-LABEL: @ugt_swap_or_not_min_commute(2143; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i823 [[X:%.*]], 02144; CHECK-NEXT: ret i1 [[CMPEQ]]2145;2146 %cmp = icmp ult i823 %y, %x2147 %cmpeq = icmp ne i823 %x, 02148 %r = or i1 %cmpeq, %cmp2149 ret i1 %r2150}2151 2152define i1 @ugt_swap_or_not_min_commute_logical(i823 %x, i823 %y) {2153; CHECK-LABEL: @ugt_swap_or_not_min_commute_logical(2154; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i823 [[X:%.*]], 02155; CHECK-NEXT: ret i1 [[CMPEQ]]2156;2157 %cmp = icmp ult i823 %y, %x2158 %cmpeq = icmp ne i823 %x, 02159 %r = select i1 %cmpeq, i1 true, i1 %cmp2160 ret i1 %r2161}2162