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
This commit is contained in:
parent
d96283a052
commit
12c2b0adb1
@ -1,3 +1,9 @@
|
||||
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>
|
||||
|
||||
PR lto/45089
|
||||
|
@ -1409,6 +1409,31 @@ reload_combine_note_store (rtx dst, const_rtx set, void *data ATTRIBUTE_UNUSED)
|
||||
GET_MODE (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))
|
||||
return;
|
||||
regno += REGNO (dst);
|
||||
|
@ -1,3 +1,8 @@
|
||||
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>
|
||||
|
||||
PR middle-end/31490
|
||||
|
25
gcc/testsuite/gfortran.dg/pr46297.f
Normal file
25
gcc/testsuite/gfortran.dg/pr46297.f
Normal file
@ -0,0 +1,25 @@
|
||||
! { 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
|
Loading…
Reference in New Issue
Block a user