# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2 # RUN: llc -mtriple=aarch64 -run-pass=shrink-wrap -o - %s | FileCheck %s --- | define void @shrink_test1(i32 %a) { entry: %cmp5 = icmp sgt i32 %a, 0 br i1 %cmp5, label %BB0, label %exit BB0: ; preds = %entry %call = call i32 @fun() %c = icmp eq i32 %call, 0 br i1 %c, label %BB1, label %exit BB1: ; preds = %BB0 %call2 = call i32 @fun() br label %exit exit: ; preds = %BB1, %BB0, %entry ret void } define void @shrink_test2(i32 %a, ptr %P1, ptr %P2) { BB00: %cmp5 = icmp sgt i32 %a, 0 br i1 %cmp5, label %BB01, label %exit BB01: ; preds = %BB00 store i32 %a, ptr %P1, align 4 %c1 = icmp sgt i32 %a, 1 br i1 %c1, label %BB02, label %BB03 BB02: ; preds = %BB01 store i32 %a, ptr %P2, align 4 br label %BB03 BB03: ; preds = %BB02, %BB01 %call03 = call i32 @fun() %c03 = icmp eq i32 %call03, 0 br i1 %c03, label %BB04, label %BB05 BB04: ; preds = %BB03 %call04 = call i32 @fun() br label %BB05 BB05: ; preds = %BB04, %BB03 %call05 = call i32 @fun() %c05 = icmp eq i32 %call05, 0 br i1 %c05, label %BB06, label %BB07 BB06: ; preds = %BB05 %call06 = call i32 @fun() br label %exit BB07: ; preds = %BB05 %call07 = call i32 @fun2() br label %exit exit: ; preds = %BB07, %BB06, %BB00 ret void } define void @noshrink_test1(i32 %a, i32 %v, i32 %v2) { entry: %cmp5 = icmp sgt i32 %a, 0 br i1 %cmp5, label %BB0, label %exit BB0: ; preds = %entry %c = icmp eq i32 %a, 10 %c1 = icmp eq i32 %v, 10 %or.cond = select i1 %c, i1 %c1, i1 false br i1 %or.cond, label %BB3, label %BB2 BB2: ; preds = %BB0 %c2 = icmp eq i32 %v2, 10 br i1 %c2, label %BB4, label %exit BB3: ; preds = %BB0 %call3 = call i32 @fun() br label %exit BB4: ; preds = %BB2 %call4 = call i32 @fun2() br label %exit exit: ; preds = %BB4, %BB3, %BB2, %entry ret void } define void @noshrink_test2(i32 %a) { BB00: %cmp5 = icmp sgt i32 %a, 0 br i1 %cmp5, label %BB01, label %InfLoop.preheader InfLoop.preheader: ; preds = %BB00 br label %InfLoop BB01: ; preds = %BB00 %call = call i32 @fun() %c = icmp eq i32 %call, 0 br i1 %c, label %BB02, label %exit BB02: ; preds = %BB01 %call2 = call i32 @fun() br label %exit InfLoop: ; preds = %InfLoop.preheader, %InfLoop %call3 = call i32 @fun() br label %InfLoop exit: ; preds = %BB02, %BB01 ret void } define void @noshrink_test3(i32 %a) { BB00: %cmp5 = icmp sgt i32 %a, 0 %call02 = call i32 @fun() br i1 %cmp5, label %BB02, label %BB01 BB01: ; preds = %BB00 %0 = icmp eq i32 %call02, 0 br i1 %0, label %BB01.1, label %exit BB01.1: ; preds = %BB01 call void @abort() #0 unreachable BB02: ; preds = %BB00 %1 = icmp eq i32 %call02, 0 br i1 %1, label %BB03, label %BB04 BB03: ; preds = %BB02 %call03 = call i32 @fun() %c03 = icmp eq i32 %call03, 0 br i1 %c03, label %BB04, label %exit BB04: ; preds = %BB03, %BB02 %call04 = call i32 @fun() br label %exit exit: ; preds = %BB04, %BB03, %BB01 ret void } define void @noshrink_bb_as_inlineasmbr_target(i1 %cond) { entry: br i1 %cond, label %0, label %exit 0: ; preds = %entry callbr void asm sideeffect "", "!i,~{flags}"() to label %1 [label %exit] 1: ; preds = %0 call void @dosomething() br label %exit exit: ; preds = %1, %0, %entry ret void } declare i32 @fun() declare i32 @fun2() declare void @abort() declare void @dosomething() ... --- name: shrink_test1 alignment: 4 tracksRegLiveness: true tracksDebugUserValues: true liveins: - { reg: '$w0' } frameInfo: maxAlignment: 1 adjustsStack: true hasCalls: true maxCallFrameSize: 0 machineFunctionInfo: {} body: | ; CHECK-LABEL: name: shrink_test1 ; CHECK: bb.0.entry: ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.3(0x30000000) ; CHECK-NEXT: liveins: $w0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w0, 1, 0, implicit-def $nzcv ; CHECK-NEXT: Bcc 11, %bb.3, implicit killed $nzcv ; CHECK-NEXT: B %bb.1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1.BB0: ; CHECK-NEXT: successors: %bb.2(0x30000000), %bb.4(0x50000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.4 ; CHECK-NEXT: B %bb.2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.2.BB1: ; CHECK-NEXT: successors: %bb.4(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: B %bb.4 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.3.exit: ; CHECK-NEXT: RET_ReallyLR ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.4: ; CHECK-NEXT: successors: %bb.3(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: B %bb.3 bb.0.entry: successors: %bb.1(0x50000000), %bb.3(0x30000000) liveins: $w0 dead $wzr = SUBSWri killed renamable $w0, 1, 0, implicit-def $nzcv Bcc 11, %bb.3, implicit killed $nzcv B %bb.1 bb.1.BB0: successors: %bb.2(0x30000000), %bb.3(0x50000000) ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp CBNZW killed renamable $w0, %bb.3 B %bb.2 bb.2.BB1: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp bb.3.exit: RET_ReallyLR ... --- name: shrink_test2 alignment: 4 tracksRegLiveness: true tracksDebugUserValues: true liveins: - { reg: '$w0' } - { reg: '$x1' } - { reg: '$x2' } frameInfo: maxAlignment: 1 adjustsStack: true hasCalls: true maxCallFrameSize: 0 machineFunctionInfo: {} body: | ; CHECK-LABEL: name: shrink_test2 ; CHECK: bb.0.BB00: ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.8(0x30000000) ; CHECK-NEXT: liveins: $w0, $x1, $x2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv ; CHECK-NEXT: Bcc 11, %bb.8, implicit killed $nzcv ; CHECK-NEXT: B %bb.1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1.BB01: ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.3(0x40000000) ; CHECK-NEXT: liveins: $w0, $x1, $x2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv ; CHECK-NEXT: STRWui renamable $w0, killed renamable $x1, 0 :: (store (s32) into %ir.P1) ; CHECK-NEXT: Bcc 11, %bb.3, implicit killed $nzcv ; CHECK-NEXT: B %bb.2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.2.BB02: ; CHECK-NEXT: successors: %bb.3(0x80000000) ; CHECK-NEXT: liveins: $w0, $x2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: STRWui killed renamable $w0, killed renamable $x2, 0 :: (store (s32) into %ir.P2) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.3.BB03: ; CHECK-NEXT: successors: %bb.4(0x30000000), %bb.5(0x50000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.5 ; CHECK-NEXT: B %bb.4 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.4.BB04: ; CHECK-NEXT: successors: %bb.5(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.5.BB05: ; CHECK-NEXT: successors: %bb.6(0x30000000), %bb.7(0x50000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.7 ; CHECK-NEXT: B %bb.6 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.6.BB06: ; CHECK-NEXT: successors: %bb.9(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: B %bb.9 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.7.BB07: ; CHECK-NEXT: successors: %bb.9(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: B %bb.9 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.8.exit: ; CHECK-NEXT: RET_ReallyLR ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.9: ; CHECK-NEXT: successors: %bb.8(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: B %bb.8 bb.0.BB00: successors: %bb.1(0x50000000), %bb.8(0x30000000) liveins: $w0, $x1, $x2 dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv Bcc 11, %bb.8, implicit killed $nzcv B %bb.1 bb.1.BB01: successors: %bb.2, %bb.3 liveins: $w0, $x1, $x2 dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv STRWui renamable $w0, killed renamable $x1, 0 :: (store (s32) into %ir.P1) Bcc 11, %bb.3, implicit killed $nzcv B %bb.2 bb.2.BB02: liveins: $w0, $x2 STRWui killed renamable $w0, killed renamable $x2, 0 :: (store (s32) into %ir.P2) bb.3.BB03: successors: %bb.4(0x30000000), %bb.5(0x50000000) ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp CBNZW killed renamable $w0, %bb.5 B %bb.4 bb.4.BB04: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp bb.5.BB05: successors: %bb.6(0x30000000), %bb.7(0x50000000) ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp CBNZW killed renamable $w0, %bb.7 B %bb.6 bb.6.BB06: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp B %bb.8 bb.7.BB07: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp bb.8.exit: RET_ReallyLR ... --- name: noshrink_test1 alignment: 4 tracksRegLiveness: true tracksDebugUserValues: true liveins: - { reg: '$w0' } - { reg: '$w1' } - { reg: '$w2' } frameInfo: maxAlignment: 1 adjustsStack: true hasCalls: true maxCallFrameSize: 0 machineFunctionInfo: {} body: | ; CHECK-LABEL: name: noshrink_test1 ; CHECK: bb.0.entry: ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.6(0x30000000) ; CHECK-NEXT: liveins: $w0, $w1, $w2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv ; CHECK-NEXT: Bcc 11, %bb.6, implicit killed $nzcv ; CHECK-NEXT: B %bb.1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1.BB0: ; CHECK-NEXT: successors: %bb.2(0x60000000), %bb.3(0x20000000) ; CHECK-NEXT: liveins: $w0, $w1, $w2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w0, 10, 0, implicit-def $nzcv ; CHECK-NEXT: Bcc 1, %bb.3, implicit killed $nzcv ; CHECK-NEXT: B %bb.2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.2.BB0: ; CHECK-NEXT: successors: %bb.4(0x55555555), %bb.3(0x2aaaaaab) ; CHECK-NEXT: liveins: $w1, $w2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w1, 10, 0, implicit-def $nzcv ; CHECK-NEXT: Bcc 0, %bb.4, implicit killed $nzcv ; CHECK-NEXT: B %bb.3 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.3.BB2: ; CHECK-NEXT: successors: %bb.5(0x40000000), %bb.6(0x40000000) ; CHECK-NEXT: liveins: $w2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w2, 10, 0, implicit-def $nzcv ; CHECK-NEXT: Bcc 0, %bb.5, implicit killed $nzcv ; CHECK-NEXT: B %bb.6 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.4.BB3: ; CHECK-NEXT: successors: %bb.6(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: B %bb.6 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.5.BB4: ; CHECK-NEXT: successors: %bb.6(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.6.exit: ; CHECK-NEXT: RET_ReallyLR bb.0.entry: successors: %bb.1(0x50000000), %bb.6(0x30000000) liveins: $w0, $w1, $w2 dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv Bcc 11, %bb.6, implicit killed $nzcv B %bb.1 bb.1.BB0: successors: %bb.2(0x60000000), %bb.3(0x20000000) liveins: $w0, $w1, $w2 dead $wzr = SUBSWri killed renamable $w0, 10, 0, implicit-def $nzcv Bcc 1, %bb.3, implicit killed $nzcv B %bb.2 bb.2.BB0: successors: %bb.4(0x55555555), %bb.3(0x2aaaaaab) liveins: $w1, $w2 dead $wzr = SUBSWri killed renamable $w1, 10, 0, implicit-def $nzcv Bcc 0, %bb.4, implicit killed $nzcv B %bb.3 bb.3.BB2: liveins: $w2 dead $wzr = SUBSWri killed renamable $w2, 10, 0, implicit-def $nzcv Bcc 0, %bb.5, implicit killed $nzcv B %bb.6 bb.4.BB3: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp B %bb.6 bb.5.BB4: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp bb.6.exit: RET_ReallyLR ... --- name: noshrink_test2 alignment: 4 tracksRegLiveness: true tracksDebugUserValues: true liveins: - { reg: '$w0' } frameInfo: maxAlignment: 1 adjustsStack: true hasCalls: true maxCallFrameSize: 0 machineFunctionInfo: {} body: | ; CHECK-LABEL: name: noshrink_test2 ; CHECK: bb.0.BB00: ; CHECK-NEXT: successors: %bb.2(0x50000000), %bb.1(0x30000000) ; CHECK-NEXT: liveins: $w0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w0, 0, 0, implicit-def $nzcv ; CHECK-NEXT: Bcc 12, %bb.2, implicit killed $nzcv ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1: ; CHECK-NEXT: successors: %bb.4(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: B %bb.4 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.2.BB01: ; CHECK-NEXT: successors: %bb.3(0x30000000), %bb.5(0x50000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.5 ; CHECK-NEXT: B %bb.3 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.3.BB02: ; CHECK-NEXT: successors: %bb.5(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: B %bb.5 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.4.InfLoop: ; CHECK-NEXT: successors: %bb.4(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: B %bb.4 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.5.exit: ; CHECK-NEXT: RET_ReallyLR bb.0.BB00: successors: %bb.2(0x50000000), %bb.1(0x30000000) liveins: $w0 dead $wzr = SUBSWri killed renamable $w0, 0, 0, implicit-def $nzcv Bcc 12, %bb.2, implicit killed $nzcv bb.1: B %bb.4 bb.2.BB01: successors: %bb.3(0x30000000), %bb.5(0x50000000) ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp CBNZW killed renamable $w0, %bb.5 B %bb.3 bb.3.BB02: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp B %bb.5 bb.4.InfLoop: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp B %bb.4 bb.5.exit: RET_ReallyLR ... --- name: noshrink_test3 alignment: 4 tracksRegLiveness: true tracksDebugUserValues: true liveins: - { reg: '$w0' } frameInfo: maxAlignment: 1 adjustsStack: true hasCalls: true maxCallFrameSize: 0 machineFunctionInfo: {} body: | ; CHECK-LABEL: name: noshrink_test3 ; CHECK: bb.0.BB00: ; CHECK-NEXT: successors: %bb.3(0x50000000), %bb.1(0x30000000) ; CHECK-NEXT: liveins: $w0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: renamable $w19 = COPY $w0 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w19, 0, 0, implicit-def $nzcv ; CHECK-NEXT: Bcc 12, %bb.3, implicit killed $nzcv ; CHECK-NEXT: B %bb.1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1.BB01: ; CHECK-NEXT: successors: %bb.2(0x00000800), %bb.6(0x7ffff800) ; CHECK-NEXT: liveins: $w0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.6 ; CHECK-NEXT: B %bb.2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.2.BB01.1: ; CHECK-NEXT: successors: %bb.3(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @abort, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.3.BB02: ; CHECK-NEXT: successors: %bb.4(0x30000000), %bb.5(0x50000000) ; CHECK-NEXT: liveins: $w0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.5 ; CHECK-NEXT: B %bb.4 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.4.BB03: ; CHECK-NEXT: successors: %bb.5(0x30000000), %bb.6(0x50000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: CBNZW killed renamable $w0, %bb.6 ; CHECK-NEXT: B %bb.5 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.5.BB04: ; CHECK-NEXT: successors: %bb.6(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.6.exit: ; CHECK-NEXT: RET_ReallyLR bb.0.BB00: successors: %bb.3(0x50000000), %bb.1(0x30000000) liveins: $w0 renamable $w19 = COPY $w0 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp dead $wzr = SUBSWri killed renamable $w19, 0, 0, implicit-def $nzcv Bcc 12, %bb.3, implicit killed $nzcv B %bb.1 bb.1.BB01: successors: %bb.2(0x00000800), %bb.6(0x7ffff800) liveins: $w0 CBNZW killed renamable $w0, %bb.6 B %bb.2 bb.2.BB01.1: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @abort, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp bb.3.BB02: successors: %bb.4(0x30000000), %bb.5(0x50000000) liveins: $w0 CBNZW killed renamable $w0, %bb.5 B %bb.4 bb.4.BB03: successors: %bb.5(0x30000000), %bb.6(0x50000000) ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp CBNZW killed renamable $w0, %bb.6 B %bb.5 bb.5.BB04: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp bb.6.exit: RET_ReallyLR ... --- name: noshrink_bb_as_inlineasmbr_target registers: [] liveins: - { reg: '$w0', virtual-reg: '' } frameInfo: savePoint: '' restorePoint: '' body: | ; CHECK-LABEL: name: noshrink_bb_as_inlineasmbr_target ; CHECK: bb.0.entry: ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.3(0x40000000) ; CHECK-NEXT: liveins: $w0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: TBZW killed renamable $w0, 0, %bb.3 ; CHECK-NEXT: B %bb.1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1 (%ir-block.0): ; CHECK-NEXT: successors: %bb.2(0x80000000), %bb.3(0x00000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: INLINEASM_BR &"", 1 /* sideeffect attdialect */, 13 /* imm */, %bb.3 ; CHECK-NEXT: B %bb.2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.2 (%ir-block.1): ; CHECK-NEXT: successors: %bb.3(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: BL @dosomething, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.3.exit (machine-block-address-taken, inlineasm-br-indirect-target): ; CHECK-NEXT: RET_ReallyLR bb.0.entry: successors: %bb.1(0x40000000), %bb.3(0x40000000) liveins: $w0 TBZW killed renamable $w0, 0, %bb.3 B %bb.1 bb.1 (%ir-block.0): successors: %bb.2(0x80000000), %bb.3(0x00000000) INLINEASM_BR &"", 1 /* sideeffect attdialect */, 13 /* imm */, %bb.3 B %bb.2 bb.2 (%ir-block.1): successors: %bb.3(0x80000000) ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp BL @dosomething, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp bb.3.exit (machine-block-address-taken, inlineasm-br-indirect-target): RET_ReallyLR ...