From 4e33041eacf6279f618e16fd26403070af2d0a0b Mon Sep 17 00:00:00 2001 From: Pedro Pontes Date: Mon, 25 May 2020 14:12:58 +0200 Subject: [PATCH 1/2] chore: cherry-pick d4ddf645c3ca from chromium --- patches/v8/.patches | 1 + patches/v8/cherry-pick-d4ddf645c3ca.patch | 30 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 patches/v8/cherry-pick-d4ddf645c3ca.patch diff --git a/patches/v8/.patches b/patches/v8/.patches index e41b28013f4eb..d1e00c816ffd9 100644 --- a/patches/v8/.patches +++ b/patches/v8/.patches @@ -14,3 +14,4 @@ intl_fix_intl_numberformat_constructor.patch merged_make_createdynamicfunction_switch_context_before_throwing.patch use_context_of_then_function_for_promiseresolvethenablejob.patch merged_regexp_reserve_space_for_all_registers_in_interpreter.patch +cherry-pick-d4ddf645c3ca.patch diff --git a/patches/v8/cherry-pick-d4ddf645c3ca.patch b/patches/v8/cherry-pick-d4ddf645c3ca.patch new file mode 100644 index 0000000000000..8a2b3a8eb2467 --- /dev/null +++ b/patches/v8/cherry-pick-d4ddf645c3ca.patch @@ -0,0 +1,30 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Tobias Tebbi +Date: Tue, 5 May 2020 14:19:52 +0200 +Subject: fix bug in DeadCodeElimination + +Bug: chromium:1076708 +Change-Id: I88a5eae0e562e32f1915deff3c4150ec4be14c6c +Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2181266 +Commit-Queue: Tobias Tebbi +Commit-Queue: Georg Neis +Auto-Submit: Tobias Tebbi +Reviewed-by: Georg Neis +Cr-Commit-Position: refs/heads/master@{#67564} + +diff --git a/src/compiler/dead-code-elimination.cc b/src/compiler/dead-code-elimination.cc +index f39e6cabfbeb3e4fdd95a36d619c14adb6d5d956..bab6b7b506e368b7b4219015cc34a84b156ccd2d 100644 +--- a/src/compiler/dead-code-elimination.cc ++++ b/src/compiler/dead-code-elimination.cc +@@ -317,7 +317,10 @@ Reduction DeadCodeElimination::ReduceDeoptimizeOrReturnOrTerminateOrTailCall( + node->opcode() == IrOpcode::kTailCall); + Reduction reduction = PropagateDeadControl(node); + if (reduction.Changed()) return reduction; +- if (FindDeadInput(node) != nullptr) { ++ // Terminate nodes are not part of actual control flow, so they should never ++ // be replaced with Throw. ++ if (node->opcode() != IrOpcode::kTerminate && ++ FindDeadInput(node) != nullptr) { + Node* effect = NodeProperties::GetEffectInput(node, 0); + Node* control = NodeProperties::GetControlInput(node, 0); + if (effect->opcode() != IrOpcode::kUnreachable) { From cc95b0cea9dca131c957421f8e6acd79c24e1487 Mon Sep 17 00:00:00 2001 From: Pedro Pontes Date: Mon, 25 May 2020 15:40:40 +0200 Subject: [PATCH 2/2] [turbofan] Turn some DCHECKs into CHECKs in Schedule methods Bug: chromium:1076708 Change-Id: I7f065791310606e11fe89936a36f0fe7cb0d38e7 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2182639 Auto-Submit: Georg Neis Commit-Queue: Tobias Tebbi Reviewed-by: Tobias Tebbi Cr-Commit-Position: refs/heads/master@{#67576} --- patches/v8/.patches | 1 + ...ecks_into_checks_in_schedule_methods.patch | 108 ++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 patches/v8/turn_some_dchecks_into_checks_in_schedule_methods.patch diff --git a/patches/v8/.patches b/patches/v8/.patches index d1e00c816ffd9..e4a12cd54fd7e 100644 --- a/patches/v8/.patches +++ b/patches/v8/.patches @@ -15,3 +15,4 @@ merged_make_createdynamicfunction_switch_context_before_throwing.patch use_context_of_then_function_for_promiseresolvethenablejob.patch merged_regexp_reserve_space_for_all_registers_in_interpreter.patch cherry-pick-d4ddf645c3ca.patch +turn_some_dchecks_into_checks_in_schedule_methods.patch diff --git a/patches/v8/turn_some_dchecks_into_checks_in_schedule_methods.patch b/patches/v8/turn_some_dchecks_into_checks_in_schedule_methods.patch new file mode 100644 index 0000000000000..c04438f27199a --- /dev/null +++ b/patches/v8/turn_some_dchecks_into_checks_in_schedule_methods.patch @@ -0,0 +1,108 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Georg Neis +Date: Tue, 5 May 2020 20:11:02 +0200 +Subject: Turn some DCHECKs into CHECKs in Schedule methods + +Bug: chromium:1076708 +Change-Id: I7f065791310606e11fe89936a36f0fe7cb0d38e7 +Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2182639 +Auto-Submit: Georg Neis +Commit-Queue: Tobias Tebbi +Reviewed-by: Tobias Tebbi +Cr-Commit-Position: refs/heads/master@{#67576} + +diff --git a/src/compiler/schedule.cc b/src/compiler/schedule.cc +index 3b335f9712f5c4c6f76a3791a9c95a701b1503cb..08931e6f53d39d43653ce467adfde3003f6f75c7 100644 +--- a/src/compiler/schedule.cc ++++ b/src/compiler/schedule.cc +@@ -201,7 +201,7 @@ void Schedule::AddNode(BasicBlock* block, Node* node) { + } + + void Schedule::AddGoto(BasicBlock* block, BasicBlock* succ) { +- DCHECK_EQ(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, block->control()); + block->set_control(BasicBlock::kGoto); + AddSuccessor(block, succ); + } +@@ -226,7 +226,7 @@ bool IsPotentiallyThrowingCall(IrOpcode::Value opcode) { + + void Schedule::AddCall(BasicBlock* block, Node* call, BasicBlock* success_block, + BasicBlock* exception_block) { +- DCHECK_EQ(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, block->control()); + DCHECK(IsPotentiallyThrowingCall(call->opcode())); + block->set_control(BasicBlock::kCall); + AddSuccessor(block, success_block); +@@ -236,7 +236,7 @@ void Schedule::AddCall(BasicBlock* block, Node* call, BasicBlock* success_block, + + void Schedule::AddBranch(BasicBlock* block, Node* branch, BasicBlock* tblock, + BasicBlock* fblock) { +- DCHECK_EQ(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, block->control()); + DCHECK_EQ(IrOpcode::kBranch, branch->opcode()); + block->set_control(BasicBlock::kBranch); + AddSuccessor(block, tblock); +@@ -246,7 +246,7 @@ void Schedule::AddBranch(BasicBlock* block, Node* branch, BasicBlock* tblock, + + void Schedule::AddSwitch(BasicBlock* block, Node* sw, BasicBlock** succ_blocks, + size_t succ_count) { +- DCHECK_EQ(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, block->control()); + DCHECK_EQ(IrOpcode::kSwitch, sw->opcode()); + block->set_control(BasicBlock::kSwitch); + for (size_t index = 0; index < succ_count; ++index) { +@@ -256,28 +256,28 @@ void Schedule::AddSwitch(BasicBlock* block, Node* sw, BasicBlock** succ_blocks, + } + + void Schedule::AddTailCall(BasicBlock* block, Node* input) { +- DCHECK_EQ(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, block->control()); + block->set_control(BasicBlock::kTailCall); + SetControlInput(block, input); + if (block != end()) AddSuccessor(block, end()); + } + + void Schedule::AddReturn(BasicBlock* block, Node* input) { +- DCHECK_EQ(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, block->control()); + block->set_control(BasicBlock::kReturn); + SetControlInput(block, input); + if (block != end()) AddSuccessor(block, end()); + } + + void Schedule::AddDeoptimize(BasicBlock* block, Node* input) { +- DCHECK_EQ(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, block->control()); + block->set_control(BasicBlock::kDeoptimize); + SetControlInput(block, input); + if (block != end()) AddSuccessor(block, end()); + } + + void Schedule::AddThrow(BasicBlock* block, Node* input) { +- DCHECK_EQ(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, block->control()); + block->set_control(BasicBlock::kThrow); + SetControlInput(block, input); + if (block != end()) AddSuccessor(block, end()); +@@ -285,8 +285,8 @@ void Schedule::AddThrow(BasicBlock* block, Node* input) { + + void Schedule::InsertBranch(BasicBlock* block, BasicBlock* end, Node* branch, + BasicBlock* tblock, BasicBlock* fblock) { +- DCHECK_NE(BasicBlock::kNone, block->control()); +- DCHECK_EQ(BasicBlock::kNone, end->control()); ++ CHECK_NE(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, end->control()); + end->set_control(block->control()); + block->set_control(BasicBlock::kBranch); + MoveSuccessors(block, end); +@@ -300,8 +300,8 @@ void Schedule::InsertBranch(BasicBlock* block, BasicBlock* end, Node* branch, + + void Schedule::InsertSwitch(BasicBlock* block, BasicBlock* end, Node* sw, + BasicBlock** succ_blocks, size_t succ_count) { +- DCHECK_NE(BasicBlock::kNone, block->control()); +- DCHECK_EQ(BasicBlock::kNone, end->control()); ++ CHECK_NE(BasicBlock::kNone, block->control()); ++ CHECK_EQ(BasicBlock::kNone, end->control()); + end->set_control(block->control()); + block->set_control(BasicBlock::kSwitch); + MoveSuccessors(block, end);