Optimize compilation time
This commit is contained in:
parent
33f4b25f28
commit
323589a484
|
@ -421,11 +421,13 @@ protected:
|
||||||
array = a2;
|
array = a2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = size; i < to; i++) array[i] = T{};
|
||||||
|
|
||||||
size = to;
|
size = to;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename F>
|
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)
|
if (r > l + 1)
|
||||||
{
|
{
|
||||||
|
@ -442,8 +444,8 @@ protected:
|
||||||
}
|
}
|
||||||
array[pi] = p;
|
array[pi] = p;
|
||||||
|
|
||||||
Parition(f, l, pi);
|
Partition(f, l, pi);
|
||||||
Parition(f, pi + 1, r);
|
Partition(f, pi + 1, r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
|
@ -618,10 +620,22 @@ public:
|
||||||
return false;
|
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>
|
template<typename F>
|
||||||
void Sort(const F & f)
|
void Sort(const F & f)
|
||||||
{
|
{
|
||||||
Parition(f, 0, size);
|
Partition(f, 0, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline T& operator[](int n)
|
__forceinline T& operator[](int n)
|
||||||
|
|
|
@ -5872,8 +5872,6 @@ void InterInstruction::Disassemble(FILE* file, InterCodeProcedure* proc)
|
||||||
InterCodeBasicBlock::InterCodeBasicBlock(InterCodeProcedure * proc)
|
InterCodeBasicBlock::InterCodeBasicBlock(InterCodeProcedure * proc)
|
||||||
: mProc(proc),
|
: mProc(proc),
|
||||||
mInstructions(nullptr), mEntryRenameTable(-1), mExitRenameTable(-1), mMergeTValues(nullptr), mMergeAValues(nullptr), mTrueJump(nullptr), mFalseJump(nullptr), mLoopPrefix(nullptr), mDominator(nullptr),
|
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)
|
mLoadStoreInstructions(nullptr), mMemoryValueSize(0), mEntryMemoryValueSize(0)
|
||||||
{
|
{
|
||||||
mVisited = false;
|
mVisited = false;
|
||||||
|
@ -7980,9 +7978,6 @@ bool InterCodeBasicBlock::BuildGlobalIntegerRangeSets(bool initial, const Growin
|
||||||
if (!mLoopHead && mNumEntered < mEntryBlocks.Size())
|
if (!mLoopHead && mNumEntered < mEntryBlocks.Size())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mProc->mLocalValueRange.Clear();
|
|
||||||
mLocalParamValueRange.Clear();
|
|
||||||
|
|
||||||
assert(mProc->mLocalValueRange.Size() == mExitRequiredTemps.Size());
|
assert(mProc->mLocalValueRange.Size() == mExitRequiredTemps.Size());
|
||||||
assert(mLocalParamValueRange.Size() == paramVars.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(mProc->mLocalValueRange.Size() == mExitRequiredTemps.Size());
|
||||||
assert(mLocalParamValueRange.Size() == paramVars.Size());
|
assert(mLocalParamValueRange.Size() == paramVars.Size());
|
||||||
|
|
||||||
|
@ -22178,6 +22179,8 @@ void InterCodeBasicBlock::RemapActiveTemporaries(const FastNumberSet& set)
|
||||||
for (int i = 0; i < set.Num(); i++)
|
for (int i = 0; i < set.Num(); i++)
|
||||||
{
|
{
|
||||||
int j = set.Element(i);
|
int j = set.Element(i);
|
||||||
|
if (j < entryValueRange.Size())
|
||||||
|
{
|
||||||
mEntryValueRange[i] = entryValueRange[j];
|
mEntryValueRange[i] = entryValueRange[j];
|
||||||
mTrueValueRange[i] = trueValueRange[j];
|
mTrueValueRange[i] = trueValueRange[j];
|
||||||
mFalseValueRange[i] = falseValueRange[j];
|
mFalseValueRange[i] = falseValueRange[j];
|
||||||
|
@ -22185,6 +22188,7 @@ void InterCodeBasicBlock::RemapActiveTemporaries(const FastNumberSet& set)
|
||||||
// mReverseValueRange[i] = reverseValueRange[j];
|
// mReverseValueRange[i] = reverseValueRange[j];
|
||||||
mMemoryValueSize[i] = memoryValueSize[j];
|
mMemoryValueSize[i] = memoryValueSize[j];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mTrueJump) mTrueJump->RemapActiveTemporaries(set);
|
if (mTrueJump) mTrueJump->RemapActiveTemporaries(set);
|
||||||
if (mFalseJump) mFalseJump->RemapActiveTemporaries(set);
|
if (mFalseJump) mFalseJump->RemapActiveTemporaries(set);
|
||||||
|
@ -22289,8 +22293,7 @@ InterCodeProcedure::InterCodeProcedure(InterCodeModule * mod, const Location & l
|
||||||
mSaveTempsLinkerObject(nullptr), mValueReturn(false), mFramePointer(false),
|
mSaveTempsLinkerObject(nullptr), mValueReturn(false), mFramePointer(false),
|
||||||
mCheckUnreachable(true), mReturnType(IT_NONE), mCheapInline(false), mNoInline(false),
|
mCheckUnreachable(true), mReturnType(IT_NONE), mCheapInline(false), mNoInline(false),
|
||||||
mDeclaration(nullptr), mGlobalsChecked(false), mDispatchedCall(false),
|
mDeclaration(nullptr), mGlobalsChecked(false), mDispatchedCall(false),
|
||||||
mNumRestricted(1),
|
mNumRestricted(1)
|
||||||
mReverseValueRange(IntegerValueRange()), mLocalValueRange(IntegerValueRange())
|
|
||||||
{
|
{
|
||||||
mID = mModule->mProcedures.Size();
|
mID = mModule->mProcedures.Size();
|
||||||
mModule->mProcedures.Push(this);
|
mModule->mProcedures.Push(this);
|
||||||
|
|
|
@ -198,7 +198,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef GrowingArray<IntegerValueRange> GrowingIntegerValueRangeArray;
|
typedef ExpandingArray<IntegerValueRange> GrowingIntegerValueRangeArray;
|
||||||
|
|
||||||
class ValueSet
|
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 + 0].mMode = ASMIM_IMPLIED; mIns[i + 0].mLive |= LIVE_CPU_REG_A;
|
||||||
mIns[i + 1].mLive |= LIVE_CPU_REG_A;
|
mIns[i + 1].mLive |= LIVE_CPU_REG_A;
|
||||||
mIns.Insert(i, ins);
|
mIns.Insert(i, ins);
|
||||||
|
if (mIns[i + 1].RequiresCarry())
|
||||||
|
mIns[i + 0].mLive |= LIVE_CPU_REG_C;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (
|
else if (
|
||||||
|
|
Loading…
Reference in New Issue