1
0
Fork 0
mirror of https://github.com/VSadov/Satori.git synced 2025-06-10 18:11:04 +09:00

JIT: Skip strength reductions that are just widenings (#105075)

The previous equality check does not catch the case where the SCEV is
just a widened version of the previous primary IV. We want to leave that
handling up to IV widening.
This commit is contained in:
Jakob Botsch Nielsen 2024-07-18 20:39:09 +02:00 committed by GitHub
parent c7f5b711ed
commit c95095e5e2
Signed by: github
GPG key ID: B5690EEEBB952194

View file

@ -1452,10 +1452,25 @@ bool StrengthReductionContext::TryStrengthReduce()
DBEXEC(VERBOSE, currentIV->Dump(m_comp));
JITDUMP("\n");
if (Scev::Equals(currentIV->Step, primaryIV->Step) && !StressProfitability())
if (!StressProfitability())
{
JITDUMP(" Skipping: candidate has same step as primary IV\n");
continue;
if (Scev::Equals(currentIV->Step, primaryIV->Step))
{
JITDUMP(" Skipping: Candidate has same step as primary IV\n");
continue;
}
// Leave widening up to widening.
int64_t newIVStep;
int64_t primaryIVStep;
if (currentIV->Step->TypeIs(TYP_LONG) && primaryIV->Step->TypeIs(TYP_INT) &&
currentIV->Step->GetConstantValue(m_comp, &newIVStep) &&
primaryIV->Step->GetConstantValue(m_comp, &primaryIVStep) &&
(int32_t)newIVStep == (int32_t)primaryIVStep)
{
JITDUMP(" Skipping: Candidate has same widened step as primary IV\n");
continue;
}
}
if (TryReplaceUsesWithNewPrimaryIV(cursors, currentIV))