aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cse.c5
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a83fdf5..5b45aab 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2001-07-02 Geoffrey Keating <geoffk@redhat.com>
+
+ * cse.c (canon_hash): Don't register registers in very small
+ register classes, as extending their lifetime might cause
+ reload to fail.
+
Mon Jul 2 23:14:00 CEST 2001 Jan Hubicka <jh@suse.cz>
* flow.c (try_redirect_by_replacing_jump): Remove cc0 setter.
diff --git a/gcc/cse.c b/gcc/cse.c
index bc4a05a..87694a1 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -2266,10 +2266,13 @@ canon_hash (x, mode)
failure to do so leads to failure to simplify 0<100 type of
conditionals.
- On all machines, we can't record any global registers. */
+ On all machines, we can't record any global registers.
+ Nor should we record any register that is in a small
+ class, as defined by CLASS_LIKELY_SPILLED_P. */
if (regno < FIRST_PSEUDO_REGISTER
&& (global_regs[regno]
+ || CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (regno))
|| (SMALL_REGISTER_CLASSES
&& ! fixed_regs[regno]
&& regno != FRAME_POINTER_REGNUM