re PR middle-end/24750 (global-alloc (reload) trips over own confusion for unexpected addressing modes)

PR middle-end/24750
	* reload.c (find_reloads_address_1) <case TRUNCATE, SIGN_EXTEND,
	ZERO_EXTEND>: New cases.

From-SVN: r106804
This commit is contained in:
Hans-Peter Nilsson 2005-11-11 23:17:16 +00:00 committed by Hans-Peter Nilsson
parent b4f05423f4
commit 19fe122f94
2 changed files with 24 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2005-11-12 Hans-Peter Nilsson <hp@axis.com>
PR middle-end/24750
* reload.c (find_reloads_address_1) <case TRUNCATE, SIGN_EXTEND,
ZERO_EXTEND>: New cases.
2005-11-11 Daniel Jacobowitz <dan@codesourcery.com>
* longlong.h (__clz_tab): Always provide.

View File

@ -5695,6 +5695,24 @@ find_reloads_address_1 (enum machine_mode mode, rtx x, int context,
}
return 0;
case TRUNCATE:
case SIGN_EXTEND:
case ZERO_EXTEND:
/* Look for parts to reload in the inner expression and reload them
too, in addition to this operation. Reloading all inner parts in
addition to this one shouldn't be necessary, but at this point,
we don't know if we can possibly omit any part that *can* be
reloaded. Targets that are better off reloading just either part
(or perhaps even a different part of an outer expression), should
define LEGITIMIZE_RELOAD_ADDRESS. */
find_reloads_address_1 (GET_MODE (XEXP (x, 0)), XEXP (x, 0),
context, &XEXP (x, 0), opnum,
type, ind_levels, insn);
push_reload (x, NULL_RTX, loc, (rtx*) 0,
context_reg_class,
GET_MODE (x), VOIDmode, 0, 0, opnum, type);
return 1;
case MEM:
/* This is probably the result of a substitution, by eliminate_regs, of
an equivalent address for a pseudo that was not allocated to a hard