Index: src/hydrogen-escape-analysis.cc |
diff --git a/src/hydrogen-escape-analysis.cc b/src/hydrogen-escape-analysis.cc |
index 311091b6d993ddf78f7b373309d60b6869a249e7..b5086442fea9a62dc10685d2016ee85e8014848d 100644 |
--- a/src/hydrogen-escape-analysis.cc |
+++ b/src/hydrogen-escape-analysis.cc |
@@ -172,11 +172,14 @@ void HEscapeAnalysisPhase::AnalyzeDataFlow(HInstruction* allocate) { |
int index = store->access().offset() / kPointerSize; |
if (store->object() != allocate) continue; |
ASSERT(store->access().IsInobject()); |
- state = NewStateCopy(store, state); |
+ state = NewStateCopy(store->previous(), state); |
state->SetOperandAt(index, store->value()); |
if (store->has_transition()) { |
state->SetOperandAt(0, store->transition()); |
} |
+ if (store->HasObservableSideEffects()) { |
+ state->ReuseSideEffectsFromStore(store); |
+ } |
store->DeleteAndReplaceWith(NULL); |
if (FLAG_trace_escape_analysis) { |
PrintF("Replacing store #%d%s\n", instr->id(), |