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 | e43c6487da8c49b001aadeb1b5088ce7fb2deab1 (patch) | |
tree | 3843648a08fc22a422d7bf223fda4531f77c0625 /llvm/lib/Transforms/Utils/CloneModule.cpp | |
parent | 1a890f9dc01fa50036ee7464737165ede52106a8 (diff) | |
download | bcm5719-llvm-e43c6487da8c49b001aadeb1b5088ce7fb2deab1.tar.gz bcm5719-llvm-e43c6487da8c49b001aadeb1b5088ce7fb2deab1.zip |
While cloning a module, clone metadata attached with instructions.
llvm-svn: 106591
Diffstat (limited to 'llvm/lib/Transforms/Utils/CloneModule.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/CloneModule.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/CloneModule.cpp b/llvm/lib/Transforms/Utils/CloneModule.cpp index 1809bbb3201..38c5877657a 100644 --- a/llvm/lib/Transforms/Utils/CloneModule.cpp +++ b/llvm/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; } |