[Bug rtl-optimization/64164] [4.9/5 Regression] one more stack slot used due to one less inlining level
aoliva at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Mar 17 17:18:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64164
Alexandre Oliva <aoliva at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |aoliva at gcc dot gnu.org
--- Comment #6 from Alexandre Oliva <aoliva at gcc dot gnu.org> ---
The problem starts in the first copyrename pass. We refrain from coalescing
variables if neither has a usable root. This causes us to fail to coalesce
partitions that we would coalesce if only we tried them in a different order
(i.e., P1 and P2 fail but either one coalesces with P3, and then the other
would coalesce with that union). This is exactly what happens in AO_myload
with -DOPT: partitions _3 and _6 won't coalesce, and then result_4 and _6
coalesce, which would enable _3 to coalesce too. This in turn brings
additional rootless variables into stm_load, which again fail to coalesce
because we try them first (_36 and _4 fails, and l_11 and _36 passes, so that
with _4 would work). Without -DOPT, we succeed in coalescing result (there are
fewer SSA names), and when that is inlined, it gets there with a root symbol,
so that coalescing of _36 and result_4 succeeds. In both cases, we coalesce
l_11 with result_36, and it is precisely because _4 remains separate that we
end up introducing copies in new blocks when going out of SSA into RTL.
Coalescing SSA names even when neither has a root removes the optimization
differences for this testcase.
More information about the Gcc-bugs
mailing list