Commit 66592e95 by Alan Modra Committed by Alan Modra

[RELOAD] Don't assume subreg mem address is ok

This patch fixes a case where reload blindly assumes a subreg mem is
OK if its address has been partially reloaded by legitimize_reload_address.

	PR rtl-optimization/72771
	* reload.c (find_reloads): Don't assume that a subreg mem is OK
	when find_reloads_toplev returns address_reloaded==-1.
	(alternative_allows_const_pool_ref): Update comment.
testsuite/
	* gcc.c-torture/compile/pr72771.c: New.

From-SVN: r239549
parent 6fbf26cc
2016-08-18 Alan Modra <amodra@gmail.com>
PR rtl-optimization/72771
* reload.c (find_reloads): Don't assume that a subreg mem is OK
when find_reloads_toplev returns address_reloaded==-1.
(alternative_allows_const_pool_ref): Update comment.
2015-08-17 Alan Hayward <alan.hayward@arm.com>
PR tree-optimization/71752
......
......@@ -3961,7 +3961,7 @@ find_reloads (rtx_insn *insn, int replace, int ind_levels, int live_known,
there will be no reload needed at all. */
if (plus == NULL_RTX
&& subreg == NULL_RTX
&& alternative_allows_const_pool_ref (this_address_reloaded == 0
&& alternative_allows_const_pool_ref (this_address_reloaded != 1
? substed_operand[i]
: NULL,
recog_data.constraints[i],
......@@ -4606,8 +4606,8 @@ find_reloads (rtx_insn *insn, int replace, int ind_levels, int live_known,
/* Return true if alternative number ALTNUM in constraint-string
CONSTRAINT is guaranteed to accept a reloaded constant-pool reference.
MEM gives the reference if it didn't need any reloads, otherwise it
is null. */
MEM gives the reference if its address hasn't been fully reloaded,
otherwise it is NULL. */
static bool
alternative_allows_const_pool_ref (rtx mem ATTRIBUTE_UNUSED,
......
2016-08-18 Alan Modra <amodra@gmail.com>
* gcc.c-torture/compile/pr72771.c: New.
2016-08-17 Jakub Jelinek <jakub@redhat.com>
PR fortran/67496
......
void fn2(void);
void fn3(unsigned long);
signed char a;
int b, c, e, f;
float *d;
void fn1(void) {
unsigned short g = 0;
lbl_986:
for (;;) {
c = 0;
for (; c <= 2;) {
*d = g;
fn2();
if (e)
goto lbl_986;
}
g = 2;
for (; (short) g >= 0; g--) {
for (; b;) {
fn3(45360);
f = 0;
for (; a >= 0; a--)
;
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment