varungandhi-apple created this revision.
varungandhi-apple added a reviewer: rjmccall.
Herald added subscribers: dexonsmith, pengfei, kbarton, kristof.beyls,
jgravelle-google, sbc100, nemanjai, dschuff.
varungandhi-apple requested review of this revision.
Herald added subscribers: cfe-commits, aheejin.
Herald added a project: clang.
Previously, we erroneously claimed that all targets were supported.
However, at the moment, only x86_64 and ARM are known to be working.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D96802
Files:
clang/include/clang/Basic/Features.def
clang/include/clang/Basic/TargetInfo.h
clang/lib/Basic/Targets/AArch64.cpp
clang/lib/Basic/Targets/ARM.cpp
clang/lib/Basic/Targets/PPC.h
clang/lib/Basic/Targets/SystemZ.h
clang/lib/Basic/Targets/WebAssembly.h
clang/lib/Basic/Targets/X86.h
Index: clang/lib/Basic/Targets/X86.h
===================================================================
--- clang/lib/Basic/Targets/X86.h
+++ clang/lib/Basic/Targets/X86.h
@@ -344,11 +344,12 @@
case CC_C:
case CC_PreserveMost:
case CC_Swift:
- case CC_SwiftAsync:
case CC_X86Pascal:
case CC_IntelOclBicc:
case CC_OpenCLKernel:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
@@ -703,7 +704,6 @@
switch (CC) {
case CC_C:
case CC_Swift:
- case CC_SwiftAsync:
case CC_X86VectorCall:
case CC_IntelOclBicc:
case CC_Win64:
@@ -712,6 +712,8 @@
case CC_X86RegCall:
case CC_OpenCLKernel:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
@@ -785,10 +787,11 @@
case CC_PreserveAll:
case CC_X86_64SysV:
case CC_Swift:
- case CC_SwiftAsync:
case CC_X86RegCall:
case CC_OpenCLKernel:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
Index: clang/lib/Basic/Targets/WebAssembly.h
===================================================================
--- clang/lib/Basic/Targets/WebAssembly.h
+++ clang/lib/Basic/Targets/WebAssembly.h
@@ -129,8 +129,9 @@
switch (CC) {
case CC_C:
case CC_Swift:
- case CC_SwiftAsync:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
Index: clang/lib/Basic/Targets/SystemZ.h
===================================================================
--- clang/lib/Basic/Targets/SystemZ.h
+++ clang/lib/Basic/Targets/SystemZ.h
@@ -141,9 +141,10 @@
switch (CC) {
case CC_C:
case CC_Swift:
- case CC_SwiftAsync:
case CC_OpenCLKernel:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
Index: clang/lib/Basic/Targets/PPC.h
===================================================================
--- clang/lib/Basic/Targets/PPC.h
+++ clang/lib/Basic/Targets/PPC.h
@@ -450,8 +450,9 @@
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override {
switch (CC) {
case CC_Swift:
- case CC_SwiftAsync:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
Index: clang/lib/Basic/Targets/ARM.cpp
===================================================================
--- clang/lib/Basic/Targets/ARM.cpp
+++ clang/lib/Basic/Targets/ARM.cpp
@@ -1120,9 +1120,10 @@
case CC_AAPCS:
case CC_AAPCS_VFP:
case CC_Swift:
- case CC_SwiftAsync:
case CC_OpenCLKernel:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
@@ -1200,8 +1201,9 @@
case CC_PreserveMost:
case CC_PreserveAll:
case CC_Swift:
- case CC_SwiftAsync:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
Index: clang/lib/Basic/Targets/AArch64.cpp
===================================================================
--- clang/lib/Basic/Targets/AArch64.cpp
+++ clang/lib/Basic/Targets/AArch64.cpp
@@ -537,13 +537,14 @@
switch (CC) {
case CC_C:
case CC_Swift:
- case CC_SwiftAsync:
case CC_PreserveMost:
case CC_PreserveAll:
case CC_OpenCLKernel:
case CC_AArch64VectorCall:
case CC_Win64:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
@@ -811,9 +812,10 @@
case CC_PreserveMost:
case CC_PreserveAll:
case CC_Swift:
- case CC_SwiftAsync:
case CC_Win64:
return CCCR_OK;
+ case CC_SwiftAsync:
+ return checkSwiftAsyncCCSupported();
default:
return CCCR_Warning;
}
Index: clang/include/clang/Basic/TargetInfo.h
===================================================================
--- clang/include/clang/Basic/TargetInfo.h
+++ clang/include/clang/Basic/TargetInfo.h
@@ -1415,6 +1415,17 @@
virtual CallingConvKind getCallingConvKind(bool ClangABICompat4) const;
+ /// \brief Is the Swift async calling convention supported for this target.
+ bool isSwiftAsyncCCSupported() const {
+ auto &triple = getTriple();
+ return triple.getArch() == llvm::Triple::x86_64 || triple.isARM() ||
+ triple.isAArch64();
+ }
+
+ CallingConvCheckResult checkSwiftAsyncCCSupported() const {
+ return isSwiftAsyncCCSupported() ? CCCR_OK : CCCR_Error;
+ }
+
/// Controls if __builtin_longjmp / __builtin_setjmp can be lowered to
/// llvm.eh.sjlj.longjmp / llvm.eh.sjlj.setjmp.
virtual bool hasSjLjLowering() const {
Index: clang/include/clang/Basic/Features.def
===================================================================
--- clang/include/clang/Basic/Features.def
+++ clang/include/clang/Basic/Features.def
@@ -92,6 +92,7 @@
FEATURE(thread_sanitizer, LangOpts.Sanitize.has(SanitizerKind::Thread))
FEATURE(dataflow_sanitizer, LangOpts.Sanitize.has(SanitizerKind::DataFlow))
FEATURE(scudo, LangOpts.Sanitize.hasOneOf(SanitizerKind::Scudo))
+FEATURE(swiftasynccc, PP.getTargetInfo().isSwiftAsyncCCSupported())
// Objective-C features
FEATURE(objc_arr, LangOpts.ObjCAutoRefCount) // FIXME: REMOVE?
FEATURE(objc_arc, LangOpts.ObjCAutoRefCount)
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits