blob: 3e5bba28e703bea323ac59bc3769b0bc41bb2293 [file] [log] [blame]
/* 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 ();
}