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

Unified Diff: src/compiler/coalesced-live-ranges.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/coalesced-live-ranges.h ('k') | src/compiler/greedy-allocator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/coalesced-live-ranges.cc
diff --git a/src/compiler/coalesced-live-ranges.cc b/src/compiler/coalesced-live-ranges.cc
deleted file mode 100644
index 4ac3e2118de31f9e85eeaf08e998c631244f42ec..0000000000000000000000000000000000000000
--- a/src/compiler/coalesced-live-ranges.cc
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2015 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "src/compiler/coalesced-live-ranges.h"
-#include "src/compiler/greedy-allocator.h"
-#include "src/compiler/register-allocator.h"
-
-namespace v8 {
-namespace internal {
-namespace compiler {
-
-
-LiveRangeConflictIterator::LiveRangeConflictIterator(const LiveRange* range,
- IntervalStore* storage)
- : query_(range->first_interval()),
- pos_(storage->end()),
- intervals_(storage) {
- MovePosAndQueryToFirstConflict();
-}
-
-
-LiveRange* LiveRangeConflictIterator::Current() const {
- if (IsFinished()) return nullptr;
- return pos_->range_;
-}
-
-
-void LiveRangeConflictIterator::MovePosToFirstConflictForQuery() {
- DCHECK_NOT_NULL(query_);
- auto end = intervals_->end();
- LifetimePosition q_start = query_->start();
- LifetimePosition q_end = query_->end();
-
- if (intervals_->empty() || intervals_->rbegin()->end_ <= q_start ||
- intervals_->begin()->start_ >= q_end) {
- pos_ = end;
- return;
- }
-
- pos_ = intervals_->upper_bound(AsAllocatedInterval(q_start));
- // pos is either at the end (no start strictly greater than q_start) or
- // at some position with the aforementioned property. In either case, the
- // allocated interval before this one may intersect our query:
- // either because, although it starts before this query's start, it ends
- // after; or because it starts exactly at the query start. So unless we're
- // right at the beginning of the storage - meaning the first allocated
- // interval is also starting after this query's start - see what's behind.
- if (pos_ != intervals_->begin()) {
- --pos_;
- if (!QueryIntersectsAllocatedInterval()) {
- // The interval behind wasn't intersecting, so move back.
- ++pos_;
- }
- }
- if (pos_ == end || !QueryIntersectsAllocatedInterval()) {
- pos_ = end;
- }
-}
-
-
-void LiveRangeConflictIterator::MovePosAndQueryToFirstConflict() {
- auto end = intervals_->end();
- for (; query_ != nullptr; query_ = query_->next()) {
- MovePosToFirstConflictForQuery();
- if (pos_ != end) {
- DCHECK(QueryIntersectsAllocatedInterval());
- return;
- }
- }
-
- Invalidate();
-}
-
-
-void LiveRangeConflictIterator::IncrementPosAndSkipOverRepetitions() {
- auto end = intervals_->end();
- DCHECK(pos_ != end);
- LiveRange* current_conflict = Current();
- while (pos_ != end && pos_->range_ == current_conflict) {
- ++pos_;
- }
-}
-
-
-LiveRange* LiveRangeConflictIterator::InternalGetNext(bool clean_behind) {
- if (IsFinished()) return nullptr;
-
- LiveRange* to_clear = Current();
- IncrementPosAndSkipOverRepetitions();
- // At this point, pos_ is either at the end, or on an interval that doesn't
- // correspond to the same range as to_clear. This interval may not even be
- // a conflict.
- if (clean_behind) {
- // Since we parked pos_ on an iterator that won't be affected by removal,
- // we can safely delete to_clear's intervals.
- for (auto interval = to_clear->first_interval(); interval != nullptr;
- interval = interval->next()) {
- AllocatedInterval erase_key(interval->start(), interval->end(), nullptr);
- intervals_->erase(erase_key);
- }
- }
- // We may have parked pos_ at the end, or on a non-conflict. In that case,
- // move to the next query and reinitialize pos and query. This may invalidate
- // the iterator, if no more conflicts are available.
- if (!QueryIntersectsAllocatedInterval()) {
- query_ = query_->next();
- MovePosAndQueryToFirstConflict();
- }
- return Current();
-}
-
-
-LiveRangeConflictIterator CoalescedLiveRanges::GetConflicts(
- const LiveRange* range) {
- return LiveRangeConflictIterator(range, &intervals());
-}
-
-
-void CoalescedLiveRanges::AllocateRange(LiveRange* range) {
- for (auto interval = range->first_interval(); interval != nullptr;
- interval = interval->next()) {
- AllocatedInterval to_insert(interval->start(), interval->end(), range);
- intervals().insert(to_insert);
- }
-}
-
-
-bool CoalescedLiveRanges::VerifyAllocationsAreValidForTesting() const {
- LifetimePosition last_end = LifetimePosition::GapFromInstructionIndex(0);
- for (auto i : intervals_) {
- if (i.start_ < last_end) {
- return false;
- }
- last_end = i.end_;
- }
- return true;
-}
-
-
-} // namespace compiler
-} // namespace internal
-} // namespace v8
« no previous file with comments | « src/compiler/coalesced-live-ranges.h ('k') | src/compiler/greedy-allocator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698