forked from OSchip/llvm-project
Re-apply "[profiling] Remove dead profile name vars after emitting name data"
This reverts 295092 (re-applies 295084), with a fix for dangling references from the array of coverage names passed down from frontends. I missed this in my initial testing because I only checked test/Profile, and not test/CoverageMapping as well. Original commit message: The profile name variables passed to counter increment intrinsics are dead after we emit the finalized name data in __llvm_prf_nm. However, we neglect to erase these name variables. This causes huge size increases in the __TEXT,__const section as well as slowdowns when linker dead stripping is disabled. Some affected projects are so massive that they fail to link on Darwin, because only the small code model is supported. Fix the issue by throwing away the name constants as soon as we're done with them. Differential Revision: https://reviews.llvm.org/D29921 llvm-svn: 295099
This commit is contained in:
parent
6edc4883fe
commit
55891fc71e
|
@ -295,7 +295,9 @@ void InstrProfiling::lowerCoverageData(GlobalVariable *CoverageNamesVar) {
|
|||
|
||||
Name->setLinkage(GlobalValue::PrivateLinkage);
|
||||
ReferencedNames.push_back(Name);
|
||||
NC->dropAllReferences();
|
||||
}
|
||||
CoverageNamesVar->eraseFromParent();
|
||||
}
|
||||
|
||||
/// Get the name of a profiling variable for a particular function.
|
||||
|
@ -532,6 +534,9 @@ void InstrProfiling::emitNameData() {
|
|||
NamesSize = CompressedNameStr.size();
|
||||
NamesVar->setSection(getNameSection());
|
||||
UsedVars.push_back(NamesVar);
|
||||
|
||||
for (auto *NamePtr : ReferencedNames)
|
||||
NamePtr->eraseFromParent();
|
||||
}
|
||||
|
||||
void InstrProfiling::emitRegistration() {
|
||||
|
|
|
@ -13,13 +13,13 @@ $_Z3barIvEvv = comdat any
|
|||
|
||||
@__profn__Z3barIvEvv = linkonce_odr hidden constant [11 x i8] c"_Z3barIvEvv", align 1
|
||||
|
||||
; CHECK: @__profn__Z3barIvEvv = private 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, [1 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, [1 x i16] zeroinitializer }, section "{{.*}}__llvm_prf_data{{.*}}", comdat($__profv__Z3barIvEvv), align 8
|
||||
; CHECK: @__llvm_prf_nm = private constant [{{.*}} x i8] c"{{.*}}", section "{{.*}}__llvm_prf_names"
|
||||
|
||||
|
||||
; COFF: @__profn__Z3barIvEvv = private constant [11 x i8] c"_Z3barIvEvv", align 1
|
||||
; COFF-NOT: __profn__Z3barIvEvv
|
||||
; COFF: @__profc__Z3barIvEvv = linkonce_odr hidden global [1 x i64] zeroinitializer, section "{{.*}}__llvm_prf_cnts", comdat, align 8
|
||||
; COFF: @__profd__Z3barIvEvv = linkonce_odr hidden global { i64, i64, i64*, i8*, i8*, i32, [1 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, [1 x i16] zeroinitializer }, section "{{.*}}__llvm_prf_data{{.*}}", comdat($__profc__Z3barIvEvv), align 8
|
||||
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
; RUN: opt < %s -mtriple=x86_64-pc-solaris -passes=instrprof -S | FileCheck %s -check-prefix=SOLARIS
|
||||
|
||||
@__profn_foo = hidden constant [3 x i8] c"foo"
|
||||
; MACHO: @__profn_foo = private constant [3 x i8] c"foo"
|
||||
; ELF: @__profn_foo = private constant [3 x i8] c"foo"
|
||||
; MACHO-NOT: __profn_foo
|
||||
; ELF-NOT: __profn_foo
|
||||
|
||||
; MACHO: @__profc_foo = hidden global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
|
||||
; ELF: @__profc_foo = hidden global [1 x i64] zeroinitializer, section "__llvm_prf_cnts", align 8
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
target triple = "x86_64-apple-macosx10.10.0"
|
||||
|
||||
@__profn_foo = hidden constant [3 x i8] c"foo"
|
||||
; CHECK: @__profn_foo = private constant [3 x i8] c"foo"
|
||||
; CHECK-NOT: __profn_foo
|
||||
@__profn_bar = hidden constant [4 x i8] c"bar\00"
|
||||
; CHECK: @__profn_bar = private constant [4 x i8] c"bar\00"
|
||||
; CHECK-NOT: __profn_bar
|
||||
@__profn_baz = hidden constant [3 x i8] c"baz"
|
||||
; CHECK: @__profn_baz = private constant [3 x i8] c"baz"
|
||||
; CHECK-NOT: __profn_baz
|
||||
|
||||
; CHECK: @__profc_foo = hidden global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
|
||||
; CHECK: @__profd_foo = hidden {{.*}}, section "__DATA,__llvm_prf_data,regular,live_support", align 8
|
||||
|
|
|
@ -12,7 +12,7 @@ $foo = comdat any
|
|||
@bar = global i32 ()* @foo, align 8
|
||||
|
||||
; CHECK: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
|
||||
; CHECK: @__profn__stdin__foo = private constant [11 x i8] c"<stdin>:foo"
|
||||
; 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: @__profd__stdin__foo.[[FOO_HASH]] = private global { i64, i64, i64*, i8*, i8*, i32, [1 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*)
|
||||
|
|
Loading…
Reference in New Issue