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