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 #include "src/compiler/node.h" | 5 #include "src/compiler/node.h" |
6 #include "src/compiler/node-properties.h" | 6 #include "src/compiler/node-properties.h" |
7 #include "src/compiler/node-properties-inl.h" | 7 #include "src/compiler/node-properties-inl.h" |
8 #include "src/compiler/schedule.h" | 8 #include "src/compiler/schedule.h" |
9 #include "src/ostreams.h" | 9 #include "src/ostreams.h" |
10 | 10 |
11 namespace v8 { | 11 namespace v8 { |
12 namespace internal { | 12 namespace internal { |
13 namespace compiler { | 13 namespace compiler { |
14 | 14 |
15 | |
16 BasicBlock::BasicBlock(Zone* zone, Id id) | 15 BasicBlock::BasicBlock(Zone* zone, Id id) |
17 : rpo_number_(-1), | 16 : rpo_number_(-1), |
18 dominator_(NULL), | 17 dominator_(NULL), |
19 loop_header_(NULL), | 18 loop_header_(NULL), |
20 loop_depth_(0), | 19 loop_depth_(0), |
21 loop_end_(-1), | 20 loop_end_(-1), |
22 code_start_(-1), | 21 code_start_(-1), |
23 code_end_(-1), | 22 code_end_(-1), |
24 deferred_(false), | 23 deferred_(false), |
25 control_(kNone), | 24 control_(kNone), |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 size_t BasicBlock::PredecessorIndexOf(BasicBlock* predecessor) { | 102 size_t BasicBlock::PredecessorIndexOf(BasicBlock* predecessor) { |
104 size_t j = 0; | 103 size_t j = 0; |
105 for (BasicBlock::Predecessors::iterator i = predecessors_.begin(); | 104 for (BasicBlock::Predecessors::iterator i = predecessors_.begin(); |
106 i != predecessors_.end(); ++i, ++j) { | 105 i != predecessors_.end(); ++i, ++j) { |
107 if (*i == predecessor) break; | 106 if (*i == predecessor) break; |
108 } | 107 } |
109 return j; | 108 return j; |
110 } | 109 } |
111 | 110 |
112 | 111 |
113 OStream& operator<<(OStream& os, const BasicBlock::Control& c) { | 112 std::ostream& operator<<(std::ostream& os, const BasicBlock::Control& c) { |
114 switch (c) { | 113 switch (c) { |
115 case BasicBlock::kNone: | 114 case BasicBlock::kNone: |
116 return os << "none"; | 115 return os << "none"; |
117 case BasicBlock::kGoto: | 116 case BasicBlock::kGoto: |
118 return os << "goto"; | 117 return os << "goto"; |
119 case BasicBlock::kBranch: | 118 case BasicBlock::kBranch: |
120 return os << "branch"; | 119 return os << "branch"; |
121 case BasicBlock::kReturn: | 120 case BasicBlock::kReturn: |
122 return os << "return"; | 121 return os << "return"; |
123 case BasicBlock::kThrow: | 122 case BasicBlock::kThrow: |
124 return os << "throw"; | 123 return os << "throw"; |
125 } | 124 } |
126 UNREACHABLE(); | 125 UNREACHABLE(); |
127 return os; | 126 return os; |
128 } | 127 } |
129 | 128 |
130 | 129 |
131 OStream& operator<<(OStream& os, const BasicBlock::Id& id) { | 130 std::ostream& operator<<(std::ostream& os, const BasicBlock::Id& id) { |
132 return os << id.ToSize(); | 131 return os << id.ToSize(); |
133 } | 132 } |
134 | 133 |
135 | 134 |
136 Schedule::Schedule(Zone* zone, size_t node_count_hint) | 135 Schedule::Schedule(Zone* zone, size_t node_count_hint) |
137 : zone_(zone), | 136 : zone_(zone), |
138 all_blocks_(zone), | 137 all_blocks_(zone), |
139 nodeid_to_block_(zone), | 138 nodeid_to_block_(zone), |
140 rpo_order_(zone), | 139 rpo_order_(zone), |
141 start_(NewBasicBlock()), | 140 start_(NewBasicBlock()), |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 | 259 |
261 void Schedule::SetBlockForNode(BasicBlock* block, Node* node) { | 260 void Schedule::SetBlockForNode(BasicBlock* block, Node* node) { |
262 int length = static_cast<int>(nodeid_to_block_.size()); | 261 int length = static_cast<int>(nodeid_to_block_.size()); |
263 if (node->id() >= length) { | 262 if (node->id() >= length) { |
264 nodeid_to_block_.resize(node->id() + 1); | 263 nodeid_to_block_.resize(node->id() + 1); |
265 } | 264 } |
266 nodeid_to_block_[node->id()] = block; | 265 nodeid_to_block_[node->id()] = block; |
267 } | 266 } |
268 | 267 |
269 | 268 |
270 OStream& operator<<(OStream& os, const Schedule& s) { | 269 std::ostream& operator<<(std::ostream& os, const Schedule& s) { |
271 // TODO(svenpanne) Const-correct the RPO stuff/iterators. | 270 // TODO(svenpanne) Const-correct the RPO stuff/iterators. |
272 BasicBlockVector* rpo = const_cast<Schedule*>(&s)->rpo_order(); | 271 BasicBlockVector* rpo = const_cast<Schedule*>(&s)->rpo_order(); |
273 for (BasicBlockVectorIter i = rpo->begin(); i != rpo->end(); ++i) { | 272 for (BasicBlockVectorIter i = rpo->begin(); i != rpo->end(); ++i) { |
274 BasicBlock* block = *i; | 273 BasicBlock* block = *i; |
275 os << "--- BLOCK B" << block->id(); | 274 os << "--- BLOCK B" << block->id(); |
276 if (block->PredecessorCount() != 0) os << " <- "; | 275 if (block->PredecessorCount() != 0) os << " <- "; |
277 bool comma = false; | 276 bool comma = false; |
278 for (BasicBlock::Predecessors::iterator j = block->predecessors_begin(); | 277 for (BasicBlock::Predecessors::iterator j = block->predecessors_begin(); |
279 j != block->predecessors_end(); ++j) { | 278 j != block->predecessors_end(); ++j) { |
280 if (comma) os << ", "; | 279 if (comma) os << ", "; |
(...skipping 30 matching lines...) Expand all Loading... |
311 j != block->successors_end(); ++j) { | 310 j != block->successors_end(); ++j) { |
312 if (comma) os << ", "; | 311 if (comma) os << ", "; |
313 comma = true; | 312 comma = true; |
314 os << "B" << (*j)->id(); | 313 os << "B" << (*j)->id(); |
315 } | 314 } |
316 os << "\n"; | 315 os << "\n"; |
317 } | 316 } |
318 } | 317 } |
319 return os; | 318 return os; |
320 } | 319 } |
| 320 |
321 } // namespace compiler | 321 } // namespace compiler |
322 } // namespace internal | 322 } // namespace internal |
323 } // namespace v8 | 323 } // namespace v8 |
OLD | NEW |