| Index: src/compiler/register-allocator.cc
 | 
| diff --git a/src/compiler/register-allocator.cc b/src/compiler/register-allocator.cc
 | 
| index 00c4ec521d3c061165d282d4a92b9b2c40fb46e0..dd526cd47b88bcdcd274ef235d26867e3e88668a 100644
 | 
| --- a/src/compiler/register-allocator.cc
 | 
| +++ b/src/compiler/register-allocator.cc
 | 
| @@ -19,16 +19,6 @@ namespace compiler {
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| -inline LifetimePosition Min(LifetimePosition a, LifetimePosition b) {
 | 
| -  return a.Value() < b.Value() ? a : b;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -inline LifetimePosition Max(LifetimePosition a, LifetimePosition b) {
 | 
| -  return a.Value() > b.Value() ? a : b;
 | 
| -}
 | 
| -
 | 
| -
 | 
|  void RemoveElement(ZoneVector<LiveRange*>* v, LiveRange* range) {
 | 
|    auto it = std::find(v->begin(), v->end(), range);
 | 
|    DCHECK(it != v->end());
 | 
| @@ -113,7 +103,7 @@ void UsePosition::set_type(UsePositionType type, bool register_beneficial) {
 | 
|  
 | 
|  
 | 
|  UseInterval* UseInterval::SplitAt(LifetimePosition pos, Zone* zone) {
 | 
| -  DCHECK(Contains(pos) && pos.Value() != start().Value());
 | 
| +  DCHECK(Contains(pos) && pos != start());
 | 
|    auto after = new (zone) UseInterval(pos, end_);
 | 
|    after->next_ = next_;
 | 
|    next_ = nullptr;
 | 
| @@ -158,11 +148,10 @@ void LiveRange::Verify() const {
 | 
|    // Walk the positions, verifying that each is in an interval.
 | 
|    auto interval = first_interval_;
 | 
|    for (auto pos = first_pos_; pos != nullptr; pos = pos->next()) {
 | 
| -    CHECK(Start().Value() <= pos->pos().Value());
 | 
| -    CHECK(pos->pos().Value() <= End().Value());
 | 
| +    CHECK(Start() <= pos->pos());
 | 
| +    CHECK(pos->pos() <= End());
 | 
|      CHECK(interval != nullptr);
 | 
| -    while (!interval->Contains(pos->pos()) &&
 | 
| -           interval->end().Value() != pos->pos().Value()) {
 | 
| +    while (!interval->Contains(pos->pos()) && interval->end() != pos->pos()) {
 | 
|        interval = interval->next();
 | 
|        CHECK(interval != nullptr);
 | 
|      }
 | 
| @@ -247,10 +236,10 @@ void LiveRange::CommitSpillOperand(AllocatedOperand* operand) {
 | 
|  
 | 
|  UsePosition* LiveRange::NextUsePosition(LifetimePosition start) const {
 | 
|    UsePosition* use_pos = last_processed_use_;
 | 
| -  if (use_pos == nullptr || use_pos->pos().Value() > start.Value()) {
 | 
| +  if (use_pos == nullptr || use_pos->pos() > start) {
 | 
|      use_pos = first_pos();
 | 
|    }
 | 
| -  while (use_pos != nullptr && use_pos->pos().Value() < start.Value()) {
 | 
| +  while (use_pos != nullptr && use_pos->pos() < start) {
 | 
|      use_pos = use_pos->next();
 | 
|    }
 | 
|    last_processed_use_ = use_pos;
 | 
| @@ -272,7 +261,7 @@ UsePosition* LiveRange::PreviousUsePositionRegisterIsBeneficial(
 | 
|      LifetimePosition start) const {
 | 
|    auto pos = first_pos();
 | 
|    UsePosition* prev = nullptr;
 | 
| -  while (pos != nullptr && pos->pos().Value() < start.Value()) {
 | 
| +  while (pos != nullptr && pos->pos() < start) {
 | 
|      if (pos->RegisterIsBeneficial()) prev = pos;
 | 
|      pos = pos->next();
 | 
|    }
 | 
| @@ -294,7 +283,7 @@ bool LiveRange::CanBeSpilled(LifetimePosition pos) const {
 | 
|    // at the current or the immediate next position.
 | 
|    auto use_pos = NextRegisterPosition(pos);
 | 
|    if (use_pos == nullptr) return true;
 | 
| -  return use_pos->pos().Value() > pos.NextStart().End().Value();
 | 
| +  return use_pos->pos() > pos.NextStart().End();
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -321,7 +310,7 @@ InstructionOperand LiveRange::GetAssignedOperand() const {
 | 
|  UseInterval* LiveRange::FirstSearchIntervalForPosition(
 | 
|      LifetimePosition position) const {
 | 
|    if (current_interval_ == nullptr) return first_interval_;
 | 
| -  if (current_interval_->start().Value() > position.Value()) {
 | 
| +  if (current_interval_->start() > position) {
 | 
|      current_interval_ = nullptr;
 | 
|      return first_interval_;
 | 
|    }
 | 
| @@ -332,10 +321,10 @@ UseInterval* LiveRange::FirstSearchIntervalForPosition(
 | 
|  void LiveRange::AdvanceLastProcessedMarker(
 | 
|      UseInterval* to_start_of, LifetimePosition but_not_past) const {
 | 
|    if (to_start_of == nullptr) return;
 | 
| -  if (to_start_of->start().Value() > but_not_past.Value()) return;
 | 
| +  if (to_start_of->start() > but_not_past) return;
 | 
|    auto start = current_interval_ == nullptr ? LifetimePosition::Invalid()
 | 
|                                              : current_interval_->start();
 | 
| -  if (to_start_of->start().Value() > start.Value()) {
 | 
| +  if (to_start_of->start() > start) {
 | 
|      current_interval_ = to_start_of;
 | 
|    }
 | 
|  }
 | 
| @@ -343,7 +332,7 @@ void LiveRange::AdvanceLastProcessedMarker(
 | 
|  
 | 
|  void LiveRange::SplitAt(LifetimePosition position, LiveRange* result,
 | 
|                          Zone* zone) {
 | 
| -  DCHECK(Start().Value() < position.Value());
 | 
| +  DCHECK(Start() < position);
 | 
|    DCHECK(result->IsEmpty());
 | 
|    // Find the last interval that ends before the position. If the
 | 
|    // position is contained in one of the intervals in the chain, we
 | 
| @@ -354,7 +343,7 @@ void LiveRange::SplitAt(LifetimePosition position, LiveRange* result,
 | 
|    // we need to split use positons in a special way.
 | 
|    bool split_at_start = false;
 | 
|  
 | 
| -  if (current->start().Value() == position.Value()) {
 | 
| +  if (current->start() == position) {
 | 
|      // When splitting at start we need to locate the previous use interval.
 | 
|      current = first_interval_;
 | 
|    }
 | 
| @@ -366,8 +355,8 @@ void LiveRange::SplitAt(LifetimePosition position, LiveRange* result,
 | 
|        break;
 | 
|      }
 | 
|      auto next = current->next();
 | 
| -    if (next->start().Value() >= position.Value()) {
 | 
| -      split_at_start = (next->start().Value() == position.Value());
 | 
| +    if (next->start() >= position) {
 | 
| +      split_at_start = (next->start() == position);
 | 
|        break;
 | 
|      }
 | 
|      current = next;
 | 
| @@ -391,14 +380,12 @@ void LiveRange::SplitAt(LifetimePosition position, LiveRange* result,
 | 
|      // The split position coincides with the beginning of a use interval (the
 | 
|      // end of a lifetime hole). Use at this position should be attributed to
 | 
|      // the split child because split child owns use interval covering it.
 | 
| -    while (use_after != nullptr &&
 | 
| -           use_after->pos().Value() < position.Value()) {
 | 
| +    while (use_after != nullptr && use_after->pos() < position) {
 | 
|        use_before = use_after;
 | 
|        use_after = use_after->next();
 | 
|      }
 | 
|    } else {
 | 
| -    while (use_after != nullptr &&
 | 
| -           use_after->pos().Value() <= position.Value()) {
 | 
| +    while (use_after != nullptr && use_after->pos() <= position) {
 | 
|        use_before = use_after;
 | 
|        use_after = use_after->next();
 | 
|      }
 | 
| @@ -439,34 +426,33 @@ void LiveRange::SplitAt(LifetimePosition position, LiveRange* result,
 | 
|  bool LiveRange::ShouldBeAllocatedBefore(const LiveRange* other) const {
 | 
|    LifetimePosition start = Start();
 | 
|    LifetimePosition other_start = other->Start();
 | 
| -  if (start.Value() == other_start.Value()) {
 | 
| +  if (start == other_start) {
 | 
|      UsePosition* pos = first_pos();
 | 
|      if (pos == nullptr) return false;
 | 
|      UsePosition* other_pos = other->first_pos();
 | 
|      if (other_pos == nullptr) return true;
 | 
| -    return pos->pos().Value() < other_pos->pos().Value();
 | 
| +    return pos->pos() < other_pos->pos();
 | 
|    }
 | 
| -  return start.Value() < other_start.Value();
 | 
| +  return start < other_start;
 | 
|  }
 | 
|  
 | 
|  
 | 
|  void LiveRange::ShortenTo(LifetimePosition start) {
 | 
| -  TRACE("Shorten live range %d to [%d\n", id_, start.Value());
 | 
| +  TRACE("Shorten live range %d to [%d\n", id_, start.value());
 | 
|    DCHECK(first_interval_ != nullptr);
 | 
| -  DCHECK(first_interval_->start().Value() <= start.Value());
 | 
| -  DCHECK(start.Value() < first_interval_->end().Value());
 | 
| +  DCHECK(first_interval_->start() <= start);
 | 
| +  DCHECK(start < first_interval_->end());
 | 
|    first_interval_->set_start(start);
 | 
|  }
 | 
|  
 | 
|  
 | 
|  void LiveRange::EnsureInterval(LifetimePosition start, LifetimePosition end,
 | 
|                                 Zone* zone) {
 | 
| -  TRACE("Ensure live range %d in interval [%d %d[\n", id_, start.Value(),
 | 
| -        end.Value());
 | 
| +  TRACE("Ensure live range %d in interval [%d %d[\n", id_, start.value(),
 | 
| +        end.value());
 | 
|    auto new_end = end;
 | 
| -  while (first_interval_ != nullptr &&
 | 
| -         first_interval_->start().Value() <= end.Value()) {
 | 
| -    if (first_interval_->end().Value() > end.Value()) {
 | 
| +  while (first_interval_ != nullptr && first_interval_->start() <= end) {
 | 
| +    if (first_interval_->end() > end) {
 | 
|        new_end = first_interval_->end();
 | 
|      }
 | 
|      first_interval_ = first_interval_->next();
 | 
| @@ -483,16 +469,16 @@ void LiveRange::EnsureInterval(LifetimePosition start, LifetimePosition end,
 | 
|  
 | 
|  void LiveRange::AddUseInterval(LifetimePosition start, LifetimePosition end,
 | 
|                                 Zone* zone) {
 | 
| -  TRACE("Add to live range %d interval [%d %d[\n", id_, start.Value(),
 | 
| -        end.Value());
 | 
| +  TRACE("Add to live range %d interval [%d %d[\n", id_, start.value(),
 | 
| +        end.value());
 | 
|    if (first_interval_ == nullptr) {
 | 
|      auto interval = new (zone) UseInterval(start, end);
 | 
|      first_interval_ = interval;
 | 
|      last_interval_ = interval;
 | 
|    } else {
 | 
| -    if (end.Value() == first_interval_->start().Value()) {
 | 
| +    if (end == first_interval_->start()) {
 | 
|        first_interval_->set_start(start);
 | 
| -    } else if (end.Value() < first_interval_->start().Value()) {
 | 
| +    } else if (end < first_interval_->start()) {
 | 
|        auto interval = new (zone) UseInterval(start, end);
 | 
|        interval->set_next(first_interval_);
 | 
|        first_interval_ = interval;
 | 
| @@ -500,7 +486,7 @@ void LiveRange::AddUseInterval(LifetimePosition start, LifetimePosition end,
 | 
|        // Order of instruction's processing (see ProcessInstructions) guarantees
 | 
|        // that each new use interval either precedes or intersects with
 | 
|        // last added interval.
 | 
| -      DCHECK(start.Value() < first_interval_->end().Value());
 | 
| +      DCHECK(start < first_interval_->end());
 | 
|        first_interval_->set_start(Min(start, first_interval_->start()));
 | 
|        first_interval_->set_end(Max(end, first_interval_->end()));
 | 
|      }
 | 
| @@ -511,12 +497,12 @@ void LiveRange::AddUseInterval(LifetimePosition start, LifetimePosition end,
 | 
|  void LiveRange::AddUsePosition(LifetimePosition pos,
 | 
|                                 InstructionOperand* operand,
 | 
|                                 InstructionOperand* hint, Zone* zone) {
 | 
| -  TRACE("Add to live range %d use position %d\n", id_, pos.Value());
 | 
| +  TRACE("Add to live range %d use position %d\n", id_, pos.value());
 | 
|    auto use_pos = new (zone) UsePosition(pos, operand, hint);
 | 
|    UsePosition* prev_hint = nullptr;
 | 
|    UsePosition* prev = nullptr;
 | 
|    auto current = first_pos_;
 | 
| -  while (current != nullptr && current->pos().Value() < pos.Value()) {
 | 
| +  while (current != nullptr && current->pos() < pos) {
 | 
|      prev_hint = current->HasHint() ? current : prev_hint;
 | 
|      prev = current;
 | 
|      current = current->next();
 | 
| @@ -539,8 +525,7 @@ void LiveRange::AddUsePosition(LifetimePosition pos,
 | 
|  void LiveRange::ConvertUsesToOperand(const InstructionOperand& op,
 | 
|                                       InstructionOperand* spill_op) {
 | 
|    for (auto pos = first_pos(); pos != nullptr; pos = pos->next()) {
 | 
| -    DCHECK(Start().Value() <= pos->pos().Value() &&
 | 
| -           pos->pos().Value() <= End().Value());
 | 
| +    DCHECK(Start() <= pos->pos() && pos->pos() <= End());
 | 
|      if (!pos->HasOperand()) {
 | 
|        continue;
 | 
|      }
 | 
| @@ -563,8 +548,7 @@ void LiveRange::ConvertUsesToOperand(const InstructionOperand& op,
 | 
|  
 | 
|  bool LiveRange::CanCover(LifetimePosition position) const {
 | 
|    if (IsEmpty()) return false;
 | 
| -  return Start().Value() <= position.Value() &&
 | 
| -         position.Value() < End().Value();
 | 
| +  return Start() <= position && position < End();
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -574,10 +558,10 @@ bool LiveRange::Covers(LifetimePosition position) const {
 | 
|    for (auto interval = start_search; interval != nullptr;
 | 
|         interval = interval->next()) {
 | 
|      DCHECK(interval->next() == nullptr ||
 | 
| -           interval->next()->start().Value() >= interval->start().Value());
 | 
| +           interval->next()->start() >= interval->start());
 | 
|      AdvanceLastProcessedMarker(interval, position);
 | 
|      if (interval->Contains(position)) return true;
 | 
| -    if (interval->start().Value() > position.Value()) return false;
 | 
| +    if (interval->start() > position) return false;
 | 
|    }
 | 
|    return false;
 | 
|  }
 | 
| @@ -589,15 +573,15 @@ LifetimePosition LiveRange::FirstIntersection(LiveRange* other) const {
 | 
|    auto advance_last_processed_up_to = b->start();
 | 
|    auto a = FirstSearchIntervalForPosition(b->start());
 | 
|    while (a != nullptr && b != nullptr) {
 | 
| -    if (a->start().Value() > other->End().Value()) break;
 | 
| -    if (b->start().Value() > End().Value()) break;
 | 
| +    if (a->start() > other->End()) break;
 | 
| +    if (b->start() > End()) break;
 | 
|      auto cur_intersection = a->Intersect(b);
 | 
|      if (cur_intersection.IsValid()) {
 | 
|        return cur_intersection;
 | 
|      }
 | 
| -    if (a->start().Value() < b->start().Value()) {
 | 
| +    if (a->start() < b->start()) {
 | 
|        a = a->next();
 | 
| -      if (a == nullptr || a->start().Value() > other->End().Value()) break;
 | 
| +      if (a == nullptr || a->start() > other->End()) break;
 | 
|        AdvanceLastProcessedMarker(a, advance_last_processed_up_to);
 | 
|      } else {
 | 
|        b = b->next();
 | 
| @@ -610,13 +594,13 @@ LifetimePosition LiveRange::FirstIntersection(LiveRange* other) const {
 | 
|  static bool AreUseIntervalsIntersecting(UseInterval* interval1,
 | 
|                                          UseInterval* interval2) {
 | 
|    while (interval1 != nullptr && interval2 != nullptr) {
 | 
| -    if (interval1->start().Value() < interval2->start().Value()) {
 | 
| -      if (interval1->end().Value() > interval2->start().Value()) {
 | 
| +    if (interval1->start() < interval2->start()) {
 | 
| +      if (interval1->end() > interval2->start()) {
 | 
|          return true;
 | 
|        }
 | 
|        interval1 = interval1->next();
 | 
|      } else {
 | 
| -      if (interval2->end().Value() > interval1->start().Value()) {
 | 
| +      if (interval2->end() > interval1->start()) {
 | 
|          return true;
 | 
|        }
 | 
|        interval2 = interval2->next();
 | 
| @@ -654,8 +638,8 @@ SpillRange::SpillRange(LiveRange* parent, Zone* zone) : live_ranges_(zone) {
 | 
|  
 | 
|  bool SpillRange::IsIntersectingWith(SpillRange* other) const {
 | 
|    if (this->use_interval_ == nullptr || other->use_interval_ == nullptr ||
 | 
| -      this->End().Value() <= other->use_interval_->start().Value() ||
 | 
| -      other->End().Value() <= this->use_interval_->start().Value()) {
 | 
| +      this->End() <= other->use_interval_->start() ||
 | 
| +      other->End() <= this->use_interval_->start()) {
 | 
|      return false;
 | 
|    }
 | 
|    return AreUseIntervalsIntersecting(use_interval_, other->use_interval_);
 | 
| @@ -666,8 +650,7 @@ bool SpillRange::TryMerge(SpillRange* other) {
 | 
|    if (Kind() != other->Kind() || IsIntersectingWith(other)) return false;
 | 
|  
 | 
|    auto max = LifetimePosition::MaxPosition();
 | 
| -  if (End().Value() < other->End().Value() &&
 | 
| -      other->End().Value() != max.Value()) {
 | 
| +  if (End() < other->End() && other->End() != max) {
 | 
|      end_position_ = other->End();
 | 
|    }
 | 
|    other->end_position_ = max;
 | 
| @@ -701,13 +684,11 @@ void SpillRange::MergeDisjointIntervals(UseInterval* other) {
 | 
|    auto current = use_interval_;
 | 
|    while (other != nullptr) {
 | 
|      // Make sure the 'current' list starts first
 | 
| -    if (current == nullptr ||
 | 
| -        current->start().Value() > other->start().Value()) {
 | 
| +    if (current == nullptr || current->start() > other->start()) {
 | 
|        std::swap(current, other);
 | 
|      }
 | 
|      // Check disjointness
 | 
| -    DCHECK(other == nullptr ||
 | 
| -           current->end().Value() <= other->start().Value());
 | 
| +    DCHECK(other == nullptr || current->end() <= other->start());
 | 
|      // Append the 'current' node to the result accumulator and move forward
 | 
|      if (tail == nullptr) {
 | 
|        use_interval_ = current;
 | 
| @@ -801,7 +782,7 @@ bool RegisterAllocationData::ExistsUseWithoutDefinition() {
 | 
|      PrintF("Register allocator error: live v%d reached first block.\n",
 | 
|             operand_index);
 | 
|      LiveRange* range = LiveRangeFor(operand_index);
 | 
| -    PrintF("  (first use is at %d)\n", range->first_pos()->pos().Value());
 | 
| +    PrintF("  (first use is at %d)\n", range->first_pos()->pos().value());
 | 
|      if (debug_name() == nullptr) {
 | 
|        PrintF("\n");
 | 
|      } else {
 | 
| @@ -1171,7 +1152,7 @@ void LiveRangeBuilder::Define(LifetimePosition position,
 | 
|    auto range = LiveRangeFor(operand);
 | 
|    if (range == nullptr) return;
 | 
|  
 | 
| -  if (range->IsEmpty() || range->Start().Value() > position.Value()) {
 | 
| +  if (range->IsEmpty() || range->Start() > position) {
 | 
|      // Can happen if there is a definition without use.
 | 
|      range->AddUseInterval(position, position.NextStart(), allocation_zone());
 | 
|      range->AddUsePosition(position.NextStart(), nullptr, nullptr,
 | 
| @@ -1472,9 +1453,9 @@ RegisterAllocator::RegisterAllocator(RegisterAllocationData* data,
 | 
|  LiveRange* RegisterAllocator::SplitRangeAt(LiveRange* range,
 | 
|                                             LifetimePosition pos) {
 | 
|    DCHECK(!range->IsFixed());
 | 
| -  TRACE("Splitting live range %d at %d\n", range->id(), pos.Value());
 | 
| +  TRACE("Splitting live range %d at %d\n", range->id(), pos.value());
 | 
|  
 | 
| -  if (pos.Value() <= range->Start().Value()) return range;
 | 
| +  if (pos <= range->Start()) return range;
 | 
|  
 | 
|    // We can't properly connect liveranges if splitting occurred at the end
 | 
|    // a block.
 | 
| @@ -1494,10 +1475,10 @@ LiveRange* RegisterAllocator::SplitBetween(LiveRange* range,
 | 
|                                             LifetimePosition end) {
 | 
|    DCHECK(!range->IsFixed());
 | 
|    TRACE("Splitting live range %d in position between [%d, %d]\n", range->id(),
 | 
| -        start.Value(), end.Value());
 | 
| +        start.value(), end.value());
 | 
|  
 | 
|    auto split_pos = FindOptimalSplitPos(start, end);
 | 
| -  DCHECK(split_pos.Value() >= start.Value());
 | 
| +  DCHECK(split_pos >= start);
 | 
|    return SplitRangeAt(range, split_pos);
 | 
|  }
 | 
|  
 | 
| @@ -1556,7 +1537,7 @@ LifetimePosition RegisterAllocator::FindOptimalSpillingPos(
 | 
|          loop_header->first_instruction_index());
 | 
|  
 | 
|      if (range->Covers(loop_start)) {
 | 
| -      if (prev_use == nullptr || prev_use->pos().Value() < loop_start.Value()) {
 | 
| +      if (prev_use == nullptr || prev_use->pos() < loop_start) {
 | 
|          // No register beneficial use inside the loop before the pos.
 | 
|          pos = loop_start;
 | 
|        }
 | 
| @@ -1629,7 +1610,7 @@ void LinearScanAllocator::AllocateRegisters() {
 | 
|  #ifdef DEBUG
 | 
|      allocation_finger_ = position;
 | 
|  #endif
 | 
| -    TRACE("Processing interval %d start=%d\n", current->id(), position.Value());
 | 
| +    TRACE("Processing interval %d start=%d\n", current->id(), position.value());
 | 
|  
 | 
|      if (!current->HasNoSpillType()) {
 | 
|        TRACE("Live range %d already has a spill operand\n", current->id());
 | 
| @@ -1643,7 +1624,7 @@ void LinearScanAllocator::AllocateRegisters() {
 | 
|        if (pos == nullptr) {
 | 
|          Spill(current);
 | 
|          continue;
 | 
| -      } else if (pos->pos().Value() > current->Start().NextStart().Value()) {
 | 
| +      } else if (pos->pos() > current->Start().NextStart()) {
 | 
|          // Do not spill live range eagerly if use position that can benefit from
 | 
|          // the register is too close to the start of live range.
 | 
|          SpillBetween(current, current->Start(), pos->pos());
 | 
| @@ -1656,7 +1637,7 @@ void LinearScanAllocator::AllocateRegisters() {
 | 
|  
 | 
|      for (size_t i = 0; i < active_live_ranges().size(); ++i) {
 | 
|        auto cur_active = active_live_ranges()[i];
 | 
| -      if (cur_active->End().Value() <= position.Value()) {
 | 
| +      if (cur_active->End() <= position) {
 | 
|          ActiveToHandled(cur_active);
 | 
|          --i;  // The live range was removed from the list of active live ranges.
 | 
|        } else if (!cur_active->Covers(position)) {
 | 
| @@ -1667,7 +1648,7 @@ void LinearScanAllocator::AllocateRegisters() {
 | 
|  
 | 
|      for (size_t i = 0; i < inactive_live_ranges().size(); ++i) {
 | 
|        auto cur_inactive = inactive_live_ranges()[i];
 | 
| -      if (cur_inactive->End().Value() <= position.Value()) {
 | 
| +      if (cur_inactive->End() <= position) {
 | 
|          InactiveToHandled(cur_inactive);
 | 
|          --i;  // Live range was removed from the list of inactive live ranges.
 | 
|        } else if (cur_inactive->Covers(position)) {
 | 
| @@ -1711,7 +1692,7 @@ void LinearScanAllocator::AddToInactive(LiveRange* range) {
 | 
|  void LinearScanAllocator::AddToUnhandledSorted(LiveRange* range) {
 | 
|    if (range == nullptr || range->IsEmpty()) return;
 | 
|    DCHECK(!range->HasRegisterAssigned() && !range->IsSpilled());
 | 
| -  DCHECK(allocation_finger_.Value() <= range->Start().Value());
 | 
| +  DCHECK(allocation_finger_ <= range->Start());
 | 
|    for (int i = static_cast<int>(unhandled_live_ranges().size() - 1); i >= 0;
 | 
|         --i) {
 | 
|      auto cur_range = unhandled_live_ranges().at(i);
 | 
| @@ -1759,7 +1740,7 @@ bool LinearScanAllocator::UnhandledIsSorted() {
 | 
|    for (size_t i = 1; i < len; i++) {
 | 
|      auto a = unhandled_live_ranges().at(i - 1);
 | 
|      auto b = unhandled_live_ranges().at(i);
 | 
| -    if (a->Start().Value() < b->Start().Value()) return false;
 | 
| +    if (a->Start() < b->Start()) return false;
 | 
|    }
 | 
|    return true;
 | 
|  }
 | 
| @@ -1804,7 +1785,7 @@ bool LinearScanAllocator::TryAllocateFreeReg(LiveRange* current) {
 | 
|    }
 | 
|  
 | 
|    for (auto cur_inactive : inactive_live_ranges()) {
 | 
| -    DCHECK(cur_inactive->End().Value() > current->Start().Value());
 | 
| +    DCHECK(cur_inactive->End() > current->Start());
 | 
|      auto next_intersection = cur_inactive->FirstIntersection(current);
 | 
|      if (!next_intersection.IsValid()) continue;
 | 
|      int cur_reg = cur_inactive->assigned_register();
 | 
| @@ -1815,11 +1796,11 @@ bool LinearScanAllocator::TryAllocateFreeReg(LiveRange* current) {
 | 
|    if (hint != nullptr && (hint->IsRegister() || hint->IsDoubleRegister())) {
 | 
|      int register_index = AllocatedOperand::cast(hint)->index();
 | 
|      TRACE("Found reg hint %s (free until [%d) for live range %d (end %d[).\n",
 | 
| -          RegisterName(register_index), free_until_pos[register_index].Value(),
 | 
| -          current->id(), current->End().Value());
 | 
| +          RegisterName(register_index), free_until_pos[register_index].value(),
 | 
| +          current->id(), current->End().value());
 | 
|  
 | 
|      // The desired register is free until the end of the current live range.
 | 
| -    if (free_until_pos[register_index].Value() >= current->End().Value()) {
 | 
| +    if (free_until_pos[register_index] >= current->End()) {
 | 
|        TRACE("Assigning preferred reg %s to live range %d\n",
 | 
|              RegisterName(register_index), current->id());
 | 
|        data()->SetLiveRangeAssignedRegister(current, register_index);
 | 
| @@ -1830,19 +1811,19 @@ bool LinearScanAllocator::TryAllocateFreeReg(LiveRange* current) {
 | 
|    // Find the register which stays free for the longest time.
 | 
|    int reg = 0;
 | 
|    for (int i = 1; i < num_registers(); ++i) {
 | 
| -    if (free_until_pos[i].Value() > free_until_pos[reg].Value()) {
 | 
| +    if (free_until_pos[i] > free_until_pos[reg]) {
 | 
|        reg = i;
 | 
|      }
 | 
|    }
 | 
|  
 | 
|    auto pos = free_until_pos[reg];
 | 
|  
 | 
| -  if (pos.Value() <= current->Start().Value()) {
 | 
| +  if (pos <= current->Start()) {
 | 
|      // All registers are blocked.
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| -  if (pos.Value() < current->End().Value()) {
 | 
| +  if (pos < current->End()) {
 | 
|      // Register reg is available at the range start but becomes blocked before
 | 
|      // the range end. Split current at position where it becomes blocked.
 | 
|      auto tail = SplitRangeAt(current, pos);
 | 
| @@ -1851,7 +1832,7 @@ bool LinearScanAllocator::TryAllocateFreeReg(LiveRange* current) {
 | 
|  
 | 
|    // Register reg is available at the range start and is free until
 | 
|    // the range end.
 | 
| -  DCHECK(pos.Value() >= current->End().Value());
 | 
| +  DCHECK(pos >= current->End());
 | 
|    TRACE("Assigning free reg %s to live range %d\n", RegisterName(reg),
 | 
|          current->id());
 | 
|    data()->SetLiveRangeAssignedRegister(current, reg);
 | 
| @@ -1893,7 +1874,7 @@ void LinearScanAllocator::AllocateBlockedReg(LiveRange* current) {
 | 
|    }
 | 
|  
 | 
|    for (auto range : inactive_live_ranges()) {
 | 
| -    DCHECK(range->End().Value() > current->Start().Value());
 | 
| +    DCHECK(range->End() > current->Start());
 | 
|      auto next_intersection = range->FirstIntersection(current);
 | 
|      if (!next_intersection.IsValid()) continue;
 | 
|      int cur_reg = range->assigned_register();
 | 
| @@ -1907,21 +1888,21 @@ void LinearScanAllocator::AllocateBlockedReg(LiveRange* current) {
 | 
|  
 | 
|    int reg = 0;
 | 
|    for (int i = 1; i < num_registers(); ++i) {
 | 
| -    if (use_pos[i].Value() > use_pos[reg].Value()) {
 | 
| +    if (use_pos[i] > use_pos[reg]) {
 | 
|        reg = i;
 | 
|      }
 | 
|    }
 | 
|  
 | 
|    auto pos = use_pos[reg];
 | 
|  
 | 
| -  if (pos.Value() < register_use->pos().Value()) {
 | 
| +  if (pos < register_use->pos()) {
 | 
|      // All registers are blocked before the first use that requires a register.
 | 
|      // Spill starting part of live range up to that use.
 | 
|      SpillBetween(current, current->Start(), register_use->pos());
 | 
|      return;
 | 
|    }
 | 
|  
 | 
| -  if (block_pos[reg].Value() < current->End().Value()) {
 | 
| +  if (block_pos[reg] < current->End()) {
 | 
|      // Register becomes blocked before the current range end. Split before that
 | 
|      // position.
 | 
|      LiveRange* tail =
 | 
| @@ -1930,7 +1911,7 @@ void LinearScanAllocator::AllocateBlockedReg(LiveRange* current) {
 | 
|    }
 | 
|  
 | 
|    // Register reg is not blocked for the whole range.
 | 
| -  DCHECK(block_pos[reg].Value() >= current->End().Value());
 | 
| +  DCHECK(block_pos[reg] >= current->End());
 | 
|    TRACE("Assigning blocked reg %s to live range %d\n", RegisterName(reg),
 | 
|          current->id());
 | 
|    data()->SetLiveRangeAssignedRegister(current, reg);
 | 
| @@ -1971,7 +1952,7 @@ void LinearScanAllocator::SplitAndSpillIntersecting(LiveRange* current) {
 | 
|  
 | 
|    for (size_t i = 0; i < inactive_live_ranges().size(); ++i) {
 | 
|      auto range = inactive_live_ranges()[i];
 | 
| -    DCHECK(range->End().Value() > current->Start().Value());
 | 
| +    DCHECK(range->End() > current->Start());
 | 
|      if (range->assigned_register() == reg && !range->IsFixed()) {
 | 
|        LifetimePosition next_intersection = range->FirstIntersection(current);
 | 
|        if (next_intersection.IsValid()) {
 | 
| @@ -2061,7 +2042,7 @@ bool LinearScanAllocator::TryReuseSpillForPhi(LiveRange* range) {
 | 
|      CHECK(merged);
 | 
|      Spill(range);
 | 
|      return true;
 | 
| -  } else if (pos->pos().Value() > range->Start().NextStart().Value()) {
 | 
| +  } else if (pos->pos() > range->Start().NextStart()) {
 | 
|      auto spill_range =
 | 
|          range->TopLevel()->HasSpillRange()
 | 
|              ? range->TopLevel()->GetSpillRange()
 | 
| @@ -2092,10 +2073,10 @@ void LinearScanAllocator::SpillBetweenUntil(LiveRange* range,
 | 
|                                              LifetimePosition start,
 | 
|                                              LifetimePosition until,
 | 
|                                              LifetimePosition end) {
 | 
| -  CHECK(start.Value() < end.Value());
 | 
| +  CHECK(start < end);
 | 
|    auto second_part = SplitRangeAt(range, start);
 | 
|  
 | 
| -  if (second_part->Start().Value() < end.Value()) {
 | 
| +  if (second_part->Start() < end) {
 | 
|      // The split result intersects with [start, end[.
 | 
|      // Split it at position between ]start+1, end[, spill the middle part
 | 
|      // and put the rest to unhandled.
 | 
| @@ -2169,7 +2150,7 @@ class CoallescedLiveRanges : public ZoneObject {
 | 
|  
 | 
|    Config::Key GetKey(UseInterval* interval) {
 | 
|      if (interval == nullptr) return std::make_pair(0, 0);
 | 
| -    return std::make_pair(interval->start().Value(), interval->end().Value());
 | 
| +    return std::make_pair(interval->start().value(), interval->end().value());
 | 
|    }
 | 
|  
 | 
|    // TODO(mtrofin): Change to void returning if we do not care if the interval
 | 
| @@ -2203,7 +2184,7 @@ unsigned GreedyAllocator::GetLiveRangeSize(LiveRange* range) {
 | 
|  
 | 
|    unsigned size = 0;
 | 
|    while (interval != nullptr) {
 | 
| -    size += (interval->end().Value() - interval->start().Value());
 | 
| +    size += (interval->end().value() - interval->start().value());
 | 
|      interval = interval->next();
 | 
|    }
 | 
|  
 | 
| @@ -2307,10 +2288,10 @@ LiveRange* GreedyAllocator::SpillBetweenUntil(LiveRange* range,
 | 
|                                                LifetimePosition start,
 | 
|                                                LifetimePosition until,
 | 
|                                                LifetimePosition end) {
 | 
| -  CHECK(start.Value() < end.Value());
 | 
| +  CHECK(start < end);
 | 
|    auto second_part = SplitRangeAt(range, start);
 | 
|  
 | 
| -  if (second_part->Start().Value() < end.Value()) {
 | 
| +  if (second_part->Start() < end) {
 | 
|      // The split result intersects with [start, end[.
 | 
|      // Split it at position between ]start+1, end[, spill the middle part
 | 
|      // and put the rest to unhandled.
 | 
| @@ -2344,7 +2325,7 @@ void GreedyAllocator::Enqueue(LiveRange* range) {
 | 
|  // LinearScanAllocator::AllocateRegisters
 | 
|  bool GreedyAllocator::HandleSpillOperands(LiveRange* range) {
 | 
|    auto position = range->Start();
 | 
| -  TRACE("Processing interval %d start=%d\n", range->id(), position.Value());
 | 
| +  TRACE("Processing interval %d start=%d\n", range->id(), position.value());
 | 
|  
 | 
|    if (!range->HasNoSpillType()) {
 | 
|      TRACE("Live range %d already has a spill operand\n", range->id());
 | 
| @@ -2358,7 +2339,7 @@ bool GreedyAllocator::HandleSpillOperands(LiveRange* range) {
 | 
|      if (pos == nullptr) {
 | 
|        Spill(range);
 | 
|        return true;
 | 
| -    } else if (pos->pos().Value() > range->Start().NextStart().Value()) {
 | 
| +    } else if (pos->pos() > range->Start().NextStart()) {
 | 
|        // Do not spill live range eagerly if use position that can benefit from
 | 
|        // the register is too close to the start of live range.
 | 
|        auto* reminder = SpillBetweenUntil(range, position, position, pos->pos());
 | 
| @@ -2585,7 +2566,7 @@ void ReferenceMapPopulator::PopulateReferenceMaps() {
 | 
|          TRACE(
 | 
|              "Pointer in register for range %d (start at %d) "
 | 
|              "at safe point %d\n",
 | 
| -            cur->id(), cur->Start().Value(), safe_point);
 | 
| +            cur->id(), cur->Start().value(), safe_point);
 | 
|          auto operand = cur->GetAssignedOperand();
 | 
|          DCHECK(!operand.IsStackSlot());
 | 
|          map->RecordReference(operand);
 | 
| @@ -2605,8 +2586,7 @@ class LiveRangeBound {
 | 
|    }
 | 
|  
 | 
|    bool CanCover(LifetimePosition position) {
 | 
| -    return start_.Value() <= position.Value() &&
 | 
| -           position.Value() < end_.Value();
 | 
| +    return start_ <= position && position < end_;
 | 
|    }
 | 
|  
 | 
|    const LiveRange* const range_;
 | 
| @@ -2648,8 +2628,8 @@ class LiveRangeBoundArray {
 | 
|        size_t current_index = left_index + (right_index - left_index) / 2;
 | 
|        DCHECK(right_index > current_index);
 | 
|        auto bound = &start_[current_index];
 | 
| -      if (bound->start_.Value() <= position.Value()) {
 | 
| -        if (position.Value() < bound->end_.Value()) return bound;
 | 
| +      if (bound->start_ <= position) {
 | 
| +        if (position < bound->end_) return bound;
 | 
|          DCHECK(left_index < current_index);
 | 
|          left_index = current_index;
 | 
|        } else {
 | 
| @@ -2802,7 +2782,7 @@ void LiveRangeConnector::ConnectRanges(Zone* local_zone) {
 | 
|        // Add gap move if the two live ranges touch and there is no block
 | 
|        // boundary.
 | 
|        if (second_range->IsSpilled()) continue;
 | 
| -      if (first_range->End().Value() != pos.Value()) continue;
 | 
| +      if (first_range->End() != pos) continue;
 | 
|        if (IsBlockBoundary(code(), pos) &&
 | 
|            !CanEagerlyResolveControlFlow(GetInstructionBlock(code(), pos))) {
 | 
|          continue;
 | 
| 
 |