diff options
author | Joseph Tremoulet <JCTremoulet@gmail.com> | 2017-05-19 20:20:12 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-19 20:20:12 -0400 |
commit | a96445ddc2c487b4adf79edd1d90a1646f2120dc (patch) | |
tree | 8c2bf7b05f56e6b0f912a38dd1cb3696615d0f52 /src/jit/rationalize.cpp | |
parent | a940cf1c37a64a086733bbcb85532e88572bc96e (diff) | |
parent | f152fa8603b30a93ba89b971ee8408b28493433d (diff) | |
download | coreclr-a96445ddc2c487b4adf79edd1d90a1646f2120dc.tar.gz coreclr-a96445ddc2c487b4adf79edd1d90a1646f2120dc.tar.bz2 coreclr-a96445ddc2c487b4adf79edd1d90a1646f2120dc.zip |
Merge pull request #10946 from JosephTremoulet/RationalFlags
Clear GTF_ASG from non-stores in rationalize
Diffstat (limited to 'src/jit/rationalize.cpp')
-rw-r--r-- | src/jit/rationalize.cpp | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/src/jit/rationalize.cpp b/src/jit/rationalize.cpp index ff1d210134..c0fb92486c 100644 --- a/src/jit/rationalize.cpp +++ b/src/jit/rationalize.cpp @@ -776,18 +776,17 @@ Compiler::fgWalkResult Rationalizer::RewriteNode(GenTree** useEdge, ArrayStack<G case GT_COMMA: { - GenTree* op1 = node->gtGetOp1(); - if ((op1->gtFlags & GTF_ALL_EFFECT) == 0) + GenTree* op1 = node->gtGetOp1(); + bool isClosed = false; + unsigned sideEffects = 0; + LIR::ReadOnlyRange lhsRange = BlockRange().GetTreeRange(op1, &isClosed, &sideEffects); + + if ((sideEffects & GTF_ALL_EFFECT) == 0) { // The LHS has no side effects. Remove it. - bool isClosed = false; - unsigned sideEffects = 0; - LIR::ReadOnlyRange lhsRange = BlockRange().GetTreeRange(op1, &isClosed, &sideEffects); - - // None of the transforms performed herein violate tree order, so these + // None of the transforms performed herein violate tree order, so isClosed // should always be true. assert(isClosed); - assert((sideEffects & GTF_ALL_EFFECT) == 0); BlockRange().Delete(comp, m_block, std::move(lhsRange)); } @@ -801,16 +800,15 @@ Compiler::fgWalkResult Rationalizer::RewriteNode(GenTree** useEdge, ArrayStack<G { // This is a top-level comma. If the RHS has no side effects we can remove // it as well. - if ((replacement->gtFlags & GTF_ALL_EFFECT) == 0) - { - bool isClosed = false; - unsigned sideEffects = 0; - LIR::ReadOnlyRange rhsRange = BlockRange().GetTreeRange(replacement, &isClosed, &sideEffects); + bool isClosed = false; + unsigned sideEffects = 0; + LIR::ReadOnlyRange rhsRange = BlockRange().GetTreeRange(replacement, &isClosed, &sideEffects); - // None of the transforms performed herein violate tree order, so these + if ((sideEffects & GTF_ALL_EFFECT) == 0) + { + // None of the transforms performed herein violate tree order, so isClosed // should always be true. assert(isClosed); - assert((sideEffects & GTF_ALL_EFFECT) == 0); BlockRange().Delete(comp, m_block, std::move(rhsRange)); } @@ -972,6 +970,11 @@ Compiler::fgWalkResult Rationalizer::RewriteNode(GenTree** useEdge, ArrayStack<G node->gtFlags &= ~GTF_ALL_EFFECT; } } + else if (!node->OperIsStore()) + { + // Clear the GTF_ASG flag for all nodes but stores + node->gtFlags &= ~GTF_ASG; + } assert(isLateArg == ((use.Def()->gtFlags & GTF_LATE_ARG) != 0)); |