diff options
author | Andrew Pinski <quic_apinski@quicinc.com> | 2025-07-16 09:31:35 -0700 |
---|---|---|
committer | Andrew Pinski <quic_apinski@quicinc.com> | 2025-07-17 11:38:44 -0700 |
commit | 6916639b48357334579cf94717a3e51dd003e940 (patch) | |
tree | a998ffdb6f03ad28cd227c2d300657a390bbec6a | |
parent | 2954038c821d5f672db89938c4b6feedf29c30aa (diff) | |
download | gcc-6916639b48357334579cf94717a3e51dd003e940.zip gcc-6916639b48357334579cf94717a3e51dd003e940.tar.gz gcc-6916639b48357334579cf94717a3e51dd003e940.tar.bz2 |
gcse: Skip hardreg pre when the hardreg is never live [PR121095]
r15-6789-ge7f98d9603808b added a new RTL pass for hardreg PRE for the hard register
of FPM_REGNUM, this pass could get expensive if you have a large number of basic blocks
and the hard register was never live so it does nothing in the end.
In the aarch64 case, FPM_REGNUM is only used for FP8 related code so it has a high probability
of not being used. So skipping the pass for that register can improve both compile time and memory
usage.
Build and tested for aarch64-linux-gnu.
PR middle-end/121095
gcc/ChangeLog:
* gcse.cc (execute_hardreg_pre): Skip if the hardreg which is never live.
Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
-rw-r--r-- | gcc/gcse.cc | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/gcse.cc b/gcc/gcse.cc index 96aae0e..ea57c55 100644 --- a/gcc/gcse.cc +++ b/gcc/gcse.cc @@ -4238,8 +4238,15 @@ execute_hardreg_pre (void) { int changed; current_hardreg_regno = regnos[i]; + if (!df_regs_ever_live_p (current_hardreg_regno)) + { + if (dump_file) + fprintf (dump_file, "Skipping hardreg PRE for regno %d, which is never live\n", + current_hardreg_regno); + continue; + } if (dump_file) - fprintf(dump_file, "Entering hardreg PRE for regno %d\n", + fprintf (dump_file, "Entering hardreg PRE for regno %d\n", current_hardreg_regno); delete_unreachable_blocks (); df_analyze (); |