| Index: src/code-stubs-hydrogen.cc
|
| diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc
|
| index 3514beed0669a2fdfa01ebe7571d4e407a050cff..ab58db0f27dd8b87510ecc10882f7e7438142314 100644
|
| --- a/src/code-stubs-hydrogen.cc
|
| +++ b/src/code-stubs-hydrogen.cc
|
| @@ -339,85 +339,6 @@ Handle<Code> NumberToStringStub::GenerateCode() {
|
| return DoGenerateCode(this);
|
| }
|
|
|
| -
|
| -template <>
|
| -HValue* CodeStubGraphBuilder<FastCloneShallowArrayStub>::BuildCodeStub() {
|
| - Factory* factory = isolate()->factory();
|
| - HValue* undefined = graph()->GetConstantUndefined();
|
| - AllocationSiteMode alloc_site_mode = casted_stub()->allocation_site_mode();
|
| - HValue* closure = GetParameter(Descriptor::kClosure);
|
| - HValue* literal_index = GetParameter(Descriptor::kLiteralIndex);
|
| -
|
| - // TODO(turbofan): This codestub has regressed to need a frame on ia32 at some
|
| - // point and wasn't caught since it wasn't built in the snapshot. We should
|
| - // probably just replace with a TurboFan stub rather than fixing it.
|
| -#if !(V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87)
|
| - // This stub is very performance sensitive, the generated code must be tuned
|
| - // so that it doesn't build and eager frame.
|
| - info()->MarkMustNotHaveEagerFrame();
|
| -#endif
|
| -
|
| - HValue* literals_array = Add<HLoadNamedField>(
|
| - closure, nullptr, HObjectAccess::ForLiteralsPointer());
|
| -
|
| - HInstruction* allocation_site = Add<HLoadKeyed>(
|
| - literals_array, literal_index, nullptr, nullptr, FAST_ELEMENTS,
|
| - NEVER_RETURN_HOLE, LiteralsArray::kOffsetToFirstLiteral - kHeapObjectTag);
|
| - IfBuilder checker(this);
|
| - checker.IfNot<HCompareObjectEqAndBranch, HValue*>(allocation_site,
|
| - undefined);
|
| - checker.Then();
|
| -
|
| - HObjectAccess access = HObjectAccess::ForAllocationSiteOffset(
|
| - AllocationSite::kTransitionInfoOffset);
|
| - HInstruction* boilerplate =
|
| - Add<HLoadNamedField>(allocation_site, nullptr, access);
|
| - HValue* elements = AddLoadElements(boilerplate);
|
| - HValue* capacity = AddLoadFixedArrayLength(elements);
|
| - IfBuilder zero_capacity(this);
|
| - zero_capacity.If<HCompareNumericAndBranch>(capacity, graph()->GetConstant0(),
|
| - Token::EQ);
|
| - zero_capacity.Then();
|
| - Push(BuildCloneShallowArrayEmpty(boilerplate,
|
| - allocation_site,
|
| - alloc_site_mode));
|
| - zero_capacity.Else();
|
| - IfBuilder if_fixed_cow(this);
|
| - if_fixed_cow.If<HCompareMap>(elements, factory->fixed_cow_array_map());
|
| - if_fixed_cow.Then();
|
| - Push(BuildCloneShallowArrayCow(boilerplate,
|
| - allocation_site,
|
| - alloc_site_mode,
|
| - FAST_ELEMENTS));
|
| - if_fixed_cow.Else();
|
| - IfBuilder if_fixed(this);
|
| - if_fixed.If<HCompareMap>(elements, factory->fixed_array_map());
|
| - if_fixed.Then();
|
| - Push(BuildCloneShallowArrayNonEmpty(boilerplate,
|
| - allocation_site,
|
| - alloc_site_mode,
|
| - FAST_ELEMENTS));
|
| -
|
| - if_fixed.Else();
|
| - Push(BuildCloneShallowArrayNonEmpty(boilerplate,
|
| - allocation_site,
|
| - alloc_site_mode,
|
| - FAST_DOUBLE_ELEMENTS));
|
| - if_fixed.End();
|
| - if_fixed_cow.End();
|
| - zero_capacity.End();
|
| -
|
| - checker.ElseDeopt(DeoptimizeReason::kUninitializedBoilerplateLiterals);
|
| - checker.End();
|
| -
|
| - return environment()->Pop();
|
| -}
|
| -
|
| -
|
| -Handle<Code> FastCloneShallowArrayStub::GenerateCode() {
|
| - return DoGenerateCode(this);
|
| -}
|
| -
|
| HValue* CodeStubGraphBuilderBase::BuildPushElement(HValue* object, HValue* argc,
|
| HValue* argument_elements,
|
| ElementsKind kind) {
|
| @@ -468,6 +389,7 @@ template <>
|
| HValue* CodeStubGraphBuilder<FastArrayPushStub>::BuildCodeStub() {
|
| // TODO(verwaest): Fix deoptimizer messages.
|
| HValue* argc = GetArgumentsLength();
|
| +
|
| HInstruction* argument_elements = Add<HArgumentsElements>(false, false);
|
| HInstruction* object = Add<HAccessArgumentsAt>(argument_elements, argc,
|
| graph()->GetConstantMinus1());
|
|
|