| /* PR tree-optimization/112374 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-fcompare-debug -gno-statement-frontiers -O2" } */ |
| /* { dg-additional-options "-march=skylake-avx512" { target i?86-*-* x86_64-*-* } } */ |
| /* { dg-additional-options "-march=armv9-a" { target aarch64*-*-* } } */ |
| |
| void foo (int, int); |
| struct S { char s[64]; } *p; |
| char a, b; |
| unsigned char c; |
| int d, e; |
| |
| void |
| bar (void) |
| { |
| unsigned i; |
| long j = 0; |
| for (i = 0; i < b; ++i) |
| j |= (p->s[i] ? 3 : 0) << i; |
| if (p->s[i + 1]) |
| lab: |
| for (;;) |
| ; |
| for (i = 0; i < 4; ++i) |
| j |= p->s[i] << i; |
| for (; i; i += 2) |
| if (c + 1 != a) |
| goto lab; |
| for (; i < 8; ++i) |
| j |= p->s[i] >= 6; |
| if (j) |
| foo (d, e); |
| } |