this post was submitted on 17 Nov 2023
50 points (90.3% liked)

Programming

17579 readers
137 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] lysdexic 0 points 1 year ago (1 children)

I don’t believe you have to specify the condition at compile time. I think that optimization would fall under dead code elimination.

How do you tell if some code behind a conditional is dead if the predicate that drives the condition is evaluated at runtime?

[–] nik9000 4 points 1 year ago (1 children)

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.

[–] lysdexic -2 points 1 year ago* (last edited 1 year ago) (1 children)

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.

[–] Lmaydev 3 points 1 year ago* (last edited 1 year ago)

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.