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

Side by Side Diff: src/ic/ic.h

Issue 2809923002: Unify implementations of Map handles vectors and lists (Closed)
Patch Set: Review feedback 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 | « src/feedback-vector.cc ('k') | src/ic/ic.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_IC_H_ 5 #ifndef V8_IC_H_
6 #define V8_IC_H_ 6 #define V8_IC_H_
7 7
8 #include "src/factory.h" 8 #include "src/factory.h"
9 #include "src/feedback-vector.h" 9 #include "src/feedback-vector.h"
10 #include "src/ic/ic-state.h" 10 #include "src/ic/ic-state.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 // Set the call-site target. 89 // Set the call-site target.
90 inline void set_target(Code* code); 90 inline void set_target(Code* code);
91 bool is_vector_set() { return vector_set_; } 91 bool is_vector_set() { return vector_set_; }
92 92
93 // Configure for most states. 93 // Configure for most states.
94 void ConfigureVectorState(IC::State new_state, Handle<Object> key); 94 void ConfigureVectorState(IC::State new_state, Handle<Object> key);
95 // Configure the vector for MONOMORPHIC. 95 // Configure the vector for MONOMORPHIC.
96 void ConfigureVectorState(Handle<Name> name, Handle<Map> map, 96 void ConfigureVectorState(Handle<Name> name, Handle<Map> map,
97 Handle<Object> handler); 97 Handle<Object> handler);
98 // Configure the vector for POLYMORPHIC. 98 // Configure the vector for POLYMORPHIC.
99 void ConfigureVectorState(Handle<Name> name, MapHandleList* maps, 99 void ConfigureVectorState(Handle<Name> name, MapHandles const& maps,
100 List<Handle<Object>>* handlers); 100 List<Handle<Object>>* handlers);
101 101
102 char TransitionMarkFromState(IC::State state); 102 char TransitionMarkFromState(IC::State state);
103 void TraceIC(const char* type, Handle<Object> name); 103 void TraceIC(const char* type, Handle<Object> name);
104 void TraceIC(const char* type, Handle<Object> name, State old_state, 104 void TraceIC(const char* type, Handle<Object> name, State old_state,
105 State new_state); 105 State new_state);
106 106
107 MaybeHandle<Object> TypeError(MessageTemplate::Template, 107 MaybeHandle<Object> TypeError(MessageTemplate::Template,
108 Handle<Object> object, Handle<Object> key); 108 Handle<Object> object, Handle<Object> key);
109 MaybeHandle<Object> ReferenceError(Handle<Name> name); 109 MaybeHandle<Object> ReferenceError(Handle<Name> name);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 157
158 Handle<Map> receiver_map() { return receiver_map_; } 158 Handle<Map> receiver_map() { return receiver_map_; }
159 void update_receiver_map(Handle<Object> receiver) { 159 void update_receiver_map(Handle<Object> receiver) {
160 if (receiver->IsSmi()) { 160 if (receiver->IsSmi()) {
161 receiver_map_ = isolate_->factory()->heap_number_map(); 161 receiver_map_ = isolate_->factory()->heap_number_map();
162 } else { 162 } else {
163 receiver_map_ = handle(HeapObject::cast(*receiver)->map()); 163 receiver_map_ = handle(HeapObject::cast(*receiver)->map());
164 } 164 }
165 } 165 }
166 166
167 void TargetMaps(MapHandleList* list) { 167 void TargetMaps(MapHandles* list) {
168 FindTargetMaps(); 168 FindTargetMaps();
169 for (int i = 0; i < target_maps_.length(); i++) { 169 for (Handle<Map> map : target_maps_) {
170 list->Add(target_maps_.at(i)); 170 list->push_back(map);
171 } 171 }
172 } 172 }
173 173
174 Map* FirstTargetMap() { 174 Map* FirstTargetMap() {
175 FindTargetMaps(); 175 FindTargetMaps();
176 return target_maps_.length() > 0 ? *target_maps_.at(0) : NULL; 176 return !target_maps_.empty() ? *target_maps_[0] : NULL;
177 } 177 }
178 178
179 Handle<FeedbackVector> vector() const { return nexus()->vector_handle(); } 179 Handle<FeedbackVector> vector() const { return nexus()->vector_handle(); }
180 FeedbackSlot slot() const { return nexus()->slot(); } 180 FeedbackSlot slot() const { return nexus()->slot(); }
181 State saved_state() const { 181 State saved_state() const {
182 return state() == RECOMPUTE_HANDLER ? old_state_ : state(); 182 return state() == RECOMPUTE_HANDLER ? old_state_ : state();
183 } 183 }
184 184
185 template <class NexusClass> 185 template <class NexusClass>
186 NexusClass* casted_nexus() { 186 NexusClass* casted_nexus() {
(...skipping 29 matching lines...) Expand all
216 Isolate* isolate_; 216 Isolate* isolate_;
217 217
218 bool vector_set_; 218 bool vector_set_;
219 State old_state_; // For saving if we marked as prototype failure. 219 State old_state_; // For saving if we marked as prototype failure.
220 State state_; 220 State state_;
221 FeedbackSlotKind kind_; 221 FeedbackSlotKind kind_;
222 Handle<Map> receiver_map_; 222 Handle<Map> receiver_map_;
223 MaybeHandle<Object> maybe_handler_; 223 MaybeHandle<Object> maybe_handler_;
224 224
225 ExtraICState extra_ic_state_; 225 ExtraICState extra_ic_state_;
226 MapHandleList target_maps_; 226 MapHandles target_maps_;
227 bool target_maps_set_; 227 bool target_maps_set_;
228 228
229 const char* slow_stub_reason_; 229 const char* slow_stub_reason_;
230 230
231 FeedbackNexus* nexus_; 231 FeedbackNexus* nexus_;
232 232
233 DISALLOW_IMPLICIT_CONSTRUCTORS(IC); 233 DISALLOW_IMPLICIT_CONSTRUCTORS(IC);
234 }; 234 };
235 235
236 236
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 321
322 protected: 322 protected:
323 // receiver is HeapObject because it could be a String or a JSObject 323 // receiver is HeapObject because it could be a String or a JSObject
324 void UpdateLoadElement(Handle<HeapObject> receiver); 324 void UpdateLoadElement(Handle<HeapObject> receiver);
325 325
326 private: 326 private:
327 friend class IC; 327 friend class IC;
328 328
329 Handle<Object> LoadElementHandler(Handle<Map> receiver_map); 329 Handle<Object> LoadElementHandler(Handle<Map> receiver_map);
330 330
331 void LoadElementPolymorphicHandlers(MapHandleList* receiver_maps, 331 void LoadElementPolymorphicHandlers(MapHandles* receiver_maps,
332 List<Handle<Object>>* handlers); 332 List<Handle<Object>>* handlers);
333 }; 333 };
334 334
335 335
336 class StoreIC : public IC { 336 class StoreIC : public IC {
337 public: 337 public:
338 StoreIC(Isolate* isolate, FeedbackNexus* nexus) 338 StoreIC(Isolate* isolate, FeedbackNexus* nexus)
339 : IC(NO_EXTRA_FRAME, isolate, nexus) { 339 : IC(NO_EXTRA_FRAME, isolate, nexus) {
340 DCHECK(IsAnyStore()); 340 DCHECK(IsAnyStore());
341 } 341 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 void UpdateStoreElement(Handle<Map> receiver_map, 407 void UpdateStoreElement(Handle<Map> receiver_map,
408 KeyedAccessStoreMode store_mode); 408 KeyedAccessStoreMode store_mode);
409 409
410 private: 410 private:
411 Handle<Map> ComputeTransitionedMap(Handle<Map> map, 411 Handle<Map> ComputeTransitionedMap(Handle<Map> map,
412 KeyedAccessStoreMode store_mode); 412 KeyedAccessStoreMode store_mode);
413 413
414 Handle<Object> StoreElementHandler(Handle<Map> receiver_map, 414 Handle<Object> StoreElementHandler(Handle<Map> receiver_map,
415 KeyedAccessStoreMode store_mode); 415 KeyedAccessStoreMode store_mode);
416 416
417 void StoreElementPolymorphicHandlers(MapHandleList* receiver_maps, 417 void StoreElementPolymorphicHandlers(MapHandles* receiver_maps,
418 List<Handle<Object>>* handlers, 418 List<Handle<Object>>* handlers,
419 KeyedAccessStoreMode store_mode); 419 KeyedAccessStoreMode store_mode);
420 420
421 friend class IC; 421 friend class IC;
422 }; 422 };
423 423
424 424
425 // Type Recording BinaryOpIC, that records the types of the inputs and outputs. 425 // Type Recording BinaryOpIC, that records the types of the inputs and outputs.
426 class BinaryOpIC : public IC { 426 class BinaryOpIC : public IC {
427 public: 427 public:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 471
472 // Helper for BinaryOpIC and CompareIC. 472 // Helper for BinaryOpIC and CompareIC.
473 enum InlinedSmiCheck { ENABLE_INLINED_SMI_CHECK, DISABLE_INLINED_SMI_CHECK }; 473 enum InlinedSmiCheck { ENABLE_INLINED_SMI_CHECK, DISABLE_INLINED_SMI_CHECK };
474 void PatchInlinedSmiCode(Isolate* isolate, Address address, 474 void PatchInlinedSmiCode(Isolate* isolate, Address address,
475 InlinedSmiCheck check); 475 InlinedSmiCheck check);
476 476
477 } // namespace internal 477 } // namespace internal
478 } // namespace v8 478 } // namespace v8
479 479
480 #endif // V8_IC_H_ 480 #endif // V8_IC_H_
OLDNEW
« no previous file with comments | « src/feedback-vector.cc ('k') | src/ic/ic.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698