assert(new);
return new;
-
}
/* Create this node on a new obstack. */
int i;
assert (n);
+ DDMSG2(n);
if (is_binop(n)) {
a = get_binop_left(n);
{
ir_node **in;
in = get_Return_res_arr(n);
- for (i = 0; i < get_Return_n_res(n); i++)
+ for (i = 0; i < get_Return_n_res(n); i++) {
set_Return_res(n, i, get_new_node(get_Return_res(n, i)));
+ }
res = new_r_Return (current_ir_graph, get_new_node(get_nodes_Block(n)),
get_new_node(get_Return_mem(n)),
get_Return_n_res(n), in);
}
/* @@@ Here we could call optimize()!! */
set_new_node(n, res);
+
+ printf(" "); DDMSG2(res);
}
old_node = irg->start;
new_node = new_r_Start (current_ir_graph, irg->start_block);
irg->start = new_node;
+ DDMSG2(new_node);
set_new_node (old_node, new_node);
set_irn_visited (new_node, get_irg_visited(current_ir_graph)+1);
/* Copy the Bad node */
get_Return_res_arr (ir_node *node)
{
assert ((node->op == op_Return));
- return ((ir_node **)get_Return_res(node, 0));
+ if (get_Return_n_res(node) > 0)
+ return ((ir_node **)get_Return_res(node, 0));
+ else
+ return NULL;
}
inline int
inline ir_node *
get_Return_res (ir_node *node, int pos) {
assert (node->op == op_Return);
+ assert (get_Return_n_res(node) > pos);
return get_irn_n(node, pos+1);
}
get_Sel_index_arr (ir_node *node)
{
assert ((node->op == op_Sel));
- return (ir_node **)get_Sel_index(node, 0);
+ if (get_Sel_n_index(node) > 0)
+ return (ir_node **)get_Sel_index(node, 0);
+ else
+ return NULL;
}
inline int
inline ir_node **
get_Call_param_arr (ir_node *node) {
assert (node->op == op_Call);
- return ((ir_node **)get_Call_param (node, 0));
+ if (get_Call_arity(node) > 0)
+ return ((ir_node **)get_Call_param (node, 0));
+ else
+ return NULL;
}
inline int
/* init library */
init_firm ();
+ set_opt_dead_node_elimination (o);
+
/* FIRM was designed for oo languages where all methods belong to a class.
* For imperative languages like C we view a file as a large class containing
* all functions as methods in this file.
/* verify the graph */
irg_vrfy(irg);
+ dead_node_elimination(irg);
printf("\nDone building the graph. Dumping it.\n");
dump_ir_block_graph (irg);