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

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

Issue 448113002: Minor simplification and cleanup of graph builder. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 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/compiler/ast-graph-builder.h ('k') | src/compiler/control-builders.h » ('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 #include "src/compiler/ast-graph-builder.h" 5 #include "src/compiler/ast-graph-builder.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 #include "src/compiler/control-builders.h" 8 #include "src/compiler/control-builders.h"
9 #include "src/compiler/node-properties.h" 9 #include "src/compiler/node-properties.h"
10 #include "src/compiler/node-properties-inl.h" 10 #include "src/compiler/node-properties-inl.h"
11 #include "src/full-codegen.h" 11 #include "src/full-codegen.h"
12 #include "src/parser.h" 12 #include "src/parser.h"
13 #include "src/scopes.h" 13 #include "src/scopes.h"
14 14
15 namespace v8 { 15 namespace v8 {
16 namespace internal { 16 namespace internal {
17 namespace compiler { 17 namespace compiler {
18 18
19 AstGraphBuilder::AstGraphBuilder(CompilationInfo* info, JSGraph* jsgraph, 19 AstGraphBuilder::AstGraphBuilder(CompilationInfo* info, JSGraph* jsgraph)
20 SourcePositionTable* source_positions)
21 : StructuredGraphBuilder(jsgraph->graph(), jsgraph->common()), 20 : StructuredGraphBuilder(jsgraph->graph(), jsgraph->common()),
22 info_(info), 21 info_(info),
23 jsgraph_(jsgraph), 22 jsgraph_(jsgraph),
24 source_positions_(source_positions),
25 globals_(0, info->zone()), 23 globals_(0, info->zone()),
26 breakable_(NULL), 24 breakable_(NULL),
27 execution_context_(NULL) { 25 execution_context_(NULL) {
28 InitializeAstVisitor(info->zone()); 26 InitializeAstVisitor(info->zone());
29 } 27 }
30 28
31 29
32 Node* AstGraphBuilder::GetFunctionClosure() { 30 Node* AstGraphBuilder::GetFunctionClosure() {
33 if (!function_closure_.is_set()) { 31 if (!function_closure_.is_set()) {
34 // Parameter -1 is special for the function closure 32 // Parameter -1 is special for the function closure
(...skipping 13 matching lines...) Expand all
48 function_context_.set(node); 46 function_context_.set(node);
49 } 47 }
50 return function_context_.get(); 48 return function_context_.get();
51 } 49 }
52 50
53 51
54 bool AstGraphBuilder::CreateGraph() { 52 bool AstGraphBuilder::CreateGraph() {
55 Scope* scope = info()->scope(); 53 Scope* scope = info()->scope();
56 DCHECK(graph() != NULL); 54 DCHECK(graph() != NULL);
57 55
58 SourcePositionTable::Scope start_pos(
59 source_positions(),
60 SourcePosition(info()->shared_info()->start_position()));
61
62 // Set up the basic structure of the graph. 56 // Set up the basic structure of the graph.
63 graph()->SetStart( 57 int parameter_count = info()->num_parameters();
64 graph()->NewNode(common()->Start(info()->num_parameters()))); 58 graph()->SetStart(graph()->NewNode(common()->Start(parameter_count)));
65 59
66 // Initialize the top-level environment. 60 // Initialize the top-level environment.
67 Environment env(this, scope, graph()->start()); 61 Environment env(this, scope, graph()->start());
68 set_environment(&env); 62 set_environment(&env);
69 63
70 // Build node to initialize local function context. 64 // Build node to initialize local function context.
71 Node* closure = GetFunctionClosure(); 65 Node* closure = GetFunctionClosure();
72 Node* outer = GetFunctionContext(); 66 Node* outer = GetFunctionContext();
73 Node* inner = BuildLocalFunctionContext(outer, closure); 67 Node* inner = BuildLocalFunctionContext(outer, closure);
74 68
(...skipping 16 matching lines...) Expand all
91 // Visit declarations within the function scope. 85 // Visit declarations within the function scope.
92 VisitDeclarations(scope->declarations()); 86 VisitDeclarations(scope->declarations());
93 87
94 // TODO(mstarzinger): This should do an inlined stack check. 88 // TODO(mstarzinger): This should do an inlined stack check.
95 NewNode(javascript()->Runtime(Runtime::kStackGuard, 0)); 89 NewNode(javascript()->Runtime(Runtime::kStackGuard, 0));
96 90
97 // Visit statements in the function body. 91 // Visit statements in the function body.
98 VisitStatements(info()->function()->body()); 92 VisitStatements(info()->function()->body());
99 if (HasStackOverflow()) return false; 93 if (HasStackOverflow()) return false;
100 94
101 SourcePositionTable::Scope end_pos(
102 source_positions(),
103 SourcePosition(info()->shared_info()->end_position() - 1));
104
105 // Emit tracing call if requested to do so. 95 // Emit tracing call if requested to do so.
106 if (FLAG_trace) { 96 if (FLAG_trace) {
107 // TODO(mstarzinger): Only traces implicit return. 97 // TODO(mstarzinger): Only traces implicit return.
108 Node* return_value = jsgraph()->UndefinedConstant(); 98 Node* return_value = jsgraph()->UndefinedConstant();
109 NewNode(javascript()->Runtime(Runtime::kTraceExit, 1), return_value); 99 NewNode(javascript()->Runtime(Runtime::kTraceExit, 1), return_value);
110 } 100 }
111 101
112 // Return 'undefined' in case we can fall off the end. 102 // Return 'undefined' in case we can fall off the end.
113 Node* control = NewNode(common()->Return(), jsgraph()->UndefinedConstant()); 103 Node* control = NewNode(common()->Return(), jsgraph()->UndefinedConstant());
114 UpdateControlDependencyToLeaveFunction(control); 104 UpdateControlDependencyToLeaveFunction(control);
(...skipping 1836 matching lines...) Expand 10 before | Expand all | Expand 10 after
1951 UNREACHABLE(); 1941 UNREACHABLE();
1952 js_op = NULL; 1942 js_op = NULL;
1953 } 1943 }
1954 return NewNode(js_op, left, right); 1944 return NewNode(js_op, left, right);
1955 } 1945 }
1956 1946
1957 1947
1958 void AstGraphBuilder::BuildLazyBailout(Node* node, BailoutId ast_id) { 1948 void AstGraphBuilder::BuildLazyBailout(Node* node, BailoutId ast_id) {
1959 if (OperatorProperties::CanLazilyDeoptimize(node->op())) { 1949 if (OperatorProperties::CanLazilyDeoptimize(node->op())) {
1960 // The deopting node should have an outgoing control dependency. 1950 // The deopting node should have an outgoing control dependency.
1961 DCHECK(GetControlDependency() == node); 1951 DCHECK(environment()->GetControlDependency() == node);
1962 1952
1963 StructuredGraphBuilder::Environment* continuation_env = 1953 StructuredGraphBuilder::Environment* continuation_env = environment();
1964 environment_internal();
1965 // Create environment for the deoptimization block, and build the block. 1954 // Create environment for the deoptimization block, and build the block.
1966 StructuredGraphBuilder::Environment* deopt_env = 1955 StructuredGraphBuilder::Environment* deopt_env =
1967 CopyEnvironment(continuation_env); 1956 CopyEnvironment(continuation_env);
1968 set_environment(deopt_env); 1957 set_environment(deopt_env);
1969 1958
1970 NewNode(common()->LazyDeoptimization()); 1959 NewNode(common()->LazyDeoptimization());
1971 1960
1972 Node* state_node = environment()->Checkpoint(ast_id); 1961 Node* state_node = environment()->Checkpoint(ast_id);
1973 1962
1974 Node* deoptimize_node = NewNode(common()->Deoptimize(), state_node); 1963 Node* deoptimize_node = NewNode(common()->Deoptimize(), state_node);
1975 1964
1976 UpdateControlDependencyToLeaveFunction(deoptimize_node); 1965 UpdateControlDependencyToLeaveFunction(deoptimize_node);
1977 1966
1978 // Continue with the original environment. 1967 // Continue with the original environment.
1979 set_environment(continuation_env); 1968 set_environment(continuation_env);
1980 1969
1981 NewNode(common()->Continuation()); 1970 NewNode(common()->Continuation());
1982 } 1971 }
1983 } 1972 }
1984 } 1973 }
1985 } 1974 }
1986 } // namespace v8::internal::compiler 1975 } // namespace v8::internal::compiler
OLDNEW
« no previous file with comments | « src/compiler/ast-graph-builder.h ('k') | src/compiler/control-builders.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698