Improve compiler speed
This commit is contained in:
parent
c3e89d5d32
commit
259abf4c4b
|
@ -345,3 +345,7 @@ make/oscar64
|
||||||
*.crt
|
*.crt
|
||||||
*.crt
|
*.crt
|
||||||
*.d64
|
*.d64
|
||||||
|
*.tlog
|
||||||
|
*.res
|
||||||
|
*.recipe
|
||||||
|
*.exe
|
||||||
|
|
|
@ -103,7 +103,9 @@ enum KeyScanCode
|
||||||
KSCAN_STOP,
|
KSCAN_STOP,
|
||||||
|
|
||||||
KSCAN_QUAL_SHIFT = 0x40,
|
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
|
// map of keyboard codes to PETSCII, first 64 without shift
|
||||||
|
|
|
@ -196,11 +196,14 @@ public:
|
||||||
GrowingArray(const GrowingArray& a)
|
GrowingArray(const GrowingArray& a)
|
||||||
: empty(a.empty)
|
: empty(a.empty)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
size = a.size;
|
size = a.size;
|
||||||
range = a.range;
|
range = a.range;
|
||||||
array = new T[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)
|
GrowingArray & operator=(const GrowingArray& a)
|
||||||
|
@ -208,7 +211,10 @@ public:
|
||||||
if (a.size != size)
|
if (a.size != size)
|
||||||
Grow(a.size, true);
|
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;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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++)
|
for (int i = 0; i < table.mAssoc.Size(); i++)
|
||||||
{
|
{
|
||||||
mAssoc[i].mAssoc = table.mAssoc[i].mAssoc;
|
mAssoc[i].mAssoc = table.mAssoc[i].mAssoc;
|
||||||
mAssoc[i].mSucc = table.mAssoc[i].mSucc;
|
mAssoc[i].mSucc = table.mAssoc[i].mSucc;
|
||||||
mAssoc[i].mPred = table.mAssoc[i].mPred;
|
mAssoc[i].mPred = table.mAssoc[i].mPred;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TempForwardingTable& TempForwardingTable::operator=(const TempForwardingTable& table)
|
TempForwardingTable& TempForwardingTable::operator=(const TempForwardingTable& table)
|
||||||
{
|
{
|
||||||
|
mAssoc = table.mAssoc;
|
||||||
|
#if 0
|
||||||
mAssoc.SetSize(table.mAssoc.Size());
|
mAssoc.SetSize(table.mAssoc.Size());
|
||||||
for (int i = 0; i < table.mAssoc.Size(); i++)
|
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].mSucc = table.mAssoc[i].mSucc;
|
||||||
mAssoc[i].mPred = table.mAssoc[i].mPred;
|
mAssoc[i].mPred = table.mAssoc[i].mPred;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return *this;
|
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;
|
bool changed = false;
|
||||||
|
|
||||||
|
@ -6555,61 +6560,50 @@ bool InterCodeBasicBlock::CalculateSingleAssignmentTemps(FastNumberSet& tassigne
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InterCodeBasicBlock::PerformTempForwarding(TempForwardingTable& forwardingTable)
|
void InterCodeBasicBlock::PerformTempForwarding(const TempForwardingTable& forwardingTable)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!mVisited)
|
if (!mVisited)
|
||||||
{
|
{
|
||||||
TempForwardingTable localForwardingTable(forwardingTable);
|
|
||||||
|
|
||||||
if (mLoopHead)
|
if (mLoopHead)
|
||||||
{
|
{
|
||||||
if (mNumEntries == 2 && (mTrueJump == this || mFalseJump == this) && mLocalModifiedTemps.Size())
|
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++)
|
for (int i = 0; i < mLocalModifiedTemps.Size(); i++)
|
||||||
{
|
{
|
||||||
if (mLocalModifiedTemps[i])
|
if (mLocalModifiedTemps[i])
|
||||||
localForwardingTable.Destroy(i);
|
mMergeForwardingTable.Destroy(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
localForwardingTable.Reset();
|
mMergeForwardingTable.SetSize(forwardingTable.Size());
|
||||||
}
|
}
|
||||||
#if 0
|
else
|
||||||
else if (mNumEntries > 1)
|
|
||||||
{
|
{
|
||||||
lvalues.FlushAll();
|
if (mNumEntered == 0)
|
||||||
ltvalue.Clear();
|
mMergeForwardingTable = forwardingTable;
|
||||||
}
|
else
|
||||||
#endif
|
mMergeForwardingTable.Intersect(forwardingTable);
|
||||||
else if (mNumEntries > 0)
|
|
||||||
{
|
|
||||||
if (mNumEntered > 0)
|
|
||||||
{
|
|
||||||
localForwardingTable.Intersect(mMergeForwardingTable);
|
|
||||||
}
|
|
||||||
|
|
||||||
mNumEntered++;
|
mNumEntered++;
|
||||||
|
|
||||||
if (mNumEntered < mNumEntries)
|
if (mNumEntered < mNumEntries)
|
||||||
{
|
|
||||||
mMergeForwardingTable = localForwardingTable;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
mVisited = true;
|
mVisited = true;
|
||||||
|
|
||||||
for (i = 0; i < mInstructions.Size(); i++)
|
for (i = 0; i < mInstructions.Size(); i++)
|
||||||
{
|
{
|
||||||
mInstructions[i]->PerformTempForwarding(localForwardingTable);
|
mInstructions[i]->PerformTempForwarding(mMergeForwardingTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mTrueJump) mTrueJump->PerformTempForwarding(localForwardingTable);
|
if (mTrueJump) mTrueJump->PerformTempForwarding(mMergeForwardingTable);
|
||||||
if (mFalseJump) mFalseJump->PerformTempForwarding(localForwardingTable);
|
if (mFalseJump) mFalseJump->PerformTempForwarding(mMergeForwardingTable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12440,6 +12434,8 @@ void InterCodeProcedure::SimplifyIntegerNumeric(FastNumberSet& activeSet)
|
||||||
silvused = activeSet.Num();
|
silvused = activeSet.Num();
|
||||||
silvalues.SetSize(silvused + 16, true);
|
silvalues.SetSize(silvused + 16, true);
|
||||||
|
|
||||||
|
if (silvused != mTemporaries.Size())
|
||||||
|
{
|
||||||
mTemporaries.SetSize(activeSet.Num(), true);
|
mTemporaries.SetSize(activeSet.Num(), true);
|
||||||
|
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
|
@ -12447,6 +12443,7 @@ void InterCodeProcedure::SimplifyIntegerNumeric(FastNumberSet& activeSet)
|
||||||
|
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
mEntryBlock->RemapActiveTemporaries(activeSet);
|
mEntryBlock->RemapActiveTemporaries(activeSet);
|
||||||
|
}
|
||||||
|
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
} while (mEntryBlock->SimplifyIntegerNumeric(silvalues, silvused));
|
} while (mEntryBlock->SimplifyIntegerNumeric(silvalues, silvused));
|
||||||
|
|
|
@ -394,7 +394,7 @@ public:
|
||||||
bool PropagateVariableCopy(const GrowingInstructionPtrArray& ctemps, const GrowingVariableArray& staticVars);
|
bool PropagateVariableCopy(const GrowingInstructionPtrArray& ctemps, const GrowingVariableArray& staticVars);
|
||||||
|
|
||||||
void BuildLocalTempSets(int num);
|
void BuildLocalTempSets(int num);
|
||||||
void BuildGlobalProvidedTempSet(NumberSet fromProvidedTemps);
|
void BuildGlobalProvidedTempSet(const NumberSet & fromProvidedTemps);
|
||||||
bool BuildGlobalRequiredTempSet(NumberSet& fromRequiredTemps);
|
bool BuildGlobalRequiredTempSet(NumberSet& fromRequiredTemps);
|
||||||
bool RemoveUnusedResultInstructions(void);
|
bool RemoveUnusedResultInstructions(void);
|
||||||
void BuildCallerSaveTempSet(NumberSet& callerSaveTemps);
|
void BuildCallerSaveTempSet(NumberSet& callerSaveTemps);
|
||||||
|
@ -427,7 +427,7 @@ public:
|
||||||
void GlobalRenameRegister(const GrowingIntArray& renameTable, GrowingTypeArray& temporaries);
|
void GlobalRenameRegister(const GrowingIntArray& renameTable, GrowingTypeArray& temporaries);
|
||||||
|
|
||||||
void CheckValueUsage(InterInstruction * ins, const GrowingInstructionPtrArray& tvalue, const GrowingVariableArray& staticVars);
|
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 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);
|
void PerformMachineSpecificValueUsageCheck(const GrowingInstructionPtrArray& tvalue, FastNumberSet& tvalid, const GrowingVariableArray& staticVars);
|
||||||
bool EliminateDeadBranches(void);
|
bool EliminateDeadBranches(void);
|
||||||
|
|
|
@ -94,8 +94,6 @@ void NumberSet::Clear(void)
|
||||||
|
|
||||||
NumberSet& NumberSet::operator=(const NumberSet& set)
|
NumberSet& NumberSet::operator=(const NumberSet& set)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
this->size = set.size;
|
this->size = set.size;
|
||||||
|
|
||||||
if (dwsize != set.dwsize)
|
if (dwsize != set.dwsize)
|
||||||
|
@ -105,28 +103,36 @@ NumberSet& NumberSet::operator=(const NumberSet& set)
|
||||||
this->bits = new uint32[dwsize];
|
this->bits = new uint32[dwsize];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < dwsize; i++)
|
int size = dwsize;
|
||||||
bits[i] = set.bits[i];
|
const uint32* sbits = set.bits;
|
||||||
|
uint32* dbits = bits;
|
||||||
|
|
||||||
|
for (int i = 0; i < size; i++)
|
||||||
|
dbits[i] = sbits[i];
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
NumberSet& NumberSet::operator&=(const NumberSet& set)
|
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++)
|
for (int i = 0; i < size; i++)
|
||||||
bits[i] &= set.bits[i];
|
dbits[i] &= sbits[i];
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
NumberSet& NumberSet::operator|=(const NumberSet& set)
|
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++)
|
for (int i = 0; i < size; i++)
|
||||||
bits[i] |= set.bits[i];
|
dbits[i] |= sbits[i];
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<SpectreMitigation>false</SpectreMitigation>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
@ -81,6 +82,8 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<OutDir>$(SolutionDir)\$(Configuration)$(Platform)\</OutDir>
|
||||||
|
<IntDir>$(Configuration)$(Platform)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
|
@ -104,6 +107,7 @@
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
|
@ -127,6 +131,7 @@
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<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>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
@ -143,6 +148,7 @@
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<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>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
Loading…
Reference in New Issue