re PR middle-end/65965 (Straight-line memcpy/memset not vectorized when equivalent loop is)
2015-05-04 Richard Biener <rguenther@suse.de> PR tree-optimization/65965 * tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Split store groups at gaps. * gcc.dg/vect/bb-slp-33.c: New testcase. From-SVN: r222765
This commit is contained in:
parent
7457466941
commit
78a8b26c40
@ -1,3 +1,9 @@
|
|||||||
|
2015-05-04 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/65965
|
||||||
|
* tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Split
|
||||||
|
store groups at gaps.
|
||||||
|
|
||||||
2015-05-04 Richard Biener <rguenther@suse.de>
|
2015-05-04 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/65935
|
PR tree-optimization/65935
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2015-05-04 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/65965
|
||||||
|
* gcc.dg/vect/bb-slp-33.c: New testcase.
|
||||||
|
|
||||||
2015-05-04 Richard Biener <rguenther@suse.de>
|
2015-05-04 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/65935
|
PR tree-optimization/65935
|
||||||
|
49
gcc/testsuite/gcc.dg/vect/bb-slp-33.c
Normal file
49
gcc/testsuite/gcc.dg/vect/bb-slp-33.c
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/* { dg-require-effective-target vect_int } */
|
||||||
|
|
||||||
|
#include "tree-vect.h"
|
||||||
|
|
||||||
|
extern void abort (void);
|
||||||
|
|
||||||
|
void __attribute__((noinline,noclone))
|
||||||
|
test(int *__restrict__ a, int *__restrict__ b)
|
||||||
|
{
|
||||||
|
a[0] = b[0];
|
||||||
|
a[1] = b[1];
|
||||||
|
a[2] = b[2];
|
||||||
|
a[3] = b[3];
|
||||||
|
a[5] = 0;
|
||||||
|
a[6] = 0;
|
||||||
|
a[7] = 0;
|
||||||
|
a[8] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int a[9];
|
||||||
|
int b[4];
|
||||||
|
b[0] = 1;
|
||||||
|
__asm__ volatile ("");
|
||||||
|
b[1] = 2;
|
||||||
|
__asm__ volatile ("");
|
||||||
|
b[2] = 3;
|
||||||
|
__asm__ volatile ("");
|
||||||
|
b[3] = 4;
|
||||||
|
__asm__ volatile ("");
|
||||||
|
a[4] = 7;
|
||||||
|
check_vect ();
|
||||||
|
test(a, b);
|
||||||
|
if (a[0] != 1
|
||||||
|
|| a[1] != 2
|
||||||
|
|| a[2] != 3
|
||||||
|
|| a[3] != 4
|
||||||
|
|| a[4] != 7
|
||||||
|
|| a[5] != 0
|
||||||
|
|| a[6] != 0
|
||||||
|
|| a[7] != 0
|
||||||
|
|| a[8] != 0)
|
||||||
|
abort ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "slp2" { target { vect_element_align || vect_hw_misalign } } } } */
|
||||||
|
/* { dg-final { cleanup-tree-dump "slp2" } } */
|
@ -2602,6 +2602,15 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
|
|||||||
if ((init_b - init_a) % type_size_a != 0)
|
if ((init_b - init_a) % type_size_a != 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* If we have a store, the accesses are adjacent. This splits
|
||||||
|
groups into chunks we support (we don't support vectorization
|
||||||
|
of stores with gaps). */
|
||||||
|
if (!DR_IS_READ (dra)
|
||||||
|
&& (init_b - (HOST_WIDE_INT) TREE_INT_CST_LOW
|
||||||
|
(DR_INIT (datarefs_copy[i-1]))
|
||||||
|
!= type_size_a))
|
||||||
|
break;
|
||||||
|
|
||||||
/* The step (if not zero) is greater than the difference between
|
/* The step (if not zero) is greater than the difference between
|
||||||
data-refs' inits. This splits groups into suitable sizes. */
|
data-refs' inits. This splits groups into suitable sizes. */
|
||||||
HOST_WIDE_INT step = tree_to_shwi (DR_STEP (dra));
|
HOST_WIDE_INT step = tree_to_shwi (DR_STEP (dra));
|
||||||
|
Loading…
Reference in New Issue
Block a user