summaryrefslogtreecommitdiff
path: root/src/jit/rationalize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jit/rationalize.cpp')
-rw-r--r--src/jit/rationalize.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/jit/rationalize.cpp b/src/jit/rationalize.cpp
index a07152f583..c0fb92486c 100644
--- a/src/jit/rationalize.cpp
+++ b/src/jit/rationalize.cpp
@@ -503,7 +503,7 @@ void Rationalizer::RewriteAssignment(LIR::Use& use)
{
storeBlk = new (comp, GT_STORE_BLK) GenTreeBlk(GT_STORE_BLK, TYP_STRUCT, location, value, size);
}
- storeBlk->gtFlags |= (GTF_REVERSE_OPS | GTF_ASG);
+ storeBlk->gtFlags |= GTF_ASG;
storeBlk->gtFlags |= ((location->gtFlags | value->gtFlags) & GTF_ALL_EFFECT);
GenTree* insertionPoint = location->gtNext;
@@ -540,11 +540,6 @@ void Rationalizer::RewriteAssignment(LIR::Use& use)
copyFlags(store, assignment, GTF_ALL_EFFECT);
copyFlags(store, location, GTF_IND_FLAGS);
- if (assignment->IsReverseOp())
- {
- store->gtFlags |= GTF_REVERSE_OPS;
- }
-
// TODO: JIT dump
// Remove the GT_IND node and replace the assignment node with the store
@@ -582,7 +577,8 @@ void Rationalizer::RewriteAssignment(LIR::Use& use)
storeOper = GT_STORE_OBJ;
break;
case GT_DYN_BLK:
- storeOper = GT_STORE_DYN_BLK;
+ storeOper = GT_STORE_DYN_BLK;
+ storeBlk->AsDynBlk()->gtEvalSizeFirst = false;
break;
default:
unreached();
@@ -591,8 +587,8 @@ void Rationalizer::RewriteAssignment(LIR::Use& use)
GenTree::NodeName(storeOper));
storeBlk->SetOperRaw(storeOper);
storeBlk->gtFlags &= ~GTF_DONT_CSE;
- storeBlk->gtFlags |= (assignment->gtFlags & (GTF_ALL_EFFECT | GTF_REVERSE_OPS | GTF_BLK_VOLATILE |
- GTF_BLK_UNALIGNED | GTF_DONT_CSE));
+ storeBlk->gtFlags |=
+ (assignment->gtFlags & (GTF_ALL_EFFECT | GTF_BLK_VOLATILE | GTF_BLK_UNALIGNED | GTF_DONT_CSE));
storeBlk->gtBlk.Data() = value;
// Replace the assignment node with the store
@@ -683,9 +679,13 @@ Compiler::fgWalkResult Rationalizer::RewriteNode(GenTree** useEdge, ArrayStack<G
for (GenTree* prev = node->gtPrev; prev != nullptr && prev->OperIsAnyList() && !(prev->OperIsFieldListHead());
prev = node->gtPrev)
{
+ prev->gtFlags &= ~GTF_REVERSE_OPS;
BlockRange().Remove(prev);
}
+ // Now clear the REVERSE_OPS flag on the current node.
+ node->gtFlags &= ~GTF_REVERSE_OPS;
+
// In addition, remove the current node if it is a GT_LIST node that is not an aggregate.
if (node->OperIsAnyList())
{