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
Last time I checked, the GCC dead store elimination also only works for malloc/free and only when the code is buggy and lacks an out-of-memory check. Clang is better at this, but it lacks a way to turn this into a dead store anyway. It can't work with malloc/new directly either.
1
2
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
It's just not quite simple enough that it could be eliminated as an intermediate and considered a dead store. It's providing a "useful" form of storage. I'm not sure how realistic it would be to eliminate it without any heap-to-stack (followed by mem2reg) allocation conversion.
2