summaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1997-01-03 15:50:25 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1997-01-03 15:50:25 +0000
commit1a9223566bd2a3c6c0e29f3ad56b394bca344e79 (patch)
treefd09ee1b46c14ec6279c39002bce10d336464385 /gcc/reload.c
parenteb80a0f56d216d13ae81560887bc38e76a47601f (diff)
downloadgcc-1a9223566bd2a3c6c0e29f3ad56b394bca344e79.tar.gz
(find_reloads): If replaced a PLUS or MULT with a simple operand,
start over again. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@13360 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 6d8b2b9a5c4..f1674f705c0 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -1,5 +1,5 @@
/* Search an insn for pseudo regs that must be in hard regs and are not.
- Copyright (C) 1987, 88, 89, 92-5, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -2518,6 +2518,20 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
find_reloads_address (VOIDmode, NULL_PTR,
recog_operand[i], recog_operand_loc[i],
i, operand_type[i], ind_levels);
+
+ /* If we now have a simple operand where we used to have a
+ PLUS or MULT, re-recognize and try again. */
+ if ((GET_RTX_CLASS (GET_CODE (*recog_operand_loc[i])) == 'o'
+ || GET_CODE (*recog_operand_loc[i]) == SUBREG)
+ && (GET_CODE (recog_operand[i]) == MULT
+ || GET_CODE (recog_operand[i]) == PLUS))
+ {
+ INSN_CODE (insn) = -1;
+ find_reloads (insn, replace, ind_levels, live_known,
+ reload_reg_p);
+ return;
+ }
+
substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
}
else if (code == MEM)