If it’s not constant at you may get the loop invariant movement. But only if the compiler can tell that it’s invariant.
The point is that if the predicate is evaluated at runtime then the compiler plays no role because there is no compile-time constant and all code paths are deemed possible.
I suppose what I should have said is more like “in many cases you won’t see any performance difference because the compiler will do that for you anyway.”
I understand that you’re trying to say that compilers can leverage compile-time constants to infer if code paths are dead code or not.
That’s just a corner case though. Your compiler has no say on what code paths are dead if you’re evaluating a predicate from, say, the response of a HTTP request. It doesn’t make sense to expect this hypothetical scenario to be realistic when you have no info on where a predicate is coming from.
The point is that if the predicate is evaluated at runtime then the compiler plays no role because there is no compile-time constant and all code paths are deemed possible.
I understand that you’re trying to say that compilers can leverage compile-time constants to infer if code paths are dead code or not.
That’s just a corner case though. Your compiler has no say on what code paths are dead if you’re evaluating a predicate from, say, the response of a HTTP request. It doesn’t make sense to expect this hypothetical scenario to be realistic when you have no info on where a predicate is coming from.
They’re talking about moving the calculation of the if condition outside of the loop. Which the original commenter mentioned. https://en.m.wikipedia.org/wiki/Loop-invariant_code_motion
You are the one that brought up dead code elimination.