From 9a07762861308f1e9a69ccfedb2c47104ee66746 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Thu, 6 Dec 2018 03:28:37 +0000 Subject: [PATCH] ARM, AArch64: support `__attribute__((__swiftcall__))` Support the Swift calling convention on Windows ARM and AArch64. Both of these conform to the AAPCS, AAPCS64 calling convention, and LLVM has been adjusted to account for the register usage. Ensure that the frontend passes this into the backend. This allows the swift runtime to be built for Windows. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@348454 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets/AArch64.cpp | 1 + lib/Basic/Targets/ARM.cpp | 1 + test/CodeGen/swift-call-conv.c | 9 +++++++++ test/Sema/swift-call-conv.c | 7 +++++++ 4 files changed, 18 insertions(+) create mode 100644 test/CodeGen/swift-call-conv.c create mode 100644 test/Sema/swift-call-conv.c diff --git a/lib/Basic/Targets/AArch64.cpp b/lib/Basic/Targets/AArch64.cpp index e64eb21a49..376cba6e45 100644 --- a/lib/Basic/Targets/AArch64.cpp +++ b/lib/Basic/Targets/AArch64.cpp @@ -514,6 +514,7 @@ WindowsARM64TargetInfo::checkCallingConvention(CallingConv CC) const { case CC_OpenCLKernel: case CC_PreserveMost: case CC_PreserveAll: + case CC_Swift: case CC_Win64: return CCCR_OK; default: diff --git a/lib/Basic/Targets/ARM.cpp b/lib/Basic/Targets/ARM.cpp index 5345d1f8e9..cb202eac98 100644 --- a/lib/Basic/Targets/ARM.cpp +++ b/lib/Basic/Targets/ARM.cpp @@ -996,6 +996,7 @@ WindowsARMTargetInfo::checkCallingConvention(CallingConv CC) const { case CC_OpenCLKernel: case CC_PreserveMost: case CC_PreserveAll: + case CC_Swift: return CCCR_OK; default: return CCCR_Warning; diff --git a/test/CodeGen/swift-call-conv.c b/test/CodeGen/swift-call-conv.c new file mode 100644 index 0000000000..31d70b33a4 --- /dev/null +++ b/test/CodeGen/swift-call-conv.c @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -triple aarch64-unknown-windows-msvc -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -triple thumbv7-unknown-windows-msvc -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -emit-llvm %s -o - | FileCheck %s + +// REQUIRES: aarch64-registered-target,arm-registered-target,x86-registered-target + +void __attribute__((__swiftcall__)) f(void) {} +// CHECK-LABEL: define dso_local swiftcc void @f() + diff --git a/test/Sema/swift-call-conv.c b/test/Sema/swift-call-conv.c new file mode 100644 index 0000000000..755c18f518 --- /dev/null +++ b/test/Sema/swift-call-conv.c @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -triple aarch64-unknown-windows-msvc -fsyntax-only %s -verify +// RUN: %clang_cc1 -triple thumbv7-unknown-windows-msvc -fsyntax-only %s -verify +// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -fsyntax-only %s -verify + +// expected-no-diagnostics + +void __attribute__((__swiftcall__)) f(void) {} -- 2.40.0