* flow.c (update_life_info): Ignore return value of cleanup_cfg.
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Apr 2002 22:11:39 +0000 (22:11 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Apr 2002 22:11:39 +0000 (22:11 +0000)
Mask out PROP_SCAN_DEAD_CODE | PROP_KILL_DEAD_CODE in
propagate_block calls after relaxation loop using new variable
stabilized_prop_flags.

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

gcc/ChangeLog
gcc/flow.c

index 7b71e96..742f308 100644 (file)
@@ -1,3 +1,10 @@
+2002-04-18  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * flow.c (update_life_info): Ignore return value of cleanup_cfg.
+       Mask out PROP_SCAN_DEAD_CODE | PROP_KILL_DEAD_CODE in
+       propagate_block calls after relaxation loop using new variable
+       stabilized_prop_flags.
+
 2002-04-18  Richard Henderson  <rth@redhat.com>
 
        * config/ia64/ia64.c (ia64_function_arg_pass_by_reference): New.
index 627c285..380c3d3 100644 (file)
@@ -637,6 +637,7 @@ update_life_info (blocks, extent, prop_flags)
   regset tmp;
   regset_head tmp_head;
   int i;
+  int stabilized_prop_flags = prop_flags;
 
   tmp = INITIALIZE_REG_SET (tmp_head);
   ndead = 0;
@@ -677,8 +678,21 @@ update_life_info (blocks, extent, prop_flags)
                                              | PROP_KILL_DEAD_CODE));
            }
 
-         if (! changed || ! cleanup_cfg (CLEANUP_EXPENSIVE))
+         /* Don't pass PROP_SCAN_DEAD_CODE or PROP_KILL_DEAD_CODE to
+            subsequent propagate_block calls, since removing or acting as
+            removing dead code can affect global register liveness, which
+            is supposed to be finalized for this call after this loop.  */
+         stabilized_prop_flags
+           &= ~(PROP_SCAN_DEAD_CODE | PROP_KILL_DEAD_CODE);
+
+         if (! changed)
            break;
+
+         /* We repeat regardless of what cleanup_cfg says.  If there were
+            instructions deleted above, that might have been only a
+            partial improvement (see MAX_MEM_SET_LIST_LEN usage).
+            Further improvement may be possible.  */
+         cleanup_cfg (CLEANUP_EXPENSIVE);
        }
 
       /* If asked, remove notes from the blocks we'll update.  */
@@ -697,7 +711,7 @@ update_life_info (blocks, extent, prop_flags)
          basic_block bb = BASIC_BLOCK (i);
 
          COPY_REG_SET (tmp, bb->global_live_at_end);
-         propagate_block (bb, tmp, NULL, NULL, prop_flags);
+         propagate_block (bb, tmp, NULL, NULL, stabilized_prop_flags);
 
          if (extent == UPDATE_LIFE_LOCAL)
            verify_local_live_at_start (tmp, bb);
@@ -710,7 +724,8 @@ update_life_info (blocks, extent, prop_flags)
          basic_block bb = BASIC_BLOCK (i);
 
          COPY_REG_SET (tmp, bb->global_live_at_end);
-         propagate_block (bb, tmp, NULL, NULL, prop_flags);
+
+         propagate_block (bb, tmp, NULL, NULL, stabilized_prop_flags);
 
          if (extent == UPDATE_LIFE_LOCAL)
            verify_local_live_at_start (tmp, bb);