1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=riscv64 -run-pass=instruction-select %s -o - \ 3# RUN: -disable-gisel-legality-check | FileCheck %s 4 5--- 6name: load_i8_i64 7legalized: true 8regBankSelected: true 9tracksRegLiveness: true 10body: | 11 bb.0: 12 liveins: $x10 13 14 ; CHECK-LABEL: name: load_i8_i64 15 ; CHECK: liveins: $x10 16 ; CHECK-NEXT: {{ $}} 17 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 18 ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8)) 19 ; CHECK-NEXT: $x10 = COPY [[LBU]] 20 ; CHECK-NEXT: PseudoRET implicit $x10 21 %0:gprb(p0) = COPY $x10 22 %1:gprb(s64) = G_LOAD %0(p0) :: (load (s8)) 23 $x10 = COPY %1(s64) 24 PseudoRET implicit $x10 25 26... 27--- 28name: load_i16_i64 29legalized: true 30regBankSelected: true 31tracksRegLiveness: true 32body: | 33 bb.0: 34 liveins: $x10 35 36 ; CHECK-LABEL: name: load_i16_i64 37 ; CHECK: liveins: $x10 38 ; CHECK-NEXT: {{ $}} 39 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 40 ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16)) 41 ; CHECK-NEXT: $x10 = COPY [[LH]] 42 ; CHECK-NEXT: PseudoRET implicit $x10 43 %0:gprb(p0) = COPY $x10 44 %1:gprb(s64) = G_LOAD %0(p0) :: (load (s16)) 45 $x10 = COPY %1(s64) 46 PseudoRET implicit $x10 47 48... 49--- 50name: load_i8_i16 51legalized: true 52regBankSelected: true 53tracksRegLiveness: true 54body: | 55 bb.0: 56 liveins: $x10 57 58 ; CHECK-LABEL: name: load_i8_i16 59 ; CHECK: liveins: $x10 60 ; CHECK-NEXT: {{ $}} 61 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 62 ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8)) 63 ; CHECK-NEXT: $x10 = COPY [[LBU]] 64 ; CHECK-NEXT: PseudoRET implicit $x10 65 %0:gprb(p0) = COPY $x10 66 %1:gprb(s16) = G_LOAD %0(p0) :: (load (s8)) 67 %2:gprb(s64) = G_ANYEXT %1 68 $x10 = COPY %2(s64) 69 PseudoRET implicit $x10 70 71... 72--- 73name: load_i16_i16 74legalized: true 75regBankSelected: true 76tracksRegLiveness: true 77body: | 78 bb.0: 79 liveins: $x10 80 81 ; CHECK-LABEL: name: load_i16_i16 82 ; CHECK: liveins: $x10 83 ; CHECK-NEXT: {{ $}} 84 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 85 ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16)) 86 ; CHECK-NEXT: $x10 = COPY [[LH]] 87 ; CHECK-NEXT: PseudoRET implicit $x10 88 %0:gprb(p0) = COPY $x10 89 %1:gprb(s16) = G_LOAD %0(p0) :: (load (s16)) 90 %2:gprb(s64) = G_ANYEXT %1 91 $x10 = COPY %2(s64) 92 PseudoRET implicit $x10 93 94... 95--- 96name: load_i32_i64 97legalized: true 98regBankSelected: true 99tracksRegLiveness: true 100body: | 101 bb.0: 102 liveins: $x10 103 104 ; CHECK-LABEL: name: load_i32_i64 105 ; CHECK: liveins: $x10 106 ; CHECK-NEXT: {{ $}} 107 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 108 ; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW [[COPY]], 0 :: (load (s32)) 109 ; CHECK-NEXT: $x10 = COPY [[LW]] 110 ; CHECK-NEXT: PseudoRET implicit $x10 111 %0:gprb(p0) = COPY $x10 112 %1:gprb(s64) = G_LOAD %0(p0) :: (load (s32)) 113 $x10 = COPY %1(s64) 114 PseudoRET implicit $x10 115 116... 117--- 118name: load_i64_i64 119legalized: true 120regBankSelected: true 121tracksRegLiveness: true 122body: | 123 bb.0: 124 liveins: $x10 125 126 ; CHECK-LABEL: name: load_i64_i64 127 ; CHECK: liveins: $x10 128 ; CHECK-NEXT: {{ $}} 129 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 130 ; CHECK-NEXT: [[LD:%[0-9]+]]:gpr = LD [[COPY]], 0 :: (load (s64)) 131 ; CHECK-NEXT: $x10 = COPY [[LD]] 132 ; CHECK-NEXT: PseudoRET implicit $x10 133 %0:gprb(p0) = COPY $x10 134 %1:gprb(s64) = G_LOAD %0(p0) :: (load (s64)) 135 $x10 = COPY %1(s64) 136 PseudoRET implicit $x10 137 138... 139--- 140name: load_p0 141legalized: true 142regBankSelected: true 143tracksRegLiveness: true 144body: | 145 bb.0: 146 liveins: $x10 147 148 ; CHECK-LABEL: name: load_p0 149 ; CHECK: liveins: $x10 150 ; CHECK-NEXT: {{ $}} 151 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 152 ; CHECK-NEXT: [[LD:%[0-9]+]]:gpr = LD [[COPY]], 0 :: (load (p0)) 153 ; CHECK-NEXT: $x10 = COPY [[LD]] 154 ; CHECK-NEXT: PseudoRET implicit $x10 155 %0:gprb(p0) = COPY $x10 156 %1:gprb(p0) = G_LOAD %0(p0) :: (load (p0)) 157 $x10 = COPY %1(p0) 158 PseudoRET implicit $x10 159 160... 161--- 162name: zextload_i8_i64 163legalized: true 164regBankSelected: true 165tracksRegLiveness: true 166body: | 167 bb.0: 168 liveins: $x10 169 170 ; CHECK-LABEL: name: zextload_i8_i64 171 ; CHECK: liveins: $x10 172 ; CHECK-NEXT: {{ $}} 173 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 174 ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8)) 175 ; CHECK-NEXT: $x10 = COPY [[LBU]] 176 ; CHECK-NEXT: PseudoRET implicit $x10 177 %0:gprb(p0) = COPY $x10 178 %1:gprb(s64) = G_ZEXTLOAD %0(p0) :: (load (s8)) 179 $x10 = COPY %1(s64) 180 PseudoRET implicit $x10 181 182... 183--- 184name: zextload_i16_i64 185legalized: true 186regBankSelected: true 187tracksRegLiveness: true 188body: | 189 bb.0: 190 liveins: $x10 191 192 ; CHECK-LABEL: name: zextload_i16_i64 193 ; CHECK: liveins: $x10 194 ; CHECK-NEXT: {{ $}} 195 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 196 ; CHECK-NEXT: [[LHU:%[0-9]+]]:gpr = LHU [[COPY]], 0 :: (load (s16)) 197 ; CHECK-NEXT: $x10 = COPY [[LHU]] 198 ; CHECK-NEXT: PseudoRET implicit $x10 199 %0:gprb(p0) = COPY $x10 200 %1:gprb(s64) = G_ZEXTLOAD %0(p0) :: (load (s16)) 201 $x10 = COPY %1(s64) 202 PseudoRET implicit $x10 203 204... 205--- 206name: zextload_i32_i64 207legalized: true 208regBankSelected: true 209tracksRegLiveness: true 210body: | 211 bb.0: 212 liveins: $x10 213 214 ; CHECK-LABEL: name: zextload_i32_i64 215 ; CHECK: liveins: $x10 216 ; CHECK-NEXT: {{ $}} 217 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 218 ; CHECK-NEXT: [[LWU:%[0-9]+]]:gpr = LWU [[COPY]], 0 :: (load (s32)) 219 ; CHECK-NEXT: $x10 = COPY [[LWU]] 220 ; CHECK-NEXT: PseudoRET implicit $x10 221 %0:gprb(p0) = COPY $x10 222 %1:gprb(s64) = G_ZEXTLOAD %0(p0) :: (load (s32)) 223 $x10 = COPY %1(s64) 224 PseudoRET implicit $x10 225 226... 227--- 228name: sextload_i8_i64 229legalized: true 230regBankSelected: true 231tracksRegLiveness: true 232body: | 233 bb.0: 234 liveins: $x10 235 236 ; CHECK-LABEL: name: sextload_i8_i64 237 ; CHECK: liveins: $x10 238 ; CHECK-NEXT: {{ $}} 239 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 240 ; CHECK-NEXT: [[LB:%[0-9]+]]:gpr = LB [[COPY]], 0 :: (load (s8)) 241 ; CHECK-NEXT: $x10 = COPY [[LB]] 242 ; CHECK-NEXT: PseudoRET implicit $x10 243 %0:gprb(p0) = COPY $x10 244 %1:gprb(s64) = G_SEXTLOAD %0(p0) :: (load (s8)) 245 $x10 = COPY %1(s64) 246 PseudoRET implicit $x10 247 248... 249--- 250name: sextload_i16_i64 251legalized: true 252regBankSelected: true 253tracksRegLiveness: true 254body: | 255 bb.0: 256 liveins: $x10 257 258 ; CHECK-LABEL: name: sextload_i16_i64 259 ; CHECK: liveins: $x10 260 ; CHECK-NEXT: {{ $}} 261 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 262 ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16)) 263 ; CHECK-NEXT: $x10 = COPY [[LH]] 264 ; CHECK-NEXT: PseudoRET implicit $x10 265 %0:gprb(p0) = COPY $x10 266 %1:gprb(s64) = G_SEXTLOAD %0(p0) :: (load (s16)) 267 $x10 = COPY %1(s64) 268 PseudoRET implicit $x10 269 270... 271--- 272name: sextload_i32_i64 273legalized: true 274regBankSelected: true 275tracksRegLiveness: true 276body: | 277 bb.0: 278 liveins: $x10 279 280 ; CHECK-LABEL: name: sextload_i32_i64 281 ; CHECK: liveins: $x10 282 ; CHECK-NEXT: {{ $}} 283 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 284 ; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW [[COPY]], 0 :: (load (s32)) 285 ; CHECK-NEXT: $x10 = COPY [[LW]] 286 ; CHECK-NEXT: PseudoRET implicit $x10 287 %0:gprb(p0) = COPY $x10 288 %1:gprb(s64) = G_SEXTLOAD %0(p0) :: (load (s32)) 289 $x10 = COPY %1(s64) 290 PseudoRET implicit $x10 291 292... 293--- 294name: load_i8_i32 295legalized: true 296regBankSelected: true 297tracksRegLiveness: true 298body: | 299 bb.0: 300 liveins: $x10 301 ; CHECK-LABEL: name: load_i8_i32 302 ; CHECK: liveins: $x10 303 ; CHECK-NEXT: {{ $}} 304 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 305 ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8)) 306 ; CHECK-NEXT: $x10 = COPY [[LBU]] 307 ; CHECK-NEXT: PseudoRET implicit $x10 308 %0:gprb(p0) = COPY $x10 309 %9:gprb(s32) = G_LOAD %0(p0) :: (load (s8)) 310 %5:gprb(s64) = G_ANYEXT %9(s32) 311 $x10 = COPY %5(s64) 312 PseudoRET implicit $x10 313 314... 315--- 316name: load_i16_i32 317legalized: true 318regBankSelected: true 319tracksRegLiveness: true 320body: | 321 bb.0: 322 liveins: $x10 323 ; CHECK-LABEL: name: load_i16_i32 324 ; CHECK: liveins: $x10 325 ; CHECK-NEXT: {{ $}} 326 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 327 ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16)) 328 ; CHECK-NEXT: $x10 = COPY [[LH]] 329 ; CHECK-NEXT: PseudoRET implicit $x10 330 %0:gprb(p0) = COPY $x10 331 %9:gprb(s32) = G_LOAD %0(p0) :: (load (s16)) 332 %5:gprb(s64) = G_ANYEXT %9(s32) 333 $x10 = COPY %5(s64) 334 PseudoRET implicit $x10 335 336... 337--- 338name: load_i32_i32 339legalized: true 340regBankSelected: true 341tracksRegLiveness: true 342body: | 343 bb.0: 344 liveins: $x10 345 ; CHECK-LABEL: name: load_i32_i32 346 ; CHECK: liveins: $x10 347 ; CHECK-NEXT: {{ $}} 348 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 349 ; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW [[COPY]], 0 :: (load (s32)) 350 ; CHECK-NEXT: $x10 = COPY [[LW]] 351 ; CHECK-NEXT: PseudoRET implicit $x10 352 %0:gprb(p0) = COPY $x10 353 %9:gprb(s32) = G_LOAD %0(p0) :: (load (s32)) 354 %5:gprb(s64) = G_ANYEXT %9(s32) 355 $x10 = COPY %5(s64) 356 PseudoRET implicit $x10 357 358... 359--- 360name: load_fi_i64 361legalized: true 362regBankSelected: true 363tracksRegLiveness: true 364 365stack: 366 - { id: 0, offset: 0, size: 8, alignment: 8 } 367 368body: | 369 bb.0: 370 ; CHECK-LABEL: name: load_fi_i64 371 ; CHECK: [[LD:%[0-9]+]]:gpr = LD %stack.0, 0 :: (load (s64)) 372 ; CHECK-NEXT: $x10 = COPY [[LD]] 373 ; CHECK-NEXT: PseudoRET implicit $x10 374 %0:gprb(p0) = G_FRAME_INDEX %stack.0 375 %1:gprb(s64) = G_LOAD %0(p0) :: (load (s64)) 376 $x10 = COPY %1(s64) 377 PseudoRET implicit $x10 378 379... 380--- 381name: load_fi_gep_i64_i64 382legalized: true 383regBankSelected: true 384tracksRegLiveness: true 385 386stack: 387 - { id: 0, offset: 0, size: 16, alignment: 8 } 388 389body: | 390 bb.0: 391 ; CHECK-LABEL: name: load_fi_gep_i64_i64 392 ; CHECK: [[LD:%[0-9]+]]:gpr = LD %stack.0, 8 :: (load (s64)) 393 ; CHECK-NEXT: $x10 = COPY [[LD]] 394 ; CHECK-NEXT: PseudoRET implicit $x10 395 %0:gprb(p0) = G_FRAME_INDEX %stack.0 396 %1:gprb(s64) = G_CONSTANT i64 8 397 %2:gprb(p0) = G_PTR_ADD %0(p0), %1(s64) 398 %3:gprb(s64) = G_LOAD %2(p0) :: (load (s64)) 399 $x10 = COPY %3(s64) 400 PseudoRET implicit $x10 401 402... 403--- 404name: load_gep_i64_i64 405legalized: true 406regBankSelected: true 407tracksRegLiveness: true 408body: | 409 bb.0: 410 liveins: $x10 411 412 ; CHECK-LABEL: name: load_gep_i64_i64 413 ; CHECK: liveins: $x10 414 ; CHECK-NEXT: {{ $}} 415 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 416 ; CHECK-NEXT: [[LD:%[0-9]+]]:gpr = LD [[COPY]], 8 :: (load (s64)) 417 ; CHECK-NEXT: $x10 = COPY [[LD]] 418 ; CHECK-NEXT: PseudoRET implicit $x10 419 %0:gprb(p0) = COPY $x10 420 %1:gprb(s64) = G_CONSTANT i64 8 421 %2:gprb(p0) = G_PTR_ADD %0(p0), %1(s64) 422 %3:gprb(s64) = G_LOAD %2(p0) :: (load (s64)) 423 $x10 = COPY %3(s64) 424 PseudoRET implicit $x10 425 426... 427