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.