Limit inline expansion depth

This commit is contained in:
drmortalwombat 2021-10-02 22:39:36 +02:00
parent bf825302aa
commit acc87d50fe
4 changed files with 19 additions and 3 deletions

View File

@ -2786,6 +2786,19 @@ void InterCodeBasicBlock::PerformMachineSpecificValueUsageCheck(const GrowingIns
if (mTrueJump) mTrueJump->PerformMachineSpecificValueUsageCheck(ltvalue, tvalid); if (mTrueJump) mTrueJump->PerformMachineSpecificValueUsageCheck(ltvalue, tvalid);
if (mFalseJump) mFalseJump->PerformMachineSpecificValueUsageCheck(ltvalue, tvalid); if (mFalseJump) mFalseJump->PerformMachineSpecificValueUsageCheck(ltvalue, tvalid);
if (mInstructions.Size() > 0 && mInstructions[mInstructions.Size() - 1]->mCode == IC_BRANCH && mInstructions[mInstructions.Size() - 1]->mSTemp[0] < 0)
{
mInstructions[mInstructions.Size() - 1]->mCode = IC_JUMP;
if (!mInstructions[mInstructions.Size() - 1]->mSIntConst[0])
{
mTrueJump->mNumEntries--;
mTrueJump = mFalseJump;
}
else
mFalseJump->mNumEntries--;
mFalseJump = nullptr;
}
} }
} }

View File

@ -1531,7 +1531,7 @@ InterCodeGenerator::ExValue InterCodeGenerator::TranslateExpression(Declaration*
return ExValue(TheVoidTypeDeclaration); return ExValue(TheVoidTypeDeclaration);
} }
else if (exp->mLeft->mType == EX_CONSTANT && exp->mLeft->mDecValue->mType == DT_CONST_FUNCTION && (exp->mLeft->mDecValue->mFlags & DTF_INLINE)) else if (exp->mLeft->mType == EX_CONSTANT && exp->mLeft->mDecValue->mType == DT_CONST_FUNCTION && (exp->mLeft->mDecValue->mFlags & DTF_INLINE) && !(inlineMapper && inlineMapper->mDepth > 3))
{ {
Declaration* fdec = exp->mLeft->mDecValue; Declaration* fdec = exp->mLeft->mDecValue;
Expression* fexp = fdec->mValue; Expression* fexp = fdec->mValue;
@ -1539,6 +1539,8 @@ InterCodeGenerator::ExValue InterCodeGenerator::TranslateExpression(Declaration*
InlineMapper nmapper; InlineMapper nmapper;
nmapper.mReturn = new InterCodeBasicBlock(); nmapper.mReturn = new InterCodeBasicBlock();
if (inlineMapper)
nmapper.mDepth = inlineMapper->mDepth + 1;
proc->Append(nmapper.mReturn); proc->Append(nmapper.mReturn);
Declaration* pdec = ftype->mParams; Declaration* pdec = ftype->mParams;

View File

@ -34,10 +34,10 @@ protected:
{ {
GrowingArray<int> mParams; GrowingArray<int> mParams;
InterCodeBasicBlock * mReturn; InterCodeBasicBlock * mReturn;
int mResult; int mResult, mDepth;
InlineMapper(void) InlineMapper(void)
: mParams(-1), mResult(-1) : mParams(-1), mResult(-1), mDepth(0)
{} {}
}; };

View File

@ -5844,6 +5844,7 @@ void NativeCodeBasicBlock::CallAssembler(InterCodeProcedure* proc, const InterIn
if (ins->mCode == IC_ASSEMBLER && mNoFrame) if (ins->mCode == IC_ASSEMBLER && mNoFrame)
ins->mLinkerObject->mFlags |= LOBJF_NO_FRAME; ins->mLinkerObject->mFlags |= LOBJF_NO_FRAME;
assert(ins->mLinkerObject);
mIns.Push(NativeCodeInstruction(ASMIT_JSR, ASMIM_ABSOLUTE, ins->mSIntConst[0], ins->mLinkerObject)); mIns.Push(NativeCodeInstruction(ASMIT_JSR, ASMIM_ABSOLUTE, ins->mSIntConst[0], ins->mLinkerObject));
if (ins->mTTemp >= 0) if (ins->mTTemp >= 0)