diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Transforms/Utils/CloneModule.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Transforms/Utils/CloneModule.cpp | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/contrib/llvm-project/llvm/lib/Transforms/Utils/CloneModule.cpp b/contrib/llvm-project/llvm/lib/Transforms/Utils/CloneModule.cpp index a6327bbf21bc..eb226b9b246d 100644 --- a/contrib/llvm-project/llvm/lib/Transforms/Utils/CloneModule.cpp +++ b/contrib/llvm-project/llvm/lib/Transforms/Utils/CloneModule.cpp @@ -115,28 +115,26 @@ std::unique_ptr<Module> llvm::CloneModule( // have been created, loop through and copy the global variable referrers // over... We also set the attributes on the global now. // - for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); - I != E; ++I) { - GlobalVariable *GV = cast<GlobalVariable>(VMap[&*I]); + for (const GlobalVariable &G : M.globals()) { + GlobalVariable *GV = cast<GlobalVariable>(VMap[&G]); SmallVector<std::pair<unsigned, MDNode *>, 1> MDs; - I->getAllMetadata(MDs); + G.getAllMetadata(MDs); for (auto MD : MDs) - GV->addMetadata(MD.first, - *MapMetadata(MD.second, VMap, RF_MoveDistinctMDs)); + GV->addMetadata(MD.first, *MapMetadata(MD.second, VMap)); - if (I->isDeclaration()) + if (G.isDeclaration()) continue; - if (!ShouldCloneDefinition(&*I)) { + if (!ShouldCloneDefinition(&G)) { // Skip after setting the correct linkage for an external reference. GV->setLinkage(GlobalValue::ExternalLinkage); continue; } - if (I->hasInitializer()) - GV->setInitializer(MapValue(I->getInitializer(), VMap)); + if (G.hasInitializer()) + GV->setInitializer(MapValue(G.getInitializer(), VMap)); - copyComdat(GV, &*I); + copyComdat(GV, &G); } // Similarly, copy over function bodies now... @@ -162,7 +160,8 @@ std::unique_ptr<Module> llvm::CloneModule( } SmallVector<ReturnInst *, 8> Returns; // Ignore returns cloned. - CloneFunctionInto(F, &I, VMap, /*ModuleLevelChanges=*/true, Returns); + CloneFunctionInto(F, &I, VMap, CloneFunctionChangeType::ClonedModule, + Returns); if (I.hasPersonalityFn()) F->setPersonalityFn(MapValue(I.getPersonalityFn(), VMap)); @@ -182,25 +181,13 @@ std::unique_ptr<Module> llvm::CloneModule( } // And named metadata.... - const auto* LLVM_DBG_CU = M.getNamedMetadata("llvm.dbg.cu"); for (Module::const_named_metadata_iterator I = M.named_metadata_begin(), E = M.named_metadata_end(); I != E; ++I) { const NamedMDNode &NMD = *I; NamedMDNode *NewNMD = New->getOrInsertNamedMetadata(NMD.getName()); - if (&NMD == LLVM_DBG_CU) { - // Do not insert duplicate operands. - SmallPtrSet<const void*, 8> Visited; - for (const auto* Operand : NewNMD->operands()) - Visited.insert(Operand); - for (const auto* Operand : NMD.operands()) { - auto* MappedOperand = MapMetadata(Operand, VMap); - if (Visited.insert(MappedOperand).second) - NewNMD->addOperand(MappedOperand); - } - } else - for (unsigned i = 0, e = NMD.getNumOperands(); i != e; ++i) - NewNMD->addOperand(MapMetadata(NMD.getOperand(i), VMap)); + for (unsigned i = 0, e = NMD.getNumOperands(); i != e; ++i) + NewNMD->addOperand(MapMetadata(NMD.getOperand(i), VMap)); } return New; |
