1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 05:01:59 +01:00

Revert "Turn DISubprogram into a variable-length node."

This reverts commit r301498 while investigating bot breakage.

llvm-svn: 301499
This commit is contained in:
Adrian Prantl 2017-04-26 23:49:30 +00:00
parent 800e36b695
commit b8a51e4581
6 changed files with 28 additions and 45 deletions

View File

@ -1614,7 +1614,11 @@ public:
DIScopeRef getScope() const { return DIScopeRef(getRawScope()); } DIScopeRef getScope() const { return DIScopeRef(getRawScope()); }
StringRef getName() const { return getStringOperand(2); } StringRef getName() const { return getStringOperand(2); }
StringRef getLinkageName() const { return getStringOperand(3); } StringRef getDisplayName() const { return getStringOperand(3); }
StringRef getLinkageName() const { return getStringOperand(4); }
MDString *getRawName() const { return getOperandAs<MDString>(2); }
MDString *getRawLinkageName() const { return getOperandAs<MDString>(4); }
DISubroutineType *getType() const { DISubroutineType *getType() const {
return cast_or_null<DISubroutineType>(getRawType()); return cast_or_null<DISubroutineType>(getRawType());
@ -1626,7 +1630,7 @@ public:
DICompileUnit *getUnit() const { DICompileUnit *getUnit() const {
return cast_or_null<DICompileUnit>(getRawUnit()); return cast_or_null<DICompileUnit>(getRawUnit());
} }
void replaceUnit(DICompileUnit *CU) { replaceOperandWith(5, CU); } void replaceUnit(DICompileUnit *CU) { replaceOperandWith(7, CU); }
DITemplateParameterArray getTemplateParams() const { DITemplateParameterArray getTemplateParams() const {
return cast_or_null<MDTuple>(getRawTemplateParams()); return cast_or_null<MDTuple>(getRawTemplateParams());
} }
@ -1641,21 +1645,13 @@ public:
} }
Metadata *getRawScope() const { return getOperand(1); } Metadata *getRawScope() const { return getOperand(1); }
MDString *getRawName() const { return getOperandAs<MDString>(2); } Metadata *getRawType() const { return getOperand(5); }
MDString *getRawLinkageName() const { return getOperandAs<MDString>(3); } Metadata *getRawContainingType() const { return getOperand(6); }
Metadata *getRawType() const { return getOperand(4); } Metadata *getRawUnit() const { return getOperand(7); }
Metadata *getRawUnit() const { return getOperand(5); } Metadata *getRawTemplateParams() const { return getOperand(8); }
Metadata *getRawDeclaration() const { return getOperand(6); } Metadata *getRawDeclaration() const { return getOperand(9); }
Metadata *getRawVariables() const { return getOperand(7); } Metadata *getRawVariables() const { return getOperand(10); }
Metadata *getRawContainingType() const { Metadata *getRawThrownTypes() const { return getOperand(11); }
return getNumOperands() > 8 ? getOperand(8) : nullptr;
}
Metadata *getRawTemplateParams() const {
return getNumOperands() > 9 ? getOperand(9) : nullptr;
}
Metadata *getRawThrownTypes() const {
return getNumOperands() > 10 ? getOperand(10) : nullptr;
}
/// Check if this subprogram describes the given function. /// Check if this subprogram describes the given function.
/// ///

View File

@ -474,8 +474,8 @@ class MetadataLoader::MetadataLoaderImpl {
for (auto CU_SP : CUSubprograms) for (auto CU_SP : CUSubprograms)
if (auto *SPs = dyn_cast_or_null<MDTuple>(CU_SP.second)) if (auto *SPs = dyn_cast_or_null<MDTuple>(CU_SP.second))
for (auto &Op : SPs->operands()) for (auto &Op : SPs->operands())
if (auto *SP = dyn_cast_or_null<DISubprogram>(Op)) if (auto *SP = dyn_cast_or_null<MDNode>(Op))
SP->replaceUnit(CU_SP.first); SP->replaceOperandWith(7, CU_SP.first);
CUSubprograms.clear(); CUSubprograms.clear();
} }

View File

@ -820,7 +820,7 @@ static bool emitDebugValueComment(const MachineInstr *MI, AsmPrinter &AP) {
const DILocalVariable *V = MI->getDebugVariable(); const DILocalVariable *V = MI->getDebugVariable();
if (auto *SP = dyn_cast<DISubprogram>(V->getScope())) { if (auto *SP = dyn_cast<DISubprogram>(V->getScope())) {
StringRef Name = SP->getName(); StringRef Name = SP->getDisplayName();
if (!Name.empty()) if (!Name.empty())
OS << Name << ":"; OS << Name << ":";
} }

View File

@ -237,7 +237,7 @@ TypeIndex CodeViewDebug::getFuncIdForSubprogram(const DISubprogram *SP) {
// The display name includes function template arguments. Drop them to match // The display name includes function template arguments. Drop them to match
// MSVC. // MSVC.
StringRef DisplayName = SP->getName().split('<').first; StringRef DisplayName = SP->getDisplayName().split('<').first;
const DIScope *Scope = SP->getScope().resolve(); const DIScope *Scope = SP->getScope().resolve();
TypeIndex TI; TypeIndex TI;
@ -657,7 +657,7 @@ void CodeViewDebug::emitInlineeLinesSubsection() {
OS.AddBlankLine(); OS.AddBlankLine();
unsigned FileId = maybeRecordFile(SP->getFile()); unsigned FileId = maybeRecordFile(SP->getFile());
OS.AddComment("Inlined function " + SP->getName() + " starts at " + OS.AddComment("Inlined function " + SP->getDisplayName() + " starts at " +
SP->getFilename() + Twine(':') + Twine(SP->getLine())); SP->getFilename() + Twine(':') + Twine(SP->getLine()));
OS.AddBlankLine(); OS.AddBlankLine();
// The filechecksum table uses 8 byte entries for now, and file ids start at // The filechecksum table uses 8 byte entries for now, and file ids start at
@ -759,9 +759,9 @@ void CodeViewDebug::emitDebugInfoForFunction(const Function *GV,
// If we have a display name, build the fully qualified name by walking the // If we have a display name, build the fully qualified name by walking the
// chain of scopes. // chain of scopes.
if (!SP->getName().empty()) if (!SP->getDisplayName().empty())
FuncName = FuncName =
getFullyQualifiedName(SP->getScope().resolve(), SP->getName()); getFullyQualifiedName(SP->getScope().resolve(), SP->getDisplayName());
// If our DISubprogram name is empty, use the mangled name. // If our DISubprogram name is empty, use the mangled name.
if (FuncName.empty()) if (FuncName.empty())

View File

@ -214,10 +214,6 @@ void GenericDINode::recalculateHash() {
#define DEFINE_GETIMPL_STORE_NO_CONSTRUCTOR_ARGS(CLASS, OPS) \ #define DEFINE_GETIMPL_STORE_NO_CONSTRUCTOR_ARGS(CLASS, OPS) \
return storeImpl(new (array_lengthof(OPS)) CLASS(Context, Storage, OPS), \ return storeImpl(new (array_lengthof(OPS)) CLASS(Context, Storage, OPS), \
Storage, Context.pImpl->CLASS##s) Storage, Context.pImpl->CLASS##s)
#define DEFINE_GETIMPL_STORE_N(CLASS, ARGS, OPS, NUM_OPS) \
return storeImpl(new (NUM_OPS) \
CLASS(Context, Storage, UNWRAP_ARGS(ARGS), OPS), \
Storage, Context.pImpl->CLASS##s)
DISubrange *DISubrange::getImpl(LLVMContext &Context, int64_t Count, int64_t Lo, DISubrange *DISubrange::getImpl(LLVMContext &Context, int64_t Count, int64_t Lo,
StorageType Storage, bool ShouldCreate) { StorageType Storage, bool ShouldCreate) {
@ -453,22 +449,13 @@ DISubprogram *DISubprogram::getImpl(
IsDefinition, ScopeLine, ContainingType, Virtuality, IsDefinition, ScopeLine, ContainingType, Virtuality,
VirtualIndex, ThisAdjustment, Flags, IsOptimized, Unit, VirtualIndex, ThisAdjustment, Flags, IsOptimized, Unit,
TemplateParams, Declaration, Variables, ThrownTypes)); TemplateParams, Declaration, Variables, ThrownTypes));
SmallVector<Metadata *, 11> Ops = { Metadata *Ops[] = {File, Scope, Name, Name,
File, Scope, Name, LinkageName, Type, Unit, LinkageName, Type, ContainingType, Unit,
Declaration, Variables, ContainingType, TemplateParams, ThrownTypes}; TemplateParams, Declaration, Variables, ThrownTypes};
if (!ThrownTypes) { DEFINE_GETIMPL_STORE(DISubprogram, (Line, ScopeLine, Virtuality, VirtualIndex,
Ops.pop_back(); ThisAdjustment, Flags, IsLocalToUnit,
if (!TemplateParams) { IsDefinition, IsOptimized),
Ops.pop_back(); Ops);
if (!ContainingType)
Ops.pop_back();
}
}
DEFINE_GETIMPL_STORE_N(DISubprogram,
(Line, ScopeLine, Virtuality, VirtualIndex,
ThisAdjustment, Flags, IsLocalToUnit, IsDefinition,
IsOptimized),
Ops, Ops.size());
} }
bool DISubprogram::describes(const Function *F) const { bool DISubprogram::describes(const Function *F) const {

View File

@ -51,7 +51,7 @@ struct BreakpointPrinter : public ModulePass {
if (!SP) if (!SP)
continue; continue;
getContextName(SP->getScope().resolve(), Name); getContextName(SP->getScope().resolve(), Name);
Name = Name + SP->getName().str(); Name = Name + SP->getDisplayName().str();
if (!Name.empty() && Processed.insert(Name).second) { if (!Name.empty() && Processed.insert(Name).second) {
Out << Name << "\n"; Out << Name << "\n";
} }