https://gcc.gnu.org/g:7609f37f07e13970f69914afdba79cbd4de8cd5b

commit r16-4221-g7609f37f07e13970f69914afdba79cbd4de8cd5b
Author: Andrew Pinski <[email protected]>
Date:   Fri Oct 3 17:51:33 2025 -0700

    forwprop: Refine when TODO_update_address_taken is set [PR122143]
    
    As requested in 
https://inbox.sourceware.org/gcc-patches/CAFiYyc162F+i=majzQqutFcq1y=dtrojvc4z+v3gp8n7utn...@mail.gmail.com/T/#u.
    This refines when TODO_update_address_taken is set so it only set when 
folding of a call.
    This should speed up compile time slightly if we don't fold a call during 
the last forwprop.
    
    Boostrapped and tested on x86_64-linux-gnu.
    
            PR tree-optimization/122143
    gcc/ChangeLog:
    
            * tree-ssa-forwprop.cc (pass_forwprop::execute): Restrict setting
            TODO_update_address_taken only when the statement was a call before 
fold_stmt.
    
    Signed-off-by: Andrew Pinski <[email protected]>

Diff:
---
 gcc/tree-ssa-forwprop.cc | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
index 2c6e1eab9cdb..ad09f7334cc6 100644
--- a/gcc/tree-ssa-forwprop.cc
+++ b/gcc/tree-ssa-forwprop.cc
@@ -5451,7 +5451,8 @@ pass_forwprop::execute (function *fun)
          do
            {
              gimple *orig_stmt = stmt = gsi_stmt (gsi);
-             bool was_noreturn = (is_gimple_call (stmt)
+             bool was_call = is_gimple_call (stmt);
+             bool was_noreturn = (was_call
                                   && gimple_call_noreturn_p (stmt));
              changed = false;
 
@@ -5465,8 +5466,10 @@ pass_forwprop::execute (function *fun)
                  changed = true;
                  /* There is no updating of the address
                     taken after the last forwprop so update
-                    the addresses when a folding happened. */
-                 if (last_p)
+                    the addresses when a folding happened to a call.
+                    The va_* builtins can remove taking of the address so
+                    can the sincos->cexpi transformation.  See PR 39643 and PR 
20983. */
+                 if (was_call && last_p)
                    todoflags |= TODO_update_address_taken;
                  stmt = gsi_stmt (gsi);
                  /* Cleanup the CFG if we simplified a condition to

Reply via email to