From cdd1f01b226e72952c62b46cabd487e930b1cd8f Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 30 Jan 2003 22:52:48 -0800 Subject: [PATCH] flow.c (update_life_info): Zap life info after cleanup_cfg. * 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. From-SVN: r62172 --- gcc/ChangeLog | 8 ++++++++ gcc/flow.c | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ef3fed8e049..4c8920154c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2003-01-30 Richard Henderson + + * 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 * config/arm/arm.c: Fix comment typos. diff --git a/gcc/flow.c b/gcc/flow.c index 5e51818de0b..24f869153c0 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -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)); } -- 2.30.2