diff options
author | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-01-20 09:45:45 -0800 |
---|---|---|
committer | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-01-21 16:53:58 -0800 |
commit | ef4170ea03a80b21b2d8a65ce432efaa370fe2fa (patch) | |
tree | e382b1b38b729cd8155b56b441c3a563914854a3 /deps/v8/src/compiler/scheduler.cc | |
parent | 5f6dfab832979999d2f806fc1a2f1c11a25b0f35 (diff) | |
download | node-new-ef4170ea03a80b21b2d8a65ce432efaa370fe2fa.tar.gz |
deps: upgrade to V8 4.8.271.17
Pick up V8 4.8 branch-head. This branch brings in @@isConcatSpreadable,
@@toPrimitive and ToLength ES6 changes. For full details see:
http://v8project.blogspot.de/2015/11/v8-release-48.html
https://github.com/v8/v8/commit/fa163e2
Ref: https://github.com/nodejs/node/pull/4399
PR-URL: https://github.com/nodejs/node/pull/4785
Reviewed-By: bnoordhuis - Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'deps/v8/src/compiler/scheduler.cc')
-rw-r--r-- | deps/v8/src/compiler/scheduler.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/deps/v8/src/compiler/scheduler.cc b/deps/v8/src/compiler/scheduler.cc index aa9a7cfdb2..2c53acf1e5 100644 --- a/deps/v8/src/compiler/scheduler.cc +++ b/deps/v8/src/compiler/scheduler.cc @@ -1394,6 +1394,8 @@ class ScheduleLateNodeVisitor { // Schedule the node or a floating control structure. if (IrOpcode::IsMergeOpcode(node->opcode())) { ScheduleFloatingControl(block, node); + } else if (node->opcode() == IrOpcode::kFinishRegion) { + ScheduleRegion(block, node); } else { ScheduleNode(block, node); } @@ -1572,6 +1574,34 @@ class ScheduleLateNodeVisitor { scheduler_->FuseFloatingControl(block, node); } + void ScheduleRegion(BasicBlock* block, Node* region_end) { + // We only allow regions of instructions connected into a linear + // effect chain. The only value allowed to be produced by a node + // in the chain must be the value consumed by the FinishRegion node. + + // We schedule back to front; we first schedule FinishRegion. + CHECK_EQ(IrOpcode::kFinishRegion, region_end->opcode()); + ScheduleNode(block, region_end); + + // Schedule the chain. + Node* node = NodeProperties::GetEffectInput(region_end); + while (node->opcode() != IrOpcode::kBeginRegion) { + DCHECK_EQ(0, scheduler_->GetData(node)->unscheduled_count_); + DCHECK_EQ(1, node->op()->EffectInputCount()); + DCHECK_EQ(1, node->op()->EffectOutputCount()); + DCHECK_EQ(0, node->op()->ControlOutputCount()); + // The value output (if there is any) must be consumed + // by the EndRegion node. + DCHECK(node->op()->ValueOutputCount() == 0 || + node == region_end->InputAt(0)); + ScheduleNode(block, node); + node = NodeProperties::GetEffectInput(node); + } + // Schedule the BeginRegion node. + DCHECK_EQ(0, scheduler_->GetData(node)->unscheduled_count_); + ScheduleNode(block, node); + } + void ScheduleNode(BasicBlock* block, Node* node) { schedule_->PlanNode(block, node); scheduler_->scheduled_nodes_[block->id().ToSize()].push_back(node); |