This came up in the post commit review discussion of D103834.
The basic idea is that the general case was using a loop being finite by assumption to prove that step was non-zero. Non-zero combined with NoWrap flags in turns proves the loop must exit before overflow occurs. This change adds an explicit check for when the loop isn't known mustprogress, but we can directly prove that the step isn't zero. This will mostly help non-C/C++ family languages, though it may benefit some C language test cases as well.