Conversation

there's a lot I don't understand about optimizers, but is it unreasonable to expect a modern C++ compiler to turn foo() into an add instruction?
Image
13
51
Replying to and
In general, I don't think either Clang or GCC is capable of getting rid of malloc/free or new/delete outside of a special case for completely dead stores. They aren't capable of doing escape analysis and lowering it to a stack allocation / virtual registers so it won't go away.
2
1
So yes, I'm sure it understands that it's just an add. It knows the memory returned from new/malloc doesn't alias anything else. It just has absolutely no way to get rid of it by lowering it to something else and also has no way to get rid of it in a single step. Not implemented.
1
I think part of the reason lowering dynamic allocations to stack allocations / virtual registers isn't implemented is to avoid the risk of causing a stack overflow. They can and should probably do a very conservative version of it which would end up optimizing this away at least.
1
2
Show replies