From ecac223b0e4b05a65cf918f90824380db6b9ce64 Mon Sep 17 00:00:00 2001 From: Alex Brachet Date: Thu, 13 Oct 2022 19:47:15 +0000 Subject: [PATCH] [PGO] Make emitted symbols hidden This was reverted because it was breaking when targeting Darwin which tried to export these symbols which are now hidden. It should be safe to just stop attempting to export these symbols in the clang driver, though Apple folks will need to change their TAPI allow list described in the commit where these symbols were originally exported https://github.com/llvm/llvm-project/commit/f5380185623be243ba0f1b18d4bd594ac5cc7163 Bug: https://github.com/llvm/llvm-project/issues/58265 Differential Revision: https://reviews.llvm.org/D135340 --- clang/lib/Driver/ToolChains/Darwin.cpp | 15 +++++---------- clang/test/Driver/darwin-ld.c | 12 ------------ llvm/lib/ProfileData/InstrProf.cpp | 1 + .../Instrumentation/PGOInstrumentation.cpp | 2 +- llvm/test/Transforms/PGOProfile/branch1.ll | 2 +- llvm/test/Transforms/PGOProfile/branch2.ll | 2 +- .../test/Transforms/PGOProfile/comdat_internal.ll | 2 +- llvm/test/Transforms/PGOProfile/criticaledge.ll | 2 +- llvm/test/Transforms/PGOProfile/filename.ll | 11 +++++++++++ llvm/test/Transforms/PGOProfile/instr_entry_bb.ll | 2 +- llvm/test/Transforms/PGOProfile/landingpad.ll | 2 +- llvm/test/Transforms/PGOProfile/loop1.ll | 2 +- llvm/test/Transforms/PGOProfile/loop2.ll | 2 +- llvm/test/Transforms/PGOProfile/lto_cspgo_gen.ll | 4 ++-- llvm/test/Transforms/PGOProfile/single_bb.ll | 2 +- llvm/test/Transforms/PGOProfile/switch.ll | 2 +- .../Transforms/PGOProfile/thinlto_cspgo_gen.ll | 4 ++-- 17 files changed, 32 insertions(+), 37 deletions(-) create mode 100644 llvm/test/Transforms/PGOProfile/filename.ll diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 758961d3bf79a..2bb8132a9a6b4 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -1353,16 +1353,11 @@ void Darwin::addProfileRTLibs(const ArgList &Args, // If we have a symbol export directive and we're linking in the profile // runtime, automatically export symbols necessary to implement some of the // runtime's functionality. - if (hasExportSymbolDirective(Args)) { - if (ForGCOV) { - addExportedSymbol(CmdArgs, "___gcov_dump"); - addExportedSymbol(CmdArgs, "___gcov_reset"); - addExportedSymbol(CmdArgs, "_writeout_fn_list"); - addExportedSymbol(CmdArgs, "_reset_fn_list"); - } else { - addExportedSymbol(CmdArgs, "___llvm_profile_filename"); - addExportedSymbol(CmdArgs, "___llvm_profile_raw_version"); - } + if (hasExportSymbolDirective(Args) && ForGCOV) { + addExportedSymbol(CmdArgs, "___gcov_dump"); + addExportedSymbol(CmdArgs, "___gcov_reset"); + addExportedSymbol(CmdArgs, "_writeout_fn_list"); + addExportedSymbol(CmdArgs, "_reset_fn_list"); } // Align __llvm_prf_{cnts,data} sections to the maximum expected page diff --git a/clang/test/Driver/darwin-ld.c b/clang/test/Driver/darwin-ld.c index 5be119a545a63..13ec69b2db1ab 100644 --- a/clang/test/Driver/darwin-ld.c +++ b/clang/test/Driver/darwin-ld.c @@ -338,18 +338,6 @@ // RUN: FileCheck -check-prefix=PROFILE_SECTALIGN %s < %t.log // PROFILE_SECTALIGN: "-sectalign" "__DATA" "__llvm_prf_cnts" "0x4000" "-sectalign" "__DATA" "__llvm_prf_data" "0x4000" -// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -exported_symbols_list /dev/null -### %t.o 2> %t.log -// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log -// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Wl,-exported_symbols_list,/dev/null -### %t.o 2> %t.log -// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log -// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Wl,-exported_symbol,foo -### %t.o 2> %t.log -// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log -// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Xlinker -exported_symbol -Xlinker foo -### %t.o 2> %t.log -// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log -// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Xlinker -exported_symbols_list -Xlinker /dev/null -### %t.o 2> %t.log -// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log -// PROFILE_EXPORT: "-exported_symbol" "___llvm_profile_filename" "-exported_symbol" "___llvm_profile_raw_version" -// // RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate --coverage -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=NO_PROFILE_EXPORT %s < %t.log // NO_PROFILE_EXPORT-NOT: "-exported_symbol" diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp index 9c04bcb8416f5..eab1eab82ac2f 100644 --- a/llvm/lib/ProfileData/InstrProf.cpp +++ b/llvm/lib/ProfileData/InstrProf.cpp @@ -1210,6 +1210,7 @@ void createProfileFileNameVar(Module &M, StringRef InstrProfileOutput) { GlobalVariable *ProfileNameVar = new GlobalVariable( M, ProfileNameConst->getType(), true, GlobalValue::WeakAnyLinkage, ProfileNameConst, INSTR_PROF_QUOTE(INSTR_PROF_PROFILE_NAME_VAR)); + ProfileNameVar->setVisibility(GlobalValue::HiddenVisibility); Triple TT(M.getTargetTriple()); if (TT.supportsCOMDAT()) { ProfileNameVar->setLinkage(GlobalValue::ExternalLinkage); diff --git a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp index 6bb29a0f34acf..cd50c97564082 100644 --- a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -380,7 +380,7 @@ static GlobalVariable *createIRLevelProfileFlagVar(Module &M, bool IsCS) { auto IRLevelVersionVariable = new GlobalVariable( M, IntTy64, true, GlobalValue::WeakAnyLinkage, Constant::getIntegerValue(IntTy64, APInt(64, ProfileVersion)), VarName); - IRLevelVersionVariable->setVisibility(GlobalValue::DefaultVisibility); + IRLevelVersionVariable->setVisibility(GlobalValue::HiddenVisibility); Triple TT(M.getTargetTriple()); if (TT.supportsCOMDAT()) { IRLevelVersionVariable->setLinkage(GlobalValue::ExternalLinkage); diff --git a/llvm/test/Transforms/PGOProfile/branch1.ll b/llvm/test/Transforms/PGOProfile/branch1.ll index 7ec23d08ea5eb..22c4fd5d3c10f 100644 --- a/llvm/test/Transforms/PGOProfile/branch1.ll +++ b/llvm/test/Transforms/PGOProfile/branch1.ll @@ -14,7 +14,7 @@ target triple = "x86_64-unknown-linux-gnu" ; GEN-DARWIN-LINKONCE: target triple = "x86_64-apple-darwin" ; GEN-COMDAT: $__llvm_profile_raw_version = comdat any -; GEN-COMDAT: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; GEN-COMDAT: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat ; GEN-LINKONCE: @__llvm_profile_raw_version = linkonce constant i64 {{[0-9]+}} ; GEN: @__profn_test_br_1 = private constant [9 x i8] c"test_br_1" diff --git a/llvm/test/Transforms/PGOProfile/branch2.ll b/llvm/test/Transforms/PGOProfile/branch2.ll index b65020d1557bf..82478e75cb262 100644 --- a/llvm/test/Transforms/PGOProfile/branch2.ll +++ b/llvm/test/Transforms/PGOProfile/branch2.ll @@ -9,7 +9,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16 target triple = "x86_64-unknown-linux-gnu" ; GEN: $__llvm_profile_raw_version = comdat any -; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat ; GEN: @__profn_test_br_2 = private constant [9 x i8] c"test_br_2" define i32 @test_br_2(i32 %i) { diff --git a/llvm/test/Transforms/PGOProfile/comdat_internal.ll b/llvm/test/Transforms/PGOProfile/comdat_internal.ll index 64274a33999df..a1cf115f910ad 100644 --- a/llvm/test/Transforms/PGOProfile/comdat_internal.ll +++ b/llvm/test/Transforms/PGOProfile/comdat_internal.ll @@ -10,7 +10,7 @@ $foo = comdat any @bar = global ptr @foo, align 8 -; CHECK: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; CHECK: @__llvm_profile_raw_version = hidden 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, align 8 ; CHECK: @__profd__stdin__foo.[[#FOO_HASH]] = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -5640069336071256030, i64 [[#FOO_HASH]], i64 sub (i64 ptrtoint (ptr @__profc__stdin__foo.742261418966908927 to i64), i64 ptrtoint (ptr @__profd__stdin__foo.742261418966908927 to i64)), ptr null diff --git a/llvm/test/Transforms/PGOProfile/criticaledge.ll b/llvm/test/Transforms/PGOProfile/criticaledge.ll index 4264b03c23d12..616d0fa3a4cf2 100644 --- a/llvm/test/Transforms/PGOProfile/criticaledge.ll +++ b/llvm/test/Transforms/PGOProfile/criticaledge.ll @@ -9,7 +9,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16 target triple = "x86_64-unknown-linux-gnu" ; GEN: $__llvm_profile_raw_version = comdat any -; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat ; GEN: @__profn_test_criticalEdge = private constant [17 x i8] c"test_criticalEdge" ; GEN: @__profn__stdin__bar = private constant [11 x i8] c":bar" diff --git a/llvm/test/Transforms/PGOProfile/filename.ll b/llvm/test/Transforms/PGOProfile/filename.ll new file mode 100644 index 0000000000000..43bc4a592e174 --- /dev/null +++ b/llvm/test/Transforms/PGOProfile/filename.ll @@ -0,0 +1,11 @@ +; RUN: opt < %s -passes='thinlto-pre-link' --cs-profilegen-file=file -cspgo-kind=cspgo-instr-gen-pipeline -S | FileCheck %s + +; CHECK: $__llvm_profile_filename = comdat any +; CHECK: @__llvm_profile_filename = hidden local_unnamed_addr constant [5 x i8] c"file\00", comdat + +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +define i32 @test() { + ret i32 0 +} diff --git a/llvm/test/Transforms/PGOProfile/instr_entry_bb.ll b/llvm/test/Transforms/PGOProfile/instr_entry_bb.ll index e1380a0edf0e1..ee088674e35e2 100644 --- a/llvm/test/Transforms/PGOProfile/instr_entry_bb.ll +++ b/llvm/test/Transforms/PGOProfile/instr_entry_bb.ll @@ -7,7 +7,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16 target triple = "x86_64-unknown-linux-gnu" ; GEN: $__llvm_profile_raw_version = comdat any -; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat ; GEN: @__profn_test_br_2 = private constant [9 x i8] c"test_br_2" define i32 @test_br_2(i32 %i) { diff --git a/llvm/test/Transforms/PGOProfile/landingpad.ll b/llvm/test/Transforms/PGOProfile/landingpad.ll index 1b2648fc2ff64..e16bad5122778 100644 --- a/llvm/test/Transforms/PGOProfile/landingpad.ll +++ b/llvm/test/Transforms/PGOProfile/landingpad.ll @@ -11,7 +11,7 @@ target triple = "x86_64-unknown-linux-gnu" @val = global i32 0, align 4 @_ZTIi = external constant ptr ; GEN: $__llvm_profile_raw_version = comdat any -; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat ; GEN: @__profn_bar = private constant [3 x i8] c"bar" ; GEN: @__profn_foo = private constant [3 x i8] c"foo" diff --git a/llvm/test/Transforms/PGOProfile/loop1.ll b/llvm/test/Transforms/PGOProfile/loop1.ll index 86029663bf8e1..ece7ea21b8ee5 100644 --- a/llvm/test/Transforms/PGOProfile/loop1.ll +++ b/llvm/test/Transforms/PGOProfile/loop1.ll @@ -9,7 +9,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16 target triple = "x86_64-unknown-linux-gnu" ; GEN: $__llvm_profile_raw_version = comdat any -; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat ; GEN: @__profn_test_simple_for = private constant [15 x i8] c"test_simple_for" define i32 @test_simple_for(i32 %n) { diff --git a/llvm/test/Transforms/PGOProfile/loop2.ll b/llvm/test/Transforms/PGOProfile/loop2.ll index 13725ec097546..071f8a6d5ad59 100644 --- a/llvm/test/Transforms/PGOProfile/loop2.ll +++ b/llvm/test/Transforms/PGOProfile/loop2.ll @@ -8,7 +8,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16 target triple = "x86_64-unknown-linux-gnu" ; GEN: $__llvm_profile_raw_version = comdat any -; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat ; GEN: @__profn_test_nested_for = private constant [15 x i8] c"test_nested_for" define i32 @test_nested_for(i32 %r, i32 %s) { diff --git a/llvm/test/Transforms/PGOProfile/lto_cspgo_gen.ll b/llvm/test/Transforms/PGOProfile/lto_cspgo_gen.ll index 8ea2d3ccbfe07..19f68bf30c809 100644 --- a/llvm/test/Transforms/PGOProfile/lto_cspgo_gen.ll +++ b/llvm/test/Transforms/PGOProfile/lto_cspgo_gen.ll @@ -11,11 +11,11 @@ ; RUN: llvm-dis %t.0.0.preopt.bc -o - | FileCheck %s --check-prefix=IRPGOBE ;; Before LTO, we should have the __llvm_profile_raw_version definition. -; IRPGOPRE: @__llvm_profile_raw_version = constant i64 +; IRPGOPRE: @__llvm_profile_raw_version = hidden constant i64 ;; Non-prevailing __llvm_profile_raw_version is discarded by LTO. Ensure the ;; declaration is retained. -; IRPGOBE: @__llvm_profile_raw_version = external constant i64 +; IRPGOBE: @__llvm_profile_raw_version = external hidden constant i64 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" diff --git a/llvm/test/Transforms/PGOProfile/single_bb.ll b/llvm/test/Transforms/PGOProfile/single_bb.ll index f60cbfe565e19..b6d85ed084018 100644 --- a/llvm/test/Transforms/PGOProfile/single_bb.ll +++ b/llvm/test/Transforms/PGOProfile/single_bb.ll @@ -3,7 +3,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16 target triple = "x86_64-unknown-linux-gnu" ; GEN: $__llvm_profile_raw_version = comdat any -; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat ; GEN: @__profn_single_bb = private constant [9 x i8] c"single_bb" define i32 @single_bb() { diff --git a/llvm/test/Transforms/PGOProfile/switch.ll b/llvm/test/Transforms/PGOProfile/switch.ll index dac4347a729d0..b0b32182b5baa 100644 --- a/llvm/test/Transforms/PGOProfile/switch.ll +++ b/llvm/test/Transforms/PGOProfile/switch.ll @@ -8,7 +8,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16 target triple = "x86_64-unknown-linux-gnu" ; GEN: $__llvm_profile_raw_version = comdat any -; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat +; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat ; GEN: @__profn_test_switch = private constant [11 x i8] c"test_switch" define void @test_switch(i32 %i) { diff --git a/llvm/test/Transforms/PGOProfile/thinlto_cspgo_gen.ll b/llvm/test/Transforms/PGOProfile/thinlto_cspgo_gen.ll index 8a408fa842fb5..266e2597a63a2 100644 --- a/llvm/test/Transforms/PGOProfile/thinlto_cspgo_gen.ll +++ b/llvm/test/Transforms/PGOProfile/thinlto_cspgo_gen.ll @@ -17,11 +17,11 @@ ; RUN: llvm-dis %t.2.4.opt.bc -o - | FileCheck %s --check-prefixes=CSGEN,NOPREVAILING ;; Prevailing __llvm_profile_raw_version is kept by LTO. -; PREVAILING: @__llvm_profile_raw_version = constant i64 +; PREVAILING: @__llvm_profile_raw_version = hidden constant i64 ;; Non-prevailing __llvm_profile_raw_version is discarded by LTO. Ensure the ;; declaration is retained. -; NOPREVAILING: @__llvm_profile_raw_version = external constant i64 +; NOPREVAILING: @__llvm_profile_raw_version = external hidden constant i64 ; CSGEN: @__profc_ ; CSGEN: @__profd_