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_COMPILER_GRAPH_REDUCER_H_ | 5 #ifndef V8_COMPILER_GRAPH_REDUCER_H_ |
6 #define V8_COMPILER_GRAPH_REDUCER_H_ | 6 #define V8_COMPILER_GRAPH_REDUCER_H_ |
7 | 7 |
| 8 #include "src/base/compiler-specific.h" |
8 #include "src/compiler/node-marker.h" | 9 #include "src/compiler/node-marker.h" |
| 10 #include "src/globals.h" |
9 #include "src/zone/zone-containers.h" | 11 #include "src/zone/zone-containers.h" |
10 | 12 |
11 namespace v8 { | 13 namespace v8 { |
12 namespace internal { | 14 namespace internal { |
13 namespace compiler { | 15 namespace compiler { |
14 | 16 |
15 // Forward declarations. | 17 // Forward declarations. |
16 class Graph; | 18 class Graph; |
17 class Node; | 19 class Node; |
18 | 20 |
(...skipping 14 matching lines...) Expand all Loading... |
33 private: | 35 private: |
34 Node* replacement_; | 36 Node* replacement_; |
35 }; | 37 }; |
36 | 38 |
37 | 39 |
38 // A reducer can reduce or simplify a given node based on its operator and | 40 // A reducer can reduce or simplify a given node based on its operator and |
39 // inputs. This class functions as an extension point for the graph reducer for | 41 // inputs. This class functions as an extension point for the graph reducer for |
40 // language-specific reductions (e.g. reduction based on types or constant | 42 // language-specific reductions (e.g. reduction based on types or constant |
41 // folding of low-level operators) can be integrated into the graph reduction | 43 // folding of low-level operators) can be integrated into the graph reduction |
42 // phase. | 44 // phase. |
43 class Reducer { | 45 class V8_EXPORT_PRIVATE Reducer { |
44 public: | 46 public: |
45 virtual ~Reducer() {} | 47 virtual ~Reducer() {} |
46 | 48 |
47 // Try to reduce a node if possible. | 49 // Try to reduce a node if possible. |
48 virtual Reduction Reduce(Node* node) = 0; | 50 virtual Reduction Reduce(Node* node) = 0; |
49 | 51 |
50 // Invoked by the {GraphReducer} when all nodes are done. Can be used to | 52 // Invoked by the {GraphReducer} when all nodes are done. Can be used to |
51 // do additional reductions at the end, which in turn can cause a new round | 53 // do additional reductions at the end, which in turn can cause a new round |
52 // of reductions. | 54 // of reductions. |
53 virtual void Finalize(); | 55 virtual void Finalize(); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 void RelaxControls(Node* node) { | 114 void RelaxControls(Node* node) { |
113 ReplaceWithValue(node, node, node, nullptr); | 115 ReplaceWithValue(node, node, node, nullptr); |
114 } | 116 } |
115 | 117 |
116 private: | 118 private: |
117 Editor* const editor_; | 119 Editor* const editor_; |
118 }; | 120 }; |
119 | 121 |
120 | 122 |
121 // Performs an iterative reduction of a node graph. | 123 // Performs an iterative reduction of a node graph. |
122 class GraphReducer : public AdvancedReducer::Editor { | 124 class V8_EXPORT_PRIVATE GraphReducer |
| 125 : public NON_EXPORTED_BASE(AdvancedReducer::Editor) { |
123 public: | 126 public: |
124 GraphReducer(Zone* zone, Graph* graph, Node* dead = nullptr); | 127 GraphReducer(Zone* zone, Graph* graph, Node* dead = nullptr); |
125 ~GraphReducer(); | 128 ~GraphReducer(); |
126 | 129 |
127 Graph* graph() const { return graph_; } | 130 Graph* graph() const { return graph_; } |
128 | 131 |
129 void AddReducer(Reducer* reducer); | 132 void AddReducer(Reducer* reducer); |
130 | 133 |
131 // Reduce a single node. | 134 // Reduce a single node. |
132 void ReduceNode(Node* const); | 135 void ReduceNode(Node* const); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 ZoneStack<NodeState> stack_; | 178 ZoneStack<NodeState> stack_; |
176 | 179 |
177 DISALLOW_COPY_AND_ASSIGN(GraphReducer); | 180 DISALLOW_COPY_AND_ASSIGN(GraphReducer); |
178 }; | 181 }; |
179 | 182 |
180 } // namespace compiler | 183 } // namespace compiler |
181 } // namespace internal | 184 } // namespace internal |
182 } // namespace v8 | 185 } // namespace v8 |
183 | 186 |
184 #endif // V8_COMPILER_GRAPH_REDUCER_H_ | 187 #endif // V8_COMPILER_GRAPH_REDUCER_H_ |
OLD | NEW |