Reland [pgo] Avoid introducing relocations by using private alias
In many cases, we can use an alias to avoid a symbolic relocations, instead of using the public, interposable symbol. When the instrumented function is in a COMDAT, we can use a hidden alias, and still avoid references to discarded sections. Previous versions of this patch allowed the compiler to name the generated alias, but that would only be valid when the functions were local. Since the alias may be used across TUs we use a more deterministic naming convention, and add a ".local" suffix to the alias name just as we do for relative vtables aliases. https://reviews.llvm.org/rG20894a478da224bdd69c91a22a5175b28bc08ed9 removed an incorrect assertion on Mach-O which caused assertion failures in LLD. We addressed the link errors under ThinLTO + PGO + CFI by being more selective about which comdat functions can be given aliases. Specifically, we now do not emit an alias in the case of a comdat function with hidden visibility, since the alias would have the same linkage and visibility, giving no benefit over using the symbol directly. This also prevents LowerTypeTest from incorrectly updating the dangling alias after GlobalOpt replaces uses, and introducing a duplicate symbol. Reviewed By: phosek Differential Revision: https://reviews.llvm.org/D137982
Loading
Please sign in to comment