OSDN Git Service

* expr.c (expand_expr, case ARRAY_REF): Do not replace
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 Jun 2001 23:08:05 +0000 (23:08 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 Jun 2001 23:08:05 +0000 (23:08 +0000)
an array element with the known initializing value if it has
side-effects.

* toplev.c (rest_of_compilation): Remove dead code before
purge_addressof.

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

gcc/ChangeLog
gcc/expr.c
gcc/toplev.c

index b21874b..3c0d4a5 100644 (file)
@@ -1,3 +1,12 @@
+2001-06-09  Mark Mitchell  <mark@codesourcery.com>
+
+       * expr.c (expand_expr, case ARRAY_REF): Do not replace
+       an array element with the known initializing value if it has
+       side-effects.
+
+       * toplev.c (rest_of_compilation): Remove dead code before
+       purge_addressof.
+       
 2001-06-09  Neil Booth  <neil@daikokuya.demon.co.uk>
 
        * cppinit.c (print_help): Document -fpreprocessed.
index 732b110..a7b0ff4 100644 (file)
@@ -6891,7 +6891,7 @@ expand_expr (exp, target, tmode, modifier)
                         elem = TREE_CHAIN (elem))
                      ;
 
-                   if (elem)
+                   if (elem && !TREE_SIDE_EFFECTS (elem))
                      return expand_expr (fold (TREE_VALUE (elem)), target,
                                          tmode, ro_modifier);
                  }
index 0e197cc..2b75aa2 100644 (file)
@@ -3031,6 +3031,16 @@ rest_of_compilation (decl)
          timevar_pop (TV_JUMP);
        }
 
+      /* It's important to remove dead code before we call
+        purge_addressof.  Sometimes, the only ADDRESSOFs for a REG
+        will be dead, and if we don't get rid of them, we will end up
+        committing ourselves to dumping the REG to the stack
+        unnecessarily.  */
+      find_basic_blocks (insns, max_reg_num (), rtl_dump_file);
+      cleanup_cfg ();
+      life_analysis (insns, rtl_dump_file, 
+                    PROP_SCAN_DEAD_CODE | PROP_KILL_DEAD_CODE);
+      
       /* The second pass of jump optimization is likely to have
          removed a bunch more instructions.  */
       renumber_insns (rtl_dump_file);