[Bug middle-end/50628] [4.7 Regression] gfortran.fortran-torture/execute/entry_4.f90 fails
jamborm at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Nov 23 16:41:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50628
Martin Jambor <jamborm at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
AssignedTo|unassigned at gcc dot |jamborm at gcc dot gnu.org
|gnu.org |
--- Comment #11 from Martin Jambor <jamborm at gcc dot gnu.org> 2011-11-23 16:01:37 UTC ---
What happens in SRA is this. This a part of the dump before SRA
(ealias):
<bb 2>:
D.2127_5 = *a_1(D);
if (D.2127_5 > 0)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
D.2126_6 = D.2127_5 <= 45;
/* In the following statement SRA notices a logical access
to __result_master.1.f2. */
__result_master.1.f2.e2 = D.2126_6;
goto <bb 5>;
<bb 4>:
/* In the following statement SRA notices a complex access
to __result_master.1.f2. If a scalar type access has a scalar type
sub-access, they cannot be made into replacements. */
__result_master.1.f2.f2 = __complex__ (4.5e+1, 0.0);
<bb 5>:
/* However, before SRA figures that out, it propagates the logical
sub-accesses across the following aggregate assignment in order to
facilitate pseudo copy propagation of aggregates. Thus, D.2125 gets an
artificial logical sub-access which is a child of an aggregate and qualifies
for replacement creation. And that's why the weird logical variable gets
there. */
D.2125 = __result_master.1.f2;
__result_master.1.f2 ={v} {CLOBBER};
__result = D.2125;
D.2056_2 = __result.f2;
}
We should not do propagation of sub-accesses of scalar accesses because
that's never profitable and it would also fix this testcase.
However, I'm afraid that if we encapsulated
__result_master.1.f2.f2 = __complex__ (4.5e+1, 0.0);
into the union type and moved the last two statements of the function
into a different function, we would get the logical replacements of
__result_master.1.f2 and D.2125 again and might incur the same problems
(depending on whether FRE would be able to look through this).
SRA on unions and type-conversions is tough.
More information about the Gcc-bugs
mailing list