Chromium Code Reviews| Index: src/compiler/escape-analysis.cc |
| diff --git a/src/compiler/escape-analysis.cc b/src/compiler/escape-analysis.cc |
| index 540699701224a72022f4d15bafd4a241d2a373d7..3abb62e87bcf0d220e11fa4a926a27ef362d2a1b 100644 |
| --- a/src/compiler/escape-analysis.cc |
| +++ b/src/compiler/escape-analysis.cc |
| @@ -849,6 +849,7 @@ void EscapeStatusAnalysis::DebugPrint() { |
| EscapeAnalysis::EscapeAnalysis(Graph* graph, CommonOperatorBuilder* common, |
| Zone* zone) |
| : zone_(zone), |
| + slot_not_analyzed_(graph->NewNode(common->NumberConstant(0.0))), |
|
Michael Starzinger
2016/05/23 08:58:53
I went with NumberConstant(0) mainly because it ca
Jarin
2016/05/23 09:45:54
Nit: I am wondering whether it would make sense to
Michael Starzinger
2016/05/23 09:57:13
Done.
|
| common_(common), |
| status_analysis_(new (zone) EscapeStatusAnalysis(this, graph, zone)), |
| virtual_states_(zone), |
| @@ -1460,6 +1461,15 @@ void EscapeAnalysis::ProcessStoreField(Node* node) { |
| if (obj && obj->IsTracked() && |
| static_cast<size_t>(offset) < obj->field_count()) { |
| Node* val = ResolveReplacement(NodeProperties::GetValueInput(node, 1)); |
| + // TODO(mstarzinger): The following is a workaround to not track the code |
| + // entry field in virtual JSFunction objects. We only ever store the inner |
| + // pointer into the compile lazy stub in this field and the deoptimizer has |
| + // this assumption hard-coded in {TranslatedState::MaterializeAt} as well. |
| + if (val->opcode() == IrOpcode::kInt32Constant || |
| + val->opcode() == IrOpcode::kInt64Constant) { |
| + DCHECK_EQ(JSFunction::kCodeEntryOffset, FieldAccessOf(node->op()).offset); |
| + val = slot_not_analyzed_; |
| + } |
| if (obj->GetField(offset) != val) { |
| obj = CopyForModificationAt(obj, state, node); |
| obj->SetField(offset, val); |