/* PR rtl-optimization/53942 */ /* { dg-do compile } */ /* { dg-options "-O2" } */ /* { dg-additional-options "-mtune=pentium2" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */ struct S { unsigned short w[3]; unsigned int x, y; }; struct S *baz (void); __attribute__ ((noinline)) static unsigned char foo (struct S *x, unsigned char y) { unsigned char c = 0; unsigned char v = x->w[0]; c |= v; v = ((x->w[1]) & (1 << y)) ? 1 : 0; c |= v << 1; v = ((x->w[2]) & 0xff) & (1 << y); c |= v << 2; return c; } void bar (void) { struct S *s = baz (); s->x = foo (s, 6); s->y = foo (s, 7); }