Internalize linkonce_odr more often.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 21 Apr 2016 21:44:25 +0000 (21:44 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 21 Apr 2016 21:44:25 +0000 (21:44 +0000)
commit4d480ed5451e9af88e84bcf8be62f8befa915bed
tree7aa49ad62bd096bfab59a35543d92be0cce4c473
parentc34a519407392fd6fc7432719d1ea05bb9a31d0f
Internalize linkonce_odr more often.

Since there is a copy in every translation unit that uses them, they can
be omitted from the symbol table if the address is not significant.

This still doesn't catch as many cases as the gold plugin. The
difference is that we check canBeOmittedFromSymbolTable in each file and
use lazy loading which limits what it can do. Gold checks it in the merged file.

I think the correct way of getting the same results as gold is just to
cache in the IR the result of canBeOmittedFromSymbolTable.

llvm-svn: 267063
lld/ELF/InputFiles.cpp
lld/ELF/Symbols.cpp
lld/ELF/Symbols.h
lld/test/ELF/lto/Inputs/internalize-exportdyn.ll [new file with mode: 0644]
lld/test/ELF/lto/internalize-exportdyn.ll