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

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

Issue 595863002: Adding more missing deoptimization points in Turbofan. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebase Created 6 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « src/ast.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/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/ast.h" 10 #include "src/ast.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 73
74 // Builder to create a local function context. 74 // Builder to create a local function context.
75 Node* BuildLocalFunctionContext(Node* context, Node* closure); 75 Node* BuildLocalFunctionContext(Node* context, Node* closure);
76 76
77 // Builder to create an arguments object if it is used. 77 // Builder to create an arguments object if it is used.
78 Node* BuildArgumentsObject(Variable* arguments); 78 Node* BuildArgumentsObject(Variable* arguments);
79 79
80 // Builders for variable load and assignment. 80 // Builders for variable load and assignment.
81 Node* BuildVariableAssignment(Variable* var, Node* value, Token::Value op, 81 Node* BuildVariableAssignment(Variable* var, Node* value, Token::Value op,
82 BailoutId bailout_id); 82 BailoutId bailout_id);
83 Node* BuildVariableDelete(Variable* var); 83 Node* BuildVariableDelete(Variable* var, BailoutId bailout_id,
84 OutputFrameStateCombine state_combine);
84 Node* BuildVariableLoad(Variable* var, BailoutId bailout_id, 85 Node* BuildVariableLoad(Variable* var, BailoutId bailout_id,
85 ContextualMode mode = CONTEXTUAL); 86 ContextualMode mode = CONTEXTUAL);
86 87
87 // Builders for accessing the function context. 88 // Builders for accessing the function context.
88 Node* BuildLoadBuiltinsObject(); 89 Node* BuildLoadBuiltinsObject();
89 Node* BuildLoadGlobalObject(); 90 Node* BuildLoadGlobalObject();
90 Node* BuildLoadClosure(); 91 Node* BuildLoadClosure();
91 Node* BuildLoadObjectField(Node* object, int offset); 92 Node* BuildLoadObjectField(Node* object, int offset);
92 93
93 // Builders for automatic type conversion. 94 // Builders for automatic type conversion.
94 Node* BuildToBoolean(Node* value); 95 Node* BuildToBoolean(Node* value);
95 96
96 // Builders for error reporting at runtime. 97 // Builders for error reporting at runtime.
97 Node* BuildThrowReferenceError(Variable* var); 98 Node* BuildThrowReferenceError(Variable* var, BailoutId bailout_id);
98 99
99 // Builders for dynamic hole-checks at runtime. 100 // Builders for dynamic hole-checks at runtime.
100 Node* BuildHoleCheckSilent(Node* value, Node* for_hole, Node* not_hole); 101 Node* BuildHoleCheckSilent(Node* value, Node* for_hole, Node* not_hole);
101 Node* BuildHoleCheckThrow(Node* value, Variable* var, Node* not_hole); 102 Node* BuildHoleCheckThrow(Node* value, Variable* var, Node* not_hole,
103 BailoutId bailout_id);
102 104
103 // Builders for binary operations. 105 // Builders for binary operations.
104 Node* BuildBinaryOp(Node* left, Node* right, Token::Value op); 106 Node* BuildBinaryOp(Node* left, Node* right, Token::Value op);
105 107
106 #define DECLARE_VISIT(type) virtual void Visit##type(type* node); 108 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
107 // Visiting functions for AST nodes make this an AstVisitor. 109 // Visiting functions for AST nodes make this an AstVisitor.
108 AST_NODE_LIST(DECLARE_VISIT) 110 AST_NODE_LIST(DECLARE_VISIT)
109 #undef DECLARE_VISIT 111 #undef DECLARE_VISIT
110 112
111 // Visiting function for declarations list is overridden. 113 // Visiting function for declarations list is overridden.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 168
167 // Dispatched from VisitBinaryOperation. 169 // Dispatched from VisitBinaryOperation.
168 void VisitComma(BinaryOperation* expr); 170 void VisitComma(BinaryOperation* expr);
169 void VisitLogicalExpression(BinaryOperation* expr); 171 void VisitLogicalExpression(BinaryOperation* expr);
170 void VisitArithmeticExpression(BinaryOperation* expr); 172 void VisitArithmeticExpression(BinaryOperation* expr);
171 173
172 // Dispatched from VisitForInStatement. 174 // Dispatched from VisitForInStatement.
173 void VisitForInAssignment(Expression* expr, Node* value); 175 void VisitForInAssignment(Expression* expr, Node* value);
174 176
175 // Builds deoptimization for a given node. 177 // Builds deoptimization for a given node.
176 void PrepareFrameState(Node* node, BailoutId ast_id, 178 void PrepareFrameState(
177 OutputFrameStateCombine combine = kIgnoreOutput); 179 Node* node, BailoutId ast_id,
180 OutputFrameStateCombine combine = OutputFrameStateCombine::Ignore());
178 181
179 OutputFrameStateCombine StateCombineFromAstContext(); 182 OutputFrameStateCombine StateCombineFromAstContext();
180 183
181 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); 184 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
182 DISALLOW_COPY_AND_ASSIGN(AstGraphBuilder); 185 DISALLOW_COPY_AND_ASSIGN(AstGraphBuilder);
183 }; 186 };
184 187
185 188
186 // The abstract execution environment for generated code consists of 189 // The abstract execution environment for generated code consists of
187 // parameter variables, local variables and the operand stack. The 190 // parameter variables, local variables and the operand stack. The
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 // decides how the evaluation result is passed up the visitor. 284 // decides how the evaluation result is passed up the visitor.
282 class AstGraphBuilder::AstContext BASE_EMBEDDED { 285 class AstGraphBuilder::AstContext BASE_EMBEDDED {
283 public: 286 public:
284 bool IsEffect() const { return kind_ == Expression::kEffect; } 287 bool IsEffect() const { return kind_ == Expression::kEffect; }
285 bool IsValue() const { return kind_ == Expression::kValue; } 288 bool IsValue() const { return kind_ == Expression::kValue; }
286 bool IsTest() const { return kind_ == Expression::kTest; } 289 bool IsTest() const { return kind_ == Expression::kTest; }
287 290
288 // Determines how to combine the frame state with the value 291 // Determines how to combine the frame state with the value
289 // that is about to be plugged into this AstContext. 292 // that is about to be plugged into this AstContext.
290 OutputFrameStateCombine GetStateCombine() { 293 OutputFrameStateCombine GetStateCombine() {
291 return IsEffect() ? kIgnoreOutput : kPushOutput; 294 return IsEffect() ? OutputFrameStateCombine::Ignore()
295 : OutputFrameStateCombine::Push();
292 } 296 }
293 297
294 // Plug a node into this expression context. Call this function in tail 298 // Plug a node into this expression context. Call this function in tail
295 // position in the Visit functions for expressions. 299 // position in the Visit functions for expressions.
296 virtual void ProduceValue(Node* value) = 0; 300 virtual void ProduceValue(Node* value) = 0;
297 301
298 // Unplugs a node from this expression context. Call this to retrieve the 302 // Unplugs a node from this expression context. Call this to retrieve the
299 // result of another Visit function that already plugged the context. 303 // result of another Visit function that already plugged the context.
300 virtual Node* ConsumeValue() = 0; 304 virtual Node* ConsumeValue() = 0;
301 305
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 }; 425 };
422 426
423 Scope* AstGraphBuilder::current_scope() const { 427 Scope* AstGraphBuilder::current_scope() const {
424 return execution_context_->scope(); 428 return execution_context_->scope();
425 } 429 }
426 } 430 }
427 } 431 }
428 } // namespace v8::internal::compiler 432 } // namespace v8::internal::compiler
429 433
430 #endif // V8_COMPILER_AST_GRAPH_BUILDER_H_ 434 #endif // V8_COMPILER_AST_GRAPH_BUILDER_H_
OLDNEW
« no previous file with comments | « src/ast.h ('k') | src/compiler/ast-graph-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698