Fix over eager livetime reduction of X and Y registers

This commit is contained in:
drmortalwombat 2022-02-26 12:35:59 +01:00
parent f4f9ae1a6a
commit 2719b1156b
5 changed files with 29 additions and 16 deletions

View File

@ -4594,9 +4594,6 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSets(void)
} }
for (int i = 0; i < mLocalValueRange.Size(); i++)
if (!mExitRequiredTemps[i])
mLocalValueRange[i].mMinState = mLocalValueRange[i].mMaxState = IntegerValueRange::S_UNKNOWN;
mTrueValueRange = mLocalValueRange; mTrueValueRange = mLocalValueRange;
mFalseValueRange = mLocalValueRange; mFalseValueRange = mLocalValueRange;
@ -4744,10 +4741,27 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSets(void)
} }
break; break;
} }
if (s1 >= 0 && sz > 2 && mInstructions[sz - 3]->mCode == IC_LOAD_TEMPORARY && mInstructions[sz - 3]->mSrc[0].mTemp == s1)
{
mTrueValueRange[mInstructions[sz - 3]->mDst.mTemp] = mTrueValueRange[s1];
mFalseValueRange[mInstructions[sz - 3]->mDst.mTemp] = mFalseValueRange[s1];
}
}
}
for (int i = 0; i < mLocalValueRange.Size(); i++)
{
if (!mExitRequiredTemps[i])
{
mLocalValueRange[i].mMinState = mLocalValueRange[i].mMaxState = IntegerValueRange::S_UNKNOWN;
mTrueValueRange[i] = mFalseValueRange[i] = mLocalValueRange[i];
} }
} }
} }
void InterCodeBasicBlock::RestartLocalIntegerRangeSets(void) void InterCodeBasicBlock::RestartLocalIntegerRangeSets(void)
{ {
if (!mVisited) if (!mVisited)
@ -8195,10 +8209,9 @@ void InterCodeBasicBlock::PeepholeOptimization(void)
changed = true; changed = true;
} }
} }
#endif #endif
} }
} }
} while (changed); } while (changed);

View File

@ -10872,7 +10872,7 @@ bool NativeCodeBasicBlock::MoveStoreXUp(int at)
{ {
if ((mIns[at - 1].mMode == ASMIM_ZERO_PAGE || mIns[at - 1].mMode == ASMIM_INDIRECT_Y) && mIns[at - 1].mAddress == mIns[at].mAddress) if ((mIns[at - 1].mMode == ASMIM_ZERO_PAGE || mIns[at - 1].mMode == ASMIM_INDIRECT_Y) && mIns[at - 1].mAddress == mIns[at].mAddress)
return done; return done;
if (mIns[at - 1].mMode == ASMIM_INDIRECT_Y && mIns[at - 1].mAddress == mIns[at].mAddress + 1) if (mIns[at - 1].mMode == ASMIM_INDIRECT_Y && mIns[at - 1].mAddress + 1 == mIns[at].mAddress)
return done; return done;
} }
else else
@ -10937,7 +10937,7 @@ bool NativeCodeBasicBlock::MoveStoreYUp(int at)
{ {
if ((mIns[at - 1].mMode == ASMIM_ZERO_PAGE || mIns[at - 1].mMode == ASMIM_INDIRECT_Y) && mIns[at - 1].mAddress == mIns[at].mAddress) if ((mIns[at - 1].mMode == ASMIM_ZERO_PAGE || mIns[at - 1].mMode == ASMIM_INDIRECT_Y) && mIns[at - 1].mAddress == mIns[at].mAddress)
return done; return done;
if (mIns[at - 1].mMode == ASMIM_INDIRECT_Y && mIns[at - 1].mAddress == mIns[at].mAddress + 1) if (mIns[at - 1].mMode == ASMIM_INDIRECT_Y && mIns[at - 1].mAddress + 1 == mIns[at].mAddress)
return done; return done;
} }
else else

View File

@ -73,7 +73,7 @@ int main2(int argc, const char** argv)
#else #else
strcpy(strProductName, "oscar64"); strcpy(strProductName, "oscar64");
strcpy(strProductVersion, "1.4.95"); strcpy(strProductVersion, "1.4.96");
#ifdef __APPLE__ #ifdef __APPLE__
uint32_t length = sizeof(basePath); uint32_t length = sizeof(basePath);

View File

@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,4,95,0 FILEVERSION 1,4,96,0
PRODUCTVERSION 1,4,95,0 PRODUCTVERSION 1,4,96,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -43,12 +43,12 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "oscar64" VALUE "CompanyName", "oscar64"
VALUE "FileDescription", "oscar64 compiler" VALUE "FileDescription", "oscar64 compiler"
VALUE "FileVersion", "1.4.95.0" VALUE "FileVersion", "1.4.96.0"
VALUE "InternalName", "oscar64.exe" VALUE "InternalName", "oscar64.exe"
VALUE "LegalCopyright", "Copyright (C) 2021" VALUE "LegalCopyright", "Copyright (C) 2021"
VALUE "OriginalFilename", "oscar64.exe" VALUE "OriginalFilename", "oscar64.exe"
VALUE "ProductName", "oscar64" VALUE "ProductName", "oscar64"
VALUE "ProductVersion", "1.4.95.0" VALUE "ProductVersion", "1.4.96.0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View File

@ -3752,15 +3752,15 @@
{ {
"Name" = "8:Microsoft Visual Studio" "Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:oscar64" "ProductName" = "8:oscar64"
"ProductCode" = "8:{37C3F00F-2A58-4FAD-B5BA-5574475C7831}" "ProductCode" = "8:{D0A57917-8945-4707-AFE2-0F963C625AEE}"
"PackageCode" = "8:{0F1773AB-6C73-4E53-B2D9-A794C417CED2}" "PackageCode" = "8:{0DE35B09-6CF2-4B04-BF8B-ED08F7B84405}"
"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"
"RemovePreviousVersions" = "11:TRUE" "RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE" "InstallAllUsers" = "11:FALSE"
"ProductVersion" = "8:1.4.95" "ProductVersion" = "8:1.4.96"
"Manufacturer" = "8:oscar64" "Manufacturer" = "8:oscar64"
"ARPHELPTELEPHONE" = "8:" "ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:" "ARPHELPLINK" = "8:"