From c12bca7b4ebf823369a19148f115f9199e590179 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sat, 30 Nov 2024 09:40:26 +0100 Subject: [PATCH] Fix crash in optimizer due to lack of updated register dependecy set when splitting block in loop --- oscar64/NativeCodeGenerator.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 6688819..e2e7754 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -40185,11 +40185,13 @@ bool NativeCodeBasicBlock::OptimizeInnerLoop(NativeCodeProcedure* proc, NativeCo lblock->mBranch = head->mBranch; lblock->mTrueJump = head->mTrueJump; lblock->mFalseJump = head->mFalseJump; + lblock->mEntryRequiredRegs = tail->mTrueJump->mEntryRequiredRegs; eblock->mIns.Push(NativeCodeInstruction(iins, ASMIT_STX, ASMIM_ZERO_PAGE, zreg)); eblock->mBranch = ASMIT_JMP; eblock->mTrueJump = tail->mFalseJump; eblock->mFalseJump = nullptr; + eblock->mEntryRequiredRegs = tail->mFalseJump->mEntryRequiredRegs; tail->mTrueJump = lblock; tail->mFalseJump = eblock; @@ -51789,7 +51791,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc) mInterProc = proc; mInterProc->mLinkerObject->mNativeProc = this; - CheckFunc = !strcmp(mInterProc->mIdent->mString, "main"); + CheckFunc = !strcmp(mInterProc->mIdent->mString, "diggers_vacate_room"); int nblocks = proc->mBlocks.Size(); tblocks = new NativeCodeBasicBlock * [nblocks];