X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flower%2Flower_copyb.c;h=8da195e3e2f30ed4a0d8c49758cc743edaad7525;hb=ed0e4ce9a109277e1a63f48f2aca7750f473bc6a;hp=bc80137f40e26af64d7096ccd748a376c8ce126e;hpb=a767106e3a7f4c79586915b9ecc043ebbfb39017;p=libfirm diff --git a/ir/lower/lower_copyb.c b/ir/lower/lower_copyb.c index bc80137f4..8da195e3e 100644 --- a/ir/lower/lower_copyb.c +++ b/ir/lower/lower_copyb.c @@ -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; @@ -99,17 +100,17 @@ static void lower_copyb_nodes(ir_node *irn, unsigned mode_bytes) { ir_node *store_mem; addr_const = new_r_Const_long(irg, mode_Iu, offset); - add = new_r_Add(irg, block, addr_src, addr_const, addr_mode); + add = new_r_Add(block, addr_src, addr_const, addr_mode); - load = new_r_Load(irg, block, mem, add, mode, 0); - load_res = new_r_Proj(irg, block, load, mode, pn_Load_res); - load_mem = new_r_Proj(irg, 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(irg, block, addr_dst, addr_const, addr_mode); + add = new_r_Add(block, addr_dst, addr_const, addr_mode); - store = new_r_Store(irg, block, mem, add, load_res, 0); - store_mem = new_r_Proj(irg, 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; }