diff options
author | Arthur Eubanks <aeubanks@google.com> | 2021-11-12 15:48:31 -0800 |
---|---|---|
committer | Arthur Eubanks <aeubanks@google.com> | 2021-12-01 15:40:05 -0800 |
commit | 512534bc16d2bebb0fb02e92a5ebd35eff9fb220 (patch) | |
tree | cac7aeab898a1f264bfd8ff7bd00d40f6e3b87ff /llvm/lib/Transforms/Utils/CloneModule.cpp | |
parent | 1b7150c8f89a917094ddc8fe7a6304ae3464e8c4 (diff) | |
download | llvm-512534bc16d2bebb0fb02e92a5ebd35eff9fb220.zip llvm-512534bc16d2bebb0fb02e92a5ebd35eff9fb220.tar.gz llvm-512534bc16d2bebb0fb02e92a5ebd35eff9fb220.tar.bz2 |
[Cloning] Clone metadata on function declarations
Previously we missed cloning metadata on function declarations because
we don't call CloneFunctionInto() on declarations in CloneModule().
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D113812
Diffstat (limited to 'llvm/lib/Transforms/Utils/CloneModule.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/CloneModule.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/CloneModule.cpp b/llvm/lib/Transforms/Utils/CloneModule.cpp index 200deca..57c273a 100644 --- a/llvm/lib/Transforms/Utils/CloneModule.cpp +++ b/llvm/lib/Transforms/Utils/CloneModule.cpp @@ -135,10 +135,18 @@ std::unique_ptr<Module> llvm::CloneModule( // Similarly, copy over function bodies now... // for (const Function &I : M) { - if (I.isDeclaration()) + Function *F = cast<Function>(VMap[&I]); + + if (I.isDeclaration()) { + // Copy over metadata for declarations since we're not doing it below in + // CloneFunctionInto(). + SmallVector<std::pair<unsigned, MDNode *>, 1> MDs; + I.getAllMetadata(MDs); + for (auto MD : MDs) + F->addMetadata(MD.first, *MapMetadata(MD.second, VMap)); continue; + } - Function *F = cast<Function>(VMap[&I]); if (!ShouldCloneDefinition(&I)) { // Skip after setting the correct linkage for an external reference. F->setLinkage(GlobalValue::ExternalLinkage); |