diff options
author | krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-03-06 11:35:30 +0000 |
---|---|---|
committer | krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-03-06 11:35:30 +0000 |
commit | b357aba8754853cacba93de212989197f4c3d01c (patch) | |
tree | 2c56878216d3ee70908c9fd34be3eeee9cc5af9f /gcc/cse.c | |
parent | 1e02022790c8e38d964ec4ab692b063e4d7930fe (diff) | |
download | gcc-b357aba8754853cacba93de212989197f4c3d01c.tar.gz |
2008-03-06 Andreas Krebbel <krebbel1@de.ibm.com>
* cse.c (cse_extended_basic_block): Invalidate artificial defs
at bb start.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132968 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cse.c')
-rw-r--r-- | gcc/cse.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/cse.c b/gcc/cse.c index 9f31e670966..82ea2b70da1 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 |