diff options
author | Ellis Hoag <ellis.sparky.hoag@gmail.com> | 2024-01-04 16:13:57 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-04 16:13:57 -0800 |
commit | 9a2df55f47e4ec02a1efbf8efa776cfeed527df2 (patch) | |
tree | 09e1563ea60c635d5a0bb42bd473576a20905b0c /llvm/unittests | |
parent | 786cf76f434d2691878067dedb8b1eb99472810b (diff) | |
download | llvm-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.cpp | 18 |
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()); |