From ff428c90a4e07be5b2d9398a3555a05628a49290 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 23 Oct 1996 22:01:23 +0000 Subject: Accept a unary operator in find_reloads From-SVN: r13016 --- gcc/reload.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'gcc/reload.c') diff --git a/gcc/reload.c b/gcc/reload.c index 5f72b14..049c3a0 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -2533,9 +2533,10 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) ind_levels, set != 0 && &SET_DEST (set) == recog_operand_loc[i]); - else if (code == PLUS) - /* We can get a PLUS as an "operand" as a result of - register elimination. See eliminate_regs and gen_reload. */ + else if (code == PLUS || GET_RTX_CLASS (code) == '1') + /* We can get a PLUS as an "operand" as a result of register + elimination. See eliminate_regs and gen_reload. We handle + a unary operator by reloading the operand. */ substed_operand[i] = recog_operand[i] = *recog_operand_loc[i] = find_reloads_toplev (recog_operand[i], i, address_type[i], ind_levels, 0); @@ -2674,6 +2675,11 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) int constmemok = 0; int earlyclobber = 0; + /* If the predicate accepts a unary operator, it means that + we need to reload the operand. */ + if (GET_RTX_CLASS (GET_CODE (operand)) == '1') + operand = XEXP (operand, 0); + /* If the operand is a SUBREG, extract the REG or MEM (or maybe even a constant) within. (Constants can occur as a result of reg_equiv_constant.) */ -- cgit v1.1