/* PR tree-optimization/48616 */
/* { dg-do run } */
/* { dg-options "-O2 -ftree-vectorize" } */
/* { dg-additional-options "-fno-common" { target hppa*-*-hpux* } } */
/* { dg-skip-if "no alignment > 2" { "pdp11-*-*" } } */

extern void abort (void);
int a[4] __attribute__((aligned (32)));
int b[4] __attribute__((aligned (32)));
int c[4] __attribute__((aligned (32)));
int d[4] __attribute__((aligned (32)));
int e[4] __attribute__((aligned (32)));

__attribute__((noinline, noclone))
int
foo (int x)
{
  asm ("" : "+r" (x));
  return x;
}

__attribute__((noinline, noclone))
void
fn1 (int i)
{
  a[0] = b[0] << c[0];
  a[1] = b[1] << c[1];
  a[2] = b[2] << c[2];
  a[3] = b[3] << c[3];
  if (i)
    {
      d[0] = e[0] >> c[0];
      d[1] = e[1] >> c[1];
      d[2] = e[2] >> c[2];
      d[3] = e[3] >> c[3];
    }
}

__attribute__((noinline, noclone))
void
fn2 (int i)
{
  a[0] = b[0] << 1;
  a[1] = b[1] << 2;
  a[2] = b[2] << 3;
  a[3] = b[3] << 4;
  if (i)
    {
      d[0] = e[0] >> 1;
      d[1] = e[1] >> 2;
      d[2] = e[2] >> 3;
      d[3] = e[3] >> 4;
    }
}

__attribute__((noinline, noclone))
void
fn3 (int i, int j)
{
  int x = foo (j);
  a[0] = b[0] << x;
  a[1] = b[1] << x;
  a[2] = b[2] << x;
  a[3] = b[3] << x;
  if (i)
    {
      d[0] = e[0] >> x;
      d[1] = e[1] >> x;
      d[2] = e[2] >> x;
      d[3] = e[3] >> x;
    }
}

__attribute__((noinline, noclone))
void
fn4 (int i)
{
  a[0] = b[0] << 1;
  a[1] = b[1] << 1;
  a[2] = b[2] << 1;
  a[3] = b[3] << 1;
  if (i)
    {
      d[0] = e[0] >> 1;
      d[1] = e[1] >> 1;
      d[2] = e[2] >> 1;
      d[3] = e[3] >> 1;
    }
}

int
main ()
{
  int i;
  int *t;
  for (i = 0; i < 4; i++)
    {
      b[i] = 32;
      c[i] = i + 1;
      e[i] = 32;
    }
  asm volatile ("" : : "r" (b) : "memory");
  asm volatile ("" : : "r" (c) : "memory");
  asm volatile ("" : "=r" (t) : "0" (d) : "memory");
  fn1 (t != 0);
  for (i = 0; i < 4; i++)
    {
      if (a[i] != (32 << (i + 1)) || d[i] != (32 >> (i + 1)))
	abort ();
      a[i] = 0;
      d[i] = 0;
    }
  fn2 (t != 0);
  for (i = 0; i < 4; i++)
    {
      if (a[i] != (32 << (i + 1)) || d[i] != (32 >> (i + 1)))
	abort ();
      a[i] = 0;
      d[i] = 0;
    }
  fn3 (t != 0, t != 0);
  for (i = 0; i < 4; i++)
    {
      if (a[i] != (32 << 1) || d[i] != (32 >> 1))
	abort ();
      a[i] = 0;
      d[i] = 0;
    }
  fn4 (t != 0);
  for (i = 0; i < 4; i++)
    {
      if (a[i] != (32 << 1) || d[i] != (32 >> 1))
	abort ();
    }
  return 0;
}
