402 lines · plain
1# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=postra-machine-sink -verify-machineinstrs -o - %s | FileCheck %s2# RUN: llc -mtriple=aarch64-none-linux-gnu -passes='postra-machine-sink' -o - %s | FileCheck %s3 4---5# Sink w19 to %bb.1.6# CHECK-LABEL: name: sinkcopy17# CHECK-LABEL: bb.0:8# CHECK-NOT: $w19 = COPY killed $w09# CHECK-LABEL: bb.1:10# CHECK: liveins: $w0, $w111# CHECK: renamable $w19 = COPY killed $w012 13name: sinkcopy114tracksRegLiveness: true15body: |16 bb.0:17 liveins: $w0, $w118 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv19 renamable $w19 = COPY killed $w020 Bcc 11, %bb.1, implicit $nzcv21 B %bb.222 23 bb.1:24 liveins: $w1, $w1925 $w0 = ADDWrr $w1, $w1926 RET $x027 28 bb.2:29 $w0 = COPY $wzr30 RET $x031...32 33---34# Sink w19 to %bb.2.35# CHECK-LABEL: name: sinkcopy236# CHECK-LABEL: bb.0:37# CHECK-NOT: renamable $w19 = COPY killed $w038# CHECK-LABEL: bb.2:39# CHECK: liveins: $w0, $w140# CHECK: renamable $w19 = COPY killed $w041name: sinkcopy242tracksRegLiveness: true43body: |44 bb.0:45 liveins: $w0, $w146 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv47 renamable $w19 = COPY killed $w048 Bcc 11, %bb.2, implicit $nzcv49 B %bb.150 51 bb.1:52 $w0 = COPY $wzr53 RET $x054 55 bb.2:56 liveins: $w1, $w1957 $w0 = ADDWrr $w1, $w1958 RET $x059...60 61---62# Sink w19 and w20 to %bb.1.63# CHECK-LABEL: name: sinkcopy364# CHECK-LABEL: bb.0:65# CHECK-NOT: renamable $w19 = COPY killed $w066# CHECK-LABEL: bb.1:67# CHECK: liveins: $w0, $w168# CHECK: renamable $w19 = COPY killed $w069# CHECK: renamable $w20 = COPY killed $w170name: sinkcopy371tracksRegLiveness: true72body: |73 bb.0:74 liveins: $w0, $w175 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv76 renamable $w19 = COPY killed $w077 renamable $w20 = COPY killed $w178 79 bb.1:80 liveins: $w19, $w2081 $w0 = COPY $w1982 $w1 = COPY $w2083 RET $x084...85 86 87# Sink w19 to %bb.1 and w20 to %bb.2.88# CHECK-LABEL: name: sinkcopy489# CHECK-LABEL: bb.0:90# CHECK-NOT: renamable $w19 = COPY $w091# CHECK-NOT: renamable $w20 = COPY $w192# CHECK-LABEL: bb.1:93# CHECK: liveins: $w0, $w194# CHECK: renamable $w19 = COPY $w095# CHECK-LABEL: bb.2:96# CHECK: liveins: $w0, $w197# CHECK: renamable $w20 = COPY $w198name: sinkcopy499tracksRegLiveness: true100body: |101 bb.0:102 liveins: $w0, $w1103 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv104 renamable $w19 = COPY $w0105 renamable $w20 = COPY $w1106 Bcc 11, %bb.2, implicit $nzcv107 B %bb.1108 109 bb.1:110 liveins: $w1, $w19111 $w0 = ADDWrr $w1, $w19112 RET $x0113 114 bb.2:115 liveins: $w0, $w20116 $w0 = ADDWrr $w0, $w20117 RET $x0118...119 120# Sink w19 to %bb.3 through %bb.2.121# CHECK-LABEL: name: sinkcopy5122# CHECK-LABEL: bb.0:123# CHECK-NOT: renamable $w19 = COPY $w0124# CHECK-LABEL: bb.2:125# CHECK: $w1 = ADDWrr $w1, $w0126# CHECK-LABEL: bb.3:127# CHECK: liveins: $w0, $w1128# CHECK: renamable $w19 = COPY killed $w0129name: sinkcopy5130tracksRegLiveness: true131body: |132 bb.0:133 liveins: $w0, $w1134 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv135 renamable $w19 = COPY $w0136 Bcc 11, %bb.2, implicit $nzcv137 138 bb.1:139 liveins: $x0140 $w19 = COPY $wzr141 RET $x0142 143 bb.2:144 liveins: $w0, $w1, $w19145 $w1 = ADDWrr $w1, killed $w0146 147 bb.3:148 liveins: $w1, $w19149 $w0 = ADDWrr $w1, $w19150 RET $x0151...152 153# Sink w19 to %bb.3, but through %bb.2.154# CHECK-LABEL: name: sinkcopy6155# CHECK-LABEL: bb.0:156# CHECK-NOT: renamable $w19 = COPY $w0157# CHECK-NOT: renamable $w20 = COPY $w0158# CHECK-LABEL: bb.2:159# CHECK: liveins: $w0, $w1160# CHECK: renamable $w19 = COPY $w0161# CHECK: renamable $w20 = COPY $w19162name: sinkcopy6163tracksRegLiveness: true164body: |165 bb.0:166 liveins: $w0, $w1167 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv168 renamable $w19 = COPY $w0169 renamable $w20 = COPY $w19170 Bcc 11, %bb.2, implicit $nzcv171 172 bb.1:173 $w0 = COPY $wzr174 RET $x0175 176 bb.2:177 liveins: $w1, $w20178 $w0 = ADDWrr killed $w1, $w20179 RET $x0180...181 182---183# Sink w19 regardless of the def of wzr in bb.0.184# CHECK-LABEL: name: sinkcopy7185# CHECK-LABEL: bb.0:186# CHECK-NOT: renamable $w19 = COPY $w0187# CHECK-LABEL: bb.2:188# CHECK: renamable $w19 = COPY $wzr189name: sinkcopy7190tracksRegLiveness: true191body: |192 bb.0:193 liveins: $w0, $w1194 renamable $w19 = COPY $wzr195 $wzr = SUBSWri $w1, 1, 0, implicit-def $nzcv196 Bcc 11, %bb.2, implicit $nzcv197 B %bb.1198 199 bb.1:200 $x0 = COPY $xzr201 RET $x0202 203 bb.2:204 liveins: $w0, $w19205 $w0 = ADDWrr $w0, $w19206 RET $x0207...208 209---210# Sink w19 to %bb.3 through %bb.2.211# CHECK-LABEL: name: sinkcopy8212# CHECK-LABEL: bb.0:213# CHECK-NOT: renamable $w19 = COPY $w0, implicit-def $x19214# CHECK-LABEL: bb.2:215# CHECK: $w1 = ADDWrr $w1, $w0, implicit $x0216# CHECK-LABEL: bb.3:217# CHECK: liveins: $w0, $x1218# CHECK: renamable $w19 = COPY killed $w0, implicit-def $x19219name: sinkcopy8220tracksRegLiveness: true221body: |222 bb.0:223 liveins: $w0, $x1224 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv225 renamable $w19 = COPY $w0, implicit-def $x19226 Bcc 11, %bb.2, implicit $nzcv227 228 bb.1:229 liveins: $x0230 $w19 = COPY $wzr231 RET $x0232 233 bb.2:234 liveins: $w0, $x1, $x19235 $w1 = ADDWrr $w1, $w0, implicit killed $x0236 237 bb.3:238 liveins: $x1, $x19239 $x0 = ADDXrr $x1, $x19240 RET $x0241...242 243---244# Don't sink w19 as w0 is defined in bb.0.245# CHECK-LABEL: name: donotsinkcopy1246# CHECK-LABEL: bb.0:247# CHECK: renamable $w19 = COPY $w0248# CHECK: $w0 = LDRWui $sp, 0249name: donotsinkcopy1250tracksRegLiveness: true251body: |252 bb.0:253 liveins: $w0, $w1254 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv255 renamable $w19 = COPY $w0256 $w0 = LDRWui $sp, 0 :: (load (s32))257 Bcc 11, %bb.2, implicit $nzcv258 B %bb.1259 260 bb.1:261 $x0 = COPY $xzr262 RET $x0263 264 bb.2:265 liveins: $w0, $w19266 $w0 = ADDWrr $w0, $w19267 RET $x0268...269 270---271# Don't sink w19 as w19 is used in bb.0.272# CHECK-LABEL: name: donotsinkcopy2273# CHECK-LABEL: bb.0:274# CHECK: renamable $w19 = COPY $w0275# CHECK: STRWui $w1, $x19, 0276name: donotsinkcopy2277tracksRegLiveness: true278body: |279 bb.0:280 liveins: $w0, $w1281 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv282 renamable $w19 = COPY $w0283 STRWui $w1, $x19, 0 :: (store (s32))284 Bcc 11, %bb.2, implicit $nzcv285 B %bb.1286 287 bb.1:288 $x0 = COPY $xzr289 RET $x0290 291 bb.2:292 liveins: $w0, $w19293 $w0 = ADDWrr $w0, $w19294 RET $x0295...296 297---298# Don't sink w19 as w19 is used in both %bb.1 and %bb.2.299# CHECK-LABEL: name: donotsinkcopy3300# CHECK-LABEL: bb.0:301# CHECK: renamable $w19 = COPY $w0302name: donotsinkcopy3303tracksRegLiveness: true304body: |305 bb.0:306 liveins: $w0, $w1307 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv308 renamable $w19 = COPY $w0309 Bcc 11, %bb.2, implicit $nzcv310 B %bb.1311 312 bb.1:313 liveins: $w19314 $w0 = COPY $w19315 RET $x0316 317 bb.2:318 liveins: $w0, $w19319 $w0 = ADDWrr $w0, $w19320 RET $x0321...322 323---324# Don't sink w19 as %bb.2 has multiple predecessors.325# CHECK-LABEL: name: donotsinkcopy4326# CHECK-LABEL: bb.0:327# CHECK: renamable $w19 = COPY $w0328name: donotsinkcopy4329tracksRegLiveness: true330body: |331 bb.0:332 liveins: $w0, $w1333 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv334 renamable $w19 = COPY $w0335 Bcc 11, %bb.2, implicit $nzcv336 B %bb.1337 338 bb.1:339 liveins: $w0340 $w19 = COPY $w0341 B %bb.2342 343 bb.2:344 liveins: $w0, $w19345 $w0 = ADDWrr $w0, $w19346 RET $x0347...348 349 350# Don't sink w19 after sinking w20.351# CHECK-LABEL: name: donotsinkcopy5352# CHECK-LABEL: bb.0:353# CHECK: renamable $w19 = COPY $w0354# CHECK-LABEL: bb.2:355# CHECK: liveins: $w0, $w19356# CHECK: renamable $w20 = COPY $w19357name: donotsinkcopy5358tracksRegLiveness: true359body: |360 bb.0:361 liveins: $w0, $w1362 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv363 renamable $w19 = COPY $w0364 renamable $w20 = COPY $w19365 Bcc 11, %bb.2, implicit $nzcv366 367 bb.1:368 liveins: $w19369 $w0 = COPY $w19370 RET $x0371 372 bb.2:373 liveins: $w0, $w20374 $w0 = ADDWrr killed $w0, $w20375 RET $x0376...377 378---379# Don't sink w19 as x19 is live-in in %bb.2.380# CHECK-LABEL: name: donotsinkcopy6381# CHECK-LABEL: bb.0:382name: donotsinkcopy6383tracksRegLiveness: true384body: |385 bb.0:386 liveins: $x0, $w1387 $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv388 renamable $x19 = COPY $x0389 Bcc 11, %bb.2, implicit $nzcv390 B %bb.1391 392 bb.1:393 liveins: $w19394 $w0 = COPY $w19395 RET $x0396 397 bb.2:398 liveins: $x0, $x19399 $x0 = ADDXrr $x0, $x19400 RET $x0401...402