ir_graph *new_const_code_irg(void) { ir_graph *const res = new_r_ir_graph(NULL, 0); mature_immBlock(get_irg_end_block(res)); /* There is no Start node in the const_code_irg */ set_irg_start(res, new_r_Bad(res, mode_T)); set_irg_frame(res, new_r_Bad(res, mode_BAD)); set_irg_args(res, new_r_Bad(res, mode_T)); set_irg_initial_mem(res, new_r_Bad(res, mode_M)); set_r_store(res, get_irg_no_mem(res)); /* Set the visited flag high enough that the blocks will never be * visited. */ ir_node *const body_block = get_r_cur_block(res); set_irn_visited(body_block, -1); set_Block_block_visited(body_block, -1); ir_node *const start_block = get_irg_start_block(res); set_Block_block_visited(start_block, -1); set_irn_visited(start_block, -1); return res; }
/** * specialized version of irg_walk_2, called if only post callback exists */ static void irg_walk_2_post(ir_node *node, irg_walk_func *post, void *env) { ir_graph *irg = get_irn_irg(node); ir_visited_t visited = irg->visited; set_irn_visited(node, visited); if (!is_Block(node)) { ir_node *pred = get_nodes_block(node); if (pred->visited < visited) irg_walk_2_post(pred, post, env); } foreach_irn_in_r(node, i, pred) { if (pred->visited < visited) irg_walk_2_post(pred, post, env); } post(node, env); }