tree-ssa-copy.c (stmt_may_generate_copy): Copies from constants also generate copies.
authorRichard Guenther <rguenther@suse.de>
Fri, 25 Mar 2011 16:28:15 +0000 (16:28 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 25 Mar 2011 16:28:15 +0000 (16:28 +0000)
2011-03-25  Richard Guenther  <rguenther@suse.de>

* tree-ssa-copy.c (stmt_may_generate_copy): Copies from constants
also generate copies.
(fini_copy_prop): Handle constant values properly.

From-SVN: r171465

gcc/ChangeLog
gcc/tree-ssa-copy.c

index 62299ae1a02da58c6c75c44964cd2354112f0de0..588651d7fa0d1e32b6b92f5032822ff0fb484323 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-25  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-copy.c (stmt_may_generate_copy): Copies from constants
+       also generate copies.
+       (fini_copy_prop): Handle constant values properly.
+
 2011-03-25  Jakub Jelinek  <jakub@redhat.com>
 
        * dwarf2out.c (mem_loc_descriptor) <case ZERO_EXTRACT>: Compare
index 8062c03369734f0d5be8606970bfe8480f5242d6..dbcbf9e5905c4b251f789fb9e88bb39e07dec63b 100644 (file)
@@ -315,8 +315,9 @@ stmt_may_generate_copy (gimple stmt)
   /* Otherwise, the only statements that generate useful copies are
      assignments whose RHS is just an SSA name that doesn't flow
      through abnormal edges.  */
-  return (gimple_assign_rhs_code (stmt) == SSA_NAME
-         && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (gimple_assign_rhs1 (stmt)));
+  return ((gimple_assign_rhs_code (stmt) == SSA_NAME
+          && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (gimple_assign_rhs1 (stmt)))
+         || is_gimple_min_invariant (gimple_assign_rhs1 (stmt)));
 }
 
 
@@ -771,6 +772,7 @@ fini_copy_prop (void)
         of the representative to the first solution we find if
         it doesn't have one already.  */
       if (copy_of[i].value != var
+         && TREE_CODE (copy_of[i].value) == SSA_NAME
          && POINTER_TYPE_P (TREE_TYPE (var))
          && SSA_NAME_PTR_INFO (var)
          && !SSA_NAME_PTR_INFO (copy_of[i].value))