OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_COMPILER_SCHEDULE_H_ | 5 #ifndef V8_COMPILER_SCHEDULE_H_ |
6 #define V8_COMPILER_SCHEDULE_H_ | 6 #define V8_COMPILER_SCHEDULE_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 | 9 |
10 #include "src/zone-containers.h" | 10 #include "src/zone-containers.h" |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 void set_loop_number(int32_t loop_number) { loop_number_ = loop_number; } | 158 void set_loop_number(int32_t loop_number) { loop_number_ = loop_number; } |
159 | 159 |
160 RpoNumber GetRpoNumber() const { return RpoNumber::FromInt(rpo_number_); } | 160 RpoNumber GetRpoNumber() const { return RpoNumber::FromInt(rpo_number_); } |
161 int32_t rpo_number() const { return rpo_number_; } | 161 int32_t rpo_number() const { return rpo_number_; } |
162 void set_rpo_number(int32_t rpo_number); | 162 void set_rpo_number(int32_t rpo_number); |
163 | 163 |
164 // Loop membership helpers. | 164 // Loop membership helpers. |
165 inline bool IsLoopHeader() const { return loop_end_ != NULL; } | 165 inline bool IsLoopHeader() const { return loop_end_ != NULL; } |
166 bool LoopContains(BasicBlock* block) const; | 166 bool LoopContains(BasicBlock* block) const; |
167 | 167 |
| 168 // Computes the immediate common dominator of {b1} and {b2}. The worst time |
| 169 // complexity is O(N) where N is the height of the dominator tree. |
| 170 static BasicBlock* GetCommonDominator(BasicBlock* b1, BasicBlock* b2); |
| 171 |
168 private: | 172 private: |
169 int32_t loop_number_; // loop number of the block. | 173 int32_t loop_number_; // loop number of the block. |
170 int32_t rpo_number_; // special RPO number of the block. | 174 int32_t rpo_number_; // special RPO number of the block. |
171 bool deferred_; // true if the block contains deferred code. | 175 bool deferred_; // true if the block contains deferred code. |
172 int32_t dominator_depth_; // Depth within the dominator tree. | 176 int32_t dominator_depth_; // Depth within the dominator tree. |
173 BasicBlock* dominator_; // Immediate dominator of the block. | 177 BasicBlock* dominator_; // Immediate dominator of the block. |
174 BasicBlock* rpo_next_; // Link to next block in special RPO order. | 178 BasicBlock* rpo_next_; // Link to next block in special RPO order. |
175 BasicBlock* loop_header_; // Pointer to dominating loop header basic block, | 179 BasicBlock* loop_header_; // Pointer to dominating loop header basic block, |
176 // NULL if none. For loop headers, this points to | 180 // NULL if none. For loop headers, this points to |
177 // enclosing loop header. | 181 // enclosing loop header. |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 DISALLOW_COPY_AND_ASSIGN(Schedule); | 278 DISALLOW_COPY_AND_ASSIGN(Schedule); |
275 }; | 279 }; |
276 | 280 |
277 std::ostream& operator<<(std::ostream&, const Schedule&); | 281 std::ostream& operator<<(std::ostream&, const Schedule&); |
278 | 282 |
279 } // namespace compiler | 283 } // namespace compiler |
280 } // namespace internal | 284 } // namespace internal |
281 } // namespace v8 | 285 } // namespace v8 |
282 | 286 |
283 #endif // V8_COMPILER_SCHEDULE_H_ | 287 #endif // V8_COMPILER_SCHEDULE_H_ |
OLD | NEW |