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

Side by Side Diff: test/cctest/compiler/simplified-graph-builder.cc

Issue 539903002: Move StructuredMachineAssembler into cctest suite. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Add a TODO. Created 6 years, 3 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
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 "test/cctest/compiler/simplified-graph-builder.h" 5 #include "test/cctest/compiler/simplified-graph-builder.h"
6 6
7 #include "src/compiler/operator-properties.h"
8 #include "src/compiler/operator-properties-inl.h"
9
7 namespace v8 { 10 namespace v8 {
8 namespace internal { 11 namespace internal {
9 namespace compiler { 12 namespace compiler {
10 13
11 SimplifiedGraphBuilder::SimplifiedGraphBuilder( 14 SimplifiedGraphBuilder::SimplifiedGraphBuilder(
12 Graph* graph, CommonOperatorBuilder* common, 15 Graph* graph, CommonOperatorBuilder* common,
13 MachineOperatorBuilder* machine, SimplifiedOperatorBuilder* simplified) 16 MachineOperatorBuilder* machine, SimplifiedOperatorBuilder* simplified)
14 : StructuredGraphBuilder(graph, common), 17 : GraphBuilder(graph),
18 effect_(NULL),
19 return_(NULL),
20 common_(common),
15 machine_(machine), 21 machine_(machine),
16 simplified_(simplified) {} 22 simplified_(simplified) {}
17 23
18 24
19 void SimplifiedGraphBuilder::Begin(int num_parameters) { 25 void SimplifiedGraphBuilder::Begin(int num_parameters) {
20 DCHECK(graph()->start() == NULL); 26 DCHECK(graph()->start() == NULL);
21 Node* start = graph()->NewNode(common()->Start(num_parameters)); 27 Node* start = graph()->NewNode(common()->Start(num_parameters));
22 graph()->SetStart(start); 28 graph()->SetStart(start);
23 set_environment(new (zone()) Environment(this, start)); 29 effect_ = start;
24 } 30 }
25 31
26 32
27 void SimplifiedGraphBuilder::Return(Node* value) { 33 void SimplifiedGraphBuilder::Return(Node* value) {
28 Node* control = NewNode(common()->Return(), value); 34 return_ =
29 UpdateControlDependencyToLeaveFunction(control); 35 graph()->NewNode(common()->Return(), value, effect_, graph()->start());
36 effect_ = NULL;
30 } 37 }
31 38
32 39
33 void SimplifiedGraphBuilder::End() { 40 void SimplifiedGraphBuilder::End() {
34 environment()->UpdateControlDependency(exit_control()); 41 Node* end = graph()->NewNode(common()->End(), return_);
35 graph()->SetEnd(NewNode(common()->End())); 42 graph()->SetEnd(end);
36 } 43 }
37 44
38 45
39 SimplifiedGraphBuilder::Environment::Environment( 46 Node* SimplifiedGraphBuilder::MakeNode(Operator* op, int value_input_count,
40 SimplifiedGraphBuilder* builder, Node* control_dependency) 47 Node** value_inputs) {
41 : StructuredGraphBuilder::Environment(builder, control_dependency) {} 48 DCHECK(op->InputCount() == value_input_count);
42 49
50 DCHECK(!OperatorProperties::HasContextInput(op));
51 DCHECK(!OperatorProperties::HasFrameStateInput(op));
52 bool has_control = OperatorProperties::GetControlInputCount(op) == 1;
53 bool has_effect = OperatorProperties::GetEffectInputCount(op) == 1;
43 54
44 Node* SimplifiedGraphBuilder::Environment::Top() { 55 DCHECK(OperatorProperties::GetControlInputCount(op) < 2);
45 DCHECK(!values()->empty()); 56 DCHECK(OperatorProperties::GetEffectInputCount(op) < 2);
46 return values()->back();
47 }
48 57
58 Node* result = NULL;
59 if (!has_control && !has_effect) {
60 result = graph()->NewNode(op, value_input_count, value_inputs);
61 } else {
62 int input_count_with_deps = value_input_count;
63 if (has_control) ++input_count_with_deps;
64 if (has_effect) ++input_count_with_deps;
65 Node** buffer = zone()->NewArray<Node*>(input_count_with_deps);
66 memcpy(buffer, value_inputs, kPointerSize * value_input_count);
67 Node** current_input = buffer + value_input_count;
68 if (has_effect) {
69 *current_input++ = effect_;
70 }
71 if (has_control) {
72 *current_input++ = graph()->start();
73 }
74 result = graph()->NewNode(op, input_count_with_deps, buffer);
75 if (has_effect) {
76 effect_ = result;
77 }
78 if (OperatorProperties::HasControlOutput(result->op())) {
79 // This graph builder does not support control flow.
80 UNREACHABLE();
81 }
82 }
49 83
50 void SimplifiedGraphBuilder::Environment::Push(Node* node) { 84 return result;
51 values()->push_back(node);
52 }
53
54
55 Node* SimplifiedGraphBuilder::Environment::Pop() {
56 DCHECK(!values()->empty());
57 Node* back = values()->back();
58 values()->pop_back();
59 return back;
60 }
61
62
63 void SimplifiedGraphBuilder::Environment::Poke(size_t depth, Node* node) {
64 DCHECK(depth < values()->size());
65 size_t index = values()->size() - depth - 1;
66 values()->at(index) = node;
67 }
68
69
70 Node* SimplifiedGraphBuilder::Environment::Peek(size_t depth) {
71 DCHECK(depth < values()->size());
72 size_t index = values()->size() - depth - 1;
73 return values()->at(index);
74 } 85 }
75 86
76 } // namespace compiler 87 } // namespace compiler
77 } // namespace internal 88 } // namespace internal
78 } // namespace v8 89 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/compiler/simplified-graph-builder.h ('k') | test/cctest/compiler/structured-machine-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698