diff options
author | Michaël Zasso <targos@protonmail.com> | 2018-09-21 09:14:51 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2018-09-22 18:29:25 +0200 |
commit | 0e7ddbd3d7e9439c67573b854c49cf82c398ae82 (patch) | |
tree | 2afe372acde921cb57ddb3444ff00c5adef8848c /deps/v8/src/compiler/js-heap-copy-reducer.cc | |
parent | 13245dc50da4cb7443c39ef6c68d419d5e6336d4 (diff) | |
download | node-new-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.tar.gz |
deps: update V8 to 7.0.276.20
PR-URL: https://github.com/nodejs/node/pull/22754
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/src/compiler/js-heap-copy-reducer.cc')
-rw-r--r-- | deps/v8/src/compiler/js-heap-copy-reducer.cc | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/deps/v8/src/compiler/js-heap-copy-reducer.cc b/deps/v8/src/compiler/js-heap-copy-reducer.cc new file mode 100644 index 0000000000..0bcc662771 --- /dev/null +++ b/deps/v8/src/compiler/js-heap-copy-reducer.cc @@ -0,0 +1,85 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/compiler/js-heap-copy-reducer.h" + +#include "src/compiler/common-operator.h" +#include "src/compiler/js-heap-broker.h" +#include "src/compiler/js-operator.h" +#include "src/heap/factory-inl.h" +#include "src/objects/map.h" +#include "src/objects/scope-info.h" + +namespace v8 { +namespace internal { +namespace compiler { + +// In the functions below, we call the ObjectRef (or subclass) constructor in +// order to trigger serialization if not yet done. + +JSHeapCopyReducer::JSHeapCopyReducer(JSHeapBroker* broker) : broker_(broker) {} + +JSHeapBroker* JSHeapCopyReducer::broker() { return broker_; } + +Reduction JSHeapCopyReducer::Reduce(Node* node) { + switch (node->opcode()) { + case IrOpcode::kHeapConstant: { + ObjectRef(broker(), HeapConstantOf(node->op())); + break; + } + case IrOpcode::kJSCreateArray: { + CreateArrayParameters const& p = CreateArrayParametersOf(node->op()); + Handle<AllocationSite> site; + if (p.site().ToHandle(&site)) AllocationSiteRef(broker(), site); + break; + } + case IrOpcode::kJSCreateCatchContext: { + ScopeInfoRef(broker(), ScopeInfoOf(node->op())); + break; + } + case IrOpcode::kJSCreateClosure: { + CreateClosureParameters const& p = CreateClosureParametersOf(node->op()); + SharedFunctionInfoRef(broker(), p.shared_info()); + HeapObjectRef(broker(), p.feedback_cell()); + HeapObjectRef(broker(), p.code()); + break; + } + case IrOpcode::kJSCreateEmptyLiteralArray: { + // TODO(neis, jarin) Force serialization of the entire feedback vector + // rather than just the one element. + FeedbackParameter const& p = FeedbackParameterOf(node->op()); + FeedbackVectorRef(broker(), p.feedback().vector()); + Handle<Object> feedback( + p.feedback().vector()->Get(p.feedback().slot())->ToObject(), + broker()->isolate()); + ObjectRef(broker(), feedback); + break; + } + case IrOpcode::kJSCreateFunctionContext: { + CreateFunctionContextParameters const& p = + CreateFunctionContextParametersOf(node->op()); + ScopeInfoRef(broker(), p.scope_info()); + break; + } + case IrOpcode::kJSCreateLiteralArray: + case IrOpcode::kJSCreateLiteralObject: { + CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op()); + ObjectRef(broker(), p.feedback().vector()); + break; + } + case IrOpcode::kJSLoadNamed: + case IrOpcode::kJSStoreNamed: { + NamedAccess const& p = NamedAccessOf(node->op()); + NameRef(broker(), p.name()); + break; + } + default: + break; + } + return NoChange(); +} + +} // namespace compiler +} // namespace internal +} // namespace v8 |