From 44a9aaf89b7a0e587bf40dcdc3d5b28cc0d82da5 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sat, 21 Sep 2024 15:17:15 +0200 Subject: [PATCH] Fix range correction for post dec loop counters --- oscar64/InterCode.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index c2851a7..8df1cb2 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -17748,15 +17748,18 @@ bool InterCodeBasicBlock::PostDecLoopOptimization(void) int64 v = ins->mSrc[inco].mIntConst; - if (ins->mDst.mRange.mMaxState == IntegerValueRange::S_BOUND) - ins->mDst.mRange.mMaxValue -= v; - if (ins->mSrc[1 - inco].mRange.mMinState == IntegerValueRange::S_BOUND) - ins->mSrc[1 - inco].mRange.mMinValue -= v; + ins->mDst.mRange.AddConstValue(ins->mDst.mType, -v); + ins->mSrc[1 - inco].mRange.AddConstValue(ins->mDst.mType, -v); + mEntryValueRange[ltemp].AddConstValue(ins->mDst.mType, -v); mInstructions.Remove(inci); mInstructions.Insert(movi, ins); InterInstruction* pins = ins->Clone(); pins->mSrc[inco].mIntConst = -v; + + pins->mDst.mRange.AddConstValue(ins->mDst.mType, -v); + ins->mSrc[1 - inco].mRange.AddConstValue(ins->mDst.mType, -v); + pblock->mInstructions.Insert(pblock->mInstructions.Size() - 1, pins); changed = true; } @@ -22241,7 +22244,7 @@ void InterCodeProcedure::Close(void) { GrowingTypeArray tstack(IT_NONE); - CheckFunc = !strcmp(mIdent->mString, "main"); + CheckFunc = !strcmp(mIdent->mString, "foo"); CheckCase = false; mEntryBlock = mBlocks[0];