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  }