736 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -mtriple=aarch64 -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s3---4name: test_load5body: |6 bb.0:7 liveins: $x08 9 ; CHECK-LABEL: name: test_load10 ; CHECK: liveins: $x011 ; CHECK-NEXT: {{ $}}12 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x013 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (load (s8))14 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s8) = G_ASSERT_ZEXT [[LOAD]], 115 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ASSERT_ZEXT]](s8)16 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)17 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (load (s8))18 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD1]](s8)19 ; CHECK-NEXT: $w0 = COPY [[ANYEXT1]](s32)20 ; CHECK-NEXT: [[LOAD2:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s16))21 ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD2]](s16)22 ; CHECK-NEXT: $w0 = COPY [[ANYEXT2]](s32)23 ; CHECK-NEXT: $w0 = COPY [[ANYEXT1]](s32)24 ; CHECK-NEXT: [[LOAD3:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64))25 ; CHECK-NEXT: $x0 = COPY [[LOAD3]](s64)26 ; CHECK-NEXT: [[LOAD4:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0))27 ; CHECK-NEXT: [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[LOAD4]](p0)28 ; CHECK-NEXT: $x0 = COPY [[PTRTOINT]](s64)29 ; CHECK-NEXT: [[LOAD5:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[COPY]](p0) :: (load (<2 x s32>))30 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s64) = G_BITCAST [[LOAD5]](<2 x s32>)31 ; CHECK-NEXT: $x0 = COPY [[BITCAST]](s64)32 ; CHECK-NEXT: [[LOAD6:%[0-9]+]]:_(s128) = G_LOAD [[COPY]](p0) :: (load (s128))33 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[LOAD6]](s128)34 ; CHECK-NEXT: $x0 = COPY [[TRUNC]](s64)35 %0:_(p0) = COPY $x036 %1:_(s1) = G_LOAD %0(p0) :: (load (s1))37 %2:_(s32) = G_ANYEXT %1(s1)38 $w0 = COPY %2(s32)39 %3:_(s8) = G_LOAD %0(p0) :: (load (s8))40 %4:_(s32) = G_ANYEXT %3(s8)41 $w0 = COPY %4(s32)42 %5:_(s16) = G_LOAD %0(p0) :: (load (s16))43 %6:_(s32) = G_ANYEXT %5(s16)44 $w0 = COPY %6(s32)45 %7:_(s32) = G_LOAD %0(p0) :: (load (s32))46 $w0 = COPY %4(s32)47 %8:_(s64) = G_LOAD %0(p0) :: (load (s64))48 $x0 = COPY %8(s64)49 %9:_(p0) = G_LOAD %0(p0) :: (load (p0))50 %10:_(s64) = G_PTRTOINT %9(p0)51 $x0 = COPY %10(s64)52 %11:_(<2 x s32>) = G_LOAD %0(p0) :: (load (<2 x s32>))53 %12:_(s64) = G_BITCAST %11(<2 x s32>)54 $x0 = COPY %12(s64)55 %13:_(s128) = G_LOAD %0(p0) :: (load (s128))56 %14:_(s64) = G_TRUNC %13(s128)57 $x0 = COPY %14(s64)58...59 60---61name: test_store62body: |63 bb.0:64 liveins: $x0, $w165 66 ; CHECK-LABEL: name: test_store67 ; CHECK: liveins: $x0, $w168 ; CHECK-NEXT: {{ $}}69 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x070 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w171 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 172 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]73 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C]]74 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[AND1]](s32)75 ; CHECK-NEXT: G_STORE [[TRUNC]](s8), [[COPY]](p0) :: (store (s8))76 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)77 ; CHECK-NEXT: G_STORE [[TRUNC1]](s8), [[COPY]](p0) :: (store (s8))78 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)79 ; CHECK-NEXT: G_STORE [[TRUNC2]](s16), [[COPY]](p0) :: (store (s16))80 ; CHECK-NEXT: G_STORE [[COPY1]](s32), [[COPY]](p0) :: (store (s32))81 ; CHECK-NEXT: [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[COPY]](p0)82 ; CHECK-NEXT: G_STORE [[PTRTOINT]](s64), [[COPY]](p0) :: (store (s64))83 ; CHECK-NEXT: G_STORE [[COPY]](p0), [[COPY]](p0) :: (store (p0))84 ; CHECK-NEXT: [[PTRTOINT1:%[0-9]+]]:_(s64) = G_PTRTOINT [[COPY]](p0)85 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[PTRTOINT1]](s64), [[PTRTOINT1]](s64)86 ; CHECK-NEXT: G_STORE [[MV]](s128), [[COPY]](p0) :: (store (s128))87 %0:_(p0) = COPY $x088 %1:_(s32) = COPY $w189 %2:_(s1) = G_TRUNC %1(s32)90 G_STORE %2(s1), %0(p0) :: (store (s1))91 %3:_(s8) = G_TRUNC %1(s32)92 G_STORE %3(s8), %0(p0) :: (store (s8))93 %4:_(s16) = G_TRUNC %1(s32)94 G_STORE %4(s16), %0(p0) :: (store (s16))95 G_STORE %1(s32), %0(p0) :: (store (s32))96 %5:_(s64) = G_PTRTOINT %0(p0)97 G_STORE %5(s64), %0(p0) :: (store (s64))98 G_STORE %0(p0), %0(p0) :: (store (p0))99 %6:_(s64) = G_PTRTOINT %0(p0)100 %7:_(s128) = G_MERGE_VALUES %6(s64), %6101 G_STORE %7(s128), %0(p0) :: (store (s128))102...103---104name: store_4xi16105alignment: 4106tracksRegLiveness: true107machineFunctionInfo: {}108body: |109 bb.1:110 liveins: $d0, $x0111 112 ; CHECK-LABEL: name: store_4xi16113 ; CHECK: liveins: $d0, $x0114 ; CHECK-NEXT: {{ $}}115 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0116 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x0117 ; CHECK-NEXT: G_STORE [[COPY]](<4 x s16>), [[COPY1]](p0) :: (store (<4 x s16>))118 ; CHECK-NEXT: RET_ReallyLR119 %0:_(<4 x s16>) = COPY $d0120 %1:_(p0) = COPY $x0121 G_STORE %0(<4 x s16>), %1(p0) :: (store (<4 x s16>))122 RET_ReallyLR123 124...125---126name: store_4xi32127alignment: 4128tracksRegLiveness: true129machineFunctionInfo: {}130body: |131 bb.1:132 liveins: $q0, $x0133 134 ; CHECK-LABEL: name: store_4xi32135 ; CHECK: liveins: $q0, $x0136 ; CHECK-NEXT: {{ $}}137 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0138 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x0139 ; CHECK-NEXT: G_STORE [[COPY]](<4 x s32>), [[COPY1]](p0) :: (store (<4 x s32>))140 ; CHECK-NEXT: RET_ReallyLR141 %0:_(<4 x s32>) = COPY $q0142 %1:_(p0) = COPY $x0143 G_STORE %0(<4 x s32>), %1(p0) :: (store (<4 x s32>))144 RET_ReallyLR145 146...147---148name: store_8xi16149alignment: 4150tracksRegLiveness: true151machineFunctionInfo: {}152body: |153 bb.1:154 liveins: $q0, $x0155 156 ; CHECK-LABEL: name: store_8xi16157 ; CHECK: liveins: $q0, $x0158 ; CHECK-NEXT: {{ $}}159 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0160 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x0161 ; CHECK-NEXT: G_STORE [[COPY]](<8 x s16>), [[COPY1]](p0) :: (store (<8 x s16>))162 ; CHECK-NEXT: RET_ReallyLR163 %0:_(<8 x s16>) = COPY $q0164 %1:_(p0) = COPY $x0165 G_STORE %0(<8 x s16>), %1(p0) :: (store (<8 x s16>))166 RET_ReallyLR167 168...169---170name: store_16xi8171alignment: 4172tracksRegLiveness: true173machineFunctionInfo: {}174body: |175 bb.1:176 liveins: $q0, $x0177 178 ; CHECK-LABEL: name: store_16xi8179 ; CHECK: liveins: $q0, $x0180 ; CHECK-NEXT: {{ $}}181 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0182 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x0183 ; CHECK-NEXT: G_STORE [[COPY]](<16 x s8>), [[COPY1]](p0) :: (store (<16 x s8>))184 ; CHECK-NEXT: RET_ReallyLR185 %0:_(<16 x s8>) = COPY $q0186 %1:_(p0) = COPY $x0187 G_STORE %0(<16 x s8>), %1(p0) :: (store (<16 x s8>))188 RET_ReallyLR189 190...191---192name: load_4xi16193alignment: 4194tracksRegLiveness: true195machineFunctionInfo: {}196body: |197 bb.1:198 liveins: $x0199 200 ; CHECK-LABEL: name: load_4xi16201 ; CHECK: liveins: $x0202 ; CHECK-NEXT: {{ $}}203 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0204 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<4 x s16>) = G_LOAD [[COPY]](p0) :: (load (<4 x s16>))205 ; CHECK-NEXT: $d0 = COPY [[LOAD]](<4 x s16>)206 ; CHECK-NEXT: RET_ReallyLR implicit $d0207 %0:_(p0) = COPY $x0208 %1:_(<4 x s16>) = G_LOAD %0(p0) :: (load (<4 x s16>))209 $d0 = COPY %1(<4 x s16>)210 RET_ReallyLR implicit $d0211 212...213---214name: load_4xi32215alignment: 4216tracksRegLiveness: true217machineFunctionInfo: {}218body: |219 bb.1:220 liveins: $x0221 222 ; CHECK-LABEL: name: load_4xi32223 ; CHECK: liveins: $x0224 ; CHECK-NEXT: {{ $}}225 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0226 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<4 x s32>) = G_LOAD [[COPY]](p0) :: (load (<4 x s32>))227 ; CHECK-NEXT: $q0 = COPY [[LOAD]](<4 x s32>)228 ; CHECK-NEXT: RET_ReallyLR implicit $q0229 %0:_(p0) = COPY $x0230 %1:_(<4 x s32>) = G_LOAD %0(p0) :: (load (<4 x s32>))231 $q0 = COPY %1(<4 x s32>)232 RET_ReallyLR implicit $q0233 234...235---236name: load_8xi16237alignment: 4238tracksRegLiveness: true239machineFunctionInfo: {}240body: |241 bb.1:242 liveins: $x0243 244 ; CHECK-LABEL: name: load_8xi16245 ; CHECK: liveins: $x0246 ; CHECK-NEXT: {{ $}}247 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0248 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<8 x s16>) = G_LOAD [[COPY]](p0) :: (load (<8 x s16>))249 ; CHECK-NEXT: $q0 = COPY [[LOAD]](<8 x s16>)250 ; CHECK-NEXT: RET_ReallyLR implicit $q0251 %0:_(p0) = COPY $x0252 %1:_(<8 x s16>) = G_LOAD %0(p0) :: (load (<8 x s16>))253 $q0 = COPY %1(<8 x s16>)254 RET_ReallyLR implicit $q0255 256...257---258name: load_16xi8259alignment: 4260tracksRegLiveness: true261machineFunctionInfo: {}262body: |263 bb.1:264 liveins: $x0265 266 ; CHECK-LABEL: name: load_16xi8267 ; CHECK: liveins: $x0268 ; CHECK-NEXT: {{ $}}269 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0270 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<16 x s8>) = G_LOAD [[COPY]](p0) :: (load (<16 x s8>))271 ; CHECK-NEXT: $q0 = COPY [[LOAD]](<16 x s8>)272 ; CHECK-NEXT: RET_ReallyLR implicit $q0273 %0:_(p0) = COPY $x0274 %1:_(<16 x s8>) = G_LOAD %0(p0) :: (load (<16 x s8>))275 $q0 = COPY %1(<16 x s8>)276 RET_ReallyLR implicit $q0277 278...279---280name: load_8xi8281alignment: 4282tracksRegLiveness: true283machineFunctionInfo: {}284body: |285 bb.1:286 liveins: $x0287 ; CHECK-LABEL: name: load_8xi8288 ; CHECK: liveins: $x0289 ; CHECK-NEXT: {{ $}}290 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0291 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<8 x s8>) = G_LOAD [[COPY]](p0) :: (load (<8 x s8>))292 ; CHECK-NEXT: $d0 = COPY [[LOAD]](<8 x s8>)293 ; CHECK-NEXT: RET_ReallyLR implicit $d0294 %0:_(p0) = COPY $x0295 %1:_(<8 x s8>) = G_LOAD %0(p0) :: (load (<8 x s8>))296 $d0 = COPY %1(<8 x s8>)297 RET_ReallyLR implicit $d0298 299...300---301name: store_8xi8302alignment: 4303tracksRegLiveness: true304machineFunctionInfo: {}305body: |306 bb.1:307 liveins: $x0, $d0308 ; CHECK-LABEL: name: store_8xi8309 ; CHECK: liveins: $x0, $d0310 ; CHECK-NEXT: {{ $}}311 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0312 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d0313 ; CHECK-NEXT: G_STORE [[COPY1]](<8 x s8>), [[COPY]](p0) :: (store (<8 x s8>))314 ; CHECK-NEXT: RET_ReallyLR315 %0:_(p0) = COPY $x0316 %1:_(<8 x s8>) = COPY $d0317 G_STORE %1(<8 x s8>), %0(p0) :: (store (<8 x s8>))318 RET_ReallyLR319...320---321name: store_32xs8322alignment: 4323tracksRegLiveness: true324machineFunctionInfo: {}325body: |326 bb.1:327 liveins: $x0328 ; CHECK-LABEL: name: store_32xs8329 ; CHECK: liveins: $x0330 ; CHECK-NEXT: {{ $}}331 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<16 x s8>) = G_IMPLICIT_DEF332 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0333 ; CHECK-NEXT: G_STORE [[DEF]](<16 x s8>), %ptr(p0) :: (store (<16 x s8>), align 32)334 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16335 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)336 ; CHECK-NEXT: G_STORE [[DEF]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)337 ; CHECK-NEXT: RET_ReallyLR338 %val:_(<32 x s8>) = G_IMPLICIT_DEF339 %ptr:_(p0) = COPY $x0340 G_STORE %val(<32 x s8>), %ptr(p0) :: (store (<32 x s8>))341 RET_ReallyLR342...343---344name: store_16xs16345alignment: 4346tracksRegLiveness: true347machineFunctionInfo: {}348body: |349 bb.1:350 liveins: $x0351 ; CHECK-LABEL: name: store_16xs16352 ; CHECK: liveins: $x0353 ; CHECK-NEXT: {{ $}}354 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<8 x s16>) = G_IMPLICIT_DEF355 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0356 ; CHECK-NEXT: G_STORE [[DEF]](<8 x s16>), %ptr(p0) :: (store (<8 x s16>), align 32)357 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16358 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)359 ; CHECK-NEXT: G_STORE [[DEF]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)360 ; CHECK-NEXT: RET_ReallyLR361 %val:_(<16 x s16>) = G_IMPLICIT_DEF362 %ptr:_(p0) = COPY $x0363 G_STORE %val(<16 x s16>), %ptr(p0) :: (store (<16 x s16>))364 RET_ReallyLR365...366---367name: store_8xs32368alignment: 4369tracksRegLiveness: true370machineFunctionInfo: {}371body: |372 bb.1:373 liveins: $x0374 ; CHECK-LABEL: name: store_8xs32375 ; CHECK: liveins: $x0376 ; CHECK-NEXT: {{ $}}377 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF378 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0379 ; CHECK-NEXT: G_STORE [[DEF]](<4 x s32>), %ptr(p0) :: (store (<4 x s32>), align 32)380 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16381 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)382 ; CHECK-NEXT: G_STORE [[DEF]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)383 ; CHECK-NEXT: RET_ReallyLR384 %val:_(<8 x s32>) = G_IMPLICIT_DEF385 %ptr:_(p0) = COPY $x0386 G_STORE %val(<8 x s32>), %ptr(p0) :: (store (<8 x s32>))387 RET_ReallyLR388...389---390name: store_4xs64391alignment: 4392tracksRegLiveness: true393machineFunctionInfo: {}394body: |395 bb.1:396 liveins: $x0397 ; CHECK-LABEL: name: store_4xs64398 ; CHECK: liveins: $x0399 ; CHECK-NEXT: {{ $}}400 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF401 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0402 ; CHECK-NEXT: G_STORE [[DEF]](<2 x s64>), %ptr(p0) :: (store (<2 x s64>), align 32)403 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16404 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)405 ; CHECK-NEXT: G_STORE [[DEF]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)406 ; CHECK-NEXT: RET_ReallyLR407 %val:_(<4 x s64>) = G_IMPLICIT_DEF408 %ptr:_(p0) = COPY $x0409 G_STORE %val(<4 x s64>), %ptr(p0) :: (store (<4 x s64>))410 RET_ReallyLR411...412---413name: load_32xs8414alignment: 4415tracksRegLiveness: true416machineFunctionInfo: {}417body: |418 bb.1:419 liveins: $x0420 ; CHECK-LABEL: name: load_32xs8421 ; CHECK: liveins: $x0422 ; CHECK-NEXT: {{ $}}423 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0424 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<16 x s8>) = G_LOAD %ptr(p0) :: (load (<16 x s8>), align 32)425 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16426 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)427 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(<16 x s8>) = G_LOAD [[PTR_ADD]](p0) :: (load (<16 x s8>) from unknown-address + 16)428 ; CHECK-NEXT: G_STORE [[LOAD]](<16 x s8>), %ptr(p0) :: (store (<16 x s8>), align 32)429 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)430 ; CHECK-NEXT: G_STORE [[LOAD1]](<16 x s8>), [[PTR_ADD1]](p0) :: (store (<16 x s8>) into unknown-address + 16)431 ; CHECK-NEXT: RET_ReallyLR432 %ptr:_(p0) = COPY $x0433 %val:_(<32 x s8>) = G_LOAD %ptr(p0) :: (load (<32 x s8>))434 G_STORE %val(<32 x s8>), %ptr(p0) :: (store (<32 x s8>))435 RET_ReallyLR436...437---438name: load_16xs16439alignment: 4440tracksRegLiveness: true441machineFunctionInfo: {}442body: |443 bb.1:444 liveins: $x0445 ; CHECK-LABEL: name: load_16xs16446 ; CHECK: liveins: $x0447 ; CHECK-NEXT: {{ $}}448 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0449 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<8 x s16>) = G_LOAD %ptr(p0) :: (load (<8 x s16>), align 32)450 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16451 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)452 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(<8 x s16>) = G_LOAD [[PTR_ADD]](p0) :: (load (<8 x s16>) from unknown-address + 16)453 ; CHECK-NEXT: G_STORE [[LOAD]](<8 x s16>), %ptr(p0) :: (store (<8 x s16>), align 32)454 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)455 ; CHECK-NEXT: G_STORE [[LOAD1]](<8 x s16>), [[PTR_ADD1]](p0) :: (store (<8 x s16>) into unknown-address + 16)456 ; CHECK-NEXT: RET_ReallyLR457 %ptr:_(p0) = COPY $x0458 %val:_(<16 x s16>) = G_LOAD %ptr(p0) :: (load (<16 x s16>))459 G_STORE %val(<16 x s16>), %ptr(p0) :: (store (<16 x s16>))460 RET_ReallyLR461...462---463name: load_8xs32464alignment: 4465tracksRegLiveness: true466machineFunctionInfo: {}467body: |468 bb.1:469 liveins: $x0470 ; CHECK-LABEL: name: load_8xs32471 ; CHECK: liveins: $x0472 ; CHECK-NEXT: {{ $}}473 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0474 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<4 x s32>) = G_LOAD %ptr(p0) :: (load (<4 x s32>), align 32)475 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16476 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)477 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(<4 x s32>) = G_LOAD [[PTR_ADD]](p0) :: (load (<4 x s32>) from unknown-address + 16)478 ; CHECK-NEXT: G_STORE [[LOAD]](<4 x s32>), %ptr(p0) :: (store (<4 x s32>), align 32)479 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)480 ; CHECK-NEXT: G_STORE [[LOAD1]](<4 x s32>), [[PTR_ADD1]](p0) :: (store (<4 x s32>) into unknown-address + 16)481 ; CHECK-NEXT: RET_ReallyLR482 %ptr:_(p0) = COPY $x0483 %val:_(<8 x s32>) = G_LOAD %ptr(p0) :: (load (<8 x s32>))484 G_STORE %val(<8 x s32>), %ptr(p0) :: (store (<8 x s32>))485 RET_ReallyLR486...487---488name: load_4xs64489alignment: 4490tracksRegLiveness: true491machineFunctionInfo: {}492body: |493 bb.1:494 liveins: $x0495 ; CHECK-LABEL: name: load_4xs64496 ; CHECK: liveins: $x0497 ; CHECK-NEXT: {{ $}}498 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0499 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s64>) = G_LOAD %ptr(p0) :: (load (<2 x s64>), align 32)500 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16501 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)502 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(<2 x s64>) = G_LOAD [[PTR_ADD]](p0) :: (load (<2 x s64>) from unknown-address + 16)503 ; CHECK-NEXT: G_STORE [[LOAD]](<2 x s64>), %ptr(p0) :: (store (<2 x s64>), align 32)504 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)505 ; CHECK-NEXT: G_STORE [[LOAD1]](<2 x s64>), [[PTR_ADD1]](p0) :: (store (<2 x s64>) into unknown-address + 16)506 ; CHECK-NEXT: RET_ReallyLR507 %ptr:_(p0) = COPY $x0508 %val:_(<4 x s64>) = G_LOAD %ptr(p0) :: (load (<4 x s64>))509 G_STORE %val(<4 x s64>), %ptr(p0) :: (store (<4 x s64>))510 RET_ReallyLR511...512---513name: test_trunc_store514body: |515 bb.0:516 liveins: $x0, $w1517 518 ; CHECK-LABEL: name: test_trunc_store519 ; CHECK: liveins: $x0, $w1520 ; CHECK-NEXT: {{ $}}521 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0522 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1523 ; CHECK-NEXT: %val64:_(s64) = COPY $x2524 ; CHECK-NEXT: G_STORE [[COPY1]](s32), [[COPY]](p0) :: (store (s8))525 ; CHECK-NEXT: G_STORE [[COPY1]](s32), [[COPY]](p0) :: (store (s16))526 ; CHECK-NEXT: G_STORE %val64(s64), [[COPY]](p0) :: (store (s8))527 ; CHECK-NEXT: G_STORE %val64(s64), [[COPY]](p0) :: (store (s16))528 ; CHECK-NEXT: G_STORE %val64(s64), [[COPY]](p0) :: (store (s32))529 %0:_(p0) = COPY $x0530 %1:_(s32) = COPY $w1531 %2:_(s8) = G_TRUNC %1(s32)532 %val64:_(s64) = COPY $x2533 G_STORE %1(s32), %0(p0) :: (store (s8))534 G_STORE %1(s32), %0(p0) :: (store (s16))535 G_STORE %val64(s64), %0(p0) :: (store (s8))536 G_STORE %val64(s64), %0(p0) :: (store (s16))537 G_STORE %val64(s64), %0(p0) :: (store (s32))538...539---540name: store_6xs64541tracksRegLiveness: true542body: |543 bb.1:544 liveins: $x0545 ; CHECK-LABEL: name: store_6xs64546 ; CHECK: liveins: $x0547 ; CHECK-NEXT: {{ $}}548 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF549 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[DEF]](s64), [[DEF]](s64)550 ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[DEF]](s64), [[DEF]](s64)551 ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[DEF]](s64), [[DEF]](s64)552 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0553 ; CHECK-NEXT: G_STORE [[BUILD_VECTOR]](<2 x s64>), %ptr(p0) :: (store (<2 x s64>))554 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16555 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)556 ; CHECK-NEXT: G_STORE [[BUILD_VECTOR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)557 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 32558 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C1]](s64)559 ; CHECK-NEXT: G_STORE [[BUILD_VECTOR2]](<2 x s64>), [[PTR_ADD1]](p0) :: (store (<2 x s64>) into unknown-address + 32)560 ; CHECK-NEXT: RET_ReallyLR561 %val:_(<6 x s64>) = G_IMPLICIT_DEF562 %ptr:_(p0) = COPY $x0563 G_STORE %val(<6 x s64>), %ptr(p0) :: (store (<6 x s64>), align 16)564 RET_ReallyLR565...566---567name: store_2xi16568tracksRegLiveness: true569body: |570 bb.1:571 liveins: $s0, $x0572 573 ; CHECK-LABEL: name: store_2xi16574 ; CHECK: liveins: $s0, $x0575 ; CHECK-NEXT: {{ $}}576 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0577 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $s0578 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY1]](<2 x s16>)579 ; CHECK-NEXT: G_STORE [[UV]](s16), [[COPY]](p0) :: (store (s16), align 4)580 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 2581 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)582 ; CHECK-NEXT: G_STORE [[UV1]](s16), [[PTR_ADD]](p0) :: (store (s16) into unknown-address + 2)583 ; CHECK-NEXT: RET_ReallyLR584 %0:_(p0) = COPY $x0585 %1:_(<2 x s16>) = COPY $s0586 G_STORE %1(<2 x s16>), %0(p0) :: (store (<2 x s16>))587 RET_ReallyLR588 589...590---591name: load_2xi16592tracksRegLiveness: true593body: |594 bb.1:595 liveins: $s0, $x0596 597 ; CHECK-LABEL: name: load_2xi16598 ; CHECK: liveins: $s0, $x0599 ; CHECK-NEXT: {{ $}}600 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0601 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s16), align 4)602 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 2603 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C]](s64)604 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s16) = G_LOAD [[PTR_ADD]](p0) :: (load (s16) from unknown-address + 2)605 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD]](s16)606 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD1]](s16)607 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF608 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[DEF]](s32), [[DEF]](s32)609 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[BUILD_VECTOR]](<4 x s32>)610 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[TRUNC]](<4 x s16>)611 ; CHECK-NEXT: $s0 = COPY [[UV]](<2 x s16>)612 ; CHECK-NEXT: RET_ReallyLR613 %0:_(p0) = COPY $x0614 %1(<2 x s16>) = G_LOAD %0(p0) :: (load (<2 x s16>))615 $s0 = COPY %1:_(<2 x s16>)616 RET_ReallyLR617 618...619---620name: load_store_s88_s88_mem_size621tracksRegLiveness: true622body: |623 bb.0:624 liveins: $x0625 ; CHECK-LABEL: name: load_store_s88_s88_mem_size626 ; CHECK: liveins: $x0627 ; CHECK-NEXT: {{ $}}628 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0629 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD %ptr(p0) :: (load (s64), align 16)630 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0631 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8632 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C1]](s64)633 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[PTR_ADD]](p0) :: (load (s16) from unknown-address + 8, align 8)634 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2635 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD]], [[C2]](s64)636 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8) from unknown-address + 10, align 2)637 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF638 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD1]](s32), [[DEF]](s32)639 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16640 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[MV]], [[C3]](s64)641 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[ZEXTLOAD]]642 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[C]], [[LOAD]]643 ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[OR]], [[C]]644 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[OR1]](s64)645 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[OR2]](s64)646 ; CHECK-NEXT: G_STORE [[COPY]](s64), %ptr(p0) :: (store (s64), align 16)647 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C1]](s64)648 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[TRUNC]], [[C3]](s64)649 ; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[PTR_ADD2]], [[C2]](s64)650 ; CHECK-NEXT: G_STORE [[TRUNC]](s32), [[PTR_ADD2]](p0) :: (store (s16) into unknown-address + 8, align 8)651 ; CHECK-NEXT: G_STORE [[LSHR]](s32), [[PTR_ADD3]](p0) :: (store (s8) into unknown-address + 10, align 2)652 ; CHECK-NEXT: RET_ReallyLR653 %ptr:_(p0) = COPY $x0654 %load:_(s88) = G_LOAD %ptr(p0) :: (load (s88))655 G_STORE %load(s88), %ptr(p0) :: (store (s88))656 RET_ReallyLR657...658---659name: load_store_s88_s64_mem_size660tracksRegLiveness: true661body: |662 bb.0:663 liveins: $x0664 ; CHECK-LABEL: name: load_store_s88_s64_mem_size665 ; CHECK: liveins: $x0666 ; CHECK-NEXT: {{ $}}667 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0668 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD %ptr(p0) :: (load (s64))669 ; CHECK-NEXT: G_STORE [[LOAD]](s64), %ptr(p0) :: (store (s64))670 ; CHECK-NEXT: RET_ReallyLR671 %ptr:_(p0) = COPY $x0672 %load:_(s88) = G_LOAD %ptr(p0) :: (load (s64))673 G_STORE %load(s88), %ptr(p0) :: (store (s64))674 RET_ReallyLR675...676---677name: load_s1678alignment: 4679tracksRegLiveness: true680machineFunctionInfo: {}681body: |682 bb.1:683 liveins: $x0684 ; CHECK-LABEL: name: load_s1685 ; CHECK: liveins: $x0686 ; CHECK-NEXT: {{ $}}687 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0688 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s8) = G_LOAD %ptr(p0) :: (load (s8))689 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s8) = G_ASSERT_ZEXT [[LOAD]], 1690 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ASSERT_ZEXT]](s8)691 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1692 ; CHECK-NEXT: %ext:_(s64) = G_AND [[ANYEXT]], [[C]]693 ; CHECK-NEXT: $x0 = COPY %ext(s64)694 ; CHECK-NEXT: RET_ReallyLR implicit $x0695 %ptr:_(p0) = COPY $x0696 %load:_(s1) = G_LOAD %ptr(p0) :: (load (s1))697 %ext:_(s64) = G_ZEXT %load698 $x0 = COPY %ext699 RET_ReallyLR implicit $x0700...701---702name: load_store_6xp0703alignment: 4704tracksRegLiveness: true705machineFunctionInfo: {}706body: |707 bb.1:708 liveins: $x0709 ; CHECK-LABEL: name: load_store_6xp0710 ; CHECK: liveins: $x0711 ; CHECK-NEXT: {{ $}}712 ; CHECK-NEXT: %ptr:_(p0) = COPY $x0713 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s64>) = G_LOAD %ptr(p0) :: (load (<2 x s64>), align 64)714 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x p0>) = G_BITCAST [[LOAD]](<2 x s64>)715 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16716 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)717 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(<2 x s64>) = G_LOAD [[PTR_ADD]](p0) :: (load (<2 x s64>) from unknown-address + 16)718 ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x p0>) = G_BITCAST [[LOAD1]](<2 x s64>)719 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 32720 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C1]](s64)721 ; CHECK-NEXT: [[LOAD2:%[0-9]+]]:_(<2 x s64>) = G_LOAD [[PTR_ADD1]](p0) :: (load (<2 x s64>) from unknown-address + 32, align 32)722 ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(<2 x p0>) = G_BITCAST [[LOAD2]](<2 x s64>)723 ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(<2 x s64>) = G_BITCAST [[BITCAST]](<2 x p0>)724 ; CHECK-NEXT: G_STORE [[BITCAST3]](<2 x s64>), %ptr(p0) :: (store (<2 x s64>), align 64)725 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)726 ; CHECK-NEXT: [[BITCAST4:%[0-9]+]]:_(<2 x s64>) = G_BITCAST [[BITCAST1]](<2 x p0>)727 ; CHECK-NEXT: G_STORE [[BITCAST4]](<2 x s64>), [[PTR_ADD2]](p0) :: (store (<2 x s64>) into unknown-address + 16)728 ; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C1]](s64)729 ; CHECK-NEXT: [[BITCAST5:%[0-9]+]]:_(<2 x s64>) = G_BITCAST [[BITCAST2]](<2 x p0>)730 ; CHECK-NEXT: G_STORE [[BITCAST5]](<2 x s64>), [[PTR_ADD3]](p0) :: (store (<2 x s64>) into unknown-address + 32, align 32)731 ; CHECK-NEXT: RET_ReallyLR732 %ptr:_(p0) = COPY $x0733 %val:_(<6 x p0>) = G_LOAD %ptr(p0) :: (load (<6 x p0>))734 G_STORE %val(<6 x p0>), %ptr(p0) :: (store (<6 x p0>))735 RET_ReallyLR736