From 3cd146a66b3399e4bc84af4562c2305021d7d39f Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Wed, 5 Apr 2023 16:00:23 +0200 Subject: [PATCH 1/2] JIT: Set GTF_DEBUG_NODE_MORPHED properly in block morph With side effects that may go on top, it may be block morph's responsibility to set this flag. Also set the type of the reused GT_COMMA nodes; haven't actually seen any issues here, but seems prudent to do this. Fixes some stress issues seen over in #83771. --- src/coreclr/jit/morphblock.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/coreclr/jit/morphblock.cpp b/src/coreclr/jit/morphblock.cpp index b4922a84bc7595..e3e56858f590b9 100644 --- a/src/coreclr/jit/morphblock.cpp +++ b/src/coreclr/jit/morphblock.cpp @@ -144,7 +144,9 @@ GenTree* MorphInitBlockHelper::Morph() assert(m_result != nullptr); #ifdef DEBUG - if (m_result != m_asg) + // If we are going to return a different node than the input then morph + // expects us to have set GTF_DEBUG_NODE_MORPHED. + if ((m_result != m_asg) || (sideEffects != nullptr)) { m_result->gtDebugFlags |= GTF_DEBUG_NODE_MORPHED; } @@ -158,6 +160,7 @@ GenTree* MorphInitBlockHelper::Morph() commaPool = commaPool->gtNext; assert(comma->OperIs(GT_COMMA)); + comma->gtType = m_result->TypeGet(); comma->AsOp()->gtOp1 = sideEffects; comma->AsOp()->gtOp2 = m_result; comma->gtFlags = (sideEffects->gtFlags | m_result->gtFlags) & GTF_ALL_EFFECT; From b08ee232f14d3842b27d4f7eee9dc06a03938059 Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Wed, 5 Apr 2023 17:10:05 +0200 Subject: [PATCH 2/2] Run jit-format.... --- src/coreclr/jit/morphblock.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/jit/morphblock.cpp b/src/coreclr/jit/morphblock.cpp index e3e56858f590b9..6f60165a1295e8 100644 --- a/src/coreclr/jit/morphblock.cpp +++ b/src/coreclr/jit/morphblock.cpp @@ -160,7 +160,7 @@ GenTree* MorphInitBlockHelper::Morph() commaPool = commaPool->gtNext; assert(comma->OperIs(GT_COMMA)); - comma->gtType = m_result->TypeGet(); + comma->gtType = m_result->TypeGet(); comma->AsOp()->gtOp1 = sideEffects; comma->AsOp()->gtOp2 = m_result; comma->gtFlags = (sideEffects->gtFlags | m_result->gtFlags) & GTF_ALL_EFFECT;