1; RUN: llc --mtriple=loongarch32 < %s | FileCheck %s --check-prefix=LA32 2; RUN: llc --mtriple=loongarch64 < %s | FileCheck %s --check-prefix=LA64 3 4;; Exercise the 'or' LLVM IR: https://llvm.org/docs/LangRef.html#or-instruction 5 6define i1 @or_i1(i1 %a, i1 %b) { 7; LA32-LABEL: or_i1: 8; LA32: # %bb.0: # %entry 9; LA32-NEXT: or $a0, $a0, $a1 10; LA32-NEXT: jirl $zero, $ra, 0 11; 12; LA64-LABEL: or_i1: 13; LA64: # %bb.0: # %entry 14; LA64-NEXT: or $a0, $a0, $a1 15; LA64-NEXT: jirl $zero, $ra, 0 16entry: 17 %r = or i1 %a, %b 18 ret i1 %r 19} 20 21define i8 @or_i8(i8 %a, i8 %b) { 22; LA32-LABEL: or_i8: 23; LA32: # %bb.0: # %entry 24; LA32-NEXT: or $a0, $a0, $a1 25; LA32-NEXT: jirl $zero, $ra, 0 26; 27; LA64-LABEL: or_i8: 28; LA64: # %bb.0: # %entry 29; LA64-NEXT: or $a0, $a0, $a1 30; LA64-NEXT: jirl $zero, $ra, 0 31entry: 32 %r = or i8 %a, %b 33 ret i8 %r 34} 35 36define i16 @or_i16(i16 %a, i16 %b) { 37; LA32-LABEL: or_i16: 38; LA32: # %bb.0: # %entry 39; LA32-NEXT: or $a0, $a0, $a1 40; LA32-NEXT: jirl $zero, $ra, 0 41; 42; LA64-LABEL: or_i16: 43; LA64: # %bb.0: # %entry 44; LA64-NEXT: or $a0, $a0, $a1 45; LA64-NEXT: jirl $zero, $ra, 0 46entry: 47 %r = or i16 %a, %b 48 ret i16 %r 49} 50 51define i32 @or_i32(i32 %a, i32 %b) { 52; LA32-LABEL: or_i32: 53; LA32: # %bb.0: # %entry 54; LA32-NEXT: or $a0, $a0, $a1 55; LA32-NEXT: jirl $zero, $ra, 0 56; 57; LA64-LABEL: or_i32: 58; LA64: # %bb.0: # %entry 59; LA64-NEXT: or $a0, $a0, $a1 60; LA64-NEXT: jirl $zero, $ra, 0 61entry: 62 %r = or i32 %a, %b 63 ret i32 %r 64} 65 66define i64 @or_i64(i64 %a, i64 %b) { 67; LA32-LABEL: or_i64: 68; LA32: # %bb.0: # %entry 69; LA32-NEXT: or $a0, $a0, $a2 70; LA32-NEXT: or $a1, $a1, $a3 71; LA32-NEXT: jirl $zero, $ra, 0 72; 73; LA64-LABEL: or_i64: 74; LA64: # %bb.0: # %entry 75; LA64-NEXT: or $a0, $a0, $a1 76; LA64-NEXT: jirl $zero, $ra, 0 77entry: 78 %r = or i64 %a, %b 79 ret i64 %r 80} 81 82define i1 @or_i1_0(i1 %b) { 83; LA32-LABEL: or_i1_0: 84; LA32: # %bb.0: # %entry 85; LA32-NEXT: jirl $zero, $ra, 0 86; 87; LA64-LABEL: or_i1_0: 88; LA64: # %bb.0: # %entry 89; LA64-NEXT: jirl $zero, $ra, 0 90entry: 91 %r = or i1 4, %b 92 ret i1 %r 93} 94 95define i1 @or_i1_5(i1 %b) { 96; LA32-LABEL: or_i1_5: 97; LA32: # %bb.0: # %entry 98; LA32-NEXT: ori $a0, $zero, 1 99; LA32-NEXT: jirl $zero, $ra, 0 100; 101; LA64-LABEL: or_i1_5: 102; LA64: # %bb.0: # %entry 103; LA64-NEXT: ori $a0, $zero, 1 104; LA64-NEXT: jirl $zero, $ra, 0 105entry: 106 %r = or i1 5, %b 107 ret i1 %r 108} 109 110define i8 @or_i8_5(i8 %b) { 111; LA32-LABEL: or_i8_5: 112; LA32: # %bb.0: # %entry 113; LA32-NEXT: ori $a0, $a0, 5 114; LA32-NEXT: jirl $zero, $ra, 0 115; 116; LA64-LABEL: or_i8_5: 117; LA64: # %bb.0: # %entry 118; LA64-NEXT: ori $a0, $a0, 5 119; LA64-NEXT: jirl $zero, $ra, 0 120entry: 121 %r = or i8 5, %b 122 ret i8 %r 123} 124 125define i8 @or_i8_257(i8 %b) { 126; LA32-LABEL: or_i8_257: 127; LA32: # %bb.0: # %entry 128; LA32-NEXT: ori $a0, $a0, 1 129; LA32-NEXT: jirl $zero, $ra, 0 130; 131; LA64-LABEL: or_i8_257: 132; LA64: # %bb.0: # %entry 133; LA64-NEXT: ori $a0, $a0, 1 134; LA64-NEXT: jirl $zero, $ra, 0 135entry: 136 %r = or i8 257, %b 137 ret i8 %r 138} 139 140define i16 @or_i16_5(i16 %b) { 141; LA32-LABEL: or_i16_5: 142; LA32: # %bb.0: # %entry 143; LA32-NEXT: ori $a0, $a0, 5 144; LA32-NEXT: jirl $zero, $ra, 0 145; 146; LA64-LABEL: or_i16_5: 147; LA64: # %bb.0: # %entry 148; LA64-NEXT: ori $a0, $a0, 5 149; LA64-NEXT: jirl $zero, $ra, 0 150entry: 151 %r = or i16 5, %b 152 ret i16 %r 153} 154 155define i16 @or_i16_0x1000(i16 %b) { 156; LA32-LABEL: or_i16_0x1000: 157; LA32: # %bb.0: # %entry 158; LA32-NEXT: lu12i.w $a1, 1 159; LA32-NEXT: or $a0, $a0, $a1 160; LA32-NEXT: jirl $zero, $ra, 0 161; 162; LA64-LABEL: or_i16_0x1000: 163; LA64: # %bb.0: # %entry 164; LA64-NEXT: lu12i.w $a1, 1 165; LA64-NEXT: or $a0, $a0, $a1 166; LA64-NEXT: jirl $zero, $ra, 0 167entry: 168 %r = or i16 4096, %b 169 ret i16 %r 170} 171 172define i16 @or_i16_0x10001(i16 %b) { 173; LA32-LABEL: or_i16_0x10001: 174; LA32: # %bb.0: # %entry 175; LA32-NEXT: ori $a0, $a0, 1 176; LA32-NEXT: jirl $zero, $ra, 0 177; 178; LA64-LABEL: or_i16_0x10001: 179; LA64: # %bb.0: # %entry 180; LA64-NEXT: ori $a0, $a0, 1 181; LA64-NEXT: jirl $zero, $ra, 0 182entry: 183 %r = or i16 65537, %b 184 ret i16 %r 185} 186 187define i32 @or_i32_5(i32 %b) { 188; LA32-LABEL: or_i32_5: 189; LA32: # %bb.0: # %entry 190; LA32-NEXT: ori $a0, $a0, 5 191; LA32-NEXT: jirl $zero, $ra, 0 192; 193; LA64-LABEL: or_i32_5: 194; LA64: # %bb.0: # %entry 195; LA64-NEXT: ori $a0, $a0, 5 196; LA64-NEXT: jirl $zero, $ra, 0 197entry: 198 %r = or i32 5, %b 199 ret i32 %r 200} 201 202define i32 @or_i32_0x1000(i32 %b) { 203; LA32-LABEL: or_i32_0x1000: 204; LA32: # %bb.0: # %entry 205; LA32-NEXT: lu12i.w $a1, 1 206; LA32-NEXT: or $a0, $a0, $a1 207; LA32-NEXT: jirl $zero, $ra, 0 208; 209; LA64-LABEL: or_i32_0x1000: 210; LA64: # %bb.0: # %entry 211; LA64-NEXT: lu12i.w $a1, 1 212; LA64-NEXT: or $a0, $a0, $a1 213; LA64-NEXT: jirl $zero, $ra, 0 214entry: 215 %r = or i32 4096, %b 216 ret i32 %r 217} 218 219define i32 @or_i32_0x100000001(i32 %b) { 220; LA32-LABEL: or_i32_0x100000001: 221; LA32: # %bb.0: # %entry 222; LA32-NEXT: ori $a0, $a0, 1 223; LA32-NEXT: jirl $zero, $ra, 0 224; 225; LA64-LABEL: or_i32_0x100000001: 226; LA64: # %bb.0: # %entry 227; LA64-NEXT: ori $a0, $a0, 1 228; LA64-NEXT: jirl $zero, $ra, 0 229entry: 230 %r = or i32 4294967297, %b 231 ret i32 %r 232} 233 234define i64 @or_i64_5(i64 %b) { 235; LA32-LABEL: or_i64_5: 236; LA32: # %bb.0: # %entry 237; LA32-NEXT: ori $a0, $a0, 5 238; LA32-NEXT: jirl $zero, $ra, 0 239; 240; LA64-LABEL: or_i64_5: 241; LA64: # %bb.0: # %entry 242; LA64-NEXT: ori $a0, $a0, 5 243; LA64-NEXT: jirl $zero, $ra, 0 244entry: 245 %r = or i64 5, %b 246 ret i64 %r 247} 248 249define i64 @or_i64_0x1000(i64 %b) { 250; LA32-LABEL: or_i64_0x1000: 251; LA32: # %bb.0: # %entry 252; LA32-NEXT: lu12i.w $a2, 1 253; LA32-NEXT: or $a0, $a0, $a2 254; LA32-NEXT: jirl $zero, $ra, 0 255; 256; LA64-LABEL: or_i64_0x1000: 257; LA64: # %bb.0: # %entry 258; LA64-NEXT: lu12i.w $a1, 1 259; LA64-NEXT: or $a0, $a0, $a1 260; LA64-NEXT: jirl $zero, $ra, 0 261entry: 262 %r = or i64 4096, %b 263 ret i64 %r 264} 265