diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-11-05 11:02:07 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-11-05 11:02:07 -0500 |
commit | 85e4d983f32f0001b2419b024fa8660dea2deac5 (patch) | |
tree | 868f4d0fb2bfe5cdc177627688e55558e3f2e033 /gcc | |
parent | 8cb3db079c44e3deddfade27cc6cd1343aae98cd (diff) | |
download | gcc-85e4d983f32f0001b2419b024fa8660dea2deac5.zip gcc-85e4d983f32f0001b2419b024fa8660dea2deac5.tar.gz gcc-85e4d983f32f0001b2419b024fa8660dea2deac5.tar.bz2 |
(invalidate): For a pseudo register, do a loop to invalidate all table
entries, irrespective of mode.
From-SVN: r10556
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cse.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -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 |