| 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 #include "src/compiler/liveness-analyzer.h" | 10 #include "src/compiler/liveness-analyzer.h" |
| 11 #include "src/compiler/state-values-utils.h" | 11 #include "src/compiler/state-values-utils.h" |
| 12 | 12 |
| 13 namespace v8 { | 13 namespace v8 { |
| 14 namespace internal { | 14 namespace internal { |
| 15 | 15 |
| 16 class BitVector; | 16 class BitVector; |
| 17 | 17 |
| 18 namespace compiler { | 18 namespace compiler { |
| 19 | 19 |
| 20 class ControlBuilder; | 20 class ControlBuilder; |
| 21 class Graph; | 21 class Graph; |
| 22 class JSTypeFeedbackTable; |
| 22 class LoopAssignmentAnalysis; | 23 class LoopAssignmentAnalysis; |
| 23 class LoopBuilder; | 24 class LoopBuilder; |
| 24 class Node; | 25 class Node; |
| 25 | 26 |
| 26 // The AstGraphBuilder produces a high-level IR graph, based on an | 27 // The AstGraphBuilder produces a high-level IR graph, based on an |
| 27 // underlying AST. The produced graph can either be compiled into a | 28 // underlying AST. The produced graph can either be compiled into a |
| 28 // stand-alone function or be wired into another graph for the purposes | 29 // stand-alone function or be wired into another graph for the purposes |
| 29 // of function inlining. | 30 // of function inlining. |
| 30 class AstGraphBuilder : public AstVisitor { | 31 class AstGraphBuilder : public AstVisitor { |
| 31 public: | 32 public: |
| 32 AstGraphBuilder(Zone* local_zone, CompilationInfo* info, JSGraph* jsgraph, | 33 AstGraphBuilder(Zone* local_zone, CompilationInfo* info, JSGraph* jsgraph, |
| 33 LoopAssignmentAnalysis* loop_assignment = NULL); | 34 LoopAssignmentAnalysis* loop_assignment = NULL, |
| 35 JSTypeFeedbackTable* js_type_feedback = NULL); |
| 34 | 36 |
| 35 // Creates a graph by visiting the entire AST. | 37 // Creates a graph by visiting the entire AST. |
| 36 bool CreateGraph(bool constant_context, bool stack_check = true); | 38 bool CreateGraph(bool constant_context, bool stack_check = true); |
| 37 | 39 |
| 38 // Helpers to create new control nodes. | 40 // Helpers to create new control nodes. |
| 39 Node* NewIfTrue() { return NewNode(common()->IfTrue()); } | 41 Node* NewIfTrue() { return NewNode(common()->IfTrue()); } |
| 40 Node* NewIfFalse() { return NewNode(common()->IfFalse()); } | 42 Node* NewIfFalse() { return NewNode(common()->IfFalse()); } |
| 41 Node* NewMerge() { return NewNode(common()->Merge(1), true); } | 43 Node* NewMerge() { return NewNode(common()->Merge(1), true); } |
| 42 Node* NewLoop() { return NewNode(common()->Loop(1), true); } | 44 Node* NewLoop() { return NewNode(common()->Loop(1), true); } |
| 43 Node* NewBranch(Node* condition, BranchHint hint = BranchHint::kNone) { | 45 Node* NewBranch(Node* condition, BranchHint hint = BranchHint::kNone) { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 | 100 |
| 99 // Result of loop assignment analysis performed before graph creation. | 101 // Result of loop assignment analysis performed before graph creation. |
| 100 LoopAssignmentAnalysis* loop_assignment_analysis_; | 102 LoopAssignmentAnalysis* loop_assignment_analysis_; |
| 101 | 103 |
| 102 // Cache for StateValues nodes for frame states. | 104 // Cache for StateValues nodes for frame states. |
| 103 StateValuesCache state_values_cache_; | 105 StateValuesCache state_values_cache_; |
| 104 | 106 |
| 105 // Analyzer of local variable liveness. | 107 // Analyzer of local variable liveness. |
| 106 LivenessAnalyzer liveness_analyzer_; | 108 LivenessAnalyzer liveness_analyzer_; |
| 107 | 109 |
| 110 // Type feedback table. |
| 111 JSTypeFeedbackTable* js_type_feedback_; |
| 112 |
| 108 // Growth increment for the temporary buffer used to construct input lists to | 113 // Growth increment for the temporary buffer used to construct input lists to |
| 109 // new nodes. | 114 // new nodes. |
| 110 static const int kInputBufferSizeIncrement = 64; | 115 static const int kInputBufferSizeIncrement = 64; |
| 111 | 116 |
| 112 Zone* local_zone() const { return local_zone_; } | 117 Zone* local_zone() const { return local_zone_; } |
| 113 Environment* environment() const { return environment_; } | 118 Environment* environment() const { return environment_; } |
| 114 AstContext* ast_context() const { return ast_context_; } | 119 AstContext* ast_context() const { return ast_context_; } |
| 115 ControlScope* execution_control() const { return execution_control_; } | 120 ControlScope* execution_control() const { return execution_control_; } |
| 116 ContextScope* execution_context() const { return execution_context_; } | 121 ContextScope* execution_context() const { return execution_context_; } |
| 117 CommonOperatorBuilder* common() const { return jsgraph_->common(); } | 122 CommonOperatorBuilder* common() const { return jsgraph_->common(); } |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 OutputFrameStateCombine state_combine = | 261 OutputFrameStateCombine state_combine = |
| 257 OutputFrameStateCombine::Ignore()); | 262 OutputFrameStateCombine::Ignore()); |
| 258 Node* BuildVariableDelete(Variable* var, BailoutId bailout_id, | 263 Node* BuildVariableDelete(Variable* var, BailoutId bailout_id, |
| 259 OutputFrameStateCombine state_combine); | 264 OutputFrameStateCombine state_combine); |
| 260 Node* BuildVariableLoad(Variable* var, BailoutId bailout_id, | 265 Node* BuildVariableLoad(Variable* var, BailoutId bailout_id, |
| 261 const VectorSlotPair& feedback, | 266 const VectorSlotPair& feedback, |
| 262 ContextualMode mode = CONTEXTUAL); | 267 ContextualMode mode = CONTEXTUAL); |
| 263 | 268 |
| 264 // Builders for property loads and stores. | 269 // Builders for property loads and stores. |
| 265 Node* BuildKeyedLoad(Node* receiver, Node* key, | 270 Node* BuildKeyedLoad(Node* receiver, Node* key, |
| 266 const VectorSlotPair& feedback); | 271 const VectorSlotPair& feedback, TypeFeedbackId id); |
| 267 Node* BuildNamedLoad(Node* receiver, Handle<Name> name, | 272 Node* BuildNamedLoad(Node* receiver, Handle<Name> name, |
| 268 const VectorSlotPair& feedback, | 273 const VectorSlotPair& feedback, TypeFeedbackId id, |
| 269 ContextualMode mode = NOT_CONTEXTUAL); | 274 ContextualMode mode = NOT_CONTEXTUAL); |
| 270 Node* BuildKeyedStore(Node* receiver, Node* key, Node* value); | 275 Node* BuildKeyedStore(Node* receiver, Node* key, Node* value, |
| 271 Node* BuildNamedStore(Node* receiver, Handle<Name>, Node* value); | 276 TypeFeedbackId id); |
| 277 Node* BuildNamedStore(Node* receiver, Handle<Name>, Node* value, |
| 278 TypeFeedbackId id); |
| 272 | 279 |
| 273 // Builders for accessing the function context. | 280 // Builders for accessing the function context. |
| 274 Node* BuildLoadBuiltinsObject(); | 281 Node* BuildLoadBuiltinsObject(); |
| 275 Node* BuildLoadGlobalObject(); | 282 Node* BuildLoadGlobalObject(); |
| 276 Node* BuildLoadGlobalProxy(); | 283 Node* BuildLoadGlobalProxy(); |
| 277 Node* BuildLoadClosure(); | 284 Node* BuildLoadClosure(); |
| 278 Node* BuildLoadObjectField(Node* object, int offset); | 285 Node* BuildLoadObjectField(Node* object, int offset); |
| 279 | 286 |
| 280 // Builders for accessing external references. | 287 // Builders for accessing external references. |
| 281 Node* BuildLoadExternal(ExternalReference ref, MachineType type); | 288 Node* BuildLoadExternal(ExternalReference ref, MachineType type); |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 | 507 |
| 501 // Prepare environment to be used as loop header. | 508 // Prepare environment to be used as loop header. |
| 502 void PrepareForLoop(BitVector* assigned, bool is_osr = false); | 509 void PrepareForLoop(BitVector* assigned, bool is_osr = false); |
| 503 }; | 510 }; |
| 504 | 511 |
| 505 } // namespace compiler | 512 } // namespace compiler |
| 506 } // namespace internal | 513 } // namespace internal |
| 507 } // namespace v8 | 514 } // namespace v8 |
| 508 | 515 |
| 509 #endif // V8_COMPILER_AST_GRAPH_BUILDER_H_ | 516 #endif // V8_COMPILER_AST_GRAPH_BUILDER_H_ |
| OLD | NEW |