https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101291
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- Hmm, the support is in GCC 9 as well and the niter analysis is the same so there's sth else going on. Btw, the assumptions are Analyzing # of iterations of loop 1 exit condition [start_3(D) + 16, + , 16] <= val_4(D) bounds on difference of bases: -16 ... 4294967295 result: under assumptions val_4(D) <= 4294967279 && start_3(D) + 16 > 14 # of iterations (val_4(D) - start_3(D)) / 16, bounded by 268435456 on trunk and Analyzing # of iterations of loop 1 exit condition [start_3(D) + 16, + , 16] <= val_4(D) bounds on difference of bases: -16 ... 4294967295 result: under assumptions val_4(D) <= 4294967279 && start_3(D) + 16 > 14 # of iterations (val_4(D) - start_3(D)) / 16, bounded by 268435456 on the GCC 9 branch. On trunk the scalar loop fallback is misoptimized by IVOPTs I think. -fno-ivopts makes it work on trunk at least. That said, ->assumptions is likely still at fault here.