summaryrefslogtreecommitdiff
path: root/src/jit/rationalize.cpp
diff options
context:
space:
mode:
authorJoseph Tremoulet <JCTremoulet@gmail.com>2017-05-19 20:20:12 -0400
committerGitHub <noreply@github.com>2017-05-19 20:20:12 -0400
commita96445ddc2c487b4adf79edd1d90a1646f2120dc (patch)
tree8c2bf7b05f56e6b0f912a38dd1cb3696615d0f52 /src/jit/rationalize.cpp
parenta940cf1c37a64a086733bbcb85532e88572bc96e (diff)
parentf152fa8603b30a93ba89b971ee8408b28493433d (diff)
downloadcoreclr-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.cpp33
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));