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

     1  /* PR tree-optimization/53645 */
     2  /* { dg-options "-std=gnu89" } */
     3  
     4  typedef unsigned int UV __attribute__((vector_size (16)));
     5  typedef int SV __attribute__((vector_size (16)));
     6  extern void abort (void);
     7  
     8  #define TEST(a, b, c, d) \
     9  __attribute__((noinline)) void		\
    10  uq##a##b##c##d (UV *x, UV *y) 		\
    11  {					\
    12    *x = *y / ((UV) { a, b, c, d });	\
    13  }					\
    14  					\
    15  __attribute__((noinline)) void		\
    16  ur##a##b##c##d (UV *x, UV *y) 		\
    17  {					\
    18    *x = *y % ((UV) { a, b, c, d });	\
    19  }					\
    20  					\
    21  __attribute__((noinline)) void		\
    22  sq##a##b##c##d (SV *x, SV *y) 		\
    23  {					\
    24    *x = *y / ((SV) { a, b, c, d });	\
    25  }					\
    26  					\
    27  __attribute__((noinline)) void		\
    28  sr##a##b##c##d (SV *x, SV *y) 		\
    29  {					\
    30    *x = *y % ((SV) { a, b, c, d });	\
    31  }
    32  
    33  #define TESTS \
    34  TEST (4, 4, 4, 4)			\
    35  TEST (1, 4, 2, 8)			\
    36  TEST (3, 3, 3, 3)			\
    37  TEST (6, 5, 6, 5)			\
    38  TEST (14, 14, 14, 6)			\
    39  TEST (7, 7, 7, 7)			\
    40  
    41  TESTS
    42  
    43  UV u[] =
    44    { ((UV) { 73U, 65531U, 0U, 174U }),
    45      ((UV) { 1U, 8173U, ~0U, ~0U - 63 }) };
    46  SV s[] =
    47    { ((SV) { 73, -9123, 32761, 8191 }),
    48      ((SV) { 9903, -1, -7323, 0 }) };
    49  
    50  int
    51  main ()
    52  {
    53    UV ur, ur2;
    54    SV sr, sr2;
    55    int i;
    56  #undef TEST
    57  #define TEST(a, b, c, d)				\
    58      uq##a##b##c##d (&ur, u + i);			\
    59      if (ur[0] != u[i][0] / a || ur[3] != u[i][3] / d)	\
    60       abort ();						\
    61      asm volatile ("" : : "r" (&ur) : "memory");		\
    62      if (ur[2] != u[i][2] / c || ur[1] != u[i][1] / b)	\
    63       abort ();						\
    64      asm volatile ("" : : "r" (&ur) : "memory");		\
    65      ur##a##b##c##d (&ur, u + i);			\
    66      if (ur[0] != u[i][0] % a || ur[3] != u[i][3] % d)	\
    67       abort ();						\
    68      asm volatile ("" : : "r" (&ur) : "memory");		\
    69      if (ur[2] != u[i][2] % c || ur[1] != u[i][1] % b)	\
    70       abort ();						\
    71      asm volatile ("" : : "r" (&ur) : "memory");
    72    for (i = 0; i < sizeof (u) / sizeof (u[0]); i++)
    73      {
    74        TESTS
    75      }
    76  #undef TEST
    77  #define TEST(a, b, c, d)				\
    78      sq##a##b##c##d (&sr, s + i);			\
    79      if (sr[0] != s[i][0] / a || sr[3] != s[i][3] / d)	\
    80       abort ();						\
    81      asm volatile ("" : : "r" (&sr) : "memory");		\
    82      if (sr[2] != s[i][2] / c || sr[1] != s[i][1] / b)	\
    83       abort ();						\
    84      asm volatile ("" : : "r" (&sr) : "memory");		\
    85      sr##a##b##c##d (&sr, s + i);			\
    86      if (sr[0] != s[i][0] % a || sr[3] != s[i][3] % d)	\
    87       abort ();						\
    88      asm volatile ("" : : "r" (&sr) : "memory");		\
    89      if (sr[2] != s[i][2] % c || sr[1] != s[i][1] % b)	\
    90       abort ();						\
    91      asm volatile ("" : : "r" (&sr) : "memory");
    92    for (i = 0; i < sizeof (s) / sizeof (s[0]); i++)
    93      {
    94        TESTS
    95      }
    96    return 0;
    97  }