https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121712
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2025-08-29 Ever confirmed|0 |1 Status|UNCONFIRMED |NEW CC| |rguenth at gcc dot gnu.org --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Estimating # of iterations of loop 1 Analyzing # of iterations of loop 1 exit condition [a_9(D) + 4, + , 4](no_overflow) != b_8(D) bounds on difference of bases: -18446744073709551615 ... 18446744073709551611 result: # of iterations (((unsigned long) b_8(D) - (unsigned long) a_9(D)) - 4) /[ex] 4, bounded by 4611686018427387902 Statement (exit)if (b_8(D) != a_12) is executed at most (((unsigned long) b_8(D) - (unsigned long) a_9(D)) - 4) /[ex] 4 (bounded by 4611686018427387902) + 1 times in loop 1. Analyzing # of iterations of loop 1 exit condition [a_9(D) + 4, + , 4](no_overflow) != b_8(D) bounds on difference of bases: -18446744073709551615 ... 18446744073709551611 result: # of iterations (((unsigned long) b_8(D) - (unsigned long) a_9(D)) - 4) /[ex] 4, bounded by 4611686018427387902 Loop 1 iterates at most -2 times. Loop 1 likely iterates at most -2 times. wut? (probably a dump issue) niter analysis uses it's simplify_using_initial_conditions but that hasn't seen any TLC "recently". The initial conditions include <bb 2> [local count: 347387056]: _1 = b_8(D) - a_9(D); if (_1 == 4) goto <bb 5>; [34.00%] We could possibly do a walk_tree on the niter expression, trying to compute a singleton range for sub-expressions, or even just try on the whole expression.