From: Saleem Abdulrasool Date: Tue, 26 Sep 2017 19:26:01 +0000 (+0000) Subject: Basic: support Preserve{Most,All} CC on Windows X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=423e48f4da9531206bb97b5387273039af30f91e;p=clang Basic: support Preserve{Most,All} CC on Windows Add support for the `preserve_mostcc` and `preserve_allcc` on Windows x86_64 and AArch64. This is used by Swift. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@314236 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/Targets/AArch64.cpp b/lib/Basic/Targets/AArch64.cpp index 0de8727a1a..2a85c89cbb 100644 --- a/lib/Basic/Targets/AArch64.cpp +++ b/lib/Basic/Targets/AArch64.cpp @@ -452,6 +452,8 @@ WindowsARM64TargetInfo::checkCallingConvention(CallingConv CC) const { return CCCR_Ignore; case CC_C: case CC_OpenCLKernel: + case CC_PreserveMost: + case CC_PreserveAll: case CC_Win64: return CCCR_OK; default: diff --git a/lib/Basic/Targets/X86.h b/lib/Basic/Targets/X86.h index a08eeec59d..27732dbe3b 100644 --- a/lib/Basic/Targets/X86.h +++ b/lib/Basic/Targets/X86.h @@ -916,6 +916,8 @@ public: case CC_C: case CC_X86VectorCall: case CC_IntelOclBicc: + case CC_PreserveMost: + case CC_PreserveAll: case CC_X86_64SysV: case CC_Swift: case CC_X86RegCall: diff --git a/test/CodeGen/preserve-call-conv.c b/test/CodeGen/preserve-call-conv.c index 6e91a8489b..b67e29f392 100644 --- a/test/CodeGen/preserve-call-conv.c +++ b/test/CodeGen/preserve-call-conv.c @@ -1,6 +1,9 @@ // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm < %s | FileCheck %s // RUN: %clang_cc1 -triple arm64-unknown-unknown -emit-llvm < %s | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -triple aarch64-unknown-windows-msvc -emit-llvm %s -o - | FileCheck %s + // Check that the preserve_most calling convention attribute at the source level // is lowered to the corresponding calling convention attrribute at the LLVM IR // level. diff --git a/test/Sema/preserve-call-conv.c b/test/Sema/preserve-call-conv.c index f258f45ac5..6bd049ffdc 100644 --- a/test/Sema/preserve-call-conv.c +++ b/test/Sema/preserve-call-conv.c @@ -1,5 +1,8 @@ // RUN: %clang_cc1 %s -fsyntax-only -triple x86_64-unknown-unknown -verify // RUN: %clang_cc1 %s -fsyntax-only -triple arm64-unknown-unknown -verify +// RUN: %clang_cc1 %s -fsyntax-only -triple x86_64-unknown-windows-msvc -verify +// RUN: %clang_cc1 %s -fsyntax-only -triple aarch64-unknown-windows-msvc -verify + typedef void typedef_fun_t(int); void __attribute__((preserve_most)) foo(void *ptr) {