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

Side by Side Diff: src/compiler/register-allocator.cc

Issue 2060673002: [turbofan] Retiring Greedy Allocator (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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/compiler/register-allocator.h ('k') | src/flag-definitions.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 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/base/adapters.h" 5 #include "src/base/adapters.h"
6 #include "src/compiler/linkage.h" 6 #include "src/compiler/linkage.h"
7 #include "src/compiler/register-allocator.h" 7 #include "src/compiler/register-allocator.h"
8 #include "src/string-stream.h" 8 #include "src/string-stream.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 os << 'i'; 406 os << 'i';
407 } 407 }
408 if (pos.IsStart()) { 408 if (pos.IsStart()) {
409 os << 's'; 409 os << 's';
410 } else { 410 } else {
411 os << 'e'; 411 os << 'e';
412 } 412 }
413 return os; 413 return os;
414 } 414 }
415 415
416
417 const float LiveRange::kInvalidWeight = -1;
418 const float LiveRange::kMaxWeight = std::numeric_limits<float>::max();
419
420
421 LiveRange::LiveRange(int relative_id, MachineRepresentation rep, 416 LiveRange::LiveRange(int relative_id, MachineRepresentation rep,
422 TopLevelLiveRange* top_level) 417 TopLevelLiveRange* top_level)
423 : relative_id_(relative_id), 418 : relative_id_(relative_id),
424 bits_(0), 419 bits_(0),
425 last_interval_(nullptr), 420 last_interval_(nullptr),
426 first_interval_(nullptr), 421 first_interval_(nullptr),
427 first_pos_(nullptr), 422 first_pos_(nullptr),
428 top_level_(top_level), 423 top_level_(top_level),
429 next_(nullptr), 424 next_(nullptr),
430 current_interval_(nullptr), 425 current_interval_(nullptr),
431 last_processed_use_(nullptr), 426 last_processed_use_(nullptr),
432 current_hint_position_(nullptr), 427 current_hint_position_(nullptr),
433 splitting_pointer_(nullptr), 428 splitting_pointer_(nullptr) {
434 size_(kInvalidSize),
435 weight_(kInvalidWeight),
436 group_(nullptr) {
437 DCHECK(AllocatedOperand::IsSupportedRepresentation(rep)); 429 DCHECK(AllocatedOperand::IsSupportedRepresentation(rep));
438 bits_ = AssignedRegisterField::encode(kUnassignedRegister) | 430 bits_ = AssignedRegisterField::encode(kUnassignedRegister) |
439 RepresentationField::encode(rep); 431 RepresentationField::encode(rep);
440 } 432 }
441 433
442 434
443 void LiveRange::VerifyPositions() const { 435 void LiveRange::VerifyPositions() const {
444 // Walk the positions, verifying that each is in an interval. 436 // Walk the positions, verifying that each is in an interval.
445 UseInterval* interval = first_interval_; 437 UseInterval* interval = first_interval_;
446 for (UsePosition* pos = first_pos_; pos != nullptr; pos = pos->next()) { 438 for (UsePosition* pos = first_pos_; pos != nullptr; pos = pos->next()) {
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 } else { 684 } else {
693 first_pos_ = nullptr; 685 first_pos_ = nullptr;
694 } 686 }
695 result->first_pos_ = use_after; 687 result->first_pos_ = use_after;
696 688
697 // Discard cached iteration state. It might be pointing 689 // Discard cached iteration state. It might be pointing
698 // to the use that no longer belongs to this live range. 690 // to the use that no longer belongs to this live range.
699 last_processed_use_ = nullptr; 691 last_processed_use_ = nullptr;
700 current_interval_ = nullptr; 692 current_interval_ = nullptr;
701 693
702 // Invalidate size and weight of this range. The child range has them
703 // invalid at construction.
704 size_ = kInvalidSize;
705 weight_ = kInvalidWeight;
706 #ifdef DEBUG 694 #ifdef DEBUG
707 VerifyChildStructure(); 695 VerifyChildStructure();
708 result->VerifyChildStructure(); 696 result->VerifyChildStructure();
709 #endif 697 #endif
710 return use_before; 698 return use_before;
711 } 699 }
712 700
713 701
714 void LiveRange::UpdateParentForAllChildren(TopLevelLiveRange* new_top_level) { 702 void LiveRange::UpdateParentForAllChildren(TopLevelLiveRange* new_top_level) {
715 LiveRange* child = this; 703 LiveRange* child = this;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 a = a->next(); 799 a = a->next();
812 if (a == nullptr || a->start() > other->End()) break; 800 if (a == nullptr || a->start() > other->End()) break;
813 AdvanceLastProcessedMarker(a, advance_last_processed_up_to); 801 AdvanceLastProcessedMarker(a, advance_last_processed_up_to);
814 } else { 802 } else {
815 b = b->next(); 803 b = b->next();
816 } 804 }
817 } 805 }
818 return LifetimePosition::Invalid(); 806 return LifetimePosition::Invalid();
819 } 807 }
820 808
821
822 unsigned LiveRange::GetSize() {
823 if (size_ == kInvalidSize) {
824 size_ = 0;
825 for (const UseInterval* interval = first_interval(); interval != nullptr;
826 interval = interval->next()) {
827 size_ += (interval->end().value() - interval->start().value());
828 }
829 }
830
831 return static_cast<unsigned>(size_);
832 }
833
834
835 void LiveRange::Print(const RegisterConfiguration* config, 809 void LiveRange::Print(const RegisterConfiguration* config,
836 bool with_children) const { 810 bool with_children) const {
837 OFStream os(stdout); 811 OFStream os(stdout);
838 PrintableLiveRange wrapper; 812 PrintableLiveRange wrapper;
839 wrapper.register_configuration_ = config; 813 wrapper.register_configuration_ = config;
840 for (const LiveRange* i = this; i != nullptr; i = i->next()) { 814 for (const LiveRange* i = this; i != nullptr; i = i->next()) {
841 wrapper.range_ = i; 815 wrapper.range_ = i;
842 os << wrapper << std::endl; 816 os << wrapper << std::endl;
843 if (!with_children) break; 817 if (!with_children) break;
844 } 818 }
(...skipping 2813 matching lines...) Expand 10 before | Expand all | Expand 10 after
3658 } 3632 }
3659 } 3633 }
3660 } 3634 }
3661 } 3635 }
3662 } 3636 }
3663 3637
3664 3638
3665 } // namespace compiler 3639 } // namespace compiler
3666 } // namespace internal 3640 } // namespace internal
3667 } // namespace v8 3641 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/register-allocator.h ('k') | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698