Always call free_stmt_vec_info_vec in gather_scalar_reductions

2015-11-23  Tom de Vries  <tom@codesourcery.com>

	PR tree-optimization/68460
	* tree-parloops.c (gather_scalar_reductions): Also call
	free_stmt_vec_info_vec if simple_loop_info == NULL.

	* gcc.dg/autopar/pr68460.c: New test.

From-SVN: r230742
This commit is contained in:
Tom de Vries 2015-11-23 09:45:38 +00:00 committed by Tom de Vries
parent b59e2a4903
commit 1cabb20439
4 changed files with 51 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2015-11-23 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/68460
* tree-parloops.c (gather_scalar_reductions): Also call
free_stmt_vec_info_vec if simple_loop_info == NULL.
2015-11-23 Maxim Ostapenko <m.ostapenko@partner.samsung.com>
* opts.c (finish_options): Allow -fsanitize-recover=address for

View File

@ -1,3 +1,8 @@
2015-11-23 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/68460
* gcc.dg/autopar/pr68460.c: New test.
2015-11-23 Maxim Ostapenko <m.ostapenko@partner.samsung.com>
* c-c++-common/asan/halt_on_error-1.c: New test.

View File

@ -0,0 +1,35 @@
/* { dg-do "compile" } */
/* { dg-options "-O -ftree-parallelize-loops=2 -ftree-vectorize -fno-tree-ch -fno-tree-dominator-opts" } */
void abort (void);
int d[1024], e[1024];
int
foo (void)
{
int s = 0;
int i;
for (i = 0; i < 1024; i++)
s += d[i] - e[i];
return s;
}
int
main ()
{
int i;
for (i = 0; i < 1024; i++)
{
d[i] = i * 2;
e[i] = i;
}
if (foo () != 1023 * 1024 / 2)
abort ();
return 0;
}

View File

@ -2433,7 +2433,7 @@ gather_scalar_reductions (loop_p loop, reduction_info_table_type *reduction_list
simple_loop_info = vect_analyze_loop_form (loop);
if (simple_loop_info == NULL)
return;
goto gather_done;
for (gsi = gsi_start_phis (loop->header); !gsi_end_p (gsi); gsi_next (&gsi))
{
@ -2492,9 +2492,13 @@ gather_scalar_reductions (loop_p loop, reduction_info_table_type *reduction_list
destroy_loop_vec_info (simple_loop_info, true);
destroy_loop_vec_info (simple_inner_loop_info, true);
gather_done:
/* Release the claim on gimple_uid. */
free_stmt_vec_info_vec ();
if (reduction_list->elements () == 0)
return;
/* As gimple_uid is used by the vectorizer in between vect_analyze_loop_form
and free_stmt_vec_info_vec, we can set gimple_uid of reduc_phi stmts only
now. */