X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Fircgcons.c;h=78df170a4fa117fa2052884d32b4294ebfb769f6;hb=f9d25133f86594ca2b1f33fb0b41a591ecc9b914;hp=6644b0c8bd007b8e486ca5de565a663ff9ee550e;hpb=8ec1d7b542f5d353d5b9c531795cec0cf752e64b;p=libfirm diff --git a/ir/ir/ircgcons.c b/ir/ir/ircgcons.c index 6644b0c8b..78df170a4 100644 --- a/ir/ir/ircgcons.c +++ b/ir/ir/ircgcons.c @@ -29,7 +29,7 @@ #include "irgmod.h" #include "irgwalk.h" #include "irflag_t.h" - +#include "irtools.h" /* Return the current state of the interprocedural view. */ ip_view_state get_irp_ip_view_state(void) { @@ -56,8 +56,8 @@ typedef struct { } irg_data_t; static irg_data_t * irg_data_create(void) { - irg_data_t * data = xmalloc(sizeof(irg_data_t)); - memset(data, 0, sizeof(irg_data_t)); /* init */ + irg_data_t *data = xmalloc(sizeof(*data)); + memset(data, 0, sizeof(*data)); /* init */ return data; } @@ -99,11 +99,6 @@ static void caller_init(int arr_length, entity ** free_methods) { } } - -static INLINE void clear_link(ir_node * node, void * env) { - set_irn_link(node, NULL); -} - /* static INLINE ir_node * tail(ir_node * node) { ir_node * link; @@ -167,7 +162,7 @@ static void collect_phicallproj(void) { link(start, get_irg_frame(irg)); link(start, get_irg_globals(irg)); /* walk */ - irg_walk_graph(irg, clear_link, (irg_walk_func *) collect_phicallproj_walker, &end); + irg_walk_graph(irg, firm_clear_link, (irg_walk_func *) collect_phicallproj_walker, &end); } } @@ -860,7 +855,9 @@ void cg_construct(int arr_len, entity ** free_methods_arr) { static void destruct_walker(ir_node * node, void * env) { if (get_irn_op(node) == op_Block) { remove_Block_cg_cfgpred_arr(node); - /* Do not turn Break into Jmp. Better: merge blocks right away. */ + /* Do not turn Break into Jmp. Better: merge blocks right away. + Well, but there are Breaks left. + See exc1 from ajacs-rts/Exceptions.java. */ if (get_Block_n_cfgpreds(node) == 1) { ir_node *pred = get_Block_cfgpred(node, 0); if (get_irn_op(pred) == op_Break) @@ -870,8 +867,8 @@ static void destruct_walker(ir_node * node, void * env) { set_irg_current_block(current_ir_graph, get_nodes_block(node)); exchange(node, new_Proj(get_Filter_pred(node), get_irn_mode(node), get_Filter_proj(node))); } else if (get_irn_op(node) == op_Break) { - //set_irg_current_block(current_ir_graph, get_nodes_block(node)); - //exchange(node, new_Jmp()); + set_irg_current_block(current_ir_graph, get_nodes_block(node)); + exchange(node, new_Jmp()); } else if (get_irn_op(node) == op_Call) { remove_Call_callee_arr(node); } else if (get_irn_op(node) == op_Proj) { @@ -886,14 +883,17 @@ void cg_destruct(void) { if (get_irp_ip_view_state() != ip_view_no) { for (i = get_irp_n_irgs() - 1; i >= 0; --i) { ir_graph * irg = get_irp_irg(i); - irg_walk_graph(irg, destruct_walker, clear_link, NULL); - set_irg_frame(irg, skip_Id(get_irg_frame(irg))); - set_irg_globals(irg, skip_Id(get_irg_globals(irg))); + irg_walk_graph(irg, destruct_walker, firm_clear_link, NULL); + + set_irg_frame (irg, skip_Id(get_irg_frame(irg))); + set_irg_globals (irg, skip_Id(get_irg_globals(irg))); set_irg_initial_mem(irg, skip_Id(get_irg_initial_mem(irg))); + set_irg_end_reg (irg, get_irg_end(irg)); + set_irg_end_except (irg, get_irg_end(irg)); + set_irg_callee_info_state(irg, irg_callee_info_none); - set_irg_end_reg(irg, get_irg_end(irg)); - set_irg_end_except(irg, get_irg_end(irg)); } + set_irp_ip_view(ip_view_no); } }