Fix find loop optimization with mirrored condition

This commit is contained in:
drmortalwombat 2024-02-21 15:05:17 +01:00
parent c05bd269ad
commit 94a3097ba7
3 changed files with 232 additions and 146 deletions

View File

@ -5033,7 +5033,7 @@ void InterOperand::Disassemble(FILE* file, InterCodeProcedure* proc)
} }
else if (mMemoryBase == IM_PROCEDURE) else if (mMemoryBase == IM_PROCEDURE)
{ {
if (proc->mModule->mProcedures[mVarIndex]) if (mVarIndex >= 0 && proc->mModule->mProcedures[mVarIndex])
vname = proc->mModule->mProcedures[mVarIndex]->mIdent->mString; vname = proc->mModule->mProcedures[mVarIndex]->mIdent->mString;
else if (mLinkerObject && mLinkerObject->mIdent) else if (mLinkerObject && mLinkerObject->mIdent)
vname = mLinkerObject->mIdent->mString; vname = mLinkerObject->mIdent->mString;
@ -5108,7 +5108,7 @@ void InterOperand::Disassemble(FILE* file, InterCodeProcedure* proc)
} }
else if (mMemory == IM_PROCEDURE) else if (mMemory == IM_PROCEDURE)
{ {
if (proc->mModule->mProcedures[mVarIndex]) if (mVarIndex >= 0 && proc->mModule->mProcedures[mVarIndex])
vname = proc->mModule->mProcedures[mVarIndex]->mIdent->mString; vname = proc->mModule->mProcedures[mVarIndex]->mIdent->mString;
else if (mLinkerObject && mLinkerObject->mIdent) else if (mLinkerObject && mLinkerObject->mIdent)
vname = mLinkerObject->mIdent->mString; vname = mLinkerObject->mIdent->mString;

View File

@ -36413,9 +36413,11 @@ bool NativeCodeBasicBlock::OptimizeFindLoop(NativeCodeProcedure* proc)
if (succ) if (succ)
{ {
NativeCodeBasicBlock* pred = mEntryBlocks[0]; NativeCodeBasicBlock* pred = mEntryBlocks[0];
if (pred == mFalseJump) if (pred == body)
pred = mEntryBlocks[0]; pred = mEntryBlocks[1];
if (!pred->mFalseJump)
{
if (mIns.Size() > 0 && body->mIns.Size() > 0) if (mIns.Size() > 0 && body->mIns.Size() > 0)
{ {
int fsz = body->mIns.Size(); int fsz = body->mIns.Size();
@ -36588,7 +36590,7 @@ bool NativeCodeBasicBlock::OptimizeFindLoop(NativeCodeProcedure* proc)
} }
} }
} }
}
} }
} }
} }
@ -45948,7 +45950,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc)
{ {
mInterProc = proc; mInterProc = proc;
CheckFunc = !strcmp(mInterProc->mIdent->mString, "sieve"); CheckFunc = !strcmp(mInterProc->mIdent->mString, "manager_show_status");
int nblocks = proc->mBlocks.Size(); int nblocks = proc->mBlocks.Size();
tblocks = new NativeCodeBasicBlock * [nblocks]; tblocks = new NativeCodeBasicBlock * [nblocks];
@ -46946,6 +46948,12 @@ void NativeCodeProcedure::Optimize(void)
if (mEntryBlock->OptimizeFindLoop(this)) if (mEntryBlock->OptimizeFindLoop(this))
changed = true; changed = true;
#endif #endif
#if _DEBUG
ResetVisited();
mEntryBlock->CheckBlocks(true);
#endif
#if 1 #if 1
ResetVisited(); ResetVisited();
if (mEntryBlock->ReduceLocalYPressure()) if (mEntryBlock->ReduceLocalYPressure())

View File

@ -220,6 +220,12 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_28CED61D2559486D87F70EC821B89525"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_29ED5D9B606D45DA80CFF329A7643DC8" "MsmKey" = "8:_29ED5D9B606D45DA80CFF329A7643DC8"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -832,6 +838,12 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_A7796DF7A31E4292ADF6BECCF2604081"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A8820F3446B9408E88692E85817C1B07" "MsmKey" = "8:_A8820F3446B9408E88692E85817C1B07"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -982,6 +994,12 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_C6CAE25C0BCA43E58CF2062C2700F12F"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C72E9CB8EC154F9BA499FAC968B83A93" "MsmKey" = "8:_C72E9CB8EC154F9BA499FAC968B83A93"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -2083,6 +2101,26 @@
"IsDependency" = "11:FALSE" "IsDependency" = "11:FALSE"
"IsolateTo" = "8:" "IsolateTo" = "8:"
} }
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_28CED61D2559486D87F70EC821B89525"
{
"SourcePath" = "8:..\\include\\iso646.h"
"TargetName" = "8:iso646.h"
"Tag" = "8:"
"Folder" = "8:_7C0D28C244F14A21B5F72213BBE59B6F"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_29ED5D9B606D45DA80CFF329A7643DC8" "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_29ED5D9B606D45DA80CFF329A7643DC8"
{ {
"SourcePath" = "8:..\\samples\\kernalio\\diskdir.c" "SourcePath" = "8:..\\samples\\kernalio\\diskdir.c"
@ -4123,6 +4161,26 @@
"IsDependency" = "11:FALSE" "IsDependency" = "11:FALSE"
"IsolateTo" = "8:" "IsolateTo" = "8:"
} }
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A7796DF7A31E4292ADF6BECCF2604081"
{
"SourcePath" = "8:..\\include\\inttypes.c"
"TargetName" = "8:inttypes.c"
"Tag" = "8:"
"Folder" = "8:_7C0D28C244F14A21B5F72213BBE59B6F"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A8820F3446B9408E88692E85817C1B07" "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A8820F3446B9408E88692E85817C1B07"
{ {
"SourcePath" = "8:..\\samples\\make.bat" "SourcePath" = "8:..\\samples\\make.bat"
@ -4623,6 +4681,26 @@
"IsDependency" = "11:FALSE" "IsDependency" = "11:FALSE"
"IsolateTo" = "8:" "IsolateTo" = "8:"
} }
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C6CAE25C0BCA43E58CF2062C2700F12F"
{
"SourcePath" = "8:..\\include\\inttypes.h"
"TargetName" = "8:inttypes.h"
"Tag" = "8:"
"Folder" = "8:_7C0D28C244F14A21B5F72213BBE59B6F"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C72E9CB8EC154F9BA499FAC968B83A93" "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C72E9CB8EC154F9BA499FAC968B83A93"
{ {
"SourcePath" = "8:..\\include\\c64\\rasterirq.h" "SourcePath" = "8:..\\include\\c64\\rasterirq.h"
@ -6077,7 +6155,7 @@
"Name" = "8:Microsoft Visual Studio" "Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:oscar64" "ProductName" = "8:oscar64"
"ProductCode" = "8:{48CA0A06-57AB-4F70-8BE8-4FA70116E175}" "ProductCode" = "8:{48CA0A06-57AB-4F70-8BE8-4FA70116E175}"
"PackageCode" = "8:{8D1D153B-0A1B-4DC9-A05E-AB40E1BD5AD2}" "PackageCode" = "8:{F0372634-9B36-46D2-95AF-3DD2B414BF99}"
"UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}" "UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}"
"AspNetVersion" = "8:2.0.50727.0" "AspNetVersion" = "8:2.0.50727.0"
"RestartWWWService" = "11:FALSE" "RestartWWWService" = "11:FALSE"
@ -6598,7 +6676,7 @@
{ {
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_FB2E467BC172457785F4279BB0BFE8B6" "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_FB2E467BC172457785F4279BB0BFE8B6"
{ {
"SourcePath" = "8:..\\Releasex64\\oscar64.exe" "SourcePath" = "8:..\\Debugx64\\oscar64.exe"
"TargetName" = "8:" "TargetName" = "8:"
"Tag" = "8:" "Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"