cse.c (cse_extended_basic_block): Invalidate artificial defs at bb start.
authorAndreas Krebbel <krebbel1@de.ibm.com>
Thu, 6 Mar 2008 11:35:30 +0000 (11:35 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Thu, 6 Mar 2008 11:35:30 +0000 (11:35 +0000)
2008-03-06  Andreas Krebbel  <krebbel1@de.ibm.com>

* cse.c (cse_extended_basic_block): Invalidate artificial defs
at bb start.

From-SVN: r132968

gcc/ChangeLog
gcc/cse.c

index 6b9744772a2e3d760bc393ac5d2ab98915f674de..f87ec3b28a4327d55215b438a97b7f0fafbc67f9 100644 (file)
@@ -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
index 9f31e670966845091706898c8ff021962cd6bf85..82ea2b70da1953d8440fdba3bd4f3a58dfaf4bf1 100644 (file)
--- 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