2014-12-10 Richard Biener <rguenther@suse.de>
authorRichard Biener <rguenther@suse.de>
Wed, 10 Dec 2014 14:20:43 +0000 (14:20 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 10 Dec 2014 14:20:43 +0000 (14:20 +0000)
 * tree-ssa-loop-im.c
 (move_computations_dom_walker::before_dom_children): Clear
 SSA_NAME_RANGE_INFO on moved stmts.

From-SVN: r218580

gcc/ChangeLog
gcc/tree-ssa-loop-im.c

index c74adfae2bc2eee625ab0f0d638cbeaa661cf282..e397df830a5f743f78964ea321997b458686496c 100644 (file)
@@ -1,3 +1,9 @@
+2014-12-10  Richard Biener  <rguenther@suse.de>
+
+        * 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  <mliska@suse.cz>
 
        * sreal.c (sreal::shift_right): New implementation
index 2c676e379407f9e5ab67f330090cf8de891442f8..9c0186d2df053245d12fe980160a5090a57712de 100644 (file)
@@ -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