https://gcc.gnu.org/g:72010b551750e4846e67203e314866b1a63b8e4c

commit r16-8963-g72010b551750e4846e67203e314866b1a63b8e4c
Author: Soumya AR <[email protected]>
Date:   Wed May 6 05:39:55 2026 +0000

    aarch64: Move pass_narrow_gp_writes above pass_free_cfg
    
    The narrow_gp_writes pass uses RTL-SSA and updates DF state via
    df_insn_rescan / df_insn_delete.  Both routines look up the insn's bb via
    BLOCK_FOR_INSN to mark it dirty after a change, but pass_free_cfg has 
already
    cleared those per-insn pointers by the time narrow_gp_writes runs. When
    BLOCK_FOR_INSN returns NULL, the dirty-marking step is silently skipped,
    leaving the DF stale.
    
    Move the pass to run before pass_free_cfg.
    
    Bootstrapped and regtested on aarch64-linux-gnu.
    SPEC CPU 2017 shows no codegen differences (compared to previous placement).
    OK for trunk?
    
    Signed-off-by: Soumya AR <[email protected]>
    
            PR target/124895
    
    gcc/ChangeLog:
    
            * config/aarch64/aarch64-passes.def (pass_narrow_gp_writes): Move 
pass
            before pass_free_cfg.
    
    gcc/testsuite/ChangeLog:
    
            * gcc.target/aarch64/narrow-gp-writes-8.c: New test.
    
    (cherry picked from commit cefcc09723c363f61e65f9a2774f82258fc43474)

Diff:
---
 gcc/config/aarch64/aarch64-passes.def                 |  2 +-
 gcc/testsuite/gcc.target/aarch64/narrow-gp-writes-8.c | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/gcc/config/aarch64/aarch64-passes.def 
b/gcc/config/aarch64/aarch64-passes.def
index f4307aab551c..2df7459af92c 100644
--- a/gcc/config/aarch64/aarch64-passes.def
+++ b/gcc/config/aarch64/aarch64-passes.def
@@ -26,4 +26,4 @@ INSERT_PASS_BEFORE (pass_late_thread_prologue_and_epilogue, 
1, pass_late_track_s
 INSERT_PASS_BEFORE (pass_shorten_branches, 1, pass_insert_bti);
 INSERT_PASS_BEFORE (pass_early_remat, 1, pass_ldp_fusion);
 INSERT_PASS_BEFORE (pass_peephole2, 1, pass_ldp_fusion);
-INSERT_PASS_BEFORE (pass_cleanup_barriers, 1, pass_narrow_gp_writes);
+INSERT_PASS_BEFORE (pass_free_cfg, 1, pass_narrow_gp_writes);
diff --git a/gcc/testsuite/gcc.target/aarch64/narrow-gp-writes-8.c 
b/gcc/testsuite/gcc.target/aarch64/narrow-gp-writes-8.c
new file mode 100644
index 000000000000..94ef761e8010
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/narrow-gp-writes-8.c
@@ -0,0 +1,10 @@
+/* PR target/124895 */
+/* { dg-do compile } */
+/* { dg-options "-Os -fpath-coverage -fno-tree-ccp -fprofile-generate 
-mnarrow-gp-writes" } */
+
+void
+foo (unsigned u)
+{
+  while (u)
+    ;
+}

Reply via email to