Skip to content

Commit 991123f

Browse files
committed
[X86] Add test where storing return addr clobbers argument stack slot.
Currently for the test the return address is written to the stack before loading the argument from an aliasing stack slot.
1 parent 3fdb348 commit 991123f

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
; RUN: llc %s -o - | FileCheck %s
2+
3+
target triple = "x86_64-apple-macosx"
4+
5+
declare swifttailcc void @tc_fn(ptr swiftasync, i64, ptr, i8, ptr swiftself)
6+
7+
declare void @foo()
8+
9+
; FIXME: Currently the return address is written to the stack before loading the
10+
; argument from an aliasing stack slot.
11+
define swifttailcc void @test(ptr %0, ptr swiftasync %1, i64 %2, i64 %3, ptr %4, ptr %5, i64 %6, ptr %7, i8 %8) {
12+
; CHECK-LABEL: test:
13+
; CHECK: ## %bb.0: ## %entry
14+
; CHECK-NEXT: pushq %r15
15+
; CHECK-NEXT: .cfi_def_cfa_offset 16
16+
; CHECK-NEXT: pushq %rbx
17+
; CHECK-NEXT: .cfi_def_cfa_offset 24
18+
; CHECK-NEXT: pushq %rax
19+
; CHECK-NEXT: .cfi_def_cfa_offset 32
20+
; CHECK-NEXT: .cfi_offset %rbx, -24
21+
; CHECK-NEXT: .cfi_offset %r15, -16
22+
; CHECK-NEXT: movq %r9, %r13
23+
; CHECK-NEXT: movq %r8, %rbx
24+
; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %r15
25+
; CHECK-NEXT: callq _foo
26+
; CHECK-NEXT: movq %r14, (%rax)
27+
; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rcx
28+
; CHECK-NEXT: movq %rcx, [[OFF:[0-9]+]](%rsp)
29+
; CHECK-NEXT: movl [[OFF]](%rsp), %edx
30+
; CHECK-NEXT: movq %rax, %r14
31+
; CHECK-NEXT: movq %r13, %rdi
32+
; CHECK-NEXT: movq %r15, %rsi
33+
; CHECK-NEXT: movq %rbx, %r13
34+
; CHECK-NEXT: addq $8, %rsp
35+
; CHECK-NEXT: popq %rbx
36+
; CHECK-NEXT: popq %r15
37+
; CHECK-NEXT: addq $16, %rsp
38+
; CHECK-NEXT: jmp _tc_fn ## TAILCALL
39+
entry:
40+
%res = tail call ptr @foo()
41+
store ptr %1, ptr %res, align 8
42+
musttail call swifttailcc void @tc_fn(ptr swiftasync %res, i64 %6, ptr %7, i8 %8, ptr swiftself %5)
43+
ret void
44+
}

0 commit comments

Comments
 (0)