568 lines · plain
1# RUN: llc -mtriple=aarch64--linux-gnu -run-pass=aarch64-copyelim %s -verify-machineinstrs -o - | FileCheck %s2---3# CHECK-LABEL: name: test14# CHECK: ANDSWri $w0, 1, implicit-def $nzcv5# CHECK: bb.1:6# CHECK-NOT: COPY $wzr7name: test18tracksRegLiveness: true9body: |10 bb.0.entry:11 liveins: $w0, $x1, $x212 13 $w0 = ANDSWri $w0, 1, implicit-def $nzcv14 STRWui killed $w0, killed $x1, 015 Bcc 1, %bb.2, implicit killed $nzcv16 B %bb.117 18 bb.1:19 liveins: $x220 21 $w0 = COPY $wzr22 STRWui killed $w0, killed $x2, 023 24 bb.2:25 RET_ReallyLR26...27# CHECK-LABEL: name: test228# CHECK: ANDSXri $x0, 1, implicit-def $nzcv29# CHECK: bb.1:30# CHECK-NOT: COPY $xzr31name: test232tracksRegLiveness: true33body: |34 bb.0.entry:35 liveins: $x0, $x1, $x236 37 $x0 = ANDSXri $x0, 1, implicit-def $nzcv38 STRXui killed $x0, killed $x1, 039 Bcc 1, %bb.2, implicit killed $nzcv40 B %bb.141 42 bb.1:43 liveins: $x244 45 $x0 = COPY $xzr46 STRXui killed $x0, killed $x2, 047 48 bb.2:49 RET_ReallyLR50...51# CHECK-LABEL: name: test352# CHECK: ADDSWri $w0, 1, 0, implicit-def $nzcv53# CHECK: bb.1:54# CHECK-NOT: COPY $wzr55name: test356tracksRegLiveness: true57body: |58 bb.0.entry:59 liveins: $w0, $x1, $x260 61 $w0 = ADDSWri $w0, 1, 0, implicit-def $nzcv62 STRWui killed $w0, killed $x1, 063 Bcc 1, %bb.2, implicit killed $nzcv64 B %bb.165 66 bb.1:67 liveins: $x268 69 $w0 = COPY $wzr70 STRWui killed $w0, killed $x2, 071 72 bb.2:73 RET_ReallyLR74...75# CHECK-LABEL: name: test476# CHECK: ADDSXri $x0, 1, 0, implicit-def $nzcv77# CHECK: bb.1:78# CHECK-NOT: COPY $xzr79name: test480tracksRegLiveness: true81body: |82 bb.0.entry:83 liveins: $x0, $x1, $x284 85 $x0 = ADDSXri $x0, 1, 0, implicit-def $nzcv86 STRXui killed $x0, killed $x1, 087 Bcc 1, %bb.2, implicit killed $nzcv88 B %bb.189 90 bb.1:91 liveins: $x292 93 $x0 = COPY $xzr94 STRXui killed $x0, killed $x2, 095 96 bb.2:97 RET_ReallyLR98...99# CHECK-LABEL: name: test5100# CHECK: SUBSWri $w0, 1, 0, implicit-def $nzcv101# CHECK: bb.1:102# CHECK-NOT: COPY $wzr103name: test5104tracksRegLiveness: true105body: |106 bb.0.entry:107 liveins: $w0, $x1, $x2108 109 $w0 = SUBSWri $w0, 1, 0, implicit-def $nzcv110 STRWui killed $w0, killed $x1, 0111 Bcc 1, %bb.2, implicit killed $nzcv112 B %bb.1113 114 bb.1:115 liveins: $x2116 117 $w0 = COPY $wzr118 STRWui killed $w0, killed $x2, 0119 120 bb.2:121 RET_ReallyLR122...123# CHECK-LABEL: name: test6124# CHECK: SUBSXri $x0, 1, 0, implicit-def $nzcv125# CHECK: bb.1:126# CHECK-NOT: COPY $xzr127name: test6128tracksRegLiveness: true129body: |130 bb.0.entry:131 liveins: $x0, $x1, $x2132 133 $x0 = SUBSXri $x0, 1, 0, implicit-def $nzcv134 STRXui killed $x0, killed $x1, 0135 Bcc 1, %bb.2, implicit killed $nzcv136 B %bb.1137 138 bb.1:139 liveins: $x2140 141 $x0 = COPY $xzr142 STRXui killed $x0, killed $x2, 0143 144 bb.2:145 RET_ReallyLR146...147# CHECK-LABEL: name: test7148# CHECK: ADDSWrr $w0, $w1, implicit-def $nzcv149# CHECK: bb.1:150# CHECK-NOT: COPY $wzr151name: test7152tracksRegLiveness: true153body: |154 bb.0.entry:155 liveins: $w0, $w1, $x2, $x3156 157 $w0 = ADDSWrr $w0, $w1, implicit-def $nzcv158 STRWui killed $w0, killed $x2, 0159 Bcc 1, %bb.2, implicit killed $nzcv160 B %bb.1161 162 bb.1:163 liveins: $x3164 165 $w0 = COPY $wzr166 STRWui killed $w0, killed $x3, 0167 168 bb.2:169 RET_ReallyLR170...171# CHECK-LABEL: name: test8172# CHECK: ADDSXrr $x0, $x1, implicit-def $nzcv173# CHECK: bb.1:174# CHECK-NOT: COPY $xzr175name: test8176tracksRegLiveness: true177body: |178 bb.0.entry:179 liveins: $x0, $x1, $x2, $x3180 181 $x0 = ADDSXrr $x0, $x1, implicit-def $nzcv182 STRXui killed $x0, killed $x2, 0183 Bcc 1, %bb.2, implicit killed $nzcv184 B %bb.1185 186 bb.1:187 liveins: $x3188 189 $x0 = COPY $xzr190 STRXui killed $x0, killed $x3, 0191 192 bb.2:193 RET_ReallyLR194...195# CHECK-LABEL: name: test9196# CHECK: ANDSWrr $w0, $w1, implicit-def $nzcv197# CHECK: bb.1:198# CHECK-NOT: COPY $wzr199name: test9200tracksRegLiveness: true201body: |202 bb.0.entry:203 liveins: $w0, $w1, $x2, $x3204 205 $w0 = ANDSWrr $w0, $w1, implicit-def $nzcv206 STRWui killed $w0, killed $x2, 0207 Bcc 1, %bb.2, implicit killed $nzcv208 B %bb.1209 210 bb.1:211 liveins: $x3212 213 $w0 = COPY $wzr214 STRWui killed $w0, killed $x3, 0215 216 bb.2:217 RET_ReallyLR218...219# CHECK-LABEL: name: test10220# CHECK: ANDSXrr $x0, $x1, implicit-def $nzcv221# CHECK: bb.1:222# CHECK-NOT: COPY $xzr223name: test10224tracksRegLiveness: true225body: |226 bb.0.entry:227 liveins: $x0, $x1, $x2, $x3228 229 $x0 = ANDSXrr $x0, $x1, implicit-def $nzcv230 STRXui killed $x0, killed $x2, 0231 Bcc 1, %bb.2, implicit killed $nzcv232 B %bb.1233 234 bb.1:235 liveins: $x3236 237 $x0 = COPY $xzr238 STRXui killed $x0, killed $x3, 0239 240 bb.2:241 RET_ReallyLR242...243# CHECK-LABEL: name: test11244# CHECK: BICSWrr $w0, $w1, implicit-def $nzcv245# CHECK: bb.1:246# CHECK-NOT: COPY $wzr247name: test11248tracksRegLiveness: true249body: |250 bb.0.entry:251 liveins: $w0, $w1, $x2, $x3252 253 $w0 = BICSWrr $w0, $w1, implicit-def $nzcv254 STRWui killed $w0, killed $x2, 0255 Bcc 1, %bb.2, implicit killed $nzcv256 B %bb.1257 258 bb.1:259 liveins: $x3260 261 $w0 = COPY $wzr262 STRWui killed $w0, killed $x3, 0263 264 bb.2:265 RET_ReallyLR266...267# CHECK-LABEL: name: test12268# CHECK: BICSXrr $x0, $x1, implicit-def $nzcv269# CHECK: bb.1:270# CHECK-NOT: COPY $xzr271name: test12272tracksRegLiveness: true273body: |274 bb.0.entry:275 liveins: $x0, $x1, $x2, $x3276 277 $x0 = BICSXrr $x0, $x1, implicit-def $nzcv278 STRXui killed $x0, killed $x2, 0279 Bcc 1, %bb.2, implicit killed $nzcv280 B %bb.1281 282 bb.1:283 liveins: $x3284 285 $x0 = COPY $xzr286 STRXui killed $x0, killed $x3, 0287 288 bb.2:289 RET_ReallyLR290...291# CHECK-LABEL: name: test13292# CHECK: SUBSWrr $w0, $w1, implicit-def $nzcv293# CHECK: bb.1:294# CHECK-NOT: COPY $wzr295name: test13296tracksRegLiveness: true297body: |298 bb.0.entry:299 liveins: $w0, $w1, $x2, $x3300 301 $w0 = SUBSWrr $w0, $w1, implicit-def $nzcv302 STRWui killed $w0, killed $x2, 0303 Bcc 1, %bb.2, implicit killed $nzcv304 B %bb.1305 306 bb.1:307 liveins: $x3308 309 $w0 = COPY $wzr310 STRWui killed $w0, killed $x3, 0311 312 bb.2:313 RET_ReallyLR314...315# CHECK-LABEL: name: test14316# CHECK: SUBSXrr $x0, $x1, implicit-def $nzcv317# CHECK: bb.1:318# CHECK-NOT: COPY $xzr319name: test14320tracksRegLiveness: true321body: |322 bb.0.entry:323 liveins: $x0, $x1, $x2, $x3324 325 $x0 = SUBSXrr $x0, $x1, implicit-def $nzcv326 STRXui killed $x0, killed $x2, 0327 Bcc 1, %bb.2, implicit killed $nzcv328 B %bb.1329 330 bb.1:331 liveins: $x3332 333 $x0 = COPY $xzr334 STRXui killed $x0, killed $x3, 0335 336 bb.2:337 RET_ReallyLR338...339# CHECK-LABEL: name: test15340# CHECK: ADDSWrs $w0, $w1, 0, implicit-def $nzcv341# CHECK: bb.1:342# CHECK-NOT: COPY $wzr343name: test15344tracksRegLiveness: true345body: |346 bb.0.entry:347 liveins: $w0, $w1, $x2, $x3348 349 $w0 = ADDSWrs $w0, $w1, 0, implicit-def $nzcv350 STRWui killed $w0, killed $x2, 0351 Bcc 1, %bb.2, implicit killed $nzcv352 B %bb.1353 354 bb.1:355 liveins: $x3356 357 $w0 = COPY $wzr358 STRWui killed $w0, killed $x3, 0359 360 bb.2:361 RET_ReallyLR362...363# CHECK-LABEL: name: test16364# CHECK: ADDSXrs $x0, $x1, 0, implicit-def $nzcv365# CHECK: bb.1:366# CHECK-NOT: COPY $xzr367name: test16368tracksRegLiveness: true369body: |370 bb.0.entry:371 liveins: $x0, $x1, $x2, $x3372 373 $x0 = ADDSXrs $x0, $x1, 0, implicit-def $nzcv374 STRXui killed $x0, killed $x2, 0375 Bcc 1, %bb.2, implicit killed $nzcv376 B %bb.1377 378 bb.1:379 liveins: $x3380 381 $x0 = COPY $xzr382 STRXui killed $x0, killed $x3, 0383 384 bb.2:385 RET_ReallyLR386...387# CHECK-LABEL: name: test17388# CHECK: ANDSWrs $w0, $w1, 0, implicit-def $nzcv389# CHECK: bb.1:390# CHECK-NOT: COPY $wzr391name: test17392tracksRegLiveness: true393body: |394 bb.0.entry:395 liveins: $w0, $w1, $x2, $x3396 397 $w0 = ANDSWrs $w0, $w1, 0, implicit-def $nzcv398 STRWui killed $w0, killed $x2, 0399 Bcc 1, %bb.2, implicit killed $nzcv400 B %bb.1401 402 bb.1:403 liveins: $x3404 405 $w0 = COPY $wzr406 STRWui killed $w0, killed $x3, 0407 408 bb.2:409 RET_ReallyLR410...411# CHECK-LABEL: name: test18412# CHECK: ANDSXrs $x0, $x1, 0, implicit-def $nzcv413# CHECK: bb.1:414# CHECK-NOT: COPY $xzr415name: test18416tracksRegLiveness: true417body: |418 bb.0.entry:419 liveins: $x0, $x1, $x2, $x3420 421 $x0 = ANDSXrs $x0, $x1, 0, implicit-def $nzcv422 STRXui killed $x0, killed $x2, 0423 Bcc 1, %bb.2, implicit killed $nzcv424 B %bb.1425 426 bb.1:427 liveins: $x3428 429 $x0 = COPY $xzr430 STRXui killed $x0, killed $x3, 0431 432 bb.2:433 RET_ReallyLR434...435# CHECK-LABEL: name: test19436# CHECK: BICSWrs $w0, $w1, 0, implicit-def $nzcv437# CHECK: bb.1:438# CHECK-NOT: COPY $wzr439name: test19440tracksRegLiveness: true441body: |442 bb.0.entry:443 liveins: $w0, $w1, $x2, $x3444 445 $w0 = BICSWrs $w0, $w1, 0, implicit-def $nzcv446 STRWui killed $w0, killed $x2, 0447 Bcc 1, %bb.2, implicit killed $nzcv448 B %bb.1449 450 bb.1:451 liveins: $x3452 453 $w0 = COPY $wzr454 STRWui killed $w0, killed $x3, 0455 456 bb.2:457 RET_ReallyLR458...459# Unicorn test - we can remove a redundant copy and a redundant mov460# CHECK-LABEL: name: test20461# CHECK: SUBSWri $w1, 1, 0, implicit-def $nzcv462# CHECK: bb.1:463# CHECK-NOT: $w0 = COPY $wzr464# CHECK-NOT: $w1 = MOVi32imm 1465name: test20466tracksRegLiveness: true467body: |468 bb.0.entry:469 liveins: $w1, $x2470 471 $w0 = SUBSWri $w1, 1, 0, implicit-def $nzcv472 Bcc 1, %bb.2, implicit killed $nzcv473 B %bb.1474 475 bb.1:476 liveins: $x2477 478 $w0 = COPY $wzr479 $w1 = MOVi32imm 1480 STRWui killed $w0, $x2, 0481 STRWui killed $w1, killed $x2, 1482 483 bb.2:484 RET_ReallyLR485 486...487# Negative test - MOVi32imm clobbers $w0488# CHECK-LABEL: name: test21489# CHECK: ANDSWri $w0, 1, implicit-def $nzcv490# CHECK: bb.1:491# CHECK: $w0 = COPY $wzr492name: test21493tracksRegLiveness: true494body: |495 bb.0.entry:496 liveins: $w0, $x1, $x2497 498 $w0 = ANDSWri $w0, 1, implicit-def $nzcv499 STRWui killed $w0, $x1, 0500 $w0 = MOVi32imm -1501 STRWui killed $w0, killed $x1, 1502 Bcc 1, %bb.2, implicit killed $nzcv503 B %bb.1504 505 bb.1:506 liveins: $x2507 508 $w0 = COPY $wzr509 STRWui killed $w0, killed $x2, 0510 511 bb.2:512 RET_ReallyLR513...514# Negative test - SUBSXri self-clobbers x0, so MOVi64imm can't be removed515# CHECK-LABEL: name: test22516# CHECK: SUBSXri $x0, 1, 0, implicit-def $nzcv517# CHECK: bb.1:518# CHECK: $x0 = MOVi64imm 1519name: test22520tracksRegLiveness: true521body: |522 bb.0.entry:523 liveins: $x0, $x1, $x2524 525 $x0 = SUBSXri $x0, 1, 0, implicit-def $nzcv526 STRXui killed $x0, killed $x1, 0527 Bcc 1, %bb.2, implicit killed $nzcv528 B %bb.1529 530 bb.1:531 liveins: $x2532 533 $x0 = MOVi64imm 1534 STRXui killed $x0, killed $x2, 0535 536 bb.2:537 RET_ReallyLR538...539# Negative test - bb.1 has multiple preds540# CHECK-LABEL: name: test23541# CHECK: ADDSWri $w0, 1, 0, implicit-def $nzcv542# CHECK: bb.1:543# CHECK: COPY $wzr544name: test23545tracksRegLiveness: true546body: |547 bb.0.entry:548 liveins: $w0, $x1, $x2549 550 $w0 = ADDSWri $w0, 1, 0, implicit-def $nzcv551 STRWui killed $w0, killed $x1, 0552 Bcc 1, %bb.2, implicit killed $nzcv553 B %bb.1554 555 bb.3:556 liveins: $x2557 558 B %bb.1559 560 bb.1:561 liveins: $x2562 563 $w0 = COPY $wzr564 STRWui killed $w0, killed $x2, 0565 566 bb.2:567 RET_ReallyLR568