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

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

Issue 2673383002: [ic] Encode LoadGlobalIC's typeof mode in slot kind instead of code object's flags. (Closed)
Patch Set: Created 3 years, 10 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
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-inl.h" 8 #include "src/ic/ic-inl.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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 } 142 }
143 143
144 const char* TypeFeedbackMetadata::Kind2String(FeedbackVectorSlotKind kind) { 144 const char* TypeFeedbackMetadata::Kind2String(FeedbackVectorSlotKind kind) {
145 switch (kind) { 145 switch (kind) {
146 case FeedbackVectorSlotKind::INVALID: 146 case FeedbackVectorSlotKind::INVALID:
147 return "INVALID"; 147 return "INVALID";
148 case FeedbackVectorSlotKind::CALL_IC: 148 case FeedbackVectorSlotKind::CALL_IC:
149 return "CALL_IC"; 149 return "CALL_IC";
150 case FeedbackVectorSlotKind::LOAD_IC: 150 case FeedbackVectorSlotKind::LOAD_IC:
151 return "LOAD_IC"; 151 return "LOAD_IC";
152 case FeedbackVectorSlotKind::LOAD_GLOBAL_IC: 152 case FeedbackVectorSlotKind::LOAD_GLOBAL_INSIDE_TYPEOF_IC:
153 return "LOAD_GLOBAL_IC"; 153 return "LOAD_GLOBAL_INSIDE_TYPEOF_IC";
154 case FeedbackVectorSlotKind::LOAD_GLOBAL_NOT_INSIDE_TYPEOF_IC:
155 return "LOAD_GLOBAL_NOT_INSIDE_TYPEOF_IC";
154 case FeedbackVectorSlotKind::KEYED_LOAD_IC: 156 case FeedbackVectorSlotKind::KEYED_LOAD_IC:
155 return "KEYED_LOAD_IC"; 157 return "KEYED_LOAD_IC";
156 case FeedbackVectorSlotKind::STORE_SLOPPY_IC: 158 case FeedbackVectorSlotKind::STORE_SLOPPY_IC:
157 return "STORE_SLOPPY_IC"; 159 return "STORE_SLOPPY_IC";
158 case FeedbackVectorSlotKind::STORE_STRICT_IC: 160 case FeedbackVectorSlotKind::STORE_STRICT_IC:
159 return "STORE_STRICT_IC"; 161 return "STORE_STRICT_IC";
160 case FeedbackVectorSlotKind::KEYED_STORE_SLOPPY_IC: 162 case FeedbackVectorSlotKind::KEYED_STORE_SLOPPY_IC:
161 return "KEYED_STORE_SLOPPY_IC"; 163 return "KEYED_STORE_SLOPPY_IC";
162 case FeedbackVectorSlotKind::KEYED_STORE_STRICT_IC: 164 case FeedbackVectorSlotKind::KEYED_STORE_STRICT_IC:
163 return "KEYED_STORE_STRICT_IC"; 165 return "KEYED_STORE_STRICT_IC";
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 DCHECK_EQ(isolate->heap()->uninitialized_symbol(), *uninitialized_sentinel); 210 DCHECK_EQ(isolate->heap()->uninitialized_symbol(), *uninitialized_sentinel);
209 Handle<Oddball> undefined_value = factory->undefined_value(); 211 Handle<Oddball> undefined_value = factory->undefined_value();
210 for (int i = 0; i < slot_count;) { 212 for (int i = 0; i < slot_count;) {
211 FeedbackVectorSlot slot(i); 213 FeedbackVectorSlot slot(i);
212 FeedbackVectorSlotKind kind = metadata->GetKind(slot); 214 FeedbackVectorSlotKind kind = metadata->GetKind(slot);
213 int index = TypeFeedbackVector::GetIndex(slot); 215 int index = TypeFeedbackVector::GetIndex(slot);
214 int entry_size = TypeFeedbackMetadata::GetSlotSize(kind); 216 int entry_size = TypeFeedbackMetadata::GetSlotSize(kind);
215 217
216 Object* extra_value = *uninitialized_sentinel; 218 Object* extra_value = *uninitialized_sentinel;
217 switch (kind) { 219 switch (kind) {
218 case FeedbackVectorSlotKind::LOAD_GLOBAL_IC: 220 case FeedbackVectorSlotKind::LOAD_GLOBAL_INSIDE_TYPEOF_IC:
221 case FeedbackVectorSlotKind::LOAD_GLOBAL_NOT_INSIDE_TYPEOF_IC:
219 array->set(index, isolate->heap()->empty_weak_cell(), 222 array->set(index, isolate->heap()->empty_weak_cell(),
220 SKIP_WRITE_BARRIER); 223 SKIP_WRITE_BARRIER);
221 break; 224 break;
222 case FeedbackVectorSlotKind::INTERPRETER_COMPARE_IC: 225 case FeedbackVectorSlotKind::INTERPRETER_COMPARE_IC:
223 case FeedbackVectorSlotKind::INTERPRETER_BINARYOP_IC: 226 case FeedbackVectorSlotKind::INTERPRETER_BINARYOP_IC:
224 array->set(index, Smi::kZero, SKIP_WRITE_BARRIER); 227 array->set(index, Smi::kZero, SKIP_WRITE_BARRIER);
225 break; 228 break;
226 case FeedbackVectorSlotKind::CREATE_CLOSURE: { 229 case FeedbackVectorSlotKind::CREATE_CLOSURE: {
227 Handle<Cell> cell = factory->NewCell(undefined_value); 230 Handle<Cell> cell = factory->NewCell(undefined_value);
228 array->set(index, *cell); 231 array->set(index, *cell);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 case FeedbackVectorSlotKind::CALL_IC: { 300 case FeedbackVectorSlotKind::CALL_IC: {
298 CallICNexus nexus(this, slot); 301 CallICNexus nexus(this, slot);
299 nexus.Clear(shared->code()); 302 nexus.Clear(shared->code());
300 break; 303 break;
301 } 304 }
302 case FeedbackVectorSlotKind::LOAD_IC: { 305 case FeedbackVectorSlotKind::LOAD_IC: {
303 LoadICNexus nexus(this, slot); 306 LoadICNexus nexus(this, slot);
304 nexus.Clear(shared->code()); 307 nexus.Clear(shared->code());
305 break; 308 break;
306 } 309 }
307 case FeedbackVectorSlotKind::LOAD_GLOBAL_IC: { 310 case FeedbackVectorSlotKind::LOAD_GLOBAL_INSIDE_TYPEOF_IC:
311 case FeedbackVectorSlotKind::LOAD_GLOBAL_NOT_INSIDE_TYPEOF_IC: {
308 LoadGlobalICNexus nexus(this, slot); 312 LoadGlobalICNexus nexus(this, slot);
309 nexus.Clear(shared->code()); 313 nexus.Clear(shared->code());
310 break; 314 break;
311 } 315 }
312 case FeedbackVectorSlotKind::KEYED_LOAD_IC: { 316 case FeedbackVectorSlotKind::KEYED_LOAD_IC: {
313 KeyedLoadICNexus nexus(this, slot); 317 KeyedLoadICNexus nexus(this, slot);
314 nexus.Clear(shared->code()); 318 nexus.Clear(shared->code());
315 break; 319 break;
316 } 320 }
317 case FeedbackVectorSlotKind::STORE_SLOPPY_IC: 321 case FeedbackVectorSlotKind::STORE_SLOPPY_IC:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 case FeedbackVectorSlotKind::INVALID: 365 case FeedbackVectorSlotKind::INVALID:
362 case FeedbackVectorSlotKind::KINDS_NUMBER: 366 case FeedbackVectorSlotKind::KINDS_NUMBER:
363 UNREACHABLE(); 367 UNREACHABLE();
364 break; 368 break;
365 } 369 }
366 } 370 }
367 } 371 }
368 } 372 }
369 373
370 374
371 // static
372 Handle<TypeFeedbackVector> TypeFeedbackVector::DummyVector(Isolate* isolate) {
373 return isolate->factory()->dummy_vector();
374 }
375
376
377 Handle<FixedArray> FeedbackNexus::EnsureArrayOfSize(int length) { 375 Handle<FixedArray> FeedbackNexus::EnsureArrayOfSize(int length) {
378 Isolate* isolate = GetIsolate(); 376 Isolate* isolate = GetIsolate();
379 Handle<Object> feedback = handle(GetFeedback(), isolate); 377 Handle<Object> feedback = handle(GetFeedback(), isolate);
380 if (!feedback->IsFixedArray() || 378 if (!feedback->IsFixedArray() ||
381 FixedArray::cast(*feedback)->length() != length) { 379 FixedArray::cast(*feedback)->length() != length) {
382 Handle<FixedArray> array = isolate->factory()->NewFixedArray(length); 380 Handle<FixedArray> array = isolate->factory()->NewFixedArray(length);
383 SetFeedback(*array); 381 SetFeedback(*array);
384 return array; 382 return array;
385 } 383 }
386 return Handle<FixedArray>::cast(feedback); 384 return Handle<FixedArray>::cast(feedback);
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after
1046 void StoreDataPropertyInLiteralICNexus::ConfigureMonomorphic( 1044 void StoreDataPropertyInLiteralICNexus::ConfigureMonomorphic(
1047 Handle<Name> name, Handle<Map> receiver_map) { 1045 Handle<Name> name, Handle<Map> receiver_map) {
1048 Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map); 1046 Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map);
1049 1047
1050 SetFeedback(*cell); 1048 SetFeedback(*cell);
1051 SetFeedbackExtra(*name); 1049 SetFeedbackExtra(*name);
1052 } 1050 }
1053 1051
1054 } // namespace internal 1052 } // namespace internal
1055 } // namespace v8 1053 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698