Fix wrong loop invariant when result temp used before

This commit is contained in:
drmortalwombat 2024-09-21 13:50:14 +02:00
parent 2c9fd0e1a6
commit a04b09c737

View File

@ -18174,9 +18174,14 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
if (ins->mInvariant) if (ins->mInvariant)
{ {
for (int j = 0; j < ins->mNumOperands; j++) if (ins->mDst.mTemp >= 0 && IsTempReferencedInRange(0, i, ins->mDst.mTemp))
if (ins->mSrc[j].mTemp >= 0 && dep[ins->mSrc[j].mTemp] == DEP_VARIABLE) ins->mInvariant = false;
ins->mInvariant = false; else
{
for (int j = 0; j < ins->mNumOperands; j++)
if (ins->mSrc[j].mTemp >= 0 && dep[ins->mSrc[j].mTemp] == DEP_VARIABLE)
ins->mInvariant = false;
}
} }
if (ins->mInvariant) if (ins->mInvariant)