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

Side by Side Diff: src/compiler/js-operator.h

Issue 1149663003: [turbofan] Don't mix up named/property accesses. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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 | « src/compiler/js-generic-lowering.cc ('k') | src/compiler/js-operator.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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_JS_OPERATOR_H_ 5 #ifndef V8_COMPILER_JS_OPERATOR_H_
6 #define V8_COMPILER_JS_OPERATOR_H_ 6 #define V8_COMPILER_JS_OPERATOR_H_
7 7
8 #include "src/runtime/runtime.h" 8 #include "src/runtime/runtime.h"
9 #include "src/unique.h" 9 #include "src/unique.h"
10 10
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 124
125 private: 125 private:
126 const Handle<TypeFeedbackVector> vector_; 126 const Handle<TypeFeedbackVector> vector_;
127 const FeedbackVectorICSlot slot_; 127 const FeedbackVectorICSlot slot_;
128 }; 128 };
129 129
130 130
131 bool operator==(VectorSlotPair const& lhs, VectorSlotPair const& rhs); 131 bool operator==(VectorSlotPair const& lhs, VectorSlotPair const& rhs);
132 132
133 133
134 // For (Load|Store)Named operators, the mode of the IC that needs
135 // to be called. This is needed because (Load|Store)Property nodes can be
136 // reduced to named versions, but still need to call the correct original
137 // IC mode because of the layout of feedback vectors.
138 enum PropertyICMode { NAMED, KEYED };
139
140 // Defines the property being loaded from an object by a named load. This is 134 // Defines the property being loaded from an object by a named load. This is
141 // used as a parameter by JSLoadNamed operators. 135 // used as a parameter by JSLoadNamed operators.
142 class LoadNamedParameters final { 136 class LoadNamedParameters final {
143 public: 137 public:
144 LoadNamedParameters(const Unique<Name>& name, const VectorSlotPair& feedback, 138 LoadNamedParameters(const Unique<Name>& name, const VectorSlotPair& feedback,
145 ContextualMode contextual_mode, PropertyICMode load_ic) 139 ContextualMode contextual_mode)
146 : name_(name), 140 : name_(name), feedback_(feedback), contextual_mode_(contextual_mode) {}
147 feedback_(feedback),
148 contextual_mode_(contextual_mode),
149 load_ic_(load_ic) {}
150 141
151 const Unique<Name>& name() const { return name_; } 142 const Unique<Name>& name() const { return name_; }
152 ContextualMode contextual_mode() const { return contextual_mode_; } 143 ContextualMode contextual_mode() const { return contextual_mode_; }
153 PropertyICMode load_ic() const { return load_ic_; }
154 144
155 const VectorSlotPair& feedback() const { return feedback_; } 145 const VectorSlotPair& feedback() const { return feedback_; }
156 146
157 private: 147 private:
158 const Unique<Name> name_; 148 const Unique<Name> name_;
159 const VectorSlotPair feedback_; 149 const VectorSlotPair feedback_;
160 const ContextualMode contextual_mode_; 150 const ContextualMode contextual_mode_;
161 const PropertyICMode load_ic_;
162 }; 151 };
163 152
164 bool operator==(LoadNamedParameters const&, LoadNamedParameters const&); 153 bool operator==(LoadNamedParameters const&, LoadNamedParameters const&);
165 bool operator!=(LoadNamedParameters const&, LoadNamedParameters const&); 154 bool operator!=(LoadNamedParameters const&, LoadNamedParameters const&);
166 155
167 size_t hash_value(LoadNamedParameters const&); 156 size_t hash_value(LoadNamedParameters const&);
168 157
169 std::ostream& operator<<(std::ostream&, LoadNamedParameters const&); 158 std::ostream& operator<<(std::ostream&, LoadNamedParameters const&);
170 159
171 const LoadNamedParameters& LoadNamedParametersOf(const Operator* op); 160 const LoadNamedParameters& LoadNamedParametersOf(const Operator* op);
(...skipping 19 matching lines...) Expand all
191 180
192 std::ostream& operator<<(std::ostream&, LoadPropertyParameters const&); 181 std::ostream& operator<<(std::ostream&, LoadPropertyParameters const&);
193 182
194 const LoadPropertyParameters& LoadPropertyParametersOf(const Operator* op); 183 const LoadPropertyParameters& LoadPropertyParametersOf(const Operator* op);
195 184
196 185
197 // Defines the property being stored to an object by a named store. This is 186 // Defines the property being stored to an object by a named store. This is
198 // used as a parameter by JSStoreNamed operators. 187 // used as a parameter by JSStoreNamed operators.
199 class StoreNamedParameters final { 188 class StoreNamedParameters final {
200 public: 189 public:
201 StoreNamedParameters(LanguageMode language_mode, const Unique<Name>& name, 190 StoreNamedParameters(LanguageMode language_mode, const Unique<Name>& name)
202 PropertyICMode store_ic) 191 : language_mode_(language_mode), name_(name) {}
203 : language_mode_(language_mode), name_(name), store_ic_(store_ic) {}
204 192
205 LanguageMode language_mode() const { return language_mode_; } 193 LanguageMode language_mode() const { return language_mode_; }
206 const Unique<Name>& name() const { return name_; } 194 const Unique<Name>& name() const { return name_; }
207 PropertyICMode store_ic() const { return store_ic_; }
208 195
209 private: 196 private:
210 const LanguageMode language_mode_; 197 const LanguageMode language_mode_;
211 const Unique<Name> name_; 198 const Unique<Name> name_;
212 const PropertyICMode store_ic_;
213 }; 199 };
214 200
215 bool operator==(StoreNamedParameters const&, StoreNamedParameters const&); 201 bool operator==(StoreNamedParameters const&, StoreNamedParameters const&);
216 bool operator!=(StoreNamedParameters const&, StoreNamedParameters const&); 202 bool operator!=(StoreNamedParameters const&, StoreNamedParameters const&);
217 203
218 size_t hash_value(StoreNamedParameters const&); 204 size_t hash_value(StoreNamedParameters const&);
219 205
220 std::ostream& operator<<(std::ostream&, StoreNamedParameters const&); 206 std::ostream& operator<<(std::ostream&, StoreNamedParameters const&);
221 207
222 const StoreNamedParameters& StoreNamedParametersOf(const Operator* op); 208 const StoreNamedParameters& StoreNamedParametersOf(const Operator* op);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 277
292 const Operator* CallFunction(size_t arity, CallFunctionFlags flags, 278 const Operator* CallFunction(size_t arity, CallFunctionFlags flags,
293 LanguageMode language_mode); 279 LanguageMode language_mode);
294 const Operator* CallRuntime(Runtime::FunctionId id, size_t arity); 280 const Operator* CallRuntime(Runtime::FunctionId id, size_t arity);
295 281
296 const Operator* CallConstruct(int arguments); 282 const Operator* CallConstruct(int arguments);
297 283
298 const Operator* LoadProperty(const VectorSlotPair& feedback); 284 const Operator* LoadProperty(const VectorSlotPair& feedback);
299 const Operator* LoadNamed(const Unique<Name>& name, 285 const Operator* LoadNamed(const Unique<Name>& name,
300 const VectorSlotPair& feedback, 286 const VectorSlotPair& feedback,
301 ContextualMode contextual_mode = NOT_CONTEXTUAL, 287 ContextualMode contextual_mode = NOT_CONTEXTUAL);
302 PropertyICMode load_ic = NAMED);
303 288
304 const Operator* StoreProperty(LanguageMode language_mode); 289 const Operator* StoreProperty(LanguageMode language_mode);
305 const Operator* StoreNamed(LanguageMode language_mode, 290 const Operator* StoreNamed(LanguageMode language_mode,
306 const Unique<Name>& name, 291 const Unique<Name>& name);
307 PropertyICMode store_ic = NAMED);
308 292
309 const Operator* DeleteProperty(LanguageMode language_mode); 293 const Operator* DeleteProperty(LanguageMode language_mode);
310 294
311 const Operator* HasProperty(); 295 const Operator* HasProperty();
312 296
313 const Operator* LoadContext(size_t depth, size_t index, bool immutable); 297 const Operator* LoadContext(size_t depth, size_t index, bool immutable);
314 const Operator* StoreContext(size_t depth, size_t index); 298 const Operator* StoreContext(size_t depth, size_t index);
315 299
316 const Operator* TypeOf(); 300 const Operator* TypeOf();
317 const Operator* InstanceOf(); 301 const Operator* InstanceOf();
(...skipping 15 matching lines...) Expand all
333 Zone* const zone_; 317 Zone* const zone_;
334 318
335 DISALLOW_COPY_AND_ASSIGN(JSOperatorBuilder); 319 DISALLOW_COPY_AND_ASSIGN(JSOperatorBuilder);
336 }; 320 };
337 321
338 } // namespace compiler 322 } // namespace compiler
339 } // namespace internal 323 } // namespace internal
340 } // namespace v8 324 } // namespace v8
341 325
342 #endif // V8_COMPILER_JS_OPERATOR_H_ 326 #endif // V8_COMPILER_JS_OPERATOR_H_
OLDNEW
« no previous file with comments | « src/compiler/js-generic-lowering.cc ('k') | src/compiler/js-operator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698