From 330ce56e9706c62150a51f6cdbe25763e487aa08 Mon Sep 17 00:00:00 2001 From: bernds Date: Mon, 26 Apr 2010 21:17:17 +0000 Subject: [PATCH] * df-problems.c (df_simulate_initialize_forwards): Set, don't clear, bits for artificial defs at the top of the block. * fwprop.c (single_def_use_enter_block): Don't call it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158750 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/df-problems.c | 12 ++++-------- gcc/fwprop.c | 5 ++++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 184dd50..3612d90 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-04-26 Bernd Schmidt + + * df-problems.c (df_simulate_initialize_forwards): Set, don't clear, + bits for artificial defs at the top of the block. + * fwprop.c (single_def_use_enter_block): Don't call it. + 2010-04-26 Jack Howarth PR 43715 diff --git a/gcc/df-problems.c b/gcc/df-problems.c index fb89909..dbb469e 100644 --- a/gcc/df-problems.c +++ b/gcc/df-problems.c @@ -3913,13 +3913,9 @@ df_simulate_finalize_backwards (basic_block bb, bitmap live) the block, starting with the first one. ----------------------------------------------------------------------------*/ -/* Apply the artificial uses and defs at the top of BB in a forwards - direction. ??? This is wrong; defs mark the point where a pseudo - becomes live when scanning forwards (unless a def is unused). Since - there are no REG_UNUSED notes for artificial defs, passes that - require artificial defs probably should not call this function - unless (as is the case for fwprop) they are correct when liveness - bitmaps are *under*estimated. */ +/* Initialize the LIVE bitmap, which should be copied from DF_LIVE_IN or + DF_LR_IN for basic block BB, for forward scanning by marking artificial + defs live. */ void df_simulate_initialize_forwards (basic_block bb, bitmap live) @@ -3931,7 +3927,7 @@ df_simulate_initialize_forwards (basic_block bb, bitmap live) { df_ref def = *def_rec; if (DF_REF_FLAGS (def) & DF_REF_AT_TOP) - bitmap_clear_bit (live, DF_REF_REGNO (def)); + bitmap_set_bit (live, DF_REF_REGNO (def)); } } diff --git a/gcc/fwprop.c b/gcc/fwprop.c index 7ac64aa..6e65093 100644 --- a/gcc/fwprop.c +++ b/gcc/fwprop.c @@ -228,7 +228,10 @@ single_def_use_enter_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, process_uses (df_get_artificial_uses (bb_index), DF_REF_AT_TOP); process_defs (df_get_artificial_defs (bb_index), DF_REF_AT_TOP); - df_simulate_initialize_forwards (bb, local_lr); + + /* We don't call df_simulate_initialize_forwards, as it may overestimate + the live registers if there are unused artificial defs. We prefer + liveness to be underestimated. */ FOR_BB_INSNS (bb, insn) if (INSN_P (insn)) -- 2.7.4