Commit 12c2b0ad by Jeff Law Committed by Jeff Law

re PR middle-end/46297 (gfortran.dg/g77/980701-0.f FAILs with -Os -fno-asynchronous-unwind-tables)


	PR middle-end-optimization/46297
	* postreload.c (reload_combine_note_store): Deal with embedded
	side effects in MEM expressions.

	* gfortran.dg/pr46297.f: New test.

From-SVN: r166905
parent d96283a0
2010-11-18 Jeff Law <law@redhat.com>
PR middle-end-optimization/46297
* postreload.c (reload_combine_note_store): Deal with embedded
side effects in MEM expressions.
2010-11-18 Richard Guenther <rguenther@suse.de> 2010-11-18 Richard Guenther <rguenther@suse.de>
PR lto/45089 PR lto/45089
...@@ -1409,6 +1409,31 @@ reload_combine_note_store (rtx dst, const_rtx set, void *data ATTRIBUTE_UNUSED) ...@@ -1409,6 +1409,31 @@ reload_combine_note_store (rtx dst, const_rtx set, void *data ATTRIBUTE_UNUSED)
GET_MODE (dst)); GET_MODE (dst));
dst = SUBREG_REG (dst); dst = SUBREG_REG (dst);
} }
/* Some targets do argument pushes without adding REG_INC notes. */
if (MEM_P (dst))
{
dst = XEXP (dst, 0);
if (GET_CODE (dst) == PRE_INC || GET_CODE (dst) == POST_INC
|| GET_CODE (dst) == PRE_DEC || GET_CODE (dst) == POST_DEC)
{
regno = REGNO (XEXP (dst, 0));
mode = GET_MODE (XEXP (dst, 0));
for (i = hard_regno_nregs[regno][mode] - 1 + regno; i >= regno; i--)
{
/* We could probably do better, but for now mark the register
as used in an unknown fashion and set/clobbered at this
insn. */
reg_state[i].use_index = -1;
reg_state[i].store_ruid = reload_combine_ruid;
reg_state[i].real_store_ruid = reload_combine_ruid;
}
}
else
return;
}
if (!REG_P (dst)) if (!REG_P (dst))
return; return;
regno += REGNO (dst); regno += REGNO (dst);
......
2010-11-18 Jeff Law <law@redhat.com>
PR middle-end-optimization/46297
* gfortran.dg/pr46297.f: New test.
2010-11-17 Steve Ellcey <sje@cup.hp.com> 2010-11-17 Steve Ellcey <sje@cup.hp.com>
PR middle-end/31490 PR middle-end/31490
......
! { dg-options "-Os -fno-asynchronous-unwind-tables" }
! { dg-do run }
real r1(5), r2(5), r3(5)
real s1(2), s2(2), s3(2)
double precision d1, d2, d3
equivalence (r3, s3(2))
equivalence (d3, r3(2))
s1(1) = 1.
s3(1) = 3.
r3(1) = 3.
d3 = 30.
i3 = 3
call x (s1, r1, d1, i1, s2, r2, d2, i2, s3, r3, d3, i3)
end
subroutine x (s1, r1, d1, i1, s2, r2, d2, i2, s3, r3, d3, i3)
real r1(5), r2(5), r3(5)
real s1(2), s2(2), s3(2)
double precision d1, d2, d3
if (s1(1) .ne. 1.) call abort
if (s3(1) .ne. 3.) call abort
if (r3(1) .ne. 3.) call abort
if (d3 .ne. 30.) call abort
if (i3 .ne. 3) call abort
end
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