761 lines
26 KiB
Text
761 lines
26 KiB
Text
|
# 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
|
||
|
|
||
|
...
|