V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
bytecode-liveness-map.h
1 // Copyright 2016 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_BYTECODE_LIVENESS_MAP_H_
6 #define V8_COMPILER_BYTECODE_LIVENESS_MAP_H_
7 
8 #include "src/base/hashmap.h"
9 #include "src/bit-vector.h"
10 #include "src/zone/zone.h"
11 
12 namespace v8 {
13 namespace internal {
14 
15 class Zone;
16 
17 namespace compiler {
18 
20  public:
21  BytecodeLivenessState(int register_count, Zone* zone)
22  : bit_vector_(register_count + 1, zone) {}
23 
24  const BitVector& bit_vector() const { return bit_vector_; }
25 
26  BitVector& bit_vector() { return bit_vector_; }
27 
28  bool RegisterIsLive(int index) const {
29  DCHECK_GE(index, 0);
30  DCHECK_LT(index, bit_vector_.length() - 1);
31  return bit_vector_.Contains(index);
32  }
33 
34  bool AccumulatorIsLive() const {
35  return bit_vector_.Contains(bit_vector_.length() - 1);
36  }
37 
38  bool Equals(const BytecodeLivenessState& other) const {
39  return bit_vector_.Equals(other.bit_vector_);
40  }
41 
42  void MarkRegisterLive(int index) {
43  DCHECK_GE(index, 0);
44  DCHECK_LT(index, bit_vector_.length() - 1);
45  bit_vector_.Add(index);
46  }
47 
48  void MarkRegisterDead(int index) {
49  DCHECK_GE(index, 0);
50  DCHECK_LT(index, bit_vector_.length() - 1);
51  bit_vector_.Remove(index);
52  }
53 
54  void MarkAccumulatorLive() { bit_vector_.Add(bit_vector_.length() - 1); }
55 
56  void MarkAccumulatorDead() { bit_vector_.Remove(bit_vector_.length() - 1); }
57 
58  void MarkAllLive() { bit_vector_.AddAll(); }
59 
60  void Union(const BytecodeLivenessState& other) {
61  bit_vector_.Union(other.bit_vector_);
62  }
63 
64  bool UnionIsChanged(const BytecodeLivenessState& other) {
65  return bit_vector_.UnionIsChanged(other.bit_vector_);
66  }
67 
68  void CopyFrom(const BytecodeLivenessState& other) {
69  bit_vector_.CopyFrom(other.bit_vector_);
70  }
71 
72  private:
73  BitVector bit_vector_;
74 
75  DISALLOW_COPY_AND_ASSIGN(BytecodeLivenessState);
76 };
77 
81 
82  BytecodeLiveness(int register_count, Zone* zone);
83 };
84 
85 class V8_EXPORT_PRIVATE BytecodeLivenessMap {
86  public:
87  BytecodeLivenessMap(int size, Zone* zone);
88 
89  BytecodeLiveness& InitializeLiveness(int offset, int register_count,
90  Zone* zone);
91 
92  BytecodeLiveness& GetLiveness(int offset);
93  const BytecodeLiveness& GetLiveness(int offset) const;
94 
95  BytecodeLivenessState* GetInLiveness(int offset) {
96  return GetLiveness(offset).in;
97  }
98  const BytecodeLivenessState* GetInLiveness(int offset) const {
99  return GetLiveness(offset).in;
100  }
101 
102  BytecodeLivenessState* GetOutLiveness(int offset) {
103  return GetLiveness(offset).out;
104  }
105  const BytecodeLivenessState* GetOutLiveness(int offset) const {
106  return GetLiveness(offset).out;
107  }
108 
109  private:
112  liveness_map_;
113 };
114 
115 } // namespace compiler
116 } // namespace internal
117 } // namespace v8
118 
119 #endif // V8_COMPILER_BYTECODE_LIVENESS_MAP_H_
Definition: libplatform.h:13