Fix assert in peephole optimizer

This commit is contained in:
drmortalwombat 2024-03-26 08:23:13 +01:00
parent 99da637734
commit 1f17f1c198
2 changed files with 11 additions and 3 deletions

View File

@ -13642,7 +13642,7 @@ void InterCodeBasicBlock::FollowJumps(void)
{
InterCodeBasicBlock* block = mTrueJump->Clone();
block->mInstructions[1]->mCode = IC_JUMP;
block->mInstructions[1]->mNumOperands = 1;
block->mInstructions[1]->mNumOperands = 0;
block->Close(mTrueJump->mTrueJump, nullptr);
block->mTrueJump->mNumEntries++;
@ -13660,7 +13660,7 @@ void InterCodeBasicBlock::FollowJumps(void)
{
InterCodeBasicBlock* block = mFalseJump->Clone();
block->mInstructions[1]->mCode = IC_JUMP;
block->mInstructions[1]->mNumOperands = 1;
block->mInstructions[1]->mNumOperands = 0;
block->Close(mFalseJump->mFalseJump, nullptr);
block->mTrueJump->mNumEntries++;
@ -16301,7 +16301,7 @@ bool InterCodeBasicBlock::PostDecLoopOptimization(void)
{
InterInstruction* ins = mInstructions[inci];
int v = ins->mSrc[inco].mIntConst;
int64 v = ins->mSrc[inco].mIntConst;
if (ins->mDst.mRange.mMaxState == IntegerValueRange::S_BOUND)
ins->mDst.mRange.mMaxValue -= v;

View File

@ -40591,6 +40591,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
{
mIns[i + 0].mAddress = (mIns[i + 0].mAddress - 1) & 255;
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
mIns[i + 0].mLive |= mIns[i + 1].mLive;
progress = true;
}
else if (
@ -40599,6 +40600,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
{
mIns[i + 0].mAddress = (mIns[i + 0].mAddress + 1) & 255;
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
mIns[i + 0].mLive |= mIns[i + 1].mLive;
progress = true;
}
else if (
@ -40607,6 +40609,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
{
mIns[i + 0].mAddress = (mIns[i + 0].mAddress - 1) & 255;
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
mIns[i + 0].mLive |= mIns[i + 1].mLive;
progress = true;
}
else if (
@ -40615,6 +40618,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
{
mIns[i + 0].mAddress = (mIns[i + 0].mAddress + 1) & 255;
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
mIns[i + 0].mLive |= mIns[i + 1].mLive;
progress = true;
}
@ -40624,6 +40628,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
{
mIns[i + 0].mType = ASMIT_LDY; mIns[i + 0].mLive |= mIns[i + 1].mLive;
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
mIns[i + 0].mLive |= mIns[i + 1].mLive;
progress = true;
}
else if (
@ -40632,6 +40637,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
{
mIns[i + 0].mType = ASMIT_LDX; mIns[i + 0].mLive |= mIns[i + 1].mLive;
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
mIns[i + 0].mLive |= mIns[i + 1].mLive;
progress = true;
}
else if (
@ -40640,6 +40646,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
{
mIns[i + 0].mType = ASMIT_LDA; mIns[i + 0].mLive |= mIns[i + 1].mLive;
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
mIns[i + 0].mLive |= mIns[i + 1].mLive;
progress = true;
}
else if (
@ -40648,6 +40655,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
{
mIns[i + 0].mType = ASMIT_LDA; mIns[i + 0].mLive |= mIns[i + 1].mLive;
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
mIns[i + 0].mLive |= mIns[i + 1].mLive;
progress = true;
}
else if (