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