BugFix: equivalent_node_Bound() was too greedy, reduced to a safe minimum (now mostly...
[libfirm] / ir / ir / ircons.c
index 30724fe..7de8333 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -531,7 +531,7 @@ new_bd_Store(dbg_info *db, ir_node *block,
 
 static ir_node *
 new_bd_Alloc(dbg_info *db, ir_node *block, ir_node *store,
-        ir_node *size, ir_type *alloc_type, where_alloc where) {
+        ir_node *size, ir_type *alloc_type, ir_where_alloc where) {
        ir_node  *in[2];
        ir_node  *res;
        ir_graph *irg = current_ir_graph;
@@ -549,7 +549,7 @@ new_bd_Alloc(dbg_info *db, ir_node *block, ir_node *store,
 
 static ir_node *
 new_bd_Free(dbg_info *db, ir_node *block, ir_node *store,
-        ir_node *ptr, ir_node *size, ir_type *free_type, where_alloc where) {
+        ir_node *ptr, ir_node *size, ir_type *free_type, ir_where_alloc where) {
        ir_node  *in[3];
        ir_node  *res;
        ir_graph *irg = current_ir_graph;
@@ -1137,7 +1137,7 @@ new_rd_Store(dbg_info *db, ir_graph *irg, ir_node *block,
 
 ir_node *
 new_rd_Alloc(dbg_info *db, ir_graph *irg, ir_node *block, ir_node *store,
-             ir_node *size, ir_type *alloc_type, where_alloc where) {
+             ir_node *size, ir_type *alloc_type, ir_where_alloc where) {
        ir_node  *res;
        ir_graph *rem = current_ir_graph;
 
@@ -1150,7 +1150,7 @@ new_rd_Alloc(dbg_info *db, ir_graph *irg, ir_node *block, ir_node *store,
 
 ir_node *
 new_rd_Free(dbg_info *db, ir_graph *irg, ir_node *block, ir_node *store,
-            ir_node *ptr, ir_node *size, ir_type *free_type, where_alloc where) {
+            ir_node *ptr, ir_node *size, ir_type *free_type, ir_where_alloc where) {
        ir_node  *res;
        ir_graph *rem = current_ir_graph;
 
@@ -1606,11 +1606,11 @@ ir_node *new_r_Store(ir_graph *irg, ir_node *block,
        return new_rd_Store(NULL, irg, block, store, adr, val);
 }
 ir_node *new_r_Alloc(ir_graph *irg, ir_node *block, ir_node *store,
-                     ir_node *size, ir_type *alloc_type, where_alloc where) {
+                     ir_node *size, ir_type *alloc_type, ir_where_alloc where) {
        return new_rd_Alloc(NULL, irg, block, store, size, alloc_type, where);
 }
 ir_node *new_r_Free(ir_graph *irg, ir_node *block, ir_node *store,
-                    ir_node *ptr, ir_node *size, ir_type *free_type, where_alloc where) {
+                    ir_node *ptr, ir_node *size, ir_type *free_type, ir_where_alloc where) {
        return new_rd_Free(NULL, irg, block, store, ptr, size, free_type, where);
 }
 ir_node *new_r_Sync(ir_graph *irg, ir_node *block, int arity, ir_node *in[]) {
@@ -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) {
@@ -2478,7 +2480,7 @@ new_d_Store(dbg_info *db, ir_node *store, ir_node *addr, ir_node *val) {
 
 ir_node *
 new_d_Alloc(dbg_info *db, ir_node *store, ir_node *size, ir_type *alloc_type,
-            where_alloc where) {
+            ir_where_alloc where) {
        ir_node *res;
        res = new_bd_Alloc(db, current_ir_graph->current_block,
                           store, size, alloc_type, where);
@@ -2491,7 +2493,7 @@ new_d_Alloc(dbg_info *db, ir_node *store, ir_node *size, ir_type *alloc_type,
 
 ir_node *
 new_d_Free(dbg_info *db, ir_node *store, ir_node *ptr,
-           ir_node *size, ir_type *free_type, where_alloc where) {
+           ir_node *size, ir_type *free_type, ir_where_alloc where) {
        return new_bd_Free(db, current_ir_graph->current_block,
                           store, ptr, size, free_type, where);
 }
@@ -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 */
 
@@ -2985,11 +2988,11 @@ ir_node *new_Store(ir_node *store, ir_node *addr, ir_node *val) {
        return new_d_Store(NULL, store, addr, val);
 }
 ir_node *new_Alloc(ir_node *store, ir_node *size, ir_type *alloc_type,
-                   where_alloc where) {
+                   ir_where_alloc where) {
        return new_d_Alloc(NULL, store, size, alloc_type, where);
 }
 ir_node *new_Free(ir_node *store, ir_node *ptr, ir_node *size,
-                  ir_type *free_type, where_alloc where) {
+                  ir_type *free_type, ir_where_alloc where) {
        return new_d_Free(NULL, store, ptr, size, free_type, where);
 }
 ir_node *new_Sync(int arity, ir_node *in[]) {