Remove some superflous range violation warnings

This commit is contained in:
drmortalwombat 2024-05-03 14:54:58 +02:00
parent 354a420aa4
commit c28f342f3e
2 changed files with 28 additions and 4 deletions

View File

@ -11941,7 +11941,10 @@ void InterCodeBasicBlock::RenameValueRanges(const GrowingIntArray& renameTable,
if (mEntryValueRange.Size() > 0) if (mEntryValueRange.Size() > 0)
{ {
mProc->mLocalValueRange = mEntryValueRange; mProc->mLocalValueRange = mEntryValueRange;
GrowingArray<int64> memoryValueSize(mMemoryValueSize);
mEntryValueRange.SetSize(numTemps, true); mEntryValueRange.SetSize(numTemps, true);
mMemoryValueSize.SetSize(numTemps, true);
for (int i = 0; i < mProc->mLocalValueRange.Size(); i++) for (int i = 0; i < mProc->mLocalValueRange.Size(); i++)
{ {
if (renameTable[i] >= 0) if (renameTable[i] >= 0)
@ -11950,6 +11953,7 @@ void InterCodeBasicBlock::RenameValueRanges(const GrowingIntArray& renameTable,
assert(mProc->mLocalValueRange[i].mMaxState == IntegerValueRange::S_UNKNOWN || mEntryValueRange[renameTable[i]].mMaxState == IntegerValueRange::S_UNKNOWN); assert(mProc->mLocalValueRange[i].mMaxState == IntegerValueRange::S_UNKNOWN || mEntryValueRange[renameTable[i]].mMaxState == IntegerValueRange::S_UNKNOWN);
mEntryValueRange[renameTable[i]].Limit(mProc->mLocalValueRange[i]); mEntryValueRange[renameTable[i]].Limit(mProc->mLocalValueRange[i]);
mMemoryValueSize[renameTable[i]] = int64min(mMemoryValueSize[renameTable[i]], memoryValueSize[i]);
} }
} }
} }
@ -19644,6 +19648,8 @@ void InterCodeProcedure::RebuildIntegerRangeSet(void)
{ {
mLocalValueRange.SetSize(mTemporaries.Size(), false); mLocalValueRange.SetSize(mTemporaries.Size(), false);
DisassembleDebug("BeforeRebuildIntegerRangeSet");
ResetVisited(); ResetVisited();
mEntryBlock->RestartLocalIntegerRangeSets(mTemporaries.Size(), mLocalVars, mParamVars); mEntryBlock->RestartLocalIntegerRangeSets(mTemporaries.Size(), mLocalVars, mParamVars);
@ -20564,7 +20570,7 @@ void InterCodeProcedure::Close(void)
{ {
GrowingTypeArray tstack(IT_NONE); GrowingTypeArray tstack(IT_NONE);
CheckFunc = !strcmp(mIdent->mString, "main"); CheckFunc = !strcmp(mIdent->mString, "interpret_program");
CheckCase = false; CheckCase = false;
mEntryBlock = mBlocks[0]; mEntryBlock = mBlocks[0];

View File

@ -22655,6 +22655,12 @@ bool NativeCodeBasicBlock::JoinTailCodeSequences(NativeCodeProcedure* proc, bool
mEntryRequiredRegs += CPU_REG_Y; mEntryRequiredRegs += CPU_REG_Y;
if (ins.RequiresXReg()) if (ins.RequiresXReg())
mEntryRequiredRegs += CPU_REG_X; mEntryRequiredRegs += CPU_REG_X;
if (ins.ChangesZFlag())
mEntryRequiredRegs -= CPU_REG_Z;
if (ins.ChangesCarry())
mEntryRequiredRegs -= CPU_REG_C;
if (ins.RequiresCarry())
mEntryRequiredRegs += CPU_REG_C;
mIns.Insert(0, ins); mIns.Insert(0, ins);
@ -22668,6 +22674,12 @@ bool NativeCodeBasicBlock::JoinTailCodeSequences(NativeCodeProcedure* proc, bool
b->mExitRequiredRegs += CPU_REG_Y; b->mExitRequiredRegs += CPU_REG_Y;
if (ins.RequiresXReg()) if (ins.RequiresXReg())
b->mExitRequiredRegs += CPU_REG_X; b->mExitRequiredRegs += CPU_REG_X;
if (ins.ChangesZFlag())
b->mExitRequiredRegs -= CPU_REG_Z;
if (ins.ChangesCarry())
b->mExitRequiredRegs -= CPU_REG_C;
if (ins.RequiresCarry())
b->mExitRequiredRegs += CPU_REG_C;
b->mIns.SetSize(b->mIns.Size() - 1); b->mIns.SetSize(b->mIns.Size() - 1);
} }
@ -34166,6 +34178,8 @@ bool NativeCodeBasicBlock::OptimizeSimpleLoopInvariant(NativeCodeProcedure* proc
prevBlock->mIns.Push(mIns[si]); prevBlock->mIns.Push(mIns[si]);
mIns.Remove(si); mIns.Remove(si);
prevBlock->mExitRequiredRegs += CPU_REG_X;
mEntryRequiredRegs += CPU_REG_X; mEntryRequiredRegs += CPU_REG_X;
mExitRequiredRegs += CPU_REG_X; mExitRequiredRegs += CPU_REG_X;
@ -34199,6 +34213,8 @@ bool NativeCodeBasicBlock::OptimizeSimpleLoopInvariant(NativeCodeProcedure* proc
prevBlock->mIns.Push(mIns[si]); prevBlock->mIns.Push(mIns[si]);
mIns.Remove(si); mIns.Remove(si);
prevBlock->mExitRequiredRegs += CPU_REG_X;
mEntryRequiredRegs += CPU_REG_X; mEntryRequiredRegs += CPU_REG_X;
mExitRequiredRegs += CPU_REG_X; mExitRequiredRegs += CPU_REG_X;
@ -46146,6 +46162,8 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
mIns[sz - 2].mType = ASMIT_NOP; mIns[sz - 2].mMode = ASMIM_IMPLIED; mIns[sz - 2].mType = ASMIT_NOP; mIns[sz - 2].mMode = ASMIM_IMPLIED;
mIns[sz - 1].mType = ASMIT_ORA; mIns[sz - 1].mAddress = 0; mIns[sz - 1].mLive |= LIVE_CPU_REG_Z; mIns[sz - 1].mType = ASMIT_ORA; mIns[sz - 1].mAddress = 0; mIns[sz - 1].mLive |= LIVE_CPU_REG_Z;
mExitRequiredRegs -= CPU_REG_C;
CheckLive(); CheckLive();
} }
} }
@ -46661,9 +46679,9 @@ void NativeCodeBasicBlock::CheckLive(void)
assert(mEntryRequiredRegs[CPU_REG_Y]); assert(mEntryRequiredRegs[CPU_REG_Y]);
} }
if (mExitRequiredRegs.Size() > 0 && mExitRequiredRegs[CPU_REG_Z]) if (mExitRequiredRegs.Size() > 0 && mExitRequiredRegs[CPU_REG_Z] && (mFalseJump || mTrueJump->mEntryRequiredRegs[CPU_REG_Z]))
live |= LIVE_CPU_REG_Z; live |= LIVE_CPU_REG_Z;
if (mExitRequiredRegs.Size() > 0 && mExitRequiredRegs[CPU_REG_C]) if (mExitRequiredRegs.Size() > 0 && mExitRequiredRegs[CPU_REG_C] && (mFalseJump || mTrueJump->mEntryRequiredRegs[CPU_REG_C]))
live |= LIVE_CPU_REG_C; live |= LIVE_CPU_REG_C;
for (int j = mIns.Size() - 1; j >= 0; j--) for (int j = mIns.Size() - 1; j >= 0; j--)
@ -47391,7 +47409,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc)
{ {
mInterProc = proc; mInterProc = proc;
CheckFunc = !strcmp(mInterProc->mIdent->mString, "plants_iterate"); CheckFunc = !strcmp(mInterProc->mIdent->mString, "edit_text");
int nblocks = proc->mBlocks.Size(); int nblocks = proc->mBlocks.Size();
tblocks = new NativeCodeBasicBlock * [nblocks]; tblocks = new NativeCodeBasicBlock * [nblocks];