https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81601
--- Comment #19 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Testcase where in f1/f3/f5 this optimization is done early (already in
*.original dump), but in f2/f4/f6 is not.
struct S { unsigned a:5; unsigned b:3; unsigned c:2; };
void bar (void);
void
f1 (struct S s)
{
if (s.a == 7 && s.b == 6 && s.c == 1)
bar ();
}
void
f2 (struct S s)
{
unsigned a = s.a;
unsigned b = s.b;
unsigned c = s.c;
if (a == 7 && b == 6 && c == 1)
bar ();
}
void
f3 (struct S s, struct S t)
{
if (s.a == t.a && s.b == t.b && s.c == t.c)
bar ();
}
void
f4 (struct S s, struct S t)
{
unsigned a = s.a;
unsigned b = s.b;
unsigned c = s.c;
unsigned d = t.a;
unsigned e = t.b;
unsigned f = t.c;
if (a == d && b == e && c == f)
bar ();
}