Fix loss of loop head status in native basic blocks
This commit is contained in:
parent
e5805716e2
commit
8ede3abcab
|
@ -38900,7 +38900,6 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
|
|
||||||
RebuildEntry();
|
RebuildEntry();
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
if (step > 3)
|
if (step > 3)
|
||||||
{
|
{
|
||||||
|
@ -39055,7 +39054,6 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
if (step > 0)
|
if (step > 0)
|
||||||
{
|
{
|
||||||
|
@ -39075,9 +39073,7 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
changed = true;
|
changed = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ResetEntryBlocks();
|
RebuildEntry();
|
||||||
ResetVisited();
|
|
||||||
mEntryBlock->CollectEntryBlocks(nullptr);
|
|
||||||
|
|
||||||
#if _DEBUG
|
#if _DEBUG
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
|
@ -39092,11 +39088,7 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
|
|
||||||
if (step > 5 && !changed)
|
if (step > 5 && !changed)
|
||||||
{
|
{
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
|
@ -39175,7 +39167,6 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (step > 4 && !changed)
|
if (step > 4 && !changed)
|
||||||
{
|
{
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
|
@ -39292,7 +39283,6 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
changed = true;
|
changed = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
if (step >= 5)
|
if (step >= 5)
|
||||||
{
|
{
|
||||||
|
@ -39346,7 +39336,6 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
changed = true;
|
changed = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
if (mEntryBlock->ForwardZpXIndex(step >= 5))
|
if (mEntryBlock->ForwardZpXIndex(step >= 5))
|
||||||
|
|
|
@ -2275,15 +2275,18 @@ Expression* Parser::ParseStatement(void)
|
||||||
if ((initExp->mType == EX_ASSIGNMENT || initExp->mType == EX_INITIALIZATION) && initExp->mLeft->mType == EX_VARIABLE && initExp->mRight->mType == EX_CONSTANT &&
|
if ((initExp->mType == EX_ASSIGNMENT || initExp->mType == EX_INITIALIZATION) && initExp->mLeft->mType == EX_VARIABLE && initExp->mRight->mType == EX_CONSTANT &&
|
||||||
(iterateExp->mType == EX_POSTINCDEC || iterateExp->mType == EX_PREINCDEC || iterateExp->mType == EX_ASSIGNMENT && iterateExp->mToken == TK_ASSIGN_ADD && iterateExp->mRight->mType == EX_CONSTANT) &&
|
(iterateExp->mType == EX_POSTINCDEC || iterateExp->mType == EX_PREINCDEC || iterateExp->mType == EX_ASSIGNMENT && iterateExp->mToken == TK_ASSIGN_ADD && iterateExp->mRight->mType == EX_CONSTANT) &&
|
||||||
iterateExp->mLeft->IsSame(initExp->mLeft) &&
|
iterateExp->mLeft->IsSame(initExp->mLeft) &&
|
||||||
conditionExp->mType == EX_RELATIONAL && conditionExp->mToken == TK_LESS_THAN && conditionExp->mLeft->IsSame(initExp->mLeft) && conditionExp->mRight->mType == EX_CONSTANT)
|
conditionExp->mType == EX_RELATIONAL && (conditionExp->mToken == TK_LESS_THAN || conditionExp->mToken == TK_GREATER_THAN) && conditionExp->mLeft->IsSame(initExp->mLeft) && conditionExp->mRight->mType == EX_CONSTANT)
|
||||||
{
|
{
|
||||||
if (initExp->mRight->mDecValue->mType == DT_CONST_INTEGER && conditionExp->mRight->mDecValue->mType == DT_CONST_INTEGER)
|
if (initExp->mRight->mDecValue->mType == DT_CONST_INTEGER && conditionExp->mRight->mDecValue->mType == DT_CONST_INTEGER)
|
||||||
{
|
{
|
||||||
int startValue = int(initExp->mRight->mDecValue->mInteger);
|
int startValue = int(initExp->mRight->mDecValue->mInteger);
|
||||||
int endValue = int(conditionExp->mRight->mDecValue->mInteger);
|
int endValue = int(conditionExp->mRight->mDecValue->mInteger);
|
||||||
int stepValue = 1;
|
int stepValue = 1;
|
||||||
|
|
||||||
if (iterateExp->mType == EX_ASSIGNMENT)
|
if (iterateExp->mType == EX_ASSIGNMENT)
|
||||||
stepValue = int(iterateExp->mRight->mDecValue->mInteger);
|
stepValue = int(iterateExp->mRight->mDecValue->mInteger);
|
||||||
|
else if (iterateExp->mToken == TK_DEC)
|
||||||
|
stepValue = -1;
|
||||||
|
|
||||||
if (unrollPage)
|
if (unrollPage)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue