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:
parent
c7f5b711ed
commit
c95095e5e2
1 changed files with 18 additions and 3 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue