1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -mattr=+2e3 | FileCheck %s 3 4;eq 5define i1 @icmpRR_eq(i32 %x, i32 %y) { 6; CHECK-LABEL: icmpRR_eq: 7; CHECK: # %bb.0: # %entry 8; CHECK-NEXT: cmpne16 a1, a0 9; CHECK-NEXT: mvcv16 a0 10; CHECK-NEXT: rts16 11entry: 12 %icmp = icmp eq i32 %y, %x 13 ret i1 %icmp 14} 15 16define i1 @icmpRI_eq(i32 %x) { 17; CHECK-LABEL: icmpRI_eq: 18; CHECK: # %bb.0: # %entry 19; CHECK-NEXT: cmpnei16 a0, 10 20; CHECK-NEXT: mvcv16 a0 21; CHECK-NEXT: rts16 22entry: 23 %icmp = icmp eq i32 %x, 10 24 ret i1 %icmp 25} 26 27define i1 @icmpRI_X_eq(i32 %x) { 28; CHECK-LABEL: icmpRI_X_eq: 29; CHECK: # %bb.0: # %entry 30; CHECK-NEXT: movih32 a1, 62 31; CHECK-NEXT: ori32 a1, a1, 33768 32; CHECK-NEXT: cmpne16 a0, a1 33; CHECK-NEXT: mvcv16 a0 34; CHECK-NEXT: rts16 35entry: 36 %icmp = icmp eq i32 %x, 4097000 37 ret i1 %icmp 38} 39 40define i1 @ICMP_LONG_eq(i64 %x, i64 %y) { 41; CHECK-LABEL: ICMP_LONG_eq: 42; CHECK: # %bb.0: # %entry 43; CHECK-NEXT: xor16 a1, a3 44; CHECK-NEXT: xor16 a0, a2 45; CHECK-NEXT: or16 a0, a1 46; CHECK-NEXT: cmpnei16 a0, 0 47; CHECK-NEXT: mvcv16 a0 48; CHECK-NEXT: rts16 49entry: 50 %icmp = icmp eq i64 %y, %x 51 ret i1 %icmp 52} 53 54define i1 @ICMP_LONG_I_eq(i64 %x) { 55; CHECK-LABEL: ICMP_LONG_I_eq: 56; CHECK: # %bb.0: # %entry 57; CHECK-NEXT: xori32 a0, a0, 1 58; CHECK-NEXT: or16 a0, a1 59; CHECK-NEXT: cmpnei16 a0, 0 60; CHECK-NEXT: mvcv16 a0 61; CHECK-NEXT: rts16 62entry: 63 %icmp = icmp eq i64 %x, 1 64 ret i1 %icmp 65} 66 67define i1 @ICMP_SHORT_eq(i16 %x, i16 %y) { 68; CHECK-LABEL: ICMP_SHORT_eq: 69; CHECK: # %bb.0: # %entry 70; CHECK-NEXT: zexth16 a0, a0 71; CHECK-NEXT: zexth16 a1, a1 72; CHECK-NEXT: cmpne16 a1, a0 73; CHECK-NEXT: mvcv16 a0 74; CHECK-NEXT: rts16 75entry: 76 %icmp = icmp eq i16 %y, %x 77 ret i1 %icmp 78} 79 80define i1 @ICMP_SHORT_I_eq(i16 %x) { 81; CHECK-LABEL: ICMP_SHORT_I_eq: 82; CHECK: # %bb.0: # %entry 83; CHECK-NEXT: zexth16 a0, a0 84; CHECK-NEXT: cmpnei16 a0, 1 85; CHECK-NEXT: mvcv16 a0 86; CHECK-NEXT: rts16 87entry: 88 %icmp = icmp eq i16 %x, 1 89 ret i1 %icmp 90} 91 92define i1 @ICMP_CHAR_eq(i8 %x, i8 %y) { 93; CHECK-LABEL: ICMP_CHAR_eq: 94; CHECK: # %bb.0: # %entry 95; CHECK-NEXT: zextb16 a0, a0 96; CHECK-NEXT: zextb16 a1, a1 97; CHECK-NEXT: cmpne16 a1, a0 98; CHECK-NEXT: mvcv16 a0 99; CHECK-NEXT: rts16 100entry: 101 %icmp = icmp eq i8 %y, %x 102 ret i1 %icmp 103} 104 105define i1 @ICMP_CHAR_I_eq(i8 %x) { 106; CHECK-LABEL: ICMP_CHAR_I_eq: 107; CHECK: # %bb.0: # %entry 108; CHECK-NEXT: zextb16 a0, a0 109; CHECK-NEXT: cmpnei16 a0, 1 110; CHECK-NEXT: mvcv16 a0 111; CHECK-NEXT: rts16 112entry: 113 %icmp = icmp eq i8 %x, 1 114 ret i1 %icmp 115} 116 117define i1 @ICMP_BIT_eq(i1 %x, i1 %y) { 118; CHECK-LABEL: ICMP_BIT_eq: 119; CHECK: # %bb.0: # %entry 120; CHECK-NEXT: xor16 a0, a1 121; CHECK-NEXT: xori32 a0, a0, 1 122; CHECK-NEXT: rts16 123entry: 124 %icmp = icmp eq i1 %y, %x 125 ret i1 %icmp 126} 127 128define i1 @ICMP_BIT_I_eq(i1 %x) { 129; CHECK-LABEL: ICMP_BIT_I_eq: 130; CHECK: # %bb.0: # %entry 131; CHECK-NEXT: rts16 132entry: 133 %icmp = icmp eq i1 %x, 1 134 ret i1 %icmp 135} 136 137;ne 138define i1 @icmpRR_ne(i32 %x, i32 %y) { 139; CHECK-LABEL: icmpRR_ne: 140; CHECK: # %bb.0: # %entry 141; CHECK-NEXT: cmpne16 a1, a0 142; CHECK-NEXT: mvc32 a0 143; CHECK-NEXT: rts16 144entry: 145 %icmp = icmp ne i32 %y, %x 146 ret i1 %icmp 147} 148 149define i1 @icmpRI_ne(i32 %x) { 150; CHECK-LABEL: icmpRI_ne: 151; CHECK: # %bb.0: # %entry 152; CHECK-NEXT: cmpnei16 a0, 10 153; CHECK-NEXT: mvc32 a0 154; CHECK-NEXT: rts16 155entry: 156 %icmp = icmp ne i32 %x, 10 157 ret i1 %icmp 158} 159 160define i1 @icmpRI_X_ne(i32 %x) { 161; CHECK-LABEL: icmpRI_X_ne: 162; CHECK: # %bb.0: # %entry 163; CHECK-NEXT: movih32 a1, 62 164; CHECK-NEXT: ori32 a1, a1, 33768 165; CHECK-NEXT: cmpne16 a0, a1 166; CHECK-NEXT: mvc32 a0 167; CHECK-NEXT: rts16 168entry: 169 %icmp = icmp ne i32 %x, 4097000 170 ret i1 %icmp 171} 172 173define i1 @ICMP_LONG_ne(i64 %x, i64 %y) { 174; CHECK-LABEL: ICMP_LONG_ne: 175; CHECK: # %bb.0: # %entry 176; CHECK-NEXT: xor16 a1, a3 177; CHECK-NEXT: xor16 a0, a2 178; CHECK-NEXT: or16 a0, a1 179; CHECK-NEXT: cmpnei16 a0, 0 180; CHECK-NEXT: mvc32 a0 181; CHECK-NEXT: rts16 182entry: 183 %icmp = icmp ne i64 %y, %x 184 ret i1 %icmp 185} 186 187define i1 @ICMP_LONG_I_ne(i64 %x) { 188; CHECK-LABEL: ICMP_LONG_I_ne: 189; CHECK: # %bb.0: # %entry 190; CHECK-NEXT: xori32 a0, a0, 1 191; CHECK-NEXT: or16 a0, a1 192; CHECK-NEXT: cmpnei16 a0, 0 193; CHECK-NEXT: mvc32 a0 194; CHECK-NEXT: rts16 195entry: 196 %icmp = icmp ne i64 %x, 1 197 ret i1 %icmp 198} 199 200define i1 @ICMP_SHORT_ne(i16 %x, i16 %y) { 201; CHECK-LABEL: ICMP_SHORT_ne: 202; CHECK: # %bb.0: # %entry 203; CHECK-NEXT: zexth16 a0, a0 204; CHECK-NEXT: zexth16 a1, a1 205; CHECK-NEXT: cmpne16 a1, a0 206; CHECK-NEXT: mvc32 a0 207; CHECK-NEXT: rts16 208entry: 209 %icmp = icmp ne i16 %y, %x 210 ret i1 %icmp 211} 212 213define i1 @ICMP_SHORT_I_ne(i16 %x) { 214; CHECK-LABEL: ICMP_SHORT_I_ne: 215; CHECK: # %bb.0: # %entry 216; CHECK-NEXT: zexth16 a0, a0 217; CHECK-NEXT: cmpnei16 a0, 1 218; CHECK-NEXT: mvc32 a0 219; CHECK-NEXT: rts16 220entry: 221 %icmp = icmp ne i16 %x, 1 222 ret i1 %icmp 223} 224 225define i1 @ICMP_CHAR_ne(i8 %x, i8 %y) { 226; CHECK-LABEL: ICMP_CHAR_ne: 227; CHECK: # %bb.0: # %entry 228; CHECK-NEXT: zextb16 a0, a0 229; CHECK-NEXT: zextb16 a1, a1 230; CHECK-NEXT: cmpne16 a1, a0 231; CHECK-NEXT: mvc32 a0 232; CHECK-NEXT: rts16 233entry: 234 %icmp = icmp ne i8 %y, %x 235 ret i1 %icmp 236} 237 238define i1 @ICMP_CHAR_I_ne(i8 %x) { 239; CHECK-LABEL: ICMP_CHAR_I_ne: 240; CHECK: # %bb.0: # %entry 241; CHECK-NEXT: zextb16 a0, a0 242; CHECK-NEXT: cmpnei16 a0, 1 243; CHECK-NEXT: mvc32 a0 244; CHECK-NEXT: rts16 245entry: 246 %icmp = icmp ne i8 %x, 1 247 ret i1 %icmp 248} 249 250define i1 @ICMP_BIT_ne(i1 %x, i1 %y) { 251; CHECK-LABEL: ICMP_BIT_ne: 252; CHECK: # %bb.0: # %entry 253; CHECK-NEXT: xor16 a0, a1 254; CHECK-NEXT: rts16 255entry: 256 %icmp = icmp ne i1 %y, %x 257 ret i1 %icmp 258} 259 260define i1 @ICMP_BIT_I_ne(i1 %x) { 261; CHECK-LABEL: ICMP_BIT_I_ne: 262; CHECK: # %bb.0: # %entry 263; CHECK-NEXT: xori32 a0, a0, 1 264; CHECK-NEXT: rts16 265entry: 266 %icmp = icmp ne i1 %x, 1 267 ret i1 %icmp 268} 269 270 271;ugt 272define i1 @icmpRR_ugt(i32 %x, i32 %y) { 273; CHECK-LABEL: icmpRR_ugt: 274; CHECK: # %bb.0: # %entry 275; CHECK-NEXT: cmphs16 a0, a1 276; CHECK-NEXT: mvcv16 a0 277; CHECK-NEXT: rts16 278entry: 279 %icmp = icmp ugt i32 %y, %x 280 ret i1 %icmp 281} 282 283define i1 @icmpRI_ugt(i32 %x) { 284; CHECK-LABEL: icmpRI_ugt: 285; CHECK: # %bb.0: # %entry 286; CHECK-NEXT: movi16 a1, 10 287; CHECK-NEXT: cmphs16 a1, a0 288; CHECK-NEXT: mvcv16 a0 289; CHECK-NEXT: rts16 290entry: 291 %icmp = icmp ugt i32 %x, 10 292 ret i1 %icmp 293} 294 295define i1 @icmpRI_X_ugt(i32 %x) { 296; CHECK-LABEL: icmpRI_X_ugt: 297; CHECK: # %bb.0: # %entry 298; CHECK-NEXT: movih32 a1, 62 299; CHECK-NEXT: ori32 a1, a1, 33768 300; CHECK-NEXT: cmphs16 a1, a0 301; CHECK-NEXT: mvcv16 a0 302; CHECK-NEXT: rts16 303entry: 304 %icmp = icmp ugt i32 %x, 4097000 305 ret i1 %icmp 306} 307 308define i1 @ICMP_LONG_ugt(i64 %x, i64 %y) { 309; CHECK-LABEL: ICMP_LONG_ugt: 310; CHECK: # %bb.0: # %entry 311; CHECK-NEXT: .cfi_def_cfa_offset 0 312; CHECK-NEXT: subi16 sp, sp, 8 313; CHECK-NEXT: .cfi_def_cfa_offset 8 314; CHECK-NEXT: cmpne16 a3, a1 315; CHECK-NEXT: mvc32 t0 316; CHECK-NEXT: st32.w t0, (sp, 4) 317; CHECK-NEXT: cmphs16 a1, a3 318; CHECK-NEXT: mvcv16 a1 319; CHECK-NEXT: cmphs16 a0, a2 320; CHECK-NEXT: mvcv16 a0 321; CHECK-NEXT: ld16.w a2, (sp, 4) 322; CHECK-NEXT: btsti32 a2, 0 323; CHECK-NEXT: movf32 a1, a0 324; CHECK-NEXT: mov16 a0, a1 325; CHECK-NEXT: addi16 sp, sp, 8 326; CHECK-NEXT: rts16 327entry: 328 %icmp = icmp ugt i64 %y, %x 329 ret i1 %icmp 330} 331 332define i1 @ICMP_LONG_I_ugt(i64 %x) { 333; CHECK-LABEL: ICMP_LONG_I_ugt: 334; CHECK: # %bb.0: # %entry 335; CHECK-NEXT: movi16 a2, 1 336; CHECK-NEXT: cmphs16 a2, a0 337; CHECK-NEXT: mvcv16 a2 338; CHECK-NEXT: cmpnei16 a1, 0 339; CHECK-NEXT: mvc32 a0 340; CHECK-NEXT: movf32 a0, a2 341; CHECK-NEXT: rts16 342entry: 343 %icmp = icmp ugt i64 %x, 1 344 ret i1 %icmp 345} 346 347define i1 @ICMP_SHORT_ugt(i16 %x, i16 %y) { 348; CHECK-LABEL: ICMP_SHORT_ugt: 349; CHECK: # %bb.0: # %entry 350; CHECK-NEXT: zexth16 a1, a1 351; CHECK-NEXT: zexth16 a0, a0 352; CHECK-NEXT: cmphs16 a0, a1 353; CHECK-NEXT: mvcv16 a0 354; CHECK-NEXT: rts16 355entry: 356 %icmp = icmp ugt i16 %y, %x 357 ret i1 %icmp 358} 359 360define i1 @ICMP_SHORT_I_ugt(i16 %x) { 361; CHECK-LABEL: ICMP_SHORT_I_ugt: 362; CHECK: # %bb.0: # %entry 363; CHECK-NEXT: zexth16 a0, a0 364; CHECK-NEXT: movi16 a1, 1 365; CHECK-NEXT: cmphs16 a1, a0 366; CHECK-NEXT: mvcv16 a0 367; CHECK-NEXT: rts16 368entry: 369 %icmp = icmp ugt i16 %x, 1 370 ret i1 %icmp 371} 372 373define i1 @ICMP_CHAR_ugt(i8 %x, i8 %y) { 374; CHECK-LABEL: ICMP_CHAR_ugt: 375; CHECK: # %bb.0: # %entry 376; CHECK-NEXT: zextb16 a1, a1 377; CHECK-NEXT: zextb16 a0, a0 378; CHECK-NEXT: cmphs16 a0, a1 379; CHECK-NEXT: mvcv16 a0 380; CHECK-NEXT: rts16 381entry: 382 %icmp = icmp ugt i8 %y, %x 383 ret i1 %icmp 384} 385 386define i1 @ICMP_CHAR_I_ugt(i8 %x) { 387; CHECK-LABEL: ICMP_CHAR_I_ugt: 388; CHECK: # %bb.0: # %entry 389; CHECK-NEXT: zextb16 a0, a0 390; CHECK-NEXT: movi16 a1, 1 391; CHECK-NEXT: cmphs16 a1, a0 392; CHECK-NEXT: mvcv16 a0 393; CHECK-NEXT: rts16 394entry: 395 %icmp = icmp ugt i8 %x, 1 396 ret i1 %icmp 397} 398 399define i1 @ICMP_BIT_ugt(i1 %x, i1 %y) { 400; CHECK-LABEL: ICMP_BIT_ugt: 401; CHECK: # %bb.0: # %entry 402; CHECK-NEXT: xori32 a0, a0, 1 403; CHECK-NEXT: and16 a0, a1 404; CHECK-NEXT: rts16 405entry: 406 %icmp = icmp ugt i1 %y, %x 407 ret i1 %icmp 408} 409 410define i1 @ICMP_BIT_I_ugt(i1 %x) { 411; CHECK-LABEL: ICMP_BIT_I_ugt: 412; CHECK: # %bb.0: # %entry 413; CHECK-NEXT: movi16 a0, 0 414; CHECK-NEXT: rts16 415entry: 416 %icmp = icmp ugt i1 %x, 1 417 ret i1 %icmp 418} 419 420 421;uge 422define i1 @icmpRR_uge(i32 %x, i32 %y) { 423; CHECK-LABEL: icmpRR_uge: 424; CHECK: # %bb.0: # %entry 425; CHECK-NEXT: cmphs16 a1, a0 426; CHECK-NEXT: mvc32 a0 427; CHECK-NEXT: rts16 428entry: 429 %icmp = icmp uge i32 %y, %x 430 ret i1 %icmp 431} 432 433define i1 @icmpRI_uge(i32 %x) { 434; CHECK-LABEL: icmpRI_uge: 435; CHECK: # %bb.0: # %entry 436; CHECK-NEXT: movi16 a1, 9 437; CHECK-NEXT: cmphs16 a1, a0 438; CHECK-NEXT: mvcv16 a0 439; CHECK-NEXT: rts16 440entry: 441 %icmp = icmp uge i32 %x, 10 442 ret i1 %icmp 443} 444 445define i1 @icmpRI_X_uge(i32 %x) { 446; CHECK-LABEL: icmpRI_X_uge: 447; CHECK: # %bb.0: # %entry 448; CHECK-NEXT: movih32 a1, 62 449; CHECK-NEXT: ori32 a1, a1, 33767 450; CHECK-NEXT: cmphs16 a1, a0 451; CHECK-NEXT: mvcv16 a0 452; CHECK-NEXT: rts16 453entry: 454 %icmp = icmp uge i32 %x, 4097000 455 ret i1 %icmp 456} 457 458define i1 @ICMP_LONG_uge(i64 %x, i64 %y) { 459; CHECK-LABEL: ICMP_LONG_uge: 460; CHECK: # %bb.0: # %entry 461; CHECK-NEXT: .cfi_def_cfa_offset 0 462; CHECK-NEXT: subi16 sp, sp, 16 463; CHECK-NEXT: .cfi_def_cfa_offset 16 464; CHECK-NEXT: cmphs16 a3, a1 465; CHECK-NEXT: mvc32 t0 466; CHECK-NEXT: st32.w t0, (sp, 12) 467; CHECK-NEXT: cmphs16 a2, a0 468; CHECK-NEXT: mvc32 a0 469; CHECK-NEXT: st16.w a0, (sp, 4) 470; CHECK-NEXT: cmpne16 a3, a1 471; CHECK-NEXT: mvc32 a0 472; CHECK-NEXT: st16.w a0, (sp, 8) 473; CHECK-NEXT: ld16.w a0, (sp, 4) 474; CHECK-NEXT: btsti32 a0, 0 475; CHECK-NEXT: mvc32 a1 476; CHECK-NEXT: ld16.w a0, (sp, 12) 477; CHECK-NEXT: btsti32 a0, 0 478; CHECK-NEXT: mvc32 a0 479; CHECK-NEXT: ld16.w a2, (sp, 8) 480; CHECK-NEXT: btsti32 a2, 0 481; CHECK-NEXT: movf32 a0, a1 482; CHECK-NEXT: addi16 sp, sp, 16 483; CHECK-NEXT: rts16 484entry: 485 %icmp = icmp uge i64 %y, %x 486 ret i1 %icmp 487} 488 489define i1 @ICMP_LONG_I_uge(i64 %x) { 490; CHECK-LABEL: ICMP_LONG_I_uge: 491; CHECK: # %bb.0: # %entry 492; CHECK-NEXT: or16 a0, a1 493; CHECK-NEXT: cmpnei16 a0, 0 494; CHECK-NEXT: mvc32 a0 495; CHECK-NEXT: rts16 496entry: 497 %icmp = icmp uge i64 %x, 1 498 ret i1 %icmp 499} 500 501define i1 @ICMP_SHORT_uge(i16 %x, i16 %y) { 502; CHECK-LABEL: ICMP_SHORT_uge: 503; CHECK: # %bb.0: # %entry 504; CHECK-NEXT: zexth16 a0, a0 505; CHECK-NEXT: zexth16 a1, a1 506; CHECK-NEXT: cmphs16 a1, a0 507; CHECK-NEXT: mvc32 a0 508; CHECK-NEXT: rts16 509entry: 510 %icmp = icmp uge i16 %y, %x 511 ret i1 %icmp 512} 513 514define i1 @ICMP_SHORT_I_uge(i16 %x) { 515; CHECK-LABEL: ICMP_SHORT_I_uge: 516; CHECK: # %bb.0: # %entry 517; CHECK-NEXT: zexth16 a0, a0 518; CHECK-NEXT: cmpnei16 a0, 0 519; CHECK-NEXT: mvc32 a0 520; CHECK-NEXT: rts16 521entry: 522 %icmp = icmp uge i16 %x, 1 523 ret i1 %icmp 524} 525 526define i1 @ICMP_CHAR_uge(i8 %x, i8 %y) { 527; CHECK-LABEL: ICMP_CHAR_uge: 528; CHECK: # %bb.0: # %entry 529; CHECK-NEXT: zextb16 a0, a0 530; CHECK-NEXT: zextb16 a1, a1 531; CHECK-NEXT: cmphs16 a1, a0 532; CHECK-NEXT: mvc32 a0 533; CHECK-NEXT: rts16 534entry: 535 %icmp = icmp uge i8 %y, %x 536 ret i1 %icmp 537} 538 539define i1 @ICMP_CHAR_I_uge(i8 %x) { 540; CHECK-LABEL: ICMP_CHAR_I_uge: 541; CHECK: # %bb.0: # %entry 542; CHECK-NEXT: zextb16 a0, a0 543; CHECK-NEXT: cmpnei16 a0, 0 544; CHECK-NEXT: mvc32 a0 545; CHECK-NEXT: rts16 546entry: 547 %icmp = icmp uge i8 %x, 1 548 ret i1 %icmp 549} 550 551define i1 @ICMP_BIT_uge(i1 %x, i1 %y) { 552; CHECK-LABEL: ICMP_BIT_uge: 553; CHECK: # %bb.0: # %entry 554; CHECK-NEXT: xori32 a0, a0, 1 555; CHECK-NEXT: or16 a0, a1 556; CHECK-NEXT: rts16 557entry: 558 %icmp = icmp uge i1 %y, %x 559 ret i1 %icmp 560} 561 562define i1 @ICMP_BIT_I_uge(i1 %x) { 563; CHECK-LABEL: ICMP_BIT_I_uge: 564; CHECK: # %bb.0: # %entry 565; CHECK-NEXT: rts16 566entry: 567 %icmp = icmp uge i1 %x, 1 568 ret i1 %icmp 569} 570 571 572;ult 573define i1 @icmpRR_ult(i32 %x, i32 %y) { 574; CHECK-LABEL: icmpRR_ult: 575; CHECK: # %bb.0: # %entry 576; CHECK-NEXT: cmphs16 a1, a0 577; CHECK-NEXT: mvcv16 a0 578; CHECK-NEXT: rts16 579entry: 580 %icmp = icmp ult i32 %y, %x 581 ret i1 %icmp 582} 583 584define i1 @icmpRI_ult(i32 %x) { 585; CHECK-LABEL: icmpRI_ult: 586; CHECK: # %bb.0: # %entry 587; CHECK-NEXT: cmphsi16 a0, 10 588; CHECK-NEXT: mvcv16 a0 589; CHECK-NEXT: rts16 590entry: 591 %icmp = icmp ult i32 %x, 10 592 ret i1 %icmp 593} 594 595define i1 @icmpRI_X_ult(i32 %x) { 596; CHECK-LABEL: icmpRI_X_ult: 597; CHECK: # %bb.0: # %entry 598; CHECK-NEXT: movih32 a1, 62 599; CHECK-NEXT: ori32 a1, a1, 33768 600; CHECK-NEXT: cmphs16 a0, a1 601; CHECK-NEXT: mvcv16 a0 602; CHECK-NEXT: rts16 603entry: 604 %icmp = icmp ult i32 %x, 4097000 605 ret i1 %icmp 606} 607 608define i1 @ICMP_LONG_ult(i64 %x, i64 %y) { 609; CHECK-LABEL: ICMP_LONG_ult: 610; CHECK: # %bb.0: # %entry 611; CHECK-NEXT: .cfi_def_cfa_offset 0 612; CHECK-NEXT: subi16 sp, sp, 8 613; CHECK-NEXT: .cfi_def_cfa_offset 8 614; CHECK-NEXT: cmpne16 a3, a1 615; CHECK-NEXT: mvc32 t0 616; CHECK-NEXT: st32.w t0, (sp, 4) 617; CHECK-NEXT: cmphs16 a3, a1 618; CHECK-NEXT: mvcv16 a1 619; CHECK-NEXT: cmphs16 a2, a0 620; CHECK-NEXT: mvcv16 a0 621; CHECK-NEXT: ld16.w a2, (sp, 4) 622; CHECK-NEXT: btsti32 a2, 0 623; CHECK-NEXT: movf32 a1, a0 624; CHECK-NEXT: mov16 a0, a1 625; CHECK-NEXT: addi16 sp, sp, 8 626; CHECK-NEXT: rts16 627entry: 628 %icmp = icmp ult i64 %y, %x 629 ret i1 %icmp 630} 631 632define i1 @ICMP_LONG_I_ult(i64 %x) { 633; CHECK-LABEL: ICMP_LONG_I_ult: 634; CHECK: # %bb.0: # %entry 635; CHECK-NEXT: or16 a0, a1 636; CHECK-NEXT: cmpnei16 a0, 0 637; CHECK-NEXT: mvcv16 a0 638; CHECK-NEXT: rts16 639entry: 640 %icmp = icmp ult i64 %x, 1 641 ret i1 %icmp 642} 643 644define i1 @ICMP_SHORT_ult(i16 %x, i16 %y) { 645; CHECK-LABEL: ICMP_SHORT_ult: 646; CHECK: # %bb.0: # %entry 647; CHECK-NEXT: zexth16 a0, a0 648; CHECK-NEXT: zexth16 a1, a1 649; CHECK-NEXT: cmphs16 a1, a0 650; CHECK-NEXT: mvcv16 a0 651; CHECK-NEXT: rts16 652entry: 653 %icmp = icmp ult i16 %y, %x 654 ret i1 %icmp 655} 656 657define i1 @ICMP_SHORT_I_ult(i16 %x) { 658; CHECK-LABEL: ICMP_SHORT_I_ult: 659; CHECK: # %bb.0: # %entry 660; CHECK-NEXT: zexth16 a0, a0 661; CHECK-NEXT: cmpnei16 a0, 0 662; CHECK-NEXT: mvcv16 a0 663; CHECK-NEXT: rts16 664entry: 665 %icmp = icmp ult i16 %x, 1 666 ret i1 %icmp 667} 668 669define i1 @ICMP_CHAR_ult(i8 %x, i8 %y) { 670; CHECK-LABEL: ICMP_CHAR_ult: 671; CHECK: # %bb.0: # %entry 672; CHECK-NEXT: zextb16 a0, a0 673; CHECK-NEXT: zextb16 a1, a1 674; CHECK-NEXT: cmphs16 a1, a0 675; CHECK-NEXT: mvcv16 a0 676; CHECK-NEXT: rts16 677entry: 678 %icmp = icmp ult i8 %y, %x 679 ret i1 %icmp 680} 681 682define i1 @ICMP_CHAR_I_ult(i8 %x) { 683; CHECK-LABEL: ICMP_CHAR_I_ult: 684; CHECK: # %bb.0: # %entry 685; CHECK-NEXT: zextb16 a0, a0 686; CHECK-NEXT: cmpnei16 a0, 0 687; CHECK-NEXT: mvcv16 a0 688; CHECK-NEXT: rts16 689entry: 690 %icmp = icmp ult i8 %x, 1 691 ret i1 %icmp 692} 693 694define i1 @ICMP_BIT_ult(i1 %x, i1 %y) { 695; CHECK-LABEL: ICMP_BIT_ult: 696; CHECK: # %bb.0: # %entry 697; CHECK-NEXT: xori32 a1, a1, 1 698; CHECK-NEXT: and16 a0, a1 699; CHECK-NEXT: rts16 700entry: 701 %icmp = icmp ult i1 %y, %x 702 ret i1 %icmp 703} 704 705define i1 @ICMP_BIT_I_ult(i1 %x) { 706; CHECK-LABEL: ICMP_BIT_I_ult: 707; CHECK: # %bb.0: # %entry 708; CHECK-NEXT: xori32 a0, a0, 1 709; CHECK-NEXT: rts16 710entry: 711 %icmp = icmp ult i1 %x, 1 712 ret i1 %icmp 713} 714 715 716;ule 717define i1 @icmpRR_ule(i32 %x, i32 %y) { 718; CHECK-LABEL: icmpRR_ule: 719; CHECK: # %bb.0: # %entry 720; CHECK-NEXT: cmphs16 a0, a1 721; CHECK-NEXT: mvc32 a0 722; CHECK-NEXT: rts16 723entry: 724 %icmp = icmp ule i32 %y, %x 725 ret i1 %icmp 726} 727 728define i1 @icmpRI_ule(i32 %x) { 729; CHECK-LABEL: icmpRI_ule: 730; CHECK: # %bb.0: # %entry 731; CHECK-NEXT: cmphsi16 a0, 11 732; CHECK-NEXT: mvcv16 a0 733; CHECK-NEXT: rts16 734entry: 735 %icmp = icmp ule i32 %x, 10 736 ret i1 %icmp 737} 738 739define i1 @icmpRI_X_ule(i32 %x) { 740; CHECK-LABEL: icmpRI_X_ule: 741; CHECK: # %bb.0: # %entry 742; CHECK-NEXT: movih32 a1, 62 743; CHECK-NEXT: ori32 a1, a1, 33769 744; CHECK-NEXT: cmphs16 a0, a1 745; CHECK-NEXT: mvcv16 a0 746; CHECK-NEXT: rts16 747entry: 748 %icmp = icmp ule i32 %x, 4097000 749 ret i1 %icmp 750} 751 752define i1 @ICMP_LONG_ule(i64 %x, i64 %y) { 753; CHECK-LABEL: ICMP_LONG_ule: 754; CHECK: # %bb.0: # %entry 755; CHECK-NEXT: .cfi_def_cfa_offset 0 756; CHECK-NEXT: subi16 sp, sp, 16 757; CHECK-NEXT: .cfi_def_cfa_offset 16 758; CHECK-NEXT: cmphs16 a1, a3 759; CHECK-NEXT: mvc32 t0 760; CHECK-NEXT: st32.w t0, (sp, 12) 761; CHECK-NEXT: cmphs16 a0, a2 762; CHECK-NEXT: mvc32 a0 763; CHECK-NEXT: st16.w a0, (sp, 4) 764; CHECK-NEXT: cmpne16 a3, a1 765; CHECK-NEXT: mvc32 a0 766; CHECK-NEXT: st16.w a0, (sp, 8) 767; CHECK-NEXT: ld16.w a0, (sp, 4) 768; CHECK-NEXT: btsti32 a0, 0 769; CHECK-NEXT: mvc32 a1 770; CHECK-NEXT: ld16.w a0, (sp, 12) 771; CHECK-NEXT: btsti32 a0, 0 772; CHECK-NEXT: mvc32 a0 773; CHECK-NEXT: ld16.w a2, (sp, 8) 774; CHECK-NEXT: btsti32 a2, 0 775; CHECK-NEXT: movf32 a0, a1 776; CHECK-NEXT: addi16 sp, sp, 16 777; CHECK-NEXT: rts16 778entry: 779 %icmp = icmp ule i64 %y, %x 780 ret i1 %icmp 781} 782 783define i1 @ICMP_LONG_I_ule(i64 %x) { 784; CHECK-LABEL: ICMP_LONG_I_ule: 785; CHECK: # %bb.0: # %entry 786; CHECK-NEXT: .cfi_def_cfa_offset 0 787; CHECK-NEXT: subi16 sp, sp, 8 788; CHECK-NEXT: .cfi_def_cfa_offset 8 789; CHECK-NEXT: cmpnei16 a1, 0 790; CHECK-NEXT: mvc32 a1 791; CHECK-NEXT: st16.w a1, (sp, 4) 792; CHECK-NEXT: cmphsi16 a0, 2 793; CHECK-NEXT: mvcv16 a1 794; CHECK-NEXT: movi16 a0, 0 795; CHECK-NEXT: ld16.w a2, (sp, 4) 796; CHECK-NEXT: btsti32 a2, 0 797; CHECK-NEXT: movf32 a0, a1 798; CHECK-NEXT: addi16 sp, sp, 8 799; CHECK-NEXT: rts16 800entry: 801 %icmp = icmp ule i64 %x, 1 802 ret i1 %icmp 803} 804 805define i1 @ICMP_SHORT_ule(i16 %x, i16 %y) { 806; CHECK-LABEL: ICMP_SHORT_ule: 807; CHECK: # %bb.0: # %entry 808; CHECK-NEXT: zexth16 a1, a1 809; CHECK-NEXT: zexth16 a0, a0 810; CHECK-NEXT: cmphs16 a0, a1 811; CHECK-NEXT: mvc32 a0 812; CHECK-NEXT: rts16 813entry: 814 %icmp = icmp ule i16 %y, %x 815 ret i1 %icmp 816} 817 818define i1 @ICMP_SHORT_I_ule(i16 %x) { 819; CHECK-LABEL: ICMP_SHORT_I_ule: 820; CHECK: # %bb.0: # %entry 821; CHECK-NEXT: zexth16 a0, a0 822; CHECK-NEXT: cmphsi16 a0, 2 823; CHECK-NEXT: mvcv16 a0 824; CHECK-NEXT: rts16 825entry: 826 %icmp = icmp ule i16 %x, 1 827 ret i1 %icmp 828} 829 830define i1 @ICMP_CHAR_ule(i8 %x, i8 %y) { 831; CHECK-LABEL: ICMP_CHAR_ule: 832; CHECK: # %bb.0: # %entry 833; CHECK-NEXT: zextb16 a1, a1 834; CHECK-NEXT: zextb16 a0, a0 835; CHECK-NEXT: cmphs16 a0, a1 836; CHECK-NEXT: mvc32 a0 837; CHECK-NEXT: rts16 838entry: 839 %icmp = icmp ule i8 %y, %x 840 ret i1 %icmp 841} 842 843define i1 @ICMP_CHAR_I_ule(i8 %x) { 844; CHECK-LABEL: ICMP_CHAR_I_ule: 845; CHECK: # %bb.0: # %entry 846; CHECK-NEXT: zextb16 a0, a0 847; CHECK-NEXT: cmphsi16 a0, 2 848; CHECK-NEXT: mvcv16 a0 849; CHECK-NEXT: rts16 850entry: 851 %icmp = icmp ule i8 %x, 1 852 ret i1 %icmp 853} 854 855define i1 @ICMP_BIT_ule(i1 %x, i1 %y) { 856; CHECK-LABEL: ICMP_BIT_ule: 857; CHECK: # %bb.0: # %entry 858; CHECK-NEXT: xori32 a1, a1, 1 859; CHECK-NEXT: or16 a0, a1 860; CHECK-NEXT: rts16 861entry: 862 %icmp = icmp ule i1 %y, %x 863 ret i1 %icmp 864} 865 866define i1 @ICMP_BIT_I_ule(i1 %x) { 867; CHECK-LABEL: ICMP_BIT_I_ule: 868; CHECK: # %bb.0: # %entry 869; CHECK-NEXT: movi16 a0, 1 870; CHECK-NEXT: rts16 871entry: 872 %icmp = icmp ule i1 %x, 1 873 ret i1 %icmp 874} 875 876;sgt 877define i1 @icmpRR_sgt(i32 %x, i32 %y) { 878; CHECK-LABEL: icmpRR_sgt: 879; CHECK: # %bb.0: # %entry 880; CHECK-NEXT: cmplt16 a0, a1 881; CHECK-NEXT: mvc32 a0 882; CHECK-NEXT: rts16 883entry: 884 %icmp = icmp sgt i32 %y, %x 885 ret i1 %icmp 886} 887 888define i1 @icmpRI_sgt(i32 %x) { 889; CHECK-LABEL: icmpRI_sgt: 890; CHECK: # %bb.0: # %entry 891; CHECK-NEXT: movi16 a1, 10 892; CHECK-NEXT: cmplt16 a1, a0 893; CHECK-NEXT: mvc32 a0 894; CHECK-NEXT: rts16 895entry: 896 %icmp = icmp sgt i32 %x, 10 897 ret i1 %icmp 898} 899 900define i1 @icmpRI_X_sgt(i32 %x) { 901; CHECK-LABEL: icmpRI_X_sgt: 902; CHECK: # %bb.0: # %entry 903; CHECK-NEXT: movih32 a1, 62 904; CHECK-NEXT: ori32 a1, a1, 33768 905; CHECK-NEXT: cmplt16 a1, a0 906; CHECK-NEXT: mvc32 a0 907; CHECK-NEXT: rts16 908entry: 909 %icmp = icmp sgt i32 %x, 4097000 910 ret i1 %icmp 911} 912 913define i1 @ICMP_LONG_sgt(i64 %x, i64 %y) { 914; CHECK-LABEL: ICMP_LONG_sgt: 915; CHECK: # %bb.0: # %entry 916; CHECK-NEXT: .cfi_def_cfa_offset 0 917; CHECK-NEXT: subi16 sp, sp, 12 918; CHECK-NEXT: .cfi_def_cfa_offset 12 919; CHECK-NEXT: cmplt16 a1, a3 920; CHECK-NEXT: mvc32 t0 921; CHECK-NEXT: st32.w t0, (sp, 4) 922; CHECK-NEXT: cmpne16 a3, a1 923; CHECK-NEXT: mvc32 a1 924; CHECK-NEXT: st16.w a1, (sp, 8) 925; CHECK-NEXT: cmphs16 a0, a2 926; CHECK-NEXT: mvcv16 a1 927; CHECK-NEXT: ld16.w a0, (sp, 4) 928; CHECK-NEXT: btsti32 a0, 0 929; CHECK-NEXT: mvc32 a0 930; CHECK-NEXT: ld16.w a2, (sp, 8) 931; CHECK-NEXT: btsti32 a2, 0 932; CHECK-NEXT: movf32 a0, a1 933; CHECK-NEXT: addi16 sp, sp, 12 934; CHECK-NEXT: rts16 935entry: 936 %icmp = icmp sgt i64 %y, %x 937 ret i1 %icmp 938} 939 940define i1 @ICMP_LONG_I_sgt(i64 %x) { 941; CHECK-LABEL: ICMP_LONG_I_sgt: 942; CHECK: # %bb.0: # %entry 943; CHECK-NEXT: .cfi_def_cfa_offset 0 944; CHECK-NEXT: subi16 sp, sp, 12 945; CHECK-NEXT: .cfi_def_cfa_offset 12 946; CHECK-NEXT: movi16 a2, 0 947; CHECK-NEXT: cmplt16 a2, a1 948; CHECK-NEXT: mvc32 a2 949; CHECK-NEXT: st16.w a2, (sp, 8) 950; CHECK-NEXT: movi16 a2, 1 951; CHECK-NEXT: cmphs16 a2, a0 952; CHECK-NEXT: mvcv16 a2 953; CHECK-NEXT: cmpnei16 a1, 0 954; CHECK-NEXT: mvc32 a0 955; CHECK-NEXT: st16.w a0, (sp, 4) 956; CHECK-NEXT: ld16.w a0, (sp, 8) 957; CHECK-NEXT: btsti32 a0, 0 958; CHECK-NEXT: mvc32 a0 959; CHECK-NEXT: ld16.w a1, (sp, 4) 960; CHECK-NEXT: btsti32 a1, 0 961; CHECK-NEXT: movf32 a0, a2 962; CHECK-NEXT: addi16 sp, sp, 12 963; CHECK-NEXT: rts16 964entry: 965 %icmp = icmp sgt i64 %x, 1 966 ret i1 %icmp 967} 968 969define i1 @ICMP_SHORT_sgt(i16 %x, i16 %y) { 970; CHECK-LABEL: ICMP_SHORT_sgt: 971; CHECK: # %bb.0: # %entry 972; CHECK-NEXT: sexth16 a1, a1 973; CHECK-NEXT: sexth16 a0, a0 974; CHECK-NEXT: cmplt16 a0, a1 975; CHECK-NEXT: mvc32 a0 976; CHECK-NEXT: rts16 977entry: 978 %icmp = icmp sgt i16 %y, %x 979 ret i1 %icmp 980} 981 982define i1 @ICMP_SHORT_I_sgt(i16 %x) { 983; CHECK-LABEL: ICMP_SHORT_I_sgt: 984; CHECK: # %bb.0: # %entry 985; CHECK-NEXT: sexth16 a0, a0 986; CHECK-NEXT: movi16 a1, 1 987; CHECK-NEXT: cmplt16 a1, a0 988; CHECK-NEXT: mvc32 a0 989; CHECK-NEXT: rts16 990entry: 991 %icmp = icmp sgt i16 %x, 1 992 ret i1 %icmp 993} 994 995define i1 @ICMP_CHAR_sgt(i8 %x, i8 %y) { 996; CHECK-LABEL: ICMP_CHAR_sgt: 997; CHECK: # %bb.0: # %entry 998; CHECK-NEXT: sextb16 a1, a1 999; CHECK-NEXT: sextb16 a0, a0 1000; CHECK-NEXT: cmplt16 a0, a1 1001; CHECK-NEXT: mvc32 a0 1002; CHECK-NEXT: rts16 1003entry: 1004 %icmp = icmp sgt i8 %y, %x 1005 ret i1 %icmp 1006} 1007 1008define i1 @ICMP_CHAR_I_sgt(i8 %x) { 1009; CHECK-LABEL: ICMP_CHAR_I_sgt: 1010; CHECK: # %bb.0: # %entry 1011; CHECK-NEXT: sextb16 a0, a0 1012; CHECK-NEXT: movi16 a1, 1 1013; CHECK-NEXT: cmplt16 a1, a0 1014; CHECK-NEXT: mvc32 a0 1015; CHECK-NEXT: rts16 1016entry: 1017 %icmp = icmp sgt i8 %x, 1 1018 ret i1 %icmp 1019} 1020 1021define i1 @ICMP_BIT_sgt(i1 %x, i1 %y) { 1022; CHECK-LABEL: ICMP_BIT_sgt: 1023; CHECK: # %bb.0: # %entry 1024; CHECK-NEXT: xori32 a1, a1, 1 1025; CHECK-NEXT: and16 a0, a1 1026; CHECK-NEXT: rts16 1027entry: 1028 %icmp = icmp sgt i1 %y, %x 1029 ret i1 %icmp 1030} 1031 1032define i1 @ICMP_BIT_I_sgt(i1 %x) { 1033; CHECK-LABEL: ICMP_BIT_I_sgt: 1034; CHECK: # %bb.0: # %entry 1035; CHECK-NEXT: xori32 a0, a0, 1 1036; CHECK-NEXT: rts16 1037entry: 1038 %icmp = icmp sgt i1 %x, 1 1039 ret i1 %icmp 1040} 1041 1042;sge 1043define i1 @icmpRR_sge(i32 %x, i32 %y) { 1044; CHECK-LABEL: icmpRR_sge: 1045; CHECK: # %bb.0: # %entry 1046; CHECK-NEXT: cmplt16 a1, a0 1047; CHECK-NEXT: mvcv16 a0 1048; CHECK-NEXT: rts16 1049entry: 1050 %icmp = icmp sge i32 %y, %x 1051 ret i1 %icmp 1052} 1053 1054define i1 @icmpRI_sge(i32 %x) { 1055; CHECK-LABEL: icmpRI_sge: 1056; CHECK: # %bb.0: # %entry 1057; CHECK-NEXT: movi16 a1, 9 1058; CHECK-NEXT: cmplt16 a1, a0 1059; CHECK-NEXT: mvc32 a0 1060; CHECK-NEXT: rts16 1061entry: 1062 %icmp = icmp sge i32 %x, 10 1063 ret i1 %icmp 1064} 1065 1066define i1 @icmpRI_X_sge(i32 %x) { 1067; CHECK-LABEL: icmpRI_X_sge: 1068; CHECK: # %bb.0: # %entry 1069; CHECK-NEXT: movih32 a1, 62 1070; CHECK-NEXT: ori32 a1, a1, 33767 1071; CHECK-NEXT: cmplt16 a1, a0 1072; CHECK-NEXT: mvc32 a0 1073; CHECK-NEXT: rts16 1074entry: 1075 %icmp = icmp sge i32 %x, 4097000 1076 ret i1 %icmp 1077} 1078 1079define i1 @ICMP_LONG_sge(i64 %x, i64 %y) { 1080; CHECK-LABEL: ICMP_LONG_sge: 1081; CHECK: # %bb.0: # %entry 1082; CHECK-NEXT: .cfi_def_cfa_offset 0 1083; CHECK-NEXT: subi16 sp, sp, 12 1084; CHECK-NEXT: .cfi_def_cfa_offset 12 1085; CHECK-NEXT: cmphs16 a2, a0 1086; CHECK-NEXT: mvc32 a0 1087; CHECK-NEXT: st16.w a0, (sp, 4) 1088; CHECK-NEXT: cmpne16 a3, a1 1089; CHECK-NEXT: mvc32 a0 1090; CHECK-NEXT: st16.w a0, (sp, 8) 1091; CHECK-NEXT: cmplt16 a3, a1 1092; CHECK-NEXT: mvcv16 a0 1093; CHECK-NEXT: ld16.w a1, (sp, 4) 1094; CHECK-NEXT: btsti32 a1, 0 1095; CHECK-NEXT: mvc32 a1 1096; CHECK-NEXT: ld16.w a2, (sp, 8) 1097; CHECK-NEXT: btsti32 a2, 0 1098; CHECK-NEXT: movf32 a0, a1 1099; CHECK-NEXT: addi16 sp, sp, 12 1100; CHECK-NEXT: rts16 1101entry: 1102 %icmp = icmp sge i64 %y, %x 1103 ret i1 %icmp 1104} 1105 1106define i1 @ICMP_LONG_I_sge(i64 %x) { 1107; CHECK-LABEL: ICMP_LONG_I_sge: 1108; CHECK: # %bb.0: # %entry 1109; CHECK-NEXT: .cfi_def_cfa_offset 0 1110; CHECK-NEXT: subi16 sp, sp, 16 1111; CHECK-NEXT: .cfi_def_cfa_offset 16 1112; CHECK-NEXT: movi16 a2, 0 1113; CHECK-NEXT: cmplt16 a2, a1 1114; CHECK-NEXT: mvc32 a2 1115; CHECK-NEXT: st16.w a2, (sp, 12) 1116; CHECK-NEXT: cmpnei16 a0, 0 1117; CHECK-NEXT: mvc32 a0 1118; CHECK-NEXT: st16.w a0, (sp, 4) 1119; CHECK-NEXT: cmpnei16 a1, 0 1120; CHECK-NEXT: mvc32 a0 1121; CHECK-NEXT: st16.w a0, (sp, 8) 1122; CHECK-NEXT: ld16.w a0, (sp, 4) 1123; CHECK-NEXT: btsti32 a0, 0 1124; CHECK-NEXT: mvc32 a1 1125; CHECK-NEXT: ld16.w a0, (sp, 12) 1126; CHECK-NEXT: btsti32 a0, 0 1127; CHECK-NEXT: mvc32 a0 1128; CHECK-NEXT: ld16.w a2, (sp, 8) 1129; CHECK-NEXT: btsti32 a2, 0 1130; CHECK-NEXT: movf32 a0, a1 1131; CHECK-NEXT: addi16 sp, sp, 16 1132; CHECK-NEXT: rts16 1133entry: 1134 %icmp = icmp sge i64 %x, 1 1135 ret i1 %icmp 1136} 1137 1138define i1 @ICMP_SHORT_sge(i16 %x, i16 %y) { 1139; CHECK-LABEL: ICMP_SHORT_sge: 1140; CHECK: # %bb.0: # %entry 1141; CHECK-NEXT: sexth16 a0, a0 1142; CHECK-NEXT: sexth16 a1, a1 1143; CHECK-NEXT: cmplt16 a1, a0 1144; CHECK-NEXT: mvcv16 a0 1145; CHECK-NEXT: rts16 1146entry: 1147 %icmp = icmp sge i16 %y, %x 1148 ret i1 %icmp 1149} 1150 1151define i1 @ICMP_SHORT_I_sge(i16 %x) { 1152; CHECK-LABEL: ICMP_SHORT_I_sge: 1153; CHECK: # %bb.0: # %entry 1154; CHECK-NEXT: sexth16 a0, a0 1155; CHECK-NEXT: movi16 a1, 0 1156; CHECK-NEXT: cmplt16 a1, a0 1157; CHECK-NEXT: mvc32 a0 1158; CHECK-NEXT: rts16 1159entry: 1160 %icmp = icmp sge i16 %x, 1 1161 ret i1 %icmp 1162} 1163 1164define i1 @ICMP_CHAR_sge(i8 %x, i8 %y) { 1165; CHECK-LABEL: ICMP_CHAR_sge: 1166; CHECK: # %bb.0: # %entry 1167; CHECK-NEXT: sextb16 a0, a0 1168; CHECK-NEXT: sextb16 a1, a1 1169; CHECK-NEXT: cmplt16 a1, a0 1170; CHECK-NEXT: mvcv16 a0 1171; CHECK-NEXT: rts16 1172entry: 1173 %icmp = icmp sge i8 %y, %x 1174 ret i1 %icmp 1175} 1176 1177define i1 @ICMP_CHAR_I_sge(i8 %x) { 1178; CHECK-LABEL: ICMP_CHAR_I_sge: 1179; CHECK: # %bb.0: # %entry 1180; CHECK-NEXT: sextb16 a0, a0 1181; CHECK-NEXT: movi16 a1, 0 1182; CHECK-NEXT: cmplt16 a1, a0 1183; CHECK-NEXT: mvc32 a0 1184; CHECK-NEXT: rts16 1185entry: 1186 %icmp = icmp sge i8 %x, 1 1187 ret i1 %icmp 1188} 1189 1190define i1 @ICMP_BIT_sge(i1 %x, i1 %y) { 1191; CHECK-LABEL: ICMP_BIT_sge: 1192; CHECK: # %bb.0: # %entry 1193; CHECK-NEXT: xori32 a1, a1, 1 1194; CHECK-NEXT: or16 a0, a1 1195; CHECK-NEXT: rts16 1196entry: 1197 %icmp = icmp sge i1 %y, %x 1198 ret i1 %icmp 1199} 1200 1201define i1 @ICMP_BIT_I_sge(i1 %x) { 1202; CHECK-LABEL: ICMP_BIT_I_sge: 1203; CHECK: # %bb.0: # %entry 1204; CHECK-NEXT: movi16 a0, 1 1205; CHECK-NEXT: rts16 1206entry: 1207 %icmp = icmp sge i1 %x, 1 1208 ret i1 %icmp 1209} 1210 1211;slt 1212define i1 @icmpRR_slt(i32 %x, i32 %y) { 1213; CHECK-LABEL: icmpRR_slt: 1214; CHECK: # %bb.0: # %entry 1215; CHECK-NEXT: cmplt16 a1, a0 1216; CHECK-NEXT: mvc32 a0 1217; CHECK-NEXT: rts16 1218entry: 1219 %icmp = icmp slt i32 %y, %x 1220 ret i1 %icmp 1221} 1222 1223define i1 @icmpRI_slt(i32 %x) { 1224; CHECK-LABEL: icmpRI_slt: 1225; CHECK: # %bb.0: # %entry 1226; CHECK-NEXT: cmplti16 a0, 10 1227; CHECK-NEXT: mvc32 a0 1228; CHECK-NEXT: rts16 1229entry: 1230 %icmp = icmp slt i32 %x, 10 1231 ret i1 %icmp 1232} 1233 1234define i1 @icmpRI_X_slt(i32 %x) { 1235; CHECK-LABEL: icmpRI_X_slt: 1236; CHECK: # %bb.0: # %entry 1237; CHECK-NEXT: movih32 a1, 62 1238; CHECK-NEXT: ori32 a1, a1, 33768 1239; CHECK-NEXT: cmplt16 a0, a1 1240; CHECK-NEXT: mvc32 a0 1241; CHECK-NEXT: rts16 1242entry: 1243 %icmp = icmp slt i32 %x, 4097000 1244 ret i1 %icmp 1245} 1246 1247define i1 @ICMP_LONG_slt(i64 %x, i64 %y) { 1248; CHECK-LABEL: ICMP_LONG_slt: 1249; CHECK: # %bb.0: # %entry 1250; CHECK-NEXT: .cfi_def_cfa_offset 0 1251; CHECK-NEXT: subi16 sp, sp, 12 1252; CHECK-NEXT: .cfi_def_cfa_offset 12 1253; CHECK-NEXT: cmplt16 a3, a1 1254; CHECK-NEXT: mvc32 t0 1255; CHECK-NEXT: st32.w t0, (sp, 4) 1256; CHECK-NEXT: cmpne16 a3, a1 1257; CHECK-NEXT: mvc32 a1 1258; CHECK-NEXT: st16.w a1, (sp, 8) 1259; CHECK-NEXT: cmphs16 a2, a0 1260; CHECK-NEXT: mvcv16 a1 1261; CHECK-NEXT: ld16.w a0, (sp, 4) 1262; CHECK-NEXT: btsti32 a0, 0 1263; CHECK-NEXT: mvc32 a0 1264; CHECK-NEXT: ld16.w a2, (sp, 8) 1265; CHECK-NEXT: btsti32 a2, 0 1266; CHECK-NEXT: movf32 a0, a1 1267; CHECK-NEXT: addi16 sp, sp, 12 1268; CHECK-NEXT: rts16 1269entry: 1270 %icmp = icmp slt i64 %y, %x 1271 ret i1 %icmp 1272} 1273 1274define i1 @ICMP_LONG_I_slt(i64 %x) { 1275; CHECK-LABEL: ICMP_LONG_I_slt: 1276; CHECK: # %bb.0: # %entry 1277; CHECK-NEXT: .cfi_def_cfa_offset 0 1278; CHECK-NEXT: subi16 sp, sp, 12 1279; CHECK-NEXT: .cfi_def_cfa_offset 12 1280; CHECK-NEXT: movi16 a2, 0 1281; CHECK-NEXT: cmplt16 a1, a2 1282; CHECK-NEXT: mvc32 a2 1283; CHECK-NEXT: st16.w a2, (sp, 4) 1284; CHECK-NEXT: cmpnei16 a1, 0 1285; CHECK-NEXT: mvc32 a1 1286; CHECK-NEXT: st16.w a1, (sp, 8) 1287; CHECK-NEXT: cmpnei16 a0, 0 1288; CHECK-NEXT: mvcv16 a1 1289; CHECK-NEXT: ld16.w a0, (sp, 4) 1290; CHECK-NEXT: btsti32 a0, 0 1291; CHECK-NEXT: mvc32 a0 1292; CHECK-NEXT: ld16.w a2, (sp, 8) 1293; CHECK-NEXT: btsti32 a2, 0 1294; CHECK-NEXT: movf32 a0, a1 1295; CHECK-NEXT: addi16 sp, sp, 12 1296; CHECK-NEXT: rts16 1297entry: 1298 %icmp = icmp slt i64 %x, 1 1299 ret i1 %icmp 1300} 1301 1302define i1 @ICMP_SHORT_slt(i16 %x, i16 %y) { 1303; CHECK-LABEL: ICMP_SHORT_slt: 1304; CHECK: # %bb.0: # %entry 1305; CHECK-NEXT: sexth16 a0, a0 1306; CHECK-NEXT: sexth16 a1, a1 1307; CHECK-NEXT: cmplt16 a1, a0 1308; CHECK-NEXT: mvc32 a0 1309; CHECK-NEXT: rts16 1310entry: 1311 %icmp = icmp slt i16 %y, %x 1312 ret i1 %icmp 1313} 1314 1315define i1 @ICMP_SHORT_I_slt(i16 %x) { 1316; CHECK-LABEL: ICMP_SHORT_I_slt: 1317; CHECK: # %bb.0: # %entry 1318; CHECK-NEXT: sexth16 a0, a0 1319; CHECK-NEXT: cmplti16 a0, 1 1320; CHECK-NEXT: mvc32 a0 1321; CHECK-NEXT: rts16 1322entry: 1323 %icmp = icmp slt i16 %x, 1 1324 ret i1 %icmp 1325} 1326 1327define i1 @ICMP_CHAR_slt(i8 %x, i8 %y) { 1328; CHECK-LABEL: ICMP_CHAR_slt: 1329; CHECK: # %bb.0: # %entry 1330; CHECK-NEXT: sextb16 a0, a0 1331; CHECK-NEXT: sextb16 a1, a1 1332; CHECK-NEXT: cmplt16 a1, a0 1333; CHECK-NEXT: mvc32 a0 1334; CHECK-NEXT: rts16 1335entry: 1336 %icmp = icmp slt i8 %y, %x 1337 ret i1 %icmp 1338} 1339 1340define i1 @ICMP_CHAR_I_slt(i8 %x) { 1341; CHECK-LABEL: ICMP_CHAR_I_slt: 1342; CHECK: # %bb.0: # %entry 1343; CHECK-NEXT: sextb16 a0, a0 1344; CHECK-NEXT: cmplti16 a0, 1 1345; CHECK-NEXT: mvc32 a0 1346; CHECK-NEXT: rts16 1347entry: 1348 %icmp = icmp slt i8 %x, 1 1349 ret i1 %icmp 1350} 1351 1352define i1 @ICMP_BIT_slt(i1 %x, i1 %y) { 1353; CHECK-LABEL: ICMP_BIT_slt: 1354; CHECK: # %bb.0: # %entry 1355; CHECK-NEXT: xori32 a0, a0, 1 1356; CHECK-NEXT: and16 a0, a1 1357; CHECK-NEXT: rts16 1358entry: 1359 %icmp = icmp slt i1 %y, %x 1360 ret i1 %icmp 1361} 1362 1363define i1 @ICMP_BIT_I_slt(i1 %x) { 1364; CHECK-LABEL: ICMP_BIT_I_slt: 1365; CHECK: # %bb.0: # %entry 1366; CHECK-NEXT: movi16 a0, 0 1367; CHECK-NEXT: rts16 1368entry: 1369 %icmp = icmp slt i1 %x, 1 1370 ret i1 %icmp 1371} 1372 1373 1374;sle 1375define i1 @icmpRR_sle(i32 %x, i32 %y) { 1376; CHECK-LABEL: icmpRR_sle: 1377; CHECK: # %bb.0: # %entry 1378; CHECK-NEXT: cmplt16 a0, a1 1379; CHECK-NEXT: mvcv16 a0 1380; CHECK-NEXT: rts16 1381entry: 1382 %icmp = icmp sle i32 %y, %x 1383 ret i1 %icmp 1384} 1385 1386define i1 @icmpRI_sle(i32 %x) { 1387; CHECK-LABEL: icmpRI_sle: 1388; CHECK: # %bb.0: # %entry 1389; CHECK-NEXT: cmplti16 a0, 11 1390; CHECK-NEXT: mvc32 a0 1391; CHECK-NEXT: rts16 1392entry: 1393 %icmp = icmp sle i32 %x, 10 1394 ret i1 %icmp 1395} 1396 1397define i1 @icmpRI_X_sle(i32 %x) { 1398; CHECK-LABEL: icmpRI_X_sle: 1399; CHECK: # %bb.0: # %entry 1400; CHECK-NEXT: movih32 a1, 62 1401; CHECK-NEXT: ori32 a1, a1, 33769 1402; CHECK-NEXT: cmplt16 a0, a1 1403; CHECK-NEXT: mvc32 a0 1404; CHECK-NEXT: rts16 1405entry: 1406 %icmp = icmp sle i32 %x, 4097000 1407 ret i1 %icmp 1408} 1409 1410define i1 @ICMP_LONG_sle(i64 %x, i64 %y) { 1411; CHECK-LABEL: ICMP_LONG_sle: 1412; CHECK: # %bb.0: # %entry 1413; CHECK-NEXT: .cfi_def_cfa_offset 0 1414; CHECK-NEXT: subi16 sp, sp, 12 1415; CHECK-NEXT: .cfi_def_cfa_offset 12 1416; CHECK-NEXT: cmphs16 a0, a2 1417; CHECK-NEXT: mvc32 a0 1418; CHECK-NEXT: st16.w a0, (sp, 4) 1419; CHECK-NEXT: cmpne16 a3, a1 1420; CHECK-NEXT: mvc32 a0 1421; CHECK-NEXT: st16.w a0, (sp, 8) 1422; CHECK-NEXT: cmplt16 a1, a3 1423; CHECK-NEXT: mvcv16 a0 1424; CHECK-NEXT: ld16.w a1, (sp, 4) 1425; CHECK-NEXT: btsti32 a1, 0 1426; CHECK-NEXT: mvc32 a1 1427; CHECK-NEXT: ld16.w a2, (sp, 8) 1428; CHECK-NEXT: btsti32 a2, 0 1429; CHECK-NEXT: movf32 a0, a1 1430; CHECK-NEXT: addi16 sp, sp, 12 1431; CHECK-NEXT: rts16 1432entry: 1433 %icmp = icmp sle i64 %y, %x 1434 ret i1 %icmp 1435} 1436 1437define i1 @ICMP_LONG_I_sle(i64 %x) { 1438; CHECK-LABEL: ICMP_LONG_I_sle: 1439; CHECK: # %bb.0: # %entry 1440; CHECK-NEXT: .cfi_def_cfa_offset 0 1441; CHECK-NEXT: subi16 sp, sp, 12 1442; CHECK-NEXT: .cfi_def_cfa_offset 12 1443; CHECK-NEXT: movi16 a2, 0 1444; CHECK-NEXT: cmplt16 a1, a2 1445; CHECK-NEXT: mvc32 a2 1446; CHECK-NEXT: st16.w a2, (sp, 4) 1447; CHECK-NEXT: cmpnei16 a1, 0 1448; CHECK-NEXT: mvc32 a1 1449; CHECK-NEXT: st16.w a1, (sp, 8) 1450; CHECK-NEXT: cmphsi16 a0, 2 1451; CHECK-NEXT: mvcv16 a1 1452; CHECK-NEXT: ld16.w a0, (sp, 4) 1453; CHECK-NEXT: btsti32 a0, 0 1454; CHECK-NEXT: mvc32 a0 1455; CHECK-NEXT: ld16.w a2, (sp, 8) 1456; CHECK-NEXT: btsti32 a2, 0 1457; CHECK-NEXT: movf32 a0, a1 1458; CHECK-NEXT: addi16 sp, sp, 12 1459; CHECK-NEXT: rts16 1460entry: 1461 %icmp = icmp sle i64 %x, 1 1462 ret i1 %icmp 1463} 1464 1465define i1 @ICMP_SHORT_sle(i16 %x, i16 %y) { 1466; CHECK-LABEL: ICMP_SHORT_sle: 1467; CHECK: # %bb.0: # %entry 1468; CHECK-NEXT: sexth16 a1, a1 1469; CHECK-NEXT: sexth16 a0, a0 1470; CHECK-NEXT: cmplt16 a0, a1 1471; CHECK-NEXT: mvcv16 a0 1472; CHECK-NEXT: rts16 1473entry: 1474 %icmp = icmp sle i16 %y, %x 1475 ret i1 %icmp 1476} 1477 1478define i1 @ICMP_SHORT_I_sle(i16 %x) { 1479; CHECK-LABEL: ICMP_SHORT_I_sle: 1480; CHECK: # %bb.0: # %entry 1481; CHECK-NEXT: sexth16 a0, a0 1482; CHECK-NEXT: cmplti16 a0, 2 1483; CHECK-NEXT: mvc32 a0 1484; CHECK-NEXT: rts16 1485entry: 1486 %icmp = icmp sle i16 %x, 1 1487 ret i1 %icmp 1488} 1489 1490define i1 @ICMP_CHAR_sle(i8 %x, i8 %y) { 1491; CHECK-LABEL: ICMP_CHAR_sle: 1492; CHECK: # %bb.0: # %entry 1493; CHECK-NEXT: sextb16 a1, a1 1494; CHECK-NEXT: sextb16 a0, a0 1495; CHECK-NEXT: cmplt16 a0, a1 1496; CHECK-NEXT: mvcv16 a0 1497; CHECK-NEXT: rts16 1498entry: 1499 %icmp = icmp sle i8 %y, %x 1500 ret i1 %icmp 1501} 1502 1503define i1 @ICMP_CHAR_I_sle(i8 %x) { 1504; CHECK-LABEL: ICMP_CHAR_I_sle: 1505; CHECK: # %bb.0: # %entry 1506; CHECK-NEXT: sextb16 a0, a0 1507; CHECK-NEXT: cmplti16 a0, 2 1508; CHECK-NEXT: mvc32 a0 1509; CHECK-NEXT: rts16 1510entry: 1511 %icmp = icmp sle i8 %x, 1 1512 ret i1 %icmp 1513} 1514 1515define i1 @ICMP_BIT_sle(i1 %x, i1 %y) { 1516; CHECK-LABEL: ICMP_BIT_sle: 1517; CHECK: # %bb.0: # %entry 1518; CHECK-NEXT: xori32 a0, a0, 1 1519; CHECK-NEXT: or16 a0, a1 1520; CHECK-NEXT: rts16 1521entry: 1522 %icmp = icmp sle i1 %y, %x 1523 ret i1 %icmp 1524} 1525 1526define i1 @ICMP_BIT_I_sle(i1 %x) { 1527; CHECK-LABEL: ICMP_BIT_I_sle: 1528; CHECK: # %bb.0: # %entry 1529; CHECK-NEXT: rts16 1530entry: 1531 %icmp = icmp sle i1 %x, 1 1532 ret i1 %icmp 1533} 1534