diff options
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/flow.c | 14 |
2 files changed, 20 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ef3fed8..4c89201 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2003-01-30 Richard Henderson <rth@redhat.com> + + * flow.c (update_life_info): Zap life info after cleanup_cfg. + (regno_uninitialized): Use correct live at function entry set. + (regno_clobbered_at_setjmp): Likewise. + + * expr.c (store_expr): Promote all MEM intermediates to regs. + 2003-01-30 Kazu Hirata <kazu@cs.umass.edu> * config/arm/arm.c: Fix comment typos. @@ -693,6 +693,16 @@ update_life_info (blocks, extent, prop_flags) partial improvement (see MAX_MEM_SET_LIST_LEN usage). Further improvement may be possible. */ cleanup_cfg (CLEANUP_EXPENSIVE); + + /* Zap the life information from the last round. If we don't + do this, we can wind up with registers that no longer appear + in the code being marked live at entry, which twiggs bogus + warnings from regno_uninitialized. */ + FOR_EACH_BB (bb) + { + CLEAR_REG_SET (bb->global_live_at_start); + CLEAR_REG_SET (bb->global_live_at_end); + } } /* If asked, remove notes from the blocks we'll update. */ @@ -2379,7 +2389,7 @@ regno_uninitialized (regno) || FUNCTION_ARG_REGNO_P (regno)))) return 0; - return REGNO_REG_SET_P (ENTRY_BLOCK_PTR->next_bb->global_live_at_start, regno); + return REGNO_REG_SET_P (ENTRY_BLOCK_PTR->global_live_at_end, regno); } /* 1 if register REGNO was alive at a place where `setjmp' was called @@ -2394,7 +2404,7 @@ regno_clobbered_at_setjmp (regno) return 0; return ((REG_N_SETS (regno) > 1 - || REGNO_REG_SET_P (ENTRY_BLOCK_PTR->next_bb->global_live_at_start, regno)) + || REGNO_REG_SET_P (ENTRY_BLOCK_PTR->global_live_at_end, regno)) && REGNO_REG_SET_P (regs_live_at_setjmp, regno)); } |