mirror of git://gcc.gnu.org/git/gcc.git
Don't group gather loads (PR83847)
In the testcase we were trying to group two gather loads, even though that isn't supported. Fixed by explicitly disallowing grouping of gathers and scatters. This problem didn't show up on SVE because there we convert to IFN_GATHER_LOAD/IFN_SCATTER_STORE pattern statements, which fail the can_group_stmts_p check. 2018-01-16 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * tree-vect-data-refs.c (vect_analyze_data_ref_accesses): gcc/testsuite/ * gcc.dg/torture/pr83847.c: New test. From-SVN: r256730
This commit is contained in:
parent
9064759767
commit
82279a515e
|
|
@ -1,3 +1,7 @@
|
|||
2018-01-16 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
|
||||
* tree-vect-data-refs.c (vect_analyze_data_ref_accesses):
|
||||
|
||||
2018-01-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/86620
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
2018-01-16 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
|
||||
* gcc.dg/torture/pr83847.c: New test.
|
||||
|
||||
2018-01-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/86620
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-march=bdver4" { target i?86-*-* x86_64-*-* } } */
|
||||
|
||||
typedef struct {
|
||||
struct {
|
||||
int a;
|
||||
int b;
|
||||
} c;
|
||||
} * d;
|
||||
typedef struct {
|
||||
unsigned e;
|
||||
d f[];
|
||||
} g;
|
||||
g h;
|
||||
d *k;
|
||||
int i(int j) {
|
||||
if (j) {
|
||||
*k = *h.f;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
int l;
|
||||
int m;
|
||||
int n;
|
||||
d o;
|
||||
void p() {
|
||||
for (; i(l); l++) {
|
||||
n += o->c.a;
|
||||
m += o->c.b;
|
||||
}
|
||||
}
|
||||
|
|
@ -2923,7 +2923,8 @@ vect_analyze_data_ref_accesses (vec_info *vinfo)
|
|||
data_reference_p dra = datarefs_copy[i];
|
||||
stmt_vec_info stmtinfo_a = vinfo_for_stmt (DR_STMT (dra));
|
||||
stmt_vec_info lastinfo = NULL;
|
||||
if (! STMT_VINFO_VECTORIZABLE (stmtinfo_a))
|
||||
if (!STMT_VINFO_VECTORIZABLE (stmtinfo_a)
|
||||
|| STMT_VINFO_GATHER_SCATTER_P (stmtinfo_a))
|
||||
{
|
||||
++i;
|
||||
continue;
|
||||
|
|
@ -2932,7 +2933,8 @@ vect_analyze_data_ref_accesses (vec_info *vinfo)
|
|||
{
|
||||
data_reference_p drb = datarefs_copy[i];
|
||||
stmt_vec_info stmtinfo_b = vinfo_for_stmt (DR_STMT (drb));
|
||||
if (! STMT_VINFO_VECTORIZABLE (stmtinfo_b))
|
||||
if (!STMT_VINFO_VECTORIZABLE (stmtinfo_b)
|
||||
|| STMT_VINFO_GATHER_SCATTER_P (stmtinfo_b))
|
||||
break;
|
||||
|
||||
/* ??? Imperfect sorting (non-compatible types, non-modulo
|
||||
|
|
|
|||
Loading…
Reference in New Issue