(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
torture/
pr63464.c
       1  /* PR tree-optimization/63464 */
       2  /* { dg-do run { target int32plus } } */
       3  
       4  int cnt;
       5  
       6  __attribute__((noinline, noclone)) void
       7  bar (int x, int y)
       8  {
       9    cnt++;
      10    switch (y)
      11      {
      12      case 1:
      13        if ((unsigned) x < 24U && ((1U << x) & 0x860c0cU) != 0)
      14          __builtin_abort ();
      15        break;
      16      case 2:
      17        if ((unsigned) x >= 24U || ((1U << x) & 0x860c0cU) == 0)
      18          __builtin_abort ();
      19        break;
      20      case 3:
      21        if ((unsigned) x - 43U < 40U && ((1ULL << (x - 43U)) & 0x8f0000004fULL) != 0)
      22          __builtin_abort ();
      23        break;
      24      case 4:
      25        if ((unsigned) x - 43U >= 40U || ((1ULL << (x - 43U)) & 0x8f0000004fULL) == 0)
      26          __builtin_abort ();
      27        break;
      28      default:
      29        __builtin_abort ();
      30      }
      31  }
      32  
      33  __attribute__((noinline, noclone)) void
      34  f1 (int x)
      35  {
      36    if (x != 2 && x != 3 && x != 10 && x != 11 && x != 17 && x != 18 && x != 23)
      37      bar (x, 1);
      38  }
      39  
      40  __attribute__((noinline, noclone)) void
      41  f2 (int x)
      42  {
      43    if (x == 2 || x == 3 || x == 10 || x == 11 || x == 17 || x == 18 || x == 23)
      44      bar (x, 2);
      45  }
      46  
      47  __attribute__((noinline, noclone)) void
      48  f3 (int x)
      49  {
      50    if (x != 43 && x != 76 && x != 44 && x != 78 && x != 49
      51        && x != 77 && x != 46 && x != 75 && x != 45 && x != 82)
      52      bar (x, 3);
      53  }
      54  
      55  __attribute__((noinline, noclone)) void
      56  f4 (int x)
      57  {
      58    if (x == 43 || x == 76 || x == 44 || x == 78 || x == 49
      59        || x == 77 || x == 46 || x == 75 || x == 45 || x == 82)
      60      bar (x, 4);
      61  }
      62  
      63  int
      64  main ()
      65  {
      66    int i;
      67    f1 (-__INT_MAX__ - 1);
      68    for (i = -3; i < 92; i++)
      69      f1 (i);
      70    f1 (__INT_MAX__);
      71    if (cnt != 97 - 7)
      72      __builtin_abort ();
      73    f2 (-__INT_MAX__ - 1);
      74    for (i = -3; i < 92; i++)
      75      f2 (i);
      76    f2 (__INT_MAX__);
      77    if (cnt != 97)
      78      __builtin_abort ();
      79    f3 (-__INT_MAX__ - 1);
      80    for (i = -3; i < 92; i++)
      81      f3 (i);
      82    f3 (__INT_MAX__);
      83    if (cnt != 97 * 2 - 10)
      84      __builtin_abort ();
      85    f4 (-__INT_MAX__ - 1);
      86    for (i = -3; i < 92; i++)
      87      f4 (i);
      88    f4 (__INT_MAX__);
      89    if (cnt != 97 * 2)
      90      __builtin_abort ();
      91    return 0;
      92  }