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]>
---
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 a2c8d103629..ee3bb401f31 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
--
2.43.0