[Bug tree-optimization/88903] [7/8/9 Regression] wrong-code with SLP vectorized shift

2019-01-18 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88903

--- Comment #5 from Richard Biener  ---
In the end a mistake of the PR48616 fix (r172638).

[Bug tree-optimization/88903] [7/8/9 Regression] wrong-code with SLP vectorized shift

2019-01-18 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88903

--- Comment #4 from Martin Liška  ---
Started with:

SVN revision: r224221
Author: rguenth
2015-06-08  Richard Biener  

* tree-vect-stmts.c (vectorizable_load): Compute the pointer
adjustment for gaps at the end of a SLP load group properly.
* tree-vect-slp.c (vect_supported_load_permutation_p): Allow
all permutations we can generate.
(vect_transform_slp_perm_load): Use the correct group-size.

* gcc.dg/vect/slp-perm-10.c: New testcase.
* gcc.dg/vect/slp-23.c: Adjust.
* gcc.dg/torture/pr53366-2.c: Also verify cross-iteration
vector pointer update.

[Bug tree-optimization/88903] [7/8/9 Regression] wrong-code with SLP vectorized shift

2019-01-18 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88903

Richard Biener  changed:

   What|Removed |Added

   Keywords||wrong-code
   Target Milestone|8.3 |7.5
Summary|[8/9 Regression] wrong-code |[7/8/9 Regression]
   |with SLP vectorized shift   |wrong-code with SLP
   ||vectorized shift

--- Comment #3 from Richard Biener  ---
Variant that also fails with GCC 7 (no SLP induction support):

int x[1024];
int y[1024];
int z[1024];

void __attribute__((noinline)) foo()
{
  for (int i = 0; i < 512; ++i)
{
  x[2*i] = x[2*i] << y[2*i];
  x[2*i+1] = x[2*i+1] << y[2*i];
  z[2*i] = y[2*i];
  z[2*i+1] = y[2*i+1];
}
}

int main()
{
  for (int i = 0; i < 1024; ++i)
x[i] = i, y[i] = i % 8;
  foo ();
  for (int i = 0; i < 1024; ++i)
if (x[i] != i << ((i & ~1) % 8))
  __builtin_abort ();
  return 0;
}