InstrProf: Make profile variables private to reduce binary size overhead
When we instrument a program for profiling, we copy the linkage of an instrumented function so that our datastructures merge in the same way as the function. This avoids redundant copies for things like linkonce, but ends up emitting names we never need to reference for normal and internal symbols. Promoting internal and external linkage to private for these variables reduces the size overhead of profiling drastically. llvm-svn: 232799
This commit is contained in:
parent
3a8eb896c9
commit
e9fe0a298c
|
@ -58,12 +58,16 @@ void CodeGenPGO::setFuncName(llvm::Function *Fn) {
|
|||
}
|
||||
|
||||
void CodeGenPGO::createFuncNameVar(llvm::GlobalValue::LinkageTypes Linkage) {
|
||||
// Usually, we want to match the function's linkage, but
|
||||
// available_externally and extern_weak both have the wrong semantics.
|
||||
// We generally want to match the function's linkage, but available_externally
|
||||
// and extern_weak both have the wrong semantics, and anything that doesn't
|
||||
// need to link across compilation units doesn't need to be visible at all.
|
||||
if (Linkage == llvm::GlobalValue::ExternalWeakLinkage)
|
||||
Linkage = llvm::GlobalValue::LinkOnceAnyLinkage;
|
||||
else if (Linkage == llvm::GlobalValue::AvailableExternallyLinkage)
|
||||
Linkage = llvm::GlobalValue::LinkOnceODRLinkage;
|
||||
else if (Linkage == llvm::GlobalValue::InternalLinkage ||
|
||||
Linkage == llvm::GlobalValue::ExternalLinkage)
|
||||
Linkage = llvm::GlobalValue::PrivateLinkage;
|
||||
|
||||
auto *Value =
|
||||
llvm::ConstantDataArray::getString(CGM.getLLVMContext(), FuncName, false);
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
// RUN: llvm-profdata merge %S/Inputs/c-captured.proftext -o %t.profdata
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name c-captured.c %s -o - -emit-llvm -fprofile-instr-use=%t.profdata | FileCheck -check-prefix=PGOUSE -check-prefix=PGOALL %s
|
||||
|
||||
// PGOGEN: @[[DCC:__llvm_profile_counters_debug_captured]] = hidden global [3 x i64] zeroinitializer
|
||||
// PGOGEN: @[[CSC:"__llvm_profile_counters_c-captured.c:__captured_stmt"]] = internal global [2 x i64] zeroinitializer
|
||||
// PGOGEN: @[[C1C:"__llvm_profile_counters_c-captured.c:__captured_stmt1"]] = internal global [3 x i64] zeroinitializer
|
||||
// PGOGEN: @[[DCC:__llvm_profile_counters_debug_captured]] = private global [3 x i64] zeroinitializer
|
||||
// PGOGEN: @[[CSC:"__llvm_profile_counters_c-captured.c:__captured_stmt"]] = private global [2 x i64] zeroinitializer
|
||||
// PGOGEN: @[[C1C:"__llvm_profile_counters_c-captured.c:__captured_stmt1"]] = private global [3 x i64] zeroinitializer
|
||||
|
||||
// PGOALL-LABEL: define void @debug_captured()
|
||||
// PGOGEN: store {{.*}} @[[DCC]], i64 0, i64 0
|
||||
|
|
|
@ -8,17 +8,17 @@
|
|||
// Also check compatibility with older profiles.
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name c-general.c %s -o - -emit-llvm -fprofile-instr-use=%S/Inputs/c-general.profdata.v1 | FileCheck -check-prefix=PGOUSE %s
|
||||
|
||||
// PGOGEN: @[[SLC:__llvm_profile_counters_simple_loops]] = hidden global [4 x i64] zeroinitializer
|
||||
// PGOGEN: @[[IFC:__llvm_profile_counters_conditionals]] = hidden global [11 x i64] zeroinitializer
|
||||
// PGOGEN: @[[EEC:__llvm_profile_counters_early_exits]] = hidden global [9 x i64] zeroinitializer
|
||||
// PGOGEN: @[[JMC:__llvm_profile_counters_jumps]] = hidden global [22 x i64] zeroinitializer
|
||||
// PGOGEN: @[[SWC:__llvm_profile_counters_switches]] = hidden global [19 x i64] zeroinitializer
|
||||
// PGOGEN: @[[BSC:__llvm_profile_counters_big_switch]] = hidden global [17 x i64] zeroinitializer
|
||||
// PGOGEN: @[[BOC:__llvm_profile_counters_boolean_operators]] = hidden global [8 x i64] zeroinitializer
|
||||
// PGOGEN: @[[BLC:__llvm_profile_counters_boolop_loops]] = hidden global [9 x i64] zeroinitializer
|
||||
// PGOGEN: @[[COC:__llvm_profile_counters_conditional_operator]] = hidden global [3 x i64] zeroinitializer
|
||||
// PGOGEN: @[[MAC:__llvm_profile_counters_main]] = hidden global [1 x i64] zeroinitializer
|
||||
// PGOGEN: @[[STC:"__llvm_profile_counters_c-general.c:static_func"]] = internal global [2 x i64] zeroinitializer
|
||||
// PGOGEN: @[[SLC:__llvm_profile_counters_simple_loops]] = private global [4 x i64] zeroinitializer
|
||||
// PGOGEN: @[[IFC:__llvm_profile_counters_conditionals]] = private global [11 x i64] zeroinitializer
|
||||
// PGOGEN: @[[EEC:__llvm_profile_counters_early_exits]] = private global [9 x i64] zeroinitializer
|
||||
// PGOGEN: @[[JMC:__llvm_profile_counters_jumps]] = private global [22 x i64] zeroinitializer
|
||||
// PGOGEN: @[[SWC:__llvm_profile_counters_switches]] = private global [19 x i64] zeroinitializer
|
||||
// PGOGEN: @[[BSC:__llvm_profile_counters_big_switch]] = private global [17 x i64] zeroinitializer
|
||||
// PGOGEN: @[[BOC:__llvm_profile_counters_boolean_operators]] = private global [8 x i64] zeroinitializer
|
||||
// PGOGEN: @[[BLC:__llvm_profile_counters_boolop_loops]] = private global [9 x i64] zeroinitializer
|
||||
// PGOGEN: @[[COC:__llvm_profile_counters_conditional_operator]] = private global [3 x i64] zeroinitializer
|
||||
// PGOGEN: @[[MAC:__llvm_profile_counters_main]] = private global [1 x i64] zeroinitializer
|
||||
// PGOGEN: @[[STC:"__llvm_profile_counters_c-general.c:static_func"]] = private global [2 x i64] zeroinitializer
|
||||
|
||||
// PGOGEN-LABEL: @simple_loops()
|
||||
// PGOUSE-LABEL: @simple_loops()
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
// Check that the profiling names we create have the linkage we expect
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name c-linkage.c %s -o - -emit-llvm -fprofile-instr-generate | FileCheck %s
|
||||
|
||||
// CHECK: @__llvm_profile_name_foo = hidden constant [3 x i8] c"foo"
|
||||
// CHECK: @__llvm_profile_name_foo = private constant [3 x i8] c"foo"
|
||||
// CHECK: @__llvm_profile_name_foo_weak = weak hidden constant [8 x i8] c"foo_weak"
|
||||
// CHECK: @__llvm_profile_name_main = hidden constant [4 x i8] c"main"
|
||||
// CHECK: @"__llvm_profile_name_c-linkage.c:foo_internal" = internal constant [24 x i8] c"c-linkage.c:foo_internal"
|
||||
// CHECK: @__llvm_profile_name_main = private constant [4 x i8] c"main"
|
||||
// CHECK: @"__llvm_profile_name_c-linkage.c:foo_internal" = private constant [24 x i8] c"c-linkage.c:foo_internal"
|
||||
|
||||
void foo(void) { }
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// RUN: %clang_cc1 -O3 -triple x86_64-apple-macosx10.10 -main-file-name c-unreachable-after-switch.c %s -o - -emit-llvm -fprofile-instr-generate | FileCheck %s
|
||||
|
||||
// CHECK: @[[C:__llvm_profile_counters_foo]] = hidden global [3 x i64] zeroinitializer
|
||||
// CHECK: @[[C:__llvm_profile_counters_foo]] = private global [3 x i64] zeroinitializer
|
||||
|
||||
// CHECK-LABEL: @foo()
|
||||
// CHECK: store {{.*}} @[[C]], i64 0, i64 0
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
// RUN: FileCheck --input-file=%tuse -check-prefix=PGOUSE %s
|
||||
// RUN: FileCheck --input-file=%tuse -check-prefix=LMBUSE %s
|
||||
|
||||
// PGOGEN: @[[LWC:__llvm_profile_counters__Z7lambdasv]] = hidden global [4 x i64] zeroinitializer
|
||||
// PGOGEN: @[[MAC:__llvm_profile_counters_main]] = hidden global [1 x i64] zeroinitializer
|
||||
// LMBGEN: @[[LFC:"__llvm_profile_counters_cxx-lambda.cpp:_ZZ7lambdasvENK3\$_0clEi"]] = internal global [3 x i64] zeroinitializer
|
||||
// PGOGEN: @[[LWC:__llvm_profile_counters__Z7lambdasv]] = private global [4 x i64] zeroinitializer
|
||||
// PGOGEN: @[[MAC:__llvm_profile_counters_main]] = private global [1 x i64] zeroinitializer
|
||||
// LMBGEN: @[[LFC:"__llvm_profile_counters_cxx-lambda.cpp:_ZZ7lambdasvENK3\$_0clEi"]] = private global [3 x i64] zeroinitializer
|
||||
|
||||
// PGOGEN-LABEL: define void @_Z7lambdasv()
|
||||
// PGOUSE-LABEL: define void @_Z7lambdasv()
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9.0 -emit-llvm -main-file-name cxx-linkage.cpp %s -o - -fprofile-instr-generate | FileCheck %s
|
||||
|
||||
// CHECK: @__llvm_profile_name__Z3foov = hidden constant [7 x i8] c"_Z3foov"
|
||||
// CHECK: @__llvm_profile_name__Z3foov = private constant [7 x i8] c"_Z3foov"
|
||||
// CHECK: @__llvm_profile_name__Z8foo_weakv = weak hidden constant [12 x i8] c"_Z8foo_weakv"
|
||||
// CHECK: @__llvm_profile_name_main = hidden constant [4 x i8] c"main"
|
||||
// CHECK: @__llvm_profile_name_main = private constant [4 x i8] c"main"
|
||||
// CHECK: @__llvm_profile_name__Z10foo_inlinev = linkonce_odr hidden constant [15 x i8] c"_Z10foo_inlinev"
|
||||
|
||||
void foo(void) { }
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
// RUN: %clang %s -o - -emit-llvm -S -fprofile-instr-use=%t.profdata -fcxx-exceptions -target %itanium_abi_triple | FileCheck -check-prefix=PGOUSE %s
|
||||
// RUN: %clang %s -o - -emit-llvm -S -fprofile-instr-use=%t.profdata -fcxx-exceptions -target %itanium_abi_triple | FileCheck -check-prefix=PGOUSE-EXC %s
|
||||
|
||||
// PGOGEN: @[[THC:__llvm_profile_counters__Z6throwsv]] = hidden global [9 x i64] zeroinitializer
|
||||
// PGOGEN-EXC: @[[THC:__llvm_profile_counters__Z6throwsv]] = hidden global [9 x i64] zeroinitializer
|
||||
// PGOGEN: @[[THC:__llvm_profile_counters__Z6throwsv]] = private global [9 x i64] zeroinitializer
|
||||
// PGOGEN-EXC: @[[THC:__llvm_profile_counters__Z6throwsv]] = private global [9 x i64] zeroinitializer
|
||||
|
||||
// PGOGEN-LABEL: @_Z6throwsv()
|
||||
// PGOUSE-LABEL: @_Z6throwsv()
|
||||
|
|
|
@ -31,9 +31,9 @@ struct NSFastEnumerationState;
|
|||
@end;
|
||||
#endif
|
||||
|
||||
// PGOGEN: @[[FRC:"__llvm_profile_counters_objc-general.m:\+\[A foreach:\]"]] = internal global [2 x i64] zeroinitializer
|
||||
// PGOGEN: @[[BLC:"__llvm_profile_counters_objc-general.m:__13\+\[A foreach:\]_block_invoke"]] = internal global [2 x i64] zeroinitializer
|
||||
// PGOGEN: @[[MAC:__llvm_profile_counters_main]] = hidden global [1 x i64] zeroinitializer
|
||||
// PGOGEN: @[[FRC:"__llvm_profile_counters_objc-general.m:\+\[A foreach:\]"]] = private global [2 x i64] zeroinitializer
|
||||
// PGOGEN: @[[BLC:"__llvm_profile_counters_objc-general.m:__13\+\[A foreach:\]_block_invoke"]] = private global [2 x i64] zeroinitializer
|
||||
// PGOGEN: @[[MAC:__llvm_profile_counters_main]] = private global [1 x i64] zeroinitializer
|
||||
|
||||
@interface A : NSObject
|
||||
+ (void)foreach: (NSArray *)array;
|
||||
|
|
Loading…
Reference in New Issue