(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr65105-1.c
       1  /* PR target/pr65105 */
       2  /* { dg-do run { target ia32 } } */
       3  /* { dg-options "-O2 -msse2 -mtune=slm -mno-stackrealign -save-temps" } */
       4  /* { dg-require-effective-target sse2 } */
       5  /* { dg-final { scan-assembler "por" } } */
       6  /* { dg-final { scan-assembler "pand" } } */
       7  
       8  #include "sse2-check.h"
       9  
      10  #include "stdlib.h"
      11  
      12  static int count = 0;
      13  
      14  void __attribute__((noinline))
      15  counter (long long l)
      16  {
      17    count++;
      18    if (!l || count > 5)
      19      exit (1);
      20  }
      21  
      22  void __attribute__((noinline))
      23  test (long long *arr)
      24  {
      25    register unsigned long long tmp;
      26  
      27    tmp = arr[0] | arr[1] & arr[2];
      28    while (tmp)
      29      {
      30        counter (tmp);
      31        tmp = *(arr++) & tmp;
      32      }
      33  }
      34  
      35  void  __attribute__((noinline))
      36  fill_data (long long *arr)
      37  {
      38    arr[0] = 0x00ffffffL;
      39    arr[1] = 0xffffff00L;
      40    arr[2] = 0x00ffffffL;
      41    arr[3] = 0x0000ff00L;
      42    arr[4] = 0x00ff0000L;
      43    arr[5] = 0xff000000L;
      44  }
      45  
      46  static void
      47  sse2_test (void)
      48  {
      49    long long arr[6];
      50    fill_data (arr);
      51    test (arr);
      52  
      53    if (count != 5)
      54      __builtin_abort ();
      55  }