Fix crash compiling infinite loop

This commit is contained in:
drmortalwombat 2024-01-30 15:04:13 +01:00
parent 623b511ce6
commit ecaab1b5b3

View File

@ -34193,37 +34193,40 @@ bool NativeCodeBasicBlock::OptimizeXYSpilling(void)
if (nblock == this) if (nblock == this)
nblock = mFalseJump; nblock = mFalseJump;
int ps = pblock->mIns.Size(); if (nblock)
if (nblock->mEntryBlocks.Size() == 1 && !pblock->mFalseJump && ps > 0)
{ {
if (!ReferencesAccu()) int ps = pblock->mIns.Size();
if (nblock->mEntryBlocks.Size() == 1 && !pblock->mFalseJump && ps > 0)
{ {
if (!ReferencesXReg() && pblock->mIns.Size() > 0 && pblock->mIns[ps - 1].mType == ASMIT_TAX) if (!ReferencesAccu())
{ {
nblock->mIns.Insert(0, NativeCodeInstruction(pblock->mIns[ps - 1].mIns, ASMIT_TAX)); if (!ReferencesXReg() && pblock->mIns.Size() > 0 && pblock->mIns[ps - 1].mType == ASMIT_TAX)
pblock->mIns.Remove(ps - 1); {
ps--; nblock->mIns.Insert(0, NativeCodeInstruction(pblock->mIns[ps - 1].mIns, ASMIT_TAX));
pblock->mExitRequiredRegs += CPU_REG_A; pblock->mIns.Remove(ps - 1);
nblock->mEntryRequiredRegs += CPU_REG_A; ps--;
mEntryRequiredRegs += CPU_REG_A; pblock->mExitRequiredRegs += CPU_REG_A;
mExitRequiredRegs += CPU_REG_A; nblock->mEntryRequiredRegs += CPU_REG_A;
for (int i = 0; i < mIns.Size(); i++) mEntryRequiredRegs += CPU_REG_A;
mIns[i].mLive |= LIVE_CPU_REG_A; mExitRequiredRegs += CPU_REG_A;
changed = true; for (int i = 0; i < mIns.Size(); i++)
} mIns[i].mLive |= LIVE_CPU_REG_A;
changed = true;
}
if (!ReferencesYReg() && pblock->mIns.Size() > 0 && pblock->mIns[ps - 1].mType == ASMIT_TAY) if (!ReferencesYReg() && pblock->mIns.Size() > 0 && pblock->mIns[ps - 1].mType == ASMIT_TAY)
{ {
nblock->mIns.Insert(0, NativeCodeInstruction(pblock->mIns[ps - 1].mIns, ASMIT_TAY)); nblock->mIns.Insert(0, NativeCodeInstruction(pblock->mIns[ps - 1].mIns, ASMIT_TAY));
pblock->mIns.Remove(ps - 1); pblock->mIns.Remove(ps - 1);
ps--; ps--;
pblock->mExitRequiredRegs += CPU_REG_A; pblock->mExitRequiredRegs += CPU_REG_A;
nblock->mEntryRequiredRegs += CPU_REG_A; nblock->mEntryRequiredRegs += CPU_REG_A;
mEntryRequiredRegs += CPU_REG_A; mEntryRequiredRegs += CPU_REG_A;
mExitRequiredRegs += CPU_REG_A; mExitRequiredRegs += CPU_REG_A;
for (int i = 0; i < mIns.Size(); i++) for (int i = 0; i < mIns.Size(); i++)
mIns[i].mLive |= LIVE_CPU_REG_A; mIns[i].mLive |= LIVE_CPU_REG_A;
changed = true; changed = true;
}
} }
} }
} }