aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
diff options
context:
space:
mode:
authorVladislav Dzhidzhoev <vdzhidzhoev@accesssoftek.com>2023-06-20 01:54:48 +0200
committerVladislav Dzhidzhoev <vdzhidzhoev@accesssoftek.com>2023-06-20 01:54:48 +0200
commitfec7c6457ced7e87d4e0837402b0b8a644cf6242 (patch)
treeb39797179ac57c29791d8d9fe3b94931eea8e700 /llvm/lib/Bitcode/Reader/MetadataLoader.cpp
parent199f7dd421e84fb91d2528d30035b3f07af47264 (diff)
downloadllvm-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.cpp87
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));
+ }
}
}
}