# 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
...