Fix loss of memory live status when reversing compare

This commit is contained in:
drmortalwombat 2025-03-07 17:23:50 +01:00
parent 490180f9dc
commit 2ee5cc7bf4

View File

@ -14838,7 +14838,7 @@ bool NativeCodeBasicBlock::RemoveJumpToBranch(void)
if (mTrueJump && mTrueJump->RemoveJumpToBranch()) changed = true; if (mTrueJump && mTrueJump->RemoveJumpToBranch()) changed = true;
if (mFalseJump && mFalseJump->RemoveJumpToBranch()) changed = true; if (mFalseJump && mFalseJump->RemoveJumpToBranch()) changed = true;
if (mTrueJump && !mFalseJump && mTrueJump != this && mTrueJump->mIns.Size() == 0) if (mTrueJump && !mFalseJump && mTrueJump != this && mTrueJump->mIns.Size() == 0 && (mTrueJump->mFalseJump || mTrueJump->mTrueJump != mTrueJump))
{ {
mTrueJump->mEntryBlocks.RemoveAll(this); mTrueJump->mEntryBlocks.RemoveAll(this);
mTrueJump->mNumEntries--; mTrueJump->mNumEntries--;
@ -45138,6 +45138,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizerIterate2(int i, int pass)
mIns[i + 0].mLive |= LIVE_CPU_REG_X; mIns[i + 0].mLive |= LIVE_CPU_REG_X;
if (mIns[i + 1].RequiresYReg()) if (mIns[i + 1].RequiresYReg())
mIns[i + 0].mLive |= LIVE_CPU_REG_Y; mIns[i + 0].mLive |= LIVE_CPU_REG_Y;
mIns[i + 0].mLive |= mIns[i + 1].mLive & LIVE_MEM;
return true; return true;
} }
else if ( else if (
@ -53267,7 +53268,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc)
mInterProc->mLinkerObject->mNativeProc = this; mInterProc->mLinkerObject->mNativeProc = this;
CheckFunc = !strcmp(mIdent->mString, "doScroll"); CheckFunc = !strcmp(mIdent->mString, "main");
int nblocks = proc->mBlocks.Size(); int nblocks = proc->mBlocks.Size();
tblocks = new NativeCodeBasicBlock * [nblocks]; tblocks = new NativeCodeBasicBlock * [nblocks];