| /* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ |
| /* { dg-skip-if "" { powerpc_elfv2 } } */ |
| /* { dg-options "-O2" } */ |
| |
| /* This used to generate a rotate:DI by 44, with mask 0xf00, which is |
| implemented using a rlwinm instruction. We used to write 44 for the |
| shift count there; it should be 12. */ |
| |
| struct A |
| { |
| int a : 4; |
| int : 2; |
| int b : 2; |
| int : 2; |
| int c : 2; |
| int d : 1; |
| int e; |
| }; |
| struct B |
| { |
| int a : 4; |
| } *a; |
| void bar (struct A); |
| |
| void |
| foo (void) |
| { |
| struct B b = a[0]; |
| struct A c; |
| c.a = b.a; |
| c.b = 1; |
| c.c = 1; |
| c.d = 0; |
| bar (c); |
| } |
| |
| /* { dg-final { scan-assembler-not {(?n)rlwinm.*,44,20,23} } } */ |