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

Side by Side Diff: src/lithium.cc

Issue 871253005: Use weak cells in dependent code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add comment Created 5 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 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/lithium.h" 5 #include "src/lithium.h"
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/scopes.h" 9 #include "src/scopes.h"
10 #include "src/serialize.h" 10 #include "src/serialize.h"
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 409
410 Representation LChunk::LookupLiteralRepresentation( 410 Representation LChunk::LookupLiteralRepresentation(
411 LConstantOperand* operand) const { 411 LConstantOperand* operand) const {
412 return graph_->LookupValue(operand->index())->representation(); 412 return graph_->LookupValue(operand->index())->representation();
413 } 413 }
414 414
415 415
416 static void AddWeakObjectToCodeDependency(Isolate* isolate, 416 static void AddWeakObjectToCodeDependency(Isolate* isolate,
417 Handle<Object> object, 417 Handle<Object> object,
418 Handle<Code> code) { 418 Handle<Code> code) {
419 Handle<WeakCell> cell = Code::WeakCellFor(code);
419 Heap* heap = isolate->heap(); 420 Heap* heap = isolate->heap();
420 heap->EnsureWeakObjectToCodeTable(); 421 heap->EnsureWeakObjectToCodeTable();
421 Handle<DependentCode> dep(heap->LookupWeakObjectToCodeDependency(object)); 422 Handle<DependentCode> dep(heap->LookupWeakObjectToCodeDependency(object));
422 dep = DependentCode::Insert(dep, DependentCode::kWeakCodeGroup, code); 423 dep = DependentCode::InsertWeakCode(dep, DependentCode::kWeakCodeGroup, cell);
423 heap->AddWeakObjectToCodeDependency(object, dep); 424 heap->AddWeakObjectToCodeDependency(object, dep);
424 } 425 }
425 426
426 427
427 void LChunk::RegisterWeakObjectsInOptimizedCode(Handle<Code> code) const { 428 void LChunk::RegisterWeakObjectsInOptimizedCode(Handle<Code> code) const {
428 DCHECK(code->is_optimized_code()); 429 DCHECK(code->is_optimized_code());
429 ZoneList<Handle<Map> > maps(1, zone()); 430 ZoneList<Handle<Map> > maps(1, zone());
430 ZoneList<Handle<JSObject> > objects(1, zone()); 431 ZoneList<Handle<JSObject> > objects(1, zone());
431 ZoneList<Handle<Cell> > cells(1, zone()); 432 ZoneList<Handle<Cell> > cells(1, zone());
432 int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) | 433 int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) |
(...skipping 29 matching lines...) Expand all
462 } 463 }
463 if (FLAG_enable_ool_constant_pool) { 464 if (FLAG_enable_ool_constant_pool) {
464 code->constant_pool()->set_weak_object_state( 465 code->constant_pool()->set_weak_object_state(
465 ConstantPoolArray::WEAK_OBJECTS_IN_OPTIMIZED_CODE); 466 ConstantPoolArray::WEAK_OBJECTS_IN_OPTIMIZED_CODE);
466 } 467 }
467 code->set_can_have_weak_objects(true); 468 code->set_can_have_weak_objects(true);
468 } 469 }
469 470
470 471
471 void LChunk::CommitDependencies(Handle<Code> code) const { 472 void LChunk::CommitDependencies(Handle<Code> code) const {
473 if (!code->is_optimized_code()) return;
474 HandleScope scope(isolate());
475
472 for (MapSet::const_iterator it = deprecation_dependencies_.begin(), 476 for (MapSet::const_iterator it = deprecation_dependencies_.begin(),
473 iend = deprecation_dependencies_.end(); it != iend; ++it) { 477 iend = deprecation_dependencies_.end(); it != iend; ++it) {
474 Handle<Map> map = *it; 478 Handle<Map> map = *it;
475 DCHECK(!map->is_deprecated()); 479 DCHECK(!map->is_deprecated());
476 DCHECK(map->CanBeDeprecated()); 480 DCHECK(map->CanBeDeprecated());
477 Map::AddDependentCode(map, DependentCode::kTransitionGroup, code); 481 Map::AddDependentCode(map, DependentCode::kTransitionGroup, code);
478 } 482 }
479 483
480 for (MapSet::const_iterator it = stability_dependencies_.begin(), 484 for (MapSet::const_iterator it = stability_dependencies_.begin(),
481 iend = stability_dependencies_.end(); it != iend; ++it) { 485 iend = stability_dependencies_.end(); it != iend; ++it) {
482 Handle<Map> map = *it; 486 Handle<Map> map = *it;
483 DCHECK(map->is_stable()); 487 DCHECK(map->is_stable());
484 DCHECK(map->CanTransition()); 488 DCHECK(map->CanTransition());
485 Map::AddDependentCode(map, DependentCode::kPrototypeCheckGroup, code); 489 Map::AddDependentCode(map, DependentCode::kPrototypeCheckGroup, code);
486 } 490 }
487 491
488 info_->CommitDependencies(code); 492 info_->CommitDependencies(code);
489 if (code->is_optimized_code()) RegisterWeakObjectsInOptimizedCode(code); 493 RegisterWeakObjectsInOptimizedCode(code);
490 } 494 }
491 495
492 496
493 LChunk* LChunk::NewChunk(HGraph* graph) { 497 LChunk* LChunk::NewChunk(HGraph* graph) {
494 DisallowHandleAllocation no_handles; 498 DisallowHandleAllocation no_handles;
495 DisallowHeapAllocation no_gc; 499 DisallowHeapAllocation no_gc;
496 graph->DisallowAddingNewValues(); 500 graph->DisallowAddingNewValues();
497 int values = graph->GetMaximumValueID(); 501 int values = graph->GetMaximumValueID();
498 CompilationInfo* info = graph->info(); 502 CompilationInfo* info = graph->info();
499 if (values > LUnallocated::kMaxVirtualRegisters) { 503 if (values > LUnallocated::kMaxVirtualRegisters) {
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 725
722 726
723 LPhase::~LPhase() { 727 LPhase::~LPhase() {
724 if (ShouldProduceTraceOutput()) { 728 if (ShouldProduceTraceOutput()) {
725 isolate()->GetHTracer()->TraceLithium(name(), chunk_); 729 isolate()->GetHTracer()->TraceLithium(name(), chunk_);
726 } 730 }
727 } 731 }
728 732
729 733
730 } } // namespace v8::internal 734 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698