From: Richard Biener Date: Wed, 10 Dec 2014 14:20:43 +0000 (+0000) Subject: 2014-12-10 Richard Biener X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=07faade69ff47c3479d8fc1664f322681038ba42;p=gcc.git 2014-12-10 Richard Biener * tree-ssa-loop-im.c (move_computations_dom_walker::before_dom_children): Clear SSA_NAME_RANGE_INFO on moved stmts. From-SVN: r218580 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c74adfae2bc..e397df830a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-12-10 Richard Biener + + * tree-ssa-loop-im.c + (move_computations_dom_walker::before_dom_children): Clear + SSA_NAME_RANGE_INFO on moved stmts. + 2014-12-10 Martin Liska * sreal.c (sreal::shift_right): New implementation diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index 2c676e37940..9c0186d2df0 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -1232,6 +1232,11 @@ move_computations_dom_walker::before_dom_children (basic_block bb) COND_EXPR, t, arg0, arg1); todo_ |= TODO_cleanup_cfg; } + if (INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (new_stmt))) + && (!ALWAYS_EXECUTED_IN (bb) + || (ALWAYS_EXECUTED_IN (bb) != level + && !flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level)))) + SSA_NAME_RANGE_INFO (gimple_assign_lhs (new_stmt)) = NULL; gsi_insert_on_edge (loop_preheader_edge (level), new_stmt); remove_phi_node (&bsi, false); } @@ -1291,6 +1296,13 @@ move_computations_dom_walker::before_dom_children (basic_block bb) } } gsi_remove (&bsi, false); + if (gimple_has_lhs (stmt) + && TREE_CODE (gimple_get_lhs (stmt)) == SSA_NAME + && INTEGRAL_TYPE_P (TREE_TYPE (gimple_get_lhs (stmt))) + && (!ALWAYS_EXECUTED_IN (bb) + || !(ALWAYS_EXECUTED_IN (bb) == level + || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level)))) + SSA_NAME_RANGE_INFO (gimple_get_lhs (stmt)) = NULL; /* In case this is a stmt that is not unconditionally executed when the target loop header is executed and the stmt may invoke undefined integer or pointer overflow rewrite it to