re PR tree-optimization/64493 (ICE at -O3 on x86_64-linux-gnu)

2015-01-14  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/64493
	PR tree-optimization/64495
	* tree-vect-loop.c (vect_finalize_reduction): For double-reductions
	assign the proper vectorized PHI to the inner loop exit PHIs.

	* gcc.dg/vect/pr64493.c: New testcase.
	* gcc.dg/vect/pr64495.c: Likewise.

From-SVN: r219579
This commit is contained in:
Richard Biener 2015-01-14 08:32:18 +00:00 committed by Richard Biener
parent f7d2b51386
commit 46b622cc24
5 changed files with 84 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2015-01-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/64493
PR tree-optimization/64495
* tree-vect-loop.c (vect_finalize_reduction): For double-reductions
assign the proper vectorized PHI to the inner loop exit PHIs.
2015-01-14 Joey Ye <joey.ye@arm.com>
* config/arm/arm.c (arm_compute_save_reg_mask):

View File

@ -1,3 +1,10 @@
2015-01-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/64493
PR tree-optimization/64495
* gcc.dg/vect/pr64493.c: New testcase.
* gcc.dg/vect/pr64495.c: Likewise.
2015-01-13 Martin Uecker <uecker@eecs.berkeley.edu>
* gcc.dg/Warray-bounds-11.c: New test-case.

View File

@ -0,0 +1,31 @@
/* { dg-do run } */
#include "tree-vect.h"
int a, b, c, d, e, f, g, h;
int
main ()
{
check_vect ();
for (; a; a--)
for (d = 1; d <= 0; d++)
for (; d;)
if (h)
{
if (!g) __builtin_abort ();
if (!0) __builtin_abort ();
}
for (f = 4; f; f--)
{
for (b = 0; b < 2; b++)
c |= 1;
e |= c;
}
return 0;
}
/* { dg-final { cleanup-tree-dump "vect" } } */

View File

@ -0,0 +1,35 @@
/* { dg-do run } */
#include <assert.h>
#include "tree-vect.h"
int a, b, c, d, e, f, g, i, j;
static int *h = &e;
int
main ()
{
check_vect ();
for (; a;)
for (; g; g++)
for (; f; f++)
if (j)
{
assert(b);
assert(0);
}
for (i = 24; i; i--)
{
for (c = 0; c < 6; c++)
d |= 1;
*h |= d;
}
if (e != 1)
__builtin_abort ();
return 0;
}
/* { dg-final { cleanup-tree-dump "vect" } } */

View File

@ -4580,7 +4580,10 @@ vect_finalize_reduction:
&& !STMT_VINFO_LIVE_P (exit_phi_vinfo))
|| double_reduc);
STMT_VINFO_VEC_STMT (exit_phi_vinfo) = epilog_stmt;
if (double_reduc)
STMT_VINFO_VEC_STMT (exit_phi_vinfo) = inner_phi;
else
STMT_VINFO_VEC_STMT (exit_phi_vinfo) = epilog_stmt;
if (!double_reduc
|| STMT_VINFO_DEF_TYPE (exit_phi_vinfo)
!= vect_double_reduction_def)