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:
parent
93da46fc1a
commit
c7a51fdaa4
2 changed files with 7 additions and 38 deletions
|
@ -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;
|
||||
});
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue