From c7712087cbb505d324e1149fa224f607c91a8c6a Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Wed, 10 Mar 2021 01:09:29 -0800 Subject: [PATCH] [InstrProfiling] Don't generate __llvm_profile_runtime_user This is no longer needed, we can add __llvm_profile_runtime directly to llvm.compiler.used or llvm.used to achieve the same effect. Differential Revision: https://reviews.llvm.org/D98325 --- llvm/include/llvm/ProfileData/InstrProf.h | 6 ------ llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp | 17 +---------------- llvm/test/Instrumentation/InstrProfiling/linkage.ll | 8 -------- llvm/test/Instrumentation/InstrProfiling/profiling.ll | 7 ++++--- 4 files changed, 5 insertions(+), 33 deletions(-) diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h index 4a2cebe..1ceab4f 100644 --- a/llvm/include/llvm/ProfileData/InstrProf.h +++ b/llvm/include/llvm/ProfileData/InstrProf.h @@ -149,12 +149,6 @@ inline StringRef getInstrProfRuntimeHookVarName() { return INSTR_PROF_QUOTE(INSTR_PROF_PROFILE_RUNTIME_VAR); } -/// Return the name of the compiler generated function that references the -/// runtime hook variable. The function is a weak global. -inline StringRef getInstrProfRuntimeHookVarUseFuncName() { - return "__llvm_profile_runtime_user"; -} - inline StringRef getInstrProfCounterBiasVarName() { return "__llvm_profile_counter_bias"; } diff --git a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp index bdb1824..3c5b579 100644 --- a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp +++ b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp @@ -1073,23 +1073,8 @@ bool InstrProfiling::emitRuntimeHook() { new GlobalVariable(*M, Int32Ty, false, GlobalValue::ExternalLinkage, nullptr, getInstrProfRuntimeHookVarName()); - // Make a function that uses it. - auto *User = Function::Create(FunctionType::get(Int32Ty, false), - GlobalValue::LinkOnceODRLinkage, - getInstrProfRuntimeHookVarUseFuncName(), M); - User->addFnAttr(Attribute::NoInline); - if (Options.NoRedZone) - User->addFnAttr(Attribute::NoRedZone); - User->setVisibility(GlobalValue::HiddenVisibility); - if (TT.supportsCOMDAT()) - User->setComdat(M->getOrInsertComdat(User->getName())); - - IRBuilder<> IRB(BasicBlock::Create(M->getContext(), "", User)); - auto *Load = IRB.CreateLoad(Int32Ty, Var); - IRB.CreateRet(Load); - // Mark the user variable as used so that it isn't stripped out. - CompilerUsedVars.push_back(User); + CompilerUsedVars.push_back(Var); return true; } diff --git a/llvm/test/Instrumentation/InstrProfiling/linkage.ll b/llvm/test/Instrumentation/InstrProfiling/linkage.ll index 8de6a2e..61fe9a5 100644 --- a/llvm/test/Instrumentation/InstrProfiling/linkage.ll +++ b/llvm/test/Instrumentation/InstrProfiling/linkage.ll @@ -81,11 +81,3 @@ define available_externally void @foo_extern() { } declare void @llvm.instrprof.increment(i8*, i64, i32, i32) - -; MACHO: define linkonce_odr hidden i32 @__llvm_profile_runtime_user() {{.*}} { -; MACHO: %[[REG:.*]] = load i32, i32* @__llvm_profile_runtime -; MACHO: ret i32 %[[REG]] -; MACHO: } -; COFF: define linkonce_odr hidden i32 @__llvm_profile_runtime_user() {{.*}} comdat { -; ELF-NOT: define linkonce_odr hidden i32 @__llvm_profile_runtime_user() {{.*}} { -; ELF-NOT: %[[REG:.*]] = load i32, i32* @__llvm_profile_runtime diff --git a/llvm/test/Instrumentation/InstrProfiling/profiling.ll b/llvm/test/Instrumentation/InstrProfiling/profiling.ll index 44262dd..e2e47e0 100644 --- a/llvm/test/Instrumentation/InstrProfiling/profiling.ll +++ b/llvm/test/Instrumentation/InstrProfiling/profiling.ll @@ -54,11 +54,12 @@ define void @baz() { declare void @llvm.instrprof.increment(i8*, i64, i32, i32) -; ELF: @llvm.compiler.used = appending global {{.*}} @__llvm_profile_runtime_user {{.*}} @__profd_foo {{.*}} @__profd_bar {{.*}} @__profd_baz -; MACHO: @llvm.used = appending global {{.*}} @__llvm_profile_runtime_user {{.*}} @__profd_foo {{.*}} @__profd_bar {{.*}} @__profd_baz -; WIN: @llvm.used = appending global {{.*}} @__llvm_profile_runtime_user {{.*}} @__profd_foo {{.*}} @__profd_bar {{.*}} @__profd_baz +; ELF: @llvm.compiler.used = appending global {{.*}} @__llvm_profile_runtime {{.*}} @__profd_foo {{.*}} @__profd_bar {{.*}} @__profd_baz +; MACHO: @llvm.used = appending global {{.*}} @__llvm_profile_runtime {{.*}} @__profd_foo {{.*}} @__profd_bar {{.*}} @__profd_baz +; WIN: @llvm.used = appending global {{.*}} @__llvm_profile_runtime {{.*}} @__profd_foo {{.*}} @__profd_bar {{.*}} @__profd_baz ; ELF_GENERIC: define internal void @__llvm_profile_register_functions() unnamed_addr { +; ELF_GENERIC-NEXT: call void @__llvm_profile_register_function(i8* bitcast (i32* @__llvm_profile_runtime to i8*)) ; ELF_GENERIC-NEXT: call void @__llvm_profile_register_function(i8* bitcast ({ i64, i64, i64*, i8*, i8*, i32, [2 x i16] }* @__profd_foo to i8*)) ; ELF_GENERIC-NEXT: call void @__llvm_profile_register_function(i8* bitcast ({ i64, i64, i64*, i8*, i8*, i32, [2 x i16] }* @__profd_bar to i8*)) ; ELF_GENERIC-NEXT: call void @__llvm_profile_register_function(i8* bitcast ({ i64, i64, i64*, i8*, i8*, i32, [2 x i16] }* @__profd_baz to i8*)) -- 2.7.4