X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Ftropt.c;h=3716a70d27ff30476dd33ce478414d0cabd4b999;hb=9d3c8631459f431c313160dab5778e8a7b88dd92;hp=bb8c44a52b2ff40c15e53085c37f2f8b9ab47ec1;hpb=c79fe4adc914d8d867772053bedf449a4f85645d;p=libfirm diff --git a/ir/opt/tropt.c b/ir/opt/tropt.c index bb8c44a52..3716a70d2 100644 --- a/ir/opt/tropt.c +++ b/ir/opt/tropt.c @@ -32,7 +32,6 @@ #include "irprog.h" #include "irtypeinfo.h" #include "irgwalk.h" -#include "irsimpletype.h" #include "trouts.h" #include "ircons.h" #include "irgmod.h" @@ -95,6 +94,7 @@ static ir_node *normalize_values_type(ir_type *totype, ir_node *pred) { ir_type *fromtype = get_irn_typeinfo_type(pred); ir_node *new_cast = pred; + ir_node *block; int ref_depth = 0; if (totype == fromtype) return pred; /* Case for optimization! */ @@ -114,7 +114,7 @@ static ir_node *normalize_values_type(ir_type *totype, ir_node *pred) return pred; } - set_cur_block(get_nodes_block(pred)); + block = get_nodes_block(pred); if (is_SubClass_of(totype, fromtype)) { /* downcast */ @@ -131,7 +131,7 @@ static ir_node *normalize_values_type(ir_type *totype, ir_node *pred) assert(new_type); fromtype = new_type; new_type = pointerize_type(new_type, ref_depth); - new_cast = new_Cast(pred, new_type); + new_cast = new_r_Cast(block, pred, new_type); pred = new_cast; n_casts_normalized ++; set_irn_typeinfo_type(new_cast, new_type); /* keep type information up to date. */ @@ -152,7 +152,7 @@ static ir_node *normalize_values_type(ir_type *totype, ir_node *pred) assert(new_type); fromtype = new_type; new_type = pointerize_type(new_type, ref_depth); - new_cast = new_Cast(pred, new_type); + new_cast = new_r_Cast(block, pred, new_type); pred = new_cast; n_casts_normalized ++; set_irn_typeinfo_type(new_cast, new_type); /* keep type information up to date. */ @@ -218,8 +218,10 @@ void normalize_irp_class_casts(gen_pointer_type_to_func gppt_fct) int i; if (gppt_fct) gen_pointer_type_to = gppt_fct; +#if 0 if (get_irp_typeinfo_state() != ir_typeinfo_consistent) simple_analyse_types(); +#endif for (i = get_irp_n_irgs() - 1; i >= 0; --i) { pure_normalize_irg_class_casts(get_irp_irg(i)); @@ -415,6 +417,7 @@ static int concretize_Phi_type(ir_node *phi) */ static int remove_Cmp_Null_cast(ir_node *cmp) { + ir_graph *irg; ir_node *cast, *null, *new_null; int cast_pos, null_pos; ir_type *fromtype; @@ -443,9 +446,10 @@ static int remove_Cmp_Null_cast(ir_node *cmp) return 0; /* Transform Cmp */ + irg = get_irn_irg(cmp); set_irn_n(cmp, cast_pos, get_Cast_op(cast)); fromtype = get_irn_typeinfo_type(get_Cast_op(cast)); - new_null = new_Const_type(get_Const_tarval(null), fromtype); + new_null = new_r_Const(irg, get_Const_tarval(null)); set_irn_typeinfo_type(new_null, fromtype); set_irn_n(cmp, null_pos, new_null); ++n_casts_removed; @@ -473,8 +477,10 @@ void optimize_class_casts(void) { int changed; +#if 0 if (get_irp_typeinfo_state() != ir_typeinfo_consistent) simple_analyse_types(); +#endif changed = 0; all_irg_walk(NULL, irn_optimize_class_cast, &changed);