diff options
author | Vladislav Dzhidzhoev <vdzhidzhoev@accesssoftek.com> | 2023-06-20 01:54:48 +0200 |
---|---|---|
committer | Vladislav Dzhidzhoev <vdzhidzhoev@accesssoftek.com> | 2023-06-20 01:54:48 +0200 |
commit | fec7c6457ced7e87d4e0837402b0b8a644cf6242 (patch) | |
tree | b39797179ac57c29791d8d9fe3b94931eea8e700 /llvm/lib/Bitcode/Reader/MetadataLoader.cpp | |
parent | 199f7dd421e84fb91d2528d30035b3f07af47264 (diff) | |
download | llvm-fec7c6457ced7e87d4e0837402b0b8a644cf6242.zip llvm-fec7c6457ced7e87d4e0837402b0b8a644cf6242.tar.gz llvm-fec7c6457ced7e87d4e0837402b0b8a644cf6242.tar.bz2 |
Revert "Reland "[DebugMetadata][DwarfDebug] Support function-local types in lexical block scopes (4/7)""
This reverts commit 2da45172c4bcd42f704c57c656926f56f32fc5ce.
Test local-type-as-template-parameter.ll fails on ppc64-aix.
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 87 |
1 files changed, 31 insertions, 56 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 321eae6..0a9a806 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -548,8 +548,6 @@ class MetadataLoader::MetadataLoaderImpl { /// Move local imports from DICompileUnit's 'imports' field to /// DISubprogram's retainedNodes. - /// Move fucntion-local enums from DICompileUnit's enums - /// to DISubprogram's retainedNodes. void upgradeCULocals() { if (NamedMDNode *CUNodes = TheModule.getNamedMetadata("llvm.dbg.cu")) { for (unsigned I = 0, E = CUNodes->getNumOperands(); I != E; ++I) { @@ -557,71 +555,48 @@ class MetadataLoader::MetadataLoaderImpl { if (!CU) continue; - SetVector<Metadata *> MetadataToRemove; - // Collect imported entities to be moved. - if (CU->getRawImportedEntities()) { + if (auto *RawImported = CU->getRawImportedEntities()) { + // Collect a set of imported entities to be moved. + SetVector<Metadata *> EntitiesToRemove; for (Metadata *Op : CU->getImportedEntities()->operands()) { auto *IE = cast<DIImportedEntity>(Op); - if (dyn_cast_or_null<DILocalScope>(IE->getScope())) { - MetadataToRemove.insert(IE); + if (auto *S = dyn_cast_or_null<DILocalScope>(IE->getScope())) { + EntitiesToRemove.insert(IE); } } - } - // Collect enums to be moved. - if (CU->getRawEnumTypes()) { - for (Metadata *Op : CU->getEnumTypes()->operands()) { - auto *Enum = cast<DICompositeType>(Op); - if (dyn_cast_or_null<DILocalScope>(Enum->getScope())) { - MetadataToRemove.insert(Enum); - } - } - } - if (!MetadataToRemove.empty()) { - // Make a new list of CU's 'imports'. - SmallVector<Metadata *> NewImports; - if (CU->getRawImportedEntities()) - for (Metadata *Op : CU->getImportedEntities()->operands()) - if (!MetadataToRemove.contains(Op)) + if (!EntitiesToRemove.empty()) { + // Make a new list of CU's 'imports'. + SmallVector<Metadata *> NewImports; + for (Metadata *Op : CU->getImportedEntities()->operands()) { + if (!EntitiesToRemove.contains(cast<DIImportedEntity>(Op))) { NewImports.push_back(Op); + } + } - // Make a new list of CU's 'enums'. - SmallVector<Metadata *> NewEnums; - if (CU->getRawEnumTypes()) - for (Metadata *Op : CU->getEnumTypes()->operands()) - if (!MetadataToRemove.contains(Op)) - NewEnums.push_back(Op); - - // Find DISubprogram corresponding to each entity. - std::map<DISubprogram *, SmallVector<Metadata *>> SPToEntities; - for (auto *I : MetadataToRemove) { - DILocalScope *Scope = nullptr; - if (auto *Entity = dyn_cast<DIImportedEntity>(I)) - Scope = cast<DILocalScope>(Entity->getScope()); - else if (auto *Enum = dyn_cast<DICompositeType>(I)) - Scope = cast<DILocalScope>(Enum->getScope()); - - if (auto *SP = findEnclosingSubprogram(Scope)) { - SPToEntities[SP].push_back(I); + // Find DISubprogram corresponding to each entity. + std::map<DISubprogram *, SmallVector<Metadata *>> SPToEntities; + for (auto *I : EntitiesToRemove) { + auto *Entity = cast<DIImportedEntity>(I); + if (auto *SP = findEnclosingSubprogram( + cast<DILocalScope>(Entity->getScope()))) { + SPToEntities[SP].push_back(Entity); + } } - } - // Update DISubprograms' retainedNodes. - for (auto I = SPToEntities.begin(); I != SPToEntities.end(); ++I) { - auto *SP = I->first; - auto RetainedNodes = SP->getRetainedNodes(); - SmallVector<Metadata *> MDs(RetainedNodes.begin(), - RetainedNodes.end()); - MDs.append(I->second); - SP->replaceRetainedNodes(MDNode::get(Context, MDs)); - } + // Update DISubprograms' retainedNodes. + for (auto I = SPToEntities.begin(); I != SPToEntities.end(); ++I) { + auto *SP = I->first; + auto RetainedNodes = SP->getRetainedNodes(); + SmallVector<Metadata *> MDs(RetainedNodes.begin(), + RetainedNodes.end()); + MDs.append(I->second); + SP->replaceRetainedNodes(MDNode::get(Context, MDs)); + } - // Remove entities with local scope from CU. - if (CU->getRawImportedEntities()) + // Remove entities with local scope from CU. CU->replaceImportedEntities(MDTuple::get(Context, NewImports)); - // Remove enums with local scope from CU. - if (CU->getRawEnumTypes()) - CU->replaceEnumTypes(MDTuple::get(Context, NewEnums)); + } } } } |