+++ /dev/null
-/* PR optimization/6475
- Distilled from zlib sources. */
-/* { dg-do run } */
-/* { dg-options "-O2" } */
-/* { dg-options "-O2 -frename-registers -fomit-frame-pointer -fPIC -mcpu=i686" { target i?86-*-* } } */
-
-typedef struct
-{
- union
- {
- struct
- {
- unsigned char a3;
- unsigned char a4;
- } a2;
- unsigned int a5;
- } a0;
- unsigned int a1;
-} A;
-
-static int
-foo (unsigned int *b, unsigned int n, unsigned int s, const unsigned int *d,
- const unsigned int *e, A **t, unsigned int *m, A *hp, unsigned int *hn,
- unsigned int *v)
-{
- unsigned int a, c[15 + 1], f;
- int g, h;
- unsigned int i, j, k;
- int l;
- unsigned int ee;
- unsigned int *p;
- A *q, r, *u[15];
- int w;
- unsigned int x[15 + 1], *xx;
- int y;
- unsigned int z;
- p = c;
- *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0;
- *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0;
- *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0;
- *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0;
- p = b;
- i = n;
- do
- c[*p++]++;
- while (--i);
- if (c[0] == n)
- {
- *t = (A *) 0;
- *m = 0;
- return 0;
- }
- l = *m;
- for (j = 1; j <= 15; j++)
- if (c[j])
- break;
- k = j;
- if ((unsigned int) l < j)
- l = j;
- for (i = 15; i; i--)
- if (c[i])
- break;
- g = i;
- if ((unsigned int) l > i)
- l = i;
- *m = l;
- for (y = 1 << j; j < i; j++, y <<= 1)
- if ((y -= c[j]) < 0)
- return -3;
- if ((y -= c[i]) < 0)
- return -3;
- c[i] += y;
- x[1] = j = 0;
- p = c + 1;
- xx = x + 2;
- while (--i)
- *xx++ = (j += *p++);
- p = b;
- i = 0;
- do
- if ((j = *p++) != 0)
- v[x[j]++] = i;
- while (++i < n);
- n = x[g];
- x[0] = i = 0;
- p = v;
- h = -1;
- w = -l;
- u[0] = (A *) 0;
- q = (A *) 0;
- z = 0;
- for (; k <= g; k++)
- {
- a = c[k];
- while (a--)
- {
- while (k > w + l)
- {
- h++;
- w += l;
- z = g - w;
- z = z > (unsigned int) l ? l : z;
- if ((f = 1 << (j = k - w)) > a + 1)
- {
- f -= a + 1;
- xx = c + k;
- if (j < z)
- while (++j < z)
- {
- if ((f <<= 1) <= *++xx)
- break;
- f -= *xx;
- }
- }
- z = 1 << j;
- if (*hn + z > 1440)
- return -3;
- u[h] = q = hp + *hn;
- *hn += z;
- if (h)
- {
- x[h] = i;
- r.a0.a2.a4 = (unsigned char) l;
- r.a0.a2.a3 = (unsigned char) j;
- j = i >> (w - l);
- r.a1 = (unsigned int) (q - u[h - 1] - j);
- u[h - 1][j] = r;
- }
- else
- *t = q;
- }
- r.a0.a2.a4 = (unsigned char) (k - w);
- if (p >= v + n)
- r.a0.a2.a3 = 128 + 64;
- else if (*p < s)
- {
- r.a0.a2.a3 = (unsigned char) (*p < 256 ? 0 : 32 + 64);
- r.a1 = *p++;
- }
- else
- {
- r.a0.a2.a3 = (unsigned char) (e[*p - s] + 16 + 64);
- r.a1 = d[*p++ - s];
- }
- f = 1 << (k - w);
- for (j = i >> w; j < z; j += f)
- q[j] = r;
- for (j = 1 << (k - 1); i & j; j >>= 1)
- i ^= j;
- i ^= j;
- ee = (1 << w) - 1;
- while ((i & ee) != x[h])
- {
- h--;
- w -= l;
- ee = (1 << w) - 1;
- }
- }
- }
- return y != 0 && g != 1 ? (-5) : 0;
-}
-
-int a[19] = { 3, 4, 0, 2, 2, [17] = 3, 3 };
-int d[19];
-A h[1440];
-
-int
-main (void)
-{
- int b = 0, c = 0;
- A *e = 0;
- foo (a, 19, 19, 0, 0, &e, &b, h, &c, d);
- exit (0);
-}