111
|
1 /* This ICEed on IA-32 with -O2 -mcpu=i386, because reload was trying
|
|
2 to reload into %sil register. */
|
|
3
|
|
4 struct A
|
|
5 {
|
|
6 void *a;
|
|
7 unsigned int b, c, d;
|
|
8 };
|
|
9
|
|
10 struct B
|
|
11 {
|
|
12 struct A *e;
|
|
13 };
|
|
14
|
|
15 void bar (struct A *);
|
|
16 void baz (struct A *);
|
|
17
|
|
18 static inline unsigned int
|
|
19 inl (unsigned int v, unsigned char w, unsigned char x, unsigned char y,
|
|
20 unsigned char z)
|
|
21 {
|
|
22 switch (v)
|
|
23 {
|
|
24 case 2:
|
|
25 return ((w & 0xf8) << 8) | ((x & 0xfc) << 3) | ((y & 0xf8) >> 3);
|
|
26 case 4:
|
|
27 return (z << 24) | (w << 16) | (x << 8) | y;
|
|
28 default:
|
|
29 return 0;
|
|
30 }
|
|
31 }
|
|
32
|
|
33 void foo (struct B *x, int y, const float *z)
|
|
34 {
|
|
35 struct A *a = x->e;
|
|
36
|
|
37 if (y)
|
|
38 {
|
|
39 if (x->e->a)
|
|
40 bar (x->e);
|
|
41 }
|
|
42 else
|
|
43 {
|
|
44 unsigned char c[4];
|
|
45 unsigned int b;
|
|
46
|
|
47 c[0] = z[0]; c[1] = z[1]; c[2] = z[2]; c[3] = z[3];
|
|
48 b = inl (a->b, c[0], c[1], c[2], c[3] );
|
|
49 if (a->a)
|
|
50 bar (a);
|
|
51 else
|
|
52 baz (a);
|
|
53 a->c = b;
|
|
54 }
|
|
55 }
|