Fix crash compiling infinite loop
This commit is contained in:
parent
623b511ce6
commit
ecaab1b5b3
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue