55 lines
1.0 KiB
C
55 lines
1.0 KiB
C
/* This testcase caused infinite loop in life info computation
|
|
after if conversion on IA-64. Conditional register dead for
|
|
pseudo holding sign-extended k was improperly computed,
|
|
resulting in this pseudo being live at start of bb if it was
|
|
dead at the end and vice versa; as it was a bb which had edge
|
|
to itself, this resulted in alternative propagating this basic
|
|
block forever. */
|
|
|
|
typedef struct {
|
|
unsigned char a;
|
|
unsigned char b;
|
|
} S0;
|
|
|
|
typedef struct {
|
|
S0 *c;
|
|
int d;
|
|
unsigned int e;
|
|
unsigned char *f[3];
|
|
void *g;
|
|
} S1;
|
|
|
|
int bar (int, void *);
|
|
|
|
int foo (S1 *x, float y)
|
|
{
|
|
S0 *h;
|
|
int i, j, k, l, m;
|
|
float n, o, p;
|
|
unsigned char *q, *r[3];
|
|
|
|
h = x->c;
|
|
m = h->a;
|
|
l = h->b;
|
|
n = y;
|
|
o = 0.0;
|
|
if (x->d == 8)
|
|
for (j = 0; j < x->e; j++)
|
|
for (k = 0; k < 3; k++)
|
|
{
|
|
n = y;
|
|
o = 0.0;
|
|
if (m)
|
|
q = x->f[k] + x->e - 1 - j;
|
|
else
|
|
q = x->f[k] + j;
|
|
p = (*q - o) * y / (n - o);
|
|
p = 0.0 > p ? 0.0 : p;
|
|
p = y < p ? y : p;
|
|
if (l)
|
|
p = r[k][(int) p];
|
|
bar (p, x->g);
|
|
}
|
|
return 1;
|
|
}
|