From 9ec846c506de55c5c6f3a53b57894ef12451b2ee Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Tue, 21 Sep 2021 22:49:04 +0200 Subject: [PATCH] Load/Store constant offset propagation across basic blocks --- oscar64/InterCode.cpp | 47 +++++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index 15d12e7..d5afe37 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -2692,21 +2692,46 @@ void InterCodeBasicBlock::PerformMachineSpecificValueUsageCheck(const GrowingIns if (!mVisited) { + GrowingInstructionPtrArray ltvalue(tvalue); + + if (mLoopHead) + { + ltvalue.Clear(); + } +#if 0 + else if (mNumEntries > 1) + { + lvalues.FlushAll(); + ltvalue.Clear(); + } +#endif + else if (mNumEntries > 0) + { + if (mNumEntered > 0) + { + for (int i = 0; i < ltvalue.Size(); i++) + { + if (mMergeTValues[i] != ltvalue[i]) + ltvalue[i] = nullptr; + } + } + + mNumEntered++; + + if (mNumEntered < mNumEntries) + { + mMergeTValues = ltvalue; + return; + } + } + mVisited = true; - GrowingInstructionPtrArray ltvalue(tvalue); - tvalid.Clear(); - - if (mNumEntries != 1) - ltvalue.Clear(); - else + for (i = 0; i < ltvalue.Size(); i++) { - for (i = 0; i < tvalue.Size(); i++) - { - if (ltvalue[i]) - tvalid += i; - } + if (ltvalue[i]) + tvalid += i; } for (i = 0; i < mInstructions.Size(); i++)