diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1997-01-03 10:50:25 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1997-01-03 10:50:25 -0500 |
commit | b685dbaebcd1ac317b3095f251d6a55ad055fd27 (patch) | |
tree | fd09ee1b46c14ec6279c39002bce10d336464385 | |
parent | 161cca9adcb7e801eb24b0b0a2cc5014b492a174 (diff) | |
download | gcc-b685dbaebcd1ac317b3095f251d6a55ad055fd27.zip gcc-b685dbaebcd1ac317b3095f251d6a55ad055fd27.tar.gz gcc-b685dbaebcd1ac317b3095f251d6a55ad055fd27.tar.bz2 |
(find_reloads): If replaced a PLUS or MULT with a simple operand,
start over again.
From-SVN: r13360
-rw-r--r-- | gcc/reload.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/reload.c b/gcc/reload.c index 6d8b2b9..f1674f7 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) |