modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr51581-2.c (about)

     1  /* PR tree-optimization/51581 */
     2  /* { dg-require-effective-target int32plus } */
     3  
     4  extern void abort (void);
     5  
     6  #define N 4096
     7  int a[N], c[N];
     8  unsigned int b[N], d[N];
     9  
    10  __attribute__((noinline, noclone)) void
    11  f1 (void)
    12  {
    13    int i;
    14    for (i = 0; i < N; i++)
    15      c[i] = a[i] % 3;
    16  }
    17  
    18  __attribute__((noinline, noclone)) void
    19  f2 (void)
    20  {
    21    int i;
    22    for (i = 0; i < N; i++)
    23      d[i] = b[i] % 3;
    24  }
    25  
    26  __attribute__((noinline, noclone)) void
    27  f3 (void)
    28  {
    29    int i;
    30    for (i = 0; i < N; i++)
    31      c[i] = a[i] % 18;
    32  }
    33  
    34  __attribute__((noinline, noclone)) void
    35  f4 (void)
    36  {
    37    int i;
    38    for (i = 0; i < N; i++)
    39      d[i] = b[i] % 18;
    40  }
    41  
    42  __attribute__((noinline, noclone)) void
    43  f5 (void)
    44  {
    45    int i;
    46    for (i = 0; i < N; i++)
    47      c[i] = a[i] % 19;
    48  }
    49  
    50  __attribute__((noinline, noclone)) void
    51  f6 (void)
    52  {
    53    int i;
    54    for (i = 0; i < N; i++)
    55      d[i] = b[i] % 19;
    56  }
    57  
    58  #if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8
    59  __attribute__((noinline, noclone)) void
    60  f7 (void)
    61  {
    62    int i;
    63    for (i = 0; i < N; i++)
    64      {
    65        int x = (int) ((unsigned long long) (a[i] * 0x55555556LL) >> 32) - (a[i] >> 31);
    66        c[i] = a[i] - x * 3;
    67      }
    68  }
    69  
    70  __attribute__((noinline, noclone)) void
    71  f8 (void)
    72  {
    73    int i;
    74    for (i = 0; i < N; i++)
    75      {
    76        unsigned int x = ((unsigned int) ((b[i] * 0xaaaaaaabULL) >> 32) >> 1);
    77        d[i] = b[i] - x * 3;
    78      }
    79  }
    80  
    81  __attribute__((noinline, noclone)) void
    82  f9 (void)
    83  {
    84    int i;
    85    for (i = 0; i < N; i++)
    86      {
    87        int x = (((int) ((unsigned long long) (a[i] * 0x38e38e39LL) >> 32)) >> 2) - (a[i] >> 31);
    88        c[i] = a[i] - x * 18;
    89      }
    90  }
    91  
    92  __attribute__((noinline, noclone)) void
    93  f10 (void)
    94  {
    95    int i;
    96    for (i = 0; i < N; i++)
    97      {
    98        unsigned int x = (unsigned int) ((b[i] * 0x38e38e39ULL) >> 32) >> 2;
    99        d[i] = b[i] - x * 18;
   100      }
   101  }
   102  
   103  __attribute__((noinline, noclone)) void
   104  f11 (void)
   105  {
   106    int i;
   107    for (i = 0; i < N; i++)
   108      {
   109        int x = (((int) ((unsigned long long) (a[i] * 0x6bca1af3LL) >> 32)) >> 3) - (a[i] >> 31);
   110        c[i] = a[i] - x * 19;
   111      }
   112  }
   113  
   114  __attribute__((noinline, noclone)) void
   115  f12 (void)
   116  {
   117    int i;
   118    for (i = 0; i < N; i++)
   119      {
   120        unsigned int tmp = (b[i] * 0xaf286bcbULL) >> 32;
   121        unsigned int x = (((b[i] - tmp) >> 1) + tmp) >> 4;
   122        d[i] = b[i] - x * 19;
   123      }
   124  }
   125  #endif
   126  
   127  int
   128  main ()
   129  {
   130    int i;
   131    for (i = 0; i < N; i++)
   132      {
   133        asm ("");
   134        a[i] = i - N / 2;
   135        b[i] = i;
   136      }
   137    a[0] = -__INT_MAX__ - 1;
   138    a[1] = -__INT_MAX__;
   139    a[N - 1] = __INT_MAX__;
   140    b[N - 1] = ~0;
   141    f1 ();
   142    f2 ();
   143    for (i = 0; i < N; i++)
   144      if (c[i] != a[i] % 3 || d[i] != b[i] % 3)
   145        abort ();
   146    f3 ();
   147    f4 ();
   148    for (i = 0; i < N; i++)
   149      if (c[i] != a[i] % 18 || d[i] != b[i] % 18)
   150        abort ();
   151    f5 ();
   152    f6 ();
   153    for (i = 0; i < N; i++)
   154      if (c[i] != a[i] % 19 || d[i] != b[i] % 19)
   155        abort ();
   156  #if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8
   157    f7 ();
   158    f8 ();
   159    for (i = 0; i < N; i++)
   160      if (c[i] != a[i] % 3 || d[i] != b[i] % 3)
   161        abort ();
   162    f9 ();
   163    f10 ();
   164    for (i = 0; i < N; i++)
   165      if (c[i] != a[i] % 18 || d[i] != b[i] % 18)
   166        abort ();
   167    f11 ();
   168    f12 ();
   169    for (i = 0; i < N; i++)
   170      if (c[i] != a[i] % 19 || d[i] != b[i] % 19)
   171        abort ();
   172  #endif
   173    return 0;
   174  }