https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95123
Bug ID: 95123
Summary: [10/11 Regression] Wrong code w/ -O2
-fselective-scheduling2 -funroll-loops --param
early-inlining-insns=5 --param
loop-invariant-max-bbs-in-loop=3 --param
max-jump-thread-duplication-stmts=0
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: asolokha at gmx dot com
Target Milestone: ---
Target: x86_64-unknown-linux-gnu
The following program, compiled w/ gcc-11.0.0-alpha20200510 snapshot
(g:13a46321516e2efd3bbb1f1899c539c6724240a9) w/ -O2 -fselective-scheduling2
-funroll-loops --param early-inlining-insns=5 --param
loop-invariant-max-bbs-in-loop=3 --param max-jump-thread-duplication-stmts=0,
segfauls on run-time:
int ak, mt;
const int g5[1] = { -1 }, ip[5] = { 0 };
unsigned int eu;
void
cm (unsigned char t9)
{
(void) t9;
eu = (eu & (~0 - 1)) + ip[eu + 1 > 1];
}
void
qe (unsigned int nc)
{
cm (nc);
cm (nc);
cm (nc);
asm ("");
cm (nc);
}
int
main (void)
{
int xh, bc = mt == 2;
mt = ak;
for (xh = 0; xh < 1; ++xh)
{
qe (g5[xh]);
asm (";");
if (!!bc)
__builtin_puts ("");
}
for (xh = 0; xh < 5; ++xh)
{
qe (ip[xh]);
asm (";");
if (!!bc)
__builtin_printf ("%d\n", xh);
}
for (xh = 0; xh < 3; ++xh)
{
qe (ip[xh]);
if (!!bc)
mt += xh;
}
return 0;
}
% x86_64-unknown-linux-gnu-gcc-11.0.0 -O2 -fselective-scheduling2 --param
early-inlining-insns=5 --param loop-invariant-max-bbs-in-loop=3 --param
max-jump-thread-duplication-stmts=0 -o good cd8zuepp.c
% ./good
% echo $?
0
% x86_64-unknown-linux-gnu-gcc-11.0.0 -O2 -fselective-scheduling2
-funroll-loops --param early-inlining-insns=5 --param
loop-invariant-max-bbs-in-loop=3 --param max-jump-thread-duplication-stmts=0 -o
bad cd8zuepp.c
% ./bad
zsh: segmentation fault (core dumped) ./bad