X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fconvopt.c;h=43ac2d90aa2ae1ed236eb84ad6d10965b6f841e0;hb=a619ce99e40de4eb4481a590970a881e9f24627a;hp=2325115c7bdd5719456c89f1ea8678236ca29f5a;hpb=d501fb30e5d89722c1066c9b8da9bb3eb599c77f;p=libfirm diff --git a/ir/opt/convopt.c b/ir/opt/convopt.c index 2325115c7..43ac2d90a 100644 --- a/ir/opt/convopt.c +++ b/ir/opt/convopt.c @@ -138,6 +138,12 @@ static int get_conv_costs(const ir_node *node, ir_mode *dest_mode) } if (is_Conv(node)) { + ir_node *pred = get_Conv_op(node); + ir_mode *pred_mode = get_irn_mode(pred); + + if (!values_in_mode(dest_mode, pred_mode)) { + return 1; + } return get_conv_costs(get_Conv_op(node), dest_mode) - 1; } @@ -197,6 +203,12 @@ static ir_node *conv_transform(ir_node *node, ir_mode *dest_mode) } if (is_Conv(node)) { + ir_node *pred = get_Conv_op(node); + ir_mode *pred_mode = get_irn_mode(pred); + + if (!values_in_mode(dest_mode, pred_mode)) { + return place_conv(node, dest_mode); + } return conv_transform(get_Conv_op(node), dest_mode); } @@ -229,7 +241,7 @@ static void try_optimize_cmp(ir_node *node) ir_node *right = get_Cmp_right(node); ir_node *conv = NULL; - if(is_downconv + if (is_downconv } #endif @@ -243,7 +255,7 @@ static void conv_opt_walker(ir_node *node, void *data) bool *changed = data; #if 0 - if(is_Cmp(node)) { + if (is_Cmp(node)) { try_optimize_cmp(node); return; } @@ -302,8 +314,8 @@ 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); - // safe to run parallel on all irgs - path->run_parallel = 1; + /* safe to run parallel on all irgs */ + ir_graph_pass_set_parallel(path, 1); return path; }