summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-06 11:35:30 +0000
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-06 11:35:30 +0000
commitb357aba8754853cacba93de212989197f4c3d01c (patch)
tree2c56878216d3ee70908c9fd34be3eeee9cc5af9f /gcc
parent1e02022790c8e38d964ec4ab692b063e4d7930fe (diff)
downloadgcc-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')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cse.c15
2 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6b9744772a2..f87ec3b28a4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2008-03-06 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * cse.c (cse_extended_basic_block): Invalidate artificial defs
+ at bb start.
+
2008-03-06 Richard Guenther <rguenther@suse.de>
* alias.c (struct alias_set_entry): Move has_zero_child field
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