https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104196
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The problem looks like a latent bug in reassoc1.
Before:
if (a.0_1 < 0)
goto <bb 4>; [41.00%]
else
goto <bb 5>; [59.00%]
<bb 4> [local count: 440234144]:
# RANGE [-2147483646, 1]
c_6 = -2147483647 - a.0_1;
_9 = a.0_1 != -2147479551;
_4 = c_6 == 1;
_3 = _4 | _9;
if (_3 != 0)
goto <bb 5>; [60.23%]
else
goto <bb 3>; [39.77%]
<bb 5> [local count: 118111600]:
if (a.0_1 <= 5)
goto <bb 6>; [0.00%]
else
goto <bb 7>; [100.00%]
Which is correct and the overflow only happens in bb 4 which is never reached
here as a == 6.
After reassoc1 we have:
c_6 = -2147483647 - a.0_1;
_10 = a.0_1 != -2147479551;
_9 = a.0_1 != -2147479551;
_4 = c_6 == 1;
_12 = _4 | _10;
if (_12 != 0)
goto <bb 4>; [60.23%]
else
goto <bb 3>; [39.77%]
<bb 4> [local count: 118111600]:
if (a.0_1 <= 5)
goto <bb 5>; [0.00%]
else
goto <bb 6>; [100.00%]
Which is totally bogus and I suspect it is because we had that range on c_6
assignment.
>From -fdump-tree-reassoc1-all:
Matching expression match.pd:2080, generic-match.cc:693
Matching expression match.pd:2083, generic-match.cc:753
Matching expression match.pd:2090, generic-match.cc:776
Optimizing range tests a.0_1 +[-2147479551, -2147479551] and -[0, ]
into a.0_1 == -2147479551
Matching expression match.pd:2080, gimple-match.cc:819
Matching expression match.pd:2083, gimple-match.cc:892
Matching expression match.pd:2090, gimple-match.cc:952