/* PR target/pr65105 */
/* { dg-do run { target ia32 } } */
/* { dg-options "-O2 -msse2 -mtune=slm -mno-stackrealign -save-temps" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "por" } } */
/* { dg-final { scan-assembler "pand" } } */

#include "sse2-check.h"

#include "stdlib.h"

static int count = 0;

void __attribute__((noinline))
counter (long long l)
{
  count++;
  if (!l || count > 5)
    exit (1);
}

void __attribute__((noinline))
test (long long *arr)
{
  register unsigned long long tmp;

  tmp = arr[0] | arr[1] & arr[2];
  while (tmp)
    {
      counter (tmp);
      tmp = *(arr++) & tmp;
    }
}

void  __attribute__((noinline))
fill_data (long long *arr)
{
  arr[0] = 0x00ffffffL;
  arr[1] = 0xffffff00L;
  arr[2] = 0x00ffffffL;
  arr[3] = 0x0000ff00L;
  arr[4] = 0x00ff0000L;
  arr[5] = 0xff000000L;
}

static void
sse2_test (void)
{
  long long arr[6];
  fill_data (arr);
  test (arr);

  if (count != 5)
    __builtin_abort ();
}
