https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98849

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
int a[1024], b[1024];

void
foo (void)
{
  for (int i = 0; i < 1024; i++)
    a[i] = b[i] << 3;
}

void
bar (int x)
{
  for (int i = 0; i < 1024; i++)
    a[i] = b[i] << x;
}

ICEs with -O3 -mcpu=iwmmxt too.  Here the vectorizer understands the target has
vector x vector shift and not vector x scalar, so we get:
  vect_cst__13 = { 3, 3 };
...
  vect__2.7_14 = vect__1.6_8 << vect_cst__13;
but veclower carelessly undoes that:
  vect__2.7_14 = vect__1.6_8 << 3;

Reply via email to