| OLD | NEW |
| 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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 ContextScope* execution_context_; | 87 ContextScope* execution_context_; |
| 88 | 88 |
| 89 // Nodes representing values in the activation record. | 89 // Nodes representing values in the activation record. |
| 90 SetOncePointer<Node> function_closure_; | 90 SetOncePointer<Node> function_closure_; |
| 91 SetOncePointer<Node> function_context_; | 91 SetOncePointer<Node> function_context_; |
| 92 | 92 |
| 93 // Temporary storage for building node input lists. | 93 // Temporary storage for building node input lists. |
| 94 int input_buffer_size_; | 94 int input_buffer_size_; |
| 95 Node** input_buffer_; | 95 Node** input_buffer_; |
| 96 | 96 |
| 97 // Node representing the control dependency for dead code. | |
| 98 SetOncePointer<Node> dead_control_; | |
| 99 | |
| 100 // Merge of all control nodes that exit the function body. | 97 // Merge of all control nodes that exit the function body. |
| 101 Node* exit_control_; | 98 Node* exit_control_; |
| 102 | 99 |
| 103 // Result of loop assignment analysis performed before graph creation. | 100 // Result of loop assignment analysis performed before graph creation. |
| 104 LoopAssignmentAnalysis* loop_assignment_analysis_; | 101 LoopAssignmentAnalysis* loop_assignment_analysis_; |
| 105 | 102 |
| 106 // Growth increment for the temporary buffer used to construct input lists to | 103 // Growth increment for the temporary buffer used to construct input lists to |
| 107 // new nodes. | 104 // new nodes. |
| 108 static const int kInputBufferSizeIncrement = 64; | 105 static const int kInputBufferSizeIncrement = 64; |
| 109 | 106 |
| 110 Zone* local_zone() const { return local_zone_; } | 107 Zone* local_zone() const { return local_zone_; } |
| 111 Environment* environment() { return environment_; } | 108 Environment* environment() { return environment_; } |
| 112 AstContext* ast_context() const { return ast_context_; } | 109 AstContext* ast_context() const { return ast_context_; } |
| 113 ControlScope* execution_control() const { return execution_control_; } | 110 ControlScope* execution_control() const { return execution_control_; } |
| 114 ContextScope* execution_context() const { return execution_context_; } | 111 ContextScope* execution_context() const { return execution_context_; } |
| 115 CommonOperatorBuilder* common() const { return jsgraph_->common(); } | 112 CommonOperatorBuilder* common() const { return jsgraph_->common(); } |
| 116 CompilationInfo* info() const { return info_; } | 113 CompilationInfo* info() const { return info_; } |
| 117 LanguageMode language_mode() const; | 114 LanguageMode language_mode() const; |
| 118 JSGraph* jsgraph() { return jsgraph_; } | 115 JSGraph* jsgraph() { return jsgraph_; } |
| 119 Graph* graph() { return jsgraph_->graph(); } | 116 Graph* graph() { return jsgraph_->graph(); } |
| 120 Zone* graph_zone() { return graph()->zone(); } | 117 Zone* graph_zone() { return graph()->zone(); } |
| 121 JSOperatorBuilder* javascript() { return jsgraph_->javascript(); } | 118 JSOperatorBuilder* javascript() { return jsgraph_->javascript(); } |
| 122 ZoneVector<Handle<Object>>* globals() { return &globals_; } | 119 ZoneVector<Handle<Object>>* globals() { return &globals_; } |
| 123 Scope* current_scope() const; | 120 Scope* current_scope() const; |
| 124 Node* current_context() const; | 121 Node* current_context() const; |
| 125 Node* dead_control(); | |
| 126 Node* exit_control() const { return exit_control_; } | 122 Node* exit_control() const { return exit_control_; } |
| 127 | 123 |
| 128 void set_environment(Environment* env) { environment_ = env; } | 124 void set_environment(Environment* env) { environment_ = env; } |
| 129 void set_ast_context(AstContext* ctx) { ast_context_ = ctx; } | 125 void set_ast_context(AstContext* ctx) { ast_context_ = ctx; } |
| 130 void set_execution_control(ControlScope* ctrl) { execution_control_ = ctrl; } | 126 void set_execution_control(ControlScope* ctrl) { execution_control_ = ctrl; } |
| 131 void set_execution_context(ContextScope* ctx) { execution_context_ = ctx; } | 127 void set_execution_context(ContextScope* ctx) { execution_context_ = ctx; } |
| 132 void set_exit_control(Node* exit) { exit_control_ = exit; } | 128 void set_exit_control(Node* exit) { exit_control_ = exit; } |
| 133 | 129 |
| 134 // Node creation helpers. | 130 // Node creation helpers. |
| 135 Node* NewNode(const Operator* op, bool incomplete = false) { | 131 Node* NewNode(const Operator* op, bool incomplete = false) { |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 } | 400 } |
| 405 | 401 |
| 406 // Effect dependency tracked by this environment. | 402 // Effect dependency tracked by this environment. |
| 407 Node* GetEffectDependency() { return effect_dependency_; } | 403 Node* GetEffectDependency() { return effect_dependency_; } |
| 408 void UpdateEffectDependency(Node* dependency) { | 404 void UpdateEffectDependency(Node* dependency) { |
| 409 effect_dependency_ = dependency; | 405 effect_dependency_ = dependency; |
| 410 } | 406 } |
| 411 | 407 |
| 412 // Mark this environment as being unreachable. | 408 // Mark this environment as being unreachable. |
| 413 void MarkAsUnreachable() { | 409 void MarkAsUnreachable() { |
| 414 UpdateControlDependency(builder()->dead_control()); | 410 UpdateControlDependency(builder()->jsgraph()->DeadControl()); |
| 415 } | 411 } |
| 416 bool IsMarkedAsUnreachable() { | 412 bool IsMarkedAsUnreachable() { |
| 417 return GetControlDependency()->opcode() == IrOpcode::kDead; | 413 return GetControlDependency()->opcode() == IrOpcode::kDead; |
| 418 } | 414 } |
| 419 | 415 |
| 420 // Merge another environment into this one. | 416 // Merge another environment into this one. |
| 421 void Merge(Environment* other); | 417 void Merge(Environment* other); |
| 422 | 418 |
| 423 // Copies this environment at a control-flow split point. | 419 // Copies this environment at a control-flow split point. |
| 424 Environment* CopyForConditional() { return Copy(); } | 420 Environment* CopyForConditional() { return Copy(); } |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 | 454 |
| 459 // Prepare environment to be used as loop header. | 455 // Prepare environment to be used as loop header. |
| 460 void PrepareForLoop(BitVector* assigned, bool is_osr = false); | 456 void PrepareForLoop(BitVector* assigned, bool is_osr = false); |
| 461 }; | 457 }; |
| 462 | 458 |
| 463 } // namespace compiler | 459 } // namespace compiler |
| 464 } // namespace internal | 460 } // namespace internal |
| 465 } // namespace v8 | 461 } // namespace v8 |
| 466 | 462 |
| 467 #endif // V8_COMPILER_AST_GRAPH_BUILDER_H_ | 463 #endif // V8_COMPILER_AST_GRAPH_BUILDER_H_ |
| OLD | NEW |