1// Copyright 2015 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef V8_LIVE_RANGE_SEPARATOR_H_ 6#define V8_LIVE_RANGE_SEPARATOR_H_ 7 8 9#include <src/zone.h> 10namespace v8 { 11namespace internal { 12 13class Zone; 14 15namespace compiler { 16 17class RegisterAllocationData; 18 19 20// A register allocation pair of transformations: splinter and merge live ranges 21class LiveRangeSeparator final : public ZoneObject { 22 public: 23 LiveRangeSeparator(RegisterAllocationData* data, Zone* zone) 24 : data_(data), zone_(zone) {} 25 26 void Splinter(); 27 28 private: 29 RegisterAllocationData* data() const { return data_; } 30 Zone* zone() const { return zone_; } 31 32 RegisterAllocationData* const data_; 33 Zone* const zone_; 34 35 DISALLOW_COPY_AND_ASSIGN(LiveRangeSeparator); 36}; 37 38 39class LiveRangeMerger final : public ZoneObject { 40 public: 41 LiveRangeMerger(RegisterAllocationData* data, Zone* zone) 42 : data_(data), zone_(zone) {} 43 44 void Merge(); 45 46 private: 47 RegisterAllocationData* data() const { return data_; } 48 Zone* zone() const { return zone_; } 49 50 // Mark ranges spilled in deferred blocks, that also cover non-deferred code. 51 // We do nothing special for ranges fully contained in deferred blocks, 52 // because they would "spill in deferred blocks" anyway. 53 void MarkRangesSpilledInDeferredBlocks(); 54 55 RegisterAllocationData* const data_; 56 Zone* const zone_; 57 58 DISALLOW_COPY_AND_ASSIGN(LiveRangeMerger); 59}; 60 61 62} // namespace compiler 63} // namespace internal 64} // namespace v8 65#endif // V8_LIVE_RANGE_SEPARATOR_H_ 66