summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/bytecode-graph-builder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/bytecode-graph-builder.cc')
-rw-r--r--deps/v8/src/compiler/bytecode-graph-builder.cc52
1 files changed, 36 insertions, 16 deletions
diff --git a/deps/v8/src/compiler/bytecode-graph-builder.cc b/deps/v8/src/compiler/bytecode-graph-builder.cc
index b1051be571..17472a305d 100644
--- a/deps/v8/src/compiler/bytecode-graph-builder.cc
+++ b/deps/v8/src/compiler/bytecode-graph-builder.cc
@@ -24,7 +24,7 @@
#include "src/objects/literal-objects-inl.h"
#include "src/objects/objects-inl.h"
#include "src/objects/smi.h"
-#include "src/objects/template-objects-inl.h"
+#include "src/objects/template-objects.h"
namespace v8 {
namespace internal {
@@ -215,6 +215,9 @@ class BytecodeGraphBuilder {
FeedbackSlot slot);
JSTypeHintLowering::LoweringResult TryBuildSimplifiedConstruct(
const Operator* op, Node* const* args, int arg_count, FeedbackSlot slot);
+ JSTypeHintLowering::LoweringResult TryBuildSimplifiedGetIterator(
+ const Operator* op, Node* receiver, FeedbackSlot load_slot,
+ FeedbackSlot call_slot);
JSTypeHintLowering::LoweringResult TryBuildSimplifiedLoadNamed(
const Operator* op, Node* receiver, FeedbackSlot slot);
JSTypeHintLowering::LoweringResult TryBuildSimplifiedLoadKeyed(
@@ -945,7 +948,7 @@ BytecodeGraphBuilder::BytecodeGraphBuilder(
bytecode_array().parameter_count(), bytecode_array().register_count(),
shared_info.object())),
bytecode_iterator_(
- base::make_unique<OffHeapBytecodeArray>(bytecode_array())),
+ std::make_unique<OffHeapBytecodeArray>(bytecode_array())),
bytecode_analysis_(broker_->GetBytecodeAnalysis(
bytecode_array().object(), osr_offset,
flags & BytecodeGraphBuilderFlag::kAnalyzeEnvironmentLiveness,
@@ -971,12 +974,12 @@ BytecodeGraphBuilder::BytecodeGraphBuilder(
if (FLAG_concurrent_inlining) {
// With concurrent inlining on, the source position address doesn't change
// because it's been copied from the heap.
- source_position_iterator_ = base::make_unique<SourcePositionTableIterator>(
+ source_position_iterator_ = std::make_unique<SourcePositionTableIterator>(
Vector<const byte>(bytecode_array().source_positions_address(),
bytecode_array().source_positions_size()));
} else {
// Otherwise, we need to access the table through a handle.
- source_position_iterator_ = base::make_unique<SourcePositionTableIterator>(
+ source_position_iterator_ = std::make_unique<SourcePositionTableIterator>(
handle(bytecode_array().object()->SourcePositionTableIfCollected(),
isolate()));
}
@@ -2087,12 +2090,13 @@ void BytecodeGraphBuilder::VisitCloneObject() {
void BytecodeGraphBuilder::VisitGetTemplateObject() {
DisallowHeapAccessIf no_heap_access(FLAG_concurrent_inlining);
- FeedbackSlot slot = bytecode_iterator().GetSlotOperand(1);
- ObjectRef description(
+ FeedbackSource source =
+ CreateFeedbackSource(bytecode_iterator().GetIndexOperand(1));
+ TemplateObjectDescriptionRef description(
broker(), bytecode_iterator().GetConstantForIndexOperand(0, isolate()));
- JSArrayRef template_object =
- shared_info().GetTemplateObject(description, feedback_vector(), slot);
- environment()->BindAccumulator(jsgraph()->Constant(template_object));
+ Node* template_object = NewNode(javascript()->GetTemplateObject(
+ description.object(), shared_info().object(), source));
+ environment()->BindAccumulator(template_object);
}
Node* const* BytecodeGraphBuilder::GetCallArgumentsFromRegisters(
@@ -3297,19 +3301,21 @@ void BytecodeGraphBuilder::VisitForInStep() {
void BytecodeGraphBuilder::VisitGetIterator() {
PrepareEagerCheckpoint();
- Node* object =
+ Node* receiver =
environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
- FeedbackSource feedback =
+ FeedbackSource load_feedback =
CreateFeedbackSource(bytecode_iterator().GetIndexOperand(1));
- const Operator* op = javascript()->GetIterator(feedback);
+ FeedbackSource call_feedback =
+ CreateFeedbackSource(bytecode_iterator().GetIndexOperand(2));
+ const Operator* op = javascript()->GetIterator(load_feedback, call_feedback);
- JSTypeHintLowering::LoweringResult lowering =
- TryBuildSimplifiedLoadNamed(op, object, feedback.slot);
+ JSTypeHintLowering::LoweringResult lowering = TryBuildSimplifiedGetIterator(
+ op, receiver, load_feedback.slot, call_feedback.slot);
if (lowering.IsExit()) return;
DCHECK(!lowering.Changed());
- Node* node = NewNode(op, object);
- environment()->BindAccumulator(node, Environment::kAttachFrameState);
+ Node* iterator = NewNode(op, receiver);
+ environment()->BindAccumulator(iterator, Environment::kAttachFrameState);
}
void BytecodeGraphBuilder::VisitSuspendGenerator() {
@@ -3776,6 +3782,20 @@ BytecodeGraphBuilder::TryBuildSimplifiedConstruct(const Operator* op,
}
JSTypeHintLowering::LoweringResult
+BytecodeGraphBuilder::TryBuildSimplifiedGetIterator(const Operator* op,
+ Node* receiver,
+ FeedbackSlot load_slot,
+ FeedbackSlot call_slot) {
+ Node* effect = environment()->GetEffectDependency();
+ Node* control = environment()->GetControlDependency();
+ JSTypeHintLowering::LoweringResult early_reduction =
+ type_hint_lowering().ReduceGetIteratorOperation(
+ op, receiver, effect, control, load_slot, call_slot);
+ ApplyEarlyReduction(early_reduction);
+ return early_reduction;
+}
+
+JSTypeHintLowering::LoweringResult
BytecodeGraphBuilder::TryBuildSimplifiedLoadNamed(const Operator* op,
Node* receiver,
FeedbackSlot slot) {