return new(mem_ctx) bblock_link(this);
}
+void
+bblock_t::dump(backend_visitor *v)
+{
+ int ip = this->start_ip;
+ for (backend_instruction *inst = (backend_instruction *)this->start;
+ inst != this->end->next;
+ inst = (backend_instruction *) inst->next) {
+ printf("%5d: ", ip);
+ v->dump_instruction(inst);
+ ip++;
+ }
+}
+
cfg_t::cfg_t(backend_visitor *v)
{
create(v->mem_ctx, &v->instructions);
}
assert(i == num_blocks);
}
+
+void
+cfg_t::dump(backend_visitor *v)
+{
+ for (int b = 0; b < this->num_blocks; b++) {
+ bblock_t *block = this->blocks[b];
+ printf("START B%d", b);
+ foreach_list(node, &block->parents) {
+ bblock_link *link = (bblock_link *)node;
+ printf(" <-B%d", link->block->block_num);
+ }
+ printf("\n");
+ block->dump(v);
+ printf("END B%d", b);
+ foreach_list(node, &block->children) {
+ bblock_link *link = (bblock_link *)node;
+ printf(" ->B%d", link->block->block_num);
+ }
+ printf("\n");
+ }
+}
bblock_t();
void add_successor(void *mem_ctx, bblock_t *successor);
+ void dump(backend_visitor *v);
backend_instruction *start;
backend_instruction *end;
void set_next_block(bblock_t *block);
void make_block_array();
+ void dump(backend_visitor *v);
+
/** @{
*
* Used while generating the block list.