| 87c43f3a | 02-Jun-2021 |
Fangrui Song <[email protected]> |
[InstrProfiling] Delete linkage/visibility toggling for Windows
The linkage/visibility of `__profn_*` variables are derived from the profiled functions.
extern_weak => linkonce available_ex
[InstrProfiling] Delete linkage/visibility toggling for Windows
The linkage/visibility of `__profn_*` variables are derived from the profiled functions.
extern_weak => linkonce available_externally => linkonce_odr internal => private extern => private _ => unchanged
The linkage/visibility of `__profc_*`/`__profd_*` variables are derived from `__profn_*` with linkage/visibility wrestling for Windows.
The changes can be folded to the following without changing semantics.
``` if (TT.isOSBinFormatCOFF() && !NeedComdat) { Linkage = GlobalValue::InternalLinkage; Visibility = GlobalValue::DefaultVisibility; } ```
That said, I think we can just delete the code block.
An extern/internal function will now use private `__profc_*`/`__profd_*` variables, instead of internal ones. This saves some symbol table entries.
A non-comdat {linkonce,weak}_odr function will now use hidden external `__profc_*`/`__profd_*` variables instead of internal ones. There is potential object file size increase because such symbols need `/INCLUDE:` directives. However such non-comdat functions are rare (note that non-comdat weak definitions don't prevent duplicate definition error).
The behavior changes match ELF.
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D103355
show more ...
|