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] Fix PR54565


This, as suggested in the PR arranges update_address_taken to be
run before forwprop.  The patch simply moves it to after CCP
instead of before alias computation.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

2012-09-14  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/54565
	* passes.c (init_optimization_passes): Adjust comments.
	(execute_function_todo): Do not execute execute_update_addresses_taken
	before processing TODO_rebuild_alias.
	* tree-ssa-ccp.c (do_ssa_ccp): Schedule TODO_update_address_taken.

	* gcc.dg/tree-ssa/ssa-ccp-17.c: Adjust.
	* gcc.dg/tree-ssa/forwprop-6.c: Likewise.  Remove XFAIL.

Index: gcc/passes.c
===================================================================
--- gcc/passes.c	(revision 191289)
+++ gcc/passes.c	(working copy)
@@ -1297,11 +1297,11 @@ init_optimization_passes (void)
 	  NEXT_PASS (pass_remove_cgraph_callee_edges);
 	  NEXT_PASS (pass_rename_ssa_copies);
 	  NEXT_PASS (pass_ccp);
+	  /* After CCP we rewrite no longer addressed locals into SSA
+	     form if possible.  */
 	  NEXT_PASS (pass_forwprop);
 	  /* pass_build_ealias is a dummy pass that ensures that we
-	     execute TODO_rebuild_alias at this point.  Re-building
-	     alias information also rewrites no longer addressed
-	     locals into SSA form if possible.  */
+	     execute TODO_rebuild_alias at this point.  */
 	  NEXT_PASS (pass_build_ealias);
 	  NEXT_PASS (pass_sra_early);
 	  NEXT_PASS (pass_fre);
@@ -1371,11 +1371,11 @@ init_optimization_passes (void)
       NEXT_PASS (pass_rename_ssa_copies);
       NEXT_PASS (pass_complete_unrolli);
       NEXT_PASS (pass_ccp);
+      /* After CCP we rewrite no longer addressed locals into SSA
+	 form if possible.  */
       NEXT_PASS (pass_forwprop);
       /* pass_build_alias is a dummy pass that ensures that we
-	 execute TODO_rebuild_alias at this point.  Re-building
-	 alias information also rewrites no longer addressed
-	 locals into SSA form if possible.  */
+	 execute TODO_rebuild_alias at this point.  */
       NEXT_PASS (pass_build_alias);
       NEXT_PASS (pass_return_slot);
       NEXT_PASS (pass_phiprop);
@@ -1414,6 +1414,8 @@ init_optimization_passes (void)
       NEXT_PASS (pass_object_sizes);
       NEXT_PASS (pass_strlen);
       NEXT_PASS (pass_ccp);
+      /* After CCP we rewrite no longer addressed locals into SSA
+	 form if possible.  */
       NEXT_PASS (pass_copy_prop);
       NEXT_PASS (pass_cse_sincos);
       NEXT_PASS (pass_optimize_bswap);
@@ -1773,13 +1775,10 @@ execute_function_todo (void *data)
       cfun->last_verified &= ~TODO_verify_ssa;
     }
 
-  if (flags & TODO_rebuild_alias)
-    {
-      execute_update_addresses_taken ();
-      if (flag_tree_pta)
-	compute_may_aliases ();
-    }
-  else if (optimize && (flags & TODO_update_address_taken))
+  if (flag_tree_pta && (flags & TODO_rebuild_alias))
+    compute_may_aliases ();
+
+  if (optimize && (flags & TODO_update_address_taken))
     execute_update_addresses_taken ();
 
   if (flags & TODO_remove_unused_locals)
Index: gcc/tree-ssa-ccp.c
===================================================================
--- gcc/tree-ssa-ccp.c	(revision 191289)
+++ gcc/tree-ssa-ccp.c	(working copy)
@@ -2105,7 +2105,8 @@ do_ssa_ccp (void)
   ccp_initialize ();
   ssa_propagate (ccp_visit_stmt, ccp_visit_phi_node);
   if (ccp_finalize ())
-    todo = (TODO_cleanup_cfg | TODO_update_ssa | TODO_remove_unused_locals);
+    todo = (TODO_cleanup_cfg | TODO_update_ssa | TODO_remove_unused_locals
+	    | TODO_update_address_taken);
   free_dominance_info (CDI_DOMINATORS);
   return todo;
 }
Index: gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-17.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-17.c	(revision 191289)
+++ gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-17.c	(working copy)
@@ -26,7 +26,7 @@ int foobar(void)
   return ((const struct Foo *)p)->i;
 }
 
-/* { dg-final { scan-tree-dump "= i;" "ccp1" } } */
+/* { dg-final { scan-tree-dump "= i_.;" "ccp1" } } */
 /* { dg-final { scan-tree-dump "= f.i;" "ccp1" } } */
 /* { dg-final { scan-tree-dump "= g.i;" "ccp1" } } */
 /* { dg-final { cleanup-tree-dump "ccp1" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c	(revision 191289)
+++ gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c	(working copy)
@@ -22,6 +22,7 @@ void f(void)
    particular situation before doing this transformation we have to
    assure that a is killed by a dominating store via type float for
    it to be valid.  Then we might as well handle the situation by
-   value-numbering, removing the load alltogether.  */
-/* { dg-final { scan-tree-dump-times "VIEW_CONVERT_EXPR" 1 "forwprop1" { xfail *-*-* } } } */
+   value-numbering, removing the load alltogether.
+   ???  We now do this after CPP re-writes a into SSA form.  */
+/* { dg-final { scan-tree-dump-times "VIEW_CONVERT_EXPR" 1 "forwprop1" } } */
 /* { dg-final { cleanup-tree-dump "forwprop1" } } */


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