| Index: src/compiler/js-typed-lowering.cc
|
| diff --git a/src/compiler/js-typed-lowering.cc b/src/compiler/js-typed-lowering.cc
|
| index c35691918c35e71a61786c2e8337b8f8a55589cb..b4c9332c1739662ba41e5ea6a34b44e1937a2b5b 100644
|
| --- a/src/compiler/js-typed-lowering.cc
|
| +++ b/src/compiler/js-typed-lowering.cc
|
| @@ -1390,63 +1390,11 @@ Reduction JSTypedLowering::ReduceJSStoreProperty(Node* node) {
|
| return NoChange();
|
| }
|
|
|
| -JSTypedLowering::InferHasInPrototypeChainResult
|
| -JSTypedLowering::InferHasInPrototypeChain(Node* receiver, Node* effect,
|
| - Handle<HeapObject> prototype) {
|
| - ZoneHandleSet<Map> receiver_maps;
|
| - NodeProperties::InferReceiverMapsResult result =
|
| - NodeProperties::InferReceiverMaps(receiver, effect, &receiver_maps);
|
| - if (result == NodeProperties::kNoReceiverMaps) return kMayBeInPrototypeChain;
|
| -
|
| - // Check if either all or none of the {receiver_maps} have the given
|
| - // {prototype} in their prototype chain.
|
| - bool all = true;
|
| - bool none = true;
|
| - for (size_t i = 0; i < receiver_maps.size(); ++i) {
|
| - Handle<Map> receiver_map = receiver_maps[i];
|
| - if (receiver_map->instance_type() <= LAST_SPECIAL_RECEIVER_TYPE) {
|
| - return kMayBeInPrototypeChain;
|
| - }
|
| - if (result == NodeProperties::kUnreliableReceiverMaps) {
|
| - // In case of an unreliable {result} we need to ensure that all
|
| - // {receiver_maps} are stable, because otherwise we cannot trust
|
| - // the {receiver_maps} information, since arbitrary side-effects
|
| - // may have happened.
|
| - if (!receiver_map->is_stable()) {
|
| - return kMayBeInPrototypeChain;
|
| - }
|
| - }
|
| - for (PrototypeIterator j(receiver_map);; j.Advance()) {
|
| - if (j.IsAtEnd()) {
|
| - all = false;
|
| - break;
|
| - }
|
| - Handle<HeapObject> const current =
|
| - PrototypeIterator::GetCurrent<HeapObject>(j);
|
| - if (current.is_identical_to(prototype)) {
|
| - none = false;
|
| - break;
|
| - }
|
| - if (!current->map()->is_stable() ||
|
| - current->map()->instance_type() <= LAST_SPECIAL_RECEIVER_TYPE) {
|
| - return kMayBeInPrototypeChain;
|
| - }
|
| - }
|
| - }
|
| - DCHECK_IMPLIES(all, !none);
|
| - DCHECK_IMPLIES(none, !all);
|
| -
|
| - if (all) return kIsInPrototypeChain;
|
| - if (none) return kIsNotInPrototypeChain;
|
| - return kMayBeInPrototypeChain;
|
| -}
|
| -
|
| Reduction JSTypedLowering::ReduceJSHasInPrototypeChain(Node* node) {
|
| DCHECK_EQ(IrOpcode::kJSHasInPrototypeChain, node->opcode());
|
| Node* value = NodeProperties::GetValueInput(node, 0);
|
| Type* value_type = NodeProperties::GetType(value);
|
| Node* prototype = NodeProperties::GetValueInput(node, 1);
|
| - Type* prototype_type = NodeProperties::GetType(prototype);
|
| Node* context = NodeProperties::GetContextInput(node);
|
| Node* frame_state = NodeProperties::GetFrameStateInput(node);
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
| @@ -1460,18 +1408,6 @@ Reduction JSTypedLowering::ReduceJSHasInPrototypeChain(Node* node) {
|
| return Replace(value);
|
| }
|
|
|
| - // Check if we can constant-fold the prototype chain walk
|
| - // for the given {value} and the {prototype}.
|
| - if (prototype_type->IsHeapConstant()) {
|
| - InferHasInPrototypeChainResult result = InferHasInPrototypeChain(
|
| - value, effect, prototype_type->AsHeapConstant()->Value());
|
| - if (result != kMayBeInPrototypeChain) {
|
| - Node* value = jsgraph()->BooleanConstant(result == kIsInPrototypeChain);
|
| - ReplaceWithValue(node, value, effect, control);
|
| - return Replace(value);
|
| - }
|
| - }
|
| -
|
| Node* check0 = graph()->NewNode(simplified()->ObjectIsSmi(), value);
|
| Node* branch0 =
|
| graph()->NewNode(common()->Branch(BranchHint::kFalse), check0, control);
|
|
|