Sorry. I wasn’t clear. If the conditional is constant a compile time you get the dead code optimization. The path not taken is removed. If it’s not constant at you may get the loop invariant movement. But only if the compiler can tell that it’s invariant.
My point wasn’t that you should always rely on this behavior. At least, I didn’t mean to say that. 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 suppose I have value judgements around that like “generally you should do the thing that is more readable and let the compiler take care of stuff like moving the loop invariant”. That’s been mostly true for me. But only mostly.
I don’t believe you have to specify the condition at compile time. I think that optimization would fall under dead code elimination.
For the invariant code motion stuff the comparison just has to be invariant from start to finish. At least, that’s been my experience. The compiler will just shift the if stement.
But, like, there are totally times when it can’t figure out that the thing is invariant. And sometimes it’s just more readable to move the if statement out of the loop.
The last project I fell in love with was Elasticsearch. About ten years ago. I was building a search and everything was wrong with solr. I switched to elasticsearch and it was smooth. They had built so much of what I needed. And at the time they were apache licensed which was amazing for us. The world’s kind of moved a long way since then. I’d love to fall in love like that again. I just don’t haveany opportunities.
I recommend it. Try to go in blind.