1 /* PR tree-optimization/63464 */
2 /* { dg-do run { target int32plus } } */
3 
4 int cnt;
5 
6 __attribute__((noinline, noclone)) void
bar(int x,int y)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
f1(int x)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
f2(int x)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
f3(int x)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
f4(int x)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
main()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 }
93