Skip to content

Commit f6bdbde

Browse files
committed
X86: swifttailcc pass swiftself in ECX
rdar://76230881
1 parent f17a99f commit f6bdbde

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

llvm/lib/Target/X86/X86CallingConv.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,10 @@ def CC_X86_32_C : CallingConv<[
862862
// The 'nest' parameter, if any, is passed in ECX.
863863
CCIfNest<CCAssignToReg<[ECX]>>,
864864

865+
// On swifttailcc pass swiftself in ECX.
866+
CCIfCC<"CallingConv::SwiftTail",
867+
CCIfSwiftSelf<CCIfType<[i32], CCAssignToReg<[ECX]>>>>,
868+
865869
// The first 3 integer arguments, if marked 'inreg' and if the call is not
866870
// a vararg call, are passed in integer registers.
867871
CCIfNotVarArg<CCIfInReg<CCIfType<[i32], CCAssignToReg<[EAX, EDX, ECX]>>>>,

llvm/test/CodeGen/X86/swifttail-async-i386.ll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,13 @@ define swifttailcc void @swifttail() {
1010
tail call swifttailcc void @swifttail_callee()
1111
ret void
1212
}
13+
14+
declare swifttailcc void @swiftself(i8* swiftself)
15+
16+
define swifttailcc void @swifttail2(i8* %arg) {
17+
; CHECK-LABEL: swifttail2:
18+
; CHECK: movl {{.*}}, %ecx
19+
; CHECK: jmp _swiftself
20+
tail call swifttailcc void @swiftself(i8* swiftself %arg)
21+
ret void
22+
}

0 commit comments

Comments
 (0)