[clang] [llvm] [RISCV] Add support for Swift calling conventions and error handling (PR #205469)
Sam Elliott via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 24 09:21:37 PDT 2026
================
@@ -399,6 +400,27 @@ static bool CC_RISCV_Impl(unsigned ValNo, MVT ValVT, MVT LocVT,
}
}
+ if (ArgFlags.isSwiftSelf() || ArgFlags.isSwiftError() ||
+ ArgFlags.isSwiftAsync()) {
+ if (LocVT != XLenVT)
+ reportFatalUsageError(
+ "swiftself, swifterror, and swiftasync arguments must be "
+ "pointer-sized on RISC-V");
+ if (!IsEABI) {
+ MCRegister Reg = RISCV::NoRegister;
+ if (ArgFlags.isSwiftSelf())
+ Reg = State.AllocateReg(RISCV::X18);
+ else if (ArgFlags.isSwiftError())
+ Reg = State.AllocateReg(RISCV::X19);
+ else if (ArgFlags.isSwiftAsync())
+ Reg = State.AllocateReg(RISCV::X20);
+ if (Reg) {
+ State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
+ return false;
+ }
----------------
lenary wrote:
How does this work when these registers are callee-saved?
Please have a reportFatalUsageError if `IsEABI`, or change `supportsSwiftError` to exclude the `IsEABI` case.
https://github.com/llvm/llvm-project/pull/205469
More information about the cfe-commits
mailing list