aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <quic_apinski@quicinc.com>2025-07-16 09:31:35 -0700
committerAndrew Pinski <quic_apinski@quicinc.com>2025-07-17 11:38:44 -0700
commit6916639b48357334579cf94717a3e51dd003e940 (patch)
treea998ffdb6f03ad28cd227c2d300657a390bbec6a
parent2954038c821d5f672db89938c4b6feedf29c30aa (diff)
downloadgcc-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.cc9
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 ();