OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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_LOAD_ELIMINATION_H_ | 5 #ifndef V8_COMPILER_LOAD_ELIMINATION_H_ |
6 #define V8_COMPILER_LOAD_ELIMINATION_H_ | 6 #define V8_COMPILER_LOAD_ELIMINATION_H_ |
7 | 7 |
8 #include "src/compiler/graph-reducer.h" | 8 #include "src/compiler/graph-reducer.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
11 namespace internal { | 11 namespace internal { |
12 namespace compiler { | 12 namespace compiler { |
13 | 13 |
14 // Foward declarations. | 14 // Foward declarations. |
15 struct FieldAccess; | 15 struct FieldAccess; |
16 class JSGraph; | |
17 | 16 |
18 class LoadElimination final : public AdvancedReducer { | 17 class LoadElimination final : public AdvancedReducer { |
19 public: | 18 public: |
20 LoadElimination(Editor* editor, JSGraph* jsgraph, Zone* zone) | 19 LoadElimination(Editor* editor, Zone* zone) |
21 : AdvancedReducer(editor), node_states_(zone), jsgraph_(jsgraph) {} | 20 : AdvancedReducer(editor), node_states_(zone) {} |
22 ~LoadElimination() final {} | 21 ~LoadElimination() final {} |
23 | 22 |
24 Reduction Reduce(Node* node) final; | 23 Reduction Reduce(Node* node) final; |
25 | 24 |
26 private: | 25 private: |
27 static const size_t kMaxTrackedElements = 8; | 26 static const size_t kMaxTrackedElements = 8; |
28 | 27 |
29 // Abstract state to approximate the current state of an element along the | 28 // Abstract state to approximate the current state of an element along the |
30 // effect paths through the graph. | 29 // effect paths through the graph. |
31 class AbstractElements final : public ZoneObject { | 30 class AbstractElements final : public ZoneObject { |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 AbstractState const* Get(Node* node) const; | 143 AbstractState const* Get(Node* node) const; |
145 void Set(Node* node, AbstractState const* state); | 144 void Set(Node* node, AbstractState const* state); |
146 | 145 |
147 Zone* zone() const { return info_for_node_.get_allocator().zone(); } | 146 Zone* zone() const { return info_for_node_.get_allocator().zone(); } |
148 | 147 |
149 private: | 148 private: |
150 ZoneVector<AbstractState const*> info_for_node_; | 149 ZoneVector<AbstractState const*> info_for_node_; |
151 }; | 150 }; |
152 | 151 |
153 Reduction ReduceCheckMaps(Node* node); | 152 Reduction ReduceCheckMaps(Node* node); |
154 Reduction ReduceEnsureWritableFastElements(Node* node); | |
155 Reduction ReduceTransitionElementsKind(Node* node); | 153 Reduction ReduceTransitionElementsKind(Node* node); |
156 Reduction ReduceLoadField(Node* node); | 154 Reduction ReduceLoadField(Node* node); |
157 Reduction ReduceStoreField(Node* node); | 155 Reduction ReduceStoreField(Node* node); |
158 Reduction ReduceLoadElement(Node* node); | 156 Reduction ReduceLoadElement(Node* node); |
159 Reduction ReduceStoreElement(Node* node); | 157 Reduction ReduceStoreElement(Node* node); |
160 Reduction ReduceStoreTypedElement(Node* node); | 158 Reduction ReduceStoreTypedElement(Node* node); |
161 Reduction ReduceEffectPhi(Node* node); | 159 Reduction ReduceEffectPhi(Node* node); |
162 Reduction ReduceStart(Node* node); | 160 Reduction ReduceStart(Node* node); |
163 Reduction ReduceOtherNode(Node* node); | 161 Reduction ReduceOtherNode(Node* node); |
164 | 162 |
165 Reduction UpdateState(Node* node, AbstractState const* state); | 163 Reduction UpdateState(Node* node, AbstractState const* state); |
166 | 164 |
167 AbstractState const* ComputeLoopState(Node* node, | 165 AbstractState const* ComputeLoopState(Node* node, |
168 AbstractState const* state) const; | 166 AbstractState const* state) const; |
169 | 167 |
170 static int FieldIndexOf(FieldAccess const& access); | 168 static int FieldIndexOf(FieldAccess const& access); |
171 | 169 |
172 AbstractState const* empty_state() const { return &empty_state_; } | 170 AbstractState const* empty_state() const { return &empty_state_; } |
173 JSGraph* jsgraph() const { return jsgraph_; } | |
174 Zone* zone() const { return node_states_.zone(); } | 171 Zone* zone() const { return node_states_.zone(); } |
175 | 172 |
176 AbstractState const empty_state_; | 173 AbstractState const empty_state_; |
177 AbstractStateForEffectNodes node_states_; | 174 AbstractStateForEffectNodes node_states_; |
178 JSGraph* const jsgraph_; | |
179 | 175 |
180 DISALLOW_COPY_AND_ASSIGN(LoadElimination); | 176 DISALLOW_COPY_AND_ASSIGN(LoadElimination); |
181 }; | 177 }; |
182 | 178 |
183 } // namespace compiler | 179 } // namespace compiler |
184 } // namespace internal | 180 } // namespace internal |
185 } // namespace v8 | 181 } // namespace v8 |
186 | 182 |
187 #endif // V8_COMPILER_LOAD_ELIMINATION_H_ | 183 #endif // V8_COMPILER_LOAD_ELIMINATION_H_ |
OLD | NEW |