mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-21 03:28:31 +00:00
Use an early exit in DIBuilder::finalize() to improve readability.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241465 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a566afc69a
commit
e91246ae8c
@ -73,38 +73,42 @@ void DIBuilder::trackIfUnresolved(MDNode *N) {
|
||||
}
|
||||
|
||||
void DIBuilder::finalize() {
|
||||
if (CUNode) {
|
||||
CUNode->replaceEnumTypes(MDTuple::get(VMContext, AllEnumTypes));
|
||||
|
||||
SmallVector<Metadata *, 16> RetainValues;
|
||||
// Declarations and definitions of the same type may be retained. Some
|
||||
// clients RAUW these pairs, leaving duplicates in the retained types
|
||||
// list. Use a set to remove the duplicates while we transform the
|
||||
// TrackingVHs back into Values.
|
||||
SmallPtrSet<Metadata *, 16> RetainSet;
|
||||
for (unsigned I = 0, E = AllRetainTypes.size(); I < E; I++)
|
||||
if (RetainSet.insert(AllRetainTypes[I]).second)
|
||||
RetainValues.push_back(AllRetainTypes[I]);
|
||||
CUNode->replaceRetainedTypes(MDTuple::get(VMContext, RetainValues));
|
||||
|
||||
DISubprogramArray SPs = MDTuple::get(VMContext, AllSubprograms);
|
||||
CUNode->replaceSubprograms(SPs.get());
|
||||
for (auto *SP : SPs) {
|
||||
if (MDTuple *Temp = SP->getVariables().get()) {
|
||||
const auto &PV = PreservedVariables.lookup(SP);
|
||||
SmallVector<Metadata *, 4> Variables(PV.begin(), PV.end());
|
||||
DINodeArray AV = getOrCreateArray(Variables);
|
||||
TempMDTuple(Temp)->replaceAllUsesWith(AV.get());
|
||||
}
|
||||
}
|
||||
|
||||
CUNode->replaceGlobalVariables(MDTuple::get(VMContext, AllGVs));
|
||||
|
||||
CUNode->replaceImportedEntities(MDTuple::get(
|
||||
VMContext, SmallVector<Metadata *, 16>(AllImportedModules.begin(),
|
||||
AllImportedModules.end())));
|
||||
if (!CUNode) {
|
||||
assert(!AllowUnresolvedNodes &&
|
||||
"creating type nodes without a CU is not supported");
|
||||
return;
|
||||
}
|
||||
|
||||
CUNode->replaceEnumTypes(MDTuple::get(VMContext, AllEnumTypes));
|
||||
|
||||
SmallVector<Metadata *, 16> RetainValues;
|
||||
// Declarations and definitions of the same type may be retained. Some
|
||||
// clients RAUW these pairs, leaving duplicates in the retained types
|
||||
// list. Use a set to remove the duplicates while we transform the
|
||||
// TrackingVHs back into Values.
|
||||
SmallPtrSet<Metadata *, 16> RetainSet;
|
||||
for (unsigned I = 0, E = AllRetainTypes.size(); I < E; I++)
|
||||
if (RetainSet.insert(AllRetainTypes[I]).second)
|
||||
RetainValues.push_back(AllRetainTypes[I]);
|
||||
CUNode->replaceRetainedTypes(MDTuple::get(VMContext, RetainValues));
|
||||
|
||||
DISubprogramArray SPs = MDTuple::get(VMContext, AllSubprograms);
|
||||
CUNode->replaceSubprograms(SPs.get());
|
||||
for (auto *SP : SPs) {
|
||||
if (MDTuple *Temp = SP->getVariables().get()) {
|
||||
const auto &PV = PreservedVariables.lookup(SP);
|
||||
SmallVector<Metadata *, 4> Variables(PV.begin(), PV.end());
|
||||
DINodeArray AV = getOrCreateArray(Variables);
|
||||
TempMDTuple(Temp)->replaceAllUsesWith(AV.get());
|
||||
}
|
||||
}
|
||||
|
||||
CUNode->replaceGlobalVariables(MDTuple::get(VMContext, AllGVs));
|
||||
|
||||
CUNode->replaceImportedEntities(MDTuple::get(
|
||||
VMContext, SmallVector<Metadata *, 16>(AllImportedModules.begin(),
|
||||
AllImportedModules.end())));
|
||||
|
||||
// Now that all temp nodes have been replaced or deleted, resolve remaining
|
||||
// cycles.
|
||||
for (const auto &N : UnresolvedNodes)
|
||||
|
Loading…
Reference in New Issue
Block a user