| 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
|
|
|