// 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. #ifndef V8_COMPILER_LIVE_RANGE_SEPARATOR_H_ #define V8_COMPILER_LIVE_RANGE_SEPARATOR_H_ #include "src/zone/zone.h" namespace v8 { namespace internal { class Zone; namespace compiler { class RegisterAllocationData; // A register allocation pair of transformations: splinter and merge live ranges class LiveRangeSeparator final : public ZoneObject { public: LiveRangeSeparator(RegisterAllocationData* data, Zone* zone) : data_(data), zone_(zone) {} void Splinter(); private: RegisterAllocationData* data() const { return data_; } Zone* zone() const { return zone_; } RegisterAllocationData* const data_; Zone* const zone_; DISALLOW_COPY_AND_ASSIGN(LiveRangeSeparator); }; class LiveRangeMerger final : public ZoneObject { public: LiveRangeMerger(RegisterAllocationData* data, Zone* zone) : data_(data), zone_(zone) {} void Merge(); private: RegisterAllocationData* data() const { return data_; } Zone* zone() const { return zone_; } // Mark ranges spilled in deferred blocks, that also cover non-deferred code. // We do nothing special for ranges fully contained in deferred blocks, // because they would "spill in deferred blocks" anyway. void MarkRangesSpilledInDeferredBlocks(); RegisterAllocationData* const data_; Zone* const zone_; DISALLOW_COPY_AND_ASSIGN(LiveRangeMerger); }; } // namespace compiler } // namespace internal } // namespace v8 #endif // V8_COMPILER_LIVE_RANGE_SEPARATOR_H_