blob: fd5d2e5504443d846c88e77ffe58e2d45f9ab992 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-additional-options "-ffast-math" } */
/* This testcase shouldn't consume much memory or produce a 1GB vectorizer
dump file due to SLP tree explosion. */
struct S { int f1, f2, f3, f4; } a;
struct T { short f3, f2, f1, f4; };
int b, c, d, e, f, g;
unsigned long z;
void
foo (struct T *p, struct T *q, int x, int w)
{
for (; x; x++)
{
struct S h;
int i;
struct T j;
struct T *r;
h = a;
g = 0;
r = p + 2 * (c + 4) + 1;
j = *r;
r = p;
f = r->f1 - 1;
b = +1.0 + f * f;
i = (r->f2 + j.f2) / 2;
f = r->f3 - 1;
b += 1.0 - i * f * f;
f = r->f4 - 1;
if (b)
b += -1.0 - i * f;
if (b / w)
{
h.f1 += 8.0 * r->f1;
h.f2 += 8.0 * r->f2;
h.f3 += 8.0 * r->f3;
h.f4 += 8.0 * r->f4;
g = 1;
}
r++;
f = r->f1;
i = (r->f2 + j.f2) / 2;
f = r->f3 - 1;
b += 1.0 - i * f * f;
i = (r->f4);
if (b * 65535UL / w)
{
h.f1 += 10.0 * r->f1;
h.f2 += 10.0 * r->f2;
h.f3 += 10.0 * r->f3;
h.f4 += 10.0 * r->f4;
g += 10.0;
}
r++;
f = r->f1;
z = 5UL * i;
f = r->f2;
i = (r->f3 + j.f3) / 2;
b = -i * f * f;
i = (r->f4 + j.f4) / 2;
if (b * 65535UL / 25.0f)
{
h.f1 += 8.0 * r->f1;
h.f2 += 8.0 * r->f2;
h.f3 += 8.0 * r->f3;
h.f4 += 8.0 * r->f4;
g += 8.0;
}
r++;
f = r->f1 - j.f1;
b = 1 * 2.0 * i * f * f;
f = r->f2;
b += 4.0 * f;
i = r->f3 / 2;
f = r->f4 - 1;
if (b * 1)
{
h.f1 += 8.0 * r->f1;
h.f2 += 8.0 * r->f2;
h.f3 += 8.0 * r->f3;
h.f4 += 8.0 * r->f4;
g += 8.0;
}
b = 4.0 * 1 * f;
if (b * 65535UL / 25.0f)
{
h.f1 += 20.0 * r->f1;
h.f2 += 20.0 * r->f2;
h.f3 += 20.0 * r->f3;
h.f4 += 20.0 * r->f4;
g += 20.0;
}
b = 5 * (0.0 - i);
if (b < 0)
{
h.f1 += 8.0 * r->f1;
h.f2 += 8.0 * r->f2;
h.f3 += 8.0 * r->f3;
h.f4 += 8.0 * r->f4;
g += 8.0;
}
r = p + 2 * (c + 4);
i = (r->f1 + j.f1);
b = 1 * 2.0 * i * 1;
f = r->f2 - 1;
i = (r->f3 + j.f3) / 2;
b = 5 * (0.0 - i) * f * f;
i = (r->f4 + j.f4) / 2;
if (b * 65535UL / 25.0f)
{
h.f1 += 10.0 * r->f1;
h.f2 += 10.0 * r->f2;
h.f3 += 10.0 * r->f3;
h.f4 += 10.0 * r->f4;
g += 10.0;
}
r++;
f = r->f1;
b = 5UL * i * f;
i = (r->f2 + j.f2) / 2;
f = r->f3 - 1;
b = 5 * (0.0 - i) * f * f;
f = r->f4 - 1;
if (b * 65535UL / 25.0f)
{
h.f1 += 40.0 * r->f1;
h.f2 += 40.0 * r->f2;
h.f3 += 40.0 * r->f3;
h.f4 += 40.0 * r->f4;
g += 40.0;
}
r++;
i = (r->f1 + j.f1);
b = 5 * i * f;
f = r->f2;
b = 4.0 * f * f;
f = r->f3;
i = (r->f4 + j.f4) / 2;
b = 5 * (0.0 - i) * f * f;
if (b * 25.0f)
{
h.f1 += 8.0 * r->f1;
h.f2 += 8.0 * r->f2;
h.f3 += 8.0 * r->f3;
h.f4 += 8.0 * r->f4;
g += 8.0;
}
r = p + 4 * (c + 4);
i = r->f1 / 2;
b = 5 * (1.0 + i);
i = r->f2 + j.f2;
f = r->f3 - 1;
b = 5 * (0.0 - i) * f * f;
i = (r->f4 + j.f4) / 2;
if (b * 65535UL / 25.0f)
{
h.f1 += 5.0 * r->f1;
h.f2 += 5.0 * r->f2;
h.f3 += 5.0 * r->f3;
h.f4 += 5.0 * r->f4;
g += 5.0;
}
b = 5 * (1.0 + i);
if (b < 0)
{
h.f1 += 5.0 * r->f1;
h.f2 += 5.0 * r->f2;
h.f3 += 5.0 * r->f3;
h.f4 += 5.0 * r->f4;
g += 5.0;
}
q->f1 = (h.f1 + g / 2 - 1) / g;
q->f2 = (h.f2 + g / 2 - 1) / g;
q->f3 = (h.f3 + g / 2 - 1) / g;
q->f4 = (h.f4 + g / 2 - 1) / g;
p++;
q++;
}
}