V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
live-range-separator.h
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_COMPILER_BACKEND_LIVE_RANGE_SEPARATOR_H_
6 #define V8_COMPILER_BACKEND_LIVE_RANGE_SEPARATOR_H_
7 
8 #include "src/zone/zone.h"
9 namespace v8 {
10 namespace internal {
11 
12 class Zone;
13 
14 namespace compiler {
15 
16 class RegisterAllocationData;
17 
18 // A register allocation pair of transformations: splinter and merge live ranges
19 class LiveRangeSeparator final : public ZoneObject {
20  public:
22  : data_(data), zone_(zone) {}
23 
24  void Splinter();
25 
26  private:
27  RegisterAllocationData* data() const { return data_; }
28  Zone* zone() const { return zone_; }
29 
30  RegisterAllocationData* const data_;
31  Zone* const zone_;
32 
33  DISALLOW_COPY_AND_ASSIGN(LiveRangeSeparator);
34 };
35 
36 class LiveRangeMerger final : public ZoneObject {
37  public:
39  : data_(data), zone_(zone) {}
40 
41  void Merge();
42 
43  private:
44  RegisterAllocationData* data() const { return data_; }
45  Zone* zone() const { return zone_; }
46 
47  // Mark ranges spilled in deferred blocks, that also cover non-deferred code.
48  // We do nothing special for ranges fully contained in deferred blocks,
49  // because they would "spill in deferred blocks" anyway.
50  void MarkRangesSpilledInDeferredBlocks();
51 
52  RegisterAllocationData* const data_;
53  Zone* const zone_;
54 
55  DISALLOW_COPY_AND_ASSIGN(LiveRangeMerger);
56 };
57 
58 } // namespace compiler
59 } // namespace internal
60 } // namespace v8
61 #endif // V8_COMPILER_BACKEND_LIVE_RANGE_SEPARATOR_H_
Definition: libplatform.h:13