1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 12:32:20 +02:00

Null conditional fixes

This commit is contained in:
Brian Fiete 2019-12-03 17:35:53 -08:00
parent bb66c77da8
commit f6752b703d
4 changed files with 15 additions and 1 deletions

View file

@ -15485,6 +15485,7 @@ BfTypedValue BfExprEvaluator::SetupNullConditional(BfTypedValue thisValue, BfTok
else
isNotNull = mModule->mBfIRBuilder->CreateIsNotNull(thisValue.mValue);
BfIRBlock notNullBB = mModule->mBfIRBuilder->CreateBlock("nullCond.notNull");
pendingNullCond->mNotNullBBs.Add(notNullBB);
mModule->mBfIRBuilder->CreateCondBr(isNotNull, notNullBB, pendingNullCond->mDoneBB);
mModule->AddBasicBlock(notNullBB);

View file

@ -6886,9 +6886,16 @@ BfTypedValue BfModule::FlushNullConditional(BfTypedValue result, bool ignoreNull
AddBasicBlock(pendingNullCond->mDoneBB);
if (nullableType == NULL)
{
auto phi = mBfIRBuilder->CreatePhi(mBfIRBuilder->MapType(result.mType), 2);
auto phi = mBfIRBuilder->CreatePhi(mBfIRBuilder->MapType(result.mType), 1 + (int)pendingNullCond->mNotNullBBs.size());
mBfIRBuilder->AddPhiIncoming(phi, result.mValue, notNullBB);
mBfIRBuilder->AddPhiIncoming(phi, GetDefaultValue(result.mType), pendingNullCond->mCheckBB);
for (int notNullIdx = 0; notNullIdx < (int)pendingNullCond->mNotNullBBs.size() - 1; notNullIdx++)
{
auto prevNotNullBB = pendingNullCond->mNotNullBBs[notNullIdx];
mBfIRBuilder->AddPhiIncoming(phi, GetDefaultValue(result.mType), prevNotNullBB);
}
result.mValue = phi;
}
}

View file

@ -645,6 +645,7 @@ public:
BfIRBlock mPrevBB;
BfIRBlock mCheckBB;
BfIRBlock mDoneBB;
SizedArray<BfIRBlock, 4> mNotNullBBs;
};
class BfAttributeState