| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index f4b6d039cb5aa11fef0a59b8b4a5e29237cd5447..3180f4d069d0e934a835c1f56382764e72eb1927 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -7612,88 +7612,6 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
|
| return true;
|
| }
|
| break;
|
| - case kArrayPop: {
|
| - if (!expr->IsMonomorphic() || expr->check_type() != RECEIVER_MAP_CHECK) {
|
| - return false;
|
| - }
|
| - if (receiver_map->instance_type() != JS_ARRAY_TYPE) return false;
|
| - ElementsKind elements_kind = receiver_map->elements_kind();
|
| - if (!IsFastElementsKind(elements_kind)) return false;
|
| - AddCheckConstantFunction(expr->holder(), receiver, receiver_map);
|
| -
|
| - Drop(expr->arguments()->length());
|
| - HValue* result;
|
| - HValue* checked_object;
|
| - HValue* reduced_length;
|
| - HValue* receiver = Pop();
|
| - { NoObservableSideEffectsScope scope(this);
|
| - checked_object = AddCheckMap(receiver, receiver_map);
|
| - HValue* elements = AddLoadElements(checked_object);
|
| - // Ensure that we aren't popping from a copy-on-write array.
|
| - if (IsFastSmiOrObjectElementsKind(elements_kind)) {
|
| - Add<HCheckMaps>(
|
| - elements, isolate()->factory()->fixed_array_map(), top_info());
|
| - }
|
| - HValue* length = Add<HLoadNamedField>(
|
| - checked_object, HObjectAccess::ForArrayLength(elements_kind));
|
| - reduced_length = AddUncasted<HSub>(length, graph()->GetConstant1());
|
| - HValue* bounds_check = Add<HBoundsCheck>(
|
| - graph()->GetConstant0(), length);
|
| - result = AddElementAccess(elements, reduced_length, NULL,
|
| - bounds_check, elements_kind, false);
|
| - Factory* factory = isolate()->factory();
|
| - double nan_double = FixedDoubleArray::hole_nan_as_double();
|
| - HValue* hole = IsFastSmiOrObjectElementsKind(elements_kind)
|
| - ? Add<HConstant>(factory->the_hole_value())
|
| - : Add<HConstant>(nan_double);
|
| - if (IsFastSmiOrObjectElementsKind(elements_kind)) {
|
| - elements_kind = FAST_HOLEY_ELEMENTS;
|
| - }
|
| - AddElementAccess(
|
| - elements, reduced_length, hole, bounds_check, elements_kind, true);
|
| - }
|
| - Add<HStoreNamedField>(
|
| - checked_object, HObjectAccess::ForArrayLength(elements_kind),
|
| - reduced_length);
|
| - ast_context()->ReturnValue(result);
|
| - Add<HSimulate>(expr->id(), REMOVABLE_SIMULATE);
|
| - return true;
|
| - }
|
| - case kArrayPush: {
|
| - if (!expr->IsMonomorphic() || expr->check_type() != RECEIVER_MAP_CHECK) {
|
| - return false;
|
| - }
|
| - if (receiver_map->instance_type() != JS_ARRAY_TYPE) return false;
|
| - ElementsKind elements_kind = receiver_map->elements_kind();
|
| - if (!IsFastElementsKind(elements_kind)) return false;
|
| - AddCheckConstantFunction(expr->holder(), receiver, receiver_map);
|
| -
|
| - HValue* op_vals[] = {
|
| - context(),
|
| - // Receiver.
|
| - environment()->ExpressionStackAt(expr->arguments()->length())
|
| - };
|
| -
|
| - const int argc = expr->arguments()->length();
|
| - // Includes receiver.
|
| - PushArgumentsFromEnvironment(argc + 1);
|
| -
|
| - CallInterfaceDescriptor* descriptor =
|
| - isolate()->call_descriptor(Isolate::CallHandler);
|
| -
|
| - ArrayPushStub stub(receiver_map->elements_kind(), argc);
|
| - Handle<Code> code = stub.GetCode(isolate());
|
| - HConstant* code_value = Add<HConstant>(code);
|
| -
|
| - ASSERT((sizeof(op_vals) / kPointerSize) ==
|
| - descriptor->environment_length());
|
| -
|
| - HInstruction* call = New<HCallWithDescriptor>(
|
| - code_value, argc + 1, descriptor,
|
| - Vector<HValue*>(op_vals, descriptor->environment_length()));
|
| - ast_context()->ReturnInstruction(call, expr->id());
|
| - return true;
|
| - }
|
| default:
|
| // Not yet supported for inlining.
|
| break;
|
|
|