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_CCTEST_COMPILER_SIMPLIFIED_GRAPH_BUILDER_H_ | 5 #ifndef V8_CCTEST_COMPILER_SIMPLIFIED_GRAPH_BUILDER_H_ |
6 #define V8_CCTEST_COMPILER_SIMPLIFIED_GRAPH_BUILDER_H_ | 6 #define V8_CCTEST_COMPILER_SIMPLIFIED_GRAPH_BUILDER_H_ |
7 | 7 |
8 #include "src/compiler/common-operator.h" | 8 #include "src/compiler/common-operator.h" |
9 #include "src/compiler/graph-builder.h" | 9 #include "src/compiler/graph-builder.h" |
10 #include "src/compiler/machine-node-factory.h" | 10 #include "src/compiler/machine-node-factory.h" |
11 #include "src/compiler/machine-operator.h" | 11 #include "src/compiler/machine-operator.h" |
12 #include "src/compiler/simplified-node-factory.h" | |
13 #include "src/compiler/simplified-operator.h" | 12 #include "src/compiler/simplified-operator.h" |
14 #include "test/cctest/cctest.h" | 13 #include "test/cctest/cctest.h" |
15 #include "test/cctest/compiler/call-tester.h" | 14 #include "test/cctest/compiler/call-tester.h" |
16 | 15 |
17 namespace v8 { | 16 namespace v8 { |
18 namespace internal { | 17 namespace internal { |
19 namespace compiler { | 18 namespace compiler { |
20 | 19 |
21 class SimplifiedGraphBuilder | 20 class SimplifiedGraphBuilder |
22 : public StructuredGraphBuilder, | 21 : public GraphBuilder, |
23 public MachineNodeFactory<SimplifiedGraphBuilder>, | 22 public MachineNodeFactory<SimplifiedGraphBuilder> { |
24 public SimplifiedNodeFactory<SimplifiedGraphBuilder> { | |
25 public: | 23 public: |
26 SimplifiedGraphBuilder(Graph* graph, CommonOperatorBuilder* common, | 24 SimplifiedGraphBuilder(Graph* graph, CommonOperatorBuilder* common, |
27 MachineOperatorBuilder* machine, | 25 MachineOperatorBuilder* machine, |
28 SimplifiedOperatorBuilder* simplified); | 26 SimplifiedOperatorBuilder* simplified); |
29 virtual ~SimplifiedGraphBuilder() {} | 27 virtual ~SimplifiedGraphBuilder() {} |
30 | 28 |
31 class Environment : public StructuredGraphBuilder::Environment { | 29 Zone* zone() const { return graph()->zone(); } |
32 public: | |
33 Environment(SimplifiedGraphBuilder* builder, Node* control_dependency); | |
34 | |
35 // TODO(dcarney): encode somehow and merge into StructuredGraphBuilder. | |
36 // SSA renaming operations. | |
37 Node* Top(); | |
38 void Push(Node* node); | |
39 Node* Pop(); | |
40 void Poke(size_t depth, Node* node); | |
41 Node* Peek(size_t depth); | |
42 }; | |
43 | |
44 Isolate* isolate() const { return zone()->isolate(); } | 30 Isolate* isolate() const { return zone()->isolate(); } |
45 Zone* zone() const { return StructuredGraphBuilder::zone(); } | 31 CommonOperatorBuilder* common() const { return common_; } |
46 CommonOperatorBuilder* common() const { | |
47 return StructuredGraphBuilder::common(); | |
48 } | |
49 MachineOperatorBuilder* machine() const { return machine_; } | 32 MachineOperatorBuilder* machine() const { return machine_; } |
50 SimplifiedOperatorBuilder* simplified() const { return simplified_; } | 33 SimplifiedOperatorBuilder* simplified() const { return simplified_; } |
51 Environment* environment() { | |
52 return reinterpret_cast<Environment*>( | |
53 StructuredGraphBuilder::environment()); | |
54 } | |
55 | 34 |
56 // Initialize graph and builder. | 35 // Initialize graph and builder. |
57 void Begin(int num_parameters); | 36 void Begin(int num_parameters); |
58 | 37 |
59 void Return(Node* value); | 38 void Return(Node* value); |
60 | 39 |
61 // Close the graph. | 40 // Close the graph. |
62 void End(); | 41 void End(); |
63 | 42 |
| 43 Node* BooleanNot(Node* a) { return NewNode(simplified()->BooleanNot(), a); } |
| 44 |
| 45 Node* NumberEqual(Node* a, Node* b) { |
| 46 return NewNode(simplified()->NumberEqual(), a, b); |
| 47 } |
| 48 Node* NumberLessThan(Node* a, Node* b) { |
| 49 return NewNode(simplified()->NumberLessThan(), a, b); |
| 50 } |
| 51 Node* NumberLessThanOrEqual(Node* a, Node* b) { |
| 52 return NewNode(simplified()->NumberLessThanOrEqual(), a, b); |
| 53 } |
| 54 Node* NumberAdd(Node* a, Node* b) { |
| 55 return NewNode(simplified()->NumberAdd(), a, b); |
| 56 } |
| 57 Node* NumberSubtract(Node* a, Node* b) { |
| 58 return NewNode(simplified()->NumberSubtract(), a, b); |
| 59 } |
| 60 Node* NumberMultiply(Node* a, Node* b) { |
| 61 return NewNode(simplified()->NumberMultiply(), a, b); |
| 62 } |
| 63 Node* NumberDivide(Node* a, Node* b) { |
| 64 return NewNode(simplified()->NumberDivide(), a, b); |
| 65 } |
| 66 Node* NumberModulus(Node* a, Node* b) { |
| 67 return NewNode(simplified()->NumberModulus(), a, b); |
| 68 } |
| 69 Node* NumberToInt32(Node* a) { |
| 70 return NewNode(simplified()->NumberToInt32(), a); |
| 71 } |
| 72 Node* NumberToUint32(Node* a) { |
| 73 return NewNode(simplified()->NumberToUint32(), a); |
| 74 } |
| 75 |
| 76 Node* StringEqual(Node* a, Node* b) { |
| 77 return NewNode(simplified()->StringEqual(), a, b); |
| 78 } |
| 79 Node* StringLessThan(Node* a, Node* b) { |
| 80 return NewNode(simplified()->StringLessThan(), a, b); |
| 81 } |
| 82 Node* StringLessThanOrEqual(Node* a, Node* b) { |
| 83 return NewNode(simplified()->StringLessThanOrEqual(), a, b); |
| 84 } |
| 85 Node* StringAdd(Node* a, Node* b) { |
| 86 return NewNode(simplified()->StringAdd(), a, b); |
| 87 } |
| 88 |
| 89 Node* ChangeTaggedToInt32(Node* a) { |
| 90 return NewNode(simplified()->ChangeTaggedToInt32(), a); |
| 91 } |
| 92 Node* ChangeTaggedToUint32(Node* a) { |
| 93 return NewNode(simplified()->ChangeTaggedToUint32(), a); |
| 94 } |
| 95 Node* ChangeTaggedToFloat64(Node* a) { |
| 96 return NewNode(simplified()->ChangeTaggedToFloat64(), a); |
| 97 } |
| 98 Node* ChangeInt32ToTagged(Node* a) { |
| 99 return NewNode(simplified()->ChangeInt32ToTagged(), a); |
| 100 } |
| 101 Node* ChangeUint32ToTagged(Node* a) { |
| 102 return NewNode(simplified()->ChangeUint32ToTagged(), a); |
| 103 } |
| 104 Node* ChangeFloat64ToTagged(Node* a) { |
| 105 return NewNode(simplified()->ChangeFloat64ToTagged(), a); |
| 106 } |
| 107 Node* ChangeBoolToBit(Node* a) { |
| 108 return NewNode(simplified()->ChangeBoolToBit(), a); |
| 109 } |
| 110 Node* ChangeBitToBool(Node* a) { |
| 111 return NewNode(simplified()->ChangeBitToBool(), a); |
| 112 } |
| 113 |
| 114 Node* LoadField(const FieldAccess& access, Node* object) { |
| 115 return NewNode(simplified()->LoadField(access), object); |
| 116 } |
| 117 Node* StoreField(const FieldAccess& access, Node* object, Node* value) { |
| 118 return NewNode(simplified()->StoreField(access), object, value); |
| 119 } |
| 120 Node* LoadElement(const ElementAccess& access, Node* object, Node* index) { |
| 121 return NewNode(simplified()->LoadElement(access), object, index); |
| 122 } |
| 123 Node* StoreElement(const ElementAccess& access, Node* object, Node* index, |
| 124 Node* value) { |
| 125 return NewNode(simplified()->StoreElement(access), object, index, value); |
| 126 } |
| 127 |
| 128 protected: |
| 129 virtual Node* MakeNode(Operator* op, int value_input_count, |
| 130 Node** value_inputs); |
| 131 |
64 private: | 132 private: |
| 133 Node* effect_; |
| 134 Node* return_; |
| 135 CommonOperatorBuilder* common_; |
65 MachineOperatorBuilder* machine_; | 136 MachineOperatorBuilder* machine_; |
66 SimplifiedOperatorBuilder* simplified_; | 137 SimplifiedOperatorBuilder* simplified_; |
67 }; | 138 }; |
68 | 139 |
69 } // namespace compiler | 140 } // namespace compiler |
70 } // namespace internal | 141 } // namespace internal |
71 } // namespace v8 | 142 } // namespace v8 |
72 | 143 |
73 #endif // V8_CCTEST_COMPILER_SIMPLIFIED_GRAPH_BUILDER_H_ | 144 #endif // V8_CCTEST_COMPILER_SIMPLIFIED_GRAPH_BUILDER_H_ |
OLD | NEW |