OSDN Git Service

* tree-ssa-live.c (remove_unused_scope_block_p): Keep variables
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Jun 2009 05:52:03 +0000 (05:52 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Jun 2009 05:52:03 +0000 (05:52 +0000)
that have value exprs.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148161 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 5cc21e4..2190c0f 100644 (file)
@@ -1,5 +1,10 @@
 2009-06-04  Alexandre Oliva  <aoliva@redhat.com>
 
+       * tree-ssa-live.c (remove_unused_scope_block_p): Keep variables
+       that have value exprs.
+
+2009-06-04  Alexandre Oliva  <aoliva@redhat.com>
+
        * dwarf2asm.c (dw2_force_const_mem): Defer creation of
        declarations for constants until...
        (dw2_output_indirect_constant_1): ... this point.
index a02b1c5..c7366ff 100644 (file)
@@ -435,6 +435,17 @@ remove_unused_scope_block_p (tree scope)
         will be output to file.  */
       if (TREE_CODE (*t) == FUNCTION_DECL)
        unused = false;
+
+      /* If a decl has a value expr, we need to instantiate it
+        regardless of debug info generation, to avoid codegen
+        differences in memory overlap tests.  update_equiv_regs() may
+        indirectly call validate_equiv_mem() to test whether a
+        SET_DEST overlaps with others, and if the value expr changes
+        by virtual register instantiation, we may get end up with
+        different results.  */
+      else if (TREE_CODE (*t) == VAR_DECL && DECL_HAS_VALUE_EXPR_P (*t))
+       unused = false;
+
       /* Remove everything we don't generate debug info for.  */
       else if (DECL_IGNORED_P (*t))
        {