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.

Reply via email to