brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · b2fc40a Raw
611 lines · plain
1# RUN: llc -mtriple=aarch64--linux-gnu -run-pass=aarch64-copyelim %s -verify-machineinstrs -o - | FileCheck %s2---3# Check that bb.0 COPY is seen through to allow the bb.1 COPY of XZR to be removed.4# CHECK-LABEL: name: test15# CHECK-NOT: COPY $xzr6name:            test17tracksRegLiveness: true8body:             |9  bb.0:10    liveins: $x0, $x111 12    $x0 = COPY $x113    CBNZX $x1, %bb.214 15  bb.1:16    $x0 = COPY $xzr17    B %bb.318 19  bb.2:20    liveins: $x121 22    $x0 = LDRXui $x1, 023 24  bb.3:25    liveins: $x026 27    RET_ReallyLR implicit $x028 29...30# Similar to test1, but with reversed COPY.31# CHECK-LABEL: name: test232# CHECK-NOT: COPY $xzr33name:            test234tracksRegLiveness: true35body:             |36  bb.0:37    liveins: $x0, $x138 39    $x1 = COPY $x040    CBNZX $x1, %bb.241 42  bb.1:43    $x0 = COPY $xzr44    B %bb.345 46  bb.2:47    liveins: $x148 49    $x0 = LDRXui $x1, 050 51  bb.3:52    liveins: $x053 54    RET_ReallyLR implicit $x055 56...57# Similar to test1, but with a clobber that prevents removal of the XZR COPY.58# CHECK-LABEL: name: test359# CHECK: COPY $xzr60name:            test361tracksRegLiveness: true62body:             |63  bb.0:64    liveins: $x0, $x1, $x265 66    $x0 = COPY $x167    $x1 = LDRXui $x1, 068    CBNZX $x1, %bb.269 70  bb.1:71    $x0 = COPY $xzr72    B %bb.373 74  bb.2:75    liveins: $x176 77    $x0 = LDRXui $x1, 078 79  bb.3:80    liveins: $x081 82    RET_ReallyLR implicit $x083 84...85# Similar to test2, but with a clobber that prevents removal of the XZR COPY.86# CHECK-LABEL: name: test487# CHECK: COPY $xzr88name:            test489tracksRegLiveness: true90body:             |91  bb.0:92    liveins: $x0, $x1, $x293 94    $x1 = COPY $x095    $x1 = LDRXui $x1, 096    CBNZX $x1, %bb.297 98  bb.1:99    $x0 = COPY $xzr100    B %bb.3101 102  bb.2:103    liveins: $x1104 105    $x0 = LDRXui $x1, 0106 107  bb.3:108    liveins: $x0109 110    RET_ReallyLR implicit $x0111 112...113# Similar to test2, but with a clobber that prevents removal of the XZR COPY.114# CHECK-LABEL: name: test5115# CHECK: COPY $xzr116name:            test5117tracksRegLiveness: true118body:             |119  bb.0:120    liveins: $x0, $x1, $x2121 122    $x1 = COPY $x0123    $x0 = LDRXui $x1, 0124    CBNZX $x1, %bb.2125 126  bb.1:127    $x0 = COPY $xzr128    B %bb.3129 130  bb.2:131    liveins: $x1132 133    $x0 = LDRXui $x1, 0134 135  bb.3:136    liveins: $x0137 138    RET_ReallyLR implicit $x0139 140...141# Similar to test1, but with two levels of COPYs.142# CHECK-LABEL: name: test6143# CHECK-NOT: COPY $xzr144name:            test6145tracksRegLiveness: true146body:             |147  bb.0:148    liveins: $x0, $x1, $x2149 150    $x2 = COPY $x0151    $x1 = COPY $x2152    CBNZX $x1, %bb.2153 154  bb.1:155    $x0 = COPY $xzr156    B %bb.3157 158  bb.2:159    liveins: $x1160 161    $x0 = LDRXui $x1, 0162 163  bb.3:164    liveins: $x0165 166    RET_ReallyLR implicit $x0167 168...169# Similar to test1, but with two levels of COPYs and a clobber preventing COPY of XZR removal.170# CHECK-LABEL: name: test7171# CHECK: COPY $xzr172name:            test7173tracksRegLiveness: true174body:             |175  bb.0:176    liveins: $x0, $x1, $x2177 178    $x2 = COPY $x0179    $x0 = LDRXui $x1, 0180    $x1 = COPY $x2181    CBNZX $x1, %bb.2182 183  bb.1:184    $x0 = COPY $xzr185    B %bb.3186 187  bb.2:188    liveins: $x1189 190    $x0 = LDRXui $x1, 0191 192  bb.3:193    liveins: $x0194 195    RET_ReallyLR implicit $x0196 197...198# Check that the TargetRegs vector clobber update loop in199#  AArch64RedundantCopyElimination::optimizeCopy works correctly.200# CHECK-LABEL: name: test8201# CHECK: x0 = COPY $xzr202# CHECK: x1 = COPY $xzr203name:            test8204tracksRegLiveness: true205body:             |206  bb.0:207    liveins: $x0, $x1, $x2208 209    $x1 = COPY $x0210    CBNZX $x1, %bb.2211 212  bb.1:213    liveins: $x0, $x2214 215    $x0, $x1 = LDPXi $x2, 0216    $x0 = COPY $xzr217    $x1 = COPY $xzr218    B %bb.3219 220  bb.2:221    liveins: $x1222 223    $x0 = LDRXui $x1, 0224 225  bb.3:226    liveins: $x0227 228    RET_ReallyLR implicit $x0229 230...231# Check that copy isn't removed from a block with multiple predecessors.232# CHECK-LABEL: name: test9233# CHECK: x0 = COPY $xzr234# CHECK-NEXT: B %bb.3235name:            test9236tracksRegLiveness: true237body:             |238  bb.0:239    liveins: $x0, $x1240 241    CBNZX $x0, %bb.2242 243  bb.1:244    liveins: $x0245 246    $x0 = COPY $xzr247    B %bb.3248 249  bb.2:250    liveins: $x1251 252    $x0 = LDRXui $x1, 0253 254    CBNZX $x1, %bb.1255 256  bb.3:257    liveins: $x0258 259    RET_ReallyLR implicit $x0260 261...262# Eliminate redundant MOVi32imm 7 in bb.1263# Note: 32-bit compare/32-bit move imm264# Kill marker should be removed from compare.265# CHECK-LABEL: name: test10266# CHECK: SUBSWri $w0, 7, 0, implicit-def $nzcv267# CHECK: bb.1:268# CHECK-NOT: MOVi32imm269name:            test10270tracksRegLiveness: true271body:             |272  bb.0.entry:273    liveins: $w0, $x1274 275    dead $wzr = SUBSWri killed $w0, 7, 0, implicit-def $nzcv276    Bcc 1, %bb.2, implicit killed $nzcv277    B %bb.1278 279  bb.1:280    liveins: $x1281 282    $w0 = MOVi32imm 7283    STRWui killed $w0, killed $x1, 0284 285  bb.2:286    RET_ReallyLR287...288# Eliminate redundant MOVi32imm 7 in bb.1289# Note: 64-bit compare/32-bit move imm w/implicit def290# Kill marker should be removed from compare.291# CHECK-LABEL: name: test11292# CHECK: SUBSXri $x0, 7, 0, implicit-def $nzcv293# CHECK: bb.1:294# CHECK-NOT: MOVi32imm295name:            test11296tracksRegLiveness: true297body:             |298  bb.0.entry:299    liveins: $x0, $x1300 301    dead $xzr = SUBSXri killed $x0, 7, 0, implicit-def $nzcv302    Bcc 1, %bb.2, implicit killed $nzcv303    B %bb.1304 305  bb.1:306    liveins: $x1307 308    $w0 = MOVi32imm 7, implicit-def $x0309    STRXui killed $x0, killed $x1, 0310 311  bb.2:312    RET_ReallyLR313...314# Eliminate redundant MOVi32imm 7 in bb.1315# Note: 64-bit compare/32-bit move imm316# Kill marker should be removed from compare.317# CHECK-LABEL: name: test12318# CHECK: SUBSXri $x0, 7, 0, implicit-def $nzcv319# CHECK: bb.1:320# CHECK-NOT: MOVi32imm321name:            test12322tracksRegLiveness: true323body:             |324  bb.0.entry:325    liveins: $x0, $x1326 327    dead $xzr = SUBSXri killed $x0, 7, 0, implicit-def $nzcv328    Bcc 1, %bb.2, implicit killed $nzcv329    B %bb.1330 331  bb.1:332    liveins: $x1333 334    $w0 = MOVi32imm 7335    STRWui killed $w0, killed $x1, 0336 337  bb.2:338    RET_ReallyLR339...340# Don't eliminate MOVi32imm 7 in bb.1 as we don't necessarily know the upper 32-bits.341# Note: 32-bit compare/32-bit move imm w/implicit def342# Kill marker should remain on compare.343# CHECK-LABEL: name: test13344# CHECK: SUBSWri killed $w0, 7, 0, implicit-def $nzcv345# CHECK: bb.1:346# CHECK: MOVi32imm347name:            test13348tracksRegLiveness: true349body:             |350  bb.0.entry:351    liveins: $w0, $x1352 353    dead $wzr = SUBSWri killed $w0, 7, 0, implicit-def $nzcv354    Bcc 1, %bb.2, implicit killed $nzcv355    B %bb.1356 357  bb.1:358    liveins: $x1359 360    $w0 = MOVi32imm 7, implicit-def $x0361    STRXui killed $x0, killed $x1, 0362 363  bb.2:364    RET_ReallyLR365...366# We can't eliminate the MOVi32imm because of the clobbering LDRWui.367# CHECK-LABEL: name: test14368# CHECK: bb.1:369# CHECK: MOVi32imm370name:            test14371tracksRegLiveness: true372body:             |373  bb.0.entry:374    liveins: $w0, $x1, $x2375 376    dead $wzr = SUBSWri killed $w0, 7, 0, implicit-def $nzcv377    $w0 = LDRWui $x1, 0378    STRWui killed $w0, killed $x2, 0379    Bcc 1, %bb.2, implicit killed $nzcv380    B %bb.1381 382  bb.1:383    liveins: $x1384 385    $w0 = MOVi32imm 7386    STRWui killed $w0, killed $x1, 0387 388  bb.2:389    RET_ReallyLR390...391# We can't eliminate the MOVi32imm because of the clobbering LDRWui.392# CHECK-LABEL: name: test15393# CHECK: bb.1:394# CHECK: MOVi32imm395name:            test15396tracksRegLiveness: true397body:             |398  bb.0.entry:399    liveins: $w0, $x1, $x2400 401    dead $wzr = SUBSWri killed $w0, 7, 0, implicit-def $nzcv402    Bcc 1, %bb.2, implicit killed $nzcv403    B %bb.1404 405  bb.1:406    liveins: $x1, $x2407 408    $w0 = LDRWui $x1, 0409    STRWui killed $w0, killed $x2, 0410    $w0 = MOVi32imm 7411    STRWui killed $w0, killed $x1, 0412 413  bb.2:414    RET_ReallyLR415...416# Check that bb.0 COPY is seen through to allow the bb.1 MOVi32imm to be removed.417# CHECK-LABEL: name: test16418# CHECK: bb.1:419# CHECK-NOT: MOVi32imm420name:            test16421tracksRegLiveness: true422body:             |423  bb.0.entry:424    liveins: $w0, $x1425 426    dead $wzr = SUBSWri $w0, 7, 0, implicit-def $nzcv427    $w2 = COPY $w0428    Bcc 1, %bb.2, implicit killed $nzcv429    B %bb.1430 431  bb.1:432    liveins: $x1433 434    $w2 = MOVi32imm 7435    STRWui killed $w2, killed $x1, 0436 437  bb.2:438    RET_ReallyLR439...440# Check that bb.1 MOVi32imm is not removed due to self clobbering compare.441# CHECK-LABEL: name: test17442# CHECK: bb.1:443# CHECK: MOVi32imm444name:            test17445tracksRegLiveness: true446body:             |447  bb.0.entry:448    liveins: $w0, $x1449 450    dead $w0 = SUBSWri killed $w0, 7, 0, implicit-def $nzcv451    Bcc 1, %bb.2, implicit killed $nzcv452    B %bb.1453 454  bb.1:455    liveins: $x1456 457    $w0 = MOVi32imm 7458    STRWui killed $w0, killed $x1, 0459 460  bb.2:461    RET_ReallyLR462...463# Make sure the MOVi64imm is not removed.  In one version of this patch the464# MOVi64imm immediate was truncated to 32 bits and incorrectly matched because465# the low 32 bits of 4252017623040 are all zero.466# CHECK-LABEL: name: test18467# CHECK: bb.1:468# CHECK: MOVi64imm469name:            test18470tracksRegLiveness: true471body:             |472  bb.0.entry:473    liveins: $x0, $x1474 475    CBNZX killed $x0, %bb.2476    B %bb.1477 478  bb.1:479    liveins: $x1480 481    $x0 = MOVi64imm 4252017623040482    STRXui killed $x0, killed $x1, 0483 484  bb.2:485    RET_ReallyLR486...487# Eliminate redundant MOVi32imm -1 in bb.1488# Note: 32-bit compare/32-bit move imm489# Kill marker should be removed from compare.490# CHECK-LABEL: name: test19491# CHECK: ADDSWri $w0, 1, 0, implicit-def $nzcv492# CHECK: bb.1:493# CHECK-NOT: MOVi32imm494name:            test19495tracksRegLiveness: true496body:             |497  bb.0.entry:498    liveins: $w0, $x1499 500    dead $wzr = ADDSWri killed $w0, 1, 0, implicit-def $nzcv501    Bcc 1, %bb.2, implicit killed $nzcv502    B %bb.1503 504  bb.1:505    liveins: $x1506 507    $w0 = MOVi32imm -1508    STRWui killed $w0, killed $x1, 0509 510  bb.2:511    RET_ReallyLR512...513# Eliminate redundant MOVi64imm -1 in bb.1514# Note: 64-bit compare/64-bit move imm515# Kill marker should be removed from compare.516# CHECK-LABEL: name: test20517# CHECK: ADDSXri $x0, 1, 0, implicit-def $nzcv518# CHECK: bb.1:519# CHECK-NOT: MOVi64imm520name:            test20521tracksRegLiveness: true522body:             |523  bb.0:524    liveins: $x0, $x1525 526    dead $xzr = ADDSXri killed $x0, 1, 0, implicit-def $nzcv527    Bcc 1, %bb.2, implicit killed $nzcv528    B %bb.1529 530  bb.1:531    liveins: $x1532 533    $x0 = MOVi64imm -1534    STRXui killed $x0, killed $x1, 0535 536  bb.2:537    RET_ReallyLR538...539# Don't eliminate redundant MOVi32imm -1 in bb.1: the upper bits are nonzero.540# Note: 64-bit compare/32-bit move imm541# Kill marker should be removed from compare.542# CHECK-LABEL: name: test21543# CHECK: ADDSXri killed $x0, 1, 0, implicit-def $nzcv544# CHECK: bb.1:545# CHECK: MOVi32imm546name:            test21547tracksRegLiveness: true548body:             |549  bb.0.entry:550    liveins: $x0, $x1551 552    dead $xzr = ADDSXri killed $x0, 1, 0, implicit-def $nzcv553    Bcc 1, %bb.2, implicit killed $nzcv554    B %bb.1555 556  bb.1:557    liveins: $x1558 559    $w0 = MOVi32imm -1560    STRWui killed $w0, killed $x1, 0561 562  bb.2:563    RET_ReallyLR564...565# Don't eliminate MOVi64imm -1 in bb.1 as we don't necessarily know the upper 32-bits.566# Note: 32-bit compare/64-bit move imm567# CHECK-LABEL: name: test22568# CHECK: bb.1:569# CHECK: MOVi64imm570name:            test22571tracksRegLiveness: true572body:             |573  bb.0.entry:574    liveins: $w0, $x1575 576    dead $wzr = ADDSWri killed $w0, 1, 0, implicit-def $nzcv577    Bcc 1, %bb.2, implicit killed $nzcv578    B %bb.1579 580  bb.1:581    liveins: $x1582 583    $x0 = MOVi64imm -1584    STRXui killed $x0, killed $x1, 0585 586  bb.2:587    RET_ReallyLR588...589# Eliminate redundant MOVi32imm 4096 in bb.1 when the compare has a shifted immediate.590# CHECK-LABEL: name: test23591# CHECK: bb.1:592# CHECK-NOT: MOVi32imm593name:            test23594tracksRegLiveness: true595body:             |596  bb.0.entry:597    liveins: $w0, $x1598 599    dead $wzr = SUBSWri killed $w0, 1, 12, implicit-def $nzcv600    Bcc 1, %bb.2, implicit killed $nzcv601    B %bb.1602 603  bb.1:604    liveins: $x1605 606    $w0 = MOVi32imm 4096607    STRWui killed $w0, killed $x1, 0608 609  bb.2:610    RET_ReallyLR611