mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 03:52:19 +02:00
Aarch64 "unsupported calling convention" compiler crash fix
This commit is contained in:
parent
018db49902
commit
b981f80e85
1 changed files with 23 additions and 11 deletions
|
@ -203,9 +203,19 @@ template <typename T>
|
||||||
class CmdParamVec : public llvm::SmallVector<T, 8>
|
class CmdParamVec : public llvm::SmallVector<T, 8>
|
||||||
{};
|
{};
|
||||||
|
|
||||||
static int GetLLVMCallingConv(BfIRCallingConv callingConv)
|
static int GetLLVMCallingConv(BfIRCallingConv callingConv, BfTargetTriple& targetTriple)
|
||||||
{
|
{
|
||||||
int llvmCallingConv = llvm::CallingConv::C;
|
int llvmCallingConv = llvm::CallingConv::C;
|
||||||
|
|
||||||
|
if (targetTriple.GetMachineType() == BfMachineType_AArch64)
|
||||||
|
{
|
||||||
|
if (callingConv == BfIRCallingConv_CDecl)
|
||||||
|
llvmCallingConv = llvm::CallingConv::C;
|
||||||
|
else
|
||||||
|
llvmCallingConv = llvm::CallingConv::PreserveMost;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (callingConv == BfIRCallingConv_ThisCall)
|
if (callingConv == BfIRCallingConv_ThisCall)
|
||||||
llvmCallingConv = llvm::CallingConv::X86_ThisCall;
|
llvmCallingConv = llvm::CallingConv::X86_ThisCall;
|
||||||
else if (callingConv == BfIRCallingConv_StdCall)
|
else if (callingConv == BfIRCallingConv_StdCall)
|
||||||
|
@ -214,6 +224,8 @@ static int GetLLVMCallingConv(BfIRCallingConv callingConv)
|
||||||
llvmCallingConv = llvm::CallingConv::X86_FastCall;
|
llvmCallingConv = llvm::CallingConv::X86_FastCall;
|
||||||
else if (callingConv == BfIRCallingConv_CDecl)
|
else if (callingConv == BfIRCallingConv_CDecl)
|
||||||
llvmCallingConv = llvm::CallingConv::C;
|
llvmCallingConv = llvm::CallingConv::C;
|
||||||
|
}
|
||||||
|
|
||||||
return llvmCallingConv;
|
return llvmCallingConv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3601,14 +3613,14 @@ void BfIRCodeGen::HandleNextCmd()
|
||||||
CMD_PARAM(llvm::Value*, callInst);
|
CMD_PARAM(llvm::Value*, callInst);
|
||||||
BfIRCallingConv callingConv = (BfIRCallingConv)mStream->Read();
|
BfIRCallingConv callingConv = (BfIRCallingConv)mStream->Read();
|
||||||
BF_ASSERT(llvm::isa<llvm::CallInst>(callInst));
|
BF_ASSERT(llvm::isa<llvm::CallInst>(callInst));
|
||||||
((llvm::CallInst*)callInst)->setCallingConv(GetLLVMCallingConv(callingConv));
|
((llvm::CallInst*)callInst)->setCallingConv(GetLLVMCallingConv(callingConv, mTargetTriple));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BfIRCmd_SetFuncCallingConv:
|
case BfIRCmd_SetFuncCallingConv:
|
||||||
{
|
{
|
||||||
CMD_PARAM(llvm::Function*, func);
|
CMD_PARAM(llvm::Function*, func);
|
||||||
BfIRCallingConv callingConv = (BfIRCallingConv)mStream->Read();
|
BfIRCallingConv callingConv = (BfIRCallingConv)mStream->Read();
|
||||||
((llvm::Function*)func)->setCallingConv(GetLLVMCallingConv(callingConv));
|
((llvm::Function*)func)->setCallingConv(GetLLVMCallingConv(callingConv, mTargetTriple));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BfIRCmd_SetTailCall:
|
case BfIRCmd_SetTailCall:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue