summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/control-builders.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/control-builders.cc')
-rw-r--r--deps/v8/src/compiler/control-builders.cc12
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();