| Index: src/code-stubs-hydrogen.cc
|
| diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc
|
| index b6a8a668bcf57cabc250e2a0407710b9f25d6394..d6ab1b59b91975dcd07cdeac93d8b7ee604543db 100644
|
| --- a/src/code-stubs-hydrogen.cc
|
| +++ b/src/code-stubs-hydrogen.cc
|
| @@ -136,7 +136,6 @@ bool CodeStubGraphBuilderBase::BuildGraph() {
|
| isolate()->GetHTracer()->TraceCompilation(&info_);
|
| }
|
|
|
| - Zone* zone = this->zone();
|
| int param_count = descriptor_->register_param_count_;
|
| HEnvironment* start_environment = graph()->start_environment();
|
| HBasicBlock* next_block = CreateBasicBlock(start_environment);
|
| @@ -144,15 +143,13 @@ bool CodeStubGraphBuilderBase::BuildGraph() {
|
| next_block->SetJoinId(BailoutId::StubEntry());
|
| set_current_block(next_block);
|
|
|
| - HConstant* undefined_constant = new(zone) HConstant(
|
| - isolate()->factory()->undefined_value());
|
| - AddInstruction(undefined_constant);
|
| + HConstant* undefined_constant =
|
| + Add<HConstant>(isolate()->factory()->undefined_value());
|
| graph()->set_undefined_constant(undefined_constant);
|
|
|
| for (int i = 0; i < param_count; ++i) {
|
| HParameter* param =
|
| - new(zone) HParameter(i, HParameter::REGISTER_PARAMETER);
|
| - AddInstruction(param);
|
| + Add<HParameter>(i, HParameter::REGISTER_PARAMETER);
|
| start_environment->Bind(i, param);
|
| parameters_[i] = param;
|
| }
|
| @@ -160,9 +157,9 @@ bool CodeStubGraphBuilderBase::BuildGraph() {
|
| HInstruction* stack_parameter_count;
|
| if (descriptor_->stack_parameter_count_ != NULL) {
|
| ASSERT(descriptor_->environment_length() == (param_count + 1));
|
| - stack_parameter_count = new(zone) HParameter(param_count,
|
| - HParameter::REGISTER_PARAMETER,
|
| - Representation::Integer32());
|
| + stack_parameter_count = New<HParameter>(param_count,
|
| + HParameter::REGISTER_PARAMETER,
|
| + Representation::Integer32());
|
| stack_parameter_count->set_type(HType::Smi());
|
| // It's essential to bind this value to the environment in case of deopt.
|
| AddInstruction(stack_parameter_count);
|
| @@ -174,7 +171,7 @@ bool CodeStubGraphBuilderBase::BuildGraph() {
|
| arguments_length_ = graph()->GetConstant0();
|
| }
|
|
|
| - context_ = new(zone) HContext();
|
| + context_ = New<HContext>();
|
| AddInstruction(context_);
|
| start_environment->BindContext(context_);
|
|
|
| @@ -191,20 +188,18 @@ bool CodeStubGraphBuilderBase::BuildGraph() {
|
| if (!stack_parameter_count->IsConstant() &&
|
| descriptor_->hint_stack_parameter_count_ < 0) {
|
| HInstruction* amount = graph()->GetConstant1();
|
| - stack_pop_count = AddInstruction(
|
| - HAdd::New(zone, context_, stack_parameter_count, amount));
|
| + stack_pop_count = Add<HAdd>(stack_parameter_count, amount);
|
| stack_pop_count->ChangeRepresentation(Representation::Integer32());
|
| stack_pop_count->ClearFlag(HValue::kCanOverflow);
|
| } else {
|
| int count = descriptor_->hint_stack_parameter_count_;
|
| - stack_pop_count = AddInstruction(new(zone) HConstant(count));
|
| + stack_pop_count = Add<HConstant>(count);
|
| }
|
| }
|
|
|
| if (current_block() != NULL) {
|
| - HReturn* hreturn_instruction = new(zone) HReturn(return_value,
|
| - context_,
|
| - stack_pop_count);
|
| + HReturn* hreturn_instruction = New<HReturn>(return_value,
|
| + stack_pop_count);
|
| current_block()->Finish(hreturn_instruction);
|
| set_current_block(NULL);
|
| }
|
| @@ -322,9 +317,9 @@ HValue* CodeStubGraphBuilder<ToNumberStub>::BuildCodeStub() {
|
| if_number.Else();
|
|
|
| // Convert the parameter to number using the builtin.
|
| - HValue* function = AddLoadJSBuiltin(Builtins::TO_NUMBER, context());
|
| + HValue* function = AddLoadJSBuiltin(Builtins::TO_NUMBER);
|
| Add<HPushArgument>(value);
|
| - Push(Add<HInvokeFunction>(context(), function, 1));
|
| + Push(Add<HInvokeFunction>(function, 1));
|
|
|
| if_number.End();
|
|
|
| @@ -339,32 +334,30 @@ Handle<Code> ToNumberStub::GenerateCode() {
|
|
|
| template <>
|
| HValue* CodeStubGraphBuilder<FastCloneShallowArrayStub>::BuildCodeStub() {
|
| - Zone* zone = this->zone();
|
| Factory* factory = isolate()->factory();
|
| HValue* undefined = graph()->GetConstantUndefined();
|
| AllocationSiteMode alloc_site_mode = casted_stub()->allocation_site_mode();
|
| FastCloneShallowArrayStub::Mode mode = casted_stub()->mode();
|
| int length = casted_stub()->length();
|
|
|
| - HInstruction* allocation_site =
|
| - AddInstruction(new(zone) HLoadKeyed(GetParameter(0),
|
| - GetParameter(1),
|
| - NULL,
|
| - FAST_ELEMENTS));
|
| + HInstruction* allocation_site = Add<HLoadKeyed>(GetParameter(0),
|
| + GetParameter(1),
|
| + static_cast<HValue*>(NULL),
|
| + FAST_ELEMENTS);
|
| IfBuilder checker(this);
|
| - checker.IfNot<HCompareObjectEqAndBranch, HValue*>(allocation_site, undefined);
|
| + checker.IfNot<HCompareObjectEqAndBranch, HValue*>(allocation_site,
|
| + undefined);
|
| checker.Then();
|
|
|
| HObjectAccess access = HObjectAccess::ForAllocationSiteTransitionInfo();
|
| - HInstruction* boilerplate = AddLoad(allocation_site, access);
|
| + HInstruction* boilerplate = Add<HLoadNamedField>(allocation_site, access);
|
| if (mode == FastCloneShallowArrayStub::CLONE_ANY_ELEMENTS) {
|
| HValue* elements = AddLoadElements(boilerplate);
|
|
|
| IfBuilder if_fixed_cow(this);
|
| if_fixed_cow.If<HCompareMap>(elements, factory->fixed_cow_array_map());
|
| if_fixed_cow.Then();
|
| - environment()->Push(BuildCloneShallowArray(context(),
|
| - boilerplate,
|
| + environment()->Push(BuildCloneShallowArray(boilerplate,
|
| allocation_site,
|
| alloc_site_mode,
|
| FAST_ELEMENTS,
|
| @@ -374,23 +367,20 @@ HValue* CodeStubGraphBuilder<FastCloneShallowArrayStub>::BuildCodeStub() {
|
| IfBuilder if_fixed(this);
|
| if_fixed.If<HCompareMap>(elements, factory->fixed_array_map());
|
| if_fixed.Then();
|
| - environment()->Push(BuildCloneShallowArray(context(),
|
| - boilerplate,
|
| + environment()->Push(BuildCloneShallowArray(boilerplate,
|
| allocation_site,
|
| alloc_site_mode,
|
| FAST_ELEMENTS,
|
| length));
|
| if_fixed.Else();
|
| - environment()->Push(BuildCloneShallowArray(context(),
|
| - boilerplate,
|
| + environment()->Push(BuildCloneShallowArray(boilerplate,
|
| allocation_site,
|
| alloc_site_mode,
|
| FAST_DOUBLE_ELEMENTS,
|
| length));
|
| } else {
|
| ElementsKind elements_kind = casted_stub()->ComputeElementsKind();
|
| - environment()->Push(BuildCloneShallowArray(context(),
|
| - boilerplate,
|
| + environment()->Push(BuildCloneShallowArray(boilerplate,
|
| allocation_site,
|
| alloc_site_mode,
|
| elements_kind,
|
| @@ -414,34 +404,33 @@ HValue* CodeStubGraphBuilder<FastCloneShallowObjectStub>::BuildCodeStub() {
|
| Zone* zone = this->zone();
|
| HValue* undefined = graph()->GetConstantUndefined();
|
|
|
| - HInstruction* boilerplate =
|
| - AddInstruction(new(zone) HLoadKeyed(GetParameter(0),
|
| - GetParameter(1),
|
| - NULL,
|
| - FAST_ELEMENTS));
|
| + HInstruction* boilerplate = Add<HLoadKeyed>(GetParameter(0),
|
| + GetParameter(1),
|
| + static_cast<HValue*>(NULL),
|
| + FAST_ELEMENTS);
|
|
|
| IfBuilder checker(this);
|
| - checker.IfNot<HCompareObjectEqAndBranch, HValue*>(boilerplate, undefined);
|
| + checker.IfNot<HCompareObjectEqAndBranch, HValue*>(boilerplate,
|
| + undefined);
|
| checker.And();
|
|
|
| int size = JSObject::kHeaderSize + casted_stub()->length() * kPointerSize;
|
| HValue* boilerplate_size =
|
| AddInstruction(new(zone) HInstanceSize(boilerplate));
|
| - HValue* size_in_words =
|
| - AddInstruction(new(zone) HConstant(size >> kPointerSizeLog2));
|
| + HValue* size_in_words = Add<HConstant>(size >> kPointerSizeLog2);
|
| checker.If<HCompareNumericAndBranch>(boilerplate_size,
|
| size_in_words, Token::EQ);
|
| checker.Then();
|
|
|
| - HValue* size_in_bytes = AddInstruction(new(zone) HConstant(size));
|
| + HValue* size_in_bytes = Add<HConstant>(size);
|
|
|
| - HInstruction* object = AddInstruction(new(zone)
|
| - HAllocate(context(), size_in_bytes, HType::JSObject(),
|
| - isolate()->heap()->ShouldGloballyPretenure()));
|
| + HInstruction* object = Add<HAllocate>(size_in_bytes, HType::JSObject(),
|
| + isolate()->heap()->ShouldGloballyPretenure());
|
|
|
| for (int i = 0; i < size; i += kPointerSize) {
|
| HObjectAccess access = HObjectAccess::ForJSObjectOffset(i);
|
| - AddStore(object, access, AddLoad(boilerplate, access));
|
| + Add<HStoreNamedField>(object, access,
|
| + Add<HLoadNamedField>(boilerplate, access));
|
| }
|
|
|
| environment()->Push(object);
|
| @@ -460,8 +449,7 @@ Handle<Code> FastCloneShallowObjectStub::GenerateCode() {
|
| template <>
|
| HValue* CodeStubGraphBuilder<CreateAllocationSiteStub>::BuildCodeStub() {
|
| HValue* size = Add<HConstant>(AllocationSite::kSize);
|
| - HInstruction* object = Add<HAllocate>(
|
| - context(), size, HType::JSObject(), true);
|
| + HInstruction* object = Add<HAllocate>(size, HType::JSObject(), true);
|
|
|
| // Store the map
|
| Handle<Map> allocation_site_map(isolate()->heap()->allocation_site_map(),
|
| @@ -477,11 +465,14 @@ HValue* CodeStubGraphBuilder<CreateAllocationSiteStub>::BuildCodeStub() {
|
| // Link the object to the allocation site list
|
| HValue* site_list = Add<HConstant>(
|
| ExternalReference::allocation_sites_list_address(isolate()));
|
| - HValue* site = AddLoad(site_list, HObjectAccess::ForAllocationSiteList());
|
| + HValue* site = Add<HLoadNamedField>(site_list,
|
| + HObjectAccess::ForAllocationSiteList());
|
| HStoreNamedField* store =
|
| - AddStore(object, HObjectAccess::ForAllocationSiteWeakNext(), site);
|
| + Add<HStoreNamedField>(object, HObjectAccess::ForAllocationSiteWeakNext(),
|
| + site);
|
| store->SkipWriteBarrier();
|
| - AddStore(site_list, HObjectAccess::ForAllocationSiteList(), object);
|
| + Add<HStoreNamedField>(site_list, HObjectAccess::ForAllocationSiteList(),
|
| + object);
|
|
|
| // We use a hammer (SkipWriteBarrier()) to indicate that we know the input
|
| // cell is really a Cell, and so no write barrier is needed.
|
| @@ -489,7 +480,7 @@ HValue* CodeStubGraphBuilder<CreateAllocationSiteStub>::BuildCodeStub() {
|
| // a cell. (perhaps with a new instruction, HAssert).
|
| HInstruction* cell = GetParameter(0);
|
| HObjectAccess access = HObjectAccess::ForCellValue();
|
| - store = AddStore(cell, access, object);
|
| + store = Add<HStoreNamedField>(cell, access, object);
|
| store->SkipWriteBarrier();
|
| return cell;
|
| }
|
| @@ -586,14 +577,14 @@ HValue* CodeStubGraphBuilderBase::BuildArrayConstructor(
|
| ArgumentClass argument_class) {
|
| HValue* constructor = GetParameter(ArrayConstructorStubBase::kConstructor);
|
| if (context_mode == CONTEXT_CHECK_REQUIRED) {
|
| - HInstruction* array_function = BuildGetArrayFunction(context());
|
| + HInstruction* array_function = BuildGetArrayFunction();
|
| ArrayContextChecker checker(this, constructor, array_function);
|
| }
|
|
|
| HValue* property_cell = GetParameter(ArrayConstructorStubBase::kPropertyCell);
|
| // Walk through the property cell to the AllocationSite
|
| - HValue* alloc_site = AddInstruction(new(zone()) HLoadNamedField(property_cell,
|
| - HObjectAccess::ForCellValue()));
|
| + HValue* alloc_site = Add<HLoadNamedField>(property_cell,
|
| + HObjectAccess::ForCellValue());
|
| JSArrayBuilder array_builder(this, kind, alloc_site, constructor,
|
| override_mode);
|
| HValue* result = NULL;
|
| @@ -641,19 +632,17 @@ HValue* CodeStubGraphBuilderBase::BuildArraySingleArgumentConstructor(
|
| HValue* constant_one = graph()->GetConstant1();
|
| HValue* constant_zero = graph()->GetConstant0();
|
|
|
| - HInstruction* elements = AddInstruction(
|
| - new(zone()) HArgumentsElements(false));
|
| + HInstruction* elements = Add<HArgumentsElements>(false);
|
| HInstruction* argument = AddInstruction(
|
| new(zone()) HAccessArgumentsAt(elements, constant_one, constant_zero));
|
|
|
| HConstant* max_alloc_length =
|
| - new(zone()) HConstant(JSObject::kInitialMaxFastElementArray);
|
| - AddInstruction(max_alloc_length);
|
| + Add<HConstant>(JSObject::kInitialMaxFastElementArray);
|
| const int initial_capacity = JSArray::kPreallocatedArrayElements;
|
| - HConstant* initial_capacity_node = new(zone()) HConstant(initial_capacity);
|
| + HConstant* initial_capacity_node = New<HConstant>(initial_capacity);
|
| AddInstruction(initial_capacity_node);
|
|
|
| - HBoundsCheck* checked_arg = Add<HBoundsCheck>(argument, max_alloc_length);
|
| + HInstruction* checked_arg = Add<HBoundsCheck>(argument, max_alloc_length);
|
| IfBuilder if_builder(this);
|
| if_builder.If<HCompareNumericAndBranch>(checked_arg, constant_zero,
|
| Token::EQ);
|
| @@ -693,12 +682,11 @@ HValue* CodeStubGraphBuilderBase::BuildArrayNArgumentsConstructor(
|
| LoopBuilder::kPostIncrement);
|
| HValue* start = graph()->GetConstant0();
|
| HValue* key = builder.BeginBody(start, length, Token::LT);
|
| - HInstruction* argument_elements = AddInstruction(
|
| - new(zone()) HArgumentsElements(false));
|
| + HInstruction* argument_elements = Add<HArgumentsElements>(false);
|
| HInstruction* argument = AddInstruction(new(zone()) HAccessArgumentsAt(
|
| argument_elements, length, key));
|
|
|
| - AddInstruction(new(zone()) HStoreKeyed(elements, key, argument, kind));
|
| + Add<HStoreKeyed>(elements, key, argument, kind);
|
| builder.EndBody();
|
| return new_object;
|
| }
|
| @@ -821,8 +809,7 @@ HValue* CodeStubGraphBuilder<UnaryOpStub>::BuildCodeInitializedStub() {
|
| // Prevent unwanted HChange being inserted to ensure that the stub
|
| // deopts on newly encountered types.
|
| if (!type->Maybe(Type::Double())) {
|
| - input = AddInstruction(new(zone())
|
| - HForceRepresentation(input, Representation::Smi()));
|
| + input = Add<HForceRepresentation>(input, Representation::Smi());
|
| }
|
|
|
| if (!type->Is(Type::Number())) {
|
| @@ -834,9 +821,9 @@ HValue* CodeStubGraphBuilder<UnaryOpStub>::BuildCodeInitializedStub() {
|
| HInstruction* res = BuildUnaryMathOp(input, type, stub->operation());
|
| if_number.Return(AddInstruction(res));
|
| if_number.Else();
|
| - HValue* function = AddLoadJSBuiltin(stub->ToJSBuiltin(), context());
|
| + HValue* function = AddLoadJSBuiltin(stub->ToJSBuiltin());
|
| Add<HPushArgument>(GetParameter(0));
|
| - HValue* result = Add<HInvokeFunction>(context(), function, 1);
|
| + HValue* result = Add<HInvokeFunction>(function, 1);
|
| if_number.Return(result);
|
| if_number.End();
|
| return graph()->GetConstantUndefined();
|
| @@ -884,10 +871,9 @@ HValue* CodeStubGraphBuilder<StoreGlobalStub>::BuildCodeInitializedStub() {
|
| // Check that the map of the global has not changed: use a placeholder map
|
| // that will be replaced later with the global object's map.
|
| Handle<Map> placeholder_map = isolate()->factory()->meta_map();
|
| - AddInstruction(HCheckMaps::New(
|
| - receiver, placeholder_map, zone(), top_info()));
|
| + Add<HCheckMaps>(receiver, placeholder_map, top_info());
|
|
|
| - HValue* cell = Add<HConstant>(placeholder_cell, Representation::Tagged());
|
| + HValue* cell = Add<HConstant>(placeholder_cell);
|
| HObjectAccess access(HObjectAccess::ForCellPayload(isolate()));
|
| HValue* cell_contents = Add<HLoadNamedField>(cell, access);
|
|
|
| @@ -902,7 +888,7 @@ HValue* CodeStubGraphBuilder<StoreGlobalStub>::BuildCodeInitializedStub() {
|
| // property has been deleted and that the store must be handled by the
|
| // runtime.
|
| IfBuilder builder(this);
|
| - HValue* hole_value = Add<HConstant>(hole, Representation::Tagged());
|
| + HValue* hole_value = Add<HConstant>(hole);
|
| builder.If<HCompareObjectEqAndBranch>(cell_contents, hole_value);
|
| builder.Then();
|
| builder.Deopt();
|
|
|