From 0ea7d6cd4827cc17403abda7d72dde690a0f765d Mon Sep 17 00:00:00 2001 From: wilson Date: Wed, 5 Feb 1997 00:29:03 +0000 Subject: [PATCH] (find_reloads_address_1, case POST_INC): Don't use ADDR_TYPE here. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@13608 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/reload.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gcc/reload.c b/gcc/reload.c index f1b79234c27..a15e41211c7 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -4855,9 +4855,12 @@ find_reloads_address_1 (mode, x, context, loc, opnum, type, ind_levels) if (reg_equiv_address[regno] != 0) { rtx tem = make_memloc (XEXP (x, 0), regno); - /* First reload the memory location's address. */ + /* First reload the memory location's address. + We can't use ADDR_TYPE (type) here, because we need to + write back the value after reading it, hence we actually + need two registers. */ find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0), - &XEXP (tem, 0), opnum, ADDR_TYPE (type), + &XEXP (tem, 0), opnum, type, ind_levels); /* Put this inside a new increment-expression. */ x = gen_rtx (GET_CODE (x), GET_MODE (x), tem); @@ -4924,9 +4927,12 @@ find_reloads_address_1 (mode, x, context, loc, opnum, type, ind_levels) Note that this is actually conservative: it would be slightly more efficient to use the value of SPILL_INDIRECT_LEVELS from reload1.c here. */ + /* We can't use ADDR_TYPE (type) here, because we need to + write back the value after reading it, hence we actually + need two registers. */ find_reloads_address (GET_MODE (x), &XEXP (x, 0), XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0), - opnum, ADDR_TYPE (type), ind_levels); + opnum, type, ind_levels); reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR, (context -- 2.11.4.GIT