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

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

Issue 2062343002: [ic] Remove --new-load-global-ic switch. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@enable-load-global-ic
Patch Set: Rebasing Created 4 years, 6 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/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 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 // Ensure we can skip the write barrier 179 // Ensure we can skip the write barrier
180 Handle<Object> uninitialized_sentinel = UninitializedSentinel(isolate); 180 Handle<Object> uninitialized_sentinel = UninitializedSentinel(isolate);
181 DCHECK_EQ(*factory->uninitialized_symbol(), *uninitialized_sentinel); 181 DCHECK_EQ(*factory->uninitialized_symbol(), *uninitialized_sentinel);
182 for (int i = 0; i < slot_count;) { 182 for (int i = 0; i < slot_count;) {
183 FeedbackVectorSlot slot(i); 183 FeedbackVectorSlot slot(i);
184 FeedbackVectorSlotKind kind = metadata->GetKind(slot); 184 FeedbackVectorSlotKind kind = metadata->GetKind(slot);
185 int index = TypeFeedbackVector::GetIndex(slot); 185 int index = TypeFeedbackVector::GetIndex(slot);
186 int entry_size = TypeFeedbackMetadata::GetSlotSize(kind); 186 int entry_size = TypeFeedbackMetadata::GetSlotSize(kind);
187 187
188 Object* value; 188 Object* value;
189 if (FLAG_new_load_global_ic && 189 if (kind == FeedbackVectorSlotKind::LOAD_GLOBAL_IC) {
190 kind == FeedbackVectorSlotKind::LOAD_GLOBAL_IC) {
191 value = *factory->empty_weak_cell(); 190 value = *factory->empty_weak_cell();
192 } else { 191 } else {
193 value = *uninitialized_sentinel; 192 value = *uninitialized_sentinel;
194 } 193 }
195 array->set(index, value, SKIP_WRITE_BARRIER); 194 array->set(index, value, SKIP_WRITE_BARRIER);
196 for (int j = 1; j < entry_size; j++) { 195 for (int j = 1; j < entry_size; j++) {
197 array->set(index + j, *uninitialized_sentinel, SKIP_WRITE_BARRIER); 196 array->set(index + j, *uninitialized_sentinel, SKIP_WRITE_BARRIER);
198 } 197 }
199 i += entry_size; 198 i += entry_size;
200 } 199 }
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 return MONOMORPHIC; 455 return MONOMORPHIC;
457 } 456 }
458 457
459 return UNINITIALIZED; 458 return UNINITIALIZED;
460 } 459 }
461 460
462 InlineCacheState LoadGlobalICNexus::StateFromFeedback() const { 461 InlineCacheState LoadGlobalICNexus::StateFromFeedback() const {
463 Isolate* isolate = GetIsolate(); 462 Isolate* isolate = GetIsolate();
464 Object* feedback = GetFeedback(); 463 Object* feedback = GetFeedback();
465 464
466 if (FLAG_new_load_global_ic) { 465 Object* extra = GetFeedbackExtra();
467 Object* extra = GetFeedbackExtra(); 466 if (!WeakCell::cast(feedback)->cleared() ||
468 if (!WeakCell::cast(feedback)->cleared() || 467 extra != *TypeFeedbackVector::UninitializedSentinel(isolate)) {
469 extra != *TypeFeedbackVector::UninitializedSentinel(isolate)) { 468 return MONOMORPHIC;
470 return MONOMORPHIC;
471 }
472
473 } else {
474 if (feedback == *TypeFeedbackVector::UninitializedSentinel(isolate)) {
475 return UNINITIALIZED;
476 } else if (feedback == *TypeFeedbackVector::MegamorphicSentinel(isolate)) {
477 return MEGAMORPHIC;
478 } else if (feedback ==
479 *TypeFeedbackVector::PremonomorphicSentinel(isolate)) {
480 return PREMONOMORPHIC;
481 } else if (feedback->IsFixedArray()) {
482 // Determine state purely by our structure, don't check if the maps are
483 // cleared.
484 return POLYMORPHIC;
485 } else if (feedback->IsWeakCell()) {
486 // Don't check if the map is cleared.
487 return MONOMORPHIC;
488 }
489 } 469 }
490 return UNINITIALIZED; 470 return UNINITIALIZED;
491 } 471 }
492 472
493 InlineCacheState KeyedLoadICNexus::StateFromFeedback() const { 473 InlineCacheState KeyedLoadICNexus::StateFromFeedback() const {
494 Isolate* isolate = GetIsolate(); 474 Isolate* isolate = GetIsolate();
495 Object* feedback = GetFeedback(); 475 Object* feedback = GetFeedback();
496 476
497 if (feedback == *TypeFeedbackVector::UninitializedSentinel(isolate)) { 477 if (feedback == *TypeFeedbackVector::UninitializedSentinel(isolate)) {
498 return UNINITIALIZED; 478 return UNINITIALIZED;
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 } 608 }
629 609
630 610
631 void LoadICNexus::ConfigureMonomorphic(Handle<Map> receiver_map, 611 void LoadICNexus::ConfigureMonomorphic(Handle<Map> receiver_map,
632 Handle<Code> handler) { 612 Handle<Code> handler) {
633 Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map); 613 Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map);
634 SetFeedback(*cell); 614 SetFeedback(*cell);
635 SetFeedbackExtra(*handler); 615 SetFeedbackExtra(*handler);
636 } 616 }
637 617
638 void LoadGlobalICNexus::ConfigureMonomorphic(Handle<Map> receiver_map,
639 Handle<Code> handler) {
640 Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map);
641 SetFeedback(*cell);
642 SetFeedbackExtra(*handler);
643 }
644
645 void LoadGlobalICNexus::ConfigureUninitialized() { 618 void LoadGlobalICNexus::ConfigureUninitialized() {
646 Isolate* isolate = GetIsolate(); 619 Isolate* isolate = GetIsolate();
647 SetFeedback(isolate->heap()->empty_weak_cell(), SKIP_WRITE_BARRIER); 620 SetFeedback(isolate->heap()->empty_weak_cell(), SKIP_WRITE_BARRIER);
648 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate), 621 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate),
649 SKIP_WRITE_BARRIER); 622 SKIP_WRITE_BARRIER);
650 } 623 }
651 624
652 void LoadGlobalICNexus::ConfigurePropertyCellMode(Handle<PropertyCell> cell) { 625 void LoadGlobalICNexus::ConfigurePropertyCellMode(Handle<PropertyCell> cell) {
653 Isolate* isolate = GetIsolate(); 626 Isolate* isolate = GetIsolate();
654 SetFeedback(*isolate->factory()->NewWeakCell(cell)); 627 SetFeedback(*isolate->factory()->NewWeakCell(cell));
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 952
980 IcCheckType KeyedStoreICNexus::GetKeyType() const { 953 IcCheckType KeyedStoreICNexus::GetKeyType() const {
981 Object* feedback = GetFeedback(); 954 Object* feedback = GetFeedback();
982 if (feedback == *TypeFeedbackVector::MegamorphicSentinel(GetIsolate())) { 955 if (feedback == *TypeFeedbackVector::MegamorphicSentinel(GetIsolate())) {
983 return static_cast<IcCheckType>(Smi::cast(GetFeedbackExtra())->value()); 956 return static_cast<IcCheckType>(Smi::cast(GetFeedbackExtra())->value());
984 } 957 }
985 return IsPropertyNameFeedback(feedback) ? PROPERTY : ELEMENT; 958 return IsPropertyNameFeedback(feedback) ? PROPERTY : ELEMENT;
986 } 959 }
987 } // namespace internal 960 } // namespace internal
988 } // namespace v8 961 } // namespace v8
OLDNEW
« no previous file with comments | « src/type-feedback-vector.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698