diff --git a/gcc/testsuite/gcc.dg/vect/pr103517.c b/gcc/testsuite/gcc.dg/vect/pr103517.c new file mode 100644 index 00000000000..de87fc48f84 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr103517.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=skylake-avx512" { target x86_64-*-* i?86-*-* } } */ + +int a; +short b, c; +extern short d[]; +void e() { + for (short f = 1; f < (short)a; f += 2) + if (d[f + 1]) { + b = d[f]; + c = d[f + 1]; + } +} diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 7bff5118bd0..bc22ffeed82 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -1121,7 +1121,12 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap, || first_stmt_code == BIT_FIELD_REF || first_stmt_code == INDIRECT_REF || first_stmt_code == COMPONENT_REF - || first_stmt_code == MEM_REF))) + || first_stmt_code == MEM_REF) + && (rhs_code == ARRAY_REF + || rhs_code == BIT_FIELD_REF + || rhs_code == INDIRECT_REF + || rhs_code == COMPONENT_REF + || rhs_code == MEM_REF))) || first_stmt_load_p != load_p || first_stmt_phi_p != phi_p) {