diff options
Diffstat (limited to 'deps/v8/src/compiler/control-builders.cc')
-rw-r--r-- | deps/v8/src/compiler/control-builders.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/deps/v8/src/compiler/control-builders.cc b/deps/v8/src/compiler/control-builders.cc index 6905ef589f..b159bb2da7 100644 --- a/deps/v8/src/compiler/control-builders.cc +++ b/deps/v8/src/compiler/control-builders.cc @@ -36,6 +36,7 @@ void LoopBuilder::BeginLoop(BitVector* assigned, bool is_osr) { loop_environment_ = environment()->CopyForLoop(assigned, is_osr); continue_environment_ = environment()->CopyAsUnreachable(); break_environment_ = environment()->CopyAsUnreachable(); + assigned_ = assigned; } @@ -60,6 +61,7 @@ void LoopBuilder::EndBody() { void LoopBuilder::EndLoop() { loop_environment_->Merge(environment()); set_environment(break_environment_); + ExitLoop(); } @@ -82,6 +84,16 @@ void LoopBuilder::BreakWhen(Node* condition) { control_if.End(); } +void LoopBuilder::ExitLoop(Node** extra_value_to_rename) { + if (extra_value_to_rename) { + environment()->Push(*extra_value_to_rename); + } + environment()->PrepareForLoopExit(loop_environment_->GetControlDependency(), + assigned_); + if (extra_value_to_rename) { + *extra_value_to_rename = environment()->Pop(); + } +} void SwitchBuilder::BeginSwitch() { body_environment_ = environment()->CopyAsUnreachable(); |