/* 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 (); }