{
assert(node && node->kind == k_ir_node);
#ifdef DEBUG_libfirm
- /* assert(node->out_valid); */
+ assert(node->out_valid);
#endif /* defined DEBUG_libfirm */
/* we misuse the first for the size info of the out array */
return node->out[0].pos;
{
assert(pos >= 0 && pos < get_irn_n_outs(def));
#ifdef DEBUG_libfirm
- /* assert(def->out_valid); */
+ assert(def->out_valid);
#endif /* defined DEBUG_libfirm */
return def->out[pos+1].use;
}
{
assert(pos >= 0 && pos < get_irn_n_outs(def));
#ifdef DEBUG_libfirm
- /* assert(def->out_valid); */
+ assert(def->out_valid);
#endif /* defined DEBUG_libfirm */
*in_pos = def->out[pos+1].pos;
return def->out[pos+1].use;
assert(def && use);
assert(pos >= 0 && pos < get_irn_n_outs(def));
#ifdef DEBUG_libfirm
- def->out_valid = 1; /* assume that this function is used correctly */
+ assert(def->out_valid);
#endif /* defined DEBUG_libfirm */
def->out[pos+1].use = use;
def->out[pos+1].pos = in_pos;
#endif /* defined DEBUG_libfirm */
for (i = 1; i <= bl->out[0].pos; ++i) {
ir_node *succ = bl->out[i].use;
- if (get_irn_mode(succ) == mode_X && !is_End(succ))
+ if (get_irn_mode(succ) == mode_X && !is_End(succ) && !is_Bad(succ))
n_cfg_outs += succ->out[0].pos;
}
return n_cfg_outs;
for (i = 1; i <= bl->out[0].pos; ++i) {
ir_node *succ = bl->out[i].use;
if (get_irn_mode(succ) == mode_X) {
-
+ if (is_Bad(succ))
+ continue;
if (is_End(succ)) {
/* ignore End if we are in the Endblock */
if (get_nodes_block(succ) == bl)
#endif /* defined DEBUG_libfirm */
for (i = 1; i <= bl->out[0].pos; ++i) {
ir_node *succ = bl->out[i].use;
- if (get_irn_mode(succ) == mode_X && !is_End(succ)) {
+ if (get_irn_mode(succ) == mode_X && !is_End(succ) && !is_Bad(succ)) {
int n_outs = succ->out[0].pos;
if (pos < n_outs)
return succ->out[pos + 1].use;
for (i = 1; i <= bl->out[0].pos; ++i) {
ir_node *succ = bl->out[i].use;
if (get_irn_mode(succ) == mode_X) {
+ if (is_Bad(succ))
+ continue;
if (is_End(succ)) {
ir_node *end_bl = get_nodes_block(succ);
if (end_bl == bl) {
}
}
-/* Walks only over Block nodes in the graph. Has it's own visited
+/* Walks only over Block nodes in the graph. Has its own visited
flag, so that it can be interleaved with the other walker. */
void irg_out_block_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post,
void *env)
void compute_irp_outs(void)
{
- int i;
- for (i = get_irp_n_irgs() -1; i >= 0; --i)
+ size_t i, n;
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
compute_irg_outs(get_irp_irg(i));
}
void free_irp_outs(void)
{
- int i;
- for (i = get_irp_n_irgs() -1; i >= 0; --i)
+ size_t i, n;
+ for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
free_irg_outs(get_irp_irg(i));
}