]> granicus.if.org Git - clang/commitdiff
Basic: support Preserve{Most,All} CC on Windows
authorSaleem Abdulrasool <compnerd@compnerd.org>
Tue, 26 Sep 2017 19:26:01 +0000 (19:26 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Tue, 26 Sep 2017 19:26:01 +0000 (19:26 +0000)
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

lib/Basic/Targets/AArch64.cpp
lib/Basic/Targets/X86.h
test/CodeGen/preserve-call-conv.c
test/Sema/preserve-call-conv.c

index 0de8727a1a37579201104f6b220cc4d977b07198..2a85c89cbb381778f851e1a5dab2c544f7818928 100644 (file)
@@ -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:
index a08eeec59dcb2ffad4c6c69263627a3ad90a6899..27732dbe3bcdcec9962ff84c489aadbbed4bd77b 100644 (file)
@@ -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:
index 6e91a8489b405e2574f547b5c6bf5f5549888aa0..b67e29f392a4e574444d1ca677552c5ef54a459c 100644 (file)
@@ -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.
index f258f45ac582686e0708fc34d427425e2dc8d6d4..6bd049ffdca294dfbf93b2e2b55cfccd39dbf36a 100644 (file)
@@ -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) {