1ed078c48SWANG Xuerui; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 29d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32 39d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64 4a1c67439Swanglei 5a9921155SWeining Lu;; Exercise the 'add' LLVM IR: https://llvm.org/docs/LangRef.html#add-instruction 6a9921155SWeining Lu 7a9921155SWeining Ludefine i1 @add_i1(i1 %x, i1 %y) { 8a9921155SWeining Lu; LA32-LABEL: add_i1: 9a9921155SWeining Lu; LA32: # %bb.0: 10a9921155SWeining Lu; LA32-NEXT: add.w $a0, $a0, $a1 11ed078c48SWANG Xuerui; LA32-NEXT: ret 12a1c67439Swanglei; 13a9921155SWeining Lu; LA64-LABEL: add_i1: 14a9921155SWeining Lu; LA64: # %bb.0: 15a9921155SWeining Lu; LA64-NEXT: add.d $a0, $a0, $a1 16ed078c48SWANG Xuerui; LA64-NEXT: ret 17a9921155SWeining Lu %add = add i1 %x, %y 18a9921155SWeining Lu ret i1 %add 19a9921155SWeining Lu} 20a9921155SWeining Lu 21a9921155SWeining Ludefine i8 @add_i8(i8 %x, i8 %y) { 22a9921155SWeining Lu; LA32-LABEL: add_i8: 23a9921155SWeining Lu; LA32: # %bb.0: 24a9921155SWeining Lu; LA32-NEXT: add.w $a0, $a0, $a1 25ed078c48SWANG Xuerui; LA32-NEXT: ret 26a9921155SWeining Lu; 27a9921155SWeining Lu; LA64-LABEL: add_i8: 28a9921155SWeining Lu; LA64: # %bb.0: 29a9921155SWeining Lu; LA64-NEXT: add.d $a0, $a0, $a1 30ed078c48SWANG Xuerui; LA64-NEXT: ret 31a9921155SWeining Lu %add = add i8 %x, %y 32a9921155SWeining Lu ret i8 %add 33a9921155SWeining Lu} 34a9921155SWeining Lu 35a9921155SWeining Ludefine i16 @add_i16(i16 %x, i16 %y) { 36a9921155SWeining Lu; LA32-LABEL: add_i16: 37a9921155SWeining Lu; LA32: # %bb.0: 38a9921155SWeining Lu; LA32-NEXT: add.w $a0, $a0, $a1 39ed078c48SWANG Xuerui; LA32-NEXT: ret 40a9921155SWeining Lu; 41a9921155SWeining Lu; LA64-LABEL: add_i16: 42a9921155SWeining Lu; LA64: # %bb.0: 43a9921155SWeining Lu; LA64-NEXT: add.d $a0, $a0, $a1 44ed078c48SWANG Xuerui; LA64-NEXT: ret 45a9921155SWeining Lu %add = add i16 %x, %y 46a9921155SWeining Lu ret i16 %add 47a9921155SWeining Lu} 48a9921155SWeining Lu 49a9921155SWeining Ludefine i32 @add_i32(i32 %x, i32 %y) { 50a9921155SWeining Lu; LA32-LABEL: add_i32: 51a9921155SWeining Lu; LA32: # %bb.0: 52a9921155SWeining Lu; LA32-NEXT: add.w $a0, $a0, $a1 53ed078c48SWANG Xuerui; LA32-NEXT: ret 54a9921155SWeining Lu; 55a9921155SWeining Lu; LA64-LABEL: add_i32: 56a9921155SWeining Lu; LA64: # %bb.0: 57*718331f5Shev; LA64-NEXT: add.w $a0, $a0, $a1 58ed078c48SWANG Xuerui; LA64-NEXT: ret 59a9921155SWeining Lu %add = add i32 %x, %y 60a1c67439Swanglei ret i32 %add 61a1c67439Swanglei} 62a9921155SWeining Lu 63a9921155SWeining Lu;; Match the pattern: 64a9921155SWeining Lu;; def : PatGprGpr_32<add, ADD_W>; 65a9921155SWeining Ludefine signext i32 @add_i32_sext(i32 %x, i32 %y) { 66a9921155SWeining Lu; LA32-LABEL: add_i32_sext: 67a9921155SWeining Lu; LA32: # %bb.0: 68a9921155SWeining Lu; LA32-NEXT: add.w $a0, $a0, $a1 69ed078c48SWANG Xuerui; LA32-NEXT: ret 70a9921155SWeining Lu; 71a9921155SWeining Lu; LA64-LABEL: add_i32_sext: 72a9921155SWeining Lu; LA64: # %bb.0: 73a9921155SWeining Lu; LA64-NEXT: add.w $a0, $a0, $a1 74ed078c48SWANG Xuerui; LA64-NEXT: ret 75a9921155SWeining Lu %add = add i32 %x, %y 76a9921155SWeining Lu ret i32 %add 77a9921155SWeining Lu} 78a9921155SWeining Lu 79a9921155SWeining Ludefine i64 @add_i64(i64 %x, i64 %y) { 80a9921155SWeining Lu; LA32-LABEL: add_i64: 81a9921155SWeining Lu; LA32: # %bb.0: 82a9921155SWeining Lu; LA32-NEXT: add.w $a1, $a1, $a3 83a9921155SWeining Lu; LA32-NEXT: add.w $a2, $a0, $a2 84a9921155SWeining Lu; LA32-NEXT: sltu $a0, $a2, $a0 85a9921155SWeining Lu; LA32-NEXT: add.w $a1, $a1, $a0 86a9921155SWeining Lu; LA32-NEXT: move $a0, $a2 87ed078c48SWANG Xuerui; LA32-NEXT: ret 88a9921155SWeining Lu; 89a9921155SWeining Lu; LA64-LABEL: add_i64: 90a9921155SWeining Lu; LA64: # %bb.0: 91a9921155SWeining Lu; LA64-NEXT: add.d $a0, $a0, $a1 92ed078c48SWANG Xuerui; LA64-NEXT: ret 93a9921155SWeining Lu %add = add i64 %x, %y 94a9921155SWeining Lu ret i64 %add 95a9921155SWeining Lu} 96a9921155SWeining Lu 97a9921155SWeining Ludefine i1 @add_i1_3(i1 %x) { 98a9921155SWeining Lu; LA32-LABEL: add_i1_3: 99a9921155SWeining Lu; LA32: # %bb.0: 100a9921155SWeining Lu; LA32-NEXT: addi.w $a0, $a0, 1 101ed078c48SWANG Xuerui; LA32-NEXT: ret 102a9921155SWeining Lu; 103a9921155SWeining Lu; LA64-LABEL: add_i1_3: 104a9921155SWeining Lu; LA64: # %bb.0: 105a9921155SWeining Lu; LA64-NEXT: addi.d $a0, $a0, 1 106ed078c48SWANG Xuerui; LA64-NEXT: ret 107a9921155SWeining Lu %add = add i1 %x, 3 108a9921155SWeining Lu ret i1 %add 109a9921155SWeining Lu} 110a9921155SWeining Lu 111a9921155SWeining Ludefine i8 @add_i8_3(i8 %x) { 112a9921155SWeining Lu; LA32-LABEL: add_i8_3: 113a9921155SWeining Lu; LA32: # %bb.0: 114a9921155SWeining Lu; LA32-NEXT: addi.w $a0, $a0, 3 115ed078c48SWANG Xuerui; LA32-NEXT: ret 116a9921155SWeining Lu; 117a9921155SWeining Lu; LA64-LABEL: add_i8_3: 118a9921155SWeining Lu; LA64: # %bb.0: 119a9921155SWeining Lu; LA64-NEXT: addi.d $a0, $a0, 3 120ed078c48SWANG Xuerui; LA64-NEXT: ret 121a9921155SWeining Lu %add = add i8 %x, 3 122a9921155SWeining Lu ret i8 %add 123a9921155SWeining Lu} 124a9921155SWeining Lu 125a9921155SWeining Ludefine i16 @add_i16_3(i16 %x) { 126a9921155SWeining Lu; LA32-LABEL: add_i16_3: 127a9921155SWeining Lu; LA32: # %bb.0: 128a9921155SWeining Lu; LA32-NEXT: addi.w $a0, $a0, 3 129ed078c48SWANG Xuerui; LA32-NEXT: ret 130a9921155SWeining Lu; 131a9921155SWeining Lu; LA64-LABEL: add_i16_3: 132a9921155SWeining Lu; LA64: # %bb.0: 133a9921155SWeining Lu; LA64-NEXT: addi.d $a0, $a0, 3 134ed078c48SWANG Xuerui; LA64-NEXT: ret 135a9921155SWeining Lu %add = add i16 %x, 3 136a9921155SWeining Lu ret i16 %add 137a9921155SWeining Lu} 138a9921155SWeining Lu 139a9921155SWeining Ludefine i32 @add_i32_3(i32 %x) { 140a9921155SWeining Lu; LA32-LABEL: add_i32_3: 141a9921155SWeining Lu; LA32: # %bb.0: 142a9921155SWeining Lu; LA32-NEXT: addi.w $a0, $a0, 3 143ed078c48SWANG Xuerui; LA32-NEXT: ret 144a9921155SWeining Lu; 145a9921155SWeining Lu; LA64-LABEL: add_i32_3: 146a9921155SWeining Lu; LA64: # %bb.0: 147*718331f5Shev; LA64-NEXT: addi.w $a0, $a0, 3 148ed078c48SWANG Xuerui; LA64-NEXT: ret 149a9921155SWeining Lu %add = add i32 %x, 3 150a9921155SWeining Lu ret i32 %add 151a9921155SWeining Lu} 152a9921155SWeining Lu 153a9921155SWeining Lu;; Match the pattern: 154a9921155SWeining Lu;; def : PatGprImm_32<add, ADDI_W, simm12>; 155a9921155SWeining Ludefine signext i32 @add_i32_3_sext(i32 %x) { 156a9921155SWeining Lu; LA32-LABEL: add_i32_3_sext: 157a9921155SWeining Lu; LA32: # %bb.0: 158a9921155SWeining Lu; LA32-NEXT: addi.w $a0, $a0, 3 159ed078c48SWANG Xuerui; LA32-NEXT: ret 160a9921155SWeining Lu; 161a9921155SWeining Lu; LA64-LABEL: add_i32_3_sext: 162a9921155SWeining Lu; LA64: # %bb.0: 163a9921155SWeining Lu; LA64-NEXT: addi.w $a0, $a0, 3 164ed078c48SWANG Xuerui; LA64-NEXT: ret 165a9921155SWeining Lu %add = add i32 %x, 3 166a9921155SWeining Lu ret i32 %add 167a9921155SWeining Lu} 168a9921155SWeining Lu 169a9921155SWeining Ludefine i64 @add_i64_3(i64 %x) { 170a9921155SWeining Lu; LA32-LABEL: add_i64_3: 171a9921155SWeining Lu; LA32: # %bb.0: 172a9921155SWeining Lu; LA32-NEXT: addi.w $a2, $a0, 3 173a9921155SWeining Lu; LA32-NEXT: sltu $a0, $a2, $a0 174a9921155SWeining Lu; LA32-NEXT: add.w $a1, $a1, $a0 175a9921155SWeining Lu; LA32-NEXT: move $a0, $a2 176ed078c48SWANG Xuerui; LA32-NEXT: ret 177a9921155SWeining Lu; 178a9921155SWeining Lu; LA64-LABEL: add_i64_3: 179a9921155SWeining Lu; LA64: # %bb.0: 180a9921155SWeining Lu; LA64-NEXT: addi.d $a0, $a0, 3 181ed078c48SWANG Xuerui; LA64-NEXT: ret 182a9921155SWeining Lu %add = add i64 %x, 3 183a9921155SWeining Lu ret i64 %add 184a9921155SWeining Lu} 185dcf9c60aSWANG Xuerui 1862b8cb7d8SWANG Xuerui;; Check that `addu16i.d` is emitted for these cases. 187dcf9c60aSWANG Xuerui 188dcf9c60aSWANG Xueruidefine i32 @add_i32_0x12340000(i32 %x) { 189dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_0x12340000: 190dcf9c60aSWANG Xuerui; LA32: # %bb.0: 191dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 74560 192dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 193dcf9c60aSWANG Xuerui; LA32-NEXT: ret 194dcf9c60aSWANG Xuerui; 195dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_0x12340000: 196dcf9c60aSWANG Xuerui; LA64: # %bb.0: 1972b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 4660 198*718331f5Shev; LA64-NEXT: addi.w $a0, $a0, 0 199dcf9c60aSWANG Xuerui; LA64-NEXT: ret 200dcf9c60aSWANG Xuerui %add = add i32 %x, 305397760 201dcf9c60aSWANG Xuerui ret i32 %add 202dcf9c60aSWANG Xuerui} 203dcf9c60aSWANG Xuerui 204dcf9c60aSWANG Xueruidefine signext i32 @add_i32_0x12340000_sext(i32 %x) { 205dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_0x12340000_sext: 206dcf9c60aSWANG Xuerui; LA32: # %bb.0: 207dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 74560 208dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 209dcf9c60aSWANG Xuerui; LA32-NEXT: ret 210dcf9c60aSWANG Xuerui; 211dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_0x12340000_sext: 212dcf9c60aSWANG Xuerui; LA64: # %bb.0: 2132b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 4660 2142b8cb7d8SWANG Xuerui; LA64-NEXT: addi.w $a0, $a0, 0 215dcf9c60aSWANG Xuerui; LA64-NEXT: ret 216dcf9c60aSWANG Xuerui %add = add i32 %x, 305397760 217dcf9c60aSWANG Xuerui ret i32 %add 218dcf9c60aSWANG Xuerui} 219dcf9c60aSWANG Xuerui 220dcf9c60aSWANG Xueruidefine i64 @add_i64_0x12340000(i64 %x) { 221dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_0x12340000: 222dcf9c60aSWANG Xuerui; LA32: # %bb.0: 223dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, 74560 224dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 225dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 226dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a1, $a1, $a0 227dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 228dcf9c60aSWANG Xuerui; LA32-NEXT: ret 229dcf9c60aSWANG Xuerui; 230dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_0x12340000: 231dcf9c60aSWANG Xuerui; LA64: # %bb.0: 2322b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 4660 233dcf9c60aSWANG Xuerui; LA64-NEXT: ret 234dcf9c60aSWANG Xuerui %add = add i64 %x, 305397760 235dcf9c60aSWANG Xuerui ret i64 %add 236dcf9c60aSWANG Xuerui} 237dcf9c60aSWANG Xuerui 238dcf9c60aSWANG Xueruidefine i32 @add_i32_0x7fff0000(i32 %x) { 239dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_0x7fff0000: 240dcf9c60aSWANG Xuerui; LA32: # %bb.0: 241dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 524272 242dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 243dcf9c60aSWANG Xuerui; LA32-NEXT: ret 244dcf9c60aSWANG Xuerui; 245dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_0x7fff0000: 246dcf9c60aSWANG Xuerui; LA64: # %bb.0: 2472b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 32767 248*718331f5Shev; LA64-NEXT: addi.w $a0, $a0, 0 249dcf9c60aSWANG Xuerui; LA64-NEXT: ret 250dcf9c60aSWANG Xuerui %add = add i32 %x, 2147418112 251dcf9c60aSWANG Xuerui ret i32 %add 252dcf9c60aSWANG Xuerui} 253dcf9c60aSWANG Xuerui 254dcf9c60aSWANG Xueruidefine signext i32 @add_i32_0x7fff0000_sext(i32 %x) { 255dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_0x7fff0000_sext: 256dcf9c60aSWANG Xuerui; LA32: # %bb.0: 257dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 524272 258dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 259dcf9c60aSWANG Xuerui; LA32-NEXT: ret 260dcf9c60aSWANG Xuerui; 261dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_0x7fff0000_sext: 262dcf9c60aSWANG Xuerui; LA64: # %bb.0: 2632b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 32767 2642b8cb7d8SWANG Xuerui; LA64-NEXT: addi.w $a0, $a0, 0 265dcf9c60aSWANG Xuerui; LA64-NEXT: ret 266dcf9c60aSWANG Xuerui %add = add i32 %x, 2147418112 267dcf9c60aSWANG Xuerui ret i32 %add 268dcf9c60aSWANG Xuerui} 269dcf9c60aSWANG Xuerui 270dcf9c60aSWANG Xueruidefine i64 @add_i64_0x7fff0000(i64 %x) { 271dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_0x7fff0000: 272dcf9c60aSWANG Xuerui; LA32: # %bb.0: 273dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, 524272 274dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 275dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 276dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a1, $a1, $a0 277dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 278dcf9c60aSWANG Xuerui; LA32-NEXT: ret 279dcf9c60aSWANG Xuerui; 280dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_0x7fff0000: 281dcf9c60aSWANG Xuerui; LA64: # %bb.0: 2822b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 32767 283dcf9c60aSWANG Xuerui; LA64-NEXT: ret 284dcf9c60aSWANG Xuerui %add = add i64 %x, 2147418112 285dcf9c60aSWANG Xuerui ret i64 %add 286dcf9c60aSWANG Xuerui} 287dcf9c60aSWANG Xuerui 288dcf9c60aSWANG Xueruidefine i32 @add_i32_minus_0x80000000(i32 %x) { 289dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x80000000: 290dcf9c60aSWANG Xuerui; LA32: # %bb.0: 291dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, -524288 292dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 293dcf9c60aSWANG Xuerui; LA32-NEXT: ret 294dcf9c60aSWANG Xuerui; 295dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x80000000: 296dcf9c60aSWANG Xuerui; LA64: # %bb.0: 2972b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -32768 298*718331f5Shev; LA64-NEXT: addi.w $a0, $a0, 0 299dcf9c60aSWANG Xuerui; LA64-NEXT: ret 300dcf9c60aSWANG Xuerui %add = add i32 %x, -2147483648 301dcf9c60aSWANG Xuerui ret i32 %add 302dcf9c60aSWANG Xuerui} 303dcf9c60aSWANG Xuerui 304dcf9c60aSWANG Xueruidefine signext i32 @add_i32_minus_0x80000000_sext(i32 %x) { 305dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x80000000_sext: 306dcf9c60aSWANG Xuerui; LA32: # %bb.0: 307dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, -524288 308dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 309dcf9c60aSWANG Xuerui; LA32-NEXT: ret 310dcf9c60aSWANG Xuerui; 311dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x80000000_sext: 312dcf9c60aSWANG Xuerui; LA64: # %bb.0: 3132b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -32768 3142b8cb7d8SWANG Xuerui; LA64-NEXT: addi.w $a0, $a0, 0 315dcf9c60aSWANG Xuerui; LA64-NEXT: ret 316dcf9c60aSWANG Xuerui %add = add i32 %x, -2147483648 317dcf9c60aSWANG Xuerui ret i32 %add 318dcf9c60aSWANG Xuerui} 319dcf9c60aSWANG Xuerui 320dcf9c60aSWANG Xueruidefine i64 @add_i64_minus_0x80000000(i64 %x) { 321dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_minus_0x80000000: 322dcf9c60aSWANG Xuerui; LA32: # %bb.0: 323dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, -524288 324dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 325dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 326dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a1, $a0 327dcf9c60aSWANG Xuerui; LA32-NEXT: addi.w $a1, $a0, -1 328dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 329dcf9c60aSWANG Xuerui; LA32-NEXT: ret 330dcf9c60aSWANG Xuerui; 331dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_minus_0x80000000: 332dcf9c60aSWANG Xuerui; LA64: # %bb.0: 3332b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -32768 334dcf9c60aSWANG Xuerui; LA64-NEXT: ret 335dcf9c60aSWANG Xuerui %add = add i64 %x, -2147483648 336dcf9c60aSWANG Xuerui ret i64 %add 337dcf9c60aSWANG Xuerui} 338dcf9c60aSWANG Xuerui 339dcf9c60aSWANG Xueruidefine i32 @add_i32_minus_0x10000(i32 %x) { 340dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x10000: 341dcf9c60aSWANG Xuerui; LA32: # %bb.0: 342dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, -16 343dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 344dcf9c60aSWANG Xuerui; LA32-NEXT: ret 345dcf9c60aSWANG Xuerui; 346dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x10000: 347dcf9c60aSWANG Xuerui; LA64: # %bb.0: 3482b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -1 349*718331f5Shev; LA64-NEXT: addi.w $a0, $a0, 0 350dcf9c60aSWANG Xuerui; LA64-NEXT: ret 351dcf9c60aSWANG Xuerui %add = add i32 %x, -65536 352dcf9c60aSWANG Xuerui ret i32 %add 353dcf9c60aSWANG Xuerui} 354dcf9c60aSWANG Xuerui 355dcf9c60aSWANG Xueruidefine signext i32 @add_i32_minus_0x10000_sext(i32 %x) { 356dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x10000_sext: 357dcf9c60aSWANG Xuerui; LA32: # %bb.0: 358dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, -16 359dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 360dcf9c60aSWANG Xuerui; LA32-NEXT: ret 361dcf9c60aSWANG Xuerui; 362dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x10000_sext: 363dcf9c60aSWANG Xuerui; LA64: # %bb.0: 3642b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -1 3652b8cb7d8SWANG Xuerui; LA64-NEXT: addi.w $a0, $a0, 0 366dcf9c60aSWANG Xuerui; LA64-NEXT: ret 367dcf9c60aSWANG Xuerui %add = add i32 %x, -65536 368dcf9c60aSWANG Xuerui ret i32 %add 369dcf9c60aSWANG Xuerui} 370dcf9c60aSWANG Xuerui 371dcf9c60aSWANG Xueruidefine i64 @add_i64_minus_0x10000(i64 %x) { 372dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_minus_0x10000: 373dcf9c60aSWANG Xuerui; LA32: # %bb.0: 374dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, -16 375dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 376dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 377dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a1, $a0 378dcf9c60aSWANG Xuerui; LA32-NEXT: addi.w $a1, $a0, -1 379dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 380dcf9c60aSWANG Xuerui; LA32-NEXT: ret 381dcf9c60aSWANG Xuerui; 382dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_minus_0x10000: 383dcf9c60aSWANG Xuerui; LA64: # %bb.0: 3842b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -1 385dcf9c60aSWANG Xuerui; LA64-NEXT: ret 386dcf9c60aSWANG Xuerui %add = add i64 %x, -65536 387dcf9c60aSWANG Xuerui ret i64 %add 388dcf9c60aSWANG Xuerui} 389dcf9c60aSWANG Xuerui 3902b8cb7d8SWANG Xuerui;; Check that `addu16i.d + addi` is emitted for these cases. 391dcf9c60aSWANG Xuerui 392dcf9c60aSWANG Xueruidefine i32 @add_i32_0x7fff07ff(i32 %x) { 393dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_0x7fff07ff: 394dcf9c60aSWANG Xuerui; LA32: # %bb.0: 395dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 524272 396dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 2047 397dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 398dcf9c60aSWANG Xuerui; LA32-NEXT: ret 399dcf9c60aSWANG Xuerui; 400dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_0x7fff07ff: 401dcf9c60aSWANG Xuerui; LA64: # %bb.0: 4022b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 32767 403*718331f5Shev; LA64-NEXT: addi.w $a0, $a0, 2047 404dcf9c60aSWANG Xuerui; LA64-NEXT: ret 405dcf9c60aSWANG Xuerui %add = add i32 %x, 2147420159 406dcf9c60aSWANG Xuerui ret i32 %add 407dcf9c60aSWANG Xuerui} 408dcf9c60aSWANG Xuerui 409dcf9c60aSWANG Xueruidefine signext i32 @add_i32_0x7fff07ff_sext(i32 %x) { 410dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_0x7fff07ff_sext: 411dcf9c60aSWANG Xuerui; LA32: # %bb.0: 412dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 524272 413dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 2047 414dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 415dcf9c60aSWANG Xuerui; LA32-NEXT: ret 416dcf9c60aSWANG Xuerui; 417dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_0x7fff07ff_sext: 418dcf9c60aSWANG Xuerui; LA64: # %bb.0: 4192b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 32767 4202b8cb7d8SWANG Xuerui; LA64-NEXT: addi.w $a0, $a0, 2047 421dcf9c60aSWANG Xuerui; LA64-NEXT: ret 422dcf9c60aSWANG Xuerui %add = add i32 %x, 2147420159 423dcf9c60aSWANG Xuerui ret i32 %add 424dcf9c60aSWANG Xuerui} 425dcf9c60aSWANG Xuerui 426dcf9c60aSWANG Xueruidefine i64 @add_i64_0x7fff07ff(i64 %x) { 427dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_0x7fff07ff: 428dcf9c60aSWANG Xuerui; LA32: # %bb.0: 429dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, 524272 430dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a2, $a2, 2047 431dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 432dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 433dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a1, $a1, $a0 434dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 435dcf9c60aSWANG Xuerui; LA32-NEXT: ret 436dcf9c60aSWANG Xuerui; 437dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_0x7fff07ff: 438dcf9c60aSWANG Xuerui; LA64: # %bb.0: 4392b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 32767 4402b8cb7d8SWANG Xuerui; LA64-NEXT: addi.d $a0, $a0, 2047 441dcf9c60aSWANG Xuerui; LA64-NEXT: ret 442dcf9c60aSWANG Xuerui %add = add i64 %x, 2147420159 443dcf9c60aSWANG Xuerui ret i64 %add 444dcf9c60aSWANG Xuerui} 445dcf9c60aSWANG Xuerui 446dcf9c60aSWANG Xueruidefine i32 @add_i32_0x7ffef800(i32 %x) { 447dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_0x7ffef800: 448dcf9c60aSWANG Xuerui; LA32: # %bb.0: 449dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 524271 450dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 2048 451dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 452dcf9c60aSWANG Xuerui; LA32-NEXT: ret 453dcf9c60aSWANG Xuerui; 454dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_0x7ffef800: 455dcf9c60aSWANG Xuerui; LA64: # %bb.0: 4562b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 32767 457*718331f5Shev; LA64-NEXT: addi.w $a0, $a0, -2048 458dcf9c60aSWANG Xuerui; LA64-NEXT: ret 459dcf9c60aSWANG Xuerui %add = add i32 %x, 2147416064 460dcf9c60aSWANG Xuerui ret i32 %add 461dcf9c60aSWANG Xuerui} 462dcf9c60aSWANG Xuerui 463dcf9c60aSWANG Xueruidefine signext i32 @add_i32_0x7ffef800_sext(i32 %x) { 464dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_0x7ffef800_sext: 465dcf9c60aSWANG Xuerui; LA32: # %bb.0: 466dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 524271 467dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 2048 468dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 469dcf9c60aSWANG Xuerui; LA32-NEXT: ret 470dcf9c60aSWANG Xuerui; 471dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_0x7ffef800_sext: 472dcf9c60aSWANG Xuerui; LA64: # %bb.0: 4732b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 32767 4742b8cb7d8SWANG Xuerui; LA64-NEXT: addi.w $a0, $a0, -2048 475dcf9c60aSWANG Xuerui; LA64-NEXT: ret 476dcf9c60aSWANG Xuerui %add = add i32 %x, 2147416064 477dcf9c60aSWANG Xuerui ret i32 %add 478dcf9c60aSWANG Xuerui} 479dcf9c60aSWANG Xuerui 480dcf9c60aSWANG Xueruidefine i64 @add_i64_0x7ffef800(i64 %x) { 481dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_0x7ffef800: 482dcf9c60aSWANG Xuerui; LA32: # %bb.0: 483dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, 524271 484dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a2, $a2, 2048 485dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 486dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 487dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a1, $a1, $a0 488dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 489dcf9c60aSWANG Xuerui; LA32-NEXT: ret 490dcf9c60aSWANG Xuerui; 491dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_0x7ffef800: 492dcf9c60aSWANG Xuerui; LA64: # %bb.0: 4932b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, 32767 4942b8cb7d8SWANG Xuerui; LA64-NEXT: addi.d $a0, $a0, -2048 495dcf9c60aSWANG Xuerui; LA64-NEXT: ret 496dcf9c60aSWANG Xuerui %add = add i64 %x, 2147416064 497dcf9c60aSWANG Xuerui ret i64 %add 498dcf9c60aSWANG Xuerui} 499dcf9c60aSWANG Xuerui 500dcf9c60aSWANG Xueruidefine i64 @add_i64_minus_0x80000800(i64 %x) { 501dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_minus_0x80000800: 502dcf9c60aSWANG Xuerui; LA32: # %bb.0: 503dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, 524287 504dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a2, $a2, 2048 505dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 506dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 507dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a1, $a0 508dcf9c60aSWANG Xuerui; LA32-NEXT: addi.w $a1, $a0, -1 509dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 510dcf9c60aSWANG Xuerui; LA32-NEXT: ret 511dcf9c60aSWANG Xuerui; 512dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_minus_0x80000800: 513dcf9c60aSWANG Xuerui; LA64: # %bb.0: 5142b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -32768 5152b8cb7d8SWANG Xuerui; LA64-NEXT: addi.d $a0, $a0, -2048 516dcf9c60aSWANG Xuerui; LA64-NEXT: ret 517dcf9c60aSWANG Xuerui %add = add i64 %x, -2147485696 518dcf9c60aSWANG Xuerui ret i64 %add 519dcf9c60aSWANG Xuerui} 520dcf9c60aSWANG Xuerui 521dcf9c60aSWANG Xueruidefine i32 @add_i32_minus_0x23450679(i32 %x) { 522dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x23450679: 523dcf9c60aSWANG Xuerui; LA32: # %bb.0: 524dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, -144465 525dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 2439 526dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 527dcf9c60aSWANG Xuerui; LA32-NEXT: ret 528dcf9c60aSWANG Xuerui; 529dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x23450679: 530dcf9c60aSWANG Xuerui; LA64: # %bb.0: 5312b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -9029 532*718331f5Shev; LA64-NEXT: addi.w $a0, $a0, -1657 533dcf9c60aSWANG Xuerui; LA64-NEXT: ret 534dcf9c60aSWANG Xuerui %add = add i32 %x, -591726201 535dcf9c60aSWANG Xuerui ret i32 %add 536dcf9c60aSWANG Xuerui} 537dcf9c60aSWANG Xuerui 538dcf9c60aSWANG Xueruidefine signext i32 @add_i32_minus_0x23450679_sext(i32 %x) { 539dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x23450679_sext: 540dcf9c60aSWANG Xuerui; LA32: # %bb.0: 541dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, -144465 542dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 2439 543dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 544dcf9c60aSWANG Xuerui; LA32-NEXT: ret 545dcf9c60aSWANG Xuerui; 546dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x23450679_sext: 547dcf9c60aSWANG Xuerui; LA64: # %bb.0: 5482b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -9029 5492b8cb7d8SWANG Xuerui; LA64-NEXT: addi.w $a0, $a0, -1657 550dcf9c60aSWANG Xuerui; LA64-NEXT: ret 551dcf9c60aSWANG Xuerui %add = add i32 %x, -591726201 552dcf9c60aSWANG Xuerui ret i32 %add 553dcf9c60aSWANG Xuerui} 554dcf9c60aSWANG Xuerui 555dcf9c60aSWANG Xueruidefine i64 @add_i64_minus_0x23450679(i64 %x) { 556dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_minus_0x23450679: 557dcf9c60aSWANG Xuerui; LA32: # %bb.0: 558dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, -144465 559dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a2, $a2, 2439 560dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 561dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 562dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a1, $a0 563dcf9c60aSWANG Xuerui; LA32-NEXT: addi.w $a1, $a0, -1 564dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 565dcf9c60aSWANG Xuerui; LA32-NEXT: ret 566dcf9c60aSWANG Xuerui; 567dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_minus_0x23450679: 568dcf9c60aSWANG Xuerui; LA64: # %bb.0: 5692b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -9029 5702b8cb7d8SWANG Xuerui; LA64-NEXT: addi.d $a0, $a0, -1657 571dcf9c60aSWANG Xuerui; LA64-NEXT: ret 572dcf9c60aSWANG Xuerui %add = add i64 %x, -591726201 573dcf9c60aSWANG Xuerui ret i64 %add 574dcf9c60aSWANG Xuerui} 575dcf9c60aSWANG Xuerui 576dcf9c60aSWANG Xueruidefine i32 @add_i32_minus_0x2345fedd(i32 %x) { 577dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x2345fedd: 578dcf9c60aSWANG Xuerui; LA32: # %bb.0: 579dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, -144480 580dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 291 581dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 582dcf9c60aSWANG Xuerui; LA32-NEXT: ret 583dcf9c60aSWANG Xuerui; 584dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x2345fedd: 585dcf9c60aSWANG Xuerui; LA64: # %bb.0: 5862b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -9030 587*718331f5Shev; LA64-NEXT: addi.w $a0, $a0, 291 588dcf9c60aSWANG Xuerui; LA64-NEXT: ret 589dcf9c60aSWANG Xuerui %add = add i32 %x, -591789789 590dcf9c60aSWANG Xuerui ret i32 %add 591dcf9c60aSWANG Xuerui} 592dcf9c60aSWANG Xuerui 593dcf9c60aSWANG Xueruidefine signext i32 @add_i32_minus_0x2345fedd_sext(i32 %x) { 594dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x2345fedd_sext: 595dcf9c60aSWANG Xuerui; LA32: # %bb.0: 596dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, -144480 597dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 291 598dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 599dcf9c60aSWANG Xuerui; LA32-NEXT: ret 600dcf9c60aSWANG Xuerui; 601dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x2345fedd_sext: 602dcf9c60aSWANG Xuerui; LA64: # %bb.0: 6032b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -9030 6042b8cb7d8SWANG Xuerui; LA64-NEXT: addi.w $a0, $a0, 291 605dcf9c60aSWANG Xuerui; LA64-NEXT: ret 606dcf9c60aSWANG Xuerui %add = add i32 %x, -591789789 607dcf9c60aSWANG Xuerui ret i32 %add 608dcf9c60aSWANG Xuerui} 609dcf9c60aSWANG Xuerui 610dcf9c60aSWANG Xueruidefine i64 @add_i64_minus_0x2345fedd(i64 %x) { 611dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_minus_0x2345fedd: 612dcf9c60aSWANG Xuerui; LA32: # %bb.0: 613dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, -144480 614dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a2, $a2, 291 615dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 616dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 617dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a1, $a0 618dcf9c60aSWANG Xuerui; LA32-NEXT: addi.w $a1, $a0, -1 619dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 620dcf9c60aSWANG Xuerui; LA32-NEXT: ret 621dcf9c60aSWANG Xuerui; 622dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_minus_0x2345fedd: 623dcf9c60aSWANG Xuerui; LA64: # %bb.0: 6242b8cb7d8SWANG Xuerui; LA64-NEXT: addu16i.d $a0, $a0, -9030 6252b8cb7d8SWANG Xuerui; LA64-NEXT: addi.d $a0, $a0, 291 626dcf9c60aSWANG Xuerui; LA64-NEXT: ret 627dcf9c60aSWANG Xuerui %add = add i64 %x, -591789789 628dcf9c60aSWANG Xuerui ret i64 %add 629dcf9c60aSWANG Xuerui} 630dcf9c60aSWANG Xuerui 631dcf9c60aSWANG Xuerui;; Check that `addu16i.d` isn't used for the following cases. 632dcf9c60aSWANG Xuerui 633dcf9c60aSWANG Xueruidefine i64 @add_i64_0x80000000(i64 %x) { 634dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_0x80000000: 635dcf9c60aSWANG Xuerui; LA32: # %bb.0: 636dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, -524288 637dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 638dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 639dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a1, $a1, $a0 640dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 641dcf9c60aSWANG Xuerui; LA32-NEXT: ret 642dcf9c60aSWANG Xuerui; 643dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_0x80000000: 644dcf9c60aSWANG Xuerui; LA64: # %bb.0: 645dcf9c60aSWANG Xuerui; LA64-NEXT: lu12i.w $a1, -524288 646dcf9c60aSWANG Xuerui; LA64-NEXT: lu32i.d $a1, 0 647dcf9c60aSWANG Xuerui; LA64-NEXT: add.d $a0, $a0, $a1 648dcf9c60aSWANG Xuerui; LA64-NEXT: ret 649dcf9c60aSWANG Xuerui %add = add i64 %x, 2147483648 650dcf9c60aSWANG Xuerui ret i64 %add 651dcf9c60aSWANG Xuerui} 652dcf9c60aSWANG Xuerui 653dcf9c60aSWANG Xueruidefine i64 @add_i64_0xffff0000(i64 %x) { 654dcf9c60aSWANG Xuerui; LA32-LABEL: add_i64_0xffff0000: 655dcf9c60aSWANG Xuerui; LA32: # %bb.0: 656dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a2, -16 657dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a2, $a0, $a2 658dcf9c60aSWANG Xuerui; LA32-NEXT: sltu $a0, $a2, $a0 659dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a1, $a1, $a0 660dcf9c60aSWANG Xuerui; LA32-NEXT: move $a0, $a2 661dcf9c60aSWANG Xuerui; LA32-NEXT: ret 662dcf9c60aSWANG Xuerui; 663dcf9c60aSWANG Xuerui; LA64-LABEL: add_i64_0xffff0000: 664dcf9c60aSWANG Xuerui; LA64: # %bb.0: 665dcf9c60aSWANG Xuerui; LA64-NEXT: lu12i.w $a1, -16 666dcf9c60aSWANG Xuerui; LA64-NEXT: lu32i.d $a1, 0 667dcf9c60aSWANG Xuerui; LA64-NEXT: add.d $a0, $a0, $a1 668dcf9c60aSWANG Xuerui; LA64-NEXT: ret 669dcf9c60aSWANG Xuerui %add = add i64 %x, 4294901760 670dcf9c60aSWANG Xuerui ret i64 %add 671dcf9c60aSWANG Xuerui} 672dcf9c60aSWANG Xuerui 673dcf9c60aSWANG Xuerui;; -0x80000800 is equivalent to +0x7ffff800 in i32, so addu16i.d isn't matched 674dcf9c60aSWANG Xuerui;; in this case. 675dcf9c60aSWANG Xueruidefine i32 @add_i32_minus_0x80000800(i32 %x) { 676dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x80000800: 677dcf9c60aSWANG Xuerui; LA32: # %bb.0: 678dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 524287 679dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 2048 680dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 681dcf9c60aSWANG Xuerui; LA32-NEXT: ret 682dcf9c60aSWANG Xuerui; 683dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x80000800: 684dcf9c60aSWANG Xuerui; LA64: # %bb.0: 685dcf9c60aSWANG Xuerui; LA64-NEXT: lu12i.w $a1, 524287 686dcf9c60aSWANG Xuerui; LA64-NEXT: ori $a1, $a1, 2048 687*718331f5Shev; LA64-NEXT: add.w $a0, $a0, $a1 688dcf9c60aSWANG Xuerui; LA64-NEXT: ret 689dcf9c60aSWANG Xuerui %add = add i32 %x, -2147485696 690dcf9c60aSWANG Xuerui ret i32 %add 691dcf9c60aSWANG Xuerui} 692dcf9c60aSWANG Xuerui 693dcf9c60aSWANG Xueruidefine signext i32 @add_i32_minus_0x80000800_sext(i32 %x) { 694dcf9c60aSWANG Xuerui; LA32-LABEL: add_i32_minus_0x80000800_sext: 695dcf9c60aSWANG Xuerui; LA32: # %bb.0: 696dcf9c60aSWANG Xuerui; LA32-NEXT: lu12i.w $a1, 524287 697dcf9c60aSWANG Xuerui; LA32-NEXT: ori $a1, $a1, 2048 698dcf9c60aSWANG Xuerui; LA32-NEXT: add.w $a0, $a0, $a1 699dcf9c60aSWANG Xuerui; LA32-NEXT: ret 700dcf9c60aSWANG Xuerui; 701dcf9c60aSWANG Xuerui; LA64-LABEL: add_i32_minus_0x80000800_sext: 702dcf9c60aSWANG Xuerui; LA64: # %bb.0: 703dcf9c60aSWANG Xuerui; LA64-NEXT: lu12i.w $a1, 524287 704dcf9c60aSWANG Xuerui; LA64-NEXT: ori $a1, $a1, 2048 705dcf9c60aSWANG Xuerui; LA64-NEXT: add.w $a0, $a0, $a1 706dcf9c60aSWANG Xuerui; LA64-NEXT: ret 707dcf9c60aSWANG Xuerui %add = add i32 %x, -2147485696 708dcf9c60aSWANG Xuerui ret i32 %add 709dcf9c60aSWANG Xuerui} 710777318dfSBen Shi 711777318dfSBen Shidefine signext i32 @add_i32_4080(i32 %x) { 712777318dfSBen Shi; LA32-LABEL: add_i32_4080: 713777318dfSBen Shi; LA32: # %bb.0: 714ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, 2047 715ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, 2033 716777318dfSBen Shi; LA32-NEXT: ret 717777318dfSBen Shi; 718777318dfSBen Shi; LA64-LABEL: add_i32_4080: 719777318dfSBen Shi; LA64: # %bb.0: 720e9bcd2bfShev; LA64-NEXT: addi.d $a0, $a0, 2047 721ec37a35aSBen Shi; LA64-NEXT: addi.w $a0, $a0, 2033 722777318dfSBen Shi; LA64-NEXT: ret 723777318dfSBen Shi %add = add i32 %x, 4080 724777318dfSBen Shi ret i32 %add 725777318dfSBen Shi} 726777318dfSBen Shi 727777318dfSBen Shidefine signext i32 @add_i32_minus_4080(i32 %x) { 728777318dfSBen Shi; LA32-LABEL: add_i32_minus_4080: 729777318dfSBen Shi; LA32: # %bb.0: 730ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, -2048 731ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, -2032 732777318dfSBen Shi; LA32-NEXT: ret 733777318dfSBen Shi; 734777318dfSBen Shi; LA64-LABEL: add_i32_minus_4080: 735777318dfSBen Shi; LA64: # %bb.0: 736e9bcd2bfShev; LA64-NEXT: addi.d $a0, $a0, -2048 737ec37a35aSBen Shi; LA64-NEXT: addi.w $a0, $a0, -2032 738777318dfSBen Shi; LA64-NEXT: ret 739777318dfSBen Shi %add = add i32 %x, -4080 740777318dfSBen Shi ret i32 %add 741777318dfSBen Shi} 742777318dfSBen Shi 743777318dfSBen Shidefine signext i32 @add_i32_2048(i32 %x) { 744777318dfSBen Shi; LA32-LABEL: add_i32_2048: 745777318dfSBen Shi; LA32: # %bb.0: 746ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, 2047 747ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, 1 748777318dfSBen Shi; LA32-NEXT: ret 749777318dfSBen Shi; 750777318dfSBen Shi; LA64-LABEL: add_i32_2048: 751777318dfSBen Shi; LA64: # %bb.0: 752e9bcd2bfShev; LA64-NEXT: addi.d $a0, $a0, 2047 753ec37a35aSBen Shi; LA64-NEXT: addi.w $a0, $a0, 1 754777318dfSBen Shi; LA64-NEXT: ret 755777318dfSBen Shi %add = add i32 %x, 2048 756777318dfSBen Shi ret i32 %add 757777318dfSBen Shi} 758777318dfSBen Shi 759777318dfSBen Shidefine signext i32 @add_i32_4094(i32 %x) { 760777318dfSBen Shi; LA32-LABEL: add_i32_4094: 761777318dfSBen Shi; LA32: # %bb.0: 762ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, 2047 763ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, 2047 764777318dfSBen Shi; LA32-NEXT: ret 765777318dfSBen Shi; 766777318dfSBen Shi; LA64-LABEL: add_i32_4094: 767777318dfSBen Shi; LA64: # %bb.0: 768e9bcd2bfShev; LA64-NEXT: addi.d $a0, $a0, 2047 769ec37a35aSBen Shi; LA64-NEXT: addi.w $a0, $a0, 2047 770777318dfSBen Shi; LA64-NEXT: ret 771777318dfSBen Shi %add = add i32 %x, 4094 772777318dfSBen Shi ret i32 %add 773777318dfSBen Shi} 774777318dfSBen Shi 775777318dfSBen Shidefine signext i32 @add_i32_minus_2049(i32 %x) { 776777318dfSBen Shi; LA32-LABEL: add_i32_minus_2049: 777777318dfSBen Shi; LA32: # %bb.0: 778ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, -2048 779ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, -1 780777318dfSBen Shi; LA32-NEXT: ret 781777318dfSBen Shi; 782777318dfSBen Shi; LA64-LABEL: add_i32_minus_2049: 783777318dfSBen Shi; LA64: # %bb.0: 784e9bcd2bfShev; LA64-NEXT: addi.d $a0, $a0, -2048 785ec37a35aSBen Shi; LA64-NEXT: addi.w $a0, $a0, -1 786777318dfSBen Shi; LA64-NEXT: ret 787777318dfSBen Shi %add = add i32 %x, -2049 788777318dfSBen Shi ret i32 %add 789777318dfSBen Shi} 790777318dfSBen Shi 791777318dfSBen Shidefine signext i32 @add_i32_minus_4096(i32 %x) { 792777318dfSBen Shi; LA32-LABEL: add_i32_minus_4096: 793777318dfSBen Shi; LA32: # %bb.0: 794ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, -2048 795ec37a35aSBen Shi; LA32-NEXT: addi.w $a0, $a0, -2048 796777318dfSBen Shi; LA32-NEXT: ret 797777318dfSBen Shi; 798777318dfSBen Shi; LA64-LABEL: add_i32_minus_4096: 799777318dfSBen Shi; LA64: # %bb.0: 800e9bcd2bfShev; LA64-NEXT: addi.d $a0, $a0, -2048 801ec37a35aSBen Shi; LA64-NEXT: addi.w $a0, $a0, -2048 802777318dfSBen Shi; LA64-NEXT: ret 803777318dfSBen Shi %add = add i32 %x, -4096 804777318dfSBen Shi ret i32 %add 805777318dfSBen Shi} 806777318dfSBen Shi 807777318dfSBen Shidefine i64 @add_i64_4080(i64 %x) { 808777318dfSBen Shi; LA32-LABEL: add_i64_4080: 809777318dfSBen Shi; LA32: # %bb.0: 810ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a0, 2047 811ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a2, 2033 812777318dfSBen Shi; LA32-NEXT: sltu $a0, $a2, $a0 813777318dfSBen Shi; LA32-NEXT: add.w $a1, $a1, $a0 814777318dfSBen Shi; LA32-NEXT: move $a0, $a2 815777318dfSBen Shi; LA32-NEXT: ret 816777318dfSBen Shi; 817777318dfSBen Shi; LA64-LABEL: add_i64_4080: 818777318dfSBen Shi; LA64: # %bb.0: 819ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, 2047 820ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, 2033 821777318dfSBen Shi; LA64-NEXT: ret 822777318dfSBen Shi %add = add i64 %x, 4080 823777318dfSBen Shi ret i64 %add 824777318dfSBen Shi} 825777318dfSBen Shi 826777318dfSBen Shidefine i64 @add_i64_minus_4080(i64 %x) { 827777318dfSBen Shi; LA32-LABEL: add_i64_minus_4080: 828777318dfSBen Shi; LA32: # %bb.0: 829ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a0, -2048 830ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a2, -2032 831777318dfSBen Shi; LA32-NEXT: sltu $a0, $a2, $a0 832777318dfSBen Shi; LA32-NEXT: add.w $a0, $a1, $a0 833777318dfSBen Shi; LA32-NEXT: addi.w $a1, $a0, -1 834777318dfSBen Shi; LA32-NEXT: move $a0, $a2 835777318dfSBen Shi; LA32-NEXT: ret 836777318dfSBen Shi; 837777318dfSBen Shi; LA64-LABEL: add_i64_minus_4080: 838777318dfSBen Shi; LA64: # %bb.0: 839ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, -2048 840ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, -2032 841777318dfSBen Shi; LA64-NEXT: ret 842777318dfSBen Shi %add = add i64 %x, -4080 843777318dfSBen Shi ret i64 %add 844777318dfSBen Shi} 845777318dfSBen Shi 846777318dfSBen Shidefine i64 @add_i64_2048(i64 %x) { 847777318dfSBen Shi; LA32-LABEL: add_i64_2048: 848777318dfSBen Shi; LA32: # %bb.0: 849ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a0, 2047 850ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a2, 1 851777318dfSBen Shi; LA32-NEXT: sltu $a0, $a2, $a0 852777318dfSBen Shi; LA32-NEXT: add.w $a1, $a1, $a0 853777318dfSBen Shi; LA32-NEXT: move $a0, $a2 854777318dfSBen Shi; LA32-NEXT: ret 855777318dfSBen Shi; 856777318dfSBen Shi; LA64-LABEL: add_i64_2048: 857777318dfSBen Shi; LA64: # %bb.0: 858ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, 2047 859ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, 1 860777318dfSBen Shi; LA64-NEXT: ret 861777318dfSBen Shi %add = add i64 %x, 2048 862777318dfSBen Shi ret i64 %add 863777318dfSBen Shi} 864777318dfSBen Shi 865777318dfSBen Shidefine i64 @add_i64_4094(i64 %x) { 866777318dfSBen Shi; LA32-LABEL: add_i64_4094: 867777318dfSBen Shi; LA32: # %bb.0: 868ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a0, 2047 869ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a2, 2047 870777318dfSBen Shi; LA32-NEXT: sltu $a0, $a2, $a0 871777318dfSBen Shi; LA32-NEXT: add.w $a1, $a1, $a0 872777318dfSBen Shi; LA32-NEXT: move $a0, $a2 873777318dfSBen Shi; LA32-NEXT: ret 874777318dfSBen Shi; 875777318dfSBen Shi; LA64-LABEL: add_i64_4094: 876777318dfSBen Shi; LA64: # %bb.0: 877ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, 2047 878ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, 2047 879777318dfSBen Shi; LA64-NEXT: ret 880777318dfSBen Shi %add = add i64 %x, 4094 881777318dfSBen Shi ret i64 %add 882777318dfSBen Shi} 883777318dfSBen Shi 884777318dfSBen Shidefine i64 @add_i64_minus_2049(i64 %x) { 885777318dfSBen Shi; LA32-LABEL: add_i64_minus_2049: 886777318dfSBen Shi; LA32: # %bb.0: 887ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a0, -2048 888ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a2, -1 889777318dfSBen Shi; LA32-NEXT: sltu $a0, $a2, $a0 890777318dfSBen Shi; LA32-NEXT: add.w $a0, $a1, $a0 891777318dfSBen Shi; LA32-NEXT: addi.w $a1, $a0, -1 892777318dfSBen Shi; LA32-NEXT: move $a0, $a2 893777318dfSBen Shi; LA32-NEXT: ret 894777318dfSBen Shi; 895777318dfSBen Shi; LA64-LABEL: add_i64_minus_2049: 896777318dfSBen Shi; LA64: # %bb.0: 897ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, -2048 898ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, -1 899777318dfSBen Shi; LA64-NEXT: ret 900777318dfSBen Shi %add = add i64 %x, -2049 901777318dfSBen Shi ret i64 %add 902777318dfSBen Shi} 903777318dfSBen Shi 904777318dfSBen Shidefine i64 @add_i64_minus_4096(i64 %x) { 905777318dfSBen Shi; LA32-LABEL: add_i64_minus_4096: 906777318dfSBen Shi; LA32: # %bb.0: 907ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a0, -2048 908ec37a35aSBen Shi; LA32-NEXT: addi.w $a2, $a2, -2048 909777318dfSBen Shi; LA32-NEXT: sltu $a0, $a2, $a0 910777318dfSBen Shi; LA32-NEXT: add.w $a0, $a1, $a0 911777318dfSBen Shi; LA32-NEXT: addi.w $a1, $a0, -1 912777318dfSBen Shi; LA32-NEXT: move $a0, $a2 913777318dfSBen Shi; LA32-NEXT: ret 914777318dfSBen Shi; 915777318dfSBen Shi; LA64-LABEL: add_i64_minus_4096: 916777318dfSBen Shi; LA64: # %bb.0: 917ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, -2048 918ec37a35aSBen Shi; LA64-NEXT: addi.d $a0, $a0, -2048 919777318dfSBen Shi; LA64-NEXT: ret 920777318dfSBen Shi %add = add i64 %x, -4096 921777318dfSBen Shi ret i64 %add 922777318dfSBen Shi} 923