mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Improved handling of mGhostDependencies. Codegen Abort
This commit is contained in:
parent
9988dec99d
commit
a82cc0534d
6 changed files with 37 additions and 4 deletions
|
@ -1124,6 +1124,9 @@ void BeIRCodeGen::Read(BeMDNode*& llvmMD)
|
||||||
|
|
||||||
void BeIRCodeGen::HandleNextCmd()
|
void BeIRCodeGen::HandleNextCmd()
|
||||||
{
|
{
|
||||||
|
if (mFailed)
|
||||||
|
return;
|
||||||
|
|
||||||
int curId = mCmdCount;
|
int curId = mCmdCount;
|
||||||
|
|
||||||
BfIRCmd cmd = (BfIRCmd)mStream->Read();
|
BfIRCmd cmd = (BfIRCmd)mStream->Read();
|
||||||
|
@ -1192,6 +1195,11 @@ void BeIRCodeGen::HandleNextCmd()
|
||||||
mBeModule->print(outStream, NULL);*/
|
mBeModule->print(outStream, NULL);*/
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case BfIRCmd_Abort:
|
||||||
|
{
|
||||||
|
Fail("Stream aborted");
|
||||||
|
}
|
||||||
|
break;
|
||||||
case BfIRCmd_SetType:
|
case BfIRCmd_SetType:
|
||||||
{
|
{
|
||||||
CMD_PARAM(int, typeId);
|
CMD_PARAM(int, typeId);
|
||||||
|
@ -1236,6 +1244,13 @@ void BeIRCodeGen::HandleNextCmd()
|
||||||
CMD_PARAM(int, instSize);
|
CMD_PARAM(int, instSize);
|
||||||
CMD_PARAM(int, instAlign);
|
CMD_PARAM(int, instAlign);
|
||||||
CMD_PARAM(bool, isPacked);
|
CMD_PARAM(bool, isPacked);
|
||||||
|
|
||||||
|
if ((type == NULL) || (type->mTypeCode != BeTypeCode_Struct))
|
||||||
|
{
|
||||||
|
Fail("StructSetBody invalid type");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
BF_ASSERT(type->mTypeCode == BeTypeCode_Struct);
|
BF_ASSERT(type->mTypeCode == BeTypeCode_Struct);
|
||||||
auto structType = (BeStructType*)type;
|
auto structType = (BeStructType*)type;
|
||||||
mBeContext->SetStructBody(structType, members, isPacked);
|
mBeContext->SetStructBody(structType, members, isPacked);
|
||||||
|
|
|
@ -2217,6 +2217,12 @@ void BfIRBuilder::WriteIR(const StringImpl& fileName)
|
||||||
NEW_CMD_INSERTED;
|
NEW_CMD_INSERTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BfIRBuilder::AbortStream()
|
||||||
|
{
|
||||||
|
WriteCmd(BfIRCmd_Abort);
|
||||||
|
NEW_CMD_INSERTED;
|
||||||
|
}
|
||||||
|
|
||||||
void BfIRBuilder::Module_SetTargetTriple(const StringImpl& targetTriple, const StringImpl& targetCPU)
|
void BfIRBuilder::Module_SetTargetTriple(const StringImpl& targetTriple, const StringImpl& targetCPU)
|
||||||
{
|
{
|
||||||
WriteCmd(BfIRCmd_Module_SetTargetTriple, targetTriple, targetCPU);
|
WriteCmd(BfIRCmd_Module_SetTargetTriple, targetTriple, targetCPU);
|
||||||
|
@ -2774,7 +2780,11 @@ void BfIRBuilder::CreateTypeDeclaration(BfType* type, bool forceDbgDefine)
|
||||||
if (!type->IsDeclared())
|
if (!type->IsDeclared())
|
||||||
populateModule->PopulateType(type, BfPopulateType_Declaration);
|
populateModule->PopulateType(type, BfPopulateType_Declaration);
|
||||||
|
|
||||||
BF_ASSERT(type->IsDeclared());
|
if (!type->IsDeclared())
|
||||||
|
{
|
||||||
|
AbortStream();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef BFIR_RENTRY_CHECK
|
#ifdef BFIR_RENTRY_CHECK
|
||||||
ReEntryCheck reEntryCheck(&mDeclReentrySet, type);
|
ReEntryCheck reEntryCheck(&mDeclReentrySet, type);
|
||||||
|
|
|
@ -161,6 +161,7 @@ enum BfIRCmd : uint8
|
||||||
BfIRCmd_Module_SetTargetTriple,
|
BfIRCmd_Module_SetTargetTriple,
|
||||||
BfIRCmd_Module_AddModuleFlag,
|
BfIRCmd_Module_AddModuleFlag,
|
||||||
BfIRCmd_WriteIR,
|
BfIRCmd_WriteIR,
|
||||||
|
BfIRCmd_Abort,
|
||||||
|
|
||||||
BfIRCmd_SetType,
|
BfIRCmd_SetType,
|
||||||
BfIRCmd_SetInstType,
|
BfIRCmd_SetInstType,
|
||||||
|
@ -1199,6 +1200,7 @@ public:
|
||||||
void SetBackend(bool isBeefBackend);
|
void SetBackend(bool isBeefBackend);
|
||||||
void RemoveIRCodeGen();
|
void RemoveIRCodeGen();
|
||||||
void WriteIR(const StringImpl& fileName);
|
void WriteIR(const StringImpl& fileName);
|
||||||
|
void AbortStream();
|
||||||
|
|
||||||
void Module_SetTargetTriple(const StringImpl& targetTriple, const StringImpl& targetCPU);
|
void Module_SetTargetTriple(const StringImpl& targetTriple, const StringImpl& targetCPU);
|
||||||
void Module_AddModuleFlag(const StringImpl& flag, int val);
|
void Module_AddModuleFlag(const StringImpl& flag, int val);
|
||||||
|
|
|
@ -2029,6 +2029,9 @@ void BfIRCodeGen::InitTarget()
|
||||||
|
|
||||||
void BfIRCodeGen::HandleNextCmd()
|
void BfIRCodeGen::HandleNextCmd()
|
||||||
{
|
{
|
||||||
|
if (mFailed)
|
||||||
|
return;
|
||||||
|
|
||||||
int curId = mCmdCount;
|
int curId = mCmdCount;
|
||||||
|
|
||||||
BfIRCmd cmd = (BfIRCmd)mStream->Read();
|
BfIRCmd cmd = (BfIRCmd)mStream->Read();
|
||||||
|
@ -2091,6 +2094,9 @@ void BfIRCodeGen::HandleNextCmd()
|
||||||
mLLVMModule->print(outStream, NULL);
|
mLLVMModule->print(outStream, NULL);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case BfIRCmd_Abort:
|
||||||
|
Fail("Stream aborted");
|
||||||
|
break;
|
||||||
case BfIRCmd_SetType:
|
case BfIRCmd_SetType:
|
||||||
{
|
{
|
||||||
CMD_PARAM(int, typeId);
|
CMD_PARAM(int, typeId);
|
||||||
|
|
|
@ -11097,7 +11097,7 @@ BfMethodInstance* BfModule::GetRawMethodInstanceAtIdx(BfTypeInstance* typeInstan
|
||||||
{
|
{
|
||||||
if (mCompiler->EnsureCeUnpaused(typeInstance))
|
if (mCompiler->EnsureCeUnpaused(typeInstance))
|
||||||
{
|
{
|
||||||
BF_FATAL("OOB in GetRawMethodInstanceAtIdx");
|
InternalError("OOB in GetRawMethodInstanceAtIdx");
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue