(invalidate): For a pseudo register, do a loop to invalidate all table
authorRichard Kenner <kenner@gcc.gnu.org>
Sun, 5 Nov 1995 16:02:07 +0000 (11:02 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Sun, 5 Nov 1995 16:02:07 +0000 (11:02 -0500)
entries, irrespective of mode.

From-SVN: r10556

gcc/cse.c

index 2c9ee2e6eab84a08bd025951be44de8ce4dac71e..7fa597e091d01bd3e355027f4acb5d0f340accf2 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -1536,7 +1536,15 @@ invalidate (x, full_mode)
       reg_tick[regno]++;
 
       if (regno >= FIRST_PSEUDO_REGISTER)
-       remove_from_table (lookup_for_remove (x, hash, GET_MODE (x)), hash);
+       {
+         /* Because a register can be referenced in more than one mode,
+            we might have to remove more than one table entry.  */
+
+         struct table_elt *elt;
+
+         while (elt = lookup_for_remove (x, hash, GET_MODE (x)))
+           remove_from_table (elt, hash);
+       }
       else
        {
          HOST_WIDE_INT in_table