Fix assignment of immediates to returned struct
This commit is contained in:
parent
ecaab1b5b3
commit
7d6eb36ee7
|
@ -11188,7 +11188,7 @@ bool InterCodeBasicBlock::LoadStoreForwarding(const GrowingInstructionPtrArray&
|
||||||
{
|
{
|
||||||
InterInstruction* cins = mLoadStoreInstructions[j];
|
InterInstruction* cins = mLoadStoreInstructions[j];
|
||||||
|
|
||||||
int64 offset = ins->mSrc->mIntConst - cins->mSrc[1].mIntConst;
|
int64 offset = ins->mSrc[0].mIntConst - cins->mSrc[1].mIntConst;
|
||||||
ins->mSrc[0] = cins->mSrc[0];
|
ins->mSrc[0] = cins->mSrc[0];
|
||||||
ins->mSrc[0].mOperandSize = InterTypeSize[ins->mDst.mType];
|
ins->mSrc[0].mOperandSize = InterTypeSize[ins->mDst.mType];
|
||||||
ins->mSrc[0].mIntConst += offset;
|
ins->mSrc[0].mIntConst += offset;
|
||||||
|
@ -11263,7 +11263,7 @@ bool InterCodeBasicBlock::LoadStoreForwarding(const GrowingInstructionPtrArray&
|
||||||
InterInstruction* sins = mLoadStoreInstructions[j];
|
InterInstruction* sins = mLoadStoreInstructions[j];
|
||||||
if (sins->mCode == IC_STORE && SameMemSegment(ins->mSrc[0], sins->mSrc[1]))
|
if (sins->mCode == IC_STORE && SameMemSegment(ins->mSrc[0], sins->mSrc[1]))
|
||||||
{
|
{
|
||||||
int64 offset = sins->mSrc->mIntConst - ins->mSrc[0].mIntConst;
|
int64 offset = sins->mSrc[1].mIntConst - ins->mSrc[0].mIntConst;
|
||||||
if (offset >= 0 && offset < ins->mSrc[0].mOperandSize)
|
if (offset >= 0 && offset < ins->mSrc[0].mOperandSize)
|
||||||
{
|
{
|
||||||
InterInstruction* tins = sins->Clone();
|
InterInstruction* tins = sins->Clone();
|
||||||
|
@ -13144,7 +13144,7 @@ bool InterCodeBasicBlock::OptimizeIntervalCompare(void)
|
||||||
if (mInstructions[sz - 2]->mOperator == IA_CMPGES && mInstructions[sz - 2]->mSrc[0].mTemp == -1)
|
if (mInstructions[sz - 2]->mOperator == IA_CMPGES && mInstructions[sz - 2]->mSrc[0].mTemp == -1)
|
||||||
{
|
{
|
||||||
if (mTrueJump->mInstructions.Size() == 2 && mTrueJump->mInstructions[1]->mCode == IC_BRANCH && mTrueJump->mFalseJump == mFalseJump &&
|
if (mTrueJump->mInstructions.Size() == 2 && mTrueJump->mInstructions[1]->mCode == IC_BRANCH && mTrueJump->mFalseJump == mFalseJump &&
|
||||||
mTrueJump->mInstructions[0]->mCode == IC_RELATIONAL_OPERATOR && mTrueJump->mInstructions[0]->mDst.mTemp == mTrueJump->mInstructions[1]->mSrc->mTemp)
|
mTrueJump->mInstructions[0]->mCode == IC_RELATIONAL_OPERATOR && mTrueJump->mInstructions[0]->mDst.mTemp == mTrueJump->mInstructions[1]->mSrc[0].mTemp)
|
||||||
{
|
{
|
||||||
if (mTrueJump->mInstructions[0]->mSrc[0].mTemp == -1 && mTrueJump->mInstructions[0]->mSrc[1].mTemp == mInstructions[sz - 2]->mSrc[1].mTemp)
|
if (mTrueJump->mInstructions[0]->mSrc[0].mTemp == -1 && mTrueJump->mInstructions[0]->mSrc[1].mTemp == mInstructions[sz - 2]->mSrc[1].mTemp)
|
||||||
{
|
{
|
||||||
|
@ -13172,7 +13172,7 @@ bool InterCodeBasicBlock::OptimizeIntervalCompare(void)
|
||||||
else if (mInstructions[sz - 2]->mOperator == IA_CMPLS && mInstructions[sz - 2]->mSrc[0].mTemp == -1)
|
else if (mInstructions[sz - 2]->mOperator == IA_CMPLS && mInstructions[sz - 2]->mSrc[0].mTemp == -1)
|
||||||
{
|
{
|
||||||
if (mTrueJump->mInstructions.Size() == 2 && mTrueJump->mInstructions[1]->mCode == IC_BRANCH && mTrueJump->mFalseJump == mFalseJump &&
|
if (mTrueJump->mInstructions.Size() == 2 && mTrueJump->mInstructions[1]->mCode == IC_BRANCH && mTrueJump->mFalseJump == mFalseJump &&
|
||||||
mTrueJump->mInstructions[0]->mCode == IC_RELATIONAL_OPERATOR && mTrueJump->mInstructions[0]->mDst.mTemp == mTrueJump->mInstructions[1]->mSrc->mTemp)
|
mTrueJump->mInstructions[0]->mCode == IC_RELATIONAL_OPERATOR && mTrueJump->mInstructions[0]->mDst.mTemp == mTrueJump->mInstructions[1]->mSrc[0].mTemp)
|
||||||
{
|
{
|
||||||
if (mTrueJump->mInstructions[0]->mSrc[0].mTemp == -1 && mTrueJump->mInstructions[0]->mSrc[1].mTemp == mInstructions[sz - 2]->mSrc[1].mTemp)
|
if (mTrueJump->mInstructions[0]->mSrc[0].mTemp == -1 && mTrueJump->mInstructions[0]->mSrc[1].mTemp == mInstructions[sz - 2]->mSrc[1].mTemp)
|
||||||
{
|
{
|
||||||
|
@ -13190,7 +13190,7 @@ bool InterCodeBasicBlock::OptimizeIntervalCompare(void)
|
||||||
else if (mInstructions[sz - 2]->mOperator == IA_CMPLES && mInstructions[sz - 2]->mSrc[0].mTemp == -1)
|
else if (mInstructions[sz - 2]->mOperator == IA_CMPLES && mInstructions[sz - 2]->mSrc[0].mTemp == -1)
|
||||||
{
|
{
|
||||||
if (mTrueJump->mInstructions.Size() == 2 && mTrueJump->mInstructions[1]->mCode == IC_BRANCH && mTrueJump->mFalseJump == mFalseJump &&
|
if (mTrueJump->mInstructions.Size() == 2 && mTrueJump->mInstructions[1]->mCode == IC_BRANCH && mTrueJump->mFalseJump == mFalseJump &&
|
||||||
mTrueJump->mInstructions[0]->mCode == IC_RELATIONAL_OPERATOR && mTrueJump->mInstructions[0]->mDst.mTemp == mTrueJump->mInstructions[1]->mSrc->mTemp)
|
mTrueJump->mInstructions[0]->mCode == IC_RELATIONAL_OPERATOR && mTrueJump->mInstructions[0]->mDst.mTemp == mTrueJump->mInstructions[1]->mSrc[0].mTemp)
|
||||||
{
|
{
|
||||||
if (mTrueJump->mInstructions[0]->mSrc[0].mTemp == -1 && mTrueJump->mInstructions[0]->mSrc[1].mTemp == mInstructions[sz - 2]->mSrc[1].mTemp)
|
if (mTrueJump->mInstructions[0]->mSrc[0].mTemp == -1 && mTrueJump->mInstructions[0]->mSrc[1].mTemp == mInstructions[sz - 2]->mSrc[1].mTemp)
|
||||||
{
|
{
|
||||||
|
@ -16643,13 +16643,13 @@ bool InterCodeBasicBlock::PeepholeReplaceOptimization(const GrowingVariableArray
|
||||||
|
|
||||||
for (int i = 0; i < mInstructions.Size(); i++)
|
for (int i = 0; i < mInstructions.Size(); i++)
|
||||||
{
|
{
|
||||||
if (mInstructions[i]->mCode == IC_LOAD_TEMPORARY && mInstructions[i]->mDst.mTemp == mInstructions[i]->mSrc->mTemp)
|
if (mInstructions[i]->mCode == IC_LOAD_TEMPORARY && mInstructions[i]->mDst.mTemp == mInstructions[i]->mSrc[0].mTemp)
|
||||||
{
|
{
|
||||||
mInstructions[i]->mCode = IC_NONE;
|
mInstructions[i]->mCode = IC_NONE;
|
||||||
mInstructions[i]->mNumOperands = 0;
|
mInstructions[i]->mNumOperands = 0;
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
if (mInstructions[i]->mCode == IC_LOAD && mInstructions[i]->mSrc[0].mMemory == IM_GLOBAL && (mInstructions[i]->mSrc->mLinkerObject->mFlags & LOBJF_CONST))
|
if (mInstructions[i]->mCode == IC_LOAD && mInstructions[i]->mSrc[0].mMemory == IM_GLOBAL && (mInstructions[i]->mSrc[0].mLinkerObject->mFlags & LOBJF_CONST))
|
||||||
{
|
{
|
||||||
LoadConstantFold(mInstructions[i], nullptr, staticVars);
|
LoadConstantFold(mInstructions[i], nullptr, staticVars);
|
||||||
changed = true;
|
changed = true;
|
||||||
|
@ -19902,7 +19902,7 @@ void InterCodeProcedure::Close(void)
|
||||||
{
|
{
|
||||||
GrowingTypeArray tstack(IT_NONE);
|
GrowingTypeArray tstack(IT_NONE);
|
||||||
|
|
||||||
CheckFunc = !strcmp(mIdent->mString, "strcat");
|
CheckFunc = !strcmp(mIdent->mString, "_initFish");
|
||||||
CheckCase = false;
|
CheckCase = false;
|
||||||
|
|
||||||
mEntryBlock = mBlocks[0];
|
mEntryBlock = mBlocks[0];
|
||||||
|
|
Loading…
Reference in New Issue