Refactor intermediate instructions from value to pointer type

This commit is contained in:
drmortalwombat 2021-09-15 12:01:14 +02:00
parent 37828f2baf
commit 1d761886b5
8 changed files with 2425 additions and 2398 deletions

File diff suppressed because it is too large Load Diff

View File

@ -221,19 +221,19 @@ public:
void IntConstToAddr(__int64 val);
void FloatConstToAccu(double val);
void FloatConstToWork(double val);
void CopyValue(InterCodeProcedure* proc, const InterInstruction& ins);
void LoadConstant(InterCodeProcedure* proc, const InterInstruction& ins);
void StoreDirectValue(InterCodeProcedure* proc, const InterInstruction & ins);
void LoadDirectValue(InterCodeProcedure* proc, const InterInstruction& ins);
void LoadEffectiveAddress(InterCodeProcedure* proc, const InterInstruction& ins);
void CallFunction(InterCodeProcedure* proc, const InterInstruction& ins);
void CallAssembler(InterCodeProcedure* proc, const InterInstruction& ins);
void BinaryOperator(InterCodeProcedure* proc, const InterInstruction& ins);
void UnaryOperator(InterCodeProcedure* proc, const InterInstruction& ins);
void BinaryRROperator(InterCodeProcedure* proc, const InterInstruction& ins);
ByteCode RelationalOperator(InterCodeProcedure* proc, const InterInstruction& ins);
void BinaryIntOperator(InterCodeProcedure* proc, const InterInstruction& ins, ByteCode code);
void NumericConversion(InterCodeProcedure* proc, const InterInstruction& ins);
void CopyValue(InterCodeProcedure* proc, const InterInstruction * ins);
void LoadConstant(InterCodeProcedure* proc, const InterInstruction * ins);
void StoreDirectValue(InterCodeProcedure* proc, const InterInstruction * ins);
void LoadDirectValue(InterCodeProcedure* proc, const InterInstruction * ins);
void LoadEffectiveAddress(InterCodeProcedure* proc, const InterInstruction * ins);
void CallFunction(InterCodeProcedure* proc, const InterInstruction * ins);
void CallAssembler(InterCodeProcedure* proc, const InterInstruction * ins);
void BinaryOperator(InterCodeProcedure* proc, const InterInstruction * ins);
void UnaryOperator(InterCodeProcedure* proc, const InterInstruction * ins);
void BinaryRROperator(InterCodeProcedure* proc, const InterInstruction * ins);
ByteCode RelationalOperator(InterCodeProcedure* proc, const InterInstruction * ins);
void BinaryIntOperator(InterCodeProcedure* proc, const InterInstruction * ins, ByteCode code);
void NumericConversion(InterCodeProcedure* proc, const InterInstruction * ins);
void PeepHoleOptimizer(void);
};

File diff suppressed because it is too large Load Diff

View File

@ -115,7 +115,7 @@ typedef GrowingArray<InterType> GrowingTypeArray;
typedef GrowingArray<int> GrowingIntArray;
typedef GrowingArray<InterInstructionPtr> GrowingInstructionPtrArray;
typedef GrowingArray<InterCodeBasicBlockPtr> GrowingInterCodeBasicBlockPtrArray;
typedef GrowingArray<InterInstruction> GrowingInstructionArray;
typedef GrowingArray<InterInstruction *> GrowingInstructionArray;
typedef GrowingArray<InterCodeProcedurePtr > GrowingInterCodeProcedurePtrArray;
@ -139,9 +139,9 @@ public:
void FlushCallAliases(void);
void RemoveValue(int index);
void InsertValue(InterInstruction& ins);
void InsertValue(InterInstruction * ins);
void UpdateValue(InterInstruction& ins, const GrowingInstructionPtrArray& tvalue, const NumberSet& aliasedLocals, const NumberSet& aliasedParams);
void UpdateValue(InterInstruction * ins, const GrowingInstructionPtrArray& tvalue, const NumberSet& aliasedLocals, const NumberSet& aliasedParams);
void Intersect(ValueSet& set);
};
@ -308,7 +308,10 @@ public:
double mFloatValue;
Location mLocation;
bool mInUse;
InterInstruction(void);
void SetCode(const Location & loc, InterCode code);
void CollectLocalAddressTemps(GrowingIntArray& localTable, GrowingIntArray& paramTable);
@ -408,7 +411,7 @@ public:
InterCodeBasicBlock(void);
~InterCodeBasicBlock(void);
void Append(InterInstruction & code);
void Append(InterInstruction * code);
void Close(InterCodeBasicBlock* trueJump, InterCodeBasicBlock* falseJump);
void CollectEntries(void);
@ -440,7 +443,7 @@ public:
void BuildGlobalRenameRegisterTable(const GrowingIntArray& renameTable, GrowingIntArray& globalRenameTable);
void GlobalRenameRegister(const GrowingIntArray& renameTable, GrowingTypeArray& temporaries);
void CheckValueUsage(InterInstruction& ins, const GrowingInstructionPtrArray& tvalue);
void CheckValueUsage(InterInstruction * ins, const GrowingInstructionPtrArray& tvalue);
void PerformTempForwarding(TempForwardingTable& forwardingTable);
void PerformValueForwarding(const GrowingInstructionPtrArray& tvalue, const ValueSet& values, FastNumberSet& tvalid, const NumberSet& aliasedLocals, const NumberSet& aliasedParams);
void PerformMachineSpecificValueUsageCheck(const GrowingInstructionPtrArray& tvalue, FastNumberSet& tvalid);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -83,25 +83,25 @@ public:
void PutWord(uint16 code);
void CheckFrameIndex(int & reg, int & index, int size);
void LoadValueToReg(InterCodeProcedure* proc, const InterInstruction& ins, int reg, const NativeCodeInstruction * ainsl, const NativeCodeInstruction* ainsh);
void LoadConstantToReg(InterCodeProcedure* proc, const InterInstruction& ins, InterType type, int reg);
void LoadValueToReg(InterCodeProcedure* proc, const InterInstruction * ins, int reg, const NativeCodeInstruction * ainsl, const NativeCodeInstruction* ainsh);
void LoadConstantToReg(InterCodeProcedure* proc, const InterInstruction * ins, InterType type, int reg);
void LoadConstant(InterCodeProcedure* proc, const InterInstruction& ins);
void StoreValue(InterCodeProcedure* proc, const InterInstruction& ins);
void LoadValue(InterCodeProcedure* proc, const InterInstruction& ins);
void LoadStoreValue(InterCodeProcedure* proc, const InterInstruction& rins, const InterInstruction& wins);
void BinaryOperator(InterCodeProcedure* proc, const InterInstruction& ins, const InterInstruction* sins1, const InterInstruction* sins0);
void UnaryOperator(InterCodeProcedure* proc, const InterInstruction& ins);
void RelationalOperator(InterCodeProcedure* proc, const InterInstruction& ins, NativeCodeProcedure * nproc, NativeCodeBasicBlock* trueJump, NativeCodeBasicBlock * falseJump);
void LoadEffectiveAddress(InterCodeProcedure* proc, const InterInstruction& ins, const InterInstruction* sins1, const InterInstruction* sins0);
void NumericConversion(InterCodeProcedure* proc, const InterInstruction& ins);
void CopyValue(InterCodeProcedure* proc, const InterInstruction& ins, NativeCodeProcedure* nproc);
void LoadConstant(InterCodeProcedure* proc, const InterInstruction * ins);
void StoreValue(InterCodeProcedure* proc, const InterInstruction * ins);
void LoadValue(InterCodeProcedure* proc, const InterInstruction * ins);
void LoadStoreValue(InterCodeProcedure* proc, const InterInstruction * rins, const InterInstruction * wins);
void BinaryOperator(InterCodeProcedure* proc, const InterInstruction * ins, const InterInstruction* sins1, const InterInstruction* sins0);
void UnaryOperator(InterCodeProcedure* proc, const InterInstruction * ins);
void RelationalOperator(InterCodeProcedure* proc, const InterInstruction * ins, NativeCodeProcedure * nproc, NativeCodeBasicBlock* trueJump, NativeCodeBasicBlock * falseJump);
void LoadEffectiveAddress(InterCodeProcedure* proc, const InterInstruction * ins, const InterInstruction* sins1, const InterInstruction* sins0);
void NumericConversion(InterCodeProcedure* proc, const InterInstruction * ins);
void CopyValue(InterCodeProcedure* proc, const InterInstruction * ins, NativeCodeProcedure* nproc);
void CallAssembler(InterCodeProcedure* proc, const InterInstruction& ins);
void CallFunction(InterCodeProcedure* proc, const InterInstruction& ins);
void CallAssembler(InterCodeProcedure* proc, const InterInstruction * ins);
void CallFunction(InterCodeProcedure* proc, const InterInstruction * ins);
void ShiftRegisterLeft(InterCodeProcedure* proc, int reg, int shift);
int ShortMultiply(InterCodeProcedure* proc, const InterInstruction& ins, const InterInstruction* sins, int index, int mul);
int ShortMultiply(InterCodeProcedure* proc, const InterInstruction * ins, const InterInstruction* sins, int index, int mul);
bool CheckPredAccuStore(int reg);

View File

@ -92,7 +92,7 @@ __forceinline bool FastNumberSet::operator[](int elem)
{
uint32 dw = buffer[size + elem];
return (dw < num&& buffer[dw] == elem);
return (dw < num && buffer[dw] == elem);
}
__forceinline FastNumberSet& FastNumberSet::operator+=(int elem)