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

Side by Side Diff: src/ic/ic.cc

Issue 1476413003: Provide call counts for constructor calls, surface them as a vector IC. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: REBASE. Created 5 years 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/ic/ic.h ('k') | src/interface-descriptors.h » ('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/ic/ic.h" 5 #include "src/ic/ic.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/arguments.h" 9 #include "src/arguments.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 case Code::LOAD_IC: 468 case Code::LOAD_IC:
469 case Code::KEYED_LOAD_IC: 469 case Code::KEYED_LOAD_IC:
470 case Code::STORE_IC: 470 case Code::STORE_IC:
471 case Code::KEYED_STORE_IC: 471 case Code::KEYED_STORE_IC:
472 return; 472 return;
473 case Code::COMPARE_IC: 473 case Code::COMPARE_IC:
474 return CompareIC::Clear(isolate, address, target, constant_pool); 474 return CompareIC::Clear(isolate, address, target, constant_pool);
475 case Code::COMPARE_NIL_IC: 475 case Code::COMPARE_NIL_IC:
476 return CompareNilIC::Clear(address, target, constant_pool); 476 return CompareNilIC::Clear(address, target, constant_pool);
477 case Code::CALL_IC: // CallICs are vector-based and cleared differently. 477 case Code::CALL_IC: // CallICs are vector-based and cleared differently.
478 case Code::CONSTRUCT_IC:
478 case Code::BINARY_OP_IC: 479 case Code::BINARY_OP_IC:
479 case Code::TO_BOOLEAN_IC: 480 case Code::TO_BOOLEAN_IC:
480 // Clearing these is tricky and does not 481 // Clearing these is tricky and does not
481 // make any performance difference. 482 // make any performance difference.
482 return; 483 return;
483 default: 484 default:
484 UNREACHABLE(); 485 UNREACHABLE();
485 } 486 }
486 } 487 }
487 488
(...skipping 15 matching lines...) Expand all
503 State state = nexus->StateFromFeedback(); 504 State state = nexus->StateFromFeedback();
504 505
505 if (state != UNINITIALIZED && !feedback->IsAllocationSite()) { 506 if (state != UNINITIALIZED && !feedback->IsAllocationSite()) {
506 nexus->ConfigureUninitialized(); 507 nexus->ConfigureUninitialized();
507 // The change in state must be processed. 508 // The change in state must be processed.
508 OnTypeFeedbackChanged(isolate, host, nexus->vector(), state, UNINITIALIZED); 509 OnTypeFeedbackChanged(isolate, host, nexus->vector(), state, UNINITIALIZED);
509 } 510 }
510 } 511 }
511 512
512 513
514 void ConstructIC::Clear(Isolate* isolate, Code* host, ConstructICNexus* nexus) {
515 // Determine our state.
516 Object* feedback = nexus->vector()->Get(nexus->slot());
517 State state = nexus->StateFromFeedback();
518
519 if (state != UNINITIALIZED && !feedback->IsAllocationSite()) {
520 nexus->ConfigureUninitialized();
521 // The change in state must be processed.
522 OnTypeFeedbackChanged(isolate, host, nexus->vector(), state, UNINITIALIZED);
523 }
524 }
525
526
513 void LoadIC::Clear(Isolate* isolate, Code* host, LoadICNexus* nexus) { 527 void LoadIC::Clear(Isolate* isolate, Code* host, LoadICNexus* nexus) {
514 if (IsCleared(nexus)) return; 528 if (IsCleared(nexus)) return;
515 State state = nexus->StateFromFeedback(); 529 State state = nexus->StateFromFeedback();
516 nexus->ConfigurePremonomorphic(); 530 nexus->ConfigurePremonomorphic();
517 OnTypeFeedbackChanged(isolate, host, nexus->vector(), state, PREMONOMORPHIC); 531 OnTypeFeedbackChanged(isolate, host, nexus->vector(), state, PREMONOMORPHIC);
518 } 532 }
519 533
520 534
521 void StoreIC::Clear(Isolate* isolate, Address address, Code* target, 535 void StoreIC::Clear(Isolate* isolate, Address address, Code* target,
522 Address constant_pool) { 536 Address constant_pool) {
(...skipping 2455 matching lines...) Expand 10 before | Expand all | Expand 10 after
2978 KeyedLoadICNexus nexus(vector, vector_slot); 2992 KeyedLoadICNexus nexus(vector, vector_slot);
2979 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); 2993 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus);
2980 ic.UpdateState(receiver, key); 2994 ic.UpdateState(receiver, key);
2981 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); 2995 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key));
2982 } 2996 }
2983 2997
2984 return *result; 2998 return *result;
2985 } 2999 }
2986 } // namespace internal 3000 } // namespace internal
2987 } // namespace v8 3001 } // namespace v8
OLDNEW
« no previous file with comments | « src/ic/ic.h ('k') | src/interface-descriptors.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698