| Index: src/compiler/js-create-lowering.cc
|
| diff --git a/src/compiler/js-create-lowering.cc b/src/compiler/js-create-lowering.cc
|
| index 073a088bcbcee32a90b9e7c3b6c5fbfbd8afc834..288108d5bd3dd77326384188821932dd19e99ec1 100644
|
| --- a/src/compiler/js-create-lowering.cc
|
| +++ b/src/compiler/js-create-lowering.cc
|
| @@ -353,22 +353,18 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) {
|
| Node* const elements = AllocateAliasedArguments(
|
| effect, control, args_state, context, shared, &has_aliased_arguments);
|
| effect = elements->op()->EffectOutputCount() > 0 ? elements : effect;
|
| - // Load the arguments object map from the current native context.
|
| - Node* const load_native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
| - Node* const load_arguments_map = effect = graph()->NewNode(
|
| - simplified()->LoadField(AccessBuilder::ForContextSlot(
|
| - has_aliased_arguments ? Context::FAST_ALIASED_ARGUMENTS_MAP_INDEX
|
| - : Context::SLOPPY_ARGUMENTS_MAP_INDEX)),
|
| - load_native_context, effect, control);
|
| + // Load the arguments object map.
|
| + Node* const arguments_map = jsgraph()->HeapConstant(handle(
|
| + has_aliased_arguments ? native_context()->fast_aliased_arguments_map()
|
| + : native_context()->sloppy_arguments_map(),
|
| + isolate()));
|
| // Actually allocate and initialize the arguments object.
|
| AllocationBuilder a(jsgraph(), effect, control);
|
| Node* properties = jsgraph()->EmptyFixedArrayConstant();
|
| int length = args_state_info.parameter_count() - 1; // Minus receiver.
|
| STATIC_ASSERT(JSSloppyArgumentsObject::kSize == 5 * kPointerSize);
|
| a.Allocate(JSSloppyArgumentsObject::kSize);
|
| - a.Store(AccessBuilder::ForMap(), load_arguments_map);
|
| + a.Store(AccessBuilder::ForMap(), arguments_map);
|
| a.Store(AccessBuilder::ForJSObjectProperties(), properties);
|
| a.Store(AccessBuilder::ForJSObjectElements(), elements);
|
| a.Store(AccessBuilder::ForArgumentsLength(), jsgraph()->Constant(length));
|
| @@ -379,7 +375,6 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) {
|
| } else if (type == CreateArgumentsType::kUnmappedArguments) {
|
| // Use inline allocation for all unmapped arguments objects within inlined
|
| // (i.e. non-outermost) frames, independent of the object size.
|
| - Node* const context = NodeProperties::GetContextInput(node);
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
| // Choose the correct frame state and frame state info depending on
|
| // whether there conceptually is an arguments adaptor frame in the call
|
| @@ -389,21 +384,16 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) {
|
| // Prepare element backing store to be used by arguments object.
|
| Node* const elements = AllocateArguments(effect, control, args_state);
|
| effect = elements->op()->EffectOutputCount() > 0 ? elements : effect;
|
| - // Load the arguments object map from the current native context.
|
| - Node* const load_native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
| - Node* const load_arguments_map = effect = graph()->NewNode(
|
| - simplified()->LoadField(AccessBuilder::ForContextSlot(
|
| - Context::STRICT_ARGUMENTS_MAP_INDEX)),
|
| - load_native_context, effect, control);
|
| + // Load the arguments object map.
|
| + Node* const arguments_map = jsgraph()->HeapConstant(
|
| + handle(native_context()->strict_arguments_map(), isolate()));
|
| // Actually allocate and initialize the arguments object.
|
| AllocationBuilder a(jsgraph(), effect, control);
|
| Node* properties = jsgraph()->EmptyFixedArrayConstant();
|
| int length = args_state_info.parameter_count() - 1; // Minus receiver.
|
| STATIC_ASSERT(JSStrictArgumentsObject::kSize == 4 * kPointerSize);
|
| a.Allocate(JSStrictArgumentsObject::kSize);
|
| - a.Store(AccessBuilder::ForMap(), load_arguments_map);
|
| + a.Store(AccessBuilder::ForMap(), arguments_map);
|
| a.Store(AccessBuilder::ForJSObjectProperties(), properties);
|
| a.Store(AccessBuilder::ForJSObjectElements(), elements);
|
| a.Store(AccessBuilder::ForArgumentsLength(), jsgraph()->Constant(length));
|
| @@ -416,7 +406,6 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) {
|
| int start_index = shared->internal_formal_parameter_count();
|
| // Use inline allocation for all unmapped arguments objects within inlined
|
| // (i.e. non-outermost) frames, independent of the object size.
|
| - Node* const context = NodeProperties::GetContextInput(node);
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
| // Choose the correct frame state and frame state info depending on
|
| // whether there conceptually is an arguments adaptor frame in the call
|
| @@ -427,14 +416,9 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) {
|
| Node* const elements =
|
| AllocateRestArguments(effect, control, args_state, start_index);
|
| effect = elements->op()->EffectOutputCount() > 0 ? elements : effect;
|
| - // Load the JSArray object map from the current native context.
|
| - Node* const load_native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
| - Node* const load_jsarray_map = effect = graph()->NewNode(
|
| - simplified()->LoadField(AccessBuilder::ForContextSlot(
|
| - Context::JS_ARRAY_FAST_ELEMENTS_MAP_INDEX)),
|
| - load_native_context, effect, control);
|
| + // Load the JSArray object map.
|
| + Node* const jsarray_map = jsgraph()->HeapConstant(handle(
|
| + native_context()->js_array_fast_elements_map_index(), isolate()));
|
| // Actually allocate and initialize the jsarray.
|
| AllocationBuilder a(jsgraph(), effect, control);
|
| Node* properties = jsgraph()->EmptyFixedArrayConstant();
|
| @@ -444,7 +428,7 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) {
|
| int length = std::max(0, argument_count - start_index);
|
| STATIC_ASSERT(JSArray::kSize == 4 * kPointerSize);
|
| a.Allocate(JSArray::kSize);
|
| - a.Store(AccessBuilder::ForMap(), load_jsarray_map);
|
| + a.Store(AccessBuilder::ForMap(), jsarray_map);
|
| a.Store(AccessBuilder::ForJSObjectProperties(), properties);
|
| a.Store(AccessBuilder::ForJSObjectElements(), elements);
|
| a.Store(AccessBuilder::ForJSArrayLength(FAST_ELEMENTS),
|
| @@ -462,7 +446,6 @@ Reduction JSCreateLowering::ReduceNewArray(Node* node, Node* length,
|
| int capacity,
|
| Handle<AllocationSite> site) {
|
| DCHECK_EQ(IrOpcode::kJSCreateArray, node->opcode());
|
| - Node* context = NodeProperties::GetContextInput(node);
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
| Node* control = NodeProperties::GetControlInput(node);
|
|
|
| @@ -478,13 +461,10 @@ Reduction JSCreateLowering::ReduceNewArray(Node* node, Node* length,
|
| dependencies()->AssumeTenuringDecision(site);
|
| dependencies()->AssumeTransitionStable(site);
|
|
|
| - // Retrieve the initial map for the array from the appropriate native context.
|
| - Node* native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
| - Node* js_array_map = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::ArrayMapIndex(elements_kind), true),
|
| - native_context, native_context, effect);
|
| + // Retrieve the initial map for the array.
|
| + int const array_map_index = Context::ArrayMapIndex(elements_kind);
|
| + Node* js_array_map = jsgraph()->HeapConstant(
|
| + handle(Map::cast(native_context()->get(array_map_index)), isolate()));
|
|
|
| // Setup elements and properties.
|
| Node* elements;
|
| @@ -684,14 +664,10 @@ Reduction JSCreateLowering::ReduceJSCreateClosure(Node* node) {
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
| Node* control = NodeProperties::GetControlInput(node);
|
| Node* context = NodeProperties::GetContextInput(node);
|
| - Node* native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
| - int function_map_index =
|
| + int const function_map_index =
|
| Context::FunctionMapIndex(shared->language_mode(), shared->kind());
|
| - Node* function_map = effect =
|
| - graph()->NewNode(javascript()->LoadContext(0, function_map_index, true),
|
| - native_context, native_context, effect);
|
| + Node* function_map = jsgraph()->HeapConstant(
|
| + handle(Map::cast(native_context()->get(function_map_index)), isolate()));
|
| // Note that it is only safe to embed the raw entry point of the compile
|
| // lazy stub into the code, because that stub is immortal and immovable.
|
| Node* compile_entry = jsgraph()->IntPtrConstant(reinterpret_cast<intptr_t>(
|
| @@ -723,23 +699,8 @@ Reduction JSCreateLowering::ReduceJSCreateIterResultObject(Node* node) {
|
| Node* done = NodeProperties::GetValueInput(node, 1);
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
|
|
| - Node* iterator_result_map;
|
| - Handle<Context> native_context;
|
| - if (GetSpecializationNativeContext(node).ToHandle(&native_context)) {
|
| - // Specialize to the constant JSIteratorResult map to enable map check
|
| - // elimination to eliminate subsequent checks in case of inlining.
|
| - iterator_result_map = jsgraph()->HeapConstant(
|
| - handle(native_context->iterator_result_map(), isolate()));
|
| - } else {
|
| - // Load the JSIteratorResult map for the {context}.
|
| - Node* context = NodeProperties::GetContextInput(node);
|
| - Node* native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
| - iterator_result_map = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::ITERATOR_RESULT_MAP_INDEX, true),
|
| - native_context, native_context, effect);
|
| - }
|
| + Node* iterator_result_map = jsgraph()->HeapConstant(
|
| + handle(native_context()->iterator_result_map(), isolate()));
|
|
|
| // Emit code to allocate the JSIteratorResult instance.
|
| AllocationBuilder a(jsgraph(), effect, graph()->start());
|
| @@ -798,9 +759,6 @@ Reduction JSCreateLowering::ReduceJSCreateFunctionContext(Node* node) {
|
| Node* control = NodeProperties::GetControlInput(node);
|
| Node* context = NodeProperties::GetContextInput(node);
|
| Node* extension = jsgraph()->TheHoleConstant();
|
| - Node* native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
| AllocationBuilder a(jsgraph(), effect, control);
|
| STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS == 4); // Ensure fully covered.
|
| int context_length = slot_count + Context::MIN_CONTEXT_SLOTS;
|
| @@ -809,7 +767,7 @@ Reduction JSCreateLowering::ReduceJSCreateFunctionContext(Node* node) {
|
| a.Store(AccessBuilder::ForContextSlot(Context::PREVIOUS_INDEX), context);
|
| a.Store(AccessBuilder::ForContextSlot(Context::EXTENSION_INDEX), extension);
|
| a.Store(AccessBuilder::ForContextSlot(Context::NATIVE_CONTEXT_INDEX),
|
| - native_context);
|
| + jsgraph()->HeapConstant(native_context()));
|
| for (int i = Context::MIN_CONTEXT_SLOTS; i < context_length; ++i) {
|
| a.Store(AccessBuilder::ForContextSlot(i), jsgraph()->UndefinedConstant());
|
| }
|
| @@ -829,9 +787,6 @@ Reduction JSCreateLowering::ReduceJSCreateWithContext(Node* node) {
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
| Node* control = NodeProperties::GetControlInput(node);
|
| Node* context = NodeProperties::GetContextInput(node);
|
| - Node* native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
|
|
| AllocationBuilder aa(jsgraph(), effect, control);
|
| aa.Allocate(ContextExtension::kSize);
|
| @@ -847,7 +802,7 @@ Reduction JSCreateLowering::ReduceJSCreateWithContext(Node* node) {
|
| a.Store(AccessBuilder::ForContextSlot(Context::PREVIOUS_INDEX), context);
|
| a.Store(AccessBuilder::ForContextSlot(Context::EXTENSION_INDEX), extension);
|
| a.Store(AccessBuilder::ForContextSlot(Context::NATIVE_CONTEXT_INDEX),
|
| - native_context);
|
| + jsgraph()->HeapConstant(native_context()));
|
| RelaxControls(node);
|
| a.FinishAndChange(node);
|
| return Changed(node);
|
| @@ -862,9 +817,6 @@ Reduction JSCreateLowering::ReduceJSCreateCatchContext(Node* node) {
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
| Node* control = NodeProperties::GetControlInput(node);
|
| Node* context = NodeProperties::GetContextInput(node);
|
| - Node* native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
|
|
| AllocationBuilder aa(jsgraph(), effect, control);
|
| aa.Allocate(ContextExtension::kSize);
|
| @@ -883,7 +835,7 @@ Reduction JSCreateLowering::ReduceJSCreateCatchContext(Node* node) {
|
| a.Store(AccessBuilder::ForContextSlot(Context::PREVIOUS_INDEX), context);
|
| a.Store(AccessBuilder::ForContextSlot(Context::EXTENSION_INDEX), extension);
|
| a.Store(AccessBuilder::ForContextSlot(Context::NATIVE_CONTEXT_INDEX),
|
| - native_context);
|
| + jsgraph()->HeapConstant(native_context()));
|
| a.Store(AccessBuilder::ForContextSlot(Context::THROWN_OBJECT_INDEX),
|
| exception);
|
| RelaxControls(node);
|
| @@ -904,9 +856,7 @@ Reduction JSCreateLowering::ReduceJSCreateBlockContext(Node* node) {
|
| Node* control = NodeProperties::GetControlInput(node);
|
| Node* context = NodeProperties::GetContextInput(node);
|
| Node* extension = jsgraph()->Constant(scope_info);
|
| - Node* native_context = effect = graph()->NewNode(
|
| - javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
|
| - context, context, effect);
|
| +
|
| AllocationBuilder a(jsgraph(), effect, control);
|
| STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS == 4); // Ensure fully covered.
|
| a.AllocateArray(context_length, factory()->block_context_map());
|
| @@ -914,7 +864,7 @@ Reduction JSCreateLowering::ReduceJSCreateBlockContext(Node* node) {
|
| a.Store(AccessBuilder::ForContextSlot(Context::PREVIOUS_INDEX), context);
|
| a.Store(AccessBuilder::ForContextSlot(Context::EXTENSION_INDEX), extension);
|
| a.Store(AccessBuilder::ForContextSlot(Context::NATIVE_CONTEXT_INDEX),
|
| - native_context);
|
| + jsgraph()->HeapConstant(native_context()));
|
| for (int i = Context::MIN_CONTEXT_SLOTS; i < context_length; ++i) {
|
| a.Store(AccessBuilder::ForContextSlot(i), jsgraph()->UndefinedConstant());
|
| }
|
| @@ -1279,13 +1229,6 @@ MaybeHandle<LiteralsArray> JSCreateLowering::GetSpecializationLiterals(
|
| return MaybeHandle<LiteralsArray>();
|
| }
|
|
|
| -MaybeHandle<Context> JSCreateLowering::GetSpecializationNativeContext(
|
| - Node* node) {
|
| - Node* const context = NodeProperties::GetContextInput(node);
|
| - return NodeProperties::GetSpecializationNativeContext(context,
|
| - native_context_);
|
| -}
|
| -
|
| Factory* JSCreateLowering::factory() const { return isolate()->factory(); }
|
|
|
| Graph* JSCreateLowering::graph() const { return jsgraph()->graph(); }
|
|
|