diff options
author | Devang Patel <dpatel@apple.com> | 2010-06-22 22:50:42 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2010-06-22 22:50:42 +0000 |
commit | 3bf329f49512e633df430c097bfd5bdaa122ba55 (patch) | |
tree | f28333fa521bfd16a8ec049ef288bd06eea32bd9 /lib/Transforms/Utils/CloneModule.cpp | |
parent | c3d57b179c33ef010ebbff003ce8c5d908cf9c01 (diff) |
While cloning a module, clone metadata attached with instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106591 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/CloneModule.cpp')
-rw-r--r-- | lib/Transforms/Utils/CloneModule.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/Transforms/Utils/CloneModule.cpp b/lib/Transforms/Utils/CloneModule.cpp index 1809bbb320..38c5877657 100644 --- a/lib/Transforms/Utils/CloneModule.cpp +++ b/lib/Transforms/Utils/CloneModule.cpp @@ -133,6 +133,21 @@ Module *llvm::CloneModule(const Module *M, NamedMDNode::Create(New->getContext(), NMD.getName(), MDs.data(), MDs.size(), New); } - + + // Update metadata attach with instructions. + for (Module::iterator MI = New->begin(), ME = New->end(); MI != ME; ++MI) + for (Function::iterator FI = MI->begin(), FE = MI->end(); + FI != FE; ++FI) + for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); + BI != BE; ++BI) { + SmallVector<std::pair<unsigned, MDNode *>, 4 > MDs; + BI->getAllMetadata(MDs); + for (SmallVector<std::pair<unsigned, MDNode *>, 4>::iterator + MDI = MDs.begin(), MDE = MDs.end(); MDI != MDE; ++MDI) { + Value *MappedValue = MapValue(MDI->second, ValueMap); + if (MDI->second != MappedValue && MappedValue) + BI->setMetadata(MDI->first, cast<MDNode>(MappedValue)); + } + } return New; } |