aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests
diff options
context:
space:
mode:
authorEllis Hoag <ellis.sparky.hoag@gmail.com>2024-01-04 16:13:57 -0800
committerGitHub <noreply@github.com>2024-01-04 16:13:57 -0800
commit9a2df55f47e4ec02a1efbf8efa776cfeed527df2 (patch)
tree09e1563ea60c635d5a0bb42bd473576a20905b0c /llvm/unittests
parent786cf76f434d2691878067dedb8b1eb99472810b (diff)
downloadllvm-9a2df55f47e4ec02a1efbf8efa776cfeed527df2.zip
llvm-9a2df55f47e4ec02a1efbf8efa776cfeed527df2.tar.gz
llvm-9a2df55f47e4ec02a1efbf8efa776cfeed527df2.tar.bz2
[InstrProf] No linkage prefixes in IRPGO names (#76994)
Change the format of IRPGO counter names to `[<filepath>;]<mangled-name>` which is computed by `GlobalValue::getGlobalIdentifier()` to fix #74565. In fe051934cbb0aaf25d960d7d45305135635d650b (https://reviews.llvm.org/D156569) the format of IRPGO counter names was changed to be `[<filepath>;]<linkage-name>` where `<linkage-name>` is basically `F.getName()` with some prefix, e.g., `_` or `l_` on Mach-O (yes, it is confusing that `<linkage-name>` is computed with `Mangler().getNameWithPrefix()` while `<mangled-name>` is just `F.getName()`). We discovered in #74565 that this causes some missed import issues on some targets and #74008 is a partial fix. Since `<mangled-name>` may not match the `<linkage-name>` on some targets like Mach-O, we will need to post-process the output of `llvm-profdata order` before passing to the linker via `-order_file`. Profiles generated after fe051934cbb0aaf25d960d7d45305135635d650b will become stale after this diff, but I think this is acceptable since that patch landed after the LLVM 18 cut which hasn't been released yet.
Diffstat (limited to 'llvm/unittests')
-rw-r--r--llvm/unittests/ProfileData/InstrProfTest.cpp18
1 files changed, 2 insertions, 16 deletions
diff --git a/llvm/unittests/ProfileData/InstrProfTest.cpp b/llvm/unittests/ProfileData/InstrProfTest.cpp
index 6a71a97..8ffb68d 100644
--- a/llvm/unittests/ProfileData/InstrProfTest.cpp
+++ b/llvm/unittests/ProfileData/InstrProfTest.cpp
@@ -542,22 +542,14 @@ TEST_F(InstrProfTest, test_memprof_merge) {
TEST_F(InstrProfTest, test_irpgo_function_name) {
LLVMContext Ctx;
auto M = std::make_unique<Module>("MyModule.cpp", Ctx);
- // Use Mach-O mangling so that non-private symbols get a `_` prefix.
- M->setDataLayout(DataLayout("m:o"));
auto *FTy = FunctionType::get(Type::getVoidTy(Ctx), /*isVarArg=*/false);
std::vector<std::tuple<StringRef, Function::LinkageTypes, StringRef>> Data;
- Data.emplace_back("ExternalFoo", Function::ExternalLinkage, "_ExternalFoo");
+ Data.emplace_back("ExternalFoo", Function::ExternalLinkage, "ExternalFoo");
Data.emplace_back("InternalFoo", Function::InternalLinkage,
- "MyModule.cpp;_InternalFoo");
- Data.emplace_back("PrivateFoo", Function::PrivateLinkage,
- "MyModule.cpp;l_PrivateFoo");
- Data.emplace_back("WeakODRFoo", Function::WeakODRLinkage, "_WeakODRFoo");
- // Test Objective-C symbols
+ "MyModule.cpp;InternalFoo");
Data.emplace_back("\01-[C dynamicFoo:]", Function::ExternalLinkage,
"-[C dynamicFoo:]");
- Data.emplace_back("-<C directFoo:>", Function::ExternalLinkage,
- "_-<C directFoo:>");
Data.emplace_back("\01-[C internalFoo:]", Function::InternalLinkage,
"MyModule.cpp;-[C internalFoo:]");
@@ -590,10 +582,6 @@ TEST_F(InstrProfTest, test_pgo_function_name) {
Data.emplace_back("ExternalFoo", Function::ExternalLinkage, "ExternalFoo");
Data.emplace_back("InternalFoo", Function::InternalLinkage,
"MyModule.cpp:InternalFoo");
- Data.emplace_back("PrivateFoo", Function::PrivateLinkage,
- "MyModule.cpp:PrivateFoo");
- Data.emplace_back("WeakODRFoo", Function::WeakODRLinkage, "WeakODRFoo");
- // Test Objective-C symbols
Data.emplace_back("\01-[C externalFoo:]", Function::ExternalLinkage,
"-[C externalFoo:]");
Data.emplace_back("\01-[C internalFoo:]", Function::InternalLinkage,
@@ -611,8 +599,6 @@ TEST_F(InstrProfTest, test_pgo_function_name) {
TEST_F(InstrProfTest, test_irpgo_read_deprecated_names) {
LLVMContext Ctx;
auto M = std::make_unique<Module>("MyModule.cpp", Ctx);
- // Use Mach-O mangling so that non-private symbols get a `_` prefix.
- M->setDataLayout(DataLayout("m:o"));
auto *FTy = FunctionType::get(Type::getVoidTy(Ctx), /*isVarArg=*/false);
auto *InternalFooF =
Function::Create(FTy, Function::InternalLinkage, "InternalFoo", M.get());