Index: src/compiler/escape-analysis.cc |
diff --git a/src/compiler/escape-analysis.cc b/src/compiler/escape-analysis.cc |
index 9ffdeb3e6d50e9d53523251cf592e21d28bb3c37..2d3b818cc3dce8aa54a63a9e1f1575027f6302b8 100644 |
--- a/src/compiler/escape-analysis.cc |
+++ b/src/compiler/escape-analysis.cc |
@@ -1517,30 +1517,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; |
+ } |
} |
} |
} |