Improve compiler speed
This commit is contained in:
parent
c3e89d5d32
commit
259abf4c4b
|
@ -345,3 +345,7 @@ make/oscar64
|
|||
*.crt
|
||||
*.crt
|
||||
*.d64
|
||||
*.tlog
|
||||
*.res
|
||||
*.recipe
|
||||
*.exe
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,13 +12434,16 @@ void InterCodeProcedure::SimplifyIntegerNumeric(FastNumberSet& activeSet)
|
|||
silvused = activeSet.Num();
|
||||
silvalues.SetSize(silvused + 16, true);
|
||||
|
||||
mTemporaries.SetSize(activeSet.Num(), true);
|
||||
if (silvused != mTemporaries.Size())
|
||||
{
|
||||
mTemporaries.SetSize(activeSet.Num(), true);
|
||||
|
||||
ResetVisited();
|
||||
mEntryBlock->ShrinkActiveTemporaries(activeSet, mTemporaries);
|
||||
ResetVisited();
|
||||
mEntryBlock->ShrinkActiveTemporaries(activeSet, mTemporaries);
|
||||
|
||||
ResetVisited();
|
||||
mEntryBlock->RemapActiveTemporaries(activeSet);
|
||||
ResetVisited();
|
||||
mEntryBlock->RemapActiveTemporaries(activeSet);
|
||||
}
|
||||
|
||||
ResetVisited();
|
||||
} while (mEntryBlock->SimplifyIntegerNumeric(silvalues, silvused));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue