Optimize compilation time
This commit is contained in:
parent
33f4b25f28
commit
323589a484
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -198,7 +198,7 @@ public:
|
|||
|
||||
|
||||
|
||||
typedef GrowingArray<IntegerValueRange> GrowingIntegerValueRangeArray;
|
||||
typedef ExpandingArray<IntegerValueRange> GrowingIntegerValueRangeArray;
|
||||
|
||||
class ValueSet
|
||||
{
|
||||
|
|
|
@ -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 (
|
||||
|
|
Loading…
Reference in New Issue