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 cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits