Skip to content

Commit 261ca7f

Browse files
Fix a doubly nested loop in SSA (#2405)
1 parent b254866 commit 261ca7f

File tree

1 file changed

+14
-20
lines changed

1 file changed

+14
-20
lines changed

src/coreclr/jit/ssabuilder.cpp

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,7 +1357,7 @@ void SsaBuilder::BlockRenameVariables(BasicBlock* block)
13571357
void SsaBuilder::AddPhiArgsToSuccessors(BasicBlock* block)
13581358
{
13591359
block->VisitAllSuccs(m_pCompiler, [this, block](BasicBlock* succ) {
1360-
#if defined(TARGET_WASM)
1360+
#ifdef TARGET_WASM
13611361
if (block->IsLIR())
13621362
{
13631363
for (GenTree* tree : LIR::AsRange(succ))
@@ -1372,40 +1372,34 @@ void SsaBuilder::AddPhiArgsToSuccessors(BasicBlock* block)
13721372
continue; // skip the Phi nodes
13731373
}
13741374

1375-
unsigned lclNum = tree->AsLclVarCommon()->GetLclNum();
1376-
GenTreePhi* phi = tree->gtGetOp1()->AsPhi();
1375+
unsigned lclNum = tree->AsLclVar()->GetLclNum();
1376+
GenTreePhi* phi = tree->AsLclVar()->Data()->AsPhi();
13771377
unsigned ssaNum = m_renameStack.Top(lclNum);
13781378

13791379
AddPhiArg(succ, nullptr /* no statements in LIR form */, phi, lclNum, ssaNum, block);
13801380
}
13811381
}
13821382
else
1383+
#endif // TARGET_WASM
13831384
{
1384-
#endif
13851385
// Walk the statements for phi nodes.
13861386
for (Statement* const stmt : succ->Statements())
13871387
{
1388-
// Walk the statements for phi nodes.
1389-
for (Statement* const stmt : succ->Statements())
1388+
// A prefix of the statements of the block are phi definition nodes. If we complete processing
1389+
// that prefix, exit.
1390+
if (!stmt->IsPhiDefnStmt())
13901391
{
1391-
// A prefix of the statements of the block are phi definition nodes. If we complete processing
1392-
// that prefix, exit.
1393-
if (!stmt->IsPhiDefnStmt())
1394-
{
1395-
break;
1396-
}
1392+
break;
1393+
}
13971394

1398-
GenTreeLclVar* store = stmt->GetRootNode()->AsLclVar();
1399-
GenTreePhi* phi = store->Data()->AsPhi();
1400-
unsigned lclNum = store->GetLclNum();
1401-
unsigned ssaNum = m_renameStack.Top(lclNum);
1395+
GenTreeLclVar* store = stmt->GetRootNode()->AsLclVar();
1396+
GenTreePhi* phi = store->Data()->AsPhi();
1397+
unsigned lclNum = store->GetLclNum();
1398+
unsigned ssaNum = m_renameStack.Top(lclNum);
14021399

1403-
AddPhiArg(succ, stmt, phi, lclNum, ssaNum, block);
1404-
}
1400+
AddPhiArg(succ, stmt, phi, lclNum, ssaNum, block);
14051401
}
1406-
#if defined(TARGET_WASM)
14071402
}
1408-
#endif
14091403

14101404
// Now handle memory.
14111405
for (MemoryKind memoryKind : allMemoryKinds())

0 commit comments

Comments
 (0)