Commit 59ec925b by Richard Biener Committed by Richard Biener

re PR tree-optimization/78343 (Loop is not eliminated)

2016-11-24  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/78343
	* passes.def: Add CD-DCE pass after loop splitting.
	* tree-ssa-dce.c (find_obviously_necessary_stmts): Move
	SCEV init/finalize ...
	(perform_tree_ssa_dce): ... here.  Deal with being
	executed inside the loop pipeline in aggressive mode.

	* gcc.dg/tree-ssa/sccp-2.c: New testcase.
	* gcc.dg/autopar/uns-outer-6.c: Adjust.
	* gcc.dg/tree-ssa/20030808-1.c: Likewise.
	* gcc.dg/tree-ssa/20040305-1.c: Likewise.
	* gcc.dg/vect/pr38529.c: Likewise.

From-SVN: r242872
parent 4741b062
2016-11-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/78343
* passes.def: Add CD-DCE pass after loop splitting.
* tree-ssa-dce.c (find_obviously_necessary_stmts): Move
SCEV init/finalize ...
(perform_tree_ssa_dce): ... here. Deal with being
executed inside the loop pipeline in aggressive mode.
2016-11-25 Thomas Preud'homme <thomas.preudhomme@arm.com> 2016-11-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
* tree-ssa-math-opts.c (struct symbolic_number): Improve comment. * tree-ssa-math-opts.c (struct symbolic_number): Improve comment.
...@@ -272,6 +272,9 @@ along with GCC; see the file COPYING3. If not see ...@@ -272,6 +272,9 @@ along with GCC; see the file COPYING3. If not see
NEXT_PASS (pass_tree_unswitch); NEXT_PASS (pass_tree_unswitch);
NEXT_PASS (pass_scev_cprop); NEXT_PASS (pass_scev_cprop);
NEXT_PASS (pass_loop_split); NEXT_PASS (pass_loop_split);
/* All unswitching, final value replacement and splitting can expose
empty loops. Remove them now. */
NEXT_PASS (pass_cd_dce);
NEXT_PASS (pass_record_bounds); NEXT_PASS (pass_record_bounds);
NEXT_PASS (pass_loop_distribution); NEXT_PASS (pass_loop_distribution);
NEXT_PASS (pass_copy_prop); NEXT_PASS (pass_copy_prop);
......
2016-11-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/78343
* gcc.dg/tree-ssa/sccp-2.c: New testcase.
* gcc.dg/autopar/uns-outer-6.c: Adjust.
* gcc.dg/tree-ssa/20030808-1.c: Likewise.
* gcc.dg/tree-ssa/20040305-1.c: Likewise.
* gcc.dg/vect/pr38529.c: Likewise.
2016-11-25 Thomas Preud'homme <thomas.preudhomme@arm.com> 2016-11-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
PR tree-optimization/77673 PR tree-optimization/77673
......
...@@ -25,7 +25,7 @@ parloop (int N) ...@@ -25,7 +25,7 @@ parloop (int N)
for (i = 0; i < N; i++) for (i = 0; i < N; i++)
{ {
for (j = 0; j < N; j++) for (j = 0; j < N; j++)
y[i]=x[i][j]; y[i] += x[i][j];
sum += y[i]; sum += y[i];
} }
g_sum = sum; g_sum = sum;
......
...@@ -33,8 +33,8 @@ delete_dead_jumptables () ...@@ -33,8 +33,8 @@ delete_dead_jumptables ()
/* There should be no loads of ->code. If any exist, then we failed to /* There should be no loads of ->code. If any exist, then we failed to
optimize away all the IF statements and the statements feeding optimize away all the IF statements and the statements feeding
their conditions. */ their conditions. */
/* { dg-final { scan-tree-dump-times "->code" 0 "cddce2"} } */ /* { dg-final { scan-tree-dump-times "->code" 0 "cddce3"} } */
/* There should be no IF statements. */ /* There should be no IF statements. */
/* { dg-final { scan-tree-dump-times "if " 0 "cddce2"} } */ /* { dg-final { scan-tree-dump-times "if " 0 "cddce3"} } */
...@@ -27,4 +27,4 @@ void foo(int edx, int eax) ...@@ -27,4 +27,4 @@ void foo(int edx, int eax)
/* After cddce we should have two IF statements remaining as the other /* After cddce we should have two IF statements remaining as the other
two tests can be threaded. */ two tests can be threaded. */
/* { dg-final { scan-tree-dump-times "if " 2 "cddce2"} } */ /* { dg-final { scan-tree-dump-times "if " 2 "cddce3"} } */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
unsigned int
test(unsigned int quant)
{
unsigned int sum = 0;
for (unsigned int i = 0; i < quant; ++i)
sum += quant;
return sum;
}
/* A single basic-block should remain (computing and
returning quant * quant). */
/* { dg-final { scan-tree-dump-times "bb" 1 "optimized" } } */
...@@ -11,7 +11,3 @@ void foo() ...@@ -11,7 +11,3 @@ void foo()
for (j = 0; j < 17; ++j) for (j = 0; j < 17; ++j)
a[i] = 0; a[i] = 0;
} }
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" } } */
...@@ -400,7 +400,6 @@ find_obviously_necessary_stmts (bool aggressive) ...@@ -400,7 +400,6 @@ find_obviously_necessary_stmts (bool aggressive)
if (aggressive) if (aggressive)
{ {
struct loop *loop; struct loop *loop;
scev_initialize ();
if (mark_irreducible_loops ()) if (mark_irreducible_loops ())
FOR_EACH_BB_FN (bb, cfun) FOR_EACH_BB_FN (bb, cfun)
{ {
...@@ -423,7 +422,6 @@ find_obviously_necessary_stmts (bool aggressive) ...@@ -423,7 +422,6 @@ find_obviously_necessary_stmts (bool aggressive)
fprintf (dump_file, "can not prove finiteness of loop %i\n", loop->num); fprintf (dump_file, "can not prove finiteness of loop %i\n", loop->num);
mark_control_dependent_edges_necessary (loop->latch, false); mark_control_dependent_edges_necessary (loop->latch, false);
} }
scev_finalize ();
} }
} }
...@@ -1567,9 +1565,13 @@ perform_tree_ssa_dce (bool aggressive) ...@@ -1567,9 +1565,13 @@ perform_tree_ssa_dce (bool aggressive)
/* Preheaders are needed for SCEV to work. /* Preheaders are needed for SCEV to work.
Simple lateches and recorded exits improve chances that loop will Simple lateches and recorded exits improve chances that loop will
proved to be finite in testcases such as in loop-15.c and loop-24.c */ proved to be finite in testcases such as in loop-15.c and loop-24.c */
if (aggressive) bool in_loop_pipeline = scev_initialized_p ();
loop_optimizer_init (LOOPS_NORMAL if (aggressive && ! in_loop_pipeline)
| LOOPS_HAVE_RECORDED_EXITS); {
scev_initialize ();
loop_optimizer_init (LOOPS_NORMAL
| LOOPS_HAVE_RECORDED_EXITS);
}
tree_dce_init (aggressive); tree_dce_init (aggressive);
...@@ -1588,8 +1590,11 @@ perform_tree_ssa_dce (bool aggressive) ...@@ -1588,8 +1590,11 @@ perform_tree_ssa_dce (bool aggressive)
find_obviously_necessary_stmts (aggressive); find_obviously_necessary_stmts (aggressive);
if (aggressive) if (aggressive && ! in_loop_pipeline)
loop_optimizer_finalize (); {
loop_optimizer_finalize ();
scev_finalize ();
}
longest_chain = 0; longest_chain = 0;
total_chain = 0; total_chain = 0;
...@@ -1623,7 +1628,7 @@ perform_tree_ssa_dce (bool aggressive) ...@@ -1623,7 +1628,7 @@ perform_tree_ssa_dce (bool aggressive)
if (something_changed) if (something_changed)
{ {
free_numbers_of_iterations_estimates (cfun); free_numbers_of_iterations_estimates (cfun);
if (scev_initialized_p ()) if (in_loop_pipeline)
scev_reset (); scev_reset ();
return TODO_update_ssa | TODO_cleanup_cfg; return TODO_update_ssa | TODO_cleanup_cfg;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment