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

Side by Side Diff: src/type-feedback-vector.h

Issue 2438553003: [ic] Support data handlers that represent simple field stores. (Closed)
Patch Set: One more fix for GC stress issues Created 4 years, 1 month 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
OLDNEW
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_TYPE_FEEDBACK_VECTOR_H_ 5 #ifndef V8_TYPE_FEEDBACK_VECTOR_H_
6 #define V8_TYPE_FEEDBACK_VECTOR_H_ 6 #define V8_TYPE_FEEDBACK_VECTOR_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "src/base/logging.h" 10 #include "src/base/logging.h"
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 : FeedbackNexus( 602 : FeedbackNexus(
603 TypeFeedbackVector::DummyVector(isolate), 603 TypeFeedbackVector::DummyVector(isolate),
604 FeedbackVectorSlot(TypeFeedbackVector::kDummyStoreICSlot)) {} 604 FeedbackVectorSlot(TypeFeedbackVector::kDummyStoreICSlot)) {}
605 StoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) 605 StoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot)
606 : FeedbackNexus(vector, slot) { 606 : FeedbackNexus(vector, slot) {
607 DCHECK_EQ(FeedbackVectorSlotKind::STORE_IC, vector->GetKind(slot)); 607 DCHECK_EQ(FeedbackVectorSlotKind::STORE_IC, vector->GetKind(slot));
608 } 608 }
609 609
610 void Clear(Code* host); 610 void Clear(Code* host);
611 611
612 void ConfigureMonomorphic(Handle<Map> receiver_map, Handle<Code> handler); 612 void ConfigureMonomorphic(Handle<Map> receiver_map, Handle<Object> handler);
613 613
614 void ConfigurePolymorphic(MapHandleList* maps, 614 void ConfigurePolymorphic(MapHandleList* maps,
615 List<Handle<Object>>* handlers); 615 List<Handle<Object>>* handlers);
616 616
617 InlineCacheState StateFromFeedback() const override; 617 InlineCacheState StateFromFeedback() const override;
618 }; 618 };
619 619
620 620
621 class KeyedStoreICNexus : public FeedbackNexus { 621 class KeyedStoreICNexus : public FeedbackNexus {
622 public: 622 public:
623 KeyedStoreICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) 623 KeyedStoreICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
624 : FeedbackNexus(vector, slot) { 624 : FeedbackNexus(vector, slot) {
625 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, vector->GetKind(slot)); 625 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, vector->GetKind(slot));
626 } 626 }
627 explicit KeyedStoreICNexus(Isolate* isolate) 627 explicit KeyedStoreICNexus(Isolate* isolate)
628 : FeedbackNexus( 628 : FeedbackNexus(
629 TypeFeedbackVector::DummyVector(isolate), 629 TypeFeedbackVector::DummyVector(isolate),
630 FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedStoreICSlot)) {} 630 FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedStoreICSlot)) {}
631 KeyedStoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) 631 KeyedStoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot)
632 : FeedbackNexus(vector, slot) { 632 : FeedbackNexus(vector, slot) {
633 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, vector->GetKind(slot)); 633 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, vector->GetKind(slot));
634 } 634 }
635 635
636 void Clear(Code* host); 636 void Clear(Code* host);
637 637
638 // name can be a null handle for element loads. 638 // name can be a null handle for element loads.
639 void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map, 639 void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map,
640 Handle<Code> handler); 640 Handle<Object> handler);
641 // name can be null. 641 // name can be null.
642 void ConfigurePolymorphic(Handle<Name> name, MapHandleList* maps, 642 void ConfigurePolymorphic(Handle<Name> name, MapHandleList* maps,
643 List<Handle<Object>>* handlers); 643 List<Handle<Object>>* handlers);
644 void ConfigurePolymorphic(MapHandleList* maps, 644 void ConfigurePolymorphic(MapHandleList* maps,
645 MapHandleList* transitioned_maps, 645 MapHandleList* transitioned_maps,
646 CodeHandleList* handlers); 646 CodeHandleList* handlers);
647 void ConfigureMegamorphicKeyed(IcCheckType property_type); 647 void ConfigureMegamorphicKeyed(IcCheckType property_type);
648 648
649 KeyedAccessStoreMode GetKeyedAccessStoreMode() const; 649 KeyedAccessStoreMode GetKeyedAccessStoreMode() const;
650 IcCheckType GetKeyType() const; 650 IcCheckType GetKeyType() const;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 } 715 }
716 }; 716 };
717 717
718 inline BinaryOperationHint BinaryOperationHintFromFeedback(int type_feedback); 718 inline BinaryOperationHint BinaryOperationHintFromFeedback(int type_feedback);
719 inline CompareOperationHint CompareOperationHintFromFeedback(int type_feedback); 719 inline CompareOperationHint CompareOperationHintFromFeedback(int type_feedback);
720 720
721 } // namespace internal 721 } // namespace internal
722 } // namespace v8 722 } // namespace v8
723 723
724 #endif // V8_TRANSITIONS_H_ 724 #endif // V8_TRANSITIONS_H_
OLDNEW
« src/ic/ic.cc ('K') | « src/lookup.cc ('k') | src/type-feedback-vector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698