https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107937
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> ---
So we have
((getk_intersect_line_with_ycylinder_r.0_19 < 0.0) AND
(getk_intersect_line_with_ycylinder_r.0_19 u>= 0.0) AND (NOT (_180 != 0)))
from
<bb 7> [local count: 711980952]:
# k2_184 = PHI <k2_20(74), k2_220(D)(81)>
# prephitmp_96 = PHI <_182(74), getk_intersect_line_with_ycylinder_i.4_30(81)>
getk_intersect_line_with_ycylinder_r.0_19 =
getk_intersect_line_with_ycylinder_r;
if (getk_intersect_line_with_ycylinder_r.0_19 < 0.0)
goto <bb 8>; [14.99%]
else
goto <bb 11>; [85.01%]
<bb 8> [local count: 106727384]:
if (getk_intersect_line_with_ycylinder_r.0_19 u>= 0.0)
goto <bb 9>; [99.95%]
else
goto <bb 10>; [0.05%]
and we simplify that to true which is bogus. It's correct to remove
this false sub-predicate from the (a || b || c ...) chain but when
it's the last the result is false, not true.
Fixed.