Skip to content

Commit f17a99f

Browse files
committed
X86: swiftailcc fix csr save list and register mask on i386
rdar://76160189
1 parent 5b25bcb commit f17a99f

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

llvm/lib/Target/X86/X86RegisterInfo.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,8 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
350350
return CSR_Win64_NoSSE_SaveList;
351351
return CSR_Win64_SaveList;
352352
case CallingConv::SwiftTail:
353+
if (!Is64Bit)
354+
return CSR_32_SaveList;
353355
return IsWin64 ? CSR_Win64_SwiftTail_SaveList : CSR_64_SwiftTail_SaveList;
354356
case CallingConv::X86_64_SysV:
355357
if (CallsEHReturn)
@@ -468,6 +470,8 @@ X86RegisterInfo::getCallPreservedMask(const MachineFunction &MF,
468470
case CallingConv::Win64:
469471
return CSR_Win64_RegMask;
470472
case CallingConv::SwiftTail:
473+
if (!Is64Bit)
474+
return CSR_32_RegMask;
471475
return IsWin64 ? CSR_Win64_SwiftTail_RegMask : CSR_64_SwiftTail_RegMask;
472476
case CallingConv::X86_64_SysV:
473477
return CSR_64_RegMask;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
; RUN: llc -mtriple=i386-apple-darwin %s -o - | FileCheck %s
2+
3+
declare void @clobber()
4+
5+
declare swifttailcc void @swifttail_callee()
6+
define swifttailcc void @swifttail() {
7+
; CHECK-LABEL: swifttail:
8+
; CHECK-NOT: %rbx
9+
call void @clobber()
10+
tail call swifttailcc void @swifttail_callee()
11+
ret void
12+
}

0 commit comments

Comments
 (0)