Fix invalid abs,y to abs,x propagation
This commit is contained in:
parent
122dc12d40
commit
c58bb46e7e
|
@ -34369,7 +34369,7 @@ bool NativeCodeBasicBlock::IndexXYValueForwarding(int xreg, int xoffset, int xva
|
||||||
xoffset = 0;
|
xoffset = 0;
|
||||||
}
|
}
|
||||||
else if (i + 1 < mIns.Size() && mIns[i].mAddress == yreg && yoffset == 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] = NativeCodeInstruction(mIns[i + 1].mIns, ASMIT_LDA, mIns[i + 1]);
|
||||||
mIns[i].mMode = ASMIM_ABSOLUTE_Y;
|
mIns[i].mMode = ASMIM_ABSOLUTE_Y;
|
||||||
|
@ -49671,6 +49671,8 @@ void NativeCodeBasicBlock::CheckAsmCode(void)
|
||||||
assert(HasAsmInstructionMode(mIns[j].mType, ASMIM_IMMEDIATE));
|
assert(HasAsmInstructionMode(mIns[j].mType, ASMIM_IMMEDIATE));
|
||||||
else
|
else
|
||||||
assert(HasAsmInstructionMode(mIns[j].mType, mIns[j].mMode));
|
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();
|
if (mTrueJump) mTrueJump->CheckAsmCode();
|
||||||
|
@ -49757,7 +49759,7 @@ void NativeCodeBasicBlock::CheckLive(void)
|
||||||
else
|
else
|
||||||
assert(HasAsmInstructionMode(mIns[j].mType, mIns[j].mMode));
|
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);
|
assert(mIns[j].mLinkerObject != nullptr || mIns[j].mAddress > 0);
|
||||||
|
|
||||||
if (mIns[j].mType != ASMIT_NOP)
|
if (mIns[j].mType != ASMIT_NOP)
|
||||||
|
@ -51310,6 +51312,11 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
mEntryBlock->LocalZeroPageValueNumbering();
|
mEntryBlock->LocalZeroPageValueNumbering();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if _DEBUG
|
||||||
|
ResetVisited();
|
||||||
|
mEntryBlock->CheckAsmCode();
|
||||||
|
#endif
|
||||||
|
|
||||||
if (step == 9 || step == 16)
|
if (step == 9 || step == 16)
|
||||||
{
|
{
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
|
@ -51318,6 +51325,12 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if _DEBUG
|
||||||
|
ResetVisited();
|
||||||
|
mEntryBlock->CheckAsmCode();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int t = 0;
|
int t = 0;
|
||||||
#if 1
|
#if 1
|
||||||
do
|
do
|
||||||
|
@ -51391,6 +51404,8 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CheckBlocks();
|
||||||
|
|
||||||
if (step == 9)
|
if (step == 9)
|
||||||
{
|
{
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
|
@ -52119,6 +52134,11 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
#if 1
|
#if 1
|
||||||
|
#if _DEBUG
|
||||||
|
ResetVisited();
|
||||||
|
mEntryBlock->CheckAsmCode();
|
||||||
|
#endif
|
||||||
|
|
||||||
if (step == 10)
|
if (step == 10)
|
||||||
{
|
{
|
||||||
if (changed)
|
if (changed)
|
||||||
|
@ -52135,6 +52155,11 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if _DEBUG
|
||||||
|
ResetVisited();
|
||||||
|
mEntryBlock->CheckAsmCode();
|
||||||
|
#endif
|
||||||
|
|
||||||
if (step == 11)
|
if (step == 11)
|
||||||
{
|
{
|
||||||
if (changed && cnt < 20)
|
if (changed && cnt < 20)
|
||||||
|
|
Loading…
Reference in New Issue