http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60418
--- Comment #9 from H.J. Lu <hjl.tools at gmail dot com> ---
One pass removes a preheader in
if (_47 > 0)
goto <bb 3>;
else
goto <bb 8>;
<bb 3>:
<bb 4>:
# n_20 = PHI <1(3), n_269(7)>
and becomes:
if (_47 > 0)
goto <bb 3>;
else
goto <bb 7>;
<bb 3>:
# n_20 = PHI <1(2), n_269(6)>
The next pass adds the preheader back:
if (_47 > 0)
goto <bb 3>;
else
goto <bb 7>;
<bb 3>:
# n_264 = PHI <1(2)>
<bb 8>:
# n_20 = PHI <n_264(3), n_269(9)>
which changes the loop behavior and generates different results.