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

Side by Side Diff: src/compiler/load-elimination.h

Issue 2866233002: [turbofan] Don't mix element accesses with incompatible representations. (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « no previous file | src/compiler/load-elimination.cc » ('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 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/base/compiler-specific.h" 8 #include "src/base/compiler-specific.h"
9 #include "src/compiler/graph-reducer.h" 9 #include "src/compiler/graph-reducer.h"
10 #include "src/globals.h" 10 #include "src/globals.h"
11 #include "src/machine-type.h"
11 #include "src/zone/zone-handle-set.h" 12 #include "src/zone/zone-handle-set.h"
12 13
13 namespace v8 { 14 namespace v8 {
14 namespace internal { 15 namespace internal {
15 16
16 // Forward declarations. 17 // Forward declarations.
17 class Factory; 18 class Factory;
18 19
19 namespace compiler { 20 namespace compiler {
20 21
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 72
72 // Abstract state to approximate the current state of an element along the 73 // Abstract state to approximate the current state of an element along the
73 // effect paths through the graph. 74 // effect paths through the graph.
74 class AbstractElements final : public ZoneObject { 75 class AbstractElements final : public ZoneObject {
75 public: 76 public:
76 explicit AbstractElements(Zone* zone) { 77 explicit AbstractElements(Zone* zone) {
77 for (size_t i = 0; i < arraysize(elements_); ++i) { 78 for (size_t i = 0; i < arraysize(elements_); ++i) {
78 elements_[i] = Element(); 79 elements_[i] = Element();
79 } 80 }
80 } 81 }
81 AbstractElements(Node* object, Node* index, Node* value, Zone* zone) 82 AbstractElements(Node* object, Node* index, Node* value,
83 MachineRepresentation representation, Zone* zone)
82 : AbstractElements(zone) { 84 : AbstractElements(zone) {
83 elements_[next_index_++] = Element(object, index, value); 85 elements_[next_index_++] = Element(object, index, value, representation);
84 } 86 }
85 87
86 AbstractElements const* Extend(Node* object, Node* index, Node* value, 88 AbstractElements const* Extend(Node* object, Node* index, Node* value,
89 MachineRepresentation representation,
87 Zone* zone) const { 90 Zone* zone) const {
88 AbstractElements* that = new (zone) AbstractElements(*this); 91 AbstractElements* that = new (zone) AbstractElements(*this);
89 that->elements_[that->next_index_] = Element(object, index, value); 92 that->elements_[that->next_index_] =
93 Element(object, index, value, representation);
90 that->next_index_ = (that->next_index_ + 1) % arraysize(elements_); 94 that->next_index_ = (that->next_index_ + 1) % arraysize(elements_);
91 return that; 95 return that;
92 } 96 }
93 Node* Lookup(Node* object, Node* index) const; 97 Node* Lookup(Node* object, Node* index,
98 MachineRepresentation representation) const;
94 AbstractElements const* Kill(Node* object, Node* index, Zone* zone) const; 99 AbstractElements const* Kill(Node* object, Node* index, Zone* zone) const;
95 bool Equals(AbstractElements const* that) const; 100 bool Equals(AbstractElements const* that) const;
96 AbstractElements const* Merge(AbstractElements const* that, 101 AbstractElements const* Merge(AbstractElements const* that,
97 Zone* zone) const; 102 Zone* zone) const;
98 103
99 void Print() const; 104 void Print() const;
100 105
101 private: 106 private:
102 struct Element { 107 struct Element {
103 Element() {} 108 Element() {}
104 Element(Node* object, Node* index, Node* value) 109 Element(Node* object, Node* index, Node* value,
105 : object(object), index(index), value(value) {} 110 MachineRepresentation representation)
111 : object(object),
112 index(index),
113 value(value),
114 representation(representation) {}
106 115
107 Node* object = nullptr; 116 Node* object = nullptr;
108 Node* index = nullptr; 117 Node* index = nullptr;
109 Node* value = nullptr; 118 Node* value = nullptr;
119 MachineRepresentation representation = MachineRepresentation::kNone;
110 }; 120 };
111 121
112 Element elements_[kMaxTrackedElements]; 122 Element elements_[kMaxTrackedElements];
113 size_t next_index_ = 0; 123 size_t next_index_ = 0;
114 }; 124 };
115 125
116 // Abstract state to approximate the current state of a certain field along 126 // Abstract state to approximate the current state of a certain field along
117 // the effect paths through the graph. 127 // the effect paths through the graph.
118 class AbstractField final : public ZoneObject { 128 class AbstractField final : public ZoneObject {
119 public: 129 public:
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 bool LookupMaps(Node* object, ZoneHandleSet<Map>* object_maps) const; 227 bool LookupMaps(Node* object, ZoneHandleSet<Map>* object_maps) const;
218 228
219 AbstractState const* AddField(Node* object, size_t index, Node* value, 229 AbstractState const* AddField(Node* object, size_t index, Node* value,
220 Zone* zone) const; 230 Zone* zone) const;
221 AbstractState const* KillField(Node* object, size_t index, 231 AbstractState const* KillField(Node* object, size_t index,
222 Zone* zone) const; 232 Zone* zone) const;
223 AbstractState const* KillFields(Node* object, Zone* zone) const; 233 AbstractState const* KillFields(Node* object, Zone* zone) const;
224 Node* LookupField(Node* object, size_t index) const; 234 Node* LookupField(Node* object, size_t index) const;
225 235
226 AbstractState const* AddElement(Node* object, Node* index, Node* value, 236 AbstractState const* AddElement(Node* object, Node* index, Node* value,
237 MachineRepresentation representation,
227 Zone* zone) const; 238 Zone* zone) const;
228 AbstractState const* KillElement(Node* object, Node* index, 239 AbstractState const* KillElement(Node* object, Node* index,
229 Zone* zone) const; 240 Zone* zone) const;
230 Node* LookupElement(Node* object, Node* index) const; 241 Node* LookupElement(Node* object, Node* index,
242 MachineRepresentation representation) const;
231 243
232 AbstractState const* AddCheck(Node* node, Zone* zone) const; 244 AbstractState const* AddCheck(Node* node, Zone* zone) const;
233 Node* LookupCheck(Node* node) const; 245 Node* LookupCheck(Node* node) const;
234 246
235 void Print() const; 247 void Print() const;
236 248
237 private: 249 private:
238 AbstractChecks const* checks_ = nullptr; 250 AbstractChecks const* checks_ = nullptr;
239 AbstractElements const* elements_ = nullptr; 251 AbstractElements const* elements_ = nullptr;
240 AbstractField const* fields_[kMaxTrackedFields]; 252 AbstractField const* fields_[kMaxTrackedFields];
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 JSGraph* const jsgraph_; 299 JSGraph* const jsgraph_;
288 300
289 DISALLOW_COPY_AND_ASSIGN(LoadElimination); 301 DISALLOW_COPY_AND_ASSIGN(LoadElimination);
290 }; 302 };
291 303
292 } // namespace compiler 304 } // namespace compiler
293 } // namespace internal 305 } // namespace internal
294 } // namespace v8 306 } // namespace v8
295 307
296 #endif // V8_COMPILER_LOAD_ELIMINATION_H_ 308 #endif // V8_COMPILER_LOAD_ELIMINATION_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler/load-elimination.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698