Fix invalid abs,y to abs,x propagation

This commit is contained in:
drmortalwombat 2024-08-18 13:26:35 +02:00
parent 122dc12d40
commit c58bb46e7e

View File

@ -34369,7 +34369,7 @@ bool NativeCodeBasicBlock::IndexXYValueForwarding(int xreg, int xoffset, int xva
xoffset = 0;
}
else if (i + 1 < mIns.Size() && mIns[i].mAddress == yreg && yoffset == 0 &&
mIns[i + 1].mType == ASMIT_LDY && mIns[i + 1].mMode && ASMIM_ABSOLUTE_X && !(mIns[i].mLive & LIVE_CPU_REG_A))
mIns[i + 1].mType == ASMIT_LDY && mIns[i + 1].mMode == ASMIM_ABSOLUTE_X && !(mIns[i].mLive & LIVE_CPU_REG_A))
{
mIns[i] = NativeCodeInstruction(mIns[i + 1].mIns, ASMIT_LDA, mIns[i + 1]);
mIns[i].mMode = ASMIM_ABSOLUTE_Y;
@ -49671,6 +49671,8 @@ void NativeCodeBasicBlock::CheckAsmCode(void)
assert(HasAsmInstructionMode(mIns[j].mType, ASMIM_IMMEDIATE));
else
assert(HasAsmInstructionMode(mIns[j].mType, mIns[j].mMode));
if (mIns[j].mMode == ASMIM_ABSOLUTE || mIns[j].mMode == ASMIM_ABSOLUTE_Y || mIns[j].mMode == ASMIM_ABSOLUTE_X)
assert(mIns[j].mLinkerObject != nullptr || mIns[j].mAddress > 0);
}
if (mTrueJump) mTrueJump->CheckAsmCode();
@ -49757,7 +49759,7 @@ void NativeCodeBasicBlock::CheckLive(void)
else
assert(HasAsmInstructionMode(mIns[j].mType, mIns[j].mMode));
if (mIns[j].mMode == ASMIM_ABSOLUTE || mIns[j].mMode == ASMIM_ZERO_PAGE)
if (mIns[j].mMode == ASMIM_ABSOLUTE || mIns[j].mMode == ASMIM_ZERO_PAGE || mIns[j].mMode == ASMIM_ABSOLUTE_X || mIns[j].mMode == ASMIM_ABSOLUTE_Y)
assert(mIns[j].mLinkerObject != nullptr || mIns[j].mAddress > 0);
if (mIns[j].mType != ASMIT_NOP)
@ -51310,6 +51312,11 @@ void NativeCodeProcedure::Optimize(void)
mEntryBlock->LocalZeroPageValueNumbering();
}
#if _DEBUG
ResetVisited();
mEntryBlock->CheckAsmCode();
#endif
if (step == 9 || step == 16)
{
ResetVisited();
@ -51318,6 +51325,12 @@ void NativeCodeProcedure::Optimize(void)
}
#if _DEBUG
ResetVisited();
mEntryBlock->CheckAsmCode();
#endif
int t = 0;
#if 1
do
@ -51391,6 +51404,8 @@ void NativeCodeProcedure::Optimize(void)
}
}
CheckBlocks();
if (step == 9)
{
ResetVisited();
@ -52119,6 +52134,11 @@ void NativeCodeProcedure::Optimize(void)
changed = true;
}
#if 1
#if _DEBUG
ResetVisited();
mEntryBlock->CheckAsmCode();
#endif
if (step == 10)
{
if (changed)
@ -52135,6 +52155,11 @@ void NativeCodeProcedure::Optimize(void)
}
}
#if _DEBUG
ResetVisited();
mEntryBlock->CheckAsmCode();
#endif
if (step == 11)
{
if (changed && cnt < 20)