Improve compiler speed

This commit is contained in:
drmortalwombat 2022-09-20 15:01:47 +02:00
parent c3e89d5d32
commit 259abf4c4b
7 changed files with 69 additions and 48 deletions

4
.gitignore vendored
View File

@ -345,3 +345,7 @@ make/oscar64
*.crt
*.crt
*.d64
*.tlog
*.res
*.recipe
*.exe

View File

@ -103,7 +103,9 @@ enum KeyScanCode
KSCAN_STOP,
KSCAN_QUAL_SHIFT = 0x40,
KSCAN_QUAL_DOWN = 0x80
KSCAN_QUAL_DOWN = 0x80,
KSCAN_MAX = 0xff
};
// map of keyboard codes to PETSCII, first 64 without shift

View File

@ -196,11 +196,14 @@ public:
GrowingArray(const GrowingArray& a)
: empty(a.empty)
{
int i;
size = a.size;
range = a.range;
array = new T[range];
for (i = 0; i < size; i++) array[i] = a.array[i];
int lsize = size;
const T* sap = a.array;
T* dap = array;
for (int i = 0; i < lsize; i++) dap[i] = sap[i];
}
GrowingArray & operator=(const GrowingArray& a)
@ -208,7 +211,10 @@ public:
if (a.size != size)
Grow(a.size, true);
for (int i = 0; i < size; i++) array[i] = a.array[i];
int lsize = size;
const T* sap = a.array;
T* dap = array;
for (int i = 0; i < lsize; i++) dap[i] = sap[i];
return *this;
}

View File

@ -1279,18 +1279,23 @@ TempForwardingTable::TempForwardingTable(void) : mAssoc(Assoc(-1, -1, -1))
{
}
TempForwardingTable::TempForwardingTable(const TempForwardingTable& table) : mAssoc(Assoc(-1, -1, -1))
TempForwardingTable::TempForwardingTable(const TempForwardingTable& table) : mAssoc(table.mAssoc)
{
#if 0
mAssoc.Reserve(table.mAssoc.Size());
for (int i = 0; i < table.mAssoc.Size(); i++)
{
mAssoc[i].mAssoc = table.mAssoc[i].mAssoc;
mAssoc[i].mSucc = table.mAssoc[i].mSucc;
mAssoc[i].mPred = table.mAssoc[i].mPred;
}
#endif
}
TempForwardingTable& TempForwardingTable::operator=(const TempForwardingTable& table)
{
mAssoc = table.mAssoc;
#if 0
mAssoc.SetSize(table.mAssoc.Size());
for (int i = 0; i < table.mAssoc.Size(); i++)
{
@ -1298,7 +1303,7 @@ TempForwardingTable& TempForwardingTable::operator=(const TempForwardingTable& t
mAssoc[i].mSucc = table.mAssoc[i].mSucc;
mAssoc[i].mPred = table.mAssoc[i].mPred;
}
#endif
return *this;
}
@ -6341,7 +6346,7 @@ void InterCodeBasicBlock::BuildLocalTempSets(int num)
}
}
void InterCodeBasicBlock::BuildGlobalProvidedTempSet(NumberSet fromProvidedTemps)
void InterCodeBasicBlock::BuildGlobalProvidedTempSet(const NumberSet & fromProvidedTemps)
{
bool changed = false;
@ -6555,61 +6560,50 @@ bool InterCodeBasicBlock::CalculateSingleAssignmentTemps(FastNumberSet& tassigne
return changed;
}
void InterCodeBasicBlock::PerformTempForwarding(TempForwardingTable& forwardingTable)
void InterCodeBasicBlock::PerformTempForwarding(const TempForwardingTable& forwardingTable)
{
int i;
if (!mVisited)
{
TempForwardingTable localForwardingTable(forwardingTable);
if (mLoopHead)
{
if (mNumEntries == 2 && (mTrueJump == this || mFalseJump == this) && mLocalModifiedTemps.Size())
{
assert(localForwardingTable.Size() == mLocalModifiedTemps.Size());
mMergeForwardingTable = forwardingTable;
assert(mMergeForwardingTable.Size() == mLocalModifiedTemps.Size());
for (int i = 0; i < mLocalModifiedTemps.Size(); i++)
{
if (mLocalModifiedTemps[i])
localForwardingTable.Destroy(i);
mMergeForwardingTable.Destroy(i);
}
}
else
localForwardingTable.Reset();
mMergeForwardingTable.SetSize(forwardingTable.Size());
}
#if 0
else if (mNumEntries > 1)
else
{
lvalues.FlushAll();
ltvalue.Clear();
}
#endif
else if (mNumEntries > 0)
{
if (mNumEntered > 0)
{
localForwardingTable.Intersect(mMergeForwardingTable);
}
if (mNumEntered == 0)
mMergeForwardingTable = forwardingTable;
else
mMergeForwardingTable.Intersect(forwardingTable);
mNumEntered++;
if (mNumEntered < mNumEntries)
{
mMergeForwardingTable = localForwardingTable;
return;
}
}
mVisited = true;
for (i = 0; i < mInstructions.Size(); i++)
{
mInstructions[i]->PerformTempForwarding(localForwardingTable);
mInstructions[i]->PerformTempForwarding(mMergeForwardingTable);
}
if (mTrueJump) mTrueJump->PerformTempForwarding(localForwardingTable);
if (mFalseJump) mFalseJump->PerformTempForwarding(localForwardingTable);
if (mTrueJump) mTrueJump->PerformTempForwarding(mMergeForwardingTable);
if (mFalseJump) mFalseJump->PerformTempForwarding(mMergeForwardingTable);
}
}
@ -12440,6 +12434,8 @@ void InterCodeProcedure::SimplifyIntegerNumeric(FastNumberSet& activeSet)
silvused = activeSet.Num();
silvalues.SetSize(silvused + 16, true);
if (silvused != mTemporaries.Size())
{
mTemporaries.SetSize(activeSet.Num(), true);
ResetVisited();
@ -12447,6 +12443,7 @@ void InterCodeProcedure::SimplifyIntegerNumeric(FastNumberSet& activeSet)
ResetVisited();
mEntryBlock->RemapActiveTemporaries(activeSet);
}
ResetVisited();
} while (mEntryBlock->SimplifyIntegerNumeric(silvalues, silvused));

View File

@ -394,7 +394,7 @@ public:
bool PropagateVariableCopy(const GrowingInstructionPtrArray& ctemps, const GrowingVariableArray& staticVars);
void BuildLocalTempSets(int num);
void BuildGlobalProvidedTempSet(NumberSet fromProvidedTemps);
void BuildGlobalProvidedTempSet(const NumberSet & fromProvidedTemps);
bool BuildGlobalRequiredTempSet(NumberSet& fromRequiredTemps);
bool RemoveUnusedResultInstructions(void);
void BuildCallerSaveTempSet(NumberSet& callerSaveTemps);
@ -427,7 +427,7 @@ public:
void GlobalRenameRegister(const GrowingIntArray& renameTable, GrowingTypeArray& temporaries);
void CheckValueUsage(InterInstruction * ins, const GrowingInstructionPtrArray& tvalue, const GrowingVariableArray& staticVars);
void PerformTempForwarding(TempForwardingTable& forwardingTable);
void PerformTempForwarding(const TempForwardingTable& forwardingTable);
void PerformValueForwarding(const GrowingInstructionPtrArray& tvalue, const ValueSet& values, FastNumberSet& tvalid, const NumberSet& aliasedLocals, const NumberSet& aliasedParams, int & spareTemps, const GrowingVariableArray& staticVars);
void PerformMachineSpecificValueUsageCheck(const GrowingInstructionPtrArray& tvalue, FastNumberSet& tvalid, const GrowingVariableArray& staticVars);
bool EliminateDeadBranches(void);

View File

@ -94,8 +94,6 @@ void NumberSet::Clear(void)
NumberSet& NumberSet::operator=(const NumberSet& set)
{
int i;
this->size = set.size;
if (dwsize != set.dwsize)
@ -105,28 +103,36 @@ NumberSet& NumberSet::operator=(const NumberSet& set)
this->bits = new uint32[dwsize];
}
for (i = 0; i < dwsize; i++)
bits[i] = set.bits[i];
int size = dwsize;
const uint32* sbits = set.bits;
uint32* dbits = bits;
for (int i = 0; i < size; i++)
dbits[i] = sbits[i];
return *this;
}
NumberSet& NumberSet::operator&=(const NumberSet& set)
{
int i;
int size = dwsize;
const uint32* sbits = set.bits;
uint32* dbits = bits;
for (i = 0; i < dwsize; i++)
bits[i] &= set.bits[i];
for (int i = 0; i < size; i++)
dbits[i] &= sbits[i];
return *this;
}
NumberSet& NumberSet::operator|=(const NumberSet& set)
{
int i;
int size = dwsize;
const uint32* sbits = set.bits;
uint32* dbits = bits;
for (i = 0; i < dwsize; i++)
bits[i] |= set.bits[i];
for (int i = 0; i < size; i++)
dbits[i] |= sbits[i];
return *this;
}

View File

@ -38,6 +38,7 @@
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<SpectreMitigation>false</SpectreMitigation>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
@ -81,6 +82,8 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\$(Configuration)$(Platform)\</OutDir>
<IntDir>$(Configuration)$(Platform)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@ -104,6 +107,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -127,6 +131,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -143,6 +148,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>