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

JIT: Remove loop-related VN quirks (#95729)

Some minor diffs expected from increased VN precision around newly
recognized loops, which leads to different CSEs.
This commit is contained in:
Jakob Botsch Nielsen 2023-12-13 11:02:43 +01:00 committed by GitHub
parent 93da46fc1a
commit c7a51fdaa4
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 38 deletions

View file

@ -6952,14 +6952,6 @@ void Compiler::optRecordLoopMemoryDependence(GenTree* tree, BasicBlock* block, V
return;
}
// TODO-Quirk: Remove
if (m_newToOldLoop[updateLoop->GetIndex()] == nullptr)
{
return;
}
assert(!m_newToOldLoop[updateLoop->GetIndex()]->lpIsRemoved());
// If the update block is not the header of a loop containing
// block, we can also ignore the update.
//
@ -8365,17 +8357,8 @@ void Compiler::optComputeLoopSideEffects()
// limited treatment assignments it has seen the value of.
loop->VisitLoopBlocksReversePostOrder([=](BasicBlock* loopBlock) {
FlowGraphNaturalLoop* loop = m_blockToLoop->GetLoop(loopBlock);
// TODO-Quirk: Remove
while ((loop != nullptr) && (m_newToOldLoop[loop->GetIndex()] == nullptr))
{
loop = loop->GetParent();
}
if (loop != nullptr)
{
optComputeLoopSideEffectsOfBlock(loopBlock, loop);
}
assert(loop != nullptr);
optComputeLoopSideEffectsOfBlock(loopBlock, loop);
return BasicBlockVisit::Continue;
});

View file

@ -2765,16 +2765,9 @@ ValueNum ValueNumStore::VNForMapStore(ValueNum map, ValueNum index, ValueNum val
{
assert(MapIsPrecise(map));
BasicBlock* const bb = m_pComp->compCurBB;
FlowGraphNaturalLoop* bbLoop = m_pComp->m_blockToLoop->GetLoop(bb);
// TODO-Quirk: Remove
while ((bbLoop != nullptr) && (m_pComp->m_newToOldLoop[bbLoop->GetIndex()] == nullptr))
{
bbLoop = bbLoop->GetParent();
}
unsigned loopIndex = bbLoop == nullptr ? UINT_MAX : bbLoop->GetIndex();
BasicBlock* const bb = m_pComp->compCurBB;
FlowGraphNaturalLoop* bbLoop = m_pComp->m_blockToLoop->GetLoop(bb);
unsigned loopIndex = bbLoop == nullptr ? UINT_MAX : bbLoop->GetIndex();
ValueNum const result = VNForFunc(TypeOfVN(map), VNF_MapStore, map, index, value, loopIndex);
@ -5229,14 +5222,7 @@ ValueNum ValueNumStore::VNForExpr(BasicBlock* block, var_types type)
if (block != nullptr)
{
FlowGraphNaturalLoop* loop = m_pComp->m_blockToLoop->GetLoop(block);
// TODO-Quirk: Remove
while ((loop != nullptr) && (m_pComp->m_newToOldLoop[loop->GetIndex()] == nullptr))
{
loop = loop->GetParent();
}
loopIndex = loop == nullptr ? ValueNumStore::NoLoop : loop->GetIndex();
loopIndex = loop == nullptr ? ValueNumStore::NoLoop : loop->GetIndex();
}
// VNForFunc(typ, func, vn) but bypasses looking in the cache
@ -10038,7 +10024,7 @@ void Compiler::fgValueNumberBlock(BasicBlock* blk)
ValueNum newMemoryVN;
FlowGraphNaturalLoop* loop = m_blockToLoop->GetLoop(blk);
if ((loop != nullptr) && (loop->GetHeader() == blk) && (m_newToOldLoop[loop->GetIndex()] != nullptr))
if ((loop != nullptr) && (loop->GetHeader() == blk))
{
newMemoryVN = fgMemoryVNForLoopSideEffects(memoryKind, blk, loop);
}