From: Andreas Krebbel Date: Thu, 6 Mar 2008 11:35:30 +0000 (+0000) Subject: cse.c (cse_extended_basic_block): Invalidate artificial defs at bb start. X-Git-Tag: releases/gcc-4.4.0~6162 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e186ff694e3233b58c8b7d04e90f223f84b9d691;p=thirdparty%2Fgcc.git cse.c (cse_extended_basic_block): Invalidate artificial defs at bb start. 2008-03-06 Andreas Krebbel * cse.c (cse_extended_basic_block): Invalidate artificial defs at bb start. From-SVN: r132968 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6b9744772a2e..f87ec3b28a43 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-03-06 Andreas Krebbel + + * cse.c (cse_extended_basic_block): Invalidate artificial defs + at bb start. + 2008-03-06 Richard Guenther * alias.c (struct alias_set_entry): Move has_zero_child field diff --git a/gcc/cse.c b/gcc/cse.c index 9f31e6709668..82ea2b70da19 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -5992,6 +5992,21 @@ cse_extended_basic_block (struct cse_basic_block_data *ebb_data) int no_conflict = 0; bb = ebb_data->path[path_entry].bb; + + /* Invalidate recorded information for eh regs if there is an EH + edge pointing to that bb. */ + if (bb_has_eh_pred (bb)) + { + struct df_ref **def_rec; + + for (def_rec = df_get_artificial_defs (bb->index); *def_rec; def_rec++) + { + struct df_ref *def = *def_rec; + if (DF_REF_FLAGS (def) & DF_REF_AT_TOP) + invalidate (DF_REF_REG (def), GET_MODE (DF_REF_REG (def))); + } + } + FOR_BB_INSNS (bb, insn) { /* If we have processed 1,000 insns, flush the hash table to