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