| Index: src/compiler/escape-analysis.cc
|
| diff --git a/src/compiler/escape-analysis.cc b/src/compiler/escape-analysis.cc
|
| index 2d6aa6bc56506d07c7feb8c3302e49173028843f..451471247da9c0730d1e8a72d2f0fa1b54783470 100644
|
| --- a/src/compiler/escape-analysis.cc
|
| +++ b/src/compiler/escape-analysis.cc
|
| @@ -1529,30 +1529,33 @@
|
| DCHECK_EQ(node->opcode(), IrOpcode::kCheckMaps);
|
| ForwardVirtualState(node);
|
| Node* checked = ResolveReplacement(NodeProperties::GetValueInput(node, 0));
|
| - VirtualState* state = virtual_states_[node->id()];
|
| - if (VirtualObject* object = GetVirtualObject(state, checked)) {
|
| - if (!object->IsTracked()) {
|
| - if (status_analysis_->SetEscaped(node)) {
|
| - TRACE(
|
| - "Setting #%d (%s) to escaped because checked object #%i is not "
|
| - "tracked\n",
|
| - node->id(), node->op()->mnemonic(), object->id());
|
| - }
|
| - return;
|
| - }
|
| - CheckMapsParameters params = CheckMapsParametersOf(node->op());
|
| -
|
| - Node* value = object->GetField(HeapObject::kMapOffset / kPointerSize);
|
| - if (value) {
|
| - value = ResolveReplacement(value);
|
| - // TODO(tebbi): We want to extend this beyond constant folding with a
|
| - // CheckMapsValue operator that takes the load-eliminated map value as
|
| - // input.
|
| - if (value->opcode() == IrOpcode::kHeapConstant &&
|
| - params.maps().contains(ZoneHandleSet<Map>(
|
| - Handle<Map>::cast(OpParameter<Handle<HeapObject>>(value))))) {
|
| - TRACE("CheckMaps #%i seems to be redundant (until now).\n", node->id());
|
| + if (FLAG_turbo_experimental) {
|
| + VirtualState* state = virtual_states_[node->id()];
|
| + if (VirtualObject* object = GetVirtualObject(state, checked)) {
|
| + if (!object->IsTracked()) {
|
| + if (status_analysis_->SetEscaped(node)) {
|
| + TRACE(
|
| + "Setting #%d (%s) to escaped because checked object #%i is not "
|
| + "tracked\n",
|
| + node->id(), node->op()->mnemonic(), object->id());
|
| + }
|
| return;
|
| + }
|
| + CheckMapsParameters params = CheckMapsParametersOf(node->op());
|
| +
|
| + Node* value = object->GetField(HeapObject::kMapOffset / kPointerSize);
|
| + if (value) {
|
| + value = ResolveReplacement(value);
|
| + // TODO(tebbi): We want to extend this beyond constant folding with a
|
| + // CheckMapsValue operator that takes the load-eliminated map value as
|
| + // input.
|
| + if (value->opcode() == IrOpcode::kHeapConstant &&
|
| + params.maps().contains(ZoneHandleSet<Map>(
|
| + Handle<Map>::cast(OpParameter<Handle<HeapObject>>(value))))) {
|
| + TRACE("CheckMaps #%i seems to be redundant (until now).\n",
|
| + node->id());
|
| + return;
|
| + }
|
| }
|
| }
|
| }
|
|
|