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

Side by Side Diff: src/type-info.cc

Issue 1321993004: Vector ICs: ObjectLiteral refactoring for Oracle feedback (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: REBASE, turned off flag. Created 5 years, 3 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-info.h ('k') | src/typing.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 #include "src/type-info.h" 5 #include "src/type-info.h"
6 6
7 #include "src/ast.h" 7 #include "src/ast.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/ic/ic.h" 10 #include "src/ic/ic.h"
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 } 191 }
192 } 192 }
193 *store_mode = STANDARD_STORE; 193 *store_mode = STANDARD_STORE;
194 *key_type = ELEMENT; 194 *key_type = ELEMENT;
195 } 195 }
196 196
197 197
198 void TypeFeedbackOracle::GetStoreModeAndKeyType( 198 void TypeFeedbackOracle::GetStoreModeAndKeyType(
199 FeedbackVectorICSlot slot, KeyedAccessStoreMode* store_mode, 199 FeedbackVectorICSlot slot, KeyedAccessStoreMode* store_mode,
200 IcCheckType* key_type) { 200 IcCheckType* key_type) {
201 if (!slot.IsInvalid()) { 201 if (!slot.IsInvalid() &&
202 feedback_vector_->GetKind(slot) == Code::KEYED_STORE_IC) {
202 KeyedStoreICNexus nexus(feedback_vector_, slot); 203 KeyedStoreICNexus nexus(feedback_vector_, slot);
203 *store_mode = nexus.GetKeyedAccessStoreMode(); 204 *store_mode = nexus.GetKeyedAccessStoreMode();
204 *key_type = nexus.GetKeyType(); 205 *key_type = nexus.GetKeyType();
205 } else { 206 } else {
206 *store_mode = STANDARD_STORE; 207 *store_mode = STANDARD_STORE;
207 *key_type = ELEMENT; 208 *key_type = ELEMENT;
208 } 209 }
209 } 210 }
210 211
211 212
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 } 408 }
408 409
409 410
410 void TypeFeedbackOracle::CountReceiverTypes(TypeFeedbackId id, 411 void TypeFeedbackOracle::CountReceiverTypes(TypeFeedbackId id,
411 SmallMapList* receiver_types) { 412 SmallMapList* receiver_types) {
412 receiver_types->Clear(); 413 receiver_types->Clear();
413 CollectReceiverTypes(id, receiver_types); 414 CollectReceiverTypes(id, receiver_types);
414 } 415 }
415 416
416 417
418 void TypeFeedbackOracle::CountReceiverTypes(FeedbackVectorICSlot slot,
419 SmallMapList* receiver_types) {
420 receiver_types->Clear();
421 if (!slot.IsInvalid()) CollectReceiverTypes(slot, receiver_types);
422 }
423
424
417 void TypeFeedbackOracle::CollectReceiverTypes(FeedbackVectorICSlot slot, 425 void TypeFeedbackOracle::CollectReceiverTypes(FeedbackVectorICSlot slot,
418 Handle<Name> name, 426 Handle<Name> name,
419 Code::Flags flags, 427 Code::Flags flags,
420 SmallMapList* types) { 428 SmallMapList* types) {
421 StoreICNexus nexus(feedback_vector_, slot); 429 StoreICNexus nexus(feedback_vector_, slot);
422 CollectReceiverTypes<FeedbackNexus>(&nexus, name, flags, types); 430 CollectReceiverTypes<FeedbackNexus>(&nexus, name, flags, types);
423 } 431 }
424 432
425 433
426 void TypeFeedbackOracle::CollectReceiverTypes(TypeFeedbackId ast_id, 434 void TypeFeedbackOracle::CollectReceiverTypes(TypeFeedbackId ast_id,
(...skipping 28 matching lines...) Expand all
455 SmallMapList* types) { 463 SmallMapList* types) {
456 Handle<Object> object = GetInfo(ast_id); 464 Handle<Object> object = GetInfo(ast_id);
457 if (!object->IsCode()) return; 465 if (!object->IsCode()) return;
458 Handle<Code> code = Handle<Code>::cast(object); 466 Handle<Code> code = Handle<Code>::cast(object);
459 CollectReceiverTypes<Code>(*code, types); 467 CollectReceiverTypes<Code>(*code, types);
460 } 468 }
461 469
462 470
463 void TypeFeedbackOracle::CollectReceiverTypes(FeedbackVectorICSlot slot, 471 void TypeFeedbackOracle::CollectReceiverTypes(FeedbackVectorICSlot slot,
464 SmallMapList* types) { 472 SmallMapList* types) {
465 KeyedStoreICNexus nexus(feedback_vector_, slot); 473 Code::Kind kind = feedback_vector_->GetKind(slot);
466 CollectReceiverTypes<FeedbackNexus>(&nexus, types); 474 if (kind == Code::STORE_IC) {
475 StoreICNexus nexus(feedback_vector_, slot);
476 CollectReceiverTypes<FeedbackNexus>(&nexus, types);
477 } else {
478 DCHECK(kind == Code::KEYED_STORE_IC);
479 KeyedStoreICNexus nexus(feedback_vector_, slot);
480 CollectReceiverTypes<FeedbackNexus>(&nexus, types);
481 }
467 } 482 }
468 483
469 484
470 template <class T> 485 template <class T>
471 void TypeFeedbackOracle::CollectReceiverTypes(T* obj, SmallMapList* types) { 486 void TypeFeedbackOracle::CollectReceiverTypes(T* obj, SmallMapList* types) {
472 MapHandleList maps; 487 MapHandleList maps;
473 if (obj->ic_state() == MONOMORPHIC) { 488 if (obj->ic_state() == MONOMORPHIC) {
474 Map* map = obj->FindFirstMap(); 489 Map* map = obj->FindFirstMap();
475 if (map != NULL) maps.Add(handle(map)); 490 if (map != NULL) maps.Add(handle(map));
476 } else if (obj->ic_state() == POLYMORPHIC) { 491 } else if (obj->ic_state() == POLYMORPHIC) {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 // Dictionary has been allocated with sufficient size for all elements. 587 // Dictionary has been allocated with sufficient size for all elements.
573 DisallowHeapAllocation no_need_to_resize_dictionary; 588 DisallowHeapAllocation no_need_to_resize_dictionary;
574 HandleScope scope(isolate()); 589 HandleScope scope(isolate());
575 USE(UnseededNumberDictionary::AtNumberPut( 590 USE(UnseededNumberDictionary::AtNumberPut(
576 dictionary_, IdToKey(ast_id), handle(target, isolate()))); 591 dictionary_, IdToKey(ast_id), handle(target, isolate())));
577 } 592 }
578 593
579 594
580 } // namespace internal 595 } // namespace internal
581 } // namespace v8 596 } // namespace v8
OLDNEW
« no previous file with comments | « src/type-info.h ('k') | src/typing.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698