BugFix: equivalent_node_Bound() was too greedy, reduced to a safe minimum (now mostly...
[libfirm] / ir / ir / ircons.c
index 8381a96..7de8333 100644 (file)
@@ -2000,9 +2000,11 @@ get_r_frag_value_internal(ir_node *block, ir_node *cfOp, int pos, ir_mode *mode)
  * @param prev_cf_op  if cf_pred is a Proj, the predecessor node, else equal to cf_pred
  */
 static int is_exception_flow(ir_node *cf_pred, ir_node *prev_cf_op) {
-       /* all projections from a raise are exceptional control flow */
-       if (is_Raise(prev_cf_op))
-               return 1;
+       /*
+        * Note: all projections from a raise are "exceptional control flow" we we handle it
+        * like a normal Jmp, because there is no "regular" one.
+        * That's why Raise is no "fragile_op"!
+        */
        if (is_fragile_op(prev_cf_op)) {
                if (is_Proj(cf_pred)) {
                        if (get_Proj_proj(cf_pred) == pn_Generic_X_regular) {
@@ -2712,7 +2714,7 @@ add_immBlock_pred(ir_node *block, ir_node *jmp) {
 
        assert(!block->attr.block.is_matured && "Error: Block already matured!\n");
        assert(block->attr.block.is_mb_head && "Error: Cannot add a predecessor to a PartBlock");
-       assert(jmp != NULL);
+       assert(is_ir_node(jmp));
 
        ARR_APP1(ir_node *, block->in, jmp);
        /* Call the hook */
@@ -2751,6 +2753,7 @@ set_value(int pos, ir_node *value) {
        ir_graph *irg = current_ir_graph;
        assert(get_irg_phase_state(irg) == phase_building);
        assert(pos+1 < irg->n_loc);
+       assert(is_ir_node(value));
        irg->current_block->attr.block.graph_arr[pos + 1] = value;
 }  /* set_value */