From 7e002fd3c5d2b01a28f6af1679d17554d88098e9 Mon Sep 17 00:00:00 2001 From: Pat Gavlin Date: Tue, 25 Oct 2016 14:56:56 -0700 Subject: [PATCH] Clear side-effect flags on local reads in rationalize. These operations are always side-effect free. --- src/jit/rationalize.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/jit/rationalize.cpp b/src/jit/rationalize.cpp index 42c2cf6..70d9e7a 100644 --- a/src/jit/rationalize.cpp +++ b/src/jit/rationalize.cpp @@ -865,12 +865,18 @@ Compiler::fgWalkResult Rationalizer::RewriteNode(GenTree** useEdge, ArrayStackOperIsLocalRead()) + if (node->OperIsLocalRead()) { - assert((node->gtFlags & GTF_ALL_EFFECT) == 0); - - comp->lvaDecRefCnts(node); - BlockRange().Remove(node); + if (use.IsDummyUse()) + { + comp->lvaDecRefCnts(node); + BlockRange().Remove(node); + } + else + { + // Local reads are side-effect-free; clear any flags leftover from frontend transformations. + node->gtFlags &= ~GTF_ALL_EFFECT; + } } assert(isLateArg == ((use.Def()->gtFlags & GTF_LATE_ARG) != 0)); -- 2.7.4