494 bool eligible = data->unscheduled_count_ == 0;
495 Trace(
"Testing for schedule eligibility for #%d:%s = %s\n", node->id(),
496 node->op()->mnemonic(), eligible ?
"true" :
"false");
501 BasicBlock* block =
NULL;
502 for (Node::Uses::iterator
i = node->uses().begin();
i != node->uses().end();
505 block = block ==
NULL ? use_block : use_block ==
NULL
512 int min_rpo = data->minimum_rpo_;
514 "Schedule late conservative for #%d:%s is B%d at loop depth %d, "
515 "minimum_rpo = %d\n",
516 node->id(), node->op()->mnemonic(), block->id(), block->loop_depth_,
521 BasicBlock* hoist_block = block;
522 while (hoist_block !=
NULL && hoist_block->rpo_number_ >= min_rpo) {
523 if (hoist_block->loop_depth_ < block->loop_depth_) {
525 Trace(
" hoisting #%d:%s to block %d\n", node->id(),
526 node->op()->mnemonic(), block->id());
529 hoist_block = hoist_block->loop_header();
530 if (hoist_block !=
NULL) {
531 BasicBlock* pre_header = hoist_block->dominator_;
533 *hoist_block->predecessors().begin() == pre_header);
535 " hoist to pre-header B%d of loop header B%d, depth would be %d\n",
536 pre_header->id(), hoist_block->id(), pre_header->loop_depth_);
537 hoist_block = pre_header;
BasicBlock * GetBlockForUse(Node::Edge edge)
void ScheduleNode(BasicBlock *block, Node *node)
bool IsScheduled(Node *node)
SchedulerData * GetData(Node *node)
BasicBlock * GetCommonDominator(BasicBlock *b1, BasicBlock *b2)
#define DCHECK_EQ(v1, v2)