1/* This testcase caused infinite loop in life info computation 2 after if conversion on IA-64. Conditional register dead for 3 pseudo holding sign-extended k was improperly computed, 4 resulting in this pseudo being live at start of bb if it was 5 dead at the end and vice versa; as it was a bb which had edge 6 to itself, this resulted in alternative propagating this basic 7 block forever. */ 8 9typedef struct { 10 unsigned char a; 11 unsigned char b; 12} S0; 13 14typedef struct { 15 S0 *c; 16 int d; 17 unsigned int e; 18 unsigned char *f[3]; 19 void *g; 20} S1; 21 22int bar (int, void *); 23 24int foo (S1 *x, float y) 25{ 26 S0 *h; 27 int i, j, k, l, m; 28 float n, o, p; 29 unsigned char *q, *r[3]; 30 31 h = x->c; 32 m = h->a; 33 l = h->b; 34 n = y; 35 o = 0.0; 36 if (x->d == 8) 37 for (j = 0; j < x->e; j++) 38 for (k = 0; k < 3; k++) 39 { 40 n = y; 41 o = 0.0; 42 if (m) 43 q = x->f[k] + x->e - 1 - j; 44 else 45 q = x->f[k] + j; 46 p = (*q - o) * y / (n - o); 47 p = 0.0 > p ? 0.0 : p; 48 p = y < p ? y : p; 49 if (l) 50 p = r[k][(int) p]; 51 bar (p, x->g); 52 } 53 return 1; 54} 55