Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/20020426-2.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* PR optimization/6475 | |
2 Distilled from zlib sources. */ | |
3 /* { dg-do run } */ | |
4 /* { dg-options "-O2" } */ | |
5 /* { dg-options "-O2 -frename-registers -fomit-frame-pointer -fPIC -mtune=i686" { target { { i?86-*-* x86_64-*-* } && { ia32 && fpic } } } } */ | |
6 | |
7 extern void exit (int); | |
8 | |
9 typedef struct | |
10 { | |
11 union | |
12 { | |
13 struct | |
14 { | |
15 unsigned char a3; | |
16 unsigned char a4; | |
17 } a2; | |
18 unsigned int a5; | |
19 } a0; | |
20 unsigned int a1; | |
21 } A; | |
22 | |
23 static int | |
24 foo (unsigned int *b, unsigned int n, unsigned int s, const unsigned int *d, | |
25 const unsigned int *e, A **t, unsigned int *m, A *hp, unsigned int *hn, | |
26 unsigned int *v) | |
27 { | |
28 unsigned int a, c[15 + 1], f; | |
29 int g, h; | |
30 unsigned int i, j, k; | |
31 int l; | |
32 unsigned int ee; | |
33 unsigned int *p; | |
34 A *q, r, *u[15]; | |
35 int w; | |
36 unsigned int x[15 + 1], *xx; | |
37 int y; | |
38 unsigned int z; | |
39 p = c; | |
40 *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; | |
41 *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; | |
42 *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; | |
43 *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; | |
44 p = b; | |
45 i = n; | |
46 do | |
47 c[*p++]++; | |
48 while (--i); | |
49 if (c[0] == n) | |
50 { | |
51 *t = (A *) 0; | |
52 *m = 0; | |
53 return 0; | |
54 } | |
55 l = *m; | |
56 for (j = 1; j <= 15; j++) | |
57 if (c[j]) | |
58 break; | |
59 k = j; | |
60 if ((unsigned int) l < j) | |
61 l = j; | |
62 for (i = 15; i; i--) | |
63 if (c[i]) | |
64 break; | |
65 g = i; | |
66 if ((unsigned int) l > i) | |
67 l = i; | |
68 *m = l; | |
69 for (y = 1 << j; j < i; j++, y <<= 1) | |
70 if ((y -= c[j]) < 0) | |
71 return -3; | |
72 if ((y -= c[i]) < 0) | |
73 return -3; | |
74 c[i] += y; | |
75 x[1] = j = 0; | |
76 p = c + 1; | |
77 xx = x + 2; | |
78 while (--i) | |
79 *xx++ = (j += *p++); | |
80 p = b; | |
81 i = 0; | |
82 do | |
83 if ((j = *p++) != 0) | |
84 v[x[j]++] = i; | |
85 while (++i < n); | |
86 n = x[g]; | |
87 x[0] = i = 0; | |
88 p = v; | |
89 h = -1; | |
90 w = -l; | |
91 u[0] = (A *) 0; | |
92 q = (A *) 0; | |
93 z = 0; | |
94 for (; k <= g; k++) | |
95 { | |
96 a = c[k]; | |
97 while (a--) | |
98 { | |
99 while (k > w + l) | |
100 { | |
101 h++; | |
102 w += l; | |
103 z = g - w; | |
104 z = z > (unsigned int) l ? l : z; | |
105 if ((f = 1 << (j = k - w)) > a + 1) | |
106 { | |
107 f -= a + 1; | |
108 xx = c + k; | |
109 if (j < z) | |
110 while (++j < z) | |
111 { | |
112 if ((f <<= 1) <= *++xx) | |
113 break; | |
114 f -= *xx; | |
115 } | |
116 } | |
117 z = 1 << j; | |
118 if (*hn + z > 1440) | |
119 return -3; | |
120 u[h] = q = hp + *hn; | |
121 *hn += z; | |
122 if (h) | |
123 { | |
124 x[h] = i; | |
125 r.a0.a2.a4 = (unsigned char) l; | |
126 r.a0.a2.a3 = (unsigned char) j; | |
127 j = i >> (w - l); | |
128 r.a1 = (unsigned int) (q - u[h - 1] - j); | |
129 u[h - 1][j] = r; | |
130 } | |
131 else | |
132 *t = q; | |
133 } | |
134 r.a0.a2.a4 = (unsigned char) (k - w); | |
135 if (p >= v + n) | |
136 r.a0.a2.a3 = 128 + 64; | |
137 else if (*p < s) | |
138 { | |
139 r.a0.a2.a3 = (unsigned char) (*p < 256 ? 0 : 32 + 64); | |
140 r.a1 = *p++; | |
141 } | |
142 else | |
143 { | |
144 r.a0.a2.a3 = (unsigned char) (e[*p - s] + 16 + 64); | |
145 r.a1 = d[*p++ - s]; | |
146 } | |
147 f = 1 << (k - w); | |
148 for (j = i >> w; j < z; j += f) | |
149 q[j] = r; | |
150 for (j = 1 << (k - 1); i & j; j >>= 1) | |
151 i ^= j; | |
152 i ^= j; | |
153 ee = (1 << w) - 1; | |
154 while ((i & ee) != x[h]) | |
155 { | |
156 h--; | |
157 w -= l; | |
158 ee = (1 << w) - 1; | |
159 } | |
160 } | |
161 } | |
162 return y != 0 && g != 1 ? (-5) : 0; | |
163 } | |
164 | |
165 unsigned int a[19] = { 3, 4, 0, 2, 2, [17] = 3, 3 }; | |
166 unsigned int d[19]; | |
167 A h[1440]; | |
168 | |
169 int | |
170 main (void) | |
171 { | |
172 unsigned int b = 0, c = 0; | |
173 A *e = 0; | |
174 foo (a, 19, 19, 0, 0, &e, &b, h, &c, d); | |
175 exit (0); | |
176 } |