1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2 2# RUN: llc -mtriple=aarch64 -run-pass=shrink-wrap -o - %s | FileCheck %s 3 4--- | 5 define void @shrink_test1(i32 %a) { 6 entry: 7 %cmp5 = icmp sgt i32 %a, 0 8 br i1 %cmp5, label %BB0, label %exit 9 10 BB0: ; preds = %entry 11 %call = call i32 @fun() 12 %c = icmp eq i32 %call, 0 13 br i1 %c, label %BB1, label %exit 14 15 BB1: ; preds = %BB0 16 %call2 = call i32 @fun() 17 br label %exit 18 19 exit: ; preds = %BB1, %BB0, %entry 20 ret void 21 } 22 23 define void @shrink_test2(i32 %a, ptr %P1, ptr %P2) { 24 BB00: 25 %cmp5 = icmp sgt i32 %a, 0 26 br i1 %cmp5, label %BB01, label %exit 27 28 BB01: ; preds = %BB00 29 store i32 %a, ptr %P1, align 4 30 %c1 = icmp sgt i32 %a, 1 31 br i1 %c1, label %BB02, label %BB03 32 33 BB02: ; preds = %BB01 34 store i32 %a, ptr %P2, align 4 35 br label %BB03 36 37 BB03: ; preds = %BB02, %BB01 38 %call03 = call i32 @fun() 39 %c03 = icmp eq i32 %call03, 0 40 br i1 %c03, label %BB04, label %BB05 41 42 BB04: ; preds = %BB03 43 %call04 = call i32 @fun() 44 br label %BB05 45 46 BB05: ; preds = %BB04, %BB03 47 %call05 = call i32 @fun() 48 %c05 = icmp eq i32 %call05, 0 49 br i1 %c05, label %BB06, label %BB07 50 51 BB06: ; preds = %BB05 52 %call06 = call i32 @fun() 53 br label %exit 54 55 BB07: ; preds = %BB05 56 %call07 = call i32 @fun2() 57 br label %exit 58 59 exit: ; preds = %BB07, %BB06, %BB00 60 ret void 61 } 62 63 define void @noshrink_test1(i32 %a, i32 %v, i32 %v2) { 64 entry: 65 %cmp5 = icmp sgt i32 %a, 0 66 br i1 %cmp5, label %BB0, label %exit 67 68 BB0: ; preds = %entry 69 %c = icmp eq i32 %a, 10 70 %c1 = icmp eq i32 %v, 10 71 %or.cond = select i1 %c, i1 %c1, i1 false 72 br i1 %or.cond, label %BB3, label %BB2 73 74 BB2: ; preds = %BB0 75 %c2 = icmp eq i32 %v2, 10 76 br i1 %c2, label %BB4, label %exit 77 78 BB3: ; preds = %BB0 79 %call3 = call i32 @fun() 80 br label %exit 81 82 BB4: ; preds = %BB2 83 %call4 = call i32 @fun2() 84 br label %exit 85 86 exit: ; preds = %BB4, %BB3, %BB2, %entry 87 ret void 88 } 89 90 define void @noshrink_test2(i32 %a) { 91 BB00: 92 %cmp5 = icmp sgt i32 %a, 0 93 br i1 %cmp5, label %BB01, label %InfLoop.preheader 94 95 InfLoop.preheader: ; preds = %BB00 96 br label %InfLoop 97 98 BB01: ; preds = %BB00 99 %call = call i32 @fun() 100 %c = icmp eq i32 %call, 0 101 br i1 %c, label %BB02, label %exit 102 103 BB02: ; preds = %BB01 104 %call2 = call i32 @fun() 105 br label %exit 106 107 InfLoop: ; preds = %InfLoop.preheader, %InfLoop 108 %call3 = call i32 @fun() 109 br label %InfLoop 110 111 exit: ; preds = %BB02, %BB01 112 ret void 113 } 114 115 define void @noshrink_test3(i32 %a) { 116 BB00: 117 %cmp5 = icmp sgt i32 %a, 0 118 %call02 = call i32 @fun() 119 br i1 %cmp5, label %BB02, label %BB01 120 121 BB01: ; preds = %BB00 122 %0 = icmp eq i32 %call02, 0 123 br i1 %0, label %BB01.1, label %exit 124 125 BB01.1: ; preds = %BB01 126 call void @abort() #0 127 unreachable 128 129 BB02: ; preds = %BB00 130 %1 = icmp eq i32 %call02, 0 131 br i1 %1, label %BB03, label %BB04 132 133 BB03: ; preds = %BB02 134 %call03 = call i32 @fun() 135 %c03 = icmp eq i32 %call03, 0 136 br i1 %c03, label %BB04, label %exit 137 138 BB04: ; preds = %BB03, %BB02 139 %call04 = call i32 @fun() 140 br label %exit 141 142 exit: ; preds = %BB04, %BB03, %BB01 143 ret void 144 } 145 146 define void @noshrink_bb_as_inlineasmbr_target(i1 %cond) { 147 entry: 148 br i1 %cond, label %0, label %exit 149 150 0: ; preds = %entry 151 callbr void asm sideeffect "", "!i,~{flags}"() 152 to label %1 [label %exit] 153 154 1: ; preds = %0 155 call void @dosomething() 156 br label %exit 157 158 exit: ; preds = %1, %0, %entry 159 ret void 160 } 161 162 declare i32 @fun() 163 declare i32 @fun2() 164 declare void @abort() 165 declare void @dosomething() 166... 167--- 168name: shrink_test1 169alignment: 4 170tracksRegLiveness: true 171tracksDebugUserValues: true 172liveins: 173 - { reg: '$w0' } 174frameInfo: 175 maxAlignment: 1 176 adjustsStack: true 177 hasCalls: true 178 maxCallFrameSize: 0 179machineFunctionInfo: {} 180body: | 181 ; CHECK-LABEL: name: shrink_test1 182 ; CHECK: bb.0.entry: 183 ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.3(0x30000000) 184 ; CHECK-NEXT: liveins: $w0 185 ; CHECK-NEXT: {{ $}} 186 ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w0, 1, 0, implicit-def $nzcv 187 ; CHECK-NEXT: Bcc 11, %bb.3, implicit killed $nzcv 188 ; CHECK-NEXT: B %bb.1 189 ; CHECK-NEXT: {{ $}} 190 ; CHECK-NEXT: bb.1.BB0: 191 ; CHECK-NEXT: successors: %bb.2(0x30000000), %bb.4(0x50000000) 192 ; CHECK-NEXT: {{ $}} 193 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 194 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 195 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 196 ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.4 197 ; CHECK-NEXT: B %bb.2 198 ; CHECK-NEXT: {{ $}} 199 ; CHECK-NEXT: bb.2.BB1: 200 ; CHECK-NEXT: successors: %bb.4(0x80000000) 201 ; CHECK-NEXT: {{ $}} 202 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 203 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 204 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 205 ; CHECK-NEXT: B %bb.4 206 ; CHECK-NEXT: {{ $}} 207 ; CHECK-NEXT: bb.3.exit: 208 ; CHECK-NEXT: RET_ReallyLR 209 ; CHECK-NEXT: {{ $}} 210 ; CHECK-NEXT: bb.4: 211 ; CHECK-NEXT: successors: %bb.3(0x80000000) 212 ; CHECK-NEXT: {{ $}} 213 ; CHECK-NEXT: B %bb.3 214 bb.0.entry: 215 successors: %bb.1(0x50000000), %bb.3(0x30000000) 216 liveins: $w0 217 218 dead $wzr = SUBSWri killed renamable $w0, 1, 0, implicit-def $nzcv 219 Bcc 11, %bb.3, implicit killed $nzcv 220 B %bb.1 221 222 bb.1.BB0: 223 successors: %bb.2(0x30000000), %bb.3(0x50000000) 224 225 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 226 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 227 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 228 CBNZW killed renamable $w0, %bb.3 229 B %bb.2 230 231 bb.2.BB1: 232 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 233 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 234 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 235 236 bb.3.exit: 237 RET_ReallyLR 238 239... 240--- 241name: shrink_test2 242alignment: 4 243tracksRegLiveness: true 244tracksDebugUserValues: true 245liveins: 246 - { reg: '$w0' } 247 - { reg: '$x1' } 248 - { reg: '$x2' } 249frameInfo: 250 maxAlignment: 1 251 adjustsStack: true 252 hasCalls: true 253 maxCallFrameSize: 0 254machineFunctionInfo: {} 255body: | 256 ; CHECK-LABEL: name: shrink_test2 257 ; CHECK: bb.0.BB00: 258 ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.8(0x30000000) 259 ; CHECK-NEXT: liveins: $w0, $x1, $x2 260 ; CHECK-NEXT: {{ $}} 261 ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv 262 ; CHECK-NEXT: Bcc 11, %bb.8, implicit killed $nzcv 263 ; CHECK-NEXT: B %bb.1 264 ; CHECK-NEXT: {{ $}} 265 ; CHECK-NEXT: bb.1.BB01: 266 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.3(0x40000000) 267 ; CHECK-NEXT: liveins: $w0, $x1, $x2 268 ; CHECK-NEXT: {{ $}} 269 ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv 270 ; CHECK-NEXT: STRWui renamable $w0, killed renamable $x1, 0 :: (store (s32) into %ir.P1) 271 ; CHECK-NEXT: Bcc 11, %bb.3, implicit killed $nzcv 272 ; CHECK-NEXT: B %bb.2 273 ; CHECK-NEXT: {{ $}} 274 ; CHECK-NEXT: bb.2.BB02: 275 ; CHECK-NEXT: successors: %bb.3(0x80000000) 276 ; CHECK-NEXT: liveins: $w0, $x2 277 ; CHECK-NEXT: {{ $}} 278 ; CHECK-NEXT: STRWui killed renamable $w0, killed renamable $x2, 0 :: (store (s32) into %ir.P2) 279 ; CHECK-NEXT: {{ $}} 280 ; CHECK-NEXT: bb.3.BB03: 281 ; CHECK-NEXT: successors: %bb.4(0x30000000), %bb.5(0x50000000) 282 ; CHECK-NEXT: {{ $}} 283 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 284 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 285 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 286 ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.5 287 ; CHECK-NEXT: B %bb.4 288 ; CHECK-NEXT: {{ $}} 289 ; CHECK-NEXT: bb.4.BB04: 290 ; CHECK-NEXT: successors: %bb.5(0x80000000) 291 ; CHECK-NEXT: {{ $}} 292 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 293 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 294 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 295 ; CHECK-NEXT: {{ $}} 296 ; CHECK-NEXT: bb.5.BB05: 297 ; CHECK-NEXT: successors: %bb.6(0x30000000), %bb.7(0x50000000) 298 ; CHECK-NEXT: {{ $}} 299 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 300 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 301 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 302 ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.7 303 ; CHECK-NEXT: B %bb.6 304 ; CHECK-NEXT: {{ $}} 305 ; CHECK-NEXT: bb.6.BB06: 306 ; CHECK-NEXT: successors: %bb.9(0x80000000) 307 ; CHECK-NEXT: {{ $}} 308 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 309 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 310 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 311 ; CHECK-NEXT: B %bb.9 312 ; CHECK-NEXT: {{ $}} 313 ; CHECK-NEXT: bb.7.BB07: 314 ; CHECK-NEXT: successors: %bb.9(0x80000000) 315 ; CHECK-NEXT: {{ $}} 316 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 317 ; CHECK-NEXT: BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 318 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 319 ; CHECK-NEXT: B %bb.9 320 ; CHECK-NEXT: {{ $}} 321 ; CHECK-NEXT: bb.8.exit: 322 ; CHECK-NEXT: RET_ReallyLR 323 ; CHECK-NEXT: {{ $}} 324 ; CHECK-NEXT: bb.9: 325 ; CHECK-NEXT: successors: %bb.8(0x80000000) 326 ; CHECK-NEXT: {{ $}} 327 ; CHECK-NEXT: B %bb.8 328 bb.0.BB00: 329 successors: %bb.1(0x50000000), %bb.8(0x30000000) 330 liveins: $w0, $x1, $x2 331 332 dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv 333 Bcc 11, %bb.8, implicit killed $nzcv 334 B %bb.1 335 336 bb.1.BB01: 337 successors: %bb.2, %bb.3 338 liveins: $w0, $x1, $x2 339 340 dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv 341 STRWui renamable $w0, killed renamable $x1, 0 :: (store (s32) into %ir.P1) 342 Bcc 11, %bb.3, implicit killed $nzcv 343 B %bb.2 344 345 bb.2.BB02: 346 liveins: $w0, $x2 347 348 STRWui killed renamable $w0, killed renamable $x2, 0 :: (store (s32) into %ir.P2) 349 350 bb.3.BB03: 351 successors: %bb.4(0x30000000), %bb.5(0x50000000) 352 353 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 354 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 355 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 356 CBNZW killed renamable $w0, %bb.5 357 B %bb.4 358 359 bb.4.BB04: 360 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 361 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 362 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 363 364 bb.5.BB05: 365 successors: %bb.6(0x30000000), %bb.7(0x50000000) 366 367 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 368 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 369 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 370 CBNZW killed renamable $w0, %bb.7 371 B %bb.6 372 373 bb.6.BB06: 374 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 375 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 376 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 377 B %bb.8 378 379 bb.7.BB07: 380 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 381 BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 382 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 383 384 bb.8.exit: 385 RET_ReallyLR 386 387... 388--- 389name: noshrink_test1 390alignment: 4 391tracksRegLiveness: true 392tracksDebugUserValues: true 393liveins: 394 - { reg: '$w0' } 395 - { reg: '$w1' } 396 - { reg: '$w2' } 397frameInfo: 398 maxAlignment: 1 399 adjustsStack: true 400 hasCalls: true 401 maxCallFrameSize: 0 402machineFunctionInfo: {} 403body: | 404 ; CHECK-LABEL: name: noshrink_test1 405 ; CHECK: bb.0.entry: 406 ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.6(0x30000000) 407 ; CHECK-NEXT: liveins: $w0, $w1, $w2 408 ; CHECK-NEXT: {{ $}} 409 ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv 410 ; CHECK-NEXT: Bcc 11, %bb.6, implicit killed $nzcv 411 ; CHECK-NEXT: B %bb.1 412 ; CHECK-NEXT: {{ $}} 413 ; CHECK-NEXT: bb.1.BB0: 414 ; CHECK-NEXT: successors: %bb.2(0x60000000), %bb.3(0x20000000) 415 ; CHECK-NEXT: liveins: $w0, $w1, $w2 416 ; CHECK-NEXT: {{ $}} 417 ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w0, 10, 0, implicit-def $nzcv 418 ; CHECK-NEXT: Bcc 1, %bb.3, implicit killed $nzcv 419 ; CHECK-NEXT: B %bb.2 420 ; CHECK-NEXT: {{ $}} 421 ; CHECK-NEXT: bb.2.BB0: 422 ; CHECK-NEXT: successors: %bb.4(0x55555555), %bb.3(0x2aaaaaab) 423 ; CHECK-NEXT: liveins: $w1, $w2 424 ; CHECK-NEXT: {{ $}} 425 ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w1, 10, 0, implicit-def $nzcv 426 ; CHECK-NEXT: Bcc 0, %bb.4, implicit killed $nzcv 427 ; CHECK-NEXT: B %bb.3 428 ; CHECK-NEXT: {{ $}} 429 ; CHECK-NEXT: bb.3.BB2: 430 ; CHECK-NEXT: successors: %bb.5(0x40000000), %bb.6(0x40000000) 431 ; CHECK-NEXT: liveins: $w2 432 ; CHECK-NEXT: {{ $}} 433 ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w2, 10, 0, implicit-def $nzcv 434 ; CHECK-NEXT: Bcc 0, %bb.5, implicit killed $nzcv 435 ; CHECK-NEXT: B %bb.6 436 ; CHECK-NEXT: {{ $}} 437 ; CHECK-NEXT: bb.4.BB3: 438 ; CHECK-NEXT: successors: %bb.6(0x80000000) 439 ; CHECK-NEXT: {{ $}} 440 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 441 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 442 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 443 ; CHECK-NEXT: B %bb.6 444 ; CHECK-NEXT: {{ $}} 445 ; CHECK-NEXT: bb.5.BB4: 446 ; CHECK-NEXT: successors: %bb.6(0x80000000) 447 ; CHECK-NEXT: {{ $}} 448 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 449 ; CHECK-NEXT: BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 450 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 451 ; CHECK-NEXT: {{ $}} 452 ; CHECK-NEXT: bb.6.exit: 453 ; CHECK-NEXT: RET_ReallyLR 454 bb.0.entry: 455 successors: %bb.1(0x50000000), %bb.6(0x30000000) 456 liveins: $w0, $w1, $w2 457 458 dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv 459 Bcc 11, %bb.6, implicit killed $nzcv 460 B %bb.1 461 462 bb.1.BB0: 463 successors: %bb.2(0x60000000), %bb.3(0x20000000) 464 liveins: $w0, $w1, $w2 465 466 dead $wzr = SUBSWri killed renamable $w0, 10, 0, implicit-def $nzcv 467 Bcc 1, %bb.3, implicit killed $nzcv 468 B %bb.2 469 470 bb.2.BB0: 471 successors: %bb.4(0x55555555), %bb.3(0x2aaaaaab) 472 liveins: $w1, $w2 473 474 dead $wzr = SUBSWri killed renamable $w1, 10, 0, implicit-def $nzcv 475 Bcc 0, %bb.4, implicit killed $nzcv 476 B %bb.3 477 478 bb.3.BB2: 479 liveins: $w2 480 481 dead $wzr = SUBSWri killed renamable $w2, 10, 0, implicit-def $nzcv 482 Bcc 0, %bb.5, implicit killed $nzcv 483 B %bb.6 484 485 bb.4.BB3: 486 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 487 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 488 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 489 B %bb.6 490 491 bb.5.BB4: 492 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 493 BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 494 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 495 496 bb.6.exit: 497 RET_ReallyLR 498 499... 500--- 501name: noshrink_test2 502alignment: 4 503tracksRegLiveness: true 504tracksDebugUserValues: true 505liveins: 506 - { reg: '$w0' } 507frameInfo: 508 maxAlignment: 1 509 adjustsStack: true 510 hasCalls: true 511 maxCallFrameSize: 0 512machineFunctionInfo: {} 513body: | 514 ; CHECK-LABEL: name: noshrink_test2 515 ; CHECK: bb.0.BB00: 516 ; CHECK-NEXT: successors: %bb.2(0x50000000), %bb.1(0x30000000) 517 ; CHECK-NEXT: liveins: $w0 518 ; CHECK-NEXT: {{ $}} 519 ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w0, 0, 0, implicit-def $nzcv 520 ; CHECK-NEXT: Bcc 12, %bb.2, implicit killed $nzcv 521 ; CHECK-NEXT: {{ $}} 522 ; CHECK-NEXT: bb.1: 523 ; CHECK-NEXT: successors: %bb.4(0x80000000) 524 ; CHECK-NEXT: {{ $}} 525 ; CHECK-NEXT: B %bb.4 526 ; CHECK-NEXT: {{ $}} 527 ; CHECK-NEXT: bb.2.BB01: 528 ; CHECK-NEXT: successors: %bb.3(0x30000000), %bb.5(0x50000000) 529 ; CHECK-NEXT: {{ $}} 530 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 531 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 532 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 533 ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.5 534 ; CHECK-NEXT: B %bb.3 535 ; CHECK-NEXT: {{ $}} 536 ; CHECK-NEXT: bb.3.BB02: 537 ; CHECK-NEXT: successors: %bb.5(0x80000000) 538 ; CHECK-NEXT: {{ $}} 539 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 540 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 541 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 542 ; CHECK-NEXT: B %bb.5 543 ; CHECK-NEXT: {{ $}} 544 ; CHECK-NEXT: bb.4.InfLoop: 545 ; CHECK-NEXT: successors: %bb.4(0x80000000) 546 ; CHECK-NEXT: {{ $}} 547 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 548 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 549 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 550 ; CHECK-NEXT: B %bb.4 551 ; CHECK-NEXT: {{ $}} 552 ; CHECK-NEXT: bb.5.exit: 553 ; CHECK-NEXT: RET_ReallyLR 554 bb.0.BB00: 555 successors: %bb.2(0x50000000), %bb.1(0x30000000) 556 liveins: $w0 557 558 dead $wzr = SUBSWri killed renamable $w0, 0, 0, implicit-def $nzcv 559 Bcc 12, %bb.2, implicit killed $nzcv 560 561 bb.1: 562 B %bb.4 563 564 bb.2.BB01: 565 successors: %bb.3(0x30000000), %bb.5(0x50000000) 566 567 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 568 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 569 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 570 CBNZW killed renamable $w0, %bb.5 571 B %bb.3 572 573 bb.3.BB02: 574 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 575 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 576 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 577 B %bb.5 578 579 bb.4.InfLoop: 580 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 581 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 582 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 583 B %bb.4 584 585 bb.5.exit: 586 RET_ReallyLR 587 588... 589--- 590name: noshrink_test3 591alignment: 4 592tracksRegLiveness: true 593tracksDebugUserValues: true 594liveins: 595 - { reg: '$w0' } 596frameInfo: 597 maxAlignment: 1 598 adjustsStack: true 599 hasCalls: true 600 maxCallFrameSize: 0 601machineFunctionInfo: {} 602body: | 603 ; CHECK-LABEL: name: noshrink_test3 604 ; CHECK: bb.0.BB00: 605 ; CHECK-NEXT: successors: %bb.3(0x50000000), %bb.1(0x30000000) 606 ; CHECK-NEXT: liveins: $w0 607 ; CHECK-NEXT: {{ $}} 608 ; CHECK-NEXT: renamable $w19 = COPY $w0 609 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 610 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 611 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 612 ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w19, 0, 0, implicit-def $nzcv 613 ; CHECK-NEXT: Bcc 12, %bb.3, implicit killed $nzcv 614 ; CHECK-NEXT: B %bb.1 615 ; CHECK-NEXT: {{ $}} 616 ; CHECK-NEXT: bb.1.BB01: 617 ; CHECK-NEXT: successors: %bb.2(0x00000800), %bb.6(0x7ffff800) 618 ; CHECK-NEXT: liveins: $w0 619 ; CHECK-NEXT: {{ $}} 620 ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.6 621 ; CHECK-NEXT: B %bb.2 622 ; CHECK-NEXT: {{ $}} 623 ; CHECK-NEXT: bb.2.BB01.1: 624 ; CHECK-NEXT: successors: %bb.3(0x80000000) 625 ; CHECK-NEXT: {{ $}} 626 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 627 ; CHECK-NEXT: BL @abort, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp 628 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 629 ; CHECK-NEXT: {{ $}} 630 ; CHECK-NEXT: bb.3.BB02: 631 ; CHECK-NEXT: successors: %bb.4(0x30000000), %bb.5(0x50000000) 632 ; CHECK-NEXT: liveins: $w0 633 ; CHECK-NEXT: {{ $}} 634 ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.5 635 ; CHECK-NEXT: B %bb.4 636 ; CHECK-NEXT: {{ $}} 637 ; CHECK-NEXT: bb.4.BB03: 638 ; CHECK-NEXT: successors: %bb.5(0x30000000), %bb.6(0x50000000) 639 ; CHECK-NEXT: {{ $}} 640 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 641 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 642 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 643 ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.6 644 ; CHECK-NEXT: B %bb.5 645 ; CHECK-NEXT: {{ $}} 646 ; CHECK-NEXT: bb.5.BB04: 647 ; CHECK-NEXT: successors: %bb.6(0x80000000) 648 ; CHECK-NEXT: {{ $}} 649 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 650 ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 651 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 652 ; CHECK-NEXT: {{ $}} 653 ; CHECK-NEXT: bb.6.exit: 654 ; CHECK-NEXT: RET_ReallyLR 655 bb.0.BB00: 656 successors: %bb.3(0x50000000), %bb.1(0x30000000) 657 liveins: $w0 658 659 renamable $w19 = COPY $w0 660 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 661 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 662 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 663 dead $wzr = SUBSWri killed renamable $w19, 0, 0, implicit-def $nzcv 664 Bcc 12, %bb.3, implicit killed $nzcv 665 B %bb.1 666 667 bb.1.BB01: 668 successors: %bb.2(0x00000800), %bb.6(0x7ffff800) 669 liveins: $w0 670 671 CBNZW killed renamable $w0, %bb.6 672 B %bb.2 673 674 bb.2.BB01.1: 675 676 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 677 BL @abort, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp 678 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 679 680 bb.3.BB02: 681 successors: %bb.4(0x30000000), %bb.5(0x50000000) 682 liveins: $w0 683 684 CBNZW killed renamable $w0, %bb.5 685 B %bb.4 686 687 bb.4.BB03: 688 successors: %bb.5(0x30000000), %bb.6(0x50000000) 689 690 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 691 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 692 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 693 CBNZW killed renamable $w0, %bb.6 694 B %bb.5 695 696 bb.5.BB04: 697 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 698 BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 699 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 700 701 bb.6.exit: 702 RET_ReallyLR 703 704... 705--- 706name: noshrink_bb_as_inlineasmbr_target 707registers: [] 708liveins: 709 - { reg: '$w0', virtual-reg: '' } 710frameInfo: 711 savePoint: '' 712 restorePoint: '' 713body: | 714 ; CHECK-LABEL: name: noshrink_bb_as_inlineasmbr_target 715 ; CHECK: bb.0.entry: 716 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.3(0x40000000) 717 ; CHECK-NEXT: liveins: $w0 718 ; CHECK-NEXT: {{ $}} 719 ; CHECK-NEXT: TBZW killed renamable $w0, 0, %bb.3 720 ; CHECK-NEXT: B %bb.1 721 ; CHECK-NEXT: {{ $}} 722 ; CHECK-NEXT: bb.1 (%ir-block.0): 723 ; CHECK-NEXT: successors: %bb.2(0x80000000), %bb.3(0x00000000) 724 ; CHECK-NEXT: {{ $}} 725 ; CHECK-NEXT: INLINEASM_BR &"", 1 /* sideeffect attdialect */, 13 /* imm */, %bb.3 726 ; CHECK-NEXT: B %bb.2 727 ; CHECK-NEXT: {{ $}} 728 ; CHECK-NEXT: bb.2 (%ir-block.1): 729 ; CHECK-NEXT: successors: %bb.3(0x80000000) 730 ; CHECK-NEXT: {{ $}} 731 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 732 ; CHECK-NEXT: BL @dosomething, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp 733 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 734 ; CHECK-NEXT: {{ $}} 735 ; CHECK-NEXT: bb.3.exit (machine-block-address-taken, inlineasm-br-indirect-target): 736 ; CHECK-NEXT: RET_ReallyLR 737 bb.0.entry: 738 successors: %bb.1(0x40000000), %bb.3(0x40000000) 739 liveins: $w0 740 741 TBZW killed renamable $w0, 0, %bb.3 742 B %bb.1 743 744 bb.1 (%ir-block.0): 745 successors: %bb.2(0x80000000), %bb.3(0x00000000) 746 747 INLINEASM_BR &"", 1 /* sideeffect attdialect */, 13 /* imm */, %bb.3 748 B %bb.2 749 750 bb.2 (%ir-block.1): 751 successors: %bb.3(0x80000000) 752 753 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 754 BL @dosomething, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp 755 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 756 757 bb.3.exit (machine-block-address-taken, inlineasm-br-indirect-target): 758 RET_ReallyLR 759 760... 761