@@ -8,10 +8,11 @@ declare void @test_explicit_sret(ptr sret(i64))
8
8
define void @can_tail_call_forwarded_explicit_sret_ptr (ptr sret (i64 ) %arg ) {
9
9
; CHECK-LABEL: name: can_tail_call_forwarded_explicit_sret_ptr
10
10
; CHECK: bb.1 (%ir-block.0):
11
- ; CHECK: liveins: $x8
12
- ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x8
13
- ; CHECK: $x8 = COPY [[COPY]](p0)
14
- ; CHECK: TCRETURNdi @test_explicit_sret, 0, csr_darwin_aarch64_aapcs, implicit $sp, implicit $x8
11
+ ; CHECK-NEXT: liveins: $x8
12
+ ; CHECK-NEXT: {{ $}}
13
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x8
14
+ ; CHECK-NEXT: $x8 = COPY [[COPY]](p0)
15
+ ; CHECK-NEXT: TCRETURNdi @test_explicit_sret, 0, csr_darwin_aarch64_aapcs, implicit $sp, implicit $x8
15
16
tail call void @test_explicit_sret (ptr %arg )
16
17
ret void
17
18
}
@@ -20,26 +21,27 @@ define void @can_tail_call_forwarded_explicit_sret_ptr(ptr sret(i64) %arg) {
20
21
define void @test_call_explicit_sret (ptr sret (i64 ) %arg ) {
21
22
; CHECK-LABEL: name: test_call_explicit_sret
22
23
; CHECK: bb.1 (%ir-block.0):
23
- ; CHECK: liveins: $x8
24
- ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x8
25
- ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
26
- ; CHECK: $x8 = COPY [[COPY]](p0)
27
- ; CHECK: BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
28
- ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
29
- ; CHECK: RET_ReallyLR
24
+ ; CHECK-NEXT: liveins: $x8
25
+ ; CHECK-NEXT: {{ $}}
26
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x8
27
+ ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
28
+ ; CHECK-NEXT: $x8 = COPY [[COPY]](p0)
29
+ ; CHECK-NEXT: BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
30
+ ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
31
+ ; CHECK-NEXT: RET_ReallyLR
30
32
call void @test_explicit_sret (ptr %arg )
31
33
ret void
32
34
}
33
35
34
36
define void @dont_tail_call_explicit_sret_alloca_unused () {
35
37
; CHECK-LABEL: name: dont_tail_call_explicit_sret_alloca_unused
36
38
; CHECK: bb.1 (%ir-block.0):
37
- ; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.l
38
- ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
39
- ; CHECK: $x8 = COPY [[FRAME_INDEX]](p0)
40
- ; CHECK: BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
41
- ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
42
- ; CHECK: RET_ReallyLR
39
+ ; CHECK-NEXT : [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.l
40
+ ; CHECK-NEXT : ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
41
+ ; CHECK-NEXT : $x8 = COPY [[FRAME_INDEX]](p0)
42
+ ; CHECK-NEXT : BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
43
+ ; CHECK-NEXT : ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
44
+ ; CHECK-NEXT : RET_ReallyLR
43
45
%l = alloca i64 , align 8
44
46
tail call void @test_explicit_sret (ptr %l )
45
47
ret void
@@ -48,16 +50,17 @@ define void @dont_tail_call_explicit_sret_alloca_unused() {
48
50
define void @dont_tail_call_explicit_sret_alloca_dummyusers (ptr %ptr ) {
49
51
; CHECK-LABEL: name: dont_tail_call_explicit_sret_alloca_dummyusers
50
52
; CHECK: bb.1 (%ir-block.0):
51
- ; CHECK: liveins: $x0
52
- ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
53
- ; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.l
54
- ; CHECK: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64) from %ir.ptr)
55
- ; CHECK: G_STORE [[LOAD]](s64), [[FRAME_INDEX]](p0) :: (store (s64) into %ir.l)
56
- ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
57
- ; CHECK: $x8 = COPY [[FRAME_INDEX]](p0)
58
- ; CHECK: BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
59
- ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
60
- ; CHECK: RET_ReallyLR
53
+ ; CHECK-NEXT: liveins: $x0
54
+ ; CHECK-NEXT: {{ $}}
55
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
56
+ ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.l
57
+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load (s64) from %ir.ptr)
58
+ ; CHECK-NEXT: G_STORE [[LOAD]](s64), [[FRAME_INDEX]](p0) :: (store (s64) into %ir.l)
59
+ ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
60
+ ; CHECK-NEXT: $x8 = COPY [[FRAME_INDEX]](p0)
61
+ ; CHECK-NEXT: BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
62
+ ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
63
+ ; CHECK-NEXT: RET_ReallyLR
61
64
%l = alloca i64 , align 8
62
65
%r = load i64 , ptr %ptr , align 8
63
66
store i64 %r , ptr %l , align 8
@@ -68,15 +71,16 @@ define void @dont_tail_call_explicit_sret_alloca_dummyusers(ptr %ptr) {
68
71
define void @dont_tail_call_tailcall_explicit_sret_gep (ptr %ptr ) {
69
72
; CHECK-LABEL: name: dont_tail_call_tailcall_explicit_sret_gep
70
73
; CHECK: bb.1 (%ir-block.0):
71
- ; CHECK: liveins: $x0
72
- ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
73
- ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
74
- ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
75
- ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
76
- ; CHECK: $x8 = COPY [[PTR_ADD]](p0)
77
- ; CHECK: BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
78
- ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
79
- ; CHECK: RET_ReallyLR
74
+ ; CHECK-NEXT: liveins: $x0
75
+ ; CHECK-NEXT: {{ $}}
76
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
77
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
78
+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
79
+ ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
80
+ ; CHECK-NEXT: $x8 = COPY [[PTR_ADD]](p0)
81
+ ; CHECK-NEXT: BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
82
+ ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
83
+ ; CHECK-NEXT: RET_ReallyLR
80
84
%ptr2 = getelementptr i64 , ptr %ptr , i32 1
81
85
tail call void @test_explicit_sret (ptr %ptr2 )
82
86
ret void
@@ -85,14 +89,14 @@ define void @dont_tail_call_tailcall_explicit_sret_gep(ptr %ptr) {
85
89
define i64 @dont_tail_call_sret_alloca_returned () {
86
90
; CHECK-LABEL: name: dont_tail_call_sret_alloca_returned
87
91
; CHECK: bb.1 (%ir-block.0):
88
- ; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.l
89
- ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
90
- ; CHECK: $x8 = COPY [[FRAME_INDEX]](p0)
91
- ; CHECK: BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
92
- ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
93
- ; CHECK: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (dereferenceable load (s64) from %ir.l)
94
- ; CHECK: $x0 = COPY [[LOAD]](s64)
95
- ; CHECK: RET_ReallyLR implicit $x0
92
+ ; CHECK-NEXT : [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.l
93
+ ; CHECK-NEXT : ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
94
+ ; CHECK-NEXT : $x8 = COPY [[FRAME_INDEX]](p0)
95
+ ; CHECK-NEXT : BL @test_explicit_sret, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x8
96
+ ; CHECK-NEXT : ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
97
+ ; CHECK-NEXT : [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (dereferenceable load (s64) from %ir.l)
98
+ ; CHECK-NEXT : $x0 = COPY [[LOAD]](s64)
99
+ ; CHECK-NEXT : RET_ReallyLR implicit $x0
96
100
%l = alloca i64 , align 8
97
101
tail call void @test_explicit_sret (ptr %l )
98
102
%r = load i64 , ptr %l , align 8
0 commit comments