aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-11-27 23:52:02 +0000
committerRichard Stallman <rms@gnu.org>1992-11-27 23:52:02 +0000
commit5aa14feece79853511c91875f7d04f12e597bad1 (patch)
tree5bc8437c79bc7f7c6fc348cb875a6f41eae71e69
parent33f3c4c086412f634fc1f7dd22b50a162c09a0a1 (diff)
downloadgcc-5aa14feece79853511c91875f7d04f12e597bad1.zip
gcc-5aa14feece79853511c91875f7d04f12e597bad1.tar.gz
gcc-5aa14feece79853511c91875f7d04f12e597bad1.tar.bz2
(find_reloads) [SMALL_REGISTER_CLASSES]:
Don't use preferred_class for a multiword register. From-SVN: r2815
-rw-r--r--gcc/reload.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index c4f46bf..d440eeb 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -2685,11 +2685,18 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
Don't bother with this if this alternative will accept this
operand.
+ Don't do this for a multiword operand, if
+ we have to worry about small classes, because making reg groups
+ harder to allocate is asking for trouble.
+
Don't do this if the preferred class has only one register
because we might otherwise exhaust the class. */
if (! win && this_alternative[i] != (int) NO_REGS
+#ifdef SMALL_REGISTER_CLASSES
+ && GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
+#endif
&& reg_class_size[(int) preferred_class[i]] > 1)
{
if (! reg_class_subset_p (this_alternative[i],