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
inl(unsigned int v,unsigned char w,unsigned char x,unsigned char y,unsigned char z)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 
foo(struct B * x,int y,const float * z)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 }
56