]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gcse: Skip hardreg pre when the hardreg is never live [PR121095]
authorAndrew Pinski <quic_apinski@quicinc.com>
Wed, 16 Jul 2025 16:31:35 +0000 (09:31 -0700)
committerAndrew Pinski <quic_apinski@quicinc.com>
Thu, 17 Jul 2025 18:38:44 +0000 (11:38 -0700)
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>
gcc/gcse.cc

index 96aae0e1718c63ec3fa0a152b9fa88e9734fd36d..ea57c55e057e21f6f16cb27b95febe8a47167800 100644 (file)
@@ -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 ();