https://gcc.gnu.org/g:d0f760ff309ab3a4a8cbe71b9971d08429ff2596

commit r17-5532-gd0f760ff309ab3a4a8cbe71b9971d08429ff2596
Author: Richard Biener <[email protected]>
Date:   Fri Oct 23 16:47:49 2026 +0200

    tree-optimization/128082 - simple latches for FRE
    
    With FRE we generally want less latch edges because those eventually
    trigger iteration separately, so use LOOPS_HAVE_SIMPLE_LATCHES instead.
    
            PR tree-optimization/128082
            * tree-ssa-sccvn.cc (pass_fre::execute): Use LOOPS_NORMAL
            to force simple latches.
    
            * gcc.dg/tree-ssa/ssa-fre-67.c: Adjust.

Diff:
---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-67.c | 2 +-
 gcc/tree-ssa-sccvn.cc                      | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-67.c 
b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-67.c
index fab1e599b811..09ca67a14634 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-67.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-67.c
@@ -12,5 +12,5 @@ int foo()
   return i;
 }
 
-/* { dg-final { scan-tree-dump "RPO iteration over 3 blocks visited 3 blocks" 
"fre1" } } */
+/* { dg-final { scan-tree-dump "RPO iteration over 4 blocks visited 3 blocks" 
"fre1" } } */
 /* { dg-final { scan-tree-dump "return 1;" "fre1" } } */
diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc
index 6d7f0076266b..e76b608d9d7c 100644
--- a/gcc/tree-ssa-sccvn.cc
+++ b/gcc/tree-ssa-sccvn.cc
@@ -9430,7 +9430,8 @@ pass_fre::execute (function *fun)
   bool iterate_p = may_iterate && (optimize > 1);
   calculate_dominance_info (CDI_DOMINATORS);
   if (iterate_p)
-    loop_optimizer_init (AVOID_CFG_MODIFICATIONS);
+    /* When iterating make sure to minimize the number of backedges.  */
+    loop_optimizer_init (LOOPS_HAVE_SIMPLE_LATCHES);
 
   {
     /* When iterating, finalize below does the elimination; otherwise the

Reply via email to