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

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

Issue 1021713005: [turbofan]: Integrate basic type feedback for property accesses. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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 unified diff | Download patch
« no previous file with comments | « src/compiler/access-builder.h ('k') | src/compiler/ast-graph-builder.cc » ('j') | no next file with comments »
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 #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
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
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
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_
OLDNEW
« no previous file with comments | « src/compiler/access-builder.h ('k') | src/compiler/ast-graph-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698