Use XMALLOCF*().
[libfirm] / ir / lower / lower_copyb.c
index 8060ab0..8da195e 100644 (file)
@@ -51,7 +51,7 @@ typedef struct walk_env {
 static ir_mode *get_ir_mode(unsigned bytes)
 {
        switch (bytes) {
-       case 1:  return mode_Bu;
+       case 1:  return mode_Bu;
        case 2:  return mode_Hu;
        case 4:  return mode_Iu;
        case 8:  return mode_Lu;
@@ -64,8 +64,9 @@ static ir_mode *get_ir_mode(unsigned bytes)
 /**
  * lower a CopyB node.
  */
-static void lower_copyb_nodes(ir_node *irn, unsigned mode_bytes) {
-       ir_graph        *irg = current_ir_graph;
+static void lower_copyb_nodes(ir_node *irn, unsigned mode_bytes)
+{
+       ir_graph        *irg = get_irn_irg(irn);
        unsigned         size;
        unsigned         offset;
        ir_mode         *mode;
@@ -101,15 +102,15 @@ static void lower_copyb_nodes(ir_node *irn, unsigned mode_bytes) {
                        addr_const = new_r_Const_long(irg, mode_Iu, offset);
                        add        = new_r_Add(block, addr_src, addr_const, addr_mode);
 
-                       load     = new_r_Load(block, mem, add, mode, 0);
-                       load_res = new_r_Proj(block, load, mode, pn_Load_res);
-                       load_mem = new_r_Proj(block, load, mode_M, pn_Load_M);
+                       load     = new_r_Load(block, mem, add, mode, cons_none);
+                       load_res = new_r_Proj(load, mode, pn_Load_res);
+                       load_mem = new_r_Proj(load, mode_M, pn_Load_M);
 
                        addr_const = new_r_Const_long(irg, mode_Iu, offset);
                        add        = new_r_Add(block, addr_dst, addr_const, addr_mode);
 
-                       store     = new_r_Store(block, load_mem, add, load_res, 0);
-                       store_mem = new_r_Proj(block, store, mode_M, pn_Store_M);
+                       store     = new_r_Store(block, load_mem, add, load_res, cons_none);
+                       store_mem = new_r_Proj(store, mode_M, pn_Store_M);
 
                        mem = store_mem;
                }
@@ -118,17 +119,17 @@ static void lower_copyb_nodes(ir_node *irn, unsigned mode_bytes) {
        }
 
        turn_into_tuple(irn, pn_CopyB_max);
-       set_Tuple_pred(irn, pn_CopyB_M_regular, mem);
-       set_Tuple_pred(irn, pn_CopyB_X_regular, get_irg_bad(irg));
-       set_Tuple_pred(irn, pn_CopyB_X_except,  get_irg_bad(irg));
-       set_Tuple_pred(irn, pn_CopyB_M_except,  get_irg_bad(irg));
+       set_Tuple_pred(irn, pn_CopyB_M,         mem);
+       set_Tuple_pred(irn, pn_CopyB_X_regular, new_r_Bad(irg, mode_X));
+       set_Tuple_pred(irn, pn_CopyB_X_except,  new_r_Bad(irg, mode_X));
 }
 
 /**
  * Post-Walker: find small CopyB nodes.
  */
-static void find_copyb_nodes(ir_node *irn, void *ctx) {
-       walk_env_t *env = ctx;
+static void find_copyb_nodes(ir_node *irn, void *ctx)
+{
+       walk_env_t *env = (walk_env_t*)ctx;
        ir_type    *tp;
        unsigned   size;
        entry_t    *entry;
@@ -136,9 +137,9 @@ static void find_copyb_nodes(ir_node *irn, void *ctx) {
        if (is_Proj(irn)) {
                ir_node *pred = get_Proj_pred(irn);
 
-               if (is_CopyB(pred) && get_Proj_proj(irn) != pn_CopyB_M_regular) {
+               if (is_CopyB(pred) && get_Proj_proj(irn) != pn_CopyB_M) {
                        /* found an exception Proj: remove it from the list again */
-                       entry = get_irn_link(pred);
+                       entry = (entry_t*)get_irn_link(pred);
                        list_del(&entry->list);
                }
                return;
@@ -156,7 +157,7 @@ static void find_copyb_nodes(ir_node *irn, void *ctx) {
                return;
 
        /* ok, link it in */
-       entry = obstack_alloc(&env->obst, sizeof(*entry));
+       entry = OALLOC(&env->obst, entry_t);
        entry->copyb = irn;
        INIT_LIST_HEAD(&entry->list);
        set_irn_link(irn, entry);
@@ -166,10 +167,7 @@ static void find_copyb_nodes(ir_node *irn, void *ctx) {
 void lower_CopyB(ir_graph *irg, unsigned max_size, unsigned native_mode_bytes)
 {
        walk_env_t env;
-       entry_t  *entry;
-       ir_graph *rem = current_ir_graph;
-
-       current_ir_graph = irg;
+       entry_t   *entry;
 
        obstack_init(&env.obst);
        env.max_size = max_size;
@@ -181,5 +179,4 @@ void lower_CopyB(ir_graph *irg, unsigned max_size, unsigned native_mode_bytes)
        }
 
        obstack_free(&env.obst, NULL);
-       current_ir_graph = rem;
 }