arr = &node->in;
}
- for (i = 0; i < arity; i++) {
- if (i < ARR_LEN(*arr)-1)
- edges_notify_edge(node, i, in[i], (*arr)[i+1], irg);
- else
- edges_notify_edge(node, i, in[i], NULL, irg);
+ for (i = 0; i < arity; i++) {
+ if (i < ARR_LEN(*arr)-1)
+ edges_notify_edge(node, i, in[i], (*arr)[i+1], irg);
+ else
+ edges_notify_edge(node, i, in[i], NULL, irg);
+ }
+ for(;i < ARR_LEN(*arr)-1; i++) {
+ edges_notify_edge(node, i, NULL, (*arr)[i+1], irg);
}
- for(;i < ARR_LEN(*arr)-1; i++) {
- edges_notify_edge(node, i, NULL, (*arr)[i+1], irg);
- }
- if (arity != ARR_LEN(*arr) - 1) {
+ if (arity != ARR_LEN(*arr) - 1) {
ir_node * block = (*arr)[0];
*arr = NEW_ARR_D(ir_node *, irg->obst, arity + 1);
(*arr)[0] = block;
set_irn_n(end, pos + END_KEEPALIVE_OFFSET, ka);
}
+/* Set new keep-alives */
+void set_End_keepalives(ir_node *end, int n, ir_node *in[]) {
+ int i;
+ ir_graph *irg = get_irn_irg(end);
+
+ /* notify that edges are deleted */
+ for (i = END_KEEPALIVE_OFFSET; i < ARR_LEN(end->in); ++i) {
+ edges_notify_edge(end, i, in[i], NULL, irg);
+ }
+ ARR_RESIZE(ir_node *, end->in, n + 1 + END_KEEPALIVE_OFFSET);
+
+ for (i = 0; i < n; ++i) {
+ end->in[1 + END_KEEPALIVE_OFFSET + i] = in[i];
+ edges_notify_edge(end, 1 + END_KEEPALIVE_OFFSET + i, NULL, end->in[1 + END_KEEPALIVE_OFFSET + i], irg);
+ }
+}
+
void
free_End (ir_node *end) {
assert (end->op == op_End);
end->kind = k_BAD;
- DEL_ARR_F(end->in); /* GL @@@ tut nicht ! */
+ DEL_ARR_F(end->in);
end->in = NULL; /* @@@ make sure we get an error if we use the
in array afterwards ... */
}
int num_conds = get_Psi_n_conds(node);
assert(node->op == op_Psi);
assert(pos < num_conds);
- return node->in[1 + 2 * pos];
+ return get_irn_n(node, 2 * pos);
}
void set_Psi_cond (ir_node *node, int pos, ir_node *cond) {
int num_conds = get_Psi_n_conds(node);
assert(node->op == op_Psi);
assert(pos < num_conds);
- node->in[1 + 2 * pos] = cond;
+ set_irn_n(node, 2 * pos, cond);
}
ir_node *get_Psi_val (ir_node *node, int pos) {
int num_vals = get_Psi_n_conds(node);
assert(node->op == op_Psi);
assert(pos < num_vals);
- return node->in[1 + 2 * pos + 1];
+ return get_irn_n(node, 2 * pos + 1);
}
void set_Psi_val (ir_node *node, int pos, ir_node *val) {
int num_vals = get_Psi_n_conds(node);
assert(node->op == op_Psi);
assert(pos < num_vals);
- node->in[1 + 2 * pos + 1] = val;
+ set_irn_n(node, 2 * pos + 1, val);
}
ir_node *get_Psi_default(ir_node *node) {
- int def_pos = get_irn_arity(node);
+ int def_pos = get_irn_arity(node) - 1;
assert(node->op == op_Psi);
- return node->in[def_pos];
+ return get_irn_n(node, def_pos);
}
void set_Psi_default(ir_node *node, ir_node *val) {
int def_pos = get_irn_arity(node);
assert(node->op == op_Psi);
- node->in[def_pos] = node;
+ set_irn_n(node, def_pos, val);
}
int (get_Psi_n_conds)(ir_node *node) {