Hi,
I'd like to fix PR19590, which is about llvm.global_ctors containing
functions that end up being empty after optimization (which causes the
linker to add useless init_array entries to the output binary).
globalopt removes empty functions from llvm.global_ctors, but by the
time the function becomes empty globalopt has already run and it
doesn't run again.
I'm wondering what the best fix is:
1. Should globalopt run once more after all other passes have run?
2. Or should the llvm.global_ctors optimization code in globalopt be
moved into a helper function somewhere that's called from both
globalopt and a new optimization pass cdtoropt that does nothing but
remove empty functions from llvm.global_ctors and llvm.global_dtors?
Then only this new pass would be added after all other passes. (This
new pass should run very quickly, it doesn't have to do much.)
Thanks for any advice,
Nico