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

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

Issue 2133233002: [LoadIC] Handle simple field loads in the dispatcher (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix release builds Created 4 years, 5 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
« src/ic/ic.cc ('K') | « src/type-feedback-vector.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "src/type-feedback-vector.h" 5 #include "src/type-feedback-vector.h"
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/ic/ic.h" 8 #include "src/ic/ic.h"
9 #include "src/ic/ic-state.h" 9 #include "src/ic/ic-state.h"
10 #include "src/objects.h" 10 #include "src/objects.h"
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 Handle<Object> feedback_extra = handle(GetFeedbackExtra(), isolate); 428 Handle<Object> feedback_extra = handle(GetFeedbackExtra(), isolate);
429 if (!feedback_extra->IsFixedArray() || 429 if (!feedback_extra->IsFixedArray() ||
430 FixedArray::cast(*feedback_extra)->length() != length) { 430 FixedArray::cast(*feedback_extra)->length() != length) {
431 Handle<FixedArray> array = isolate->factory()->NewFixedArray(length); 431 Handle<FixedArray> array = isolate->factory()->NewFixedArray(length);
432 SetFeedbackExtra(*array); 432 SetFeedbackExtra(*array);
433 return array; 433 return array;
434 } 434 }
435 return Handle<FixedArray>::cast(feedback_extra); 435 return Handle<FixedArray>::cast(feedback_extra);
436 } 436 }
437 437
438
439 void FeedbackNexus::InstallHandlers(Handle<FixedArray> array, 438 void FeedbackNexus::InstallHandlers(Handle<FixedArray> array,
440 MapHandleList* maps, 439 MapHandleList* maps,
441 CodeHandleList* handlers) { 440 List<Handle<Object>>* handlers) {
442 int receiver_count = maps->length(); 441 int receiver_count = maps->length();
443 for (int current = 0; current < receiver_count; ++current) { 442 for (int current = 0; current < receiver_count; ++current) {
444 Handle<Map> map = maps->at(current); 443 Handle<Map> map = maps->at(current);
445 Handle<WeakCell> cell = Map::WeakCellForMap(map); 444 Handle<WeakCell> cell = Map::WeakCellForMap(map);
446 array->set(current * 2, *cell); 445 array->set(current * 2, *cell);
447 array->set(current * 2 + 1, *handlers->at(current)); 446 array->set(current * 2 + 1, *handlers->at(current));
448 } 447 }
449 } 448 }
450 449
451 450
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 FeedbackNexus::ConfigureMegamorphic(); 656 FeedbackNexus::ConfigureMegamorphic();
658 } 657 }
659 658
660 659
661 void CallICNexus::ConfigureMegamorphic(int call_count) { 660 void CallICNexus::ConfigureMegamorphic(int call_count) {
662 SetFeedback(*TypeFeedbackVector::MegamorphicSentinel(GetIsolate()), 661 SetFeedback(*TypeFeedbackVector::MegamorphicSentinel(GetIsolate()),
663 SKIP_WRITE_BARRIER); 662 SKIP_WRITE_BARRIER);
664 SetFeedbackExtra(Smi::FromInt(call_count), SKIP_WRITE_BARRIER); 663 SetFeedbackExtra(Smi::FromInt(call_count), SKIP_WRITE_BARRIER);
665 } 664 }
666 665
667
668 void LoadICNexus::ConfigureMonomorphic(Handle<Map> receiver_map, 666 void LoadICNexus::ConfigureMonomorphic(Handle<Map> receiver_map,
669 Handle<Code> handler) { 667 Handle<Object> handler) {
670 Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map); 668 Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map);
671 SetFeedback(*cell); 669 SetFeedback(*cell);
672 SetFeedbackExtra(*handler); 670 SetFeedbackExtra(*handler);
673 } 671 }
674 672
675 void LoadGlobalICNexus::ConfigureUninitialized() { 673 void LoadGlobalICNexus::ConfigureUninitialized() {
676 Isolate* isolate = GetIsolate(); 674 Isolate* isolate = GetIsolate();
677 SetFeedback(isolate->heap()->empty_weak_cell(), SKIP_WRITE_BARRIER); 675 SetFeedback(isolate->heap()->empty_weak_cell(), SKIP_WRITE_BARRIER);
678 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate), 676 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate),
679 SKIP_WRITE_BARRIER); 677 SKIP_WRITE_BARRIER);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 SetFeedback(*cell); 721 SetFeedback(*cell);
724 SetFeedbackExtra(*handler); 722 SetFeedbackExtra(*handler);
725 } else { 723 } else {
726 Handle<FixedArray> array = EnsureExtraArrayOfSize(2); 724 Handle<FixedArray> array = EnsureExtraArrayOfSize(2);
727 SetFeedback(*name); 725 SetFeedback(*name);
728 array->set(0, *cell); 726 array->set(0, *cell);
729 array->set(1, *handler); 727 array->set(1, *handler);
730 } 728 }
731 } 729 }
732 730
733
734 void LoadICNexus::ConfigurePolymorphic(MapHandleList* maps, 731 void LoadICNexus::ConfigurePolymorphic(MapHandleList* maps,
735 CodeHandleList* handlers) { 732 List<Handle<Object>>* handlers) {
736 Isolate* isolate = GetIsolate(); 733 Isolate* isolate = GetIsolate();
737 int receiver_count = maps->length(); 734 int receiver_count = maps->length();
738 Handle<FixedArray> array = EnsureArrayOfSize(receiver_count * 2); 735 Handle<FixedArray> array = EnsureArrayOfSize(receiver_count * 2);
739 InstallHandlers(array, maps, handlers); 736 InstallHandlers(array, maps, handlers);
740 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate), 737 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate),
741 SKIP_WRITE_BARRIER); 738 SKIP_WRITE_BARRIER);
742 } 739 }
743 740
744 void KeyedLoadICNexus::ConfigurePolymorphic(Handle<Name> name, 741 void KeyedLoadICNexus::ConfigurePolymorphic(Handle<Name> name,
745 MapHandleList* maps, 742 MapHandleList* maps,
746 CodeHandleList* handlers) { 743 List<Handle<Object>>* handlers) {
747 int receiver_count = maps->length(); 744 int receiver_count = maps->length();
748 DCHECK(receiver_count > 1); 745 DCHECK(receiver_count > 1);
749 Handle<FixedArray> array; 746 Handle<FixedArray> array;
750 if (name.is_null()) { 747 if (name.is_null()) {
751 array = EnsureArrayOfSize(receiver_count * 2); 748 array = EnsureArrayOfSize(receiver_count * 2);
752 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(GetIsolate()), 749 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(GetIsolate()),
753 SKIP_WRITE_BARRIER); 750 SKIP_WRITE_BARRIER);
754 } else { 751 } else {
755 array = EnsureExtraArrayOfSize(receiver_count * 2); 752 array = EnsureExtraArrayOfSize(receiver_count * 2);
756 SetFeedback(*name); 753 SetFeedback(*name);
757 } 754 }
758 755
759 InstallHandlers(array, maps, handlers); 756 InstallHandlers(array, maps, handlers);
760 } 757 }
761 758
762
763 void StoreICNexus::ConfigurePolymorphic(MapHandleList* maps, 759 void StoreICNexus::ConfigurePolymorphic(MapHandleList* maps,
764 CodeHandleList* handlers) { 760 List<Handle<Object>>* handlers) {
765 Isolate* isolate = GetIsolate(); 761 Isolate* isolate = GetIsolate();
766 int receiver_count = maps->length(); 762 int receiver_count = maps->length();
767 Handle<FixedArray> array = EnsureArrayOfSize(receiver_count * 2); 763 Handle<FixedArray> array = EnsureArrayOfSize(receiver_count * 2);
768 InstallHandlers(array, maps, handlers); 764 InstallHandlers(array, maps, handlers);
769 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate), 765 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate),
770 SKIP_WRITE_BARRIER); 766 SKIP_WRITE_BARRIER);
771 } 767 }
772 768
773
774 void KeyedStoreICNexus::ConfigurePolymorphic(Handle<Name> name, 769 void KeyedStoreICNexus::ConfigurePolymorphic(Handle<Name> name,
775 MapHandleList* maps, 770 MapHandleList* maps,
776 CodeHandleList* handlers) { 771 List<Handle<Object>>* handlers) {
777 int receiver_count = maps->length(); 772 int receiver_count = maps->length();
778 DCHECK(receiver_count > 1); 773 DCHECK(receiver_count > 1);
779 Handle<FixedArray> array; 774 Handle<FixedArray> array;
780 if (name.is_null()) { 775 if (name.is_null()) {
781 array = EnsureArrayOfSize(receiver_count * 2); 776 array = EnsureArrayOfSize(receiver_count * 2);
782 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(GetIsolate()), 777 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(GetIsolate()),
783 SKIP_WRITE_BARRIER); 778 SKIP_WRITE_BARRIER);
784 } else { 779 } else {
785 array = EnsureExtraArrayOfSize(receiver_count * 2); 780 array = EnsureExtraArrayOfSize(receiver_count * 2);
786 SetFeedback(*name); 781 SetFeedback(*name);
(...skipping 21 matching lines...) Expand all
808 Handle<Map> transitioned_map = transitioned_maps->at(i); 803 Handle<Map> transitioned_map = transitioned_maps->at(i);
809 cell = Map::WeakCellForMap(transitioned_map); 804 cell = Map::WeakCellForMap(transitioned_map);
810 array->set((i * 3) + 1, *cell); 805 array->set((i * 3) + 1, *cell);
811 } else { 806 } else {
812 array->set((i * 3) + 1, *undefined_value); 807 array->set((i * 3) + 1, *undefined_value);
813 } 808 }
814 array->set((i * 3) + 2, *handlers->at(i)); 809 array->set((i * 3) + 2, *handlers->at(i));
815 } 810 }
816 } 811 }
817 812
813 namespace {
814
815 int GetStepSize(FixedArray* array, Isolate* isolate) {
816 // The array should be of the form
817 // [map, handler, map, handler, ...]
818 // or
819 // [map, map, handler, map, map, handler, ...]
820 // where "map" is either a WeakCell or |undefined|,
821 // and "handler" is either a Code object or a Smi.
822 DCHECK(array->length() >= 2);
823 Object* second = array->get(1);
824 if (second->IsWeakCell() || second->IsUndefined(isolate)) return 3;
825 DCHECK(second->IsCode() || second->IsSmi());
826 return 2;
827 }
828
829 #ifdef DEBUG // Only used by DCHECKs below.
830 bool IsHandler(Object* object) {
831 return object->IsSmi() ||
832 (object->IsCode() && Code::cast(object)->kind() == Code::HANDLER);
Igor Sheludko 2016/07/15 10:44:18 ... && Code::cast(object)->is_handler());
Jakob Kummerow 2016/07/15 14:16:42 Done.
833 #endif
834 }
835
836 } // namespace
818 837
819 int FeedbackNexus::ExtractMaps(MapHandleList* maps) const { 838 int FeedbackNexus::ExtractMaps(MapHandleList* maps) const {
820 Isolate* isolate = GetIsolate(); 839 Isolate* isolate = GetIsolate();
821 Object* feedback = GetFeedback(); 840 Object* feedback = GetFeedback();
822 bool is_named_feedback = IsPropertyNameFeedback(feedback); 841 bool is_named_feedback = IsPropertyNameFeedback(feedback);
823 if (feedback->IsFixedArray() || is_named_feedback) { 842 if (feedback->IsFixedArray() || is_named_feedback) {
824 int found = 0; 843 int found = 0;
825 if (is_named_feedback) { 844 if (is_named_feedback) {
826 feedback = GetFeedbackExtra(); 845 feedback = GetFeedbackExtra();
827 } 846 }
828 FixedArray* array = FixedArray::cast(feedback); 847 FixedArray* array = FixedArray::cast(feedback);
829 // The array should be of the form 848 int increment = GetStepSize(array, isolate);
830 // [map, handler, map, handler, ...]
831 // or
832 // [map, map, handler, map, map, handler, ...]
833 DCHECK(array->length() >= 2);
834 int increment = array->get(1)->IsCode() ? 2 : 3;
835 for (int i = 0; i < array->length(); i += increment) { 849 for (int i = 0; i < array->length(); i += increment) {
836 DCHECK(array->get(i)->IsWeakCell()); 850 DCHECK(array->get(i)->IsWeakCell());
837 WeakCell* cell = WeakCell::cast(array->get(i)); 851 WeakCell* cell = WeakCell::cast(array->get(i));
838 if (!cell->cleared()) { 852 if (!cell->cleared()) {
839 Map* map = Map::cast(cell->value()); 853 Map* map = Map::cast(cell->value());
840 maps->Add(handle(map, isolate)); 854 maps->Add(handle(map, isolate));
841 found++; 855 found++;
842 } 856 }
843 } 857 }
844 return found; 858 return found;
845 } else if (feedback->IsWeakCell()) { 859 } else if (feedback->IsWeakCell()) {
846 WeakCell* cell = WeakCell::cast(feedback); 860 WeakCell* cell = WeakCell::cast(feedback);
847 if (!cell->cleared()) { 861 if (!cell->cleared()) {
848 Map* map = Map::cast(cell->value()); 862 Map* map = Map::cast(cell->value());
849 maps->Add(handle(map, isolate)); 863 maps->Add(handle(map, isolate));
850 return 1; 864 return 1;
851 } 865 }
852 } 866 }
853 867
854 return 0; 868 return 0;
855 } 869 }
856 870
857 871 MaybeHandle<Object> FeedbackNexus::FindHandlerForMap(Handle<Map> map) const {
858 MaybeHandle<Code> FeedbackNexus::FindHandlerForMap(Handle<Map> map) const {
859 Object* feedback = GetFeedback(); 872 Object* feedback = GetFeedback();
873 Isolate* isolate = GetIsolate();
860 bool is_named_feedback = IsPropertyNameFeedback(feedback); 874 bool is_named_feedback = IsPropertyNameFeedback(feedback);
861 if (feedback->IsFixedArray() || is_named_feedback) { 875 if (feedback->IsFixedArray() || is_named_feedback) {
862 if (is_named_feedback) { 876 if (is_named_feedback) {
863 feedback = GetFeedbackExtra(); 877 feedback = GetFeedbackExtra();
864 } 878 }
865 FixedArray* array = FixedArray::cast(feedback); 879 FixedArray* array = FixedArray::cast(feedback);
866 DCHECK(array->length() >= 2); 880 int increment = GetStepSize(array, isolate);
867 int increment = array->get(1)->IsCode() ? 2 : 3;
868 for (int i = 0; i < array->length(); i += increment) { 881 for (int i = 0; i < array->length(); i += increment) {
869 DCHECK(array->get(i)->IsWeakCell()); 882 DCHECK(array->get(i)->IsWeakCell());
870 WeakCell* cell = WeakCell::cast(array->get(i)); 883 WeakCell* cell = WeakCell::cast(array->get(i));
871 if (!cell->cleared()) { 884 if (!cell->cleared()) {
872 Map* array_map = Map::cast(cell->value()); 885 Map* array_map = Map::cast(cell->value());
873 if (array_map == *map) { 886 if (array_map == *map) {
874 Code* code = Code::cast(array->get(i + increment - 1)); 887 Object* code = array->get(i + increment - 1);
875 DCHECK(code->kind() == Code::HANDLER); 888 DCHECK(IsHandler(code));
876 return handle(code); 889 return handle(code, isolate);
877 } 890 }
878 } 891 }
879 } 892 }
880 } else if (feedback->IsWeakCell()) { 893 } else if (feedback->IsWeakCell()) {
881 WeakCell* cell = WeakCell::cast(feedback); 894 WeakCell* cell = WeakCell::cast(feedback);
882 if (!cell->cleared()) { 895 if (!cell->cleared()) {
883 Map* cell_map = Map::cast(cell->value()); 896 Map* cell_map = Map::cast(cell->value());
884 if (cell_map == *map) { 897 if (cell_map == *map) {
885 Code* code = Code::cast(GetFeedbackExtra()); 898 Object* code = GetFeedbackExtra();
886 DCHECK(code->kind() == Code::HANDLER); 899 DCHECK(IsHandler(code));
887 return handle(code); 900 return handle(code, isolate);
888 } 901 }
889 } 902 }
890 } 903 }
891 904
892 return MaybeHandle<Code>(); 905 return MaybeHandle<Code>();
893 } 906 }
894 907
895 908 bool FeedbackNexus::FindHandlers(List<Handle<Object>>* code_list,
896 bool FeedbackNexus::FindHandlers(CodeHandleList* code_list, int length) const { 909 int length) const {
897 Object* feedback = GetFeedback(); 910 Object* feedback = GetFeedback();
911 Isolate* isolate = GetIsolate();
898 int count = 0; 912 int count = 0;
899 bool is_named_feedback = IsPropertyNameFeedback(feedback); 913 bool is_named_feedback = IsPropertyNameFeedback(feedback);
900 if (feedback->IsFixedArray() || is_named_feedback) { 914 if (feedback->IsFixedArray() || is_named_feedback) {
901 if (is_named_feedback) { 915 if (is_named_feedback) {
902 feedback = GetFeedbackExtra(); 916 feedback = GetFeedbackExtra();
903 } 917 }
904 FixedArray* array = FixedArray::cast(feedback); 918 FixedArray* array = FixedArray::cast(feedback);
905 // The array should be of the form 919 int increment = GetStepSize(array, isolate);
906 // [map, handler, map, handler, ...]
907 // or
908 // [map, map, handler, map, map, handler, ...]
909 // Be sure to skip handlers whose maps have been cleared.
910 DCHECK(array->length() >= 2);
911 int increment = array->get(1)->IsCode() ? 2 : 3;
912 for (int i = 0; i < array->length(); i += increment) { 920 for (int i = 0; i < array->length(); i += increment) {
913 DCHECK(array->get(i)->IsWeakCell()); 921 DCHECK(array->get(i)->IsWeakCell());
914 WeakCell* cell = WeakCell::cast(array->get(i)); 922 WeakCell* cell = WeakCell::cast(array->get(i));
923 // Be sure to skip handlers whose maps have been cleared.
915 if (!cell->cleared()) { 924 if (!cell->cleared()) {
916 Code* code = Code::cast(array->get(i + increment - 1)); 925 Object* code = array->get(i + increment - 1);
917 DCHECK(code->kind() == Code::HANDLER); 926 DCHECK(IsHandler(code));
918 code_list->Add(handle(code)); 927 code_list->Add(handle(code, isolate));
919 count++; 928 count++;
920 } 929 }
921 } 930 }
922 } else if (feedback->IsWeakCell()) { 931 } else if (feedback->IsWeakCell()) {
923 WeakCell* cell = WeakCell::cast(feedback); 932 WeakCell* cell = WeakCell::cast(feedback);
924 if (!cell->cleared()) { 933 if (!cell->cleared()) {
925 Code* code = Code::cast(GetFeedbackExtra()); 934 Object* code = GetFeedbackExtra();
926 DCHECK(code->kind() == Code::HANDLER); 935 DCHECK(IsHandler(code));
927 code_list->Add(handle(code)); 936 code_list->Add(handle(code, isolate));
928 count++; 937 count++;
929 } 938 }
930 } 939 }
931 return count == length; 940 return count == length;
932 } 941 }
933 942
934 943
935 void LoadICNexus::Clear(Code* host) { LoadIC::Clear(GetIsolate(), host, this); } 944 void LoadICNexus::Clear(Code* host) { LoadIC::Clear(GetIsolate(), host, this); }
936 945
937 void LoadGlobalICNexus::Clear(Code* host) { 946 void LoadGlobalICNexus::Clear(Code* host) {
(...skipping 29 matching lines...) Expand all
967 976
968 977
969 void KeyedStoreICNexus::Clear(Code* host) { 978 void KeyedStoreICNexus::Clear(Code* host) {
970 KeyedStoreIC::Clear(GetIsolate(), host, this); 979 KeyedStoreIC::Clear(GetIsolate(), host, this);
971 } 980 }
972 981
973 982
974 KeyedAccessStoreMode KeyedStoreICNexus::GetKeyedAccessStoreMode() const { 983 KeyedAccessStoreMode KeyedStoreICNexus::GetKeyedAccessStoreMode() const {
975 KeyedAccessStoreMode mode = STANDARD_STORE; 984 KeyedAccessStoreMode mode = STANDARD_STORE;
976 MapHandleList maps; 985 MapHandleList maps;
977 CodeHandleList handlers; 986 List<Handle<Object>> handlers;
978 987
979 if (GetKeyType() == PROPERTY) return mode; 988 if (GetKeyType() == PROPERTY) return mode;
980 989
981 ExtractMaps(&maps); 990 ExtractMaps(&maps);
982 FindHandlers(&handlers, maps.length()); 991 FindHandlers(&handlers, maps.length());
983 for (int i = 0; i < handlers.length(); i++) { 992 for (int i = 0; i < handlers.length(); i++) {
984 // The first handler that isn't the slow handler will have the bits we need. 993 // The first handler that isn't the slow handler will have the bits we need.
985 Handle<Code> handler = handlers.at(i); 994 Handle<Code> handler = Handle<Code>::cast(handlers.at(i));
986 CodeStub::Major major_key = CodeStub::MajorKeyFromKey(handler->stub_key()); 995 CodeStub::Major major_key = CodeStub::MajorKeyFromKey(handler->stub_key());
987 uint32_t minor_key = CodeStub::MinorKeyFromKey(handler->stub_key()); 996 uint32_t minor_key = CodeStub::MinorKeyFromKey(handler->stub_key());
988 CHECK(major_key == CodeStub::KeyedStoreSloppyArguments || 997 CHECK(major_key == CodeStub::KeyedStoreSloppyArguments ||
989 major_key == CodeStub::StoreFastElement || 998 major_key == CodeStub::StoreFastElement ||
990 major_key == CodeStub::StoreElement || 999 major_key == CodeStub::StoreElement ||
991 major_key == CodeStub::ElementsTransitionAndStore || 1000 major_key == CodeStub::ElementsTransitionAndStore ||
992 major_key == CodeStub::NoCache); 1001 major_key == CodeStub::NoCache);
993 if (major_key != CodeStub::NoCache) { 1002 if (major_key != CodeStub::NoCache) {
994 mode = CommonStoreModeBits::decode(minor_key); 1003 mode = CommonStoreModeBits::decode(minor_key);
995 break; 1004 break;
(...skipping 13 matching lines...) Expand all
1009 1018
1010 IcCheckType KeyedStoreICNexus::GetKeyType() const { 1019 IcCheckType KeyedStoreICNexus::GetKeyType() const {
1011 Object* feedback = GetFeedback(); 1020 Object* feedback = GetFeedback();
1012 if (feedback == *TypeFeedbackVector::MegamorphicSentinel(GetIsolate())) { 1021 if (feedback == *TypeFeedbackVector::MegamorphicSentinel(GetIsolate())) {
1013 return static_cast<IcCheckType>(Smi::cast(GetFeedbackExtra())->value()); 1022 return static_cast<IcCheckType>(Smi::cast(GetFeedbackExtra())->value());
1014 } 1023 }
1015 return IsPropertyNameFeedback(feedback) ? PROPERTY : ELEMENT; 1024 return IsPropertyNameFeedback(feedback) ? PROPERTY : ELEMENT;
1016 } 1025 }
1017 } // namespace internal 1026 } // namespace internal
1018 } // namespace v8 1027 } // namespace v8
OLDNEW
« src/ic/ic.cc ('K') | « src/type-feedback-vector.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698