https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106474
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization
CC| |amacleod at redhat dot com
Ever confirmed|0 |1
Component|c |tree-optimization
Last reconfirmed| |2022-07-29
Status|UNCONFIRMED |NEW
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
For the failing case we see
<bb 2> :
if (c_5(D) == s_6(D))
goto <bb 3>; [INV]
else
goto <bb 6>; [INV]
<bb 3> :
if (c_5(D) != 0)
goto <bb 6>; [INV]
else
goto <bb 4>; [INV]
<bb 4> :
if (s_6(D) != 0)
goto <bb 5>; [INV]
else
goto <bb 6>; [INV]
and we basically fail to thread 2->3->4->6, eliminating the if (s_6(D) != 0)
branch when c_5(D) == s_6(D) and c_5(D) == 0.
It looks like relations / equivalences related, but maybe not exactly. Andrew?