Lines Matching refs:block
43 bblock_t *block = link->block;
46 return block;
50 link(void *mem_ctx, bblock_t *block, enum bblock_link_kind kind)
52 bblock_link *l = new(mem_ctx) bblock_link(block, kind);
57 push_stack(exec_list *list, void *mem_ctx, bblock_t *block)
62 list->push_tail(link(mem_ctx, block, bblock_link_logical));
82 bblock_t::is_predecessor_of(const bblock_t *block,
85 foreach_list_typed_safe (bblock_link, parent, link, &block->parents) {
86 if (parent->block == this && parent->kind <= kind) {
95 bblock_t::is_successor_of(const bblock_t *block,
98 foreach_list_typed_safe (bblock_link, child, link, &block->children) {
99 if (child->block == this && child->kind <= kind) {
147 assert(link->block == this);
211 /* Set up our immediately following block, full of "then"
235 /* New block was just created; use it. */
269 /* Set up the block just after the while. Don't know when exactly
275 /* New block was just created; use it. */
417 cfg_t::remove_block(bblock_t *block)
419 foreach_list_typed_safe (bblock_link, predecessor, link, &block->parents) {
420 /* Remove block from all of its predecessors' successor lists. */
422 &predecessor->block->children) {
423 if (block == successor->block) {
429 /* Add removed-block's successors to its predecessors' successor lists. */
430 foreach_list_typed (bblock_link, successor, link, &block->children) {
431 if (!successor->block->is_successor_of(predecessor->block,
433 predecessor->block->children.push_tail(link(mem_ctx,
434 successor->block,
440 foreach_list_typed_safe (bblock_link, successor, link, &block->children) {
441 /* Remove block from all of its childrens' parents lists. */
443 &successor->block->parents) {
444 if (block == predecessor->block) {
450 /* Add removed-block's predecessors to its successors' predecessor lists. */
451 foreach_list_typed (bblock_link, predecessor, link, &block->parents) {
452 if (!predecessor->block->is_predecessor_of(successor->block,
454 successor->block->parents.push_tail(link(mem_ctx,
455 predecessor->block,
461 block->link.remove();
463 for (int b = block->num; b < this->num_blocks - 1; b++) {
475 bblock_t *block = new(mem_ctx) bblock_t(this);
477 return block;
481 cfg_t::set_next_block(bblock_t **cur, bblock_t *block, int ip)
487 block->start_ip = ip;
488 block->num = num_blocks++;
489 block_list.push_tail(&block->link);
490 *cur = block;
499 foreach_block (block, this) {
500 blocks[i++] = block;
510 foreach_block (block, this) {
511 if (idom && idom->parent(block))
512 fprintf(stderr, "START B%d IDOM(B%d)", block->num,
513 idom->parent(block)->num);
515 fprintf(stderr, "START B%d IDOM(none)", block->num);
517 foreach_list_typed(bblock_link, link, link, &block->parents) {
520 link->block->num);
524 block->dump();
525 fprintf(stderr, "END B%d", block->num);
526 foreach_list_typed(bblock_link, link, link, &block->children) {
529 link->block->num);
535 /* Calculates the immediate dominator of each block, according to "A Simple,
554 foreach_block(block, s->cfg) {
555 if (block->num == 0)
559 foreach_list_typed(bblock_link, parent_link, link, &block->parents) {
560 if (parent(parent_link->block)) {
561 new_idom = (new_idom ? intersect(new_idom, parent_link->block) :
562 parent_link->block);
566 if (parent(block) != new_idom) {
567 parents[block->num] = new_idom;
610 bblock_t *block = this->blocks[b];
612 foreach_list_typed_safe (bblock_link, child, link, &block->children) {
613 printf("\t%d -> %d\n", b, child->block->num);