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; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -mattr=+btst16 | FileCheck %s --check-prefix=GENERIC 4 5;eq 6define i1 @icmpRR_eq(i32 %x, i32 %y) { 7; CHECK-LABEL: icmpRR_eq: 8; CHECK: # %bb.0: # %entry 9; CHECK-NEXT: cmpne16 a1, a0 10; CHECK-NEXT: mvcv16 a0 11; CHECK-NEXT: rts16 12; 13; GENERIC-LABEL: icmpRR_eq: 14; GENERIC: # %bb.0: # %entry 15; GENERIC-NEXT: .cfi_def_cfa_offset 0 16; GENERIC-NEXT: subi16 sp, sp, 4 17; GENERIC-NEXT: .cfi_def_cfa_offset 4 18; GENERIC-NEXT: cmpne16 a1, a0 19; GENERIC-NEXT: mvcv16 a0 20; GENERIC-NEXT: addi16 sp, sp, 4 21; GENERIC-NEXT: rts16 22entry: 23 %icmp = icmp eq i32 %y, %x 24 ret i1 %icmp 25} 26 27define i1 @icmpRI_eq(i32 %x) { 28; CHECK-LABEL: icmpRI_eq: 29; CHECK: # %bb.0: # %entry 30; CHECK-NEXT: cmpnei16 a0, 10 31; CHECK-NEXT: mvcv16 a0 32; CHECK-NEXT: rts16 33; 34; GENERIC-LABEL: icmpRI_eq: 35; GENERIC: # %bb.0: # %entry 36; GENERIC-NEXT: .cfi_def_cfa_offset 0 37; GENERIC-NEXT: subi16 sp, sp, 4 38; GENERIC-NEXT: .cfi_def_cfa_offset 4 39; GENERIC-NEXT: cmpnei16 a0, 10 40; GENERIC-NEXT: mvcv16 a0 41; GENERIC-NEXT: addi16 sp, sp, 4 42; GENERIC-NEXT: rts16 43entry: 44 %icmp = icmp eq i32 %x, 10 45 ret i1 %icmp 46} 47 48define i1 @icmpRI_X_eq(i32 %x) { 49; CHECK-LABEL: icmpRI_X_eq: 50; CHECK: # %bb.0: # %entry 51; CHECK-NEXT: movih32 a1, 62 52; CHECK-NEXT: ori32 a1, a1, 33768 53; CHECK-NEXT: cmpne16 a0, a1 54; CHECK-NEXT: mvcv16 a0 55; CHECK-NEXT: rts16 56; 57; GENERIC-LABEL: icmpRI_X_eq: 58; GENERIC: # %bb.0: # %entry 59; GENERIC-NEXT: .cfi_def_cfa_offset 0 60; GENERIC-NEXT: subi16 sp, sp, 4 61; GENERIC-NEXT: .cfi_def_cfa_offset 4 62; GENERIC-NEXT: movi16 a1, 0 63; GENERIC-NEXT: lsli16 a1, a1, 24 64; GENERIC-NEXT: movi16 a2, 62 65; GENERIC-NEXT: lsli16 a2, a2, 16 66; GENERIC-NEXT: or16 a2, a1 67; GENERIC-NEXT: movi16 a1, 131 68; GENERIC-NEXT: lsli16 a1, a1, 8 69; GENERIC-NEXT: or16 a1, a2 70; GENERIC-NEXT: movi16 a2, 232 71; GENERIC-NEXT: or16 a2, a1 72; GENERIC-NEXT: cmpne16 a0, a2 73; GENERIC-NEXT: mvcv16 a0 74; GENERIC-NEXT: addi16 sp, sp, 4 75; GENERIC-NEXT: rts16 76entry: 77 %icmp = icmp eq i32 %x, 4097000 78 ret i1 %icmp 79} 80 81define i1 @ICMP_LONG_eq(i64 %x, i64 %y) { 82; CHECK-LABEL: ICMP_LONG_eq: 83; CHECK: # %bb.0: # %entry 84; CHECK-NEXT: xor16 a1, a3 85; CHECK-NEXT: xor16 a0, a2 86; CHECK-NEXT: or16 a0, a1 87; CHECK-NEXT: cmpnei16 a0, 0 88; CHECK-NEXT: mvcv16 a0 89; CHECK-NEXT: rts16 90; 91; GENERIC-LABEL: ICMP_LONG_eq: 92; GENERIC: # %bb.0: # %entry 93; GENERIC-NEXT: .cfi_def_cfa_offset 0 94; GENERIC-NEXT: subi16 sp, sp, 4 95; GENERIC-NEXT: .cfi_def_cfa_offset 4 96; GENERIC-NEXT: xor16 a1, a3 97; GENERIC-NEXT: xor16 a0, a2 98; GENERIC-NEXT: or16 a0, a1 99; GENERIC-NEXT: cmpnei16 a0, 0 100; GENERIC-NEXT: mvcv16 a0 101; GENERIC-NEXT: addi16 sp, sp, 4 102; GENERIC-NEXT: rts16 103entry: 104 %icmp = icmp eq i64 %y, %x 105 ret i1 %icmp 106} 107 108define i1 @ICMP_LONG_I_eq(i64 %x) { 109; CHECK-LABEL: ICMP_LONG_I_eq: 110; CHECK: # %bb.0: # %entry 111; CHECK-NEXT: xori32 a0, a0, 1 112; CHECK-NEXT: or16 a0, a1 113; CHECK-NEXT: cmpnei16 a0, 0 114; CHECK-NEXT: mvcv16 a0 115; CHECK-NEXT: rts16 116; 117; GENERIC-LABEL: ICMP_LONG_I_eq: 118; GENERIC: # %bb.0: # %entry 119; GENERIC-NEXT: .cfi_def_cfa_offset 0 120; GENERIC-NEXT: subi16 sp, sp, 4 121; GENERIC-NEXT: .cfi_def_cfa_offset 4 122; GENERIC-NEXT: movi16 a2, 1 123; GENERIC-NEXT: xor16 a2, a0 124; GENERIC-NEXT: or16 a2, a1 125; GENERIC-NEXT: cmpnei16 a2, 0 126; GENERIC-NEXT: mvcv16 a0 127; GENERIC-NEXT: addi16 sp, sp, 4 128; GENERIC-NEXT: rts16 129entry: 130 %icmp = icmp eq i64 %x, 1 131 ret i1 %icmp 132} 133 134define i1 @ICMP_SHORT_eq(i16 %x, i16 %y) { 135; CHECK-LABEL: ICMP_SHORT_eq: 136; CHECK: # %bb.0: # %entry 137; CHECK-NEXT: zexth16 a0, a0 138; CHECK-NEXT: zexth16 a1, a1 139; CHECK-NEXT: cmpne16 a1, a0 140; CHECK-NEXT: mvcv16 a0 141; CHECK-NEXT: rts16 142; 143; GENERIC-LABEL: ICMP_SHORT_eq: 144; GENERIC: # %bb.0: # %entry 145; GENERIC-NEXT: subi16 sp, sp, 4 146; GENERIC-NEXT: .cfi_def_cfa_offset 4 147; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 148; GENERIC-NEXT: .cfi_offset l0, -4 149; GENERIC-NEXT: subi16 sp, sp, 4 150; GENERIC-NEXT: .cfi_def_cfa_offset 8 151; GENERIC-NEXT: movi16 a2, 0 152; GENERIC-NEXT: lsli16 a3, a2, 24 153; GENERIC-NEXT: lsli16 a2, a2, 16 154; GENERIC-NEXT: or16 a2, a3 155; GENERIC-NEXT: movi16 a3, 255 156; GENERIC-NEXT: lsli16 l0, a3, 8 157; GENERIC-NEXT: or16 l0, a2 158; GENERIC-NEXT: or16 l0, a3 159; GENERIC-NEXT: and16 a0, l0 160; GENERIC-NEXT: and16 l0, a1 161; GENERIC-NEXT: cmpne16 l0, a0 162; GENERIC-NEXT: mvcv16 a0 163; GENERIC-NEXT: addi16 sp, sp, 4 164; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 165; GENERIC-NEXT: addi16 sp, sp, 4 166; GENERIC-NEXT: rts16 167entry: 168 %icmp = icmp eq i16 %y, %x 169 ret i1 %icmp 170} 171 172define i1 @ICMP_SHORT_I_eq(i16 %x) { 173; CHECK-LABEL: ICMP_SHORT_I_eq: 174; CHECK: # %bb.0: # %entry 175; CHECK-NEXT: zexth16 a0, a0 176; CHECK-NEXT: cmpnei16 a0, 1 177; CHECK-NEXT: mvcv16 a0 178; CHECK-NEXT: rts16 179; 180; GENERIC-LABEL: ICMP_SHORT_I_eq: 181; GENERIC: # %bb.0: # %entry 182; GENERIC-NEXT: .cfi_def_cfa_offset 0 183; GENERIC-NEXT: subi16 sp, sp, 4 184; GENERIC-NEXT: .cfi_def_cfa_offset 4 185; GENERIC-NEXT: movi16 a1, 0 186; GENERIC-NEXT: lsli16 a2, a1, 24 187; GENERIC-NEXT: lsli16 a1, a1, 16 188; GENERIC-NEXT: or16 a1, a2 189; GENERIC-NEXT: movi16 a2, 255 190; GENERIC-NEXT: lsli16 a3, a2, 8 191; GENERIC-NEXT: or16 a3, a1 192; GENERIC-NEXT: or16 a3, a2 193; GENERIC-NEXT: and16 a3, a0 194; GENERIC-NEXT: cmpnei16 a3, 1 195; GENERIC-NEXT: mvcv16 a0 196; GENERIC-NEXT: addi16 sp, sp, 4 197; GENERIC-NEXT: rts16 198entry: 199 %icmp = icmp eq i16 %x, 1 200 ret i1 %icmp 201} 202 203define i1 @ICMP_CHAR_eq(i8 %x, i8 %y) { 204; CHECK-LABEL: ICMP_CHAR_eq: 205; CHECK: # %bb.0: # %entry 206; CHECK-NEXT: zextb16 a0, a0 207; CHECK-NEXT: zextb16 a1, a1 208; CHECK-NEXT: cmpne16 a1, a0 209; CHECK-NEXT: mvcv16 a0 210; CHECK-NEXT: rts16 211; 212; GENERIC-LABEL: ICMP_CHAR_eq: 213; GENERIC: # %bb.0: # %entry 214; GENERIC-NEXT: .cfi_def_cfa_offset 0 215; GENERIC-NEXT: subi16 sp, sp, 4 216; GENERIC-NEXT: .cfi_def_cfa_offset 4 217; GENERIC-NEXT: movi16 a2, 255 218; GENERIC-NEXT: and16 a0, a2 219; GENERIC-NEXT: and16 a1, a2 220; GENERIC-NEXT: cmpne16 a1, a0 221; GENERIC-NEXT: mvcv16 a0 222; GENERIC-NEXT: addi16 sp, sp, 4 223; GENERIC-NEXT: rts16 224entry: 225 %icmp = icmp eq i8 %y, %x 226 ret i1 %icmp 227} 228 229define i1 @ICMP_CHAR_I_eq(i8 %x) { 230; CHECK-LABEL: ICMP_CHAR_I_eq: 231; CHECK: # %bb.0: # %entry 232; CHECK-NEXT: zextb16 a0, a0 233; CHECK-NEXT: cmpnei16 a0, 1 234; CHECK-NEXT: mvcv16 a0 235; CHECK-NEXT: rts16 236; 237; GENERIC-LABEL: ICMP_CHAR_I_eq: 238; GENERIC: # %bb.0: # %entry 239; GENERIC-NEXT: .cfi_def_cfa_offset 0 240; GENERIC-NEXT: subi16 sp, sp, 4 241; GENERIC-NEXT: .cfi_def_cfa_offset 4 242; GENERIC-NEXT: movi16 a1, 255 243; GENERIC-NEXT: and16 a1, a0 244; GENERIC-NEXT: cmpnei16 a1, 1 245; GENERIC-NEXT: mvcv16 a0 246; GENERIC-NEXT: addi16 sp, sp, 4 247; GENERIC-NEXT: rts16 248entry: 249 %icmp = icmp eq i8 %x, 1 250 ret i1 %icmp 251} 252 253define i1 @ICMP_BIT_eq(i1 %x, i1 %y) { 254; CHECK-LABEL: ICMP_BIT_eq: 255; CHECK: # %bb.0: # %entry 256; CHECK-NEXT: xor16 a0, a1 257; CHECK-NEXT: xori32 a0, a0, 1 258; CHECK-NEXT: rts16 259; 260; GENERIC-LABEL: ICMP_BIT_eq: 261; GENERIC: # %bb.0: # %entry 262; GENERIC-NEXT: .cfi_def_cfa_offset 0 263; GENERIC-NEXT: subi16 sp, sp, 4 264; GENERIC-NEXT: .cfi_def_cfa_offset 4 265; GENERIC-NEXT: xor16 a0, a1 266; GENERIC-NEXT: movi16 a1, 1 267; GENERIC-NEXT: xor16 a0, a1 268; GENERIC-NEXT: addi16 sp, sp, 4 269; GENERIC-NEXT: rts16 270entry: 271 %icmp = icmp eq i1 %y, %x 272 ret i1 %icmp 273} 274 275define i1 @ICMP_BIT_I_eq(i1 %x) { 276; CHECK-LABEL: ICMP_BIT_I_eq: 277; CHECK: # %bb.0: # %entry 278; CHECK-NEXT: rts16 279; 280; GENERIC-LABEL: ICMP_BIT_I_eq: 281; GENERIC: # %bb.0: # %entry 282; GENERIC-NEXT: .cfi_def_cfa_offset 0 283; GENERIC-NEXT: subi16 sp, sp, 4 284; GENERIC-NEXT: .cfi_def_cfa_offset 4 285; GENERIC-NEXT: addi16 sp, sp, 4 286; GENERIC-NEXT: rts16 287entry: 288 %icmp = icmp eq i1 %x, 1 289 ret i1 %icmp 290} 291 292;ne 293define i1 @icmpRR_ne(i32 %x, i32 %y) { 294; CHECK-LABEL: icmpRR_ne: 295; CHECK: # %bb.0: # %entry 296; CHECK-NEXT: cmpne16 a1, a0 297; CHECK-NEXT: mvc32 a0 298; CHECK-NEXT: rts16 299; 300; GENERIC-LABEL: icmpRR_ne: 301; GENERIC: # %bb.0: # %entry 302; GENERIC-NEXT: .cfi_def_cfa_offset 0 303; GENERIC-NEXT: subi16 sp, sp, 4 304; GENERIC-NEXT: .cfi_def_cfa_offset 4 305; GENERIC-NEXT: cmpne16 a1, a0 306; GENERIC-NEXT: mvcv16 a1 307; GENERIC-NEXT: movi16 a0, 1 308; GENERIC-NEXT: subu16 a0, a1 309; GENERIC-NEXT: addi16 sp, sp, 4 310; GENERIC-NEXT: rts16 311entry: 312 %icmp = icmp ne i32 %y, %x 313 ret i1 %icmp 314} 315 316define i1 @icmpRI_ne(i32 %x) { 317; CHECK-LABEL: icmpRI_ne: 318; CHECK: # %bb.0: # %entry 319; CHECK-NEXT: cmpnei16 a0, 10 320; CHECK-NEXT: mvc32 a0 321; CHECK-NEXT: rts16 322; 323; GENERIC-LABEL: icmpRI_ne: 324; GENERIC: # %bb.0: # %entry 325; GENERIC-NEXT: .cfi_def_cfa_offset 0 326; GENERIC-NEXT: subi16 sp, sp, 4 327; GENERIC-NEXT: .cfi_def_cfa_offset 4 328; GENERIC-NEXT: cmpnei16 a0, 10 329; GENERIC-NEXT: mvcv16 a1 330; GENERIC-NEXT: movi16 a0, 1 331; GENERIC-NEXT: subu16 a0, a1 332; GENERIC-NEXT: addi16 sp, sp, 4 333; GENERIC-NEXT: rts16 334entry: 335 %icmp = icmp ne i32 %x, 10 336 ret i1 %icmp 337} 338 339define i1 @icmpRI_X_ne(i32 %x) { 340; CHECK-LABEL: icmpRI_X_ne: 341; CHECK: # %bb.0: # %entry 342; CHECK-NEXT: movih32 a1, 62 343; CHECK-NEXT: ori32 a1, a1, 33768 344; CHECK-NEXT: cmpne16 a0, a1 345; CHECK-NEXT: mvc32 a0 346; CHECK-NEXT: rts16 347; 348; GENERIC-LABEL: icmpRI_X_ne: 349; GENERIC: # %bb.0: # %entry 350; GENERIC-NEXT: .cfi_def_cfa_offset 0 351; GENERIC-NEXT: subi16 sp, sp, 4 352; GENERIC-NEXT: .cfi_def_cfa_offset 4 353; GENERIC-NEXT: movi16 a1, 0 354; GENERIC-NEXT: lsli16 a1, a1, 24 355; GENERIC-NEXT: movi16 a2, 62 356; GENERIC-NEXT: lsli16 a2, a2, 16 357; GENERIC-NEXT: or16 a2, a1 358; GENERIC-NEXT: movi16 a1, 131 359; GENERIC-NEXT: lsli16 a1, a1, 8 360; GENERIC-NEXT: or16 a1, a2 361; GENERIC-NEXT: movi16 a2, 232 362; GENERIC-NEXT: or16 a2, a1 363; GENERIC-NEXT: cmpne16 a0, a2 364; GENERIC-NEXT: mvcv16 a1 365; GENERIC-NEXT: movi16 a0, 1 366; GENERIC-NEXT: subu16 a0, a1 367; GENERIC-NEXT: addi16 sp, sp, 4 368; GENERIC-NEXT: rts16 369entry: 370 %icmp = icmp ne i32 %x, 4097000 371 ret i1 %icmp 372} 373 374define i1 @ICMP_LONG_ne(i64 %x, i64 %y) { 375; CHECK-LABEL: ICMP_LONG_ne: 376; CHECK: # %bb.0: # %entry 377; CHECK-NEXT: xor16 a1, a3 378; CHECK-NEXT: xor16 a0, a2 379; CHECK-NEXT: or16 a0, a1 380; CHECK-NEXT: cmpnei16 a0, 0 381; CHECK-NEXT: mvc32 a0 382; CHECK-NEXT: rts16 383; 384; GENERIC-LABEL: ICMP_LONG_ne: 385; GENERIC: # %bb.0: # %entry 386; GENERIC-NEXT: .cfi_def_cfa_offset 0 387; GENERIC-NEXT: subi16 sp, sp, 4 388; GENERIC-NEXT: .cfi_def_cfa_offset 4 389; GENERIC-NEXT: xor16 a1, a3 390; GENERIC-NEXT: xor16 a0, a2 391; GENERIC-NEXT: or16 a0, a1 392; GENERIC-NEXT: cmpnei16 a0, 0 393; GENERIC-NEXT: mvcv16 a1 394; GENERIC-NEXT: movi16 a0, 1 395; GENERIC-NEXT: subu16 a0, a1 396; GENERIC-NEXT: addi16 sp, sp, 4 397; GENERIC-NEXT: rts16 398entry: 399 %icmp = icmp ne i64 %y, %x 400 ret i1 %icmp 401} 402 403define i1 @ICMP_LONG_I_ne(i64 %x) { 404; CHECK-LABEL: ICMP_LONG_I_ne: 405; CHECK: # %bb.0: # %entry 406; CHECK-NEXT: xori32 a0, a0, 1 407; CHECK-NEXT: or16 a0, a1 408; CHECK-NEXT: cmpnei16 a0, 0 409; CHECK-NEXT: mvc32 a0 410; CHECK-NEXT: rts16 411; 412; GENERIC-LABEL: ICMP_LONG_I_ne: 413; GENERIC: # %bb.0: # %entry 414; GENERIC-NEXT: .cfi_def_cfa_offset 0 415; GENERIC-NEXT: subi16 sp, sp, 4 416; GENERIC-NEXT: .cfi_def_cfa_offset 4 417; GENERIC-NEXT: movi16 a2, 1 418; GENERIC-NEXT: xor16 a0, a2 419; GENERIC-NEXT: or16 a0, a1 420; GENERIC-NEXT: cmpnei16 a0, 0 421; GENERIC-NEXT: mvcv16 a0 422; GENERIC-NEXT: subu16 a2, a0 423; GENERIC-NEXT: mov16 a0, a2 424; GENERIC-NEXT: addi16 sp, sp, 4 425; GENERIC-NEXT: rts16 426entry: 427 %icmp = icmp ne i64 %x, 1 428 ret i1 %icmp 429} 430 431define i1 @ICMP_SHORT_ne(i16 %x, i16 %y) { 432; CHECK-LABEL: ICMP_SHORT_ne: 433; CHECK: # %bb.0: # %entry 434; CHECK-NEXT: zexth16 a0, a0 435; CHECK-NEXT: zexth16 a1, a1 436; CHECK-NEXT: cmpne16 a1, a0 437; CHECK-NEXT: mvc32 a0 438; CHECK-NEXT: rts16 439; 440; GENERIC-LABEL: ICMP_SHORT_ne: 441; GENERIC: # %bb.0: # %entry 442; GENERIC-NEXT: subi16 sp, sp, 4 443; GENERIC-NEXT: .cfi_def_cfa_offset 4 444; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 445; GENERIC-NEXT: .cfi_offset l0, -4 446; GENERIC-NEXT: subi16 sp, sp, 4 447; GENERIC-NEXT: .cfi_def_cfa_offset 8 448; GENERIC-NEXT: movi16 a2, 0 449; GENERIC-NEXT: lsli16 a3, a2, 24 450; GENERIC-NEXT: lsli16 a2, a2, 16 451; GENERIC-NEXT: or16 a2, a3 452; GENERIC-NEXT: movi16 a3, 255 453; GENERIC-NEXT: lsli16 l0, a3, 8 454; GENERIC-NEXT: or16 l0, a2 455; GENERIC-NEXT: or16 l0, a3 456; GENERIC-NEXT: and16 a0, l0 457; GENERIC-NEXT: and16 l0, a1 458; GENERIC-NEXT: cmpne16 l0, a0 459; GENERIC-NEXT: mvcv16 a1 460; GENERIC-NEXT: movi16 a0, 1 461; GENERIC-NEXT: subu16 a0, a1 462; GENERIC-NEXT: addi16 sp, sp, 4 463; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 464; GENERIC-NEXT: addi16 sp, sp, 4 465; GENERIC-NEXT: rts16 466entry: 467 %icmp = icmp ne i16 %y, %x 468 ret i1 %icmp 469} 470 471define i1 @ICMP_SHORT_I_ne(i16 %x) { 472; CHECK-LABEL: ICMP_SHORT_I_ne: 473; CHECK: # %bb.0: # %entry 474; CHECK-NEXT: zexth16 a0, a0 475; CHECK-NEXT: cmpnei16 a0, 1 476; CHECK-NEXT: mvc32 a0 477; CHECK-NEXT: rts16 478; 479; GENERIC-LABEL: ICMP_SHORT_I_ne: 480; GENERIC: # %bb.0: # %entry 481; GENERIC-NEXT: .cfi_def_cfa_offset 0 482; GENERIC-NEXT: subi16 sp, sp, 4 483; GENERIC-NEXT: .cfi_def_cfa_offset 4 484; GENERIC-NEXT: movi16 a1, 0 485; GENERIC-NEXT: lsli16 a2, a1, 24 486; GENERIC-NEXT: lsli16 a1, a1, 16 487; GENERIC-NEXT: or16 a1, a2 488; GENERIC-NEXT: movi16 a2, 255 489; GENERIC-NEXT: lsli16 a3, a2, 8 490; GENERIC-NEXT: or16 a3, a1 491; GENERIC-NEXT: or16 a3, a2 492; GENERIC-NEXT: and16 a3, a0 493; GENERIC-NEXT: cmpnei16 a3, 1 494; GENERIC-NEXT: mvcv16 a1 495; GENERIC-NEXT: movi16 a0, 1 496; GENERIC-NEXT: subu16 a0, a1 497; GENERIC-NEXT: addi16 sp, sp, 4 498; GENERIC-NEXT: rts16 499entry: 500 %icmp = icmp ne i16 %x, 1 501 ret i1 %icmp 502} 503 504define i1 @ICMP_CHAR_ne(i8 %x, i8 %y) { 505; CHECK-LABEL: ICMP_CHAR_ne: 506; CHECK: # %bb.0: # %entry 507; CHECK-NEXT: zextb16 a0, a0 508; CHECK-NEXT: zextb16 a1, a1 509; CHECK-NEXT: cmpne16 a1, a0 510; CHECK-NEXT: mvc32 a0 511; CHECK-NEXT: rts16 512; 513; GENERIC-LABEL: ICMP_CHAR_ne: 514; GENERIC: # %bb.0: # %entry 515; GENERIC-NEXT: .cfi_def_cfa_offset 0 516; GENERIC-NEXT: subi16 sp, sp, 4 517; GENERIC-NEXT: .cfi_def_cfa_offset 4 518; GENERIC-NEXT: movi16 a2, 255 519; GENERIC-NEXT: and16 a0, a2 520; GENERIC-NEXT: and16 a1, a2 521; GENERIC-NEXT: cmpne16 a1, a0 522; GENERIC-NEXT: mvcv16 a1 523; GENERIC-NEXT: movi16 a0, 1 524; GENERIC-NEXT: subu16 a0, a1 525; GENERIC-NEXT: addi16 sp, sp, 4 526; GENERIC-NEXT: rts16 527entry: 528 %icmp = icmp ne i8 %y, %x 529 ret i1 %icmp 530} 531 532define i1 @ICMP_CHAR_I_ne(i8 %x) { 533; CHECK-LABEL: ICMP_CHAR_I_ne: 534; CHECK: # %bb.0: # %entry 535; CHECK-NEXT: zextb16 a0, a0 536; CHECK-NEXT: cmpnei16 a0, 1 537; CHECK-NEXT: mvc32 a0 538; CHECK-NEXT: rts16 539; 540; GENERIC-LABEL: ICMP_CHAR_I_ne: 541; GENERIC: # %bb.0: # %entry 542; GENERIC-NEXT: .cfi_def_cfa_offset 0 543; GENERIC-NEXT: subi16 sp, sp, 4 544; GENERIC-NEXT: .cfi_def_cfa_offset 4 545; GENERIC-NEXT: movi16 a1, 255 546; GENERIC-NEXT: and16 a1, a0 547; GENERIC-NEXT: cmpnei16 a1, 1 548; GENERIC-NEXT: mvcv16 a1 549; GENERIC-NEXT: movi16 a0, 1 550; GENERIC-NEXT: subu16 a0, a1 551; GENERIC-NEXT: addi16 sp, sp, 4 552; GENERIC-NEXT: rts16 553entry: 554 %icmp = icmp ne i8 %x, 1 555 ret i1 %icmp 556} 557 558define i1 @ICMP_BIT_ne(i1 %x, i1 %y) { 559; CHECK-LABEL: ICMP_BIT_ne: 560; CHECK: # %bb.0: # %entry 561; CHECK-NEXT: xor16 a0, a1 562; CHECK-NEXT: rts16 563; 564; GENERIC-LABEL: ICMP_BIT_ne: 565; GENERIC: # %bb.0: # %entry 566; GENERIC-NEXT: .cfi_def_cfa_offset 0 567; GENERIC-NEXT: subi16 sp, sp, 4 568; GENERIC-NEXT: .cfi_def_cfa_offset 4 569; GENERIC-NEXT: xor16 a0, a1 570; GENERIC-NEXT: addi16 sp, sp, 4 571; GENERIC-NEXT: rts16 572entry: 573 %icmp = icmp ne i1 %y, %x 574 ret i1 %icmp 575} 576 577define i1 @ICMP_BIT_I_ne(i1 %x) { 578; CHECK-LABEL: ICMP_BIT_I_ne: 579; CHECK: # %bb.0: # %entry 580; CHECK-NEXT: xori32 a0, a0, 1 581; CHECK-NEXT: rts16 582; 583; GENERIC-LABEL: ICMP_BIT_I_ne: 584; GENERIC: # %bb.0: # %entry 585; GENERIC-NEXT: .cfi_def_cfa_offset 0 586; GENERIC-NEXT: subi16 sp, sp, 4 587; GENERIC-NEXT: .cfi_def_cfa_offset 4 588; GENERIC-NEXT: movi16 a1, 1 589; GENERIC-NEXT: xor16 a0, a1 590; GENERIC-NEXT: addi16 sp, sp, 4 591; GENERIC-NEXT: rts16 592entry: 593 %icmp = icmp ne i1 %x, 1 594 ret i1 %icmp 595} 596 597 598;ugt 599define i1 @icmpRR_ugt(i32 %x, i32 %y) { 600; CHECK-LABEL: icmpRR_ugt: 601; CHECK: # %bb.0: # %entry 602; CHECK-NEXT: cmphs16 a0, a1 603; CHECK-NEXT: mvcv16 a0 604; CHECK-NEXT: rts16 605; 606; GENERIC-LABEL: icmpRR_ugt: 607; GENERIC: # %bb.0: # %entry 608; GENERIC-NEXT: .cfi_def_cfa_offset 0 609; GENERIC-NEXT: subi16 sp, sp, 4 610; GENERIC-NEXT: .cfi_def_cfa_offset 4 611; GENERIC-NEXT: cmphs16 a0, a1 612; GENERIC-NEXT: mvcv16 a0 613; GENERIC-NEXT: addi16 sp, sp, 4 614; GENERIC-NEXT: rts16 615entry: 616 %icmp = icmp ugt i32 %y, %x 617 ret i1 %icmp 618} 619 620define i1 @icmpRI_ugt(i32 %x) { 621; CHECK-LABEL: icmpRI_ugt: 622; CHECK: # %bb.0: # %entry 623; CHECK-NEXT: movi16 a1, 10 624; CHECK-NEXT: cmphs16 a1, a0 625; CHECK-NEXT: mvcv16 a0 626; CHECK-NEXT: rts16 627; 628; GENERIC-LABEL: icmpRI_ugt: 629; GENERIC: # %bb.0: # %entry 630; GENERIC-NEXT: .cfi_def_cfa_offset 0 631; GENERIC-NEXT: subi16 sp, sp, 4 632; GENERIC-NEXT: .cfi_def_cfa_offset 4 633; GENERIC-NEXT: movi16 a1, 10 634; GENERIC-NEXT: cmphs16 a1, a0 635; GENERIC-NEXT: mvcv16 a0 636; GENERIC-NEXT: addi16 sp, sp, 4 637; GENERIC-NEXT: rts16 638entry: 639 %icmp = icmp ugt i32 %x, 10 640 ret i1 %icmp 641} 642 643define i1 @icmpRI_X_ugt(i32 %x) { 644; CHECK-LABEL: icmpRI_X_ugt: 645; CHECK: # %bb.0: # %entry 646; CHECK-NEXT: movih32 a1, 62 647; CHECK-NEXT: ori32 a1, a1, 33768 648; CHECK-NEXT: cmphs16 a1, a0 649; CHECK-NEXT: mvcv16 a0 650; CHECK-NEXT: rts16 651; 652; GENERIC-LABEL: icmpRI_X_ugt: 653; GENERIC: # %bb.0: # %entry 654; GENERIC-NEXT: .cfi_def_cfa_offset 0 655; GENERIC-NEXT: subi16 sp, sp, 4 656; GENERIC-NEXT: .cfi_def_cfa_offset 4 657; GENERIC-NEXT: movi16 a1, 0 658; GENERIC-NEXT: lsli16 a1, a1, 24 659; GENERIC-NEXT: movi16 a2, 62 660; GENERIC-NEXT: lsli16 a2, a2, 16 661; GENERIC-NEXT: or16 a2, a1 662; GENERIC-NEXT: movi16 a1, 131 663; GENERIC-NEXT: lsli16 a1, a1, 8 664; GENERIC-NEXT: or16 a1, a2 665; GENERIC-NEXT: movi16 a2, 232 666; GENERIC-NEXT: or16 a2, a1 667; GENERIC-NEXT: cmphs16 a2, a0 668; GENERIC-NEXT: mvcv16 a0 669; GENERIC-NEXT: addi16 sp, sp, 4 670; GENERIC-NEXT: rts16 671entry: 672 %icmp = icmp ugt i32 %x, 4097000 673 ret i1 %icmp 674} 675 676define i1 @ICMP_LONG_ugt(i64 %x, i64 %y) { 677; CHECK-LABEL: ICMP_LONG_ugt: 678; CHECK: # %bb.0: # %entry 679; CHECK-NEXT: .cfi_def_cfa_offset 0 680; CHECK-NEXT: subi16 sp, sp, 8 681; CHECK-NEXT: .cfi_def_cfa_offset 8 682; CHECK-NEXT: cmpne16 a3, a1 683; CHECK-NEXT: mvc32 t0 684; CHECK-NEXT: st32.w t0, (sp, 4) 685; CHECK-NEXT: cmphs16 a1, a3 686; CHECK-NEXT: mvcv16 a1 687; CHECK-NEXT: cmphs16 a0, a2 688; CHECK-NEXT: mvcv16 a0 689; CHECK-NEXT: ld16.w a2, (sp, 4) 690; CHECK-NEXT: btsti32 a2, 0 691; CHECK-NEXT: movf32 a1, a0 692; CHECK-NEXT: mov16 a0, a1 693; CHECK-NEXT: addi16 sp, sp, 8 694; CHECK-NEXT: rts16 695; 696; GENERIC-LABEL: ICMP_LONG_ugt: 697; GENERIC: # %bb.0: # %entry 698; GENERIC-NEXT: subi16 sp, sp, 4 699; GENERIC-NEXT: .cfi_def_cfa_offset 4 700; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 701; GENERIC-NEXT: .cfi_offset l0, -4 702; GENERIC-NEXT: subi16 sp, sp, 4 703; GENERIC-NEXT: .cfi_def_cfa_offset 8 704; GENERIC-NEXT: cmphs16 a1, a3 705; GENERIC-NEXT: mvcv16 l0 706; GENERIC-NEXT: cmphs16 a0, a2 707; GENERIC-NEXT: mvcv16 a0 708; GENERIC-NEXT: cmpne16 a3, a1 709; GENERIC-NEXT: mvcv16 a1 710; GENERIC-NEXT: btsti16 a1, 0 711; GENERIC-NEXT: bt16 .LBB25_2 712; GENERIC-NEXT: # %bb.1: # %entry 713; GENERIC-NEXT: mov16 a0, l0 714; GENERIC-NEXT: .LBB25_2: # %entry 715; GENERIC-NEXT: addi16 sp, sp, 4 716; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 717; GENERIC-NEXT: addi16 sp, sp, 4 718; GENERIC-NEXT: rts16 719entry: 720 %icmp = icmp ugt i64 %y, %x 721 ret i1 %icmp 722} 723 724define i1 @ICMP_LONG_I_ugt(i64 %x) { 725; CHECK-LABEL: ICMP_LONG_I_ugt: 726; CHECK: # %bb.0: # %entry 727; CHECK-NEXT: movi16 a2, 1 728; CHECK-NEXT: cmphs16 a2, a0 729; CHECK-NEXT: mvcv16 a2 730; CHECK-NEXT: cmpnei16 a1, 0 731; CHECK-NEXT: mvc32 a0 732; CHECK-NEXT: movf32 a0, a2 733; CHECK-NEXT: rts16 734; 735; GENERIC-LABEL: ICMP_LONG_I_ugt: 736; GENERIC: # %bb.0: # %entry 737; GENERIC-NEXT: .cfi_def_cfa_offset 0 738; GENERIC-NEXT: subi16 sp, sp, 4 739; GENERIC-NEXT: .cfi_def_cfa_offset 4 740; GENERIC-NEXT: cmpnei16 a1, 0 741; GENERIC-NEXT: mvcv16 a1 742; GENERIC-NEXT: movi16 a2, 1 743; GENERIC-NEXT: cmphs16 a2, a0 744; GENERIC-NEXT: mvcv16 a0 745; GENERIC-NEXT: btsti16 a1, 0 746; GENERIC-NEXT: bt16 .LBB26_2 747; GENERIC-NEXT: # %bb.1: # %entry 748; GENERIC-NEXT: subu16 a2, a1 749; GENERIC-NEXT: mov16 a0, a2 750; GENERIC-NEXT: .LBB26_2: # %entry 751; GENERIC-NEXT: addi16 sp, sp, 4 752; GENERIC-NEXT: rts16 753entry: 754 %icmp = icmp ugt i64 %x, 1 755 ret i1 %icmp 756} 757 758define i1 @ICMP_SHORT_ugt(i16 %x, i16 %y) { 759; CHECK-LABEL: ICMP_SHORT_ugt: 760; CHECK: # %bb.0: # %entry 761; CHECK-NEXT: zexth16 a1, a1 762; CHECK-NEXT: zexth16 a0, a0 763; CHECK-NEXT: cmphs16 a0, a1 764; CHECK-NEXT: mvcv16 a0 765; CHECK-NEXT: rts16 766; 767; GENERIC-LABEL: ICMP_SHORT_ugt: 768; GENERIC: # %bb.0: # %entry 769; GENERIC-NEXT: subi16 sp, sp, 4 770; GENERIC-NEXT: .cfi_def_cfa_offset 4 771; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 772; GENERIC-NEXT: .cfi_offset l0, -4 773; GENERIC-NEXT: subi16 sp, sp, 4 774; GENERIC-NEXT: .cfi_def_cfa_offset 8 775; GENERIC-NEXT: movi16 a2, 0 776; GENERIC-NEXT: lsli16 a3, a2, 24 777; GENERIC-NEXT: lsli16 a2, a2, 16 778; GENERIC-NEXT: or16 a2, a3 779; GENERIC-NEXT: movi16 a3, 255 780; GENERIC-NEXT: lsli16 l0, a3, 8 781; GENERIC-NEXT: or16 l0, a2 782; GENERIC-NEXT: or16 l0, a3 783; GENERIC-NEXT: and16 a1, l0 784; GENERIC-NEXT: and16 l0, a0 785; GENERIC-NEXT: cmphs16 l0, a1 786; GENERIC-NEXT: mvcv16 a0 787; GENERIC-NEXT: addi16 sp, sp, 4 788; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 789; GENERIC-NEXT: addi16 sp, sp, 4 790; GENERIC-NEXT: rts16 791entry: 792 %icmp = icmp ugt i16 %y, %x 793 ret i1 %icmp 794} 795 796define i1 @ICMP_SHORT_I_ugt(i16 %x) { 797; CHECK-LABEL: ICMP_SHORT_I_ugt: 798; CHECK: # %bb.0: # %entry 799; CHECK-NEXT: zexth16 a0, a0 800; CHECK-NEXT: movi16 a1, 1 801; CHECK-NEXT: cmphs16 a1, a0 802; CHECK-NEXT: mvcv16 a0 803; CHECK-NEXT: rts16 804; 805; GENERIC-LABEL: ICMP_SHORT_I_ugt: 806; GENERIC: # %bb.0: # %entry 807; GENERIC-NEXT: .cfi_def_cfa_offset 0 808; GENERIC-NEXT: subi16 sp, sp, 4 809; GENERIC-NEXT: .cfi_def_cfa_offset 4 810; GENERIC-NEXT: movi16 a1, 0 811; GENERIC-NEXT: lsli16 a2, a1, 24 812; GENERIC-NEXT: lsli16 a1, a1, 16 813; GENERIC-NEXT: or16 a1, a2 814; GENERIC-NEXT: movi16 a2, 255 815; GENERIC-NEXT: lsli16 a3, a2, 8 816; GENERIC-NEXT: or16 a3, a1 817; GENERIC-NEXT: or16 a3, a2 818; GENERIC-NEXT: and16 a3, a0 819; GENERIC-NEXT: movi16 a0, 1 820; GENERIC-NEXT: cmphs16 a0, a3 821; GENERIC-NEXT: mvcv16 a0 822; GENERIC-NEXT: addi16 sp, sp, 4 823; GENERIC-NEXT: rts16 824entry: 825 %icmp = icmp ugt i16 %x, 1 826 ret i1 %icmp 827} 828 829define i1 @ICMP_CHAR_ugt(i8 %x, i8 %y) { 830; CHECK-LABEL: ICMP_CHAR_ugt: 831; CHECK: # %bb.0: # %entry 832; CHECK-NEXT: zextb16 a1, a1 833; CHECK-NEXT: zextb16 a0, a0 834; CHECK-NEXT: cmphs16 a0, a1 835; CHECK-NEXT: mvcv16 a0 836; CHECK-NEXT: rts16 837; 838; GENERIC-LABEL: ICMP_CHAR_ugt: 839; GENERIC: # %bb.0: # %entry 840; GENERIC-NEXT: .cfi_def_cfa_offset 0 841; GENERIC-NEXT: subi16 sp, sp, 4 842; GENERIC-NEXT: .cfi_def_cfa_offset 4 843; GENERIC-NEXT: movi16 a2, 255 844; GENERIC-NEXT: and16 a1, a2 845; GENERIC-NEXT: and16 a0, a2 846; GENERIC-NEXT: cmphs16 a0, a1 847; GENERIC-NEXT: mvcv16 a0 848; GENERIC-NEXT: addi16 sp, sp, 4 849; GENERIC-NEXT: rts16 850entry: 851 %icmp = icmp ugt i8 %y, %x 852 ret i1 %icmp 853} 854 855define i1 @ICMP_CHAR_I_ugt(i8 %x) { 856; CHECK-LABEL: ICMP_CHAR_I_ugt: 857; CHECK: # %bb.0: # %entry 858; CHECK-NEXT: zextb16 a0, a0 859; CHECK-NEXT: movi16 a1, 1 860; CHECK-NEXT: cmphs16 a1, a0 861; CHECK-NEXT: mvcv16 a0 862; CHECK-NEXT: rts16 863; 864; GENERIC-LABEL: ICMP_CHAR_I_ugt: 865; GENERIC: # %bb.0: # %entry 866; GENERIC-NEXT: .cfi_def_cfa_offset 0 867; GENERIC-NEXT: subi16 sp, sp, 4 868; GENERIC-NEXT: .cfi_def_cfa_offset 4 869; GENERIC-NEXT: movi16 a1, 255 870; GENERIC-NEXT: and16 a1, a0 871; GENERIC-NEXT: movi16 a0, 1 872; GENERIC-NEXT: cmphs16 a0, a1 873; GENERIC-NEXT: mvcv16 a0 874; GENERIC-NEXT: addi16 sp, sp, 4 875; GENERIC-NEXT: rts16 876entry: 877 %icmp = icmp ugt i8 %x, 1 878 ret i1 %icmp 879} 880 881define i1 @ICMP_BIT_ugt(i1 %x, i1 %y) { 882; CHECK-LABEL: ICMP_BIT_ugt: 883; CHECK: # %bb.0: # %entry 884; CHECK-NEXT: xori32 a0, a0, 1 885; CHECK-NEXT: and16 a0, a1 886; CHECK-NEXT: rts16 887; 888; GENERIC-LABEL: ICMP_BIT_ugt: 889; GENERIC: # %bb.0: # %entry 890; GENERIC-NEXT: .cfi_def_cfa_offset 0 891; GENERIC-NEXT: subi16 sp, sp, 4 892; GENERIC-NEXT: .cfi_def_cfa_offset 4 893; GENERIC-NEXT: movi16 a2, 1 894; GENERIC-NEXT: xor16 a0, a2 895; GENERIC-NEXT: and16 a0, a1 896; GENERIC-NEXT: addi16 sp, sp, 4 897; GENERIC-NEXT: rts16 898entry: 899 %icmp = icmp ugt i1 %y, %x 900 ret i1 %icmp 901} 902 903define i1 @ICMP_BIT_I_ugt(i1 %x) { 904; CHECK-LABEL: ICMP_BIT_I_ugt: 905; CHECK: # %bb.0: # %entry 906; CHECK-NEXT: movi16 a0, 0 907; CHECK-NEXT: rts16 908; 909; GENERIC-LABEL: ICMP_BIT_I_ugt: 910; GENERIC: # %bb.0: # %entry 911; GENERIC-NEXT: .cfi_def_cfa_offset 0 912; GENERIC-NEXT: subi16 sp, sp, 4 913; GENERIC-NEXT: .cfi_def_cfa_offset 4 914; GENERIC-NEXT: movi16 a0, 0 915; GENERIC-NEXT: addi16 sp, sp, 4 916; GENERIC-NEXT: rts16 917entry: 918 %icmp = icmp ugt i1 %x, 1 919 ret i1 %icmp 920} 921 922 923;uge 924define i1 @icmpRR_uge(i32 %x, i32 %y) { 925; CHECK-LABEL: icmpRR_uge: 926; CHECK: # %bb.0: # %entry 927; CHECK-NEXT: cmphs16 a1, a0 928; CHECK-NEXT: mvc32 a0 929; CHECK-NEXT: rts16 930; 931; GENERIC-LABEL: icmpRR_uge: 932; GENERIC: # %bb.0: # %entry 933; GENERIC-NEXT: .cfi_def_cfa_offset 0 934; GENERIC-NEXT: subi16 sp, sp, 4 935; GENERIC-NEXT: .cfi_def_cfa_offset 4 936; GENERIC-NEXT: cmphs16 a1, a0 937; GENERIC-NEXT: mvcv16 a1 938; GENERIC-NEXT: movi16 a0, 1 939; GENERIC-NEXT: subu16 a0, a1 940; GENERIC-NEXT: addi16 sp, sp, 4 941; GENERIC-NEXT: rts16 942entry: 943 %icmp = icmp uge i32 %y, %x 944 ret i1 %icmp 945} 946 947define i1 @icmpRI_uge(i32 %x) { 948; CHECK-LABEL: icmpRI_uge: 949; CHECK: # %bb.0: # %entry 950; CHECK-NEXT: movi16 a1, 9 951; CHECK-NEXT: cmphs16 a1, a0 952; CHECK-NEXT: mvcv16 a0 953; CHECK-NEXT: rts16 954; 955; GENERIC-LABEL: icmpRI_uge: 956; GENERIC: # %bb.0: # %entry 957; GENERIC-NEXT: .cfi_def_cfa_offset 0 958; GENERIC-NEXT: subi16 sp, sp, 4 959; GENERIC-NEXT: .cfi_def_cfa_offset 4 960; GENERIC-NEXT: movi16 a1, 9 961; GENERIC-NEXT: cmphs16 a1, a0 962; GENERIC-NEXT: mvcv16 a0 963; GENERIC-NEXT: addi16 sp, sp, 4 964; GENERIC-NEXT: rts16 965entry: 966 %icmp = icmp uge i32 %x, 10 967 ret i1 %icmp 968} 969 970define i1 @icmpRI_X_uge(i32 %x) { 971; CHECK-LABEL: icmpRI_X_uge: 972; CHECK: # %bb.0: # %entry 973; CHECK-NEXT: movih32 a1, 62 974; CHECK-NEXT: ori32 a1, a1, 33767 975; CHECK-NEXT: cmphs16 a1, a0 976; CHECK-NEXT: mvcv16 a0 977; CHECK-NEXT: rts16 978; 979; GENERIC-LABEL: icmpRI_X_uge: 980; GENERIC: # %bb.0: # %entry 981; GENERIC-NEXT: .cfi_def_cfa_offset 0 982; GENERIC-NEXT: subi16 sp, sp, 4 983; GENERIC-NEXT: .cfi_def_cfa_offset 4 984; GENERIC-NEXT: movi16 a1, 0 985; GENERIC-NEXT: lsli16 a1, a1, 24 986; GENERIC-NEXT: movi16 a2, 62 987; GENERIC-NEXT: lsli16 a2, a2, 16 988; GENERIC-NEXT: or16 a2, a1 989; GENERIC-NEXT: movi16 a1, 131 990; GENERIC-NEXT: lsli16 a1, a1, 8 991; GENERIC-NEXT: or16 a1, a2 992; GENERIC-NEXT: movi16 a2, 231 993; GENERIC-NEXT: or16 a2, a1 994; GENERIC-NEXT: cmphs16 a2, a0 995; GENERIC-NEXT: mvcv16 a0 996; GENERIC-NEXT: addi16 sp, sp, 4 997; GENERIC-NEXT: rts16 998entry: 999 %icmp = icmp uge i32 %x, 4097000 1000 ret i1 %icmp 1001} 1002 1003define i1 @ICMP_LONG_uge(i64 %x, i64 %y) { 1004; CHECK-LABEL: ICMP_LONG_uge: 1005; CHECK: # %bb.0: # %entry 1006; CHECK-NEXT: .cfi_def_cfa_offset 0 1007; CHECK-NEXT: subi16 sp, sp, 16 1008; CHECK-NEXT: .cfi_def_cfa_offset 16 1009; CHECK-NEXT: cmphs16 a3, a1 1010; CHECK-NEXT: mvc32 t0 1011; CHECK-NEXT: st32.w t0, (sp, 12) 1012; CHECK-NEXT: cmphs16 a2, a0 1013; CHECK-NEXT: mvc32 a0 1014; CHECK-NEXT: st16.w a0, (sp, 4) 1015; CHECK-NEXT: cmpne16 a3, a1 1016; CHECK-NEXT: mvc32 a0 1017; CHECK-NEXT: st16.w a0, (sp, 8) 1018; CHECK-NEXT: ld16.w a0, (sp, 4) 1019; CHECK-NEXT: btsti32 a0, 0 1020; CHECK-NEXT: mvc32 a1 1021; CHECK-NEXT: ld16.w a0, (sp, 12) 1022; CHECK-NEXT: btsti32 a0, 0 1023; CHECK-NEXT: mvc32 a0 1024; CHECK-NEXT: ld16.w a2, (sp, 8) 1025; CHECK-NEXT: btsti32 a2, 0 1026; CHECK-NEXT: movf32 a0, a1 1027; CHECK-NEXT: addi16 sp, sp, 16 1028; CHECK-NEXT: rts16 1029; 1030; GENERIC-LABEL: ICMP_LONG_uge: 1031; GENERIC: # %bb.0: # %entry 1032; GENERIC-NEXT: subi16 sp, sp, 8 1033; GENERIC-NEXT: .cfi_def_cfa_offset 8 1034; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 1035; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1036; GENERIC-NEXT: .cfi_offset l1, -4 1037; GENERIC-NEXT: .cfi_offset l0, -8 1038; GENERIC-NEXT: subi16 sp, sp, 4 1039; GENERIC-NEXT: .cfi_def_cfa_offset 12 1040; GENERIC-NEXT: mov16 l0, a0 1041; GENERIC-NEXT: cmphs16 a3, a1 1042; GENERIC-NEXT: mvcv16 l1 1043; GENERIC-NEXT: movi16 a0, 1 1044; GENERIC-NEXT: cmphs16 a2, l0 1045; GENERIC-NEXT: mvcv16 a2 1046; GENERIC-NEXT: cmpne16 a3, a1 1047; GENERIC-NEXT: mvcv16 a1 1048; GENERIC-NEXT: btsti16 a1, 0 1049; GENERIC-NEXT: bt16 .LBB36_2 1050; GENERIC-NEXT: # %bb.1: # %entry 1051; GENERIC-NEXT: subu16 a0, l1 1052; GENERIC-NEXT: br32 .LBB36_3 1053; GENERIC-NEXT: .LBB36_2: 1054; GENERIC-NEXT: subu16 a0, a2 1055; GENERIC-NEXT: .LBB36_3: # %entry 1056; GENERIC-NEXT: addi16 sp, sp, 4 1057; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1058; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 1059; GENERIC-NEXT: addi16 sp, sp, 8 1060; GENERIC-NEXT: rts16 1061entry: 1062 %icmp = icmp uge i64 %y, %x 1063 ret i1 %icmp 1064} 1065 1066define i1 @ICMP_LONG_I_uge(i64 %x) { 1067; CHECK-LABEL: ICMP_LONG_I_uge: 1068; CHECK: # %bb.0: # %entry 1069; CHECK-NEXT: or16 a0, a1 1070; CHECK-NEXT: cmpnei16 a0, 0 1071; CHECK-NEXT: mvc32 a0 1072; CHECK-NEXT: rts16 1073; 1074; GENERIC-LABEL: ICMP_LONG_I_uge: 1075; GENERIC: # %bb.0: # %entry 1076; GENERIC-NEXT: .cfi_def_cfa_offset 0 1077; GENERIC-NEXT: subi16 sp, sp, 4 1078; GENERIC-NEXT: .cfi_def_cfa_offset 4 1079; GENERIC-NEXT: or16 a0, a1 1080; GENERIC-NEXT: cmpnei16 a0, 0 1081; GENERIC-NEXT: mvcv16 a1 1082; GENERIC-NEXT: movi16 a0, 1 1083; GENERIC-NEXT: subu16 a0, a1 1084; GENERIC-NEXT: addi16 sp, sp, 4 1085; GENERIC-NEXT: rts16 1086entry: 1087 %icmp = icmp uge i64 %x, 1 1088 ret i1 %icmp 1089} 1090 1091define i1 @ICMP_SHORT_uge(i16 %x, i16 %y) { 1092; CHECK-LABEL: ICMP_SHORT_uge: 1093; CHECK: # %bb.0: # %entry 1094; CHECK-NEXT: zexth16 a0, a0 1095; CHECK-NEXT: zexth16 a1, a1 1096; CHECK-NEXT: cmphs16 a1, a0 1097; CHECK-NEXT: mvc32 a0 1098; CHECK-NEXT: rts16 1099; 1100; GENERIC-LABEL: ICMP_SHORT_uge: 1101; GENERIC: # %bb.0: # %entry 1102; GENERIC-NEXT: subi16 sp, sp, 4 1103; GENERIC-NEXT: .cfi_def_cfa_offset 4 1104; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1105; GENERIC-NEXT: .cfi_offset l0, -4 1106; GENERIC-NEXT: subi16 sp, sp, 4 1107; GENERIC-NEXT: .cfi_def_cfa_offset 8 1108; GENERIC-NEXT: movi16 a2, 0 1109; GENERIC-NEXT: lsli16 a3, a2, 24 1110; GENERIC-NEXT: lsli16 a2, a2, 16 1111; GENERIC-NEXT: or16 a2, a3 1112; GENERIC-NEXT: movi16 a3, 255 1113; GENERIC-NEXT: lsli16 l0, a3, 8 1114; GENERIC-NEXT: or16 l0, a2 1115; GENERIC-NEXT: or16 l0, a3 1116; GENERIC-NEXT: and16 a0, l0 1117; GENERIC-NEXT: and16 l0, a1 1118; GENERIC-NEXT: cmphs16 l0, a0 1119; GENERIC-NEXT: mvcv16 a1 1120; GENERIC-NEXT: movi16 a0, 1 1121; GENERIC-NEXT: subu16 a0, a1 1122; GENERIC-NEXT: addi16 sp, sp, 4 1123; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1124; GENERIC-NEXT: addi16 sp, sp, 4 1125; GENERIC-NEXT: rts16 1126entry: 1127 %icmp = icmp uge i16 %y, %x 1128 ret i1 %icmp 1129} 1130 1131define i1 @ICMP_SHORT_I_uge(i16 %x) { 1132; CHECK-LABEL: ICMP_SHORT_I_uge: 1133; CHECK: # %bb.0: # %entry 1134; CHECK-NEXT: zexth16 a0, a0 1135; CHECK-NEXT: cmpnei16 a0, 0 1136; CHECK-NEXT: mvc32 a0 1137; CHECK-NEXT: rts16 1138; 1139; GENERIC-LABEL: ICMP_SHORT_I_uge: 1140; GENERIC: # %bb.0: # %entry 1141; GENERIC-NEXT: .cfi_def_cfa_offset 0 1142; GENERIC-NEXT: subi16 sp, sp, 4 1143; GENERIC-NEXT: .cfi_def_cfa_offset 4 1144; GENERIC-NEXT: movi16 a1, 0 1145; GENERIC-NEXT: lsli16 a2, a1, 24 1146; GENERIC-NEXT: lsli16 a1, a1, 16 1147; GENERIC-NEXT: or16 a1, a2 1148; GENERIC-NEXT: movi16 a2, 255 1149; GENERIC-NEXT: lsli16 a3, a2, 8 1150; GENERIC-NEXT: or16 a3, a1 1151; GENERIC-NEXT: or16 a3, a2 1152; GENERIC-NEXT: and16 a3, a0 1153; GENERIC-NEXT: cmpnei16 a3, 0 1154; GENERIC-NEXT: mvcv16 a1 1155; GENERIC-NEXT: movi16 a0, 1 1156; GENERIC-NEXT: subu16 a0, a1 1157; GENERIC-NEXT: addi16 sp, sp, 4 1158; GENERIC-NEXT: rts16 1159entry: 1160 %icmp = icmp uge i16 %x, 1 1161 ret i1 %icmp 1162} 1163 1164define i1 @ICMP_CHAR_uge(i8 %x, i8 %y) { 1165; CHECK-LABEL: ICMP_CHAR_uge: 1166; CHECK: # %bb.0: # %entry 1167; CHECK-NEXT: zextb16 a0, a0 1168; CHECK-NEXT: zextb16 a1, a1 1169; CHECK-NEXT: cmphs16 a1, a0 1170; CHECK-NEXT: mvc32 a0 1171; CHECK-NEXT: rts16 1172; 1173; GENERIC-LABEL: ICMP_CHAR_uge: 1174; GENERIC: # %bb.0: # %entry 1175; GENERIC-NEXT: .cfi_def_cfa_offset 0 1176; GENERIC-NEXT: subi16 sp, sp, 4 1177; GENERIC-NEXT: .cfi_def_cfa_offset 4 1178; GENERIC-NEXT: movi16 a2, 255 1179; GENERIC-NEXT: and16 a0, a2 1180; GENERIC-NEXT: and16 a1, a2 1181; GENERIC-NEXT: cmphs16 a1, a0 1182; GENERIC-NEXT: mvcv16 a1 1183; GENERIC-NEXT: movi16 a0, 1 1184; GENERIC-NEXT: subu16 a0, a1 1185; GENERIC-NEXT: addi16 sp, sp, 4 1186; GENERIC-NEXT: rts16 1187entry: 1188 %icmp = icmp uge i8 %y, %x 1189 ret i1 %icmp 1190} 1191 1192define i1 @ICMP_CHAR_I_uge(i8 %x) { 1193; CHECK-LABEL: ICMP_CHAR_I_uge: 1194; CHECK: # %bb.0: # %entry 1195; CHECK-NEXT: zextb16 a0, a0 1196; CHECK-NEXT: cmpnei16 a0, 0 1197; CHECK-NEXT: mvc32 a0 1198; CHECK-NEXT: rts16 1199; 1200; GENERIC-LABEL: ICMP_CHAR_I_uge: 1201; GENERIC: # %bb.0: # %entry 1202; GENERIC-NEXT: .cfi_def_cfa_offset 0 1203; GENERIC-NEXT: subi16 sp, sp, 4 1204; GENERIC-NEXT: .cfi_def_cfa_offset 4 1205; GENERIC-NEXT: movi16 a1, 255 1206; GENERIC-NEXT: and16 a1, a0 1207; GENERIC-NEXT: cmpnei16 a1, 0 1208; GENERIC-NEXT: mvcv16 a1 1209; GENERIC-NEXT: movi16 a0, 1 1210; GENERIC-NEXT: subu16 a0, a1 1211; GENERIC-NEXT: addi16 sp, sp, 4 1212; GENERIC-NEXT: rts16 1213entry: 1214 %icmp = icmp uge i8 %x, 1 1215 ret i1 %icmp 1216} 1217 1218define i1 @ICMP_BIT_uge(i1 %x, i1 %y) { 1219; CHECK-LABEL: ICMP_BIT_uge: 1220; CHECK: # %bb.0: # %entry 1221; CHECK-NEXT: xori32 a0, a0, 1 1222; CHECK-NEXT: or16 a0, a1 1223; CHECK-NEXT: rts16 1224; 1225; GENERIC-LABEL: ICMP_BIT_uge: 1226; GENERIC: # %bb.0: # %entry 1227; GENERIC-NEXT: .cfi_def_cfa_offset 0 1228; GENERIC-NEXT: subi16 sp, sp, 4 1229; GENERIC-NEXT: .cfi_def_cfa_offset 4 1230; GENERIC-NEXT: movi16 a2, 1 1231; GENERIC-NEXT: xor16 a0, a2 1232; GENERIC-NEXT: or16 a0, a1 1233; GENERIC-NEXT: addi16 sp, sp, 4 1234; GENERIC-NEXT: rts16 1235entry: 1236 %icmp = icmp uge i1 %y, %x 1237 ret i1 %icmp 1238} 1239 1240define i1 @ICMP_BIT_I_uge(i1 %x) { 1241; CHECK-LABEL: ICMP_BIT_I_uge: 1242; CHECK: # %bb.0: # %entry 1243; CHECK-NEXT: rts16 1244; 1245; GENERIC-LABEL: ICMP_BIT_I_uge: 1246; GENERIC: # %bb.0: # %entry 1247; GENERIC-NEXT: .cfi_def_cfa_offset 0 1248; GENERIC-NEXT: subi16 sp, sp, 4 1249; GENERIC-NEXT: .cfi_def_cfa_offset 4 1250; GENERIC-NEXT: addi16 sp, sp, 4 1251; GENERIC-NEXT: rts16 1252entry: 1253 %icmp = icmp uge i1 %x, 1 1254 ret i1 %icmp 1255} 1256 1257 1258;ult 1259define i1 @icmpRR_ult(i32 %x, i32 %y) { 1260; CHECK-LABEL: icmpRR_ult: 1261; CHECK: # %bb.0: # %entry 1262; CHECK-NEXT: cmphs16 a1, a0 1263; CHECK-NEXT: mvcv16 a0 1264; CHECK-NEXT: rts16 1265; 1266; GENERIC-LABEL: icmpRR_ult: 1267; GENERIC: # %bb.0: # %entry 1268; GENERIC-NEXT: .cfi_def_cfa_offset 0 1269; GENERIC-NEXT: subi16 sp, sp, 4 1270; GENERIC-NEXT: .cfi_def_cfa_offset 4 1271; GENERIC-NEXT: cmphs16 a1, a0 1272; GENERIC-NEXT: mvcv16 a0 1273; GENERIC-NEXT: addi16 sp, sp, 4 1274; GENERIC-NEXT: rts16 1275entry: 1276 %icmp = icmp ult i32 %y, %x 1277 ret i1 %icmp 1278} 1279 1280define i1 @icmpRI_ult(i32 %x) { 1281; CHECK-LABEL: icmpRI_ult: 1282; CHECK: # %bb.0: # %entry 1283; CHECK-NEXT: cmphsi16 a0, 10 1284; CHECK-NEXT: mvcv16 a0 1285; CHECK-NEXT: rts16 1286; 1287; GENERIC-LABEL: icmpRI_ult: 1288; GENERIC: # %bb.0: # %entry 1289; GENERIC-NEXT: .cfi_def_cfa_offset 0 1290; GENERIC-NEXT: subi16 sp, sp, 4 1291; GENERIC-NEXT: .cfi_def_cfa_offset 4 1292; GENERIC-NEXT: cmphsi16 a0, 10 1293; GENERIC-NEXT: mvcv16 a0 1294; GENERIC-NEXT: addi16 sp, sp, 4 1295; GENERIC-NEXT: rts16 1296entry: 1297 %icmp = icmp ult i32 %x, 10 1298 ret i1 %icmp 1299} 1300 1301define i1 @icmpRI_X_ult(i32 %x) { 1302; CHECK-LABEL: icmpRI_X_ult: 1303; CHECK: # %bb.0: # %entry 1304; CHECK-NEXT: movih32 a1, 62 1305; CHECK-NEXT: ori32 a1, a1, 33768 1306; CHECK-NEXT: cmphs16 a0, a1 1307; CHECK-NEXT: mvcv16 a0 1308; CHECK-NEXT: rts16 1309; 1310; GENERIC-LABEL: icmpRI_X_ult: 1311; GENERIC: # %bb.0: # %entry 1312; GENERIC-NEXT: .cfi_def_cfa_offset 0 1313; GENERIC-NEXT: subi16 sp, sp, 4 1314; GENERIC-NEXT: .cfi_def_cfa_offset 4 1315; GENERIC-NEXT: movi16 a1, 0 1316; GENERIC-NEXT: lsli16 a1, a1, 24 1317; GENERIC-NEXT: movi16 a2, 62 1318; GENERIC-NEXT: lsli16 a2, a2, 16 1319; GENERIC-NEXT: or16 a2, a1 1320; GENERIC-NEXT: movi16 a1, 131 1321; GENERIC-NEXT: lsli16 a1, a1, 8 1322; GENERIC-NEXT: or16 a1, a2 1323; GENERIC-NEXT: movi16 a2, 232 1324; GENERIC-NEXT: or16 a2, a1 1325; GENERIC-NEXT: cmphs16 a0, a2 1326; GENERIC-NEXT: mvcv16 a0 1327; GENERIC-NEXT: addi16 sp, sp, 4 1328; GENERIC-NEXT: rts16 1329entry: 1330 %icmp = icmp ult i32 %x, 4097000 1331 ret i1 %icmp 1332} 1333 1334define i1 @ICMP_LONG_ult(i64 %x, i64 %y) { 1335; CHECK-LABEL: ICMP_LONG_ult: 1336; CHECK: # %bb.0: # %entry 1337; CHECK-NEXT: .cfi_def_cfa_offset 0 1338; CHECK-NEXT: subi16 sp, sp, 8 1339; CHECK-NEXT: .cfi_def_cfa_offset 8 1340; CHECK-NEXT: cmpne16 a3, a1 1341; CHECK-NEXT: mvc32 t0 1342; CHECK-NEXT: st32.w t0, (sp, 4) 1343; CHECK-NEXT: cmphs16 a3, a1 1344; CHECK-NEXT: mvcv16 a1 1345; CHECK-NEXT: cmphs16 a2, a0 1346; CHECK-NEXT: mvcv16 a0 1347; CHECK-NEXT: ld16.w a2, (sp, 4) 1348; CHECK-NEXT: btsti32 a2, 0 1349; CHECK-NEXT: movf32 a1, a0 1350; CHECK-NEXT: mov16 a0, a1 1351; CHECK-NEXT: addi16 sp, sp, 8 1352; CHECK-NEXT: rts16 1353; 1354; GENERIC-LABEL: ICMP_LONG_ult: 1355; GENERIC: # %bb.0: # %entry 1356; GENERIC-NEXT: subi16 sp, sp, 4 1357; GENERIC-NEXT: .cfi_def_cfa_offset 4 1358; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1359; GENERIC-NEXT: .cfi_offset l0, -4 1360; GENERIC-NEXT: subi16 sp, sp, 4 1361; GENERIC-NEXT: .cfi_def_cfa_offset 8 1362; GENERIC-NEXT: cmphs16 a3, a1 1363; GENERIC-NEXT: mvcv16 l0 1364; GENERIC-NEXT: cmphs16 a2, a0 1365; GENERIC-NEXT: mvcv16 a0 1366; GENERIC-NEXT: cmpne16 a3, a1 1367; GENERIC-NEXT: mvcv16 a1 1368; GENERIC-NEXT: btsti16 a1, 0 1369; GENERIC-NEXT: bt16 .LBB47_2 1370; GENERIC-NEXT: # %bb.1: # %entry 1371; GENERIC-NEXT: mov16 a0, l0 1372; GENERIC-NEXT: .LBB47_2: # %entry 1373; GENERIC-NEXT: addi16 sp, sp, 4 1374; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1375; GENERIC-NEXT: addi16 sp, sp, 4 1376; GENERIC-NEXT: rts16 1377entry: 1378 %icmp = icmp ult i64 %y, %x 1379 ret i1 %icmp 1380} 1381 1382define i1 @ICMP_LONG_I_ult(i64 %x) { 1383; CHECK-LABEL: ICMP_LONG_I_ult: 1384; CHECK: # %bb.0: # %entry 1385; CHECK-NEXT: or16 a0, a1 1386; CHECK-NEXT: cmpnei16 a0, 0 1387; CHECK-NEXT: mvcv16 a0 1388; CHECK-NEXT: rts16 1389; 1390; GENERIC-LABEL: ICMP_LONG_I_ult: 1391; GENERIC: # %bb.0: # %entry 1392; GENERIC-NEXT: .cfi_def_cfa_offset 0 1393; GENERIC-NEXT: subi16 sp, sp, 4 1394; GENERIC-NEXT: .cfi_def_cfa_offset 4 1395; GENERIC-NEXT: or16 a0, a1 1396; GENERIC-NEXT: cmpnei16 a0, 0 1397; GENERIC-NEXT: mvcv16 a0 1398; GENERIC-NEXT: addi16 sp, sp, 4 1399; GENERIC-NEXT: rts16 1400entry: 1401 %icmp = icmp ult i64 %x, 1 1402 ret i1 %icmp 1403} 1404 1405define i1 @ICMP_SHORT_ult(i16 %x, i16 %y) { 1406; CHECK-LABEL: ICMP_SHORT_ult: 1407; CHECK: # %bb.0: # %entry 1408; CHECK-NEXT: zexth16 a0, a0 1409; CHECK-NEXT: zexth16 a1, a1 1410; CHECK-NEXT: cmphs16 a1, a0 1411; CHECK-NEXT: mvcv16 a0 1412; CHECK-NEXT: rts16 1413; 1414; GENERIC-LABEL: ICMP_SHORT_ult: 1415; GENERIC: # %bb.0: # %entry 1416; GENERIC-NEXT: subi16 sp, sp, 4 1417; GENERIC-NEXT: .cfi_def_cfa_offset 4 1418; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1419; GENERIC-NEXT: .cfi_offset l0, -4 1420; GENERIC-NEXT: subi16 sp, sp, 4 1421; GENERIC-NEXT: .cfi_def_cfa_offset 8 1422; GENERIC-NEXT: movi16 a2, 0 1423; GENERIC-NEXT: lsli16 a3, a2, 24 1424; GENERIC-NEXT: lsli16 a2, a2, 16 1425; GENERIC-NEXT: or16 a2, a3 1426; GENERIC-NEXT: movi16 a3, 255 1427; GENERIC-NEXT: lsli16 l0, a3, 8 1428; GENERIC-NEXT: or16 l0, a2 1429; GENERIC-NEXT: or16 l0, a3 1430; GENERIC-NEXT: and16 a0, l0 1431; GENERIC-NEXT: and16 l0, a1 1432; GENERIC-NEXT: cmphs16 l0, a0 1433; GENERIC-NEXT: mvcv16 a0 1434; GENERIC-NEXT: addi16 sp, sp, 4 1435; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1436; GENERIC-NEXT: addi16 sp, sp, 4 1437; GENERIC-NEXT: rts16 1438entry: 1439 %icmp = icmp ult i16 %y, %x 1440 ret i1 %icmp 1441} 1442 1443define i1 @ICMP_SHORT_I_ult(i16 %x) { 1444; CHECK-LABEL: ICMP_SHORT_I_ult: 1445; CHECK: # %bb.0: # %entry 1446; CHECK-NEXT: zexth16 a0, a0 1447; CHECK-NEXT: cmpnei16 a0, 0 1448; CHECK-NEXT: mvcv16 a0 1449; CHECK-NEXT: rts16 1450; 1451; GENERIC-LABEL: ICMP_SHORT_I_ult: 1452; GENERIC: # %bb.0: # %entry 1453; GENERIC-NEXT: .cfi_def_cfa_offset 0 1454; GENERIC-NEXT: subi16 sp, sp, 4 1455; GENERIC-NEXT: .cfi_def_cfa_offset 4 1456; GENERIC-NEXT: movi16 a1, 0 1457; GENERIC-NEXT: lsli16 a2, a1, 24 1458; GENERIC-NEXT: lsli16 a1, a1, 16 1459; GENERIC-NEXT: or16 a1, a2 1460; GENERIC-NEXT: movi16 a2, 255 1461; GENERIC-NEXT: lsli16 a3, a2, 8 1462; GENERIC-NEXT: or16 a3, a1 1463; GENERIC-NEXT: or16 a3, a2 1464; GENERIC-NEXT: and16 a3, a0 1465; GENERIC-NEXT: cmpnei16 a3, 0 1466; GENERIC-NEXT: mvcv16 a0 1467; GENERIC-NEXT: addi16 sp, sp, 4 1468; GENERIC-NEXT: rts16 1469entry: 1470 %icmp = icmp ult i16 %x, 1 1471 ret i1 %icmp 1472} 1473 1474define i1 @ICMP_CHAR_ult(i8 %x, i8 %y) { 1475; CHECK-LABEL: ICMP_CHAR_ult: 1476; CHECK: # %bb.0: # %entry 1477; CHECK-NEXT: zextb16 a0, a0 1478; CHECK-NEXT: zextb16 a1, a1 1479; CHECK-NEXT: cmphs16 a1, a0 1480; CHECK-NEXT: mvcv16 a0 1481; CHECK-NEXT: rts16 1482; 1483; GENERIC-LABEL: ICMP_CHAR_ult: 1484; GENERIC: # %bb.0: # %entry 1485; GENERIC-NEXT: .cfi_def_cfa_offset 0 1486; GENERIC-NEXT: subi16 sp, sp, 4 1487; GENERIC-NEXT: .cfi_def_cfa_offset 4 1488; GENERIC-NEXT: movi16 a2, 255 1489; GENERIC-NEXT: and16 a0, a2 1490; GENERIC-NEXT: and16 a1, a2 1491; GENERIC-NEXT: cmphs16 a1, a0 1492; GENERIC-NEXT: mvcv16 a0 1493; GENERIC-NEXT: addi16 sp, sp, 4 1494; GENERIC-NEXT: rts16 1495entry: 1496 %icmp = icmp ult i8 %y, %x 1497 ret i1 %icmp 1498} 1499 1500define i1 @ICMP_CHAR_I_ult(i8 %x) { 1501; CHECK-LABEL: ICMP_CHAR_I_ult: 1502; CHECK: # %bb.0: # %entry 1503; CHECK-NEXT: zextb16 a0, a0 1504; CHECK-NEXT: cmpnei16 a0, 0 1505; CHECK-NEXT: mvcv16 a0 1506; CHECK-NEXT: rts16 1507; 1508; GENERIC-LABEL: ICMP_CHAR_I_ult: 1509; GENERIC: # %bb.0: # %entry 1510; GENERIC-NEXT: .cfi_def_cfa_offset 0 1511; GENERIC-NEXT: subi16 sp, sp, 4 1512; GENERIC-NEXT: .cfi_def_cfa_offset 4 1513; GENERIC-NEXT: movi16 a1, 255 1514; GENERIC-NEXT: and16 a1, a0 1515; GENERIC-NEXT: cmpnei16 a1, 0 1516; GENERIC-NEXT: mvcv16 a0 1517; GENERIC-NEXT: addi16 sp, sp, 4 1518; GENERIC-NEXT: rts16 1519entry: 1520 %icmp = icmp ult i8 %x, 1 1521 ret i1 %icmp 1522} 1523 1524define i1 @ICMP_BIT_ult(i1 %x, i1 %y) { 1525; CHECK-LABEL: ICMP_BIT_ult: 1526; CHECK: # %bb.0: # %entry 1527; CHECK-NEXT: xori32 a1, a1, 1 1528; CHECK-NEXT: and16 a0, a1 1529; CHECK-NEXT: rts16 1530; 1531; GENERIC-LABEL: ICMP_BIT_ult: 1532; GENERIC: # %bb.0: # %entry 1533; GENERIC-NEXT: .cfi_def_cfa_offset 0 1534; GENERIC-NEXT: subi16 sp, sp, 4 1535; GENERIC-NEXT: .cfi_def_cfa_offset 4 1536; GENERIC-NEXT: movi16 a2, 1 1537; GENERIC-NEXT: xor16 a2, a1 1538; GENERIC-NEXT: and16 a0, a2 1539; GENERIC-NEXT: addi16 sp, sp, 4 1540; GENERIC-NEXT: rts16 1541entry: 1542 %icmp = icmp ult i1 %y, %x 1543 ret i1 %icmp 1544} 1545 1546define i1 @ICMP_BIT_I_ult(i1 %x) { 1547; CHECK-LABEL: ICMP_BIT_I_ult: 1548; CHECK: # %bb.0: # %entry 1549; CHECK-NEXT: xori32 a0, a0, 1 1550; CHECK-NEXT: rts16 1551; 1552; GENERIC-LABEL: ICMP_BIT_I_ult: 1553; GENERIC: # %bb.0: # %entry 1554; GENERIC-NEXT: .cfi_def_cfa_offset 0 1555; GENERIC-NEXT: subi16 sp, sp, 4 1556; GENERIC-NEXT: .cfi_def_cfa_offset 4 1557; GENERIC-NEXT: movi16 a1, 1 1558; GENERIC-NEXT: xor16 a0, a1 1559; GENERIC-NEXT: addi16 sp, sp, 4 1560; GENERIC-NEXT: rts16 1561entry: 1562 %icmp = icmp ult i1 %x, 1 1563 ret i1 %icmp 1564} 1565 1566 1567;ule 1568define i1 @icmpRR_ule(i32 %x, i32 %y) { 1569; CHECK-LABEL: icmpRR_ule: 1570; CHECK: # %bb.0: # %entry 1571; CHECK-NEXT: cmphs16 a0, a1 1572; CHECK-NEXT: mvc32 a0 1573; CHECK-NEXT: rts16 1574; 1575; GENERIC-LABEL: icmpRR_ule: 1576; GENERIC: # %bb.0: # %entry 1577; GENERIC-NEXT: .cfi_def_cfa_offset 0 1578; GENERIC-NEXT: subi16 sp, sp, 4 1579; GENERIC-NEXT: .cfi_def_cfa_offset 4 1580; GENERIC-NEXT: cmphs16 a0, a1 1581; GENERIC-NEXT: mvcv16 a1 1582; GENERIC-NEXT: movi16 a0, 1 1583; GENERIC-NEXT: subu16 a0, a1 1584; GENERIC-NEXT: addi16 sp, sp, 4 1585; GENERIC-NEXT: rts16 1586entry: 1587 %icmp = icmp ule i32 %y, %x 1588 ret i1 %icmp 1589} 1590 1591define i1 @icmpRI_ule(i32 %x) { 1592; CHECK-LABEL: icmpRI_ule: 1593; CHECK: # %bb.0: # %entry 1594; CHECK-NEXT: cmphsi16 a0, 11 1595; CHECK-NEXT: mvcv16 a0 1596; CHECK-NEXT: rts16 1597; 1598; GENERIC-LABEL: icmpRI_ule: 1599; GENERIC: # %bb.0: # %entry 1600; GENERIC-NEXT: .cfi_def_cfa_offset 0 1601; GENERIC-NEXT: subi16 sp, sp, 4 1602; GENERIC-NEXT: .cfi_def_cfa_offset 4 1603; GENERIC-NEXT: cmphsi16 a0, 11 1604; GENERIC-NEXT: mvcv16 a0 1605; GENERIC-NEXT: addi16 sp, sp, 4 1606; GENERIC-NEXT: rts16 1607entry: 1608 %icmp = icmp ule i32 %x, 10 1609 ret i1 %icmp 1610} 1611 1612define i1 @icmpRI_X_ule(i32 %x) { 1613; CHECK-LABEL: icmpRI_X_ule: 1614; CHECK: # %bb.0: # %entry 1615; CHECK-NEXT: movih32 a1, 62 1616; CHECK-NEXT: ori32 a1, a1, 33769 1617; CHECK-NEXT: cmphs16 a0, a1 1618; CHECK-NEXT: mvcv16 a0 1619; CHECK-NEXT: rts16 1620; 1621; GENERIC-LABEL: icmpRI_X_ule: 1622; GENERIC: # %bb.0: # %entry 1623; GENERIC-NEXT: .cfi_def_cfa_offset 0 1624; GENERIC-NEXT: subi16 sp, sp, 4 1625; GENERIC-NEXT: .cfi_def_cfa_offset 4 1626; GENERIC-NEXT: movi16 a1, 0 1627; GENERIC-NEXT: lsli16 a1, a1, 24 1628; GENERIC-NEXT: movi16 a2, 62 1629; GENERIC-NEXT: lsli16 a2, a2, 16 1630; GENERIC-NEXT: or16 a2, a1 1631; GENERIC-NEXT: movi16 a1, 131 1632; GENERIC-NEXT: lsli16 a1, a1, 8 1633; GENERIC-NEXT: or16 a1, a2 1634; GENERIC-NEXT: movi16 a2, 233 1635; GENERIC-NEXT: or16 a2, a1 1636; GENERIC-NEXT: cmphs16 a0, a2 1637; GENERIC-NEXT: mvcv16 a0 1638; GENERIC-NEXT: addi16 sp, sp, 4 1639; GENERIC-NEXT: rts16 1640entry: 1641 %icmp = icmp ule i32 %x, 4097000 1642 ret i1 %icmp 1643} 1644 1645define i1 @ICMP_LONG_ule(i64 %x, i64 %y) { 1646; CHECK-LABEL: ICMP_LONG_ule: 1647; CHECK: # %bb.0: # %entry 1648; CHECK-NEXT: .cfi_def_cfa_offset 0 1649; CHECK-NEXT: subi16 sp, sp, 16 1650; CHECK-NEXT: .cfi_def_cfa_offset 16 1651; CHECK-NEXT: cmphs16 a1, a3 1652; CHECK-NEXT: mvc32 t0 1653; CHECK-NEXT: st32.w t0, (sp, 12) 1654; CHECK-NEXT: cmphs16 a0, a2 1655; CHECK-NEXT: mvc32 a0 1656; CHECK-NEXT: st16.w a0, (sp, 4) 1657; CHECK-NEXT: cmpne16 a3, a1 1658; CHECK-NEXT: mvc32 a0 1659; CHECK-NEXT: st16.w a0, (sp, 8) 1660; CHECK-NEXT: ld16.w a0, (sp, 4) 1661; CHECK-NEXT: btsti32 a0, 0 1662; CHECK-NEXT: mvc32 a1 1663; CHECK-NEXT: ld16.w a0, (sp, 12) 1664; CHECK-NEXT: btsti32 a0, 0 1665; CHECK-NEXT: mvc32 a0 1666; CHECK-NEXT: ld16.w a2, (sp, 8) 1667; CHECK-NEXT: btsti32 a2, 0 1668; CHECK-NEXT: movf32 a0, a1 1669; CHECK-NEXT: addi16 sp, sp, 16 1670; CHECK-NEXT: rts16 1671; 1672; GENERIC-LABEL: ICMP_LONG_ule: 1673; GENERIC: # %bb.0: # %entry 1674; GENERIC-NEXT: subi16 sp, sp, 8 1675; GENERIC-NEXT: .cfi_def_cfa_offset 8 1676; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 1677; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1678; GENERIC-NEXT: .cfi_offset l1, -4 1679; GENERIC-NEXT: .cfi_offset l0, -8 1680; GENERIC-NEXT: subi16 sp, sp, 4 1681; GENERIC-NEXT: .cfi_def_cfa_offset 12 1682; GENERIC-NEXT: mov16 l0, a0 1683; GENERIC-NEXT: cmphs16 a1, a3 1684; GENERIC-NEXT: mvcv16 l1 1685; GENERIC-NEXT: movi16 a0, 1 1686; GENERIC-NEXT: cmphs16 l0, a2 1687; GENERIC-NEXT: mvcv16 a2 1688; GENERIC-NEXT: cmpne16 a3, a1 1689; GENERIC-NEXT: mvcv16 a1 1690; GENERIC-NEXT: btsti16 a1, 0 1691; GENERIC-NEXT: bt16 .LBB58_2 1692; GENERIC-NEXT: # %bb.1: # %entry 1693; GENERIC-NEXT: subu16 a0, l1 1694; GENERIC-NEXT: br32 .LBB58_3 1695; GENERIC-NEXT: .LBB58_2: 1696; GENERIC-NEXT: subu16 a0, a2 1697; GENERIC-NEXT: .LBB58_3: # %entry 1698; GENERIC-NEXT: addi16 sp, sp, 4 1699; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1700; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 1701; GENERIC-NEXT: addi16 sp, sp, 8 1702; GENERIC-NEXT: rts16 1703entry: 1704 %icmp = icmp ule i64 %y, %x 1705 ret i1 %icmp 1706} 1707 1708define i1 @ICMP_LONG_I_ule(i64 %x) { 1709; CHECK-LABEL: ICMP_LONG_I_ule: 1710; CHECK: # %bb.0: # %entry 1711; CHECK-NEXT: .cfi_def_cfa_offset 0 1712; CHECK-NEXT: subi16 sp, sp, 8 1713; CHECK-NEXT: .cfi_def_cfa_offset 8 1714; CHECK-NEXT: cmpnei16 a1, 0 1715; CHECK-NEXT: mvc32 a1 1716; CHECK-NEXT: st16.w a1, (sp, 4) 1717; CHECK-NEXT: cmphsi16 a0, 2 1718; CHECK-NEXT: mvcv16 a1 1719; CHECK-NEXT: movi16 a0, 0 1720; CHECK-NEXT: ld16.w a2, (sp, 4) 1721; CHECK-NEXT: btsti32 a2, 0 1722; CHECK-NEXT: movf32 a0, a1 1723; CHECK-NEXT: addi16 sp, sp, 8 1724; CHECK-NEXT: rts16 1725; 1726; GENERIC-LABEL: ICMP_LONG_I_ule: 1727; GENERIC: # %bb.0: # %entry 1728; GENERIC-NEXT: .cfi_def_cfa_offset 0 1729; GENERIC-NEXT: subi16 sp, sp, 4 1730; GENERIC-NEXT: .cfi_def_cfa_offset 4 1731; GENERIC-NEXT: cmphsi16 a0, 2 1732; GENERIC-NEXT: mvcv16 a0 1733; GENERIC-NEXT: cmpnei16 a1, 0 1734; GENERIC-NEXT: mvcv16 a1 1735; GENERIC-NEXT: btsti16 a1, 0 1736; GENERIC-NEXT: bt16 .LBB59_2 1737; GENERIC-NEXT: # %bb.1: # %entry 1738; GENERIC-NEXT: movi16 a0, 0 1739; GENERIC-NEXT: .LBB59_2: # %entry 1740; GENERIC-NEXT: addi16 sp, sp, 4 1741; GENERIC-NEXT: rts16 1742entry: 1743 %icmp = icmp ule i64 %x, 1 1744 ret i1 %icmp 1745} 1746 1747define i1 @ICMP_SHORT_ule(i16 %x, i16 %y) { 1748; CHECK-LABEL: ICMP_SHORT_ule: 1749; CHECK: # %bb.0: # %entry 1750; CHECK-NEXT: zexth16 a1, a1 1751; CHECK-NEXT: zexth16 a0, a0 1752; CHECK-NEXT: cmphs16 a0, a1 1753; CHECK-NEXT: mvc32 a0 1754; CHECK-NEXT: rts16 1755; 1756; GENERIC-LABEL: ICMP_SHORT_ule: 1757; GENERIC: # %bb.0: # %entry 1758; GENERIC-NEXT: subi16 sp, sp, 4 1759; GENERIC-NEXT: .cfi_def_cfa_offset 4 1760; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1761; GENERIC-NEXT: .cfi_offset l0, -4 1762; GENERIC-NEXT: subi16 sp, sp, 4 1763; GENERIC-NEXT: .cfi_def_cfa_offset 8 1764; GENERIC-NEXT: movi16 a2, 0 1765; GENERIC-NEXT: lsli16 a3, a2, 24 1766; GENERIC-NEXT: lsli16 a2, a2, 16 1767; GENERIC-NEXT: or16 a2, a3 1768; GENERIC-NEXT: movi16 a3, 255 1769; GENERIC-NEXT: lsli16 l0, a3, 8 1770; GENERIC-NEXT: or16 l0, a2 1771; GENERIC-NEXT: or16 l0, a3 1772; GENERIC-NEXT: and16 a1, l0 1773; GENERIC-NEXT: and16 l0, a0 1774; GENERIC-NEXT: cmphs16 l0, a1 1775; GENERIC-NEXT: mvcv16 a1 1776; GENERIC-NEXT: movi16 a0, 1 1777; GENERIC-NEXT: subu16 a0, a1 1778; GENERIC-NEXT: addi16 sp, sp, 4 1779; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1780; GENERIC-NEXT: addi16 sp, sp, 4 1781; GENERIC-NEXT: rts16 1782entry: 1783 %icmp = icmp ule i16 %y, %x 1784 ret i1 %icmp 1785} 1786 1787define i1 @ICMP_SHORT_I_ule(i16 %x) { 1788; CHECK-LABEL: ICMP_SHORT_I_ule: 1789; CHECK: # %bb.0: # %entry 1790; CHECK-NEXT: zexth16 a0, a0 1791; CHECK-NEXT: cmphsi16 a0, 2 1792; CHECK-NEXT: mvcv16 a0 1793; CHECK-NEXT: rts16 1794; 1795; GENERIC-LABEL: ICMP_SHORT_I_ule: 1796; GENERIC: # %bb.0: # %entry 1797; GENERIC-NEXT: .cfi_def_cfa_offset 0 1798; GENERIC-NEXT: subi16 sp, sp, 4 1799; GENERIC-NEXT: .cfi_def_cfa_offset 4 1800; GENERIC-NEXT: movi16 a1, 0 1801; GENERIC-NEXT: lsli16 a2, a1, 24 1802; GENERIC-NEXT: lsli16 a1, a1, 16 1803; GENERIC-NEXT: or16 a1, a2 1804; GENERIC-NEXT: movi16 a2, 255 1805; GENERIC-NEXT: lsli16 a3, a2, 8 1806; GENERIC-NEXT: or16 a3, a1 1807; GENERIC-NEXT: or16 a3, a2 1808; GENERIC-NEXT: and16 a3, a0 1809; GENERIC-NEXT: cmphsi16 a3, 2 1810; GENERIC-NEXT: mvcv16 a0 1811; GENERIC-NEXT: addi16 sp, sp, 4 1812; GENERIC-NEXT: rts16 1813entry: 1814 %icmp = icmp ule i16 %x, 1 1815 ret i1 %icmp 1816} 1817 1818define i1 @ICMP_CHAR_ule(i8 %x, i8 %y) { 1819; CHECK-LABEL: ICMP_CHAR_ule: 1820; CHECK: # %bb.0: # %entry 1821; CHECK-NEXT: zextb16 a1, a1 1822; CHECK-NEXT: zextb16 a0, a0 1823; CHECK-NEXT: cmphs16 a0, a1 1824; CHECK-NEXT: mvc32 a0 1825; CHECK-NEXT: rts16 1826; 1827; GENERIC-LABEL: ICMP_CHAR_ule: 1828; GENERIC: # %bb.0: # %entry 1829; GENERIC-NEXT: .cfi_def_cfa_offset 0 1830; GENERIC-NEXT: subi16 sp, sp, 4 1831; GENERIC-NEXT: .cfi_def_cfa_offset 4 1832; GENERIC-NEXT: movi16 a2, 255 1833; GENERIC-NEXT: and16 a1, a2 1834; GENERIC-NEXT: and16 a0, a2 1835; GENERIC-NEXT: cmphs16 a0, a1 1836; GENERIC-NEXT: mvcv16 a1 1837; GENERIC-NEXT: movi16 a0, 1 1838; GENERIC-NEXT: subu16 a0, a1 1839; GENERIC-NEXT: addi16 sp, sp, 4 1840; GENERIC-NEXT: rts16 1841entry: 1842 %icmp = icmp ule i8 %y, %x 1843 ret i1 %icmp 1844} 1845 1846define i1 @ICMP_CHAR_I_ule(i8 %x) { 1847; CHECK-LABEL: ICMP_CHAR_I_ule: 1848; CHECK: # %bb.0: # %entry 1849; CHECK-NEXT: zextb16 a0, a0 1850; CHECK-NEXT: cmphsi16 a0, 2 1851; CHECK-NEXT: mvcv16 a0 1852; CHECK-NEXT: rts16 1853; 1854; GENERIC-LABEL: ICMP_CHAR_I_ule: 1855; GENERIC: # %bb.0: # %entry 1856; GENERIC-NEXT: .cfi_def_cfa_offset 0 1857; GENERIC-NEXT: subi16 sp, sp, 4 1858; GENERIC-NEXT: .cfi_def_cfa_offset 4 1859; GENERIC-NEXT: movi16 a1, 255 1860; GENERIC-NEXT: and16 a1, a0 1861; GENERIC-NEXT: cmphsi16 a1, 2 1862; GENERIC-NEXT: mvcv16 a0 1863; GENERIC-NEXT: addi16 sp, sp, 4 1864; GENERIC-NEXT: rts16 1865entry: 1866 %icmp = icmp ule i8 %x, 1 1867 ret i1 %icmp 1868} 1869 1870define i1 @ICMP_BIT_ule(i1 %x, i1 %y) { 1871; CHECK-LABEL: ICMP_BIT_ule: 1872; CHECK: # %bb.0: # %entry 1873; CHECK-NEXT: xori32 a1, a1, 1 1874; CHECK-NEXT: or16 a0, a1 1875; CHECK-NEXT: rts16 1876; 1877; GENERIC-LABEL: ICMP_BIT_ule: 1878; GENERIC: # %bb.0: # %entry 1879; GENERIC-NEXT: .cfi_def_cfa_offset 0 1880; GENERIC-NEXT: subi16 sp, sp, 4 1881; GENERIC-NEXT: .cfi_def_cfa_offset 4 1882; GENERIC-NEXT: movi16 a2, 1 1883; GENERIC-NEXT: xor16 a2, a1 1884; GENERIC-NEXT: or16 a0, a2 1885; GENERIC-NEXT: addi16 sp, sp, 4 1886; GENERIC-NEXT: rts16 1887entry: 1888 %icmp = icmp ule i1 %y, %x 1889 ret i1 %icmp 1890} 1891 1892define i1 @ICMP_BIT_I_ule(i1 %x) { 1893; CHECK-LABEL: ICMP_BIT_I_ule: 1894; CHECK: # %bb.0: # %entry 1895; CHECK-NEXT: movi16 a0, 1 1896; CHECK-NEXT: rts16 1897; 1898; GENERIC-LABEL: ICMP_BIT_I_ule: 1899; GENERIC: # %bb.0: # %entry 1900; GENERIC-NEXT: .cfi_def_cfa_offset 0 1901; GENERIC-NEXT: subi16 sp, sp, 4 1902; GENERIC-NEXT: .cfi_def_cfa_offset 4 1903; GENERIC-NEXT: movi16 a0, 1 1904; GENERIC-NEXT: addi16 sp, sp, 4 1905; GENERIC-NEXT: rts16 1906entry: 1907 %icmp = icmp ule i1 %x, 1 1908 ret i1 %icmp 1909} 1910 1911;sgt 1912define i1 @icmpRR_sgt(i32 %x, i32 %y) { 1913; CHECK-LABEL: icmpRR_sgt: 1914; CHECK: # %bb.0: # %entry 1915; CHECK-NEXT: cmplt16 a0, a1 1916; CHECK-NEXT: mvc32 a0 1917; CHECK-NEXT: rts16 1918; 1919; GENERIC-LABEL: icmpRR_sgt: 1920; GENERIC: # %bb.0: # %entry 1921; GENERIC-NEXT: .cfi_def_cfa_offset 0 1922; GENERIC-NEXT: subi16 sp, sp, 4 1923; GENERIC-NEXT: .cfi_def_cfa_offset 4 1924; GENERIC-NEXT: cmplt16 a0, a1 1925; GENERIC-NEXT: mvcv16 a1 1926; GENERIC-NEXT: movi16 a0, 1 1927; GENERIC-NEXT: subu16 a0, a1 1928; GENERIC-NEXT: addi16 sp, sp, 4 1929; GENERIC-NEXT: rts16 1930entry: 1931 %icmp = icmp sgt i32 %y, %x 1932 ret i1 %icmp 1933} 1934 1935define i1 @icmpRI_sgt(i32 %x) { 1936; CHECK-LABEL: icmpRI_sgt: 1937; CHECK: # %bb.0: # %entry 1938; CHECK-NEXT: movi16 a1, 10 1939; CHECK-NEXT: cmplt16 a1, a0 1940; CHECK-NEXT: mvc32 a0 1941; CHECK-NEXT: rts16 1942; 1943; GENERIC-LABEL: icmpRI_sgt: 1944; GENERIC: # %bb.0: # %entry 1945; GENERIC-NEXT: .cfi_def_cfa_offset 0 1946; GENERIC-NEXT: subi16 sp, sp, 4 1947; GENERIC-NEXT: .cfi_def_cfa_offset 4 1948; GENERIC-NEXT: movi16 a1, 10 1949; GENERIC-NEXT: cmplt16 a1, a0 1950; GENERIC-NEXT: mvcv16 a1 1951; GENERIC-NEXT: movi16 a0, 1 1952; GENERIC-NEXT: subu16 a0, a1 1953; GENERIC-NEXT: addi16 sp, sp, 4 1954; GENERIC-NEXT: rts16 1955entry: 1956 %icmp = icmp sgt i32 %x, 10 1957 ret i1 %icmp 1958} 1959 1960define i1 @icmpRI_X_sgt(i32 %x) { 1961; CHECK-LABEL: icmpRI_X_sgt: 1962; CHECK: # %bb.0: # %entry 1963; CHECK-NEXT: movih32 a1, 62 1964; CHECK-NEXT: ori32 a1, a1, 33768 1965; CHECK-NEXT: cmplt16 a1, a0 1966; CHECK-NEXT: mvc32 a0 1967; CHECK-NEXT: rts16 1968; 1969; GENERIC-LABEL: icmpRI_X_sgt: 1970; GENERIC: # %bb.0: # %entry 1971; GENERIC-NEXT: .cfi_def_cfa_offset 0 1972; GENERIC-NEXT: subi16 sp, sp, 4 1973; GENERIC-NEXT: .cfi_def_cfa_offset 4 1974; GENERIC-NEXT: movi16 a1, 0 1975; GENERIC-NEXT: lsli16 a1, a1, 24 1976; GENERIC-NEXT: movi16 a2, 62 1977; GENERIC-NEXT: lsli16 a2, a2, 16 1978; GENERIC-NEXT: or16 a2, a1 1979; GENERIC-NEXT: movi16 a1, 131 1980; GENERIC-NEXT: lsli16 a1, a1, 8 1981; GENERIC-NEXT: or16 a1, a2 1982; GENERIC-NEXT: movi16 a2, 232 1983; GENERIC-NEXT: or16 a2, a1 1984; GENERIC-NEXT: cmplt16 a2, a0 1985; GENERIC-NEXT: mvcv16 a1 1986; GENERIC-NEXT: movi16 a0, 1 1987; GENERIC-NEXT: subu16 a0, a1 1988; GENERIC-NEXT: addi16 sp, sp, 4 1989; GENERIC-NEXT: rts16 1990entry: 1991 %icmp = icmp sgt i32 %x, 4097000 1992 ret i1 %icmp 1993} 1994 1995define i1 @ICMP_LONG_sgt(i64 %x, i64 %y) { 1996; CHECK-LABEL: ICMP_LONG_sgt: 1997; CHECK: # %bb.0: # %entry 1998; CHECK-NEXT: .cfi_def_cfa_offset 0 1999; CHECK-NEXT: subi16 sp, sp, 12 2000; CHECK-NEXT: .cfi_def_cfa_offset 12 2001; CHECK-NEXT: cmplt16 a1, a3 2002; CHECK-NEXT: mvc32 t0 2003; CHECK-NEXT: st32.w t0, (sp, 4) 2004; CHECK-NEXT: cmpne16 a3, a1 2005; CHECK-NEXT: mvc32 a1 2006; CHECK-NEXT: st16.w a1, (sp, 8) 2007; CHECK-NEXT: cmphs16 a0, a2 2008; CHECK-NEXT: mvcv16 a1 2009; CHECK-NEXT: ld16.w a0, (sp, 4) 2010; CHECK-NEXT: btsti32 a0, 0 2011; CHECK-NEXT: mvc32 a0 2012; CHECK-NEXT: ld16.w a2, (sp, 8) 2013; CHECK-NEXT: btsti32 a2, 0 2014; CHECK-NEXT: movf32 a0, a1 2015; CHECK-NEXT: addi16 sp, sp, 12 2016; CHECK-NEXT: rts16 2017; 2018; GENERIC-LABEL: ICMP_LONG_sgt: 2019; GENERIC: # %bb.0: # %entry 2020; GENERIC-NEXT: subi16 sp, sp, 4 2021; GENERIC-NEXT: .cfi_def_cfa_offset 4 2022; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2023; GENERIC-NEXT: .cfi_offset l0, -4 2024; GENERIC-NEXT: subi16 sp, sp, 4 2025; GENERIC-NEXT: .cfi_def_cfa_offset 8 2026; GENERIC-NEXT: cmplt16 a1, a3 2027; GENERIC-NEXT: mvcv16 l0 2028; GENERIC-NEXT: cmphs16 a0, a2 2029; GENERIC-NEXT: mvcv16 a0 2030; GENERIC-NEXT: cmpne16 a3, a1 2031; GENERIC-NEXT: mvcv16 a1 2032; GENERIC-NEXT: btsti16 a1, 0 2033; GENERIC-NEXT: bt16 .LBB69_2 2034; GENERIC-NEXT: # %bb.1: # %entry 2035; GENERIC-NEXT: movi16 a0, 1 2036; GENERIC-NEXT: subu16 a0, l0 2037; GENERIC-NEXT: .LBB69_2: # %entry 2038; GENERIC-NEXT: addi16 sp, sp, 4 2039; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2040; GENERIC-NEXT: addi16 sp, sp, 4 2041; GENERIC-NEXT: rts16 2042entry: 2043 %icmp = icmp sgt i64 %y, %x 2044 ret i1 %icmp 2045} 2046 2047define i1 @ICMP_LONG_I_sgt(i64 %x) { 2048; CHECK-LABEL: ICMP_LONG_I_sgt: 2049; CHECK: # %bb.0: # %entry 2050; CHECK-NEXT: .cfi_def_cfa_offset 0 2051; CHECK-NEXT: subi16 sp, sp, 12 2052; CHECK-NEXT: .cfi_def_cfa_offset 12 2053; CHECK-NEXT: movi16 a2, 0 2054; CHECK-NEXT: cmplt16 a2, a1 2055; CHECK-NEXT: mvc32 a2 2056; CHECK-NEXT: st16.w a2, (sp, 8) 2057; CHECK-NEXT: movi16 a2, 1 2058; CHECK-NEXT: cmphs16 a2, a0 2059; CHECK-NEXT: mvcv16 a2 2060; CHECK-NEXT: cmpnei16 a1, 0 2061; CHECK-NEXT: mvc32 a0 2062; CHECK-NEXT: st16.w a0, (sp, 4) 2063; CHECK-NEXT: ld16.w a0, (sp, 8) 2064; CHECK-NEXT: btsti32 a0, 0 2065; CHECK-NEXT: mvc32 a0 2066; CHECK-NEXT: ld16.w a1, (sp, 4) 2067; CHECK-NEXT: btsti32 a1, 0 2068; CHECK-NEXT: movf32 a0, a2 2069; CHECK-NEXT: addi16 sp, sp, 12 2070; CHECK-NEXT: rts16 2071; 2072; GENERIC-LABEL: ICMP_LONG_I_sgt: 2073; GENERIC: # %bb.0: # %entry 2074; GENERIC-NEXT: .cfi_def_cfa_offset 0 2075; GENERIC-NEXT: subi16 sp, sp, 4 2076; GENERIC-NEXT: .cfi_def_cfa_offset 4 2077; GENERIC-NEXT: movi16 a2, 0 2078; GENERIC-NEXT: cmplt16 a2, a1 2079; GENERIC-NEXT: mvcv16 a2 2080; GENERIC-NEXT: movi16 a3, 1 2081; GENERIC-NEXT: cmphs16 a3, a0 2082; GENERIC-NEXT: mvcv16 a0 2083; GENERIC-NEXT: cmpnei16 a1, 0 2084; GENERIC-NEXT: mvcv16 a1 2085; GENERIC-NEXT: btsti16 a1, 0 2086; GENERIC-NEXT: bt16 .LBB70_2 2087; GENERIC-NEXT: # %bb.1: # %entry 2088; GENERIC-NEXT: subu16 a3, a2 2089; GENERIC-NEXT: mov16 a0, a3 2090; GENERIC-NEXT: .LBB70_2: # %entry 2091; GENERIC-NEXT: addi16 sp, sp, 4 2092; GENERIC-NEXT: rts16 2093entry: 2094 %icmp = icmp sgt i64 %x, 1 2095 ret i1 %icmp 2096} 2097 2098define i1 @ICMP_SHORT_sgt(i16 %x, i16 %y) { 2099; CHECK-LABEL: ICMP_SHORT_sgt: 2100; CHECK: # %bb.0: # %entry 2101; CHECK-NEXT: sexth16 a1, a1 2102; CHECK-NEXT: sexth16 a0, a0 2103; CHECK-NEXT: cmplt16 a0, a1 2104; CHECK-NEXT: mvc32 a0 2105; CHECK-NEXT: rts16 2106; 2107; GENERIC-LABEL: ICMP_SHORT_sgt: 2108; GENERIC: # %bb.0: # %entry 2109; GENERIC-NEXT: .cfi_def_cfa_offset 0 2110; GENERIC-NEXT: subi16 sp, sp, 4 2111; GENERIC-NEXT: .cfi_def_cfa_offset 4 2112; GENERIC-NEXT: sexth16 a1, a1 2113; GENERIC-NEXT: sexth16 a0, a0 2114; GENERIC-NEXT: cmplt16 a0, a1 2115; GENERIC-NEXT: mvcv16 a1 2116; GENERIC-NEXT: movi16 a0, 1 2117; GENERIC-NEXT: subu16 a0, a1 2118; GENERIC-NEXT: addi16 sp, sp, 4 2119; GENERIC-NEXT: rts16 2120entry: 2121 %icmp = icmp sgt i16 %y, %x 2122 ret i1 %icmp 2123} 2124 2125define i1 @ICMP_SHORT_I_sgt(i16 %x) { 2126; CHECK-LABEL: ICMP_SHORT_I_sgt: 2127; CHECK: # %bb.0: # %entry 2128; CHECK-NEXT: sexth16 a0, a0 2129; CHECK-NEXT: movi16 a1, 1 2130; CHECK-NEXT: cmplt16 a1, a0 2131; CHECK-NEXT: mvc32 a0 2132; CHECK-NEXT: rts16 2133; 2134; GENERIC-LABEL: ICMP_SHORT_I_sgt: 2135; GENERIC: # %bb.0: # %entry 2136; GENERIC-NEXT: .cfi_def_cfa_offset 0 2137; GENERIC-NEXT: subi16 sp, sp, 4 2138; GENERIC-NEXT: .cfi_def_cfa_offset 4 2139; GENERIC-NEXT: sexth16 a1, a0 2140; GENERIC-NEXT: movi16 a0, 1 2141; GENERIC-NEXT: cmplt16 a0, a1 2142; GENERIC-NEXT: mvcv16 a1 2143; GENERIC-NEXT: subu16 a0, a1 2144; GENERIC-NEXT: addi16 sp, sp, 4 2145; GENERIC-NEXT: rts16 2146entry: 2147 %icmp = icmp sgt i16 %x, 1 2148 ret i1 %icmp 2149} 2150 2151define i1 @ICMP_CHAR_sgt(i8 %x, i8 %y) { 2152; CHECK-LABEL: ICMP_CHAR_sgt: 2153; CHECK: # %bb.0: # %entry 2154; CHECK-NEXT: sextb16 a1, a1 2155; CHECK-NEXT: sextb16 a0, a0 2156; CHECK-NEXT: cmplt16 a0, a1 2157; CHECK-NEXT: mvc32 a0 2158; CHECK-NEXT: rts16 2159; 2160; GENERIC-LABEL: ICMP_CHAR_sgt: 2161; GENERIC: # %bb.0: # %entry 2162; GENERIC-NEXT: .cfi_def_cfa_offset 0 2163; GENERIC-NEXT: subi16 sp, sp, 4 2164; GENERIC-NEXT: .cfi_def_cfa_offset 4 2165; GENERIC-NEXT: sextb16 a1, a1 2166; GENERIC-NEXT: sextb16 a0, a0 2167; GENERIC-NEXT: cmplt16 a0, a1 2168; GENERIC-NEXT: mvcv16 a1 2169; GENERIC-NEXT: movi16 a0, 1 2170; GENERIC-NEXT: subu16 a0, a1 2171; GENERIC-NEXT: addi16 sp, sp, 4 2172; GENERIC-NEXT: rts16 2173entry: 2174 %icmp = icmp sgt i8 %y, %x 2175 ret i1 %icmp 2176} 2177 2178define i1 @ICMP_CHAR_I_sgt(i8 %x) { 2179; CHECK-LABEL: ICMP_CHAR_I_sgt: 2180; CHECK: # %bb.0: # %entry 2181; CHECK-NEXT: sextb16 a0, a0 2182; CHECK-NEXT: movi16 a1, 1 2183; CHECK-NEXT: cmplt16 a1, a0 2184; CHECK-NEXT: mvc32 a0 2185; CHECK-NEXT: rts16 2186; 2187; GENERIC-LABEL: ICMP_CHAR_I_sgt: 2188; GENERIC: # %bb.0: # %entry 2189; GENERIC-NEXT: .cfi_def_cfa_offset 0 2190; GENERIC-NEXT: subi16 sp, sp, 4 2191; GENERIC-NEXT: .cfi_def_cfa_offset 4 2192; GENERIC-NEXT: sextb16 a1, a0 2193; GENERIC-NEXT: movi16 a0, 1 2194; GENERIC-NEXT: cmplt16 a0, a1 2195; GENERIC-NEXT: mvcv16 a1 2196; GENERIC-NEXT: subu16 a0, a1 2197; GENERIC-NEXT: addi16 sp, sp, 4 2198; GENERIC-NEXT: rts16 2199entry: 2200 %icmp = icmp sgt i8 %x, 1 2201 ret i1 %icmp 2202} 2203 2204define i1 @ICMP_BIT_sgt(i1 %x, i1 %y) { 2205; CHECK-LABEL: ICMP_BIT_sgt: 2206; CHECK: # %bb.0: # %entry 2207; CHECK-NEXT: xori32 a1, a1, 1 2208; CHECK-NEXT: and16 a0, a1 2209; CHECK-NEXT: rts16 2210; 2211; GENERIC-LABEL: ICMP_BIT_sgt: 2212; GENERIC: # %bb.0: # %entry 2213; GENERIC-NEXT: .cfi_def_cfa_offset 0 2214; GENERIC-NEXT: subi16 sp, sp, 4 2215; GENERIC-NEXT: .cfi_def_cfa_offset 4 2216; GENERIC-NEXT: movi16 a2, 1 2217; GENERIC-NEXT: xor16 a2, a1 2218; GENERIC-NEXT: and16 a0, a2 2219; GENERIC-NEXT: addi16 sp, sp, 4 2220; GENERIC-NEXT: rts16 2221entry: 2222 %icmp = icmp sgt i1 %y, %x 2223 ret i1 %icmp 2224} 2225 2226define i1 @ICMP_BIT_I_sgt(i1 %x) { 2227; CHECK-LABEL: ICMP_BIT_I_sgt: 2228; CHECK: # %bb.0: # %entry 2229; CHECK-NEXT: xori32 a0, a0, 1 2230; CHECK-NEXT: rts16 2231; 2232; GENERIC-LABEL: ICMP_BIT_I_sgt: 2233; GENERIC: # %bb.0: # %entry 2234; GENERIC-NEXT: .cfi_def_cfa_offset 0 2235; GENERIC-NEXT: subi16 sp, sp, 4 2236; GENERIC-NEXT: .cfi_def_cfa_offset 4 2237; GENERIC-NEXT: movi16 a1, 1 2238; GENERIC-NEXT: xor16 a0, a1 2239; GENERIC-NEXT: addi16 sp, sp, 4 2240; GENERIC-NEXT: rts16 2241entry: 2242 %icmp = icmp sgt i1 %x, 1 2243 ret i1 %icmp 2244} 2245 2246;sge 2247define i1 @icmpRR_sge(i32 %x, i32 %y) { 2248; CHECK-LABEL: icmpRR_sge: 2249; CHECK: # %bb.0: # %entry 2250; CHECK-NEXT: cmplt16 a1, a0 2251; CHECK-NEXT: mvcv16 a0 2252; CHECK-NEXT: rts16 2253; 2254; GENERIC-LABEL: icmpRR_sge: 2255; GENERIC: # %bb.0: # %entry 2256; GENERIC-NEXT: .cfi_def_cfa_offset 0 2257; GENERIC-NEXT: subi16 sp, sp, 4 2258; GENERIC-NEXT: .cfi_def_cfa_offset 4 2259; GENERIC-NEXT: cmplt16 a1, a0 2260; GENERIC-NEXT: mvcv16 a0 2261; GENERIC-NEXT: addi16 sp, sp, 4 2262; GENERIC-NEXT: rts16 2263entry: 2264 %icmp = icmp sge i32 %y, %x 2265 ret i1 %icmp 2266} 2267 2268define i1 @icmpRI_sge(i32 %x) { 2269; CHECK-LABEL: icmpRI_sge: 2270; CHECK: # %bb.0: # %entry 2271; CHECK-NEXT: movi16 a1, 9 2272; CHECK-NEXT: cmplt16 a1, a0 2273; CHECK-NEXT: mvc32 a0 2274; CHECK-NEXT: rts16 2275; 2276; GENERIC-LABEL: icmpRI_sge: 2277; GENERIC: # %bb.0: # %entry 2278; GENERIC-NEXT: .cfi_def_cfa_offset 0 2279; GENERIC-NEXT: subi16 sp, sp, 4 2280; GENERIC-NEXT: .cfi_def_cfa_offset 4 2281; GENERIC-NEXT: movi16 a1, 9 2282; GENERIC-NEXT: cmplt16 a1, a0 2283; GENERIC-NEXT: mvcv16 a1 2284; GENERIC-NEXT: movi16 a0, 1 2285; GENERIC-NEXT: subu16 a0, a1 2286; GENERIC-NEXT: addi16 sp, sp, 4 2287; GENERIC-NEXT: rts16 2288entry: 2289 %icmp = icmp sge i32 %x, 10 2290 ret i1 %icmp 2291} 2292 2293define i1 @icmpRI_X_sge(i32 %x) { 2294; CHECK-LABEL: icmpRI_X_sge: 2295; CHECK: # %bb.0: # %entry 2296; CHECK-NEXT: movih32 a1, 62 2297; CHECK-NEXT: ori32 a1, a1, 33767 2298; CHECK-NEXT: cmplt16 a1, a0 2299; CHECK-NEXT: mvc32 a0 2300; CHECK-NEXT: rts16 2301; 2302; GENERIC-LABEL: icmpRI_X_sge: 2303; GENERIC: # %bb.0: # %entry 2304; GENERIC-NEXT: .cfi_def_cfa_offset 0 2305; GENERIC-NEXT: subi16 sp, sp, 4 2306; GENERIC-NEXT: .cfi_def_cfa_offset 4 2307; GENERIC-NEXT: movi16 a1, 0 2308; GENERIC-NEXT: lsli16 a1, a1, 24 2309; GENERIC-NEXT: movi16 a2, 62 2310; GENERIC-NEXT: lsli16 a2, a2, 16 2311; GENERIC-NEXT: or16 a2, a1 2312; GENERIC-NEXT: movi16 a1, 131 2313; GENERIC-NEXT: lsli16 a1, a1, 8 2314; GENERIC-NEXT: or16 a1, a2 2315; GENERIC-NEXT: movi16 a2, 231 2316; GENERIC-NEXT: or16 a2, a1 2317; GENERIC-NEXT: cmplt16 a2, a0 2318; GENERIC-NEXT: mvcv16 a1 2319; GENERIC-NEXT: movi16 a0, 1 2320; GENERIC-NEXT: subu16 a0, a1 2321; GENERIC-NEXT: addi16 sp, sp, 4 2322; GENERIC-NEXT: rts16 2323entry: 2324 %icmp = icmp sge i32 %x, 4097000 2325 ret i1 %icmp 2326} 2327 2328define i1 @ICMP_LONG_sge(i64 %x, i64 %y) { 2329; CHECK-LABEL: ICMP_LONG_sge: 2330; CHECK: # %bb.0: # %entry 2331; CHECK-NEXT: .cfi_def_cfa_offset 0 2332; CHECK-NEXT: subi16 sp, sp, 12 2333; CHECK-NEXT: .cfi_def_cfa_offset 12 2334; CHECK-NEXT: cmphs16 a2, a0 2335; CHECK-NEXT: mvc32 a0 2336; CHECK-NEXT: st16.w a0, (sp, 4) 2337; CHECK-NEXT: cmpne16 a3, a1 2338; CHECK-NEXT: mvc32 a0 2339; CHECK-NEXT: st16.w a0, (sp, 8) 2340; CHECK-NEXT: cmplt16 a3, a1 2341; CHECK-NEXT: mvcv16 a0 2342; CHECK-NEXT: ld16.w a1, (sp, 4) 2343; CHECK-NEXT: btsti32 a1, 0 2344; CHECK-NEXT: mvc32 a1 2345; CHECK-NEXT: ld16.w a2, (sp, 8) 2346; CHECK-NEXT: btsti32 a2, 0 2347; CHECK-NEXT: movf32 a0, a1 2348; CHECK-NEXT: addi16 sp, sp, 12 2349; CHECK-NEXT: rts16 2350; 2351; GENERIC-LABEL: ICMP_LONG_sge: 2352; GENERIC: # %bb.0: # %entry 2353; GENERIC-NEXT: .cfi_def_cfa_offset 0 2354; GENERIC-NEXT: subi16 sp, sp, 4 2355; GENERIC-NEXT: .cfi_def_cfa_offset 4 2356; GENERIC-NEXT: cmphs16 a2, a0 2357; GENERIC-NEXT: mvcv16 a2 2358; GENERIC-NEXT: cmplt16 a3, a1 2359; GENERIC-NEXT: mvcv16 a0 2360; GENERIC-NEXT: cmpne16 a3, a1 2361; GENERIC-NEXT: mvcv16 a1 2362; GENERIC-NEXT: btsti16 a1, 0 2363; GENERIC-NEXT: bf16 .LBB80_2 2364; GENERIC-NEXT: # %bb.1: 2365; GENERIC-NEXT: movi16 a0, 1 2366; GENERIC-NEXT: subu16 a0, a2 2367; GENERIC-NEXT: .LBB80_2: # %entry 2368; GENERIC-NEXT: addi16 sp, sp, 4 2369; GENERIC-NEXT: rts16 2370entry: 2371 %icmp = icmp sge i64 %y, %x 2372 ret i1 %icmp 2373} 2374 2375define i1 @ICMP_LONG_I_sge(i64 %x) { 2376; CHECK-LABEL: ICMP_LONG_I_sge: 2377; CHECK: # %bb.0: # %entry 2378; CHECK-NEXT: .cfi_def_cfa_offset 0 2379; CHECK-NEXT: subi16 sp, sp, 16 2380; CHECK-NEXT: .cfi_def_cfa_offset 16 2381; CHECK-NEXT: movi16 a2, 0 2382; CHECK-NEXT: cmplt16 a2, a1 2383; CHECK-NEXT: mvc32 a2 2384; CHECK-NEXT: st16.w a2, (sp, 12) 2385; CHECK-NEXT: cmpnei16 a0, 0 2386; CHECK-NEXT: mvc32 a0 2387; CHECK-NEXT: st16.w a0, (sp, 4) 2388; CHECK-NEXT: cmpnei16 a1, 0 2389; CHECK-NEXT: mvc32 a0 2390; CHECK-NEXT: st16.w a0, (sp, 8) 2391; CHECK-NEXT: ld16.w a0, (sp, 4) 2392; CHECK-NEXT: btsti32 a0, 0 2393; CHECK-NEXT: mvc32 a1 2394; CHECK-NEXT: ld16.w a0, (sp, 12) 2395; CHECK-NEXT: btsti32 a0, 0 2396; CHECK-NEXT: mvc32 a0 2397; CHECK-NEXT: ld16.w a2, (sp, 8) 2398; CHECK-NEXT: btsti32 a2, 0 2399; CHECK-NEXT: movf32 a0, a1 2400; CHECK-NEXT: addi16 sp, sp, 16 2401; CHECK-NEXT: rts16 2402; 2403; GENERIC-LABEL: ICMP_LONG_I_sge: 2404; GENERIC: # %bb.0: # %entry 2405; GENERIC-NEXT: .cfi_def_cfa_offset 0 2406; GENERIC-NEXT: subi16 sp, sp, 4 2407; GENERIC-NEXT: .cfi_def_cfa_offset 4 2408; GENERIC-NEXT: mov16 a2, a0 2409; GENERIC-NEXT: movi16 a0, 0 2410; GENERIC-NEXT: cmplt16 a0, a1 2411; GENERIC-NEXT: mvcv16 a3 2412; GENERIC-NEXT: movi16 a0, 1 2413; GENERIC-NEXT: cmpnei16 a2, 0 2414; GENERIC-NEXT: mvcv16 a2 2415; GENERIC-NEXT: cmpnei16 a1, 0 2416; GENERIC-NEXT: mvcv16 a1 2417; GENERIC-NEXT: btsti16 a1, 0 2418; GENERIC-NEXT: bt16 .LBB81_2 2419; GENERIC-NEXT: # %bb.1: # %entry 2420; GENERIC-NEXT: subu16 a0, a3 2421; GENERIC-NEXT: addi16 sp, sp, 4 2422; GENERIC-NEXT: rts16 2423; GENERIC-NEXT: .LBB81_2: 2424; GENERIC-NEXT: subu16 a0, a2 2425; GENERIC-NEXT: addi16 sp, sp, 4 2426; GENERIC-NEXT: rts16 2427entry: 2428 %icmp = icmp sge i64 %x, 1 2429 ret i1 %icmp 2430} 2431 2432define i1 @ICMP_SHORT_sge(i16 %x, i16 %y) { 2433; CHECK-LABEL: ICMP_SHORT_sge: 2434; CHECK: # %bb.0: # %entry 2435; CHECK-NEXT: sexth16 a0, a0 2436; CHECK-NEXT: sexth16 a1, a1 2437; CHECK-NEXT: cmplt16 a1, a0 2438; CHECK-NEXT: mvcv16 a0 2439; CHECK-NEXT: rts16 2440; 2441; GENERIC-LABEL: ICMP_SHORT_sge: 2442; GENERIC: # %bb.0: # %entry 2443; GENERIC-NEXT: .cfi_def_cfa_offset 0 2444; GENERIC-NEXT: subi16 sp, sp, 4 2445; GENERIC-NEXT: .cfi_def_cfa_offset 4 2446; GENERIC-NEXT: sexth16 a0, a0 2447; GENERIC-NEXT: sexth16 a1, a1 2448; GENERIC-NEXT: cmplt16 a1, a0 2449; GENERIC-NEXT: mvcv16 a0 2450; GENERIC-NEXT: addi16 sp, sp, 4 2451; GENERIC-NEXT: rts16 2452entry: 2453 %icmp = icmp sge i16 %y, %x 2454 ret i1 %icmp 2455} 2456 2457define i1 @ICMP_SHORT_I_sge(i16 %x) { 2458; CHECK-LABEL: ICMP_SHORT_I_sge: 2459; CHECK: # %bb.0: # %entry 2460; CHECK-NEXT: sexth16 a0, a0 2461; CHECK-NEXT: movi16 a1, 0 2462; CHECK-NEXT: cmplt16 a1, a0 2463; CHECK-NEXT: mvc32 a0 2464; CHECK-NEXT: rts16 2465; 2466; GENERIC-LABEL: ICMP_SHORT_I_sge: 2467; GENERIC: # %bb.0: # %entry 2468; GENERIC-NEXT: .cfi_def_cfa_offset 0 2469; GENERIC-NEXT: subi16 sp, sp, 4 2470; GENERIC-NEXT: .cfi_def_cfa_offset 4 2471; GENERIC-NEXT: sexth16 a0, a0 2472; GENERIC-NEXT: movi16 a1, 0 2473; GENERIC-NEXT: cmplt16 a1, a0 2474; GENERIC-NEXT: mvcv16 a1 2475; GENERIC-NEXT: movi16 a0, 1 2476; GENERIC-NEXT: subu16 a0, a1 2477; GENERIC-NEXT: addi16 sp, sp, 4 2478; GENERIC-NEXT: rts16 2479entry: 2480 %icmp = icmp sge i16 %x, 1 2481 ret i1 %icmp 2482} 2483 2484define i1 @ICMP_CHAR_sge(i8 %x, i8 %y) { 2485; CHECK-LABEL: ICMP_CHAR_sge: 2486; CHECK: # %bb.0: # %entry 2487; CHECK-NEXT: sextb16 a0, a0 2488; CHECK-NEXT: sextb16 a1, a1 2489; CHECK-NEXT: cmplt16 a1, a0 2490; CHECK-NEXT: mvcv16 a0 2491; CHECK-NEXT: rts16 2492; 2493; GENERIC-LABEL: ICMP_CHAR_sge: 2494; GENERIC: # %bb.0: # %entry 2495; GENERIC-NEXT: .cfi_def_cfa_offset 0 2496; GENERIC-NEXT: subi16 sp, sp, 4 2497; GENERIC-NEXT: .cfi_def_cfa_offset 4 2498; GENERIC-NEXT: sextb16 a0, a0 2499; GENERIC-NEXT: sextb16 a1, a1 2500; GENERIC-NEXT: cmplt16 a1, a0 2501; GENERIC-NEXT: mvcv16 a0 2502; GENERIC-NEXT: addi16 sp, sp, 4 2503; GENERIC-NEXT: rts16 2504entry: 2505 %icmp = icmp sge i8 %y, %x 2506 ret i1 %icmp 2507} 2508 2509define i1 @ICMP_CHAR_I_sge(i8 %x) { 2510; CHECK-LABEL: ICMP_CHAR_I_sge: 2511; CHECK: # %bb.0: # %entry 2512; CHECK-NEXT: sextb16 a0, a0 2513; CHECK-NEXT: movi16 a1, 0 2514; CHECK-NEXT: cmplt16 a1, a0 2515; CHECK-NEXT: mvc32 a0 2516; CHECK-NEXT: rts16 2517; 2518; GENERIC-LABEL: ICMP_CHAR_I_sge: 2519; GENERIC: # %bb.0: # %entry 2520; GENERIC-NEXT: .cfi_def_cfa_offset 0 2521; GENERIC-NEXT: subi16 sp, sp, 4 2522; GENERIC-NEXT: .cfi_def_cfa_offset 4 2523; GENERIC-NEXT: sextb16 a0, a0 2524; GENERIC-NEXT: movi16 a1, 0 2525; GENERIC-NEXT: cmplt16 a1, a0 2526; GENERIC-NEXT: mvcv16 a1 2527; GENERIC-NEXT: movi16 a0, 1 2528; GENERIC-NEXT: subu16 a0, a1 2529; GENERIC-NEXT: addi16 sp, sp, 4 2530; GENERIC-NEXT: rts16 2531entry: 2532 %icmp = icmp sge i8 %x, 1 2533 ret i1 %icmp 2534} 2535 2536define i1 @ICMP_BIT_sge(i1 %x, i1 %y) { 2537; CHECK-LABEL: ICMP_BIT_sge: 2538; CHECK: # %bb.0: # %entry 2539; CHECK-NEXT: xori32 a1, a1, 1 2540; CHECK-NEXT: or16 a0, a1 2541; CHECK-NEXT: rts16 2542; 2543; GENERIC-LABEL: ICMP_BIT_sge: 2544; GENERIC: # %bb.0: # %entry 2545; GENERIC-NEXT: .cfi_def_cfa_offset 0 2546; GENERIC-NEXT: subi16 sp, sp, 4 2547; GENERIC-NEXT: .cfi_def_cfa_offset 4 2548; GENERIC-NEXT: movi16 a2, 1 2549; GENERIC-NEXT: xor16 a2, a1 2550; GENERIC-NEXT: or16 a0, a2 2551; GENERIC-NEXT: addi16 sp, sp, 4 2552; GENERIC-NEXT: rts16 2553entry: 2554 %icmp = icmp sge i1 %y, %x 2555 ret i1 %icmp 2556} 2557 2558define i1 @ICMP_BIT_I_sge(i1 %x) { 2559; CHECK-LABEL: ICMP_BIT_I_sge: 2560; CHECK: # %bb.0: # %entry 2561; CHECK-NEXT: movi16 a0, 1 2562; CHECK-NEXT: rts16 2563; 2564; GENERIC-LABEL: ICMP_BIT_I_sge: 2565; GENERIC: # %bb.0: # %entry 2566; GENERIC-NEXT: .cfi_def_cfa_offset 0 2567; GENERIC-NEXT: subi16 sp, sp, 4 2568; GENERIC-NEXT: .cfi_def_cfa_offset 4 2569; GENERIC-NEXT: movi16 a0, 1 2570; GENERIC-NEXT: addi16 sp, sp, 4 2571; GENERIC-NEXT: rts16 2572entry: 2573 %icmp = icmp sge i1 %x, 1 2574 ret i1 %icmp 2575} 2576 2577;slt 2578define i1 @icmpRR_slt(i32 %x, i32 %y) { 2579; CHECK-LABEL: icmpRR_slt: 2580; CHECK: # %bb.0: # %entry 2581; CHECK-NEXT: cmplt16 a1, a0 2582; CHECK-NEXT: mvc32 a0 2583; CHECK-NEXT: rts16 2584; 2585; GENERIC-LABEL: icmpRR_slt: 2586; GENERIC: # %bb.0: # %entry 2587; GENERIC-NEXT: .cfi_def_cfa_offset 0 2588; GENERIC-NEXT: subi16 sp, sp, 4 2589; GENERIC-NEXT: .cfi_def_cfa_offset 4 2590; GENERIC-NEXT: cmplt16 a1, a0 2591; GENERIC-NEXT: mvcv16 a1 2592; GENERIC-NEXT: movi16 a0, 1 2593; GENERIC-NEXT: subu16 a0, a1 2594; GENERIC-NEXT: addi16 sp, sp, 4 2595; GENERIC-NEXT: rts16 2596entry: 2597 %icmp = icmp slt i32 %y, %x 2598 ret i1 %icmp 2599} 2600 2601define i1 @icmpRI_slt(i32 %x) { 2602; CHECK-LABEL: icmpRI_slt: 2603; CHECK: # %bb.0: # %entry 2604; CHECK-NEXT: cmplti16 a0, 10 2605; CHECK-NEXT: mvc32 a0 2606; CHECK-NEXT: rts16 2607; 2608; GENERIC-LABEL: icmpRI_slt: 2609; GENERIC: # %bb.0: # %entry 2610; GENERIC-NEXT: .cfi_def_cfa_offset 0 2611; GENERIC-NEXT: subi16 sp, sp, 4 2612; GENERIC-NEXT: .cfi_def_cfa_offset 4 2613; GENERIC-NEXT: cmplti16 a0, 10 2614; GENERIC-NEXT: mvcv16 a1 2615; GENERIC-NEXT: movi16 a0, 1 2616; GENERIC-NEXT: subu16 a0, a1 2617; GENERIC-NEXT: addi16 sp, sp, 4 2618; GENERIC-NEXT: rts16 2619entry: 2620 %icmp = icmp slt i32 %x, 10 2621 ret i1 %icmp 2622} 2623 2624define i1 @icmpRI_X_slt(i32 %x) { 2625; CHECK-LABEL: icmpRI_X_slt: 2626; CHECK: # %bb.0: # %entry 2627; CHECK-NEXT: movih32 a1, 62 2628; CHECK-NEXT: ori32 a1, a1, 33768 2629; CHECK-NEXT: cmplt16 a0, a1 2630; CHECK-NEXT: mvc32 a0 2631; CHECK-NEXT: rts16 2632; 2633; GENERIC-LABEL: icmpRI_X_slt: 2634; GENERIC: # %bb.0: # %entry 2635; GENERIC-NEXT: .cfi_def_cfa_offset 0 2636; GENERIC-NEXT: subi16 sp, sp, 4 2637; GENERIC-NEXT: .cfi_def_cfa_offset 4 2638; GENERIC-NEXT: movi16 a1, 0 2639; GENERIC-NEXT: lsli16 a1, a1, 24 2640; GENERIC-NEXT: movi16 a2, 62 2641; GENERIC-NEXT: lsli16 a2, a2, 16 2642; GENERIC-NEXT: or16 a2, a1 2643; GENERIC-NEXT: movi16 a1, 131 2644; GENERIC-NEXT: lsli16 a1, a1, 8 2645; GENERIC-NEXT: or16 a1, a2 2646; GENERIC-NEXT: movi16 a2, 232 2647; GENERIC-NEXT: or16 a2, a1 2648; GENERIC-NEXT: cmplt16 a0, a2 2649; GENERIC-NEXT: mvcv16 a1 2650; GENERIC-NEXT: movi16 a0, 1 2651; GENERIC-NEXT: subu16 a0, a1 2652; GENERIC-NEXT: addi16 sp, sp, 4 2653; GENERIC-NEXT: rts16 2654entry: 2655 %icmp = icmp slt i32 %x, 4097000 2656 ret i1 %icmp 2657} 2658 2659define i1 @ICMP_LONG_slt(i64 %x, i64 %y) { 2660; CHECK-LABEL: ICMP_LONG_slt: 2661; CHECK: # %bb.0: # %entry 2662; CHECK-NEXT: .cfi_def_cfa_offset 0 2663; CHECK-NEXT: subi16 sp, sp, 12 2664; CHECK-NEXT: .cfi_def_cfa_offset 12 2665; CHECK-NEXT: cmplt16 a3, a1 2666; CHECK-NEXT: mvc32 t0 2667; CHECK-NEXT: st32.w t0, (sp, 4) 2668; CHECK-NEXT: cmpne16 a3, a1 2669; CHECK-NEXT: mvc32 a1 2670; CHECK-NEXT: st16.w a1, (sp, 8) 2671; CHECK-NEXT: cmphs16 a2, a0 2672; CHECK-NEXT: mvcv16 a1 2673; CHECK-NEXT: ld16.w a0, (sp, 4) 2674; CHECK-NEXT: btsti32 a0, 0 2675; CHECK-NEXT: mvc32 a0 2676; CHECK-NEXT: ld16.w a2, (sp, 8) 2677; CHECK-NEXT: btsti32 a2, 0 2678; CHECK-NEXT: movf32 a0, a1 2679; CHECK-NEXT: addi16 sp, sp, 12 2680; CHECK-NEXT: rts16 2681; 2682; GENERIC-LABEL: ICMP_LONG_slt: 2683; GENERIC: # %bb.0: # %entry 2684; GENERIC-NEXT: subi16 sp, sp, 4 2685; GENERIC-NEXT: .cfi_def_cfa_offset 4 2686; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2687; GENERIC-NEXT: .cfi_offset l0, -4 2688; GENERIC-NEXT: subi16 sp, sp, 4 2689; GENERIC-NEXT: .cfi_def_cfa_offset 8 2690; GENERIC-NEXT: cmplt16 a3, a1 2691; GENERIC-NEXT: mvcv16 l0 2692; GENERIC-NEXT: cmphs16 a2, a0 2693; GENERIC-NEXT: mvcv16 a0 2694; GENERIC-NEXT: cmpne16 a3, a1 2695; GENERIC-NEXT: mvcv16 a1 2696; GENERIC-NEXT: btsti16 a1, 0 2697; GENERIC-NEXT: bt16 .LBB91_2 2698; GENERIC-NEXT: # %bb.1: # %entry 2699; GENERIC-NEXT: movi16 a0, 1 2700; GENERIC-NEXT: subu16 a0, l0 2701; GENERIC-NEXT: .LBB91_2: # %entry 2702; GENERIC-NEXT: addi16 sp, sp, 4 2703; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2704; GENERIC-NEXT: addi16 sp, sp, 4 2705; GENERIC-NEXT: rts16 2706entry: 2707 %icmp = icmp slt i64 %y, %x 2708 ret i1 %icmp 2709} 2710 2711define i1 @ICMP_LONG_I_slt(i64 %x) { 2712; CHECK-LABEL: ICMP_LONG_I_slt: 2713; CHECK: # %bb.0: # %entry 2714; CHECK-NEXT: .cfi_def_cfa_offset 0 2715; CHECK-NEXT: subi16 sp, sp, 12 2716; CHECK-NEXT: .cfi_def_cfa_offset 12 2717; CHECK-NEXT: movi16 a2, 0 2718; CHECK-NEXT: cmplt16 a1, a2 2719; CHECK-NEXT: mvc32 a2 2720; CHECK-NEXT: st16.w a2, (sp, 4) 2721; CHECK-NEXT: cmpnei16 a1, 0 2722; CHECK-NEXT: mvc32 a1 2723; CHECK-NEXT: st16.w a1, (sp, 8) 2724; CHECK-NEXT: cmpnei16 a0, 0 2725; CHECK-NEXT: mvcv16 a1 2726; CHECK-NEXT: ld16.w a0, (sp, 4) 2727; CHECK-NEXT: btsti32 a0, 0 2728; CHECK-NEXT: mvc32 a0 2729; CHECK-NEXT: ld16.w a2, (sp, 8) 2730; CHECK-NEXT: btsti32 a2, 0 2731; CHECK-NEXT: movf32 a0, a1 2732; CHECK-NEXT: addi16 sp, sp, 12 2733; CHECK-NEXT: rts16 2734; 2735; GENERIC-LABEL: ICMP_LONG_I_slt: 2736; GENERIC: # %bb.0: # %entry 2737; GENERIC-NEXT: .cfi_def_cfa_offset 0 2738; GENERIC-NEXT: subi16 sp, sp, 4 2739; GENERIC-NEXT: .cfi_def_cfa_offset 4 2740; GENERIC-NEXT: movi16 a2, 0 2741; GENERIC-NEXT: cmplt16 a1, a2 2742; GENERIC-NEXT: mvcv16 a2 2743; GENERIC-NEXT: cmpnei16 a0, 0 2744; GENERIC-NEXT: mvcv16 a0 2745; GENERIC-NEXT: cmpnei16 a1, 0 2746; GENERIC-NEXT: mvcv16 a1 2747; GENERIC-NEXT: btsti16 a1, 0 2748; GENERIC-NEXT: bt16 .LBB92_2 2749; GENERIC-NEXT: # %bb.1: # %entry 2750; GENERIC-NEXT: movi16 a0, 1 2751; GENERIC-NEXT: subu16 a0, a2 2752; GENERIC-NEXT: .LBB92_2: # %entry 2753; GENERIC-NEXT: addi16 sp, sp, 4 2754; GENERIC-NEXT: rts16 2755entry: 2756 %icmp = icmp slt i64 %x, 1 2757 ret i1 %icmp 2758} 2759 2760define i1 @ICMP_SHORT_slt(i16 %x, i16 %y) { 2761; CHECK-LABEL: ICMP_SHORT_slt: 2762; CHECK: # %bb.0: # %entry 2763; CHECK-NEXT: sexth16 a0, a0 2764; CHECK-NEXT: sexth16 a1, a1 2765; CHECK-NEXT: cmplt16 a1, a0 2766; CHECK-NEXT: mvc32 a0 2767; CHECK-NEXT: rts16 2768; 2769; GENERIC-LABEL: ICMP_SHORT_slt: 2770; GENERIC: # %bb.0: # %entry 2771; GENERIC-NEXT: .cfi_def_cfa_offset 0 2772; GENERIC-NEXT: subi16 sp, sp, 4 2773; GENERIC-NEXT: .cfi_def_cfa_offset 4 2774; GENERIC-NEXT: sexth16 a0, a0 2775; GENERIC-NEXT: sexth16 a1, a1 2776; GENERIC-NEXT: cmplt16 a1, a0 2777; GENERIC-NEXT: mvcv16 a1 2778; GENERIC-NEXT: movi16 a0, 1 2779; GENERIC-NEXT: subu16 a0, a1 2780; GENERIC-NEXT: addi16 sp, sp, 4 2781; GENERIC-NEXT: rts16 2782entry: 2783 %icmp = icmp slt i16 %y, %x 2784 ret i1 %icmp 2785} 2786 2787define i1 @ICMP_SHORT_I_slt(i16 %x) { 2788; CHECK-LABEL: ICMP_SHORT_I_slt: 2789; CHECK: # %bb.0: # %entry 2790; CHECK-NEXT: sexth16 a0, a0 2791; CHECK-NEXT: cmplti16 a0, 1 2792; CHECK-NEXT: mvc32 a0 2793; CHECK-NEXT: rts16 2794; 2795; GENERIC-LABEL: ICMP_SHORT_I_slt: 2796; GENERIC: # %bb.0: # %entry 2797; GENERIC-NEXT: .cfi_def_cfa_offset 0 2798; GENERIC-NEXT: subi16 sp, sp, 4 2799; GENERIC-NEXT: .cfi_def_cfa_offset 4 2800; GENERIC-NEXT: sexth16 a0, a0 2801; GENERIC-NEXT: cmplti16 a0, 1 2802; GENERIC-NEXT: mvcv16 a1 2803; GENERIC-NEXT: movi16 a0, 1 2804; GENERIC-NEXT: subu16 a0, a1 2805; GENERIC-NEXT: addi16 sp, sp, 4 2806; GENERIC-NEXT: rts16 2807entry: 2808 %icmp = icmp slt i16 %x, 1 2809 ret i1 %icmp 2810} 2811 2812define i1 @ICMP_CHAR_slt(i8 %x, i8 %y) { 2813; CHECK-LABEL: ICMP_CHAR_slt: 2814; CHECK: # %bb.0: # %entry 2815; CHECK-NEXT: sextb16 a0, a0 2816; CHECK-NEXT: sextb16 a1, a1 2817; CHECK-NEXT: cmplt16 a1, a0 2818; CHECK-NEXT: mvc32 a0 2819; CHECK-NEXT: rts16 2820; 2821; GENERIC-LABEL: ICMP_CHAR_slt: 2822; GENERIC: # %bb.0: # %entry 2823; GENERIC-NEXT: .cfi_def_cfa_offset 0 2824; GENERIC-NEXT: subi16 sp, sp, 4 2825; GENERIC-NEXT: .cfi_def_cfa_offset 4 2826; GENERIC-NEXT: sextb16 a0, a0 2827; GENERIC-NEXT: sextb16 a1, a1 2828; GENERIC-NEXT: cmplt16 a1, a0 2829; GENERIC-NEXT: mvcv16 a1 2830; GENERIC-NEXT: movi16 a0, 1 2831; GENERIC-NEXT: subu16 a0, a1 2832; GENERIC-NEXT: addi16 sp, sp, 4 2833; GENERIC-NEXT: rts16 2834entry: 2835 %icmp = icmp slt i8 %y, %x 2836 ret i1 %icmp 2837} 2838 2839define i1 @ICMP_CHAR_I_slt(i8 %x) { 2840; CHECK-LABEL: ICMP_CHAR_I_slt: 2841; CHECK: # %bb.0: # %entry 2842; CHECK-NEXT: sextb16 a0, a0 2843; CHECK-NEXT: cmplti16 a0, 1 2844; CHECK-NEXT: mvc32 a0 2845; CHECK-NEXT: rts16 2846; 2847; GENERIC-LABEL: ICMP_CHAR_I_slt: 2848; GENERIC: # %bb.0: # %entry 2849; GENERIC-NEXT: .cfi_def_cfa_offset 0 2850; GENERIC-NEXT: subi16 sp, sp, 4 2851; GENERIC-NEXT: .cfi_def_cfa_offset 4 2852; GENERIC-NEXT: sextb16 a0, a0 2853; GENERIC-NEXT: cmplti16 a0, 1 2854; GENERIC-NEXT: mvcv16 a1 2855; GENERIC-NEXT: movi16 a0, 1 2856; GENERIC-NEXT: subu16 a0, a1 2857; GENERIC-NEXT: addi16 sp, sp, 4 2858; GENERIC-NEXT: rts16 2859entry: 2860 %icmp = icmp slt i8 %x, 1 2861 ret i1 %icmp 2862} 2863 2864define i1 @ICMP_BIT_slt(i1 %x, i1 %y) { 2865; CHECK-LABEL: ICMP_BIT_slt: 2866; CHECK: # %bb.0: # %entry 2867; CHECK-NEXT: xori32 a0, a0, 1 2868; CHECK-NEXT: and16 a0, a1 2869; CHECK-NEXT: rts16 2870; 2871; GENERIC-LABEL: ICMP_BIT_slt: 2872; GENERIC: # %bb.0: # %entry 2873; GENERIC-NEXT: .cfi_def_cfa_offset 0 2874; GENERIC-NEXT: subi16 sp, sp, 4 2875; GENERIC-NEXT: .cfi_def_cfa_offset 4 2876; GENERIC-NEXT: movi16 a2, 1 2877; GENERIC-NEXT: xor16 a0, a2 2878; GENERIC-NEXT: and16 a0, a1 2879; GENERIC-NEXT: addi16 sp, sp, 4 2880; GENERIC-NEXT: rts16 2881entry: 2882 %icmp = icmp slt i1 %y, %x 2883 ret i1 %icmp 2884} 2885 2886define i1 @ICMP_BIT_I_slt(i1 %x) { 2887; CHECK-LABEL: ICMP_BIT_I_slt: 2888; CHECK: # %bb.0: # %entry 2889; CHECK-NEXT: movi16 a0, 0 2890; CHECK-NEXT: rts16 2891; 2892; GENERIC-LABEL: ICMP_BIT_I_slt: 2893; GENERIC: # %bb.0: # %entry 2894; GENERIC-NEXT: .cfi_def_cfa_offset 0 2895; GENERIC-NEXT: subi16 sp, sp, 4 2896; GENERIC-NEXT: .cfi_def_cfa_offset 4 2897; GENERIC-NEXT: movi16 a0, 0 2898; GENERIC-NEXT: addi16 sp, sp, 4 2899; GENERIC-NEXT: rts16 2900entry: 2901 %icmp = icmp slt i1 %x, 1 2902 ret i1 %icmp 2903} 2904 2905 2906;sle 2907define i1 @icmpRR_sle(i32 %x, i32 %y) { 2908; CHECK-LABEL: icmpRR_sle: 2909; CHECK: # %bb.0: # %entry 2910; CHECK-NEXT: cmplt16 a0, a1 2911; CHECK-NEXT: mvcv16 a0 2912; CHECK-NEXT: rts16 2913; 2914; GENERIC-LABEL: icmpRR_sle: 2915; GENERIC: # %bb.0: # %entry 2916; GENERIC-NEXT: .cfi_def_cfa_offset 0 2917; GENERIC-NEXT: subi16 sp, sp, 4 2918; GENERIC-NEXT: .cfi_def_cfa_offset 4 2919; GENERIC-NEXT: cmplt16 a0, a1 2920; GENERIC-NEXT: mvcv16 a0 2921; GENERIC-NEXT: addi16 sp, sp, 4 2922; GENERIC-NEXT: rts16 2923entry: 2924 %icmp = icmp sle i32 %y, %x 2925 ret i1 %icmp 2926} 2927 2928define i1 @icmpRI_sle(i32 %x) { 2929; CHECK-LABEL: icmpRI_sle: 2930; CHECK: # %bb.0: # %entry 2931; CHECK-NEXT: cmplti16 a0, 11 2932; CHECK-NEXT: mvc32 a0 2933; CHECK-NEXT: rts16 2934; 2935; GENERIC-LABEL: icmpRI_sle: 2936; GENERIC: # %bb.0: # %entry 2937; GENERIC-NEXT: .cfi_def_cfa_offset 0 2938; GENERIC-NEXT: subi16 sp, sp, 4 2939; GENERIC-NEXT: .cfi_def_cfa_offset 4 2940; GENERIC-NEXT: cmplti16 a0, 11 2941; GENERIC-NEXT: mvcv16 a1 2942; GENERIC-NEXT: movi16 a0, 1 2943; GENERIC-NEXT: subu16 a0, a1 2944; GENERIC-NEXT: addi16 sp, sp, 4 2945; GENERIC-NEXT: rts16 2946entry: 2947 %icmp = icmp sle i32 %x, 10 2948 ret i1 %icmp 2949} 2950 2951define i1 @icmpRI_X_sle(i32 %x) { 2952; CHECK-LABEL: icmpRI_X_sle: 2953; CHECK: # %bb.0: # %entry 2954; CHECK-NEXT: movih32 a1, 62 2955; CHECK-NEXT: ori32 a1, a1, 33769 2956; CHECK-NEXT: cmplt16 a0, a1 2957; CHECK-NEXT: mvc32 a0 2958; CHECK-NEXT: rts16 2959; 2960; GENERIC-LABEL: icmpRI_X_sle: 2961; GENERIC: # %bb.0: # %entry 2962; GENERIC-NEXT: .cfi_def_cfa_offset 0 2963; GENERIC-NEXT: subi16 sp, sp, 4 2964; GENERIC-NEXT: .cfi_def_cfa_offset 4 2965; GENERIC-NEXT: movi16 a1, 0 2966; GENERIC-NEXT: lsli16 a1, a1, 24 2967; GENERIC-NEXT: movi16 a2, 62 2968; GENERIC-NEXT: lsli16 a2, a2, 16 2969; GENERIC-NEXT: or16 a2, a1 2970; GENERIC-NEXT: movi16 a1, 131 2971; GENERIC-NEXT: lsli16 a1, a1, 8 2972; GENERIC-NEXT: or16 a1, a2 2973; GENERIC-NEXT: movi16 a2, 233 2974; GENERIC-NEXT: or16 a2, a1 2975; GENERIC-NEXT: cmplt16 a0, a2 2976; GENERIC-NEXT: mvcv16 a1 2977; GENERIC-NEXT: movi16 a0, 1 2978; GENERIC-NEXT: subu16 a0, a1 2979; GENERIC-NEXT: addi16 sp, sp, 4 2980; GENERIC-NEXT: rts16 2981entry: 2982 %icmp = icmp sle i32 %x, 4097000 2983 ret i1 %icmp 2984} 2985 2986define i1 @ICMP_LONG_sle(i64 %x, i64 %y) { 2987; CHECK-LABEL: ICMP_LONG_sle: 2988; CHECK: # %bb.0: # %entry 2989; CHECK-NEXT: .cfi_def_cfa_offset 0 2990; CHECK-NEXT: subi16 sp, sp, 12 2991; CHECK-NEXT: .cfi_def_cfa_offset 12 2992; CHECK-NEXT: cmphs16 a0, a2 2993; CHECK-NEXT: mvc32 a0 2994; CHECK-NEXT: st16.w a0, (sp, 4) 2995; CHECK-NEXT: cmpne16 a3, a1 2996; CHECK-NEXT: mvc32 a0 2997; CHECK-NEXT: st16.w a0, (sp, 8) 2998; CHECK-NEXT: cmplt16 a1, a3 2999; CHECK-NEXT: mvcv16 a0 3000; CHECK-NEXT: ld16.w a1, (sp, 4) 3001; CHECK-NEXT: btsti32 a1, 0 3002; CHECK-NEXT: mvc32 a1 3003; CHECK-NEXT: ld16.w a2, (sp, 8) 3004; CHECK-NEXT: btsti32 a2, 0 3005; CHECK-NEXT: movf32 a0, a1 3006; CHECK-NEXT: addi16 sp, sp, 12 3007; CHECK-NEXT: rts16 3008; 3009; GENERIC-LABEL: ICMP_LONG_sle: 3010; GENERIC: # %bb.0: # %entry 3011; GENERIC-NEXT: .cfi_def_cfa_offset 0 3012; GENERIC-NEXT: subi16 sp, sp, 4 3013; GENERIC-NEXT: .cfi_def_cfa_offset 4 3014; GENERIC-NEXT: cmphs16 a0, a2 3015; GENERIC-NEXT: mvcv16 a2 3016; GENERIC-NEXT: cmplt16 a1, a3 3017; GENERIC-NEXT: mvcv16 a0 3018; GENERIC-NEXT: cmpne16 a3, a1 3019; GENERIC-NEXT: mvcv16 a1 3020; GENERIC-NEXT: btsti16 a1, 0 3021; GENERIC-NEXT: bf16 .LBB102_2 3022; GENERIC-NEXT: # %bb.1: 3023; GENERIC-NEXT: movi16 a0, 1 3024; GENERIC-NEXT: subu16 a0, a2 3025; GENERIC-NEXT: .LBB102_2: # %entry 3026; GENERIC-NEXT: addi16 sp, sp, 4 3027; GENERIC-NEXT: rts16 3028entry: 3029 %icmp = icmp sle i64 %y, %x 3030 ret i1 %icmp 3031} 3032 3033define i1 @ICMP_LONG_I_sle(i64 %x) { 3034; CHECK-LABEL: ICMP_LONG_I_sle: 3035; CHECK: # %bb.0: # %entry 3036; CHECK-NEXT: .cfi_def_cfa_offset 0 3037; CHECK-NEXT: subi16 sp, sp, 12 3038; CHECK-NEXT: .cfi_def_cfa_offset 12 3039; CHECK-NEXT: movi16 a2, 0 3040; CHECK-NEXT: cmplt16 a1, a2 3041; CHECK-NEXT: mvc32 a2 3042; CHECK-NEXT: st16.w a2, (sp, 4) 3043; CHECK-NEXT: cmpnei16 a1, 0 3044; CHECK-NEXT: mvc32 a1 3045; CHECK-NEXT: st16.w a1, (sp, 8) 3046; CHECK-NEXT: cmphsi16 a0, 2 3047; CHECK-NEXT: mvcv16 a1 3048; CHECK-NEXT: ld16.w a0, (sp, 4) 3049; CHECK-NEXT: btsti32 a0, 0 3050; CHECK-NEXT: mvc32 a0 3051; CHECK-NEXT: ld16.w a2, (sp, 8) 3052; CHECK-NEXT: btsti32 a2, 0 3053; CHECK-NEXT: movf32 a0, a1 3054; CHECK-NEXT: addi16 sp, sp, 12 3055; CHECK-NEXT: rts16 3056; 3057; GENERIC-LABEL: ICMP_LONG_I_sle: 3058; GENERIC: # %bb.0: # %entry 3059; GENERIC-NEXT: .cfi_def_cfa_offset 0 3060; GENERIC-NEXT: subi16 sp, sp, 4 3061; GENERIC-NEXT: .cfi_def_cfa_offset 4 3062; GENERIC-NEXT: movi16 a2, 0 3063; GENERIC-NEXT: cmplt16 a1, a2 3064; GENERIC-NEXT: mvcv16 a2 3065; GENERIC-NEXT: cmphsi16 a0, 2 3066; GENERIC-NEXT: mvcv16 a0 3067; GENERIC-NEXT: cmpnei16 a1, 0 3068; GENERIC-NEXT: mvcv16 a1 3069; GENERIC-NEXT: btsti16 a1, 0 3070; GENERIC-NEXT: bt16 .LBB103_2 3071; GENERIC-NEXT: # %bb.1: # %entry 3072; GENERIC-NEXT: movi16 a0, 1 3073; GENERIC-NEXT: subu16 a0, a2 3074; GENERIC-NEXT: .LBB103_2: # %entry 3075; GENERIC-NEXT: addi16 sp, sp, 4 3076; GENERIC-NEXT: rts16 3077entry: 3078 %icmp = icmp sle i64 %x, 1 3079 ret i1 %icmp 3080} 3081 3082define i1 @ICMP_SHORT_sle(i16 %x, i16 %y) { 3083; CHECK-LABEL: ICMP_SHORT_sle: 3084; CHECK: # %bb.0: # %entry 3085; CHECK-NEXT: sexth16 a1, a1 3086; CHECK-NEXT: sexth16 a0, a0 3087; CHECK-NEXT: cmplt16 a0, a1 3088; CHECK-NEXT: mvcv16 a0 3089; CHECK-NEXT: rts16 3090; 3091; GENERIC-LABEL: ICMP_SHORT_sle: 3092; GENERIC: # %bb.0: # %entry 3093; GENERIC-NEXT: .cfi_def_cfa_offset 0 3094; GENERIC-NEXT: subi16 sp, sp, 4 3095; GENERIC-NEXT: .cfi_def_cfa_offset 4 3096; GENERIC-NEXT: sexth16 a1, a1 3097; GENERIC-NEXT: sexth16 a0, a0 3098; GENERIC-NEXT: cmplt16 a0, a1 3099; GENERIC-NEXT: mvcv16 a0 3100; GENERIC-NEXT: addi16 sp, sp, 4 3101; GENERIC-NEXT: rts16 3102entry: 3103 %icmp = icmp sle i16 %y, %x 3104 ret i1 %icmp 3105} 3106 3107define i1 @ICMP_SHORT_I_sle(i16 %x) { 3108; CHECK-LABEL: ICMP_SHORT_I_sle: 3109; CHECK: # %bb.0: # %entry 3110; CHECK-NEXT: sexth16 a0, a0 3111; CHECK-NEXT: cmplti16 a0, 2 3112; CHECK-NEXT: mvc32 a0 3113; CHECK-NEXT: rts16 3114; 3115; GENERIC-LABEL: ICMP_SHORT_I_sle: 3116; GENERIC: # %bb.0: # %entry 3117; GENERIC-NEXT: .cfi_def_cfa_offset 0 3118; GENERIC-NEXT: subi16 sp, sp, 4 3119; GENERIC-NEXT: .cfi_def_cfa_offset 4 3120; GENERIC-NEXT: sexth16 a0, a0 3121; GENERIC-NEXT: cmplti16 a0, 2 3122; GENERIC-NEXT: mvcv16 a1 3123; GENERIC-NEXT: movi16 a0, 1 3124; GENERIC-NEXT: subu16 a0, a1 3125; GENERIC-NEXT: addi16 sp, sp, 4 3126; GENERIC-NEXT: rts16 3127entry: 3128 %icmp = icmp sle i16 %x, 1 3129 ret i1 %icmp 3130} 3131 3132define i1 @ICMP_CHAR_sle(i8 %x, i8 %y) { 3133; CHECK-LABEL: ICMP_CHAR_sle: 3134; CHECK: # %bb.0: # %entry 3135; CHECK-NEXT: sextb16 a1, a1 3136; CHECK-NEXT: sextb16 a0, a0 3137; CHECK-NEXT: cmplt16 a0, a1 3138; CHECK-NEXT: mvcv16 a0 3139; CHECK-NEXT: rts16 3140; 3141; GENERIC-LABEL: ICMP_CHAR_sle: 3142; GENERIC: # %bb.0: # %entry 3143; GENERIC-NEXT: .cfi_def_cfa_offset 0 3144; GENERIC-NEXT: subi16 sp, sp, 4 3145; GENERIC-NEXT: .cfi_def_cfa_offset 4 3146; GENERIC-NEXT: sextb16 a1, a1 3147; GENERIC-NEXT: sextb16 a0, a0 3148; GENERIC-NEXT: cmplt16 a0, a1 3149; GENERIC-NEXT: mvcv16 a0 3150; GENERIC-NEXT: addi16 sp, sp, 4 3151; GENERIC-NEXT: rts16 3152entry: 3153 %icmp = icmp sle i8 %y, %x 3154 ret i1 %icmp 3155} 3156 3157define i1 @ICMP_CHAR_I_sle(i8 %x) { 3158; CHECK-LABEL: ICMP_CHAR_I_sle: 3159; CHECK: # %bb.0: # %entry 3160; CHECK-NEXT: sextb16 a0, a0 3161; CHECK-NEXT: cmplti16 a0, 2 3162; CHECK-NEXT: mvc32 a0 3163; CHECK-NEXT: rts16 3164; 3165; GENERIC-LABEL: ICMP_CHAR_I_sle: 3166; GENERIC: # %bb.0: # %entry 3167; GENERIC-NEXT: .cfi_def_cfa_offset 0 3168; GENERIC-NEXT: subi16 sp, sp, 4 3169; GENERIC-NEXT: .cfi_def_cfa_offset 4 3170; GENERIC-NEXT: sextb16 a0, a0 3171; GENERIC-NEXT: cmplti16 a0, 2 3172; GENERIC-NEXT: mvcv16 a1 3173; GENERIC-NEXT: movi16 a0, 1 3174; GENERIC-NEXT: subu16 a0, a1 3175; GENERIC-NEXT: addi16 sp, sp, 4 3176; GENERIC-NEXT: rts16 3177entry: 3178 %icmp = icmp sle i8 %x, 1 3179 ret i1 %icmp 3180} 3181 3182define i1 @ICMP_BIT_sle(i1 %x, i1 %y) { 3183; CHECK-LABEL: ICMP_BIT_sle: 3184; CHECK: # %bb.0: # %entry 3185; CHECK-NEXT: xori32 a0, a0, 1 3186; CHECK-NEXT: or16 a0, a1 3187; CHECK-NEXT: rts16 3188; 3189; GENERIC-LABEL: ICMP_BIT_sle: 3190; GENERIC: # %bb.0: # %entry 3191; GENERIC-NEXT: .cfi_def_cfa_offset 0 3192; GENERIC-NEXT: subi16 sp, sp, 4 3193; GENERIC-NEXT: .cfi_def_cfa_offset 4 3194; GENERIC-NEXT: movi16 a2, 1 3195; GENERIC-NEXT: xor16 a0, a2 3196; GENERIC-NEXT: or16 a0, a1 3197; GENERIC-NEXT: addi16 sp, sp, 4 3198; GENERIC-NEXT: rts16 3199entry: 3200 %icmp = icmp sle i1 %y, %x 3201 ret i1 %icmp 3202} 3203 3204define i1 @ICMP_BIT_I_sle(i1 %x) { 3205; CHECK-LABEL: ICMP_BIT_I_sle: 3206; CHECK: # %bb.0: # %entry 3207; CHECK-NEXT: rts16 3208; 3209; GENERIC-LABEL: ICMP_BIT_I_sle: 3210; GENERIC: # %bb.0: # %entry 3211; GENERIC-NEXT: .cfi_def_cfa_offset 0 3212; GENERIC-NEXT: subi16 sp, sp, 4 3213; GENERIC-NEXT: .cfi_def_cfa_offset 4 3214; GENERIC-NEXT: addi16 sp, sp, 4 3215; GENERIC-NEXT: rts16 3216entry: 3217 %icmp = icmp sle i1 %x, 1 3218 ret i1 %icmp 3219} 3220