https://gcc.gnu.org/g:6916639b48357334579cf94717a3e51dd003e940

commit r16-2330-g6916639b48357334579cf94717a3e51dd003e940
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Wed Jul 16 09:31:35 2025 -0700

    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_apin...@quicinc.com>

Diff:
---
 gcc/gcse.cc | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/gcc/gcse.cc b/gcc/gcse.cc
index 96aae0e1718c..ea57c55e057e 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 ();

Reply via email to