From 91cf8b3934247a50d9c90ed9972f769928304eef Mon Sep 17 00:00:00 2001 From: Andy Ayers Date: Thu, 15 Apr 2021 13:38:57 -0700 Subject: [PATCH] JIT: fix BasicBlock::isEmpty() The detection of blocks with only PHI assignments was broken by #50806. Fix by using existing helper to find the first non-PHI assignment. Closes #51326. --- src/coreclr/jit/block.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/coreclr/jit/block.cpp b/src/coreclr/jit/block.cpp index 3634b78137941..c5eba8f51a72d 100644 --- a/src/coreclr/jit/block.cpp +++ b/src/coreclr/jit/block.cpp @@ -913,16 +913,27 @@ unsigned JitPtrKeyFuncs::GetHashCode(const BasicBlock* ptr) return ptr->bbNum; } +//------------------------------------------------------------------------ +// isEmpty: check if block is empty or contains only ignorable statements +// +// Return Value: +// True if block is empty, or contains only PHI assignments, +// or contains zero or more PHI assignments followed by NOPs. +// bool BasicBlock::isEmpty() { if (!IsLIR()) { - for (Statement* stmt : Statements()) + Statement* stmt = FirstNonPhiDef(); + + while (stmt != nullptr) { - if (!stmt->GetRootNode()->OperIs(GT_PHI, GT_NOP)) + if (!stmt->GetRootNode()->OperIs(GT_NOP)) { return false; } + + stmt = stmt->GetNextStmt(); } } else