379 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64-- -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s3# RUN: llc -debugify-and-strip-all-safe -mtriple=aarch64-- -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s4---5name: test_memcpy6tracksRegLiveness: true7body: |8 bb.1:9 liveins: $w2, $x0, $x110 11 ; CHECK-LABEL: name: test_memcpy12 ; CHECK: liveins: $w2, $x0, $x113 ; CHECK-NEXT: {{ $}}14 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x015 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x116 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w217 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY2]](s32)18 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp19 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)20 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)21 ; CHECK-NEXT: $x2 = COPY [[ZEXT]](s64)22 ; CHECK-NEXT: BL &memcpy, csr_aarch64_aapcs_thisreturn, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x223 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp24 ; CHECK-NEXT: RET_ReallyLR25 %0:_(p0) = COPY $x026 %1:_(p0) = COPY $x127 %2:_(s32) = COPY $w228 %3:_(s64) = G_ZEXT %2(s32)29 G_MEMCPY %0(p0), %1(p0), %3(s64), 0 :: (store unknown-size), (load unknown-size)30 RET_ReallyLR31 32...33---34name: test_memcpy_tail35tracksRegLiveness: true36body: |37 bb.1:38 liveins: $w2, $x0, $x139 40 ; CHECK-LABEL: name: test_memcpy_tail41 ; CHECK: liveins: $w2, $x0, $x142 ; CHECK-NEXT: {{ $}}43 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x044 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x145 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w246 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY2]](s32)47 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)48 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)49 ; CHECK-NEXT: $x2 = COPY [[ZEXT]](s64)50 ; CHECK-NEXT: TCRETURNdi &memcpy, 0, csr_aarch64_aapcs, implicit $sp, implicit $x0, implicit $x1, implicit $x251 %0:_(p0) = COPY $x052 %1:_(p0) = COPY $x153 %2:_(s32) = COPY $w254 %3:_(s64) = G_ZEXT %2(s32)55 G_MEMCPY %0(p0), %1(p0), %3(s64), 1 :: (store unknown-size), (load unknown-size)56 RET_ReallyLR57 58...59---60name: test_memmove61tracksRegLiveness: true62body: |63 bb.1:64 liveins: $w2, $x0, $x165 66 ; CHECK-LABEL: name: test_memmove67 ; CHECK: liveins: $w2, $x0, $x168 ; CHECK-NEXT: {{ $}}69 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x070 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x171 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w272 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY2]](s32)73 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp74 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)75 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)76 ; CHECK-NEXT: $x2 = COPY [[ZEXT]](s64)77 ; CHECK-NEXT: BL &memmove, csr_aarch64_aapcs_thisreturn, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x278 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp79 ; CHECK-NEXT: RET_ReallyLR80 %0:_(p0) = COPY $x081 %1:_(p0) = COPY $x182 %2:_(s32) = COPY $w283 %3:_(s64) = G_ZEXT %2(s32)84 G_MEMMOVE %0(p0), %1(p0), %3(s64), 0 :: (store unknown-size), (load unknown-size)85 RET_ReallyLR86 87...88---89name: test_memset90tracksRegLiveness: true91body: |92 bb.1:93 liveins: $w1, $w2, $x094 95 ; CHECK-LABEL: name: test_memset96 ; CHECK: liveins: $w1, $w2, $x097 ; CHECK-NEXT: {{ $}}98 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x099 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1100 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2101 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY2]](s32)102 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp103 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)104 ; CHECK-NEXT: $w1 = COPY [[COPY1]](s32)105 ; CHECK-NEXT: $x2 = COPY [[ZEXT]](s64)106 ; CHECK-NEXT: BL &memset, csr_aarch64_aapcs_thisreturn, implicit-def $lr, implicit $sp, implicit $x0, implicit $w1, implicit $x2107 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp108 ; CHECK-NEXT: RET_ReallyLR109 %0:_(p0) = COPY $x0110 %1:_(s32) = COPY $w1111 %2:_(s32) = COPY $w2112 %3:_(s8) = G_TRUNC %1(s32)113 %4:_(s64) = G_ZEXT %2(s32)114 G_MEMSET %0(p0), %3(s8), %4(s64), 0 :: (store unknown-size)115 RET_ReallyLR116 117...118---119name: no_tail_call120tracksRegLiveness: true121body: |122 bb.1:123 liveins: $w2, $x0, $x1124 125 ; CHECK-LABEL: name: no_tail_call126 ; CHECK: liveins: $w2, $x0, $x1127 ; CHECK-NEXT: {{ $}}128 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1129 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x0130 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2131 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY2]](s32)132 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp133 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)134 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)135 ; CHECK-NEXT: $x2 = COPY [[ZEXT]](s64)136 ; CHECK-NEXT: BL &memcpy, csr_aarch64_aapcs_thisreturn, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x2137 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp138 ; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)139 ; CHECK-NEXT: RET_ReallyLR implicit $x0140 %0:_(p0) = COPY $x1141 %1:_(p0) = COPY $x0142 %2:_(s32) = COPY $w2143 %3:_(s64) = G_ZEXT %2(s32)144 G_MEMCPY %0(p0), %1(p0), %3(s64), 1 :: (store unknown-size), (load unknown-size)145 $x0 = COPY %3146 RET_ReallyLR implicit $x0147 148...149---150name: dont_tc_twice151tracksRegLiveness: true152body: |153 bb.1:154 liveins: $w2, $x0, $x1155 ; CHECK-LABEL: name: dont_tc_twice156 ; CHECK: liveins: $w2, $x0, $x1157 ; CHECK-NEXT: {{ $}}158 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0159 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1160 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2161 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY2]](s32)162 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp163 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)164 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)165 ; CHECK-NEXT: $x2 = COPY [[ZEXT]](s64)166 ; CHECK-NEXT: BL &memcpy, csr_aarch64_aapcs_thisreturn, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x2167 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp168 ; CHECK-NEXT: TCRETURNdi &memset, 0, csr_aarch64_aapcs, implicit $sp169 %0:_(p0) = COPY $x0170 %1:_(p0) = COPY $x1171 %2:_(s32) = COPY $w2172 %4:_(s1) = G_CONSTANT i1 false173 %3:_(s64) = G_ZEXT %2(s32)174 G_MEMCPY %0(p0), %1(p0), %3(s64), 1 :: (store unknown-size), (load unknown-size)175 TCRETURNdi &memset, 0, csr_aarch64_aapcs, implicit $sp176 177...178---179name: tail_with_copy_ret180alignment: 4181tracksRegLiveness: true182registers:183 - { id: 0, class: _ }184 - { id: 1, class: _ }185 - { id: 2, class: _ }186liveins:187 - { reg: '$x0' }188 - { reg: '$x1' }189 - { reg: '$x2' }190frameInfo:191 maxAlignment: 1192machineFunctionInfo: {}193body: |194 bb.1.entry:195 liveins: $x0, $x1, $x2196 197 ; CHECK-LABEL: name: tail_with_copy_ret198 ; CHECK: liveins: $x0, $x1, $x2199 ; CHECK-NEXT: {{ $}}200 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0201 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1202 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2203 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)204 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)205 ; CHECK-NEXT: $x2 = COPY [[COPY2]](s64)206 ; CHECK-NEXT: TCRETURNdi &memcpy, 0, csr_aarch64_aapcs, implicit $sp, implicit $x0, implicit $x1, implicit $x2207 %0:_(p0) = COPY $x0208 %1:_(p0) = COPY $x1209 %2:_(s64) = COPY $x2210 G_MEMCPY %0(p0), %1(p0), %2(s64), 1 :: (store (s8)), (load (s8))211 $x0 = COPY %0(p0)212 RET_ReallyLR implicit $x0213 214...215---216name: dont_tc_mismatched_copies217alignment: 4218tracksRegLiveness: true219registers:220 - { id: 0, class: _ }221 - { id: 1, class: _ }222 - { id: 2, class: _ }223liveins:224 - { reg: '$x0' }225 - { reg: '$x1' }226 - { reg: '$x2' }227frameInfo:228 maxAlignment: 1229machineFunctionInfo: {}230body: |231 bb.1.entry:232 liveins: $x0, $x1, $x2233 234 ; CHECK-LABEL: name: dont_tc_mismatched_copies235 ; CHECK: liveins: $x0, $x1, $x2236 ; CHECK-NEXT: {{ $}}237 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0238 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1239 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2240 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp241 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)242 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)243 ; CHECK-NEXT: $x2 = COPY [[COPY2]](s64)244 ; CHECK-NEXT: BL &memcpy, csr_aarch64_aapcs_thisreturn, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x2245 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp246 ; CHECK-NEXT: $x1 = COPY [[COPY]](p0)247 ; CHECK-NEXT: RET_ReallyLR implicit $x0248 %0:_(p0) = COPY $x0249 %1:_(p0) = COPY $x1250 %2:_(s64) = COPY $x2251 G_MEMCPY %0(p0), %1(p0), %2(s64), 1 :: (store (s8)), (load (s8))252 $x1 = COPY %0(p0)253 RET_ReallyLR implicit $x0254 255...256---257name: dont_tc_extra_copy258alignment: 4259tracksRegLiveness: true260registers:261 - { id: 0, class: _ }262 - { id: 1, class: _ }263 - { id: 2, class: _ }264liveins:265 - { reg: '$x0' }266 - { reg: '$x1' }267 - { reg: '$x2' }268frameInfo:269 maxAlignment: 1270machineFunctionInfo: {}271body: |272 bb.1.entry:273 liveins: $x0, $x1, $x2274 275 ; CHECK-LABEL: name: dont_tc_extra_copy276 ; CHECK: liveins: $x0, $x1, $x2277 ; CHECK-NEXT: {{ $}}278 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0279 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1280 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2281 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp282 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)283 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)284 ; CHECK-NEXT: $x2 = COPY [[COPY2]](s64)285 ; CHECK-NEXT: BL &memcpy, csr_aarch64_aapcs_thisreturn, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x2286 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp287 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)288 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)289 ; CHECK-NEXT: RET_ReallyLR implicit $x0290 %0:_(p0) = COPY $x0291 %1:_(p0) = COPY $x1292 %2:_(s64) = COPY $x2293 G_MEMCPY %0(p0), %1(p0), %2(s64), 1 :: (store (s8)), (load (s8))294 $x0 = COPY %0(p0)295 $x0 = COPY %0(p0)296 RET_ReallyLR implicit $x0297 298...299---300name: dont_tc_mismatched_ret301alignment: 4302tracksRegLiveness: true303registers:304 - { id: 0, class: _ }305 - { id: 1, class: _ }306 - { id: 2, class: _ }307liveins:308 - { reg: '$x0' }309 - { reg: '$x1' }310 - { reg: '$x2' }311frameInfo:312 maxAlignment: 1313machineFunctionInfo: {}314body: |315 bb.1.entry:316 liveins: $x0, $x1, $x2317 318 ; CHECK-LABEL: name: dont_tc_mismatched_ret319 ; CHECK: liveins: $x0, $x1, $x2320 ; CHECK-NEXT: {{ $}}321 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1322 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x0323 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2324 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp325 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)326 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)327 ; CHECK-NEXT: $x2 = COPY [[COPY2]](s64)328 ; CHECK-NEXT: BL &memcpy, csr_aarch64_aapcs_thisreturn, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x2329 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp330 ; CHECK-NEXT: $x1 = COPY [[COPY]](p0)331 ; CHECK-NEXT: RET_ReallyLR implicit $x0332 %0:_(p0) = COPY $x1333 %1:_(p0) = COPY $x0334 %2:_(s64) = COPY $x2335 G_MEMCPY %0(p0), %1(p0), %2(s64), 1 :: (store (s8)), (load (s8))336 $x1 = COPY %0(p0)337 RET_ReallyLR implicit $x0338 339...340---341name: dont_tc_ret_void_copy342alignment: 4343tracksRegLiveness: true344registers:345 - { id: 0, class: _ }346 - { id: 1, class: _ }347 - { id: 2, class: _ }348liveins:349 - { reg: '$x0' }350 - { reg: '$x1' }351 - { reg: '$x2' }352frameInfo:353 maxAlignment: 1354machineFunctionInfo: {}355body: |356 bb.1.entry:357 liveins: $x0, $x1, $x2358 359 ; CHECK-LABEL: name: dont_tc_ret_void_copy360 ; CHECK: liveins: $x0, $x1, $x2361 ; CHECK-NEXT: {{ $}}362 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0363 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1364 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2365 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp366 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)367 ; CHECK-NEXT: $x1 = COPY [[COPY1]](p0)368 ; CHECK-NEXT: $x2 = COPY [[COPY2]](s64)369 ; CHECK-NEXT: BL &memcpy, csr_aarch64_aapcs_thisreturn, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x2370 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp371 ; CHECK-NEXT: $x0 = COPY [[COPY]](p0)372 ; CHECK-NEXT: RET_ReallyLR373 %0:_(p0) = COPY $x0374 %1:_(p0) = COPY $x1375 %2:_(s64) = COPY $x2376 G_MEMCPY %0(p0), %1(p0), %2(s64), 1 :: (store (s8)), (load (s8))377 $x0 = COPY %0(p0)378 RET_ReallyLR379