blob: 57bc98235dda6ac082aa940be0921659ef94d445 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// 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_