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

Side by Side Diff: src/compiler/ast-graph-builder.h

Issue 921083004: [turbofan] Rename context stack as part of the environment for OSR. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/compiler/ast-graph-builder.cc » ('j') | src/compiler/ast-graph-builder.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_COMPILER_AST_GRAPH_BUILDER_H_ 5 #ifndef V8_COMPILER_AST_GRAPH_BUILDER_H_
6 #define V8_COMPILER_AST_GRAPH_BUILDER_H_ 6 #define V8_COMPILER_AST_GRAPH_BUILDER_H_
7 7
8 #include "src/ast.h" 8 #include "src/ast.h"
9 #include "src/compiler/js-graph.h" 9 #include "src/compiler/js-graph.h"
10 10
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 class ControlScopeForFinally; 70 class ControlScopeForFinally;
71 class Environment; 71 class Environment;
72 friend class ControlBuilder; 72 friend class ControlBuilder;
73 73
74 Zone* local_zone_; 74 Zone* local_zone_;
75 CompilationInfo* info_; 75 CompilationInfo* info_;
76 JSGraph* jsgraph_; 76 JSGraph* jsgraph_;
77 Environment* environment_; 77 Environment* environment_;
78 AstContext* ast_context_; 78 AstContext* ast_context_;
79 79
80 bool CreateGraphBody();
Michael Starzinger 2015/02/17 10:34:37 nit: Please move this down to below all the fields
81
80 // List of global declarations for functions and variables. 82 // List of global declarations for functions and variables.
81 ZoneVector<Handle<Object>> globals_; 83 ZoneVector<Handle<Object>> globals_;
82 84
83 // Stack of control scopes currently entered by the visitor. 85 // Stack of control scopes currently entered by the visitor.
84 ControlScope* execution_control_; 86 ControlScope* execution_control_;
85 87
86 // Stack of context objects pushed onto the chain by the visitor. 88 // Stack of context objects pushed onto the chain by the visitor.
87 ContextScope* execution_context_; 89 ContextScope* execution_context_;
88 90
89 // Nodes representing values in the activation record. 91 // Nodes representing values in the activation record.
90 SetOncePointer<Node> function_closure_; 92 SetOncePointer<Node> function_closure_;
91 SetOncePointer<Node> function_context_; 93 Node* function_context_;
92 94
93 // Temporary storage for building node input lists. 95 // Temporary storage for building node input lists.
94 int input_buffer_size_; 96 int input_buffer_size_;
95 Node** input_buffer_; 97 Node** input_buffer_;
96 98
97 // Node representing the control dependency for dead code. 99 // Node representing the control dependency for dead code.
98 SetOncePointer<Node> dead_control_; 100 SetOncePointer<Node> dead_control_;
99 101
100 // Merge of all control nodes that exit the function body. 102 // Merge of all control nodes that exit the function body.
101 Node* exit_control_; 103 Node* exit_control_;
102 104
103 // Result of loop assignment analysis performed before graph creation. 105 // Result of loop assignment analysis performed before graph creation.
104 LoopAssignmentAnalysis* loop_assignment_analysis_; 106 LoopAssignmentAnalysis* loop_assignment_analysis_;
105 107
106 // Growth increment for the temporary buffer used to construct input lists to 108 // Growth increment for the temporary buffer used to construct input lists to
107 // new nodes. 109 // new nodes.
108 static const int kInputBufferSizeIncrement = 64; 110 static const int kInputBufferSizeIncrement = 64;
109 111
110 Zone* local_zone() const { return local_zone_; } 112 Zone* local_zone() const { return local_zone_; }
111 Environment* environment() { return environment_; } 113 Environment* environment() const { return environment_; }
112 AstContext* ast_context() const { return ast_context_; } 114 AstContext* ast_context() const { return ast_context_; }
113 ControlScope* execution_control() const { return execution_control_; } 115 ControlScope* execution_control() const { return execution_control_; }
114 ContextScope* execution_context() const { return execution_context_; } 116 ContextScope* execution_context() const { return execution_context_; }
115 CommonOperatorBuilder* common() const { return jsgraph_->common(); } 117 CommonOperatorBuilder* common() const { return jsgraph_->common(); }
116 CompilationInfo* info() const { return info_; } 118 CompilationInfo* info() const { return info_; }
117 LanguageMode language_mode() const; 119 LanguageMode language_mode() const;
118 JSGraph* jsgraph() { return jsgraph_; } 120 JSGraph* jsgraph() { return jsgraph_; }
119 Graph* graph() { return jsgraph_->graph(); } 121 Graph* graph() { return jsgraph_->graph(); }
120 Zone* graph_zone() { return graph()->zone(); } 122 Zone* graph_zone() { return graph()->zone(); }
121 JSOperatorBuilder* javascript() { return jsgraph_->javascript(); } 123 JSOperatorBuilder* javascript() { return jsgraph_->javascript(); }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 171
170 Node* NewNode(const Operator* op, int value_input_count, Node** value_inputs, 172 Node* NewNode(const Operator* op, int value_input_count, Node** value_inputs,
171 bool incomplete = false) { 173 bool incomplete = false) {
172 return MakeNode(op, value_input_count, value_inputs, incomplete); 174 return MakeNode(op, value_input_count, value_inputs, incomplete);
173 } 175 }
174 176
175 // Creates a new Phi node having {count} input values. 177 // Creates a new Phi node having {count} input values.
176 Node* NewPhi(int count, Node* input, Node* control); 178 Node* NewPhi(int count, Node* input, Node* control);
177 Node* NewEffectPhi(int count, Node* input, Node* control); 179 Node* NewEffectPhi(int count, Node* input, Node* control);
178 180
181 Node* NewOuterContextParam();
182 Node* NewCurrentContextOsrValue();
183
179 // Helpers for merging control, effect or value dependencies. 184 // Helpers for merging control, effect or value dependencies.
180 Node* MergeControl(Node* control, Node* other); 185 Node* MergeControl(Node* control, Node* other);
181 Node* MergeEffect(Node* value, Node* other, Node* control); 186 Node* MergeEffect(Node* value, Node* other, Node* control);
182 Node* MergeValue(Node* value, Node* other, Node* control); 187 Node* MergeValue(Node* value, Node* other, Node* control);
183 188
184 // The main node creation chokepoint. Adds context, frame state, effect, 189 // The main node creation chokepoint. Adds context, frame state, effect,
185 // and control dependencies depending on the operator. 190 // and control dependencies depending on the operator.
186 Node* MakeNode(const Operator* op, int value_input_count, Node** value_inputs, 191 Node* MakeNode(const Operator* op, int value_input_count, Node** value_inputs,
187 bool incomplete); 192 bool incomplete);
188 193
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 Node* Lookup(Variable* variable) { 360 Node* Lookup(Variable* variable) {
356 DCHECK(variable->IsStackAllocated()); 361 DCHECK(variable->IsStackAllocated());
357 if (variable->IsParameter()) { 362 if (variable->IsParameter()) {
358 return values()->at(variable->index() + 1); 363 return values()->at(variable->index() + 1);
359 } else { 364 } else {
360 DCHECK(variable->IsStackLocal()); 365 DCHECK(variable->IsStackLocal());
361 return values()->at(variable->index() + parameters_count_); 366 return values()->at(variable->index() + parameters_count_);
362 } 367 }
363 } 368 }
364 369
370 Node* Context() const { return contexts_[contexts_.size() - 1]; }
Michael Starzinger 2015/02/17 10:34:37 Can use contexts()->back() here instead.
titzer 2015/02/17 10:44:17 Done.
371 void PushContext(Node* context) { contexts()->push_back(context); }
372 void PopContext() { contexts()->pop_back(); }
373
365 // Operations on the operand stack. 374 // Operations on the operand stack.
366 void Push(Node* node) { 375 void Push(Node* node) {
367 values()->push_back(node); 376 values()->push_back(node);
368 } 377 }
369 Node* Top() { 378 Node* Top() {
370 DCHECK(stack_height() > 0); 379 DCHECK(stack_height() > 0);
371 return values()->back(); 380 return values()->back();
372 } 381 }
373 Node* Pop() { 382 Node* Pop() {
374 DCHECK(stack_height() > 0); 383 DCHECK(stack_height() > 0);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 env->MarkAsUnreachable(); 438 env->MarkAsUnreachable();
430 return env; 439 return env;
431 } 440 }
432 441
433 // Copies this environment at a loop header control-flow point. 442 // Copies this environment at a loop header control-flow point.
434 Environment* CopyForLoop(BitVector* assigned, bool is_osr = false) { 443 Environment* CopyForLoop(BitVector* assigned, bool is_osr = false) {
435 PrepareForLoop(assigned, is_osr); 444 PrepareForLoop(assigned, is_osr);
436 return Copy(); 445 return Copy();
437 } 446 }
438 447
448 int ContextStackDepth() { return static_cast<int>(contexts_.size()); }
449
439 private: 450 private:
440 AstGraphBuilder* builder_; 451 AstGraphBuilder* builder_;
441 int parameters_count_; 452 int parameters_count_;
442 int locals_count_; 453 int locals_count_;
443 NodeVector values_; 454 NodeVector values_;
455 NodeVector contexts_;
444 Node* control_dependency_; 456 Node* control_dependency_;
445 Node* effect_dependency_; 457 Node* effect_dependency_;
446 Node* parameters_node_; 458 Node* parameters_node_;
447 Node* locals_node_; 459 Node* locals_node_;
448 Node* stack_node_; 460 Node* stack_node_;
449 461
450 explicit Environment(const Environment* copy); 462 explicit Environment(const Environment* copy);
451 Environment* Copy() { return new (zone()) Environment(this); } 463 Environment* Copy() { return new (zone()) Environment(this); }
452 void UpdateStateValues(Node** state_values, int offset, int count); 464 void UpdateStateValues(Node** state_values, int offset, int count);
453 Zone* zone() const { return builder_->local_zone(); } 465 Zone* zone() const { return builder_->local_zone(); }
454 Graph* graph() const { return builder_->graph(); } 466 Graph* graph() const { return builder_->graph(); }
455 AstGraphBuilder* builder() const { return builder_; } 467 AstGraphBuilder* builder() const { return builder_; }
456 CommonOperatorBuilder* common() { return builder_->common(); } 468 CommonOperatorBuilder* common() { return builder_->common(); }
457 NodeVector* values() { return &values_; } 469 NodeVector* values() { return &values_; }
470 NodeVector* contexts() { return &contexts_; }
458 471
459 // Prepare environment to be used as loop header. 472 // Prepare environment to be used as loop header.
460 void PrepareForLoop(BitVector* assigned, bool is_osr = false); 473 void PrepareForLoop(BitVector* assigned, bool is_osr = false);
461 }; 474 };
462 475
463 } // namespace compiler 476 } // namespace compiler
464 } // namespace internal 477 } // namespace internal
465 } // namespace v8 478 } // namespace v8
466 479
467 #endif // V8_COMPILER_AST_GRAPH_BUILDER_H_ 480 #endif // V8_COMPILER_AST_GRAPH_BUILDER_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler/ast-graph-builder.cc » ('j') | src/compiler/ast-graph-builder.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698