Optimize compilation time

This commit is contained in:
drmortalwombat 2025-04-18 12:55:10 +02:00
parent 33f4b25f28
commit 323589a484
4 changed files with 37 additions and 18 deletions

View File

@ -421,11 +421,13 @@ protected:
array = a2;
}
for (int i = size; i < to; i++) array[i] = T{};
size = to;
}
template<typename F>
void Parition(const F & f, int l, int r)
void Partition(const F & f, int l, int r)
{
if (r > l + 1)
{
@ -442,8 +444,8 @@ protected:
}
array[pi] = p;
Parition(f, l, pi);
Parition(f, pi + 1, r);
Partition(f, l, pi);
Partition(f, pi + 1, r);
}
}
public:
@ -618,10 +620,22 @@ public:
return false;
}
void Fill(const T& t)
{
for (int i = 0; i < size; i++)
array[i] = t;
}
void Clear(void)
{
for (int i = 0; i < size; i++)
array[i] = T{};
}
template<typename F>
void Sort(const F & f)
{
Parition(f, 0, size);
Partition(f, 0, size);
}
__forceinline T& operator[](int n)

View File

@ -5872,8 +5872,6 @@ void InterInstruction::Disassemble(FILE* file, InterCodeProcedure* proc)
InterCodeBasicBlock::InterCodeBasicBlock(InterCodeProcedure * proc)
: mProc(proc),
mInstructions(nullptr), mEntryRenameTable(-1), mExitRenameTable(-1), mMergeTValues(nullptr), mMergeAValues(nullptr), mTrueJump(nullptr), mFalseJump(nullptr), mLoopPrefix(nullptr), mDominator(nullptr),
mEntryValueRange(IntegerValueRange()), mTrueValueRange(IntegerValueRange()), mFalseValueRange(IntegerValueRange()),
mEntryParamValueRange(IntegerValueRange()), mTrueParamValueRange(IntegerValueRange()), mFalseParamValueRange(IntegerValueRange()), mLocalParamValueRange(IntegerValueRange()),
mLoadStoreInstructions(nullptr), mMemoryValueSize(0), mEntryMemoryValueSize(0)
{
mVisited = false;
@ -7980,9 +7978,6 @@ bool InterCodeBasicBlock::BuildGlobalIntegerRangeSets(bool initial, const Growin
if (!mLoopHead && mNumEntered < mEntryBlocks.Size())
return false;
mProc->mLocalValueRange.Clear();
mLocalParamValueRange.Clear();
assert(mProc->mLocalValueRange.Size() == mExitRequiredTemps.Size());
assert(mLocalParamValueRange.Size() == paramVars.Size());
@ -8015,6 +8010,12 @@ bool InterCodeBasicBlock::BuildGlobalIntegerRangeSets(bool initial, const Growin
}
}
if (firstEntry)
{
mProc->mLocalValueRange.Clear();
mLocalParamValueRange.Clear();
}
assert(mProc->mLocalValueRange.Size() == mExitRequiredTemps.Size());
assert(mLocalParamValueRange.Size() == paramVars.Size());
@ -22178,12 +22179,15 @@ void InterCodeBasicBlock::RemapActiveTemporaries(const FastNumberSet& set)
for (int i = 0; i < set.Num(); i++)
{
int j = set.Element(i);
mEntryValueRange[i] = entryValueRange[j];
mTrueValueRange[i] = trueValueRange[j];
mFalseValueRange[i] = falseValueRange[j];
// mLocalValueRange[i] = localValueRange[j];
// mReverseValueRange[i] = reverseValueRange[j];
mMemoryValueSize[i] = memoryValueSize[j];
if (j < entryValueRange.Size())
{
mEntryValueRange[i] = entryValueRange[j];
mTrueValueRange[i] = trueValueRange[j];
mFalseValueRange[i] = falseValueRange[j];
// mLocalValueRange[i] = localValueRange[j];
// mReverseValueRange[i] = reverseValueRange[j];
mMemoryValueSize[i] = memoryValueSize[j];
}
}
if (mTrueJump) mTrueJump->RemapActiveTemporaries(set);
@ -22289,8 +22293,7 @@ InterCodeProcedure::InterCodeProcedure(InterCodeModule * mod, const Location & l
mSaveTempsLinkerObject(nullptr), mValueReturn(false), mFramePointer(false),
mCheckUnreachable(true), mReturnType(IT_NONE), mCheapInline(false), mNoInline(false),
mDeclaration(nullptr), mGlobalsChecked(false), mDispatchedCall(false),
mNumRestricted(1),
mReverseValueRange(IntegerValueRange()), mLocalValueRange(IntegerValueRange())
mNumRestricted(1)
{
mID = mModule->mProcedures.Size();
mModule->mProcedures.Push(this);

View File

@ -198,7 +198,7 @@ public:
typedef GrowingArray<IntegerValueRange> GrowingIntegerValueRangeArray;
typedef ExpandingArray<IntegerValueRange> GrowingIntegerValueRangeArray;
class ValueSet
{

View File

@ -47447,6 +47447,8 @@ bool NativeCodeBasicBlock::PeepHoleOptimizerIterate3(int i, int pass)
mIns[i + 0].mMode = ASMIM_IMPLIED; mIns[i + 0].mLive |= LIVE_CPU_REG_A;
mIns[i + 1].mLive |= LIVE_CPU_REG_A;
mIns.Insert(i, ins);
if (mIns[i + 1].RequiresCarry())
mIns[i + 0].mLive |= LIVE_CPU_REG_C;
return true;
}
else if (