This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Schedule another update_address_taken late


As can be seen on the testcase in PR91526 the vectorizer can end
up marking things addressable because it creates very many
pointer IV.  Then unrolling can completely elide a loop or IVOPTs
can choose other IVs.  Thus it's certainly beneficial for
other passes to have an updated TREE_ADDRESSABLE, esp. NRV
which bails out on TREE_ADDRESSABLE marked vars.  Similar
tail-call wants to know this.

Not enough to fix the PR, but anyways.

Bootstrap / regtest running on x86_64-unknown-linux-gnu.

Richard.

2019-08-23  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91526
	* passes.def: Note that after late FRE we do TODO_update_address_taken.
	* tree-ssa-sccvn.c (pass_fre::execute): In late mode schedule
	TODO_update_address_taken.

Index: gcc/passes.def
===================================================================
--- gcc/passes.def	(revision 274843)
+++ gcc/passes.def	(working copy)
@@ -313,6 +313,8 @@ along with GCC; see the file COPYING3.
       NEXT_PASS (pass_split_paths);
       NEXT_PASS (pass_tracer);
       NEXT_PASS (pass_fre, false /* may_iterate */);
+      /* After late FRE we rewrite no longer addressed locals into SSA
+         form if possible.  */
       NEXT_PASS (pass_thread_jumps);
       NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */);
       NEXT_PASS (pass_strlen);
Index: gcc/tree-ssa-sccvn.c
===================================================================
--- gcc/tree-ssa-sccvn.c	(revision 274843)
+++ gcc/tree-ssa-sccvn.c	(working copy)
@@ -7312,6 +7415,11 @@ pass_fre::execute (function *fun)
   if (iterate_p)
     loop_optimizer_finalize ();
 
+  /* For late FRE after IVOPTs and unrolling, see if we can
+     remove some TREE_ADDRESSABLE and rewrite stuff into SSA.  */
+  if (!may_iterate)
+    todo |= TODO_update_address_taken;
+
   return todo;
 }
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]