Lines Matching refs:block
36 bool BasicBlock::LoopContains(BasicBlock* block) const {
39 DCHECK_LE(0, block->rpo_number_);
41 return block->rpo_number_ >= rpo_number_ &&
42 block->rpo_number_ < loop_end_->rpo_number_;
109 std::ostream& operator<<(std::ostream& os, const BasicBlock& block) {
110 os << "id:" << block.id();
112 AssemblerDebugInfo info = block.debug_info();
117 const BasicBlock* current_block = █
166 BasicBlock* Schedule::block(Node* node) const {
189 BasicBlock* block = this->block(a);
190 return block != nullptr && block == this->block(b);
194 BasicBlock* block = zone_->New<BasicBlock>(
196 all_blocks_.push_back(block);
197 return block;
200 void Schedule::PlanNode(BasicBlock* block, Node* node) {
204 << " for future add to id:" << block->id() << "\n";
206 DCHECK_NULL(this->block(node));
207 SetBlockForNode(block, node);
210 void Schedule::AddNode(BasicBlock* block, Node* node) {
213 << " to id:" << block->id() << "\n";
215 DCHECK(this->block(node) == nullptr || this->block(node) == block);
216 block->AddNode(node);
217 SetBlockForNode(block, node);
220 void Schedule::AddGoto(BasicBlock* block, BasicBlock* succ) {
221 CHECK_EQ(BasicBlock::kNone, block->control());
222 block->set_control(BasicBlock::kGoto);
223 AddSuccessor(block, succ);
244 void Schedule::AddCall(BasicBlock* block, Node* call, BasicBlock* success_block,
246 CHECK_EQ(BasicBlock::kNone, block->control());
248 block->set_control(BasicBlock::kCall);
249 AddSuccessor(block, success_block);
250 AddSuccessor(block, exception_block);
251 SetControlInput(block, call);
254 void Schedule::AddBranch(BasicBlock* block, Node* branch, BasicBlock* tblock,
256 CHECK_EQ(BasicBlock::kNone, block->control());
258 block->set_control(BasicBlock::kBranch);
259 AddSuccessor(block, tblock);
260 AddSuccessor(block, fblock);
261 SetControlInput(block, branch);
264 void Schedule::AddSwitch(BasicBlock* block, Node* sw, BasicBlock** succ_blocks,
266 CHECK_EQ(BasicBlock::kNone, block->control());
268 block->set_control(BasicBlock::kSwitch);
270 AddSuccessor(block, succ_blocks[index]);
272 SetControlInput(block, sw);
275 void Schedule::AddTailCall(BasicBlock* block, Node* input) {
276 CHECK_EQ(BasicBlock::kNone, block->control());
277 block->set_control(BasicBlock::kTailCall);
278 SetControlInput(block, input);
279 if (block != end()) AddSuccessor(block, end());
282 void Schedule::AddReturn(BasicBlock* block, Node* input) {
283 CHECK_EQ(BasicBlock::kNone, block->control());
284 block->set_control(BasicBlock::kReturn);
285 SetControlInput(block, input);
286 if (block != end()) AddSuccessor(block, end());
289 void Schedule::AddDeoptimize(BasicBlock* block, Node* input) {
290 CHECK_EQ(BasicBlock::kNone, block->control());
291 block->set_control(BasicBlock::kDeoptimize);
292 SetControlInput(block, input);
293 if (block != end()) AddSuccessor(block, end());
296 void Schedule::AddThrow(BasicBlock* block, Node* input) {
297 CHECK_EQ(BasicBlock::kNone, block->control());
298 block->set_control(BasicBlock::kThrow);
299 SetControlInput(block, input);
300 if (block != end()) AddSuccessor(block, end());
303 void Schedule::InsertBranch(BasicBlock* block, BasicBlock* end, Node* branch,
305 CHECK_NE(BasicBlock::kNone, block->control());
307 end->set_control(block->control());
308 block->set_control(BasicBlock::kBranch);
309 MoveSuccessors(block, end);
310 AddSuccessor(block, tblock);
311 AddSuccessor(block, fblock);
312 if (block->control_input() != nullptr) {
313 SetControlInput(end, block->control_input());
315 SetControlInput(block, branch);
318 void Schedule::InsertSwitch(BasicBlock* block, BasicBlock* end, Node* sw,
320 CHECK_NE(BasicBlock::kNone, block->control());
322 end->set_control(block->control());
323 block->set_control(BasicBlock::kSwitch);
324 MoveSuccessors(block, end);
326 AddSuccessor(block, succ_blocks[index]);
328 if (block->control_input() != nullptr) {
329 SetControlInput(end, block->control_input());
331 SetControlInput(block, sw);
340 for (BasicBlock* block : all_blocks_copy) {
341 if (block->PredecessorCount() > 1) {
342 if (block != end_) {
343 EnsureSplitEdgeForm(block);
361 for (BasicBlock* block : all_blocks_) {
362 int predecessor_count = static_cast<int>(block->PredecessorCount());
363 for (size_t node_pos = 0; node_pos < block->NodeCount(); ++node_pos) {
364 Node* node = block->NodeAt(node_pos);
378 block->RemoveNode(block->begin() + node_pos);
387 void Schedule::EnsureSplitEdgeForm(BasicBlock* block) {
389 DCHECK(block->PredecessorCount() > 1 && block != end_);
390 for (auto current_pred = block->predecessors().begin();
391 current_pred != block->predecessors().end(); ++current_pred) {
413 // Push forward the deferred block marks through newly inserted blocks and
419 for (auto block : all_blocks_) {
420 if (!block->deferred()) {
421 bool deferred = block->PredecessorCount() > 0;
422 for (auto pred : block->predecessors()) {
423 if (!pred->deferred() && (pred->rpo_number() < block->rpo_number())) {
428 block->set_deferred(true);
436 void Schedule::AddSuccessor(BasicBlock* block, BasicBlock* succ) {
437 block->AddSuccessor(succ);
438 succ->AddPredecessor(block);
451 void Schedule::SetControlInput(BasicBlock* block, Node* node) {
452 block->set_control_input(node);
453 SetBlockForNode(block, node);
456 void Schedule::SetBlockForNode(BasicBlock* block, Node* node) {
460 nodeid_to_block_[node->id()] = block;
464 for (BasicBlock* block :
466 if (block == nullptr) continue;
467 if (block->rpo_number() == -1) {
468 os << "--- BLOCK id:" << block->id();
470 os << "--- BLOCK B" << block->rpo_number();
472 if (block->deferred()) os << " (deferred)";
473 if (block->PredecessorCount() != 0) os << " <- ";
475 for (BasicBlock const* predecessor : block->predecessors()) {
485 for (Node* node : *block) {
492 BasicBlock::Control control = block->control();
495 if (block->control_input() != nullptr) {
496 os << *block->control_input();
502 for (BasicBlock const* successor : block->successors()) {