Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(590)

Unified Diff: src/compiler/ast-graph-builder.cc

Issue 1045703003: [turbofan] Keep AstGraphBuilder context chain length in sync. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/ast-graph-builder.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/ast-graph-builder.cc
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc
index 3a4b3e99b20fcc54272bceace1d84a7be8c4853f..18fb49135e1e8a5751f3a4ecab7ed812815f4429 100644
--- a/src/compiler/ast-graph-builder.cc
+++ b/src/compiler/ast-graph-builder.cc
@@ -112,7 +112,7 @@ class AstGraphBuilder::ContextScope BASE_EMBEDDED {
: builder_(builder),
outer_(builder->execution_context()),
scope_(scope),
- depth_(builder_->environment()->ContextStackDepth()) {
+ depth_(builder_->environment()->context_chain_length()) {
builder_->environment()->PushContext(context); // Push.
builder_->set_execution_context(this);
}
@@ -120,7 +120,7 @@ class AstGraphBuilder::ContextScope BASE_EMBEDDED {
~ContextScope() {
builder_->set_execution_context(outer_); // Pop.
builder_->environment()->PopContext();
- CHECK_EQ(depth_, builder_->environment()->ContextStackDepth());
+ CHECK_EQ(depth_, builder_->environment()->context_chain_length());
}
// Current scope during visitation.
@@ -146,6 +146,7 @@ class AstGraphBuilder::ControlScope BASE_EMBEDDED {
explicit ControlScope(AstGraphBuilder* builder)
: builder_(builder),
outer_(builder->execution_control()),
+ context_length_(builder->environment()->context_chain_length()),
stack_height_(builder->environment()->stack_height()) {
builder_->set_execution_control(this); // Push.
}
@@ -193,11 +194,13 @@ class AstGraphBuilder::ControlScope BASE_EMBEDDED {
Environment* environment() { return builder_->environment(); }
AstGraphBuilder* builder() const { return builder_; }
+ int context_length() const { return context_length_; }
int stack_height() const { return stack_height_; }
private:
AstGraphBuilder* builder_;
ControlScope* outer_;
+ int context_length_;
int stack_height_;
};
@@ -450,9 +453,6 @@ bool AstGraphBuilder::CreateGraph(bool constant_context, bool stack_check) {
Environment env(this, scope, graph()->start());
set_environment(&env);
- // Initialize control scope.
- ControlScope control(this);
-
if (info()->is_osr()) {
// Use OSR normal entry as the start of the top-level environment.
// It will be replaced with {Dead} after typing and optimizations.
@@ -463,6 +463,9 @@ bool AstGraphBuilder::CreateGraph(bool constant_context, bool stack_check) {
CreateFunctionContext(constant_context);
ContextScope incoming(this, scope, function_context_.get());
+ // Initialize control scope.
+ ControlScope control(this);
+
// Build receiver check for sloppy mode if necessary.
// TODO(mstarzinger/verwaest): Should this be moved back into the CallIC?
Node* original_receiver = env.Lookup(scope->receiver());
@@ -813,7 +816,8 @@ void AstGraphBuilder::ControlScope::PerformCommand(Command command,
Environment* env = environment()->CopyAsUnreachable();
ControlScope* current = this;
while (current != NULL) {
- environment()->Trim(current->stack_height());
+ environment()->TrimStack(current->stack_height());
+ environment()->TrimContextChain(current->context_length());
if (current->Execute(command, target, value)) break;
current = current->outer_;
}
@@ -3334,8 +3338,7 @@ void AstGraphBuilder::UpdateControlDependencyToLeaveFunction(Node* exit) {
void AstGraphBuilder::Environment::Merge(Environment* other) {
DCHECK(values_.size() == other->values_.size());
- // TODO(titzer): make context stack heights match.
- DCHECK(contexts_.size() <= other->contexts_.size());
+ DCHECK(contexts_.size() == other->contexts_.size());
// Nothing to do if the other environment is dead.
if (other->IsMarkedAsUnreachable()) return;
@@ -3350,10 +3353,7 @@ void AstGraphBuilder::Environment::Merge(Environment* other) {
graph()->NewNode(common()->Merge(1), arraysize(inputs), inputs, true);
effect_dependency_ = other->effect_dependency_;
values_ = other->values_;
- // TODO(titzer): make context stack heights match.
- size_t min = std::min(contexts_.size(), other->contexts_.size());
contexts_ = other->contexts_;
- contexts_.resize(min, nullptr);
return;
}
« no previous file with comments | « src/compiler/ast-graph-builder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698