diff options
author | Eli Friedman <efriedma@quicinc.com> | 2024-04-09 19:53:56 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-09 19:53:56 -0700 |
commit | 71097e927141e278dd92e847e67f636526510a31 (patch) | |
tree | 89e4011e18a858f8bd36b4e4d65ecbaf857e0ad1 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 4c6ae8ebb69525118e7fc3cf57908e9de74ebef9 (diff) | |
download | llvm-71097e927141e278dd92e847e67f636526510a31.zip llvm-71097e927141e278dd92e847e67f636526510a31.tar.gz llvm-71097e927141e278dd92e847e67f636526510a31.tar.bz2 |
[ARM64EC] Add support for parsing __vectorcall (#87725)
MSVC doesn't support generating __vectorcall calls in Arm64EC mode, but
it does treat it as a distinct type. The Microsoft STL depends on this
functionality. (Not sure if this is intentional.) Add support for
parsing the same way as MSVC, and add some checks to ensure we don't try
to actually generate code.
The error handling in CodeGen is ugly, but I can't think of a better way
to do it.
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 00b3bfc..75519be 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2087,6 +2087,14 @@ void CodeGenModule::SetLLVMFunctionAttributes(GlobalDecl GD, llvm::AttributeList PAL; ConstructAttributeList(F->getName(), Info, GD, PAL, CallingConv, /*AttrOnCallSite=*/false, IsThunk); + if (CallingConv == llvm::CallingConv::X86_VectorCall && + getTarget().getTriple().isWindowsArm64EC()) { + SourceLocation Loc; + if (const Decl *D = GD.getDecl()) + Loc = D->getLocation(); + + Error(Loc, "__vectorcall calling convention is not currently supported"); + } F->setAttributes(PAL); F->setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv)); } |