783 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64 -run-pass=loadstore-opt -verify-machineinstrs %s -o - | FileCheck %s3---4name: trunc_i16_to_i85alignment: 46tracksRegLiveness: true7liveins:8 - { reg: '$w0' }9 - { reg: '$x1' }10body: |11 bb.1:12 liveins: $w0, $x113 14 ; CHECK-LABEL: name: trunc_i16_to_i815 ; CHECK: liveins: $w0, $x116 ; CHECK-NEXT: {{ $}}17 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w018 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)19 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x120 ; CHECK-NEXT: G_STORE [[TRUNC]](s16), [[COPY1]](p0) :: (store (s16), align 1)21 ; CHECK-NEXT: RET_ReallyLR22 %2:_(s32) = COPY $w023 %0:_(s16) = G_TRUNC %2(s32)24 %1:_(p0) = COPY $x125 %4:_(s16) = G_CONSTANT i16 826 %3:_(s8) = G_TRUNC %0(s16)27 %5:_(s16) = G_LSHR %0, %4(s16)28 %6:_(s8) = G_TRUNC %5(s16)29 G_STORE %3(s8), %1(p0) :: (store (s8))30 %7:_(s64) = G_CONSTANT i64 131 %8:_(p0) = G_PTR_ADD %1, %7(s64)32 G_STORE %6(s8), %8(p0) :: (store (s8))33 RET_ReallyLR34 35...36---37name: trunc_i32_to_i838alignment: 439tracksRegLiveness: true40liveins:41 - { reg: '$w0' }42 - { reg: '$x1' }43body: |44 bb.1:45 liveins: $w0, $x146 47 ; CHECK-LABEL: name: trunc_i32_to_i848 ; CHECK: liveins: $w0, $x149 ; CHECK-NEXT: {{ $}}50 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w051 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x152 ; CHECK-NEXT: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store (s32), align 1)53 ; CHECK-NEXT: RET_ReallyLR54 %0:_(s32) = COPY $w055 %1:_(p0) = COPY $x156 %3:_(s32) = G_CONSTANT i32 857 %6:_(s32) = G_CONSTANT i32 1658 %9:_(s32) = G_CONSTANT i32 2459 %2:_(s8) = G_TRUNC %0(s32)60 %4:_(s32) = G_LSHR %0, %3(s32)61 %5:_(s8) = G_TRUNC %4(s32)62 %7:_(s32) = G_LSHR %0, %6(s32)63 %8:_(s8) = G_TRUNC %7(s32)64 %10:_(s32) = G_LSHR %0, %9(s32)65 %11:_(s8) = G_TRUNC %10(s32)66 G_STORE %2(s8), %1(p0) :: (store (s8))67 %12:_(s64) = G_CONSTANT i64 168 %13:_(p0) = G_PTR_ADD %1, %12(s64)69 G_STORE %5(s8), %13(p0) :: (store (s8))70 %14:_(s64) = G_CONSTANT i64 271 %15:_(p0) = G_PTR_ADD %1, %14(s64)72 G_STORE %8(s8), %15(p0) :: (store (s8))73 %16:_(s64) = G_CONSTANT i64 374 %17:_(p0) = G_PTR_ADD %1, %16(s64)75 G_STORE %11(s8), %17(p0) :: (store (s8))76 RET_ReallyLR77 78...79---80name: trunc_i32_to_i1681alignment: 482tracksRegLiveness: true83liveins:84 - { reg: '$w0' }85 - { reg: '$x1' }86body: |87 bb.1:88 liveins: $w0, $x189 90 ; CHECK-LABEL: name: trunc_i32_to_i1691 ; CHECK: liveins: $w0, $x192 ; CHECK-NEXT: {{ $}}93 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w094 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x195 ; CHECK-NEXT: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store (s32), align 2)96 ; CHECK-NEXT: RET_ReallyLR97 %0:_(s32) = COPY $w098 %1:_(p0) = COPY $x199 %3:_(s32) = G_CONSTANT i32 16100 %2:_(s16) = G_TRUNC %0(s32)101 %4:_(s32) = G_LSHR %0, %3(s32)102 %5:_(s16) = G_TRUNC %4(s32)103 G_STORE %2(s16), %1(p0) :: (store (s16))104 %6:_(s64) = G_CONSTANT i64 2105 %7:_(p0) = G_PTR_ADD %1, %6(s64)106 G_STORE %5(s16), %7(p0) :: (store (s16))107 RET_ReallyLR108 109...110---111name: be_i32_to_i16112alignment: 4113tracksRegLiveness: true114liveins:115 - { reg: '$w0' }116 - { reg: '$x1' }117body: |118 bb.1:119 liveins: $w0, $x1120 121 ; CHECK-LABEL: name: be_i32_to_i16122 ; CHECK: liveins: $w0, $x1123 ; CHECK-NEXT: {{ $}}124 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0125 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1126 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16127 ; CHECK-NEXT: [[ROTR:%[0-9]+]]:_(s32) = G_ROTR [[COPY]], [[C]](s32)128 ; CHECK-NEXT: G_STORE [[ROTR]](s32), [[COPY1]](p0) :: (store (s32), align 2)129 ; CHECK-NEXT: RET_ReallyLR130 %0:_(s32) = COPY $w0131 %1:_(p0) = COPY $x1132 %2:_(s32) = G_CONSTANT i32 16133 %3:_(s32) = G_LSHR %0, %2(s32)134 %4:_(s16) = G_TRUNC %0(s32)135 %5:_(s16) = G_TRUNC %3(s32)136 %6:_(s64) = G_CONSTANT i64 2137 %7:_(p0) = G_PTR_ADD %1, %6(s64)138 G_STORE %4(s16), %7(p0) :: (store (s16))139 G_STORE %5(s16), %1(p0) :: (store (s16))140 RET_ReallyLR141 142...143---144name: be_i32_to_i16_order145alignment: 4146tracksRegLiveness: true147liveins:148 - { reg: '$w0' }149 - { reg: '$x1' }150body: |151 bb.1:152 liveins: $w0, $x1153 154 ; CHECK-LABEL: name: be_i32_to_i16_order155 ; CHECK: liveins: $w0, $x1156 ; CHECK-NEXT: {{ $}}157 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0158 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1159 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16160 ; CHECK-NEXT: [[ROTR:%[0-9]+]]:_(s32) = G_ROTR [[COPY]], [[C]](s32)161 ; CHECK-NEXT: G_STORE [[ROTR]](s32), [[COPY1]](p0) :: (store (s32), align 2)162 ; CHECK-NEXT: RET_ReallyLR163 %0:_(s32) = COPY $w0164 %1:_(p0) = COPY $x1165 %2:_(s32) = G_CONSTANT i32 16166 %3:_(s32) = G_LSHR %0, %2(s32)167 %4:_(s16) = G_TRUNC %0(s32)168 %5:_(s16) = G_TRUNC %3(s32)169 %6:_(s64) = G_CONSTANT i64 2170 %7:_(p0) = G_PTR_ADD %1, %6(s64)171 G_STORE %5(s16), %1(p0) :: (store (s16))172 G_STORE %4(s16), %7(p0) :: (store (s16))173 RET_ReallyLR174 175...176---177name: trunc_i64_to_i8178alignment: 4179tracksRegLiveness: true180liveins:181 - { reg: '$x0' }182 - { reg: '$x1' }183body: |184 bb.1:185 liveins: $x0, $x1186 187 ; CHECK-LABEL: name: trunc_i64_to_i8188 ; CHECK: liveins: $x0, $x1189 ; CHECK-NEXT: {{ $}}190 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0191 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1192 ; CHECK-NEXT: G_STORE [[COPY]](s64), [[COPY1]](p0) :: (store (s64), align 1)193 ; CHECK-NEXT: RET_ReallyLR194 %0:_(s64) = COPY $x0195 %1:_(p0) = COPY $x1196 %3:_(s64) = G_CONSTANT i64 8197 %6:_(s64) = G_CONSTANT i64 16198 %9:_(s64) = G_CONSTANT i64 24199 %12:_(s64) = G_CONSTANT i64 32200 %15:_(s64) = G_CONSTANT i64 40201 %18:_(s64) = G_CONSTANT i64 48202 %21:_(s64) = G_CONSTANT i64 56203 %2:_(s8) = G_TRUNC %0(s64)204 %4:_(s64) = G_LSHR %0, %3(s64)205 %5:_(s8) = G_TRUNC %4(s64)206 %7:_(s64) = G_LSHR %0, %6(s64)207 %8:_(s8) = G_TRUNC %7(s64)208 %10:_(s64) = G_LSHR %0, %9(s64)209 %11:_(s8) = G_TRUNC %10(s64)210 %13:_(s64) = G_LSHR %0, %12(s64)211 %14:_(s8) = G_TRUNC %13(s64)212 %16:_(s64) = G_LSHR %0, %15(s64)213 %17:_(s8) = G_TRUNC %16(s64)214 %19:_(s64) = G_LSHR %0, %18(s64)215 %20:_(s8) = G_TRUNC %19(s64)216 %22:_(s64) = G_LSHR %0, %21(s64)217 %23:_(s8) = G_TRUNC %22(s64)218 G_STORE %2(s8), %1(p0) :: (store (s8))219 %24:_(s64) = G_CONSTANT i64 1220 %25:_(p0) = G_PTR_ADD %1, %24(s64)221 G_STORE %5(s8), %25(p0) :: (store (s8))222 %26:_(s64) = G_CONSTANT i64 2223 %27:_(p0) = G_PTR_ADD %1, %26(s64)224 G_STORE %8(s8), %27(p0) :: (store (s8))225 %28:_(s64) = G_CONSTANT i64 3226 %29:_(p0) = G_PTR_ADD %1, %28(s64)227 G_STORE %11(s8), %29(p0) :: (store (s8))228 %30:_(s64) = G_CONSTANT i64 4229 %31:_(p0) = G_PTR_ADD %1, %30(s64)230 G_STORE %14(s8), %31(p0) :: (store (s8))231 %32:_(s64) = G_CONSTANT i64 5232 %33:_(p0) = G_PTR_ADD %1, %32(s64)233 G_STORE %17(s8), %33(p0) :: (store (s8))234 %34:_(s64) = G_CONSTANT i64 6235 %35:_(p0) = G_PTR_ADD %1, %34(s64)236 G_STORE %20(s8), %35(p0) :: (store (s8))237 %36:_(s64) = G_CONSTANT i64 7238 %37:_(p0) = G_PTR_ADD %1, %36(s64)239 G_STORE %23(s8), %37(p0) :: (store (s8))240 RET_ReallyLR241 242...243---244name: trunc_i64_to_i16245alignment: 4246tracksRegLiveness: true247liveins:248 - { reg: '$x0' }249 - { reg: '$x1' }250body: |251 bb.1:252 liveins: $x0, $x1253 254 ; CHECK-LABEL: name: trunc_i64_to_i16255 ; CHECK: liveins: $x0, $x1256 ; CHECK-NEXT: {{ $}}257 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0258 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1259 ; CHECK-NEXT: G_STORE [[COPY]](s64), [[COPY1]](p0) :: (store (s64), align 2)260 ; CHECK-NEXT: RET_ReallyLR261 %0:_(s64) = COPY $x0262 %1:_(p0) = COPY $x1263 %3:_(s64) = G_CONSTANT i64 16264 %6:_(s64) = G_CONSTANT i64 32265 %9:_(s64) = G_CONSTANT i64 48266 %2:_(s16) = G_TRUNC %0(s64)267 %4:_(s64) = G_LSHR %0, %3(s64)268 %5:_(s16) = G_TRUNC %4(s64)269 %7:_(s64) = G_LSHR %0, %6(s64)270 %8:_(s16) = G_TRUNC %7(s64)271 %10:_(s64) = G_LSHR %0, %9(s64)272 %11:_(s16) = G_TRUNC %10(s64)273 G_STORE %2(s16), %1(p0) :: (store (s16))274 %12:_(s64) = G_CONSTANT i64 2275 %13:_(p0) = G_PTR_ADD %1, %12(s64)276 G_STORE %5(s16), %13(p0) :: (store (s16))277 %14:_(s64) = G_CONSTANT i64 4278 %15:_(p0) = G_PTR_ADD %1, %14(s64)279 G_STORE %8(s16), %15(p0) :: (store (s16))280 %16:_(s64) = G_CONSTANT i64 6281 %17:_(p0) = G_PTR_ADD %1, %16(s64)282 G_STORE %11(s16), %17(p0) :: (store (s16))283 RET_ReallyLR284 285...286---287name: trunc_i64_to_i32288alignment: 4289tracksRegLiveness: true290liveins:291 - { reg: '$x0' }292 - { reg: '$x1' }293body: |294 bb.1:295 liveins: $x0, $x1296 297 ; CHECK-LABEL: name: trunc_i64_to_i32298 ; CHECK: liveins: $x0, $x1299 ; CHECK-NEXT: {{ $}}300 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0301 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1302 ; CHECK-NEXT: G_STORE [[COPY]](s64), [[COPY1]](p0) :: (store (s64), align 4)303 ; CHECK-NEXT: RET_ReallyLR304 %0:_(s64) = COPY $x0305 %1:_(p0) = COPY $x1306 %3:_(s64) = G_CONSTANT i64 32307 %2:_(s32) = G_TRUNC %0(s64)308 %4:_(s64) = G_LSHR %0, %3(s64)309 %5:_(s32) = G_TRUNC %4(s64)310 G_STORE %2(s32), %1(p0) :: (store (s32))311 %6:_(s64) = G_CONSTANT i64 4312 %7:_(p0) = G_PTR_ADD %1, %6(s64)313 G_STORE %5(s32), %7(p0) :: (store (s32))314 RET_ReallyLR315 316...317---318name: be_i64_to_i32319alignment: 4320tracksRegLiveness: true321liveins:322 - { reg: '$x0' }323 - { reg: '$x1' }324body: |325 bb.1:326 liveins: $x0, $x1327 328 ; CHECK-LABEL: name: be_i64_to_i32329 ; CHECK: liveins: $x0, $x1330 ; CHECK-NEXT: {{ $}}331 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0332 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1333 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 32334 ; CHECK-NEXT: [[ROTR:%[0-9]+]]:_(s64) = G_ROTR [[COPY]], [[C]](s64)335 ; CHECK-NEXT: G_STORE [[ROTR]](s64), [[COPY1]](p0) :: (store (s64), align 4)336 ; CHECK-NEXT: RET_ReallyLR337 %0:_(s64) = COPY $x0338 %1:_(p0) = COPY $x1339 %2:_(s64) = G_CONSTANT i64 32340 %3:_(s64) = G_LSHR %0, %2(s64)341 %4:_(s32) = G_TRUNC %0(s64)342 %5:_(s32) = G_TRUNC %3(s64)343 %6:_(s64) = G_CONSTANT i64 4344 %7:_(p0) = G_PTR_ADD %1, %6(s64)345 G_STORE %4(s32), %7(p0) :: (store (s32))346 G_STORE %5(s32), %1(p0) :: (store (s32))347 RET_ReallyLR348 349...350---351name: be_i64_to_i32_order352alignment: 4353tracksRegLiveness: true354liveins:355 - { reg: '$x0' }356 - { reg: '$x1' }357body: |358 bb.1:359 liveins: $x0, $x1360 361 ; CHECK-LABEL: name: be_i64_to_i32_order362 ; CHECK: liveins: $x0, $x1363 ; CHECK-NEXT: {{ $}}364 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0365 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1366 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 32367 ; CHECK-NEXT: [[ROTR:%[0-9]+]]:_(s64) = G_ROTR [[COPY]], [[C]](s64)368 ; CHECK-NEXT: G_STORE [[ROTR]](s64), [[COPY1]](p0) :: (store (s64), align 4)369 ; CHECK-NEXT: RET_ReallyLR370 %0:_(s64) = COPY $x0371 %1:_(p0) = COPY $x1372 %2:_(s64) = G_CONSTANT i64 32373 %3:_(s64) = G_LSHR %0, %2(s64)374 %4:_(s32) = G_TRUNC %0(s64)375 %5:_(s32) = G_TRUNC %3(s64)376 %6:_(s64) = G_CONSTANT i64 4377 %7:_(p0) = G_PTR_ADD %1, %6(s64)378 G_STORE %5(s32), %1(p0) :: (store (s32))379 G_STORE %4(s32), %7(p0) :: (store (s32))380 RET_ReallyLR381 382...383---384name: merge_hole385alignment: 4386tracksRegLiveness: true387liveins:388 - { reg: '$w0' }389 - { reg: '$x1' }390body: |391 bb.1:392 liveins: $w0, $x1393 394 ; CHECK-LABEL: name: merge_hole395 ; CHECK: liveins: $w0, $x1396 ; CHECK-NEXT: {{ $}}397 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0398 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1399 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16400 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2401 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)402 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)403 ; CHECK-NEXT: G_STORE [[TRUNC]](s8), [[COPY1]](p0) :: (store (s8))404 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)405 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)406 ; CHECK-NEXT: G_STORE [[TRUNC1]](s16), [[PTR_ADD]](p0) :: (store (s16), align 1)407 ; CHECK-NEXT: RET_ReallyLR408 %0:_(s32) = COPY $w0409 %1:_(p0) = COPY $x1410 %5:_(s32) = G_CONSTANT i32 16411 %2:_(s64) = G_CONSTANT i64 2412 %3:_(p0) = G_PTR_ADD %1, %2(s64)413 %4:_(s8) = G_TRUNC %0(s32)414 G_STORE %4(s8), %1(p0) :: (store (s8))415 %6:_(s32) = G_LSHR %0, %5(s32)416 %7:_(s16) = G_TRUNC %6(s32)417 G_STORE %7(s16), %3(p0) :: (store (s16), align 1)418 RET_ReallyLR419 420...421---422name: merge_hole2423alignment: 4424tracksRegLiveness: true425liveins:426 - { reg: '$w0' }427 - { reg: '$x1' }428body: |429 bb.1:430 liveins: $w0, $x1431 432 ; CHECK-LABEL: name: merge_hole2433 ; CHECK: liveins: $w0, $x1434 ; CHECK-NEXT: {{ $}}435 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0436 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1437 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16438 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2439 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)440 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)441 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)442 ; CHECK-NEXT: G_STORE [[TRUNC]](s16), [[PTR_ADD]](p0) :: (store (s16), align 1)443 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)444 ; CHECK-NEXT: G_STORE [[TRUNC1]](s8), [[COPY1]](p0) :: (store (s8))445 ; CHECK-NEXT: RET_ReallyLR446 %0:_(s32) = COPY $w0447 %1:_(p0) = COPY $x1448 %4:_(s32) = G_CONSTANT i32 16449 %2:_(s64) = G_CONSTANT i64 2450 %3:_(p0) = G_PTR_ADD %1, %2(s64)451 %5:_(s32) = G_LSHR %0, %4(s32)452 %6:_(s16) = G_TRUNC %5(s32)453 G_STORE %6(s16), %3(p0) :: (store (s16), align 1)454 %7:_(s8) = G_TRUNC %0(s32)455 G_STORE %7(s8), %1(p0) :: (store (s8))456 RET_ReallyLR457 458...459---460name: merge_hole3461alignment: 4462tracksRegLiveness: true463liveins:464 - { reg: '$w0' }465 - { reg: '$x1' }466body: |467 bb.1:468 liveins: $w0, $x1469 470 ; CHECK-LABEL: name: merge_hole3471 ; CHECK: liveins: $w0, $x1472 ; CHECK-NEXT: {{ $}}473 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0474 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1475 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16476 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1477 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)478 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2479 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C2]](s64)480 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)481 ; CHECK-NEXT: G_STORE [[TRUNC]](s8), [[PTR_ADD]](p0) :: (store (s8))482 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)483 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)484 ; CHECK-NEXT: G_STORE [[TRUNC1]](s16), [[PTR_ADD1]](p0) :: (store (s16), align 1)485 ; CHECK-NEXT: RET_ReallyLR486 %0:_(s32) = COPY $w0487 %1:_(p0) = COPY $x1488 %7:_(s32) = G_CONSTANT i32 16489 %2:_(s64) = G_CONSTANT i64 1490 %3:_(p0) = G_PTR_ADD %1, %2(s64)491 %4:_(s64) = G_CONSTANT i64 2492 %5:_(p0) = G_PTR_ADD %1, %4(s64)493 %6:_(s8) = G_TRUNC %0(s32)494 G_STORE %6(s8), %3(p0) :: (store (s8))495 %8:_(s32) = G_LSHR %0, %7(s32)496 %9:_(s16) = G_TRUNC %8(s32)497 G_STORE %9(s16), %5(p0) :: (store (s16), align 1)498 RET_ReallyLR499 500...501---502name: merge_hole4503alignment: 4504tracksRegLiveness: true505liveins:506 - { reg: '$w0' }507 - { reg: '$x1' }508body: |509 bb.1:510 liveins: $w0, $x1511 512 ; CHECK-LABEL: name: merge_hole4513 ; CHECK: liveins: $w0, $x1514 ; CHECK-NEXT: {{ $}}515 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0516 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1517 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16518 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2519 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)520 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)521 ; CHECK-NEXT: G_STORE [[TRUNC]](s8), [[PTR_ADD]](p0) :: (store (s8))522 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)523 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)524 ; CHECK-NEXT: G_STORE [[TRUNC1]](s16), [[COPY1]](p0) :: (store (s16), align 1)525 ; CHECK-NEXT: RET_ReallyLR526 %0:_(s32) = COPY $w0527 %1:_(p0) = COPY $x1528 %5:_(s32) = G_CONSTANT i32 16529 %2:_(s64) = G_CONSTANT i64 2530 %3:_(p0) = G_PTR_ADD %1, %2(s64)531 %4:_(s8) = G_TRUNC %0(s32)532 G_STORE %4(s8), %3(p0) :: (store (s8))533 %6:_(s32) = G_LSHR %0, %5(s32)534 %7:_(s16) = G_TRUNC %6(s32)535 G_STORE %7(s16), %1(p0) :: (store (s16), align 1)536 RET_ReallyLR537 538...539---540name: load_between_stores541alignment: 4542tracksRegLiveness: true543liveins:544 - { reg: '$w0' }545 - { reg: '$x1' }546 - { reg: '$x2' }547body: |548 bb.1:549 liveins: $w0, $x1, $x2550 551 ; CHECK-LABEL: name: load_between_stores552 ; CHECK: liveins: $w0, $x1, $x2553 ; CHECK-NEXT: {{ $}}554 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0555 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1556 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2557 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16558 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)559 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)560 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)561 ; CHECK-NEXT: G_STORE [[TRUNC]](s16), [[COPY1]](p0) :: (store (s16))562 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32))563 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2564 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)565 ; CHECK-NEXT: G_STORE [[TRUNC1]](s16), [[PTR_ADD]](p0) :: (store (s16))566 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)567 ; CHECK-NEXT: RET_ReallyLR implicit $w0568 %0:_(s32) = COPY $w0569 %1:_(p0) = COPY $x1570 %2:_(p0) = COPY $x2571 %4:_(s32) = G_CONSTANT i32 16572 %3:_(s16) = G_TRUNC %0(s32)573 %5:_(s32) = G_LSHR %0, %4(s32)574 %6:_(s16) = G_TRUNC %5(s32)575 G_STORE %3(s16), %1(p0) :: (store (s16))576 %7:_(s32) = G_LOAD %2(p0) :: (load (s32))577 %8:_(s64) = G_CONSTANT i64 2578 %9:_(p0) = G_PTR_ADD %1, %8(s64)579 G_STORE %6(s16), %9(p0) :: (store (s16))580 $w0 = COPY %7(s32)581 RET_ReallyLR implicit $w0582 583...584---585name: invalid_shift586alignment: 4587tracksRegLiveness: true588liveins:589 - { reg: '$w0' }590 - { reg: '$x1' }591body: |592 bb.1:593 liveins: $w0, $x1594 595 ; CHECK-LABEL: name: invalid_shift596 ; CHECK: liveins: $w0, $x1597 ; CHECK-NEXT: {{ $}}598 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0599 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)600 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1601 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 4602 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16)603 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[TRUNC]], [[C]](s16)604 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s16)605 ; CHECK-NEXT: G_STORE [[TRUNC1]](s8), [[COPY1]](p0) :: (store (s8))606 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1607 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)608 ; CHECK-NEXT: G_STORE [[TRUNC2]](s8), [[PTR_ADD]](p0) :: (store (s8))609 ; CHECK-NEXT: RET_ReallyLR610 %2:_(s32) = COPY $w0611 %0:_(s16) = G_TRUNC %2(s32)612 %1:_(p0) = COPY $x1613 %4:_(s16) = G_CONSTANT i16 4614 %3:_(s8) = G_TRUNC %0(s16)615 %5:_(s16) = G_LSHR %0, %4(s16)616 %6:_(s8) = G_TRUNC %5(s16)617 G_STORE %3(s8), %1(p0) :: (store (s8))618 %7:_(s64) = G_CONSTANT i64 1619 %8:_(p0) = G_PTR_ADD %1, %7(s64)620 G_STORE %6(s8), %8(p0) :: (store (s8))621 RET_ReallyLR622 623...624---625name: missing_store626alignment: 4627tracksRegLiveness: true628liveins:629 - { reg: '$w0' }630 - { reg: '$x1' }631body: |632 bb.1:633 liveins: $w0, $x1634 635 ; CHECK-LABEL: name: missing_store636 ; CHECK: liveins: $w0, $x1637 ; CHECK-NEXT: {{ $}}638 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0639 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1640 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24641 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)642 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s32)643 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)644 ; CHECK-NEXT: G_STORE [[TRUNC1]](s16), [[COPY1]](p0) :: (store (s16), align 1)645 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 3646 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)647 ; CHECK-NEXT: G_STORE [[TRUNC]](s8), [[PTR_ADD]](p0) :: (store (s8))648 ; CHECK-NEXT: RET_ReallyLR649 %0:_(s32) = COPY $w0650 %1:_(p0) = COPY $x1651 %3:_(s32) = G_CONSTANT i32 8652 %6:_(s32) = G_CONSTANT i32 24653 %2:_(s8) = G_TRUNC %0(s32)654 %4:_(s32) = G_LSHR %0, %3(s32)655 %5:_(s8) = G_TRUNC %4(s32)656 %7:_(s32) = G_LSHR %0, %6(s32)657 %8:_(s8) = G_TRUNC %7(s32)658 G_STORE %2(s8), %1(p0) :: (store (s8))659 %9:_(s64) = G_CONSTANT i64 1660 %10:_(p0) = G_PTR_ADD %1, %9(s64)661 G_STORE %5(s8), %10(p0) :: (store (s8))662 %11:_(s64) = G_CONSTANT i64 3663 %12:_(p0) = G_PTR_ADD %1, %11(s64)664 G_STORE %8(s8), %12(p0) :: (store (s8))665 RET_ReallyLR666 667...668---669name: different_base_reg670alignment: 4671tracksRegLiveness: true672liveins:673 - { reg: '$w0' }674 - { reg: '$x1' }675 - { reg: '$x2' }676body: |677 bb.1:678 liveins: $w0, $x1, $x2679 680 ; CHECK-LABEL: name: different_base_reg681 ; CHECK: liveins: $w0, $x1, $x2682 ; CHECK-NEXT: {{ $}}683 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0684 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)685 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1686 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2687 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 8688 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16)689 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[TRUNC]], [[C]](s16)690 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s16)691 ; CHECK-NEXT: G_STORE [[TRUNC1]](s8), [[COPY1]](p0) :: (store (s8))692 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1693 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C1]](s64)694 ; CHECK-NEXT: G_STORE [[TRUNC2]](s8), [[PTR_ADD]](p0) :: (store (s8))695 ; CHECK-NEXT: RET_ReallyLR696 %3:_(s32) = COPY $w0697 %0:_(s16) = G_TRUNC %3(s32)698 %1:_(p0) = COPY $x1699 %2:_(p0) = COPY $x2700 %5:_(s16) = G_CONSTANT i16 8701 %4:_(s8) = G_TRUNC %0(s16)702 %6:_(s16) = G_LSHR %0, %5(s16)703 %7:_(s8) = G_TRUNC %6(s16)704 G_STORE %4(s8), %1(p0) :: (store (s8))705 %8:_(s64) = G_CONSTANT i64 1706 %9:_(p0) = G_PTR_ADD %2, %8(s64)707 G_STORE %7(s8), %9(p0) :: (store (s8))708 RET_ReallyLR709 710...711---712name: second_store_is_volatile713alignment: 4714tracksRegLiveness: true715liveins:716 - { reg: '$w0' }717 - { reg: '$x1' }718body: |719 bb.1:720 liveins: $w0, $x1721 722 ; CHECK-LABEL: name: second_store_is_volatile723 ; CHECK: liveins: $w0, $x1724 ; CHECK-NEXT: {{ $}}725 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0726 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)727 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1728 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 8729 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16)730 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[TRUNC]], [[C]](s16)731 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s16)732 ; CHECK-NEXT: G_STORE [[TRUNC1]](s8), [[COPY1]](p0) :: (volatile store (s8))733 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1734 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)735 ; CHECK-NEXT: G_STORE [[TRUNC2]](s8), [[PTR_ADD]](p0) :: (store (s8))736 ; CHECK-NEXT: RET_ReallyLR737 %2:_(s32) = COPY $w0738 %0:_(s16) = G_TRUNC %2(s32)739 %1:_(p0) = COPY $x1740 %4:_(s16) = G_CONSTANT i16 8741 %3:_(s8) = G_TRUNC %0(s16)742 %5:_(s16) = G_LSHR %0, %4(s16)743 %6:_(s8) = G_TRUNC %5(s16)744 G_STORE %3(s8), %1(p0) :: (volatile store (s8))745 %7:_(s64) = G_CONSTANT i64 1746 %8:_(p0) = G_PTR_ADD %1, %7(s64)747 G_STORE %6(s8), %8(p0) :: (store (s8))748 RET_ReallyLR749 750...751---752name: wide_not_multiple_of_mem_ty753alignment: 4754tracksRegLiveness: true755liveins:756 - { reg: '$w0' }757 - { reg: '$x1' }758body: |759 bb.1:760 liveins: $x0, $x1761 762 ; CHECK-LABEL: name: wide_not_multiple_of_mem_ty763 ; CHECK: liveins: $x0, $x1764 ; CHECK-NEXT: {{ $}}765 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0766 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s48) = G_TRUNC [[COPY]](s64)767 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1768 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 32769 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s48) = G_LSHR [[TRUNC]], [[C]](s64)770 ; CHECK-NEXT: %trunc:_(s32) = G_TRUNC [[LSHR]](s48)771 ; CHECK-NEXT: G_STORE %trunc(s32), [[COPY1]](p0) :: (store (s32))772 ; CHECK-NEXT: RET_ReallyLR773 %2:_(s64) = COPY $x0774 %0:_(s48) = G_TRUNC %2(s64)775 %1:_(p0) = COPY $x1776 %4:_(s64) = G_CONSTANT i64 32777 %5:_(s48) = G_LSHR %0, %4(s64)778 %trunc:_(s32) = G_TRUNC %5(s48)779 G_STORE %trunc(s32), %1(p0) :: (store (s32))780 RET_ReallyLR781 782...783