X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fopt%2Fconvopt.c;h=ee9b382dea5e18b337f502d2af0cef70568e3629;hb=04d455ab69c9d1549305ccbd6f97eb802db91ff4;hp=32556e2564b4a31df25a844fd10dc59b315ee019;hpb=4ebb78a2be2a05ab9ada73a50aae9269a78f1b3e;p=libfirm diff --git a/ir/opt/convopt.c b/ir/opt/convopt.c index 32556e256..ee9b382de 100644 --- a/ir/opt/convopt.c +++ b/ir/opt/convopt.c @@ -21,7 +21,6 @@ * @file * @brief conv node optimisation * @author Matthias Braun, Christoph Mallon - * @version $Id$ * * Try to minimize the number of conv nodes by changing modes of operations. * The typical example is the following structure: @@ -54,7 +53,6 @@ #include "irpass_t.h" #include "tv.h" #include "vrp.h" -#include "opt_manage.h" DEBUG_ONLY(static firm_dbg_module_t *dbg;) @@ -299,52 +297,36 @@ static void conv_opt_walker(ir_node *node, void *data) transformed = conv_transform(pred, mode); if (node != transformed) { - vrp_attr *vrp; - exchange(node, transformed); - vrp = vrp_get_info(transformed); - if (vrp && vrp->valid) { - vrp->range_type = VRP_VARYING; - vrp->bits_set = tarval_convert_to(vrp->bits_set, mode); - vrp->bits_not_set = tarval_convert_to(vrp->bits_not_set, mode); - } - *changed = true; } } -static ir_graph_state_t do_deconv(ir_graph *irg) +void conv_opt(ir_graph *irg) { + bool global_changed = false; bool changed; FIRM_DBG_REGISTER(dbg, "firm.opt.conv"); + assure_irg_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_OUT_EDGES); + DB((dbg, LEVEL_1, "===> Performing conversion optimization on %+F\n", irg)); do { changed = false; irg_walk_graph(irg, NULL, conv_opt_walker, &changed); local_optimize_graph(irg); + global_changed |= changed; } while (changed); - return 0; -} - -optdesc_t opt_deconv = { - "deconv", - IR_GRAPH_STATE_CONSISTENT_OUT_EDGES, - do_deconv, -}; - -int conv_opt(ir_graph *irg) -{ - perform_irg_optimization(irg, &opt_deconv); - return 1; + confirm_irg_properties(irg, + global_changed ? IR_GRAPH_PROPERTIES_NONE : IR_GRAPH_PROPERTIES_ALL); } /* Creates an ir_graph pass for conv_opt. */ ir_graph_pass_t *conv_opt_pass(const char *name) { - ir_graph_pass_t *path = def_graph_pass_ret(name ? name : "conv_opt", conv_opt); + ir_graph_pass_t *path = def_graph_pass(name ? name : "conv_opt", conv_opt); /* safe to run parallel on all irgs */ ir_graph_pass_set_parallel(path, 1);