mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[PGO] Don't group COMDAT variables for compiler generated profile variables in ELF
With this patch, compiler generated profile variables will have its own COMDAT name for ELF format, which syncs the behavior with COFF. Tested with clang PGO bootstrap. This shows a modest reduction in object sizes in ELF format. Differential Revision: https://reviews.llvm.org/D68041 llvm-svn: 373241
This commit is contained in:
parent
9795ad43cf
commit
1c42246e4b
@ -93,10 +93,6 @@ inline StringRef getInstrProfValuesVarPrefix() { return "__profvp_"; }
|
||||
/// Return the name of value profile node array variables:
|
||||
inline StringRef getInstrProfVNodesVarName() { return "__llvm_prf_vnodes"; }
|
||||
|
||||
/// Return the name prefix of the COMDAT group for instrumentation variables
|
||||
/// associated with a COMDAT function.
|
||||
inline StringRef getInstrProfComdatPrefix() { return "__profv_"; }
|
||||
|
||||
/// Return the name of the variable holding the strings (possibly compressed)
|
||||
/// of all function's PGO names.
|
||||
inline StringRef getInstrProfNamesVarName() {
|
||||
|
@ -758,7 +758,6 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {
|
||||
// of the parent function, that will result in relocations against discarded
|
||||
// sections.
|
||||
bool NeedComdat = needsComdatForCounter(*Fn, *M);
|
||||
Comdat *Cmdt = nullptr; // Comdat group.
|
||||
if (NeedComdat) {
|
||||
if (TT.isOSBinFormatCOFF()) {
|
||||
// For COFF, put the counters, data, and values each into their own
|
||||
@ -767,14 +766,11 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {
|
||||
// with the same name marked IMAGE_COMDAT_SELECT_ASSOCIATIVE.
|
||||
Linkage = GlobalValue::LinkOnceODRLinkage;
|
||||
Visibility = GlobalValue::HiddenVisibility;
|
||||
} else {
|
||||
// Otherwise, create one comdat group for everything.
|
||||
Cmdt = M->getOrInsertComdat(getVarName(Inc, getInstrProfComdatPrefix()));
|
||||
}
|
||||
}
|
||||
auto MaybeSetComdat = [=](GlobalVariable *GV) {
|
||||
if (NeedComdat)
|
||||
GV->setComdat(Cmdt ? Cmdt : M->getOrInsertComdat(GV->getName()));
|
||||
GV->setComdat(M->getOrInsertComdat(GV->getName()));
|
||||
};
|
||||
|
||||
uint64_t NumCounters = Inc->getNumCounters()->getZExtValue();
|
||||
|
@ -14,8 +14,8 @@ $_Z3barIvEvv = comdat any
|
||||
@__profn__Z3barIvEvv = linkonce_odr hidden constant [11 x i8] c"_Z3barIvEvv", align 1
|
||||
|
||||
; CHECK-NOT: __profn__Z3barIvEvv
|
||||
; CHECK: @__profc__Z3barIvEvv = linkonce_odr hidden global [1 x i64] zeroinitializer, section "{{.*}}__llvm_prf_cnts", comdat($__profv__Z3barIvEvv), align 8
|
||||
; CHECK: @__profd__Z3barIvEvv = linkonce_odr hidden global { i64, i64, i64*, i8*, i8*, i32, [2 x i16] } { i64 4947693190065689389, i64 0, i64* getelementptr inbounds ([1 x i64], [1 x i64]* @__profc__Z3barIvEvv, i32 0, i32 0), i8*{{.*}}, i8* null, i32 1, [2 x i16] zeroinitializer }, section "{{.*}}__llvm_prf_data{{.*}}", comdat($__profv__Z3barIvEvv), align 8
|
||||
; CHECK: @__profc__Z3barIvEvv = linkonce_odr hidden global [1 x i64] zeroinitializer, section "{{.*}}__llvm_prf_cnts", comdat, align 8
|
||||
; CHECK: @__profd__Z3barIvEvv = linkonce_odr hidden global { i64, i64, i64*, i8*, i8*, i32, [2 x i16] } { i64 4947693190065689389, i64 0, i64* getelementptr inbounds ([1 x i64], [1 x i64]* @__profc__Z3barIvEvv, i32 0, i32 0), i8*{{.*}}, i8* null, i32 1, [2 x i16] zeroinitializer }, section "{{.*}}__llvm_prf_data{{.*}}", comdat, align 8
|
||||
; CHECK: @__llvm_prf_nm = private constant [{{.*}} x i8] c"{{.*}}", section "{{.*}}__llvm_prf_names"
|
||||
|
||||
|
||||
|
@ -15,8 +15,8 @@ $foo_inline = comdat any
|
||||
|
||||
@__profn_foo_inline = linkonce_odr hidden constant [10 x i8] c"foo_inline"
|
||||
|
||||
; ELF: @__profc_foo_inline = linkonce_odr hidden global{{.*}}, section "__llvm_prf_cnts", comdat($__profv_foo_inline), align 8
|
||||
; ELF: @__profd_foo_inline = linkonce_odr hidden global{{.*}}, section "__llvm_prf_data", comdat($__profv_foo_inline), align 8
|
||||
; ELF: @__profc_foo_inline = linkonce_odr hidden global{{.*}}, section "__llvm_prf_cnts", comdat, align 8
|
||||
; ELF: @__profd_foo_inline = linkonce_odr hidden global{{.*}}, section "__llvm_prf_data", comdat, align 8
|
||||
; COFF: @__profc_foo_inline = linkonce_odr hidden global{{.*}}, section ".lprfc$M", comdat, align 8
|
||||
; COFF: @__profd_foo_inline = linkonce_odr hidden global{{.*}}, section ".lprfd$M", comdat, align 8
|
||||
define weak_odr void @foo_inline() comdat {
|
||||
@ -28,8 +28,8 @@ $foo_extern = comdat any
|
||||
|
||||
@__profn_foo_extern = linkonce_odr hidden constant [10 x i8] c"foo_extern"
|
||||
|
||||
; ELF: @__profc_foo_extern = linkonce_odr hidden global{{.*}}, section "__llvm_prf_cnts", comdat($__profv_foo_extern)
|
||||
; ELF: @__profd_foo_extern = linkonce_odr hidden global{{.*}}, section "__llvm_prf_data", comdat($__profv_foo_extern)
|
||||
; ELF: @__profc_foo_extern = linkonce_odr hidden global{{.*}}, section "__llvm_prf_cnts", comdat, align 8
|
||||
; ELF: @__profd_foo_extern = linkonce_odr hidden global{{.*}}, section "__llvm_prf_data", comdat, align 8
|
||||
; COFF: @__profc_foo_extern = linkonce_odr hidden global{{.*}}, section ".lprfc$M", comdat, align 8
|
||||
; COFF: @__profd_foo_extern = linkonce_odr hidden global{{.*}}, section ".lprfd$M", comdat, align 8
|
||||
define available_externally void @foo_extern() {
|
||||
|
@ -53,8 +53,8 @@ define linkonce_odr void @foo_inline() {
|
||||
ret void
|
||||
}
|
||||
|
||||
; LINUX: @__profc_foo_extern = linkonce_odr hidden global {{.*}}section "__llvm_prf_cnts", comdat($__profv_foo_extern), align 8
|
||||
; LINUX: @__profd_foo_extern = linkonce_odr hidden global {{.*}}section "__llvm_prf_data", comdat($__profv_foo_extern), align 8
|
||||
; LINUX: @__profc_foo_extern = linkonce_odr hidden global {{.*}}section "__llvm_prf_cnts", comdat, align 8
|
||||
; LINUX: @__profd_foo_extern = linkonce_odr hidden global {{.*}}section "__llvm_prf_data", comdat, align 8
|
||||
; MACHO: @__profc_foo_extern = linkonce_odr hidden global
|
||||
; MACHO: @__profd_foo_extern = linkonce_odr hidden global
|
||||
; COFF: @__profc_foo_extern = linkonce_odr hidden global {{.*}}section ".lprfc$M", comdat, align 8
|
||||
|
@ -7,16 +7,15 @@ $foo = comdat any
|
||||
; CHECK: $foo = comdat any
|
||||
|
||||
; CHECK: $__llvm_profile_raw_version = comdat any
|
||||
; CHECK: $__profv__stdin__foo.[[FOO_HASH:[0-9]+]] = comdat any
|
||||
|
||||
@bar = global i32 ()* @foo, align 8
|
||||
|
||||
; CHECK: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
|
||||
; CHECK-NOT: __profn__stdin__foo
|
||||
; CHECK: @__profc__stdin__foo.[[FOO_HASH]] = private global [1 x i64] zeroinitializer, section "__llvm_prf_cnts", comdat($__profv__stdin__foo.[[FOO_HASH]]), align 8
|
||||
; CHECK: @__profc__stdin__foo.[[FOO_HASH:[0-9]+]] = private global [1 x i64] zeroinitializer, section "__llvm_prf_cnts", comdat, align 8
|
||||
; CHECK: @__profd__stdin__foo.[[FOO_HASH]] = private global { i64, i64, i64*, i8*, i8*, i32, [2 x i16] } { i64 -5640069336071256030, i64 [[FOO_HASH]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @__profc__stdin__foo.[[FOO_HASH]], i32 0, i32 0), i8* null
|
||||
; CHECK-NOT: bitcast (i32 ()* @foo to i8*)
|
||||
; CHECK-SAME: , i8* null, i32 1, [2 x i16] zeroinitializer }, section "__llvm_prf_data", comdat($__profv__stdin__foo.[[FOO_HASH]]), align 8
|
||||
; CHECK-SAME: , i8* null, i32 1, [2 x i16] zeroinitializer }, section "__llvm_prf_data", comdat, align 8
|
||||
; CHECK: @__llvm_prf_nm
|
||||
; CHECK: @llvm.used
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user