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