X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flower%2Flower_hl.c;h=f1f4e8829f7315b4724e765ad6bf2e00817de660;hb=7142e46b9e442cacddec26387d8735444fb4421b;hp=8f1cc3962e50a5f4baedcb724d6b7e056d919bda;hpb=a1e9069afa4fa1e16e2d176bcd7905d6a1ed4677;p=libfirm diff --git a/ir/lower/lower_hl.c b/ir/lower/lower_hl.c index 8f1cc3962..f1f4e8829 100644 --- a/ir/lower/lower_hl.c +++ b/ir/lower/lower_hl.c @@ -43,13 +43,13 @@ */ static void lower_sel(ir_node *sel) { - ir_graph *irg = current_ir_graph; - ir_entity *ent; - ir_node *newn, *cnst, *index, *ptr, *bl; - tarval *tv; - ir_mode *basemode, *mode, *mode_Int; - ir_type *basetyp, *owner; - dbg_info *dbg; + ir_graph *irg = current_ir_graph; + ir_entity *ent; + ir_node *newn, *cnst, *index, *ptr, *bl; + ir_tarval *tv; + ir_mode *basemode, *mode, *mode_Int; + ir_type *basetyp, *owner; + dbg_info *dbg; assert(is_Sel(sel)); @@ -144,12 +144,12 @@ static void lower_sel(ir_node *sel) assert(irg == current_ir_graph); if (! is_Unknown(lb)) - lb = new_rd_Conv(dbg, bl, copy_const_value(get_irn_dbg_info(sel), lb), mode_Int); + lb = new_rd_Conv(dbg, bl, copy_const_value(get_irn_dbg_info(sel), lb, bl), mode_Int); else lb = NULL; if (! is_Unknown(ub)) - ub = new_rd_Conv(dbg, bl, copy_const_value(get_irn_dbg_info(sel), ub), mode_Int); + ub = new_rd_Conv(dbg, bl, copy_const_value(get_irn_dbg_info(sel), ub, bl), mode_Int); else ub = NULL; @@ -186,8 +186,8 @@ static void lower_sel(ir_node *sel) } } else { /* no array type */ - ir_mode *idx_mode = get_irn_mode(index); - tarval *tv = new_tarval_from_long(get_mode_size_bytes(basemode), idx_mode); + ir_mode *idx_mode = get_irn_mode(index); + ir_tarval *tv = new_tarval_from_long(get_mode_size_bytes(basemode), idx_mode); newn = new_rd_Add(dbg, bl, get_Sel_ptr(sel), new_rd_Mul(dbg, bl, index, @@ -206,13 +206,7 @@ static void lower_sel(ir_node *sel) tv = new_tarval_from_long(get_entity_offset(ent), mode_Int); cnst = new_rd_Const(dbg, irg, tv); add = new_rd_Add(dbg, bl, get_Sel_ptr(sel), cnst, mode); -#ifdef DO_CACHEOPT /* cacheopt version */ - newn = new_rd_Load(dbg, bl, get_Sel_mem(sel), sel, ent_mode, 0); - cacheopt_map_addrs_register_node(newn); - set_Load_ptr(newn, add); -#else /* normal code */ - newn = new_rd_Load(dbg, bl, get_Sel_mem(sel), add, ent_mode, 0); -#endif + newn = new_rd_Load(dbg, bl, get_Sel_mem(sel), add, ent_mode, cons_none); newn = new_r_Proj(newn, ent_mode, pn_Load_res); } else if (get_entity_owner(ent) != get_glob_type()) { @@ -230,7 +224,7 @@ static void lower_sel(ir_node *sel) } } else { /* global_type */ - newn = new_rd_SymConst_addr_ent(NULL, irg, mode, ent, firm_unknown_type); + newn = new_rd_SymConst_addr_ent(NULL, irg, mode, ent); } } /* run the hooks */ @@ -247,9 +241,10 @@ static void lower_symconst(ir_node *symc) ir_node *newn; ir_type *tp; ir_entity *ent; - tarval *tv; + ir_tarval *tv; ir_enum_const *ec; ir_mode *mode; + ir_graph *irg; switch (get_SymConst_kind(symc)) { case symconst_type_tag: @@ -257,10 +252,11 @@ static void lower_symconst(ir_node *symc) break; case symconst_type_size: /* rewrite the SymConst node by a Const node */ + irg = get_irn_irg(symc); tp = get_SymConst_type(symc); assert(get_type_state(tp) == layout_fixed); mode = get_irn_mode(symc); - newn = new_Const_long(mode, get_type_size_bytes(tp)); + newn = new_r_Const_long(irg, mode, get_type_size_bytes(tp)); assert(newn); /* run the hooks */ hook_lower(symc); @@ -268,10 +264,11 @@ static void lower_symconst(ir_node *symc) break; case symconst_type_align: /* rewrite the SymConst node by a Const node */ + irg = get_irn_irg(symc); tp = get_SymConst_type(symc); assert(get_type_state(tp) == layout_fixed); mode = get_irn_mode(symc); - newn = new_Const_long(mode, get_type_alignment_bytes(tp)); + newn = new_r_Const_long(irg, mode, get_type_alignment_bytes(tp)); assert(newn); /* run the hooks */ hook_lower(symc); @@ -282,10 +279,11 @@ static void lower_symconst(ir_node *symc) break; case symconst_ofs_ent: /* rewrite the SymConst node by a Const node */ + irg = get_irn_irg(symc); ent = get_SymConst_entity(symc); assert(get_type_state(get_entity_type(ent)) == layout_fixed); mode = get_irn_mode(symc); - newn = new_Const_long(mode, get_entity_offset(ent)); + newn = new_r_Const_long(irg, mode, get_entity_offset(ent)); assert(newn); /* run the hooks */ hook_lower(symc); @@ -293,10 +291,11 @@ static void lower_symconst(ir_node *symc) break; case symconst_enum_const: /* rewrite the SymConst node by a Const node */ + irg = get_irn_irg(symc); ec = get_SymConst_enum(symc); assert(get_type_state(get_enumeration_owner(ec)) == layout_fixed); tv = get_enumeration_value(ec); - newn = new_Const(tv); + newn = new_r_Const(irg, tv); assert(newn); /* run the hooks */ hook_lower(symc); @@ -333,6 +332,7 @@ static void lower_bitfields_loads(ir_node *proj, ir_node *load) { ir_node *sel = get_Load_ptr(load); ir_node *block, *n_proj, *res, *ptr; + ir_graph *irg; ir_entity *ent; ir_type *bf_type; ir_mode *bf_mode, *mode; @@ -372,9 +372,10 @@ static void lower_bitfields_loads(ir_node *proj, ir_node *load) */ /* abandon bitfield sel */ + irg = get_irn_irg(sel); ptr = get_Sel_ptr(sel); db = get_irn_dbg_info(sel); - ptr = new_rd_Add(db, block, ptr, new_Const_long(mode_Is, offset), get_irn_mode(ptr)); + ptr = new_rd_Add(db, block, ptr, new_r_Const_long(irg, mode_Is, offset), get_irn_mode(ptr)); set_Load_ptr(load, ptr); set_Load_mode(load, mode); @@ -391,20 +392,20 @@ static void lower_bitfields_loads(ir_node *proj, ir_node *load) int shift_count_down = bits - bf_bits; if (shift_count_up) { - res = new_r_Shl(block, res, new_Const_long(mode_Iu, shift_count_up), mode); + res = new_r_Shl(block, res, new_r_Const_long(irg, mode_Iu, shift_count_up), mode); } if (shift_count_down) { - res = new_r_Shrs(block, res, new_Const_long(mode_Iu, shift_count_down), mode); + res = new_r_Shrs(block, res, new_r_Const_long(irg, mode_Iu, shift_count_down), mode); } } else { /* unsigned */ int shift_count_down = bit_offset; unsigned mask = ((unsigned)-1) >> (bits - bf_bits); if (shift_count_down) { - res = new_r_Shr(block, res, new_Const_long(mode_Iu, shift_count_down), mode); + res = new_r_Shr(block, res, new_r_Const_long(irg, mode_Iu, shift_count_down), mode); } if (bits != bf_bits) { - res = new_r_And(block, res, new_Const_long(mode, mask), mode); + res = new_r_And(block, res, new_r_Const_long(irg, mode, mask), mode); } } @@ -424,6 +425,7 @@ static void lower_bitfields_stores(ir_node *store) ir_type *bf_type; ir_mode *bf_mode, *mode; ir_node *mem, *irn, *block; + ir_graph *irg; unsigned mask, neg_mask; int bf_bits, bits_mask, offset, bit_offset; dbg_info *db; @@ -467,23 +469,24 @@ static void lower_bitfields_stores(ir_node *store) neg_mask = ~mask; /* abandon bitfield sel */ + irg = get_irn_irg(sel); ptr = get_Sel_ptr(sel); db = get_irn_dbg_info(sel); - ptr = new_rd_Add(db, block, ptr, new_Const_long(mode_Is, offset), get_irn_mode(ptr)); + ptr = new_rd_Add(db, block, ptr, new_r_Const_long(irg, mode_Is, offset), get_irn_mode(ptr)); if (neg_mask) { /* there are some bits, normal case */ - irn = new_r_Load(block, mem, ptr, mode, 0); + irn = new_r_Load(block, mem, ptr, mode, cons_none); mem = new_r_Proj(irn, mode_M, pn_Load_M); irn = new_r_Proj(irn, mode, pn_Load_res); - irn = new_r_And(block, irn, new_Const_long(mode, neg_mask), mode); + irn = new_r_And(block, irn, new_r_Const_long(irg, mode, neg_mask), mode); if (bit_offset > 0) { - value = new_r_Shl(block, value, new_Const_long(mode_Iu, bit_offset), mode); + value = new_r_Shl(block, value, new_r_Const_long(irg, mode_Iu, bit_offset), mode); } - value = new_r_And(block, value, new_Const_long(mode, mask), mode); + value = new_r_And(block, value, new_r_Const_long(irg, mode, mask), mode); value = new_r_Or(block, value, irn, mode); } @@ -584,17 +587,17 @@ void lower_highlevel_graph(ir_graph *irg, int lower_bitfields) set_irg_outs_inconsistent(irg); } -struct pass_t { +typedef struct pass_t { ir_graph_pass_t pass; int lower_bitfields; -}; +} pass_t; /** * Wrapper for running lower_highlevel_graph() as an ir_graph pass. */ static int lower_highlevel_graph_wrapper(ir_graph *irg, void *context) { - struct pass_t *pass = context; + pass_t *pass = (pass_t*)context; lower_highlevel_graph(irg, pass->lower_bitfields); return 0; @@ -602,7 +605,7 @@ static int lower_highlevel_graph_wrapper(ir_graph *irg, void *context) ir_graph_pass_t *lower_highlevel_graph_pass(const char *name, int lower_bitfields) { - struct pass_t *pass = XMALLOCZ(struct pass_t); + pass_t *pass = XMALLOCZ(pass_t); pass->lower_bitfields = lower_bitfields; return def_graph_pass_constructor( @@ -629,7 +632,7 @@ ir_prog_pass_t *lower_const_code_pass(const char *name) */ void lower_highlevel(int lower_bitfields) { - int i, n; + size_t i, n; n = get_irp_n_irgs(); for (i = 0; i < n; ++i) {