V3: Address comments from Dimitar Dimitrov
These patches are used to add a new data flow DF_LIVE_SUBREG,
which will track subreg liveness and then apply it to IRA and LRA
passes (enabled via -O3 or -ftrack-subreg-liveness). These patches
are for GCC 15. And these codes are pushed to the devel/subreg-coalesce
branch. In addition, my colleague Shuo Chen will also be involved in some
of the remain work, thank you for your support.
These patches are separated from the subreg-coalesce patches submitted
a few months ago. I refactored the code according to comments. The next
patches will support subreg coalesce base on they. Here are some data
abot build time of SPEC INT 2017 (x86-64 target):
baseline baseline(+track-subreg-liveness)
specint2017 build time : 1892s 1883s
Regarding build times, I've run it a few times, but they all seem to take
much less time. Since the difference is small, it's possible that it's just
a change in environment. But it's theoretically possible, since supporting
subreg-liveness could have reduced the number of living regs.
For memory usage, I trided PR 69609 by valgrind, peak memory size grow from
2003910656 to 2003947520, very small increase.
Note that these patches don't enable register coalesce with subreg liveness in
IRA/LRA,
so no performance change as expected.
And we will enable register coalsece with subreg liveness tracking in the
followup patches.
Bootstrap and Regtested on x86-64 no regression.
Co-authored-by: Lehua Ding <[email protected]>
Juzhe-Zhong (4):
DF: Add -ftrack-subreg-liveness option
DF: Add DF_LIVE_SUBREG problem
IRA: Add DF_LIVE_SUBREG problem
LRA: Apply DF_LIVE_SUBREG data
gcc/Makefile.in | 1 +
gcc/common.opt | 4 +
gcc/common.opt.urls | 3 +
gcc/df-problems.cc | 886 ++++++++++++++++++++++++++++++++++++++-
gcc/df.h | 159 +++++++
gcc/doc/invoke.texi | 8 +
gcc/ira-build.cc | 7 +-
gcc/ira-color.cc | 8 +-
gcc/ira-emit.cc | 12 +-
gcc/ira-lives.cc | 7 +-
gcc/ira.cc | 19 +-
gcc/lra-coalesce.cc | 27 +-
gcc/lra-constraints.cc | 109 ++++-
gcc/lra-int.h | 4 +
gcc/lra-lives.cc | 357 ++++++++++++----
gcc/lra-remat.cc | 8 +-
gcc/lra-spills.cc | 27 +-
gcc/lra.cc | 10 +-
gcc/opts.cc | 1 +
gcc/regs.h | 5 +
gcc/sbitmap.cc | 98 +++++
gcc/sbitmap.h | 2 +
gcc/subreg-live-range.cc | 53 +++
gcc/subreg-live-range.h | 206 +++++++++
gcc/timevar.def | 1 +
25 files changed, 1886 insertions(+), 136 deletions(-)
create mode 100644 gcc/subreg-live-range.cc
create mode 100644 gcc/subreg-live-range.h
--
2.36.3