mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
[DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label.
In order to set breakpoints on labels and list source code around labels, we need collect debug information for labels, i.e., label name, the function label belong, line number in the file, and the address label located. In order to keep these information in LLVM IR and to allow backend to generate debug information correctly. We create a new kind of metadata for labels, DILabel. The format of DILabel is !DILabel(scope: !1, name: "foo", file: !2, line: 3) We hope to keep debug information as much as possible even the code is optimized. So, we create a new kind of intrinsic for label metadata to avoid the metadata is eliminated with basic block. The intrinsic will keep existing if we keep it from optimized out. The format of the intrinsic is llvm.dbg.label(metadata !1) It has only one argument, that is the DILabel metadata. The intrinsic will follow the label immediately. Backend could get the label metadata through the intrinsic's parameter. We also create DIBuilder API for labels to be used by Frontend. Frontend could use createLabel() to allocate DILabel objects, and use insertLabel() to insert llvm.dbg.label intrinsic in LLVM IR. Differential Revision: https://reviews.llvm.org/D45024 Patch by Hsiangkai Wang. llvm-svn: 331841
This commit is contained in:
parent
53a5f4ff4b
commit
a2029fa58e
7
.gitattributes
vendored
7
.gitattributes
vendored
@ -1,6 +1,11 @@
|
||||
# binary files
|
||||
test/Object/Inputs/*.a-* binary
|
||||
test/tools/dsymutil/Inputs/* binary
|
||||
test/tools/dsymutil/Inputs/*.o binary
|
||||
test/tools/dsymutil/Inputs/*.a binary
|
||||
test/tools/dsymutil/Inputs/*.i386 binary
|
||||
test/tools/dsymutil/Inputs/*.x86_64 binary
|
||||
test/tools/dsymutil/Inputs/*.armv7m binary
|
||||
test/tools/dsymutil/Inputs/*.dylib binary
|
||||
test/tools/llvm-ar/Inputs/*.lib binary
|
||||
test/tools/llvm-objdump/Inputs/*.a binary
|
||||
test/tools/llvm-rc/Inputs/* binary
|
||||
|
@ -155,6 +155,7 @@ public:
|
||||
case Intrinsic::sideeffect:
|
||||
case Intrinsic::dbg_declare:
|
||||
case Intrinsic::dbg_value:
|
||||
case Intrinsic::dbg_label:
|
||||
case Intrinsic::invariant_start:
|
||||
case Intrinsic::invariant_end:
|
||||
case Intrinsic::lifetime_start:
|
||||
|
@ -310,6 +310,7 @@ enum MetadataCodes {
|
||||
METADATA_GLOBAL_VAR_EXPR = 37, // [distinct, var, expr]
|
||||
METADATA_INDEX_OFFSET = 38, // [offset]
|
||||
METADATA_INDEX = 39, // [bitpos]
|
||||
METADATA_LABEL = 40, // [distinct, scope, name, file, line]
|
||||
};
|
||||
|
||||
// The constants block (CONSTANTS_BLOCK_ID) describes emission for each
|
||||
|
@ -46,6 +46,7 @@ namespace llvm {
|
||||
DICompileUnit *CUNode; ///< The one compile unit created by this DIBuiler.
|
||||
Function *DeclareFn; ///< llvm.dbg.declare
|
||||
Function *ValueFn; ///< llvm.dbg.value
|
||||
Function *LabelFn; ///< llvm.dbg.label
|
||||
|
||||
SmallVector<Metadata *, 4> AllEnumTypes;
|
||||
/// Track the RetainTypes, since they can be updated later on.
|
||||
@ -69,6 +70,9 @@ namespace llvm {
|
||||
/// copy.
|
||||
DenseMap<MDNode *, SmallVector<TrackingMDNodeRef, 1>> PreservedVariables;
|
||||
|
||||
/// Each subprogram's preserved labels.
|
||||
DenseMap<MDNode *, SmallVector<TrackingMDNodeRef, 1>> PreservedLabels;
|
||||
|
||||
/// Create a temporary.
|
||||
///
|
||||
/// Create an \a temporary node and track it in \a UnresolvedNodes.
|
||||
@ -79,6 +83,10 @@ namespace llvm {
|
||||
DIExpression *Expr, const DILocation *DL,
|
||||
BasicBlock *InsertBB, Instruction *InsertBefore);
|
||||
|
||||
/// Internal helper for insertLabel.
|
||||
Instruction *insertLabel(DILabel *LabelInfo, const DILocation *DL,
|
||||
BasicBlock *InsertBB, Instruction *InsertBefore);
|
||||
|
||||
/// Internal helper for insertDbgValueIntrinsic.
|
||||
Instruction *
|
||||
insertDbgValueIntrinsic(llvm::Value *Val, DILocalVariable *VarInfo,
|
||||
@ -591,6 +599,14 @@ namespace llvm {
|
||||
DINode::DIFlags Flags = DINode::FlagZero,
|
||||
uint32_t AlignInBits = 0);
|
||||
|
||||
/// Create a new descriptor for an label.
|
||||
///
|
||||
/// \c Scope must be a \a DILocalScope, and thus its scope chain eventually
|
||||
/// leads to a \a DISubprogram.
|
||||
DILabel *
|
||||
createLabel(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo,
|
||||
bool AlwaysPreserve = false);
|
||||
|
||||
/// Create a new descriptor for a parameter variable.
|
||||
///
|
||||
/// \c Scope must be a \a DILocalScope, and thus its scope chain eventually
|
||||
@ -782,6 +798,20 @@ namespace llvm {
|
||||
DIExpression *Expr, const DILocation *DL,
|
||||
Instruction *InsertBefore);
|
||||
|
||||
/// Insert a new llvm.dbg.label intrinsic call.
|
||||
/// \param LabelInfo Label's debug info descriptor.
|
||||
/// \param DL Debug info location.
|
||||
/// \param InsertBefore Location for the new intrinsic.
|
||||
Instruction *insertLabel(DILabel *LabelInfo, const DILocation *DL,
|
||||
Instruction *InsertBefore);
|
||||
|
||||
/// Insert a new llvm.dbg.label intrinsic call.
|
||||
/// \param LabelInfo Label's debug info descriptor.
|
||||
/// \param DL Debug info location.
|
||||
/// \param InsertAtEnd Location for the new intrinsic.
|
||||
Instruction *insertLabel(DILabel *LabelInfo, const DILocation *DL,
|
||||
BasicBlock *InsertAtEnd);
|
||||
|
||||
/// Insert a new llvm.dbg.value intrinsic call.
|
||||
/// \param Val llvm::Value of the variable
|
||||
/// \param VarInfo Variable's debug info descriptor.
|
||||
|
@ -232,6 +232,7 @@ public:
|
||||
case DITemplateValueParameterKind:
|
||||
case DIGlobalVariableKind:
|
||||
case DILocalVariableKind:
|
||||
case DILabelKind:
|
||||
case DIObjCPropertyKind:
|
||||
case DIImportedEntityKind:
|
||||
case DIModuleKind:
|
||||
@ -1609,13 +1610,13 @@ class DISubprogram : public DILocalScope {
|
||||
unsigned VirtualIndex, int ThisAdjustment, DIFlags Flags,
|
||||
bool IsOptimized, DICompileUnit *Unit,
|
||||
DITemplateParameterArray TemplateParams, DISubprogram *Declaration,
|
||||
DILocalVariableArray Variables, DITypeArray ThrownTypes,
|
||||
DINodeArray RetainedNodes, DITypeArray ThrownTypes,
|
||||
StorageType Storage, bool ShouldCreate = true) {
|
||||
return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
|
||||
getCanonicalMDString(Context, LinkageName), File, Line, Type,
|
||||
IsLocalToUnit, IsDefinition, ScopeLine, ContainingType,
|
||||
Virtuality, VirtualIndex, ThisAdjustment, Flags, IsOptimized,
|
||||
Unit, TemplateParams.get(), Declaration, Variables.get(),
|
||||
Unit, TemplateParams.get(), Declaration, RetainedNodes.get(),
|
||||
ThrownTypes.get(), Storage, ShouldCreate);
|
||||
}
|
||||
static DISubprogram *
|
||||
@ -1624,7 +1625,7 @@ class DISubprogram : public DILocalScope {
|
||||
bool IsLocalToUnit, bool IsDefinition, unsigned ScopeLine,
|
||||
Metadata *ContainingType, unsigned Virtuality, unsigned VirtualIndex,
|
||||
int ThisAdjustment, DIFlags Flags, bool IsOptimized, Metadata *Unit,
|
||||
Metadata *TemplateParams, Metadata *Declaration, Metadata *Variables,
|
||||
Metadata *TemplateParams, Metadata *Declaration, Metadata *RetainedNodes,
|
||||
Metadata *ThrownTypes, StorageType Storage, bool ShouldCreate = true);
|
||||
|
||||
TempDISubprogram cloneImpl() const {
|
||||
@ -1633,7 +1634,7 @@ class DISubprogram : public DILocalScope {
|
||||
isDefinition(), getScopeLine(), getContainingType(),
|
||||
getVirtuality(), getVirtualIndex(), getThisAdjustment(),
|
||||
getFlags(), isOptimized(), getUnit(),
|
||||
getTemplateParams(), getDeclaration(), getVariables(),
|
||||
getTemplateParams(), getDeclaration(), getRetainedNodes(),
|
||||
getThrownTypes());
|
||||
}
|
||||
|
||||
@ -1647,12 +1648,12 @@ public:
|
||||
bool IsOptimized, DICompileUnit *Unit,
|
||||
DITemplateParameterArray TemplateParams = nullptr,
|
||||
DISubprogram *Declaration = nullptr,
|
||||
DILocalVariableArray Variables = nullptr,
|
||||
DINodeArray RetainedNodes = nullptr,
|
||||
DITypeArray ThrownTypes = nullptr),
|
||||
(Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
|
||||
IsDefinition, ScopeLine, ContainingType, Virtuality,
|
||||
VirtualIndex, ThisAdjustment, Flags, IsOptimized, Unit,
|
||||
TemplateParams, Declaration, Variables, ThrownTypes))
|
||||
TemplateParams, Declaration, RetainedNodes, ThrownTypes))
|
||||
DEFINE_MDNODE_GET(
|
||||
DISubprogram,
|
||||
(Metadata * Scope, MDString *Name, MDString *LinkageName, Metadata *File,
|
||||
@ -1660,11 +1661,11 @@ public:
|
||||
unsigned ScopeLine, Metadata *ContainingType, unsigned Virtuality,
|
||||
unsigned VirtualIndex, int ThisAdjustment, DIFlags Flags,
|
||||
bool IsOptimized, Metadata *Unit, Metadata *TemplateParams = nullptr,
|
||||
Metadata *Declaration = nullptr, Metadata *Variables = nullptr,
|
||||
Metadata *Declaration = nullptr, Metadata *RetainedNodes = nullptr,
|
||||
Metadata *ThrownTypes = nullptr),
|
||||
(Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition,
|
||||
ScopeLine, ContainingType, Virtuality, VirtualIndex, ThisAdjustment,
|
||||
Flags, IsOptimized, Unit, TemplateParams, Declaration, Variables,
|
||||
Flags, IsOptimized, Unit, TemplateParams, Declaration, RetainedNodes,
|
||||
ThrownTypes))
|
||||
|
||||
TempDISubprogram clone() const { return cloneImpl(); }
|
||||
@ -1738,8 +1739,8 @@ public:
|
||||
DISubprogram *getDeclaration() const {
|
||||
return cast_or_null<DISubprogram>(getRawDeclaration());
|
||||
}
|
||||
DILocalVariableArray getVariables() const {
|
||||
return cast_or_null<MDTuple>(getRawVariables());
|
||||
DINodeArray getRetainedNodes() const {
|
||||
return cast_or_null<MDTuple>(getRawRetainedNodes());
|
||||
}
|
||||
DITypeArray getThrownTypes() const {
|
||||
return cast_or_null<MDTuple>(getRawThrownTypes());
|
||||
@ -1751,7 +1752,7 @@ public:
|
||||
Metadata *getRawType() const { return getOperand(4); }
|
||||
Metadata *getRawUnit() const { return getOperand(5); }
|
||||
Metadata *getRawDeclaration() const { return getOperand(6); }
|
||||
Metadata *getRawVariables() const { return getOperand(7); }
|
||||
Metadata *getRawRetainedNodes() const { return getOperand(7); }
|
||||
Metadata *getRawContainingType() const {
|
||||
return getNumOperands() > 8 ? getOperandAs<Metadata>(8) : nullptr;
|
||||
}
|
||||
@ -2607,6 +2608,76 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/// Label.
|
||||
///
|
||||
class DILabel : public DINode {
|
||||
friend class LLVMContextImpl;
|
||||
friend class MDNode;
|
||||
|
||||
unsigned Line;
|
||||
|
||||
DILabel(LLVMContext &C, StorageType Storage, unsigned Line,
|
||||
ArrayRef<Metadata *> Ops)
|
||||
: DINode(C, DILabelKind, Storage, dwarf::DW_TAG_label, Ops), Line(Line) {}
|
||||
~DILabel() = default;
|
||||
|
||||
static DILabel *getImpl(LLVMContext &Context, DIScope *Scope,
|
||||
StringRef Name, DIFile *File, unsigned Line,
|
||||
StorageType Storage,
|
||||
bool ShouldCreate = true) {
|
||||
return getImpl(Context, Scope, getCanonicalMDString(Context, Name), File,
|
||||
Line, Storage, ShouldCreate);
|
||||
}
|
||||
static DILabel *getImpl(LLVMContext &Context, Metadata *Scope,
|
||||
MDString *Name, Metadata *File, unsigned Line,
|
||||
StorageType Storage,
|
||||
bool ShouldCreate = true);
|
||||
|
||||
TempDILabel cloneImpl() const {
|
||||
return getTemporary(getContext(), getScope(), getName(), getFile(),
|
||||
getLine());
|
||||
}
|
||||
|
||||
public:
|
||||
DEFINE_MDNODE_GET(DILabel,
|
||||
(DILocalScope * Scope, StringRef Name, DIFile *File,
|
||||
unsigned Line),
|
||||
(Scope, Name, File, Line))
|
||||
DEFINE_MDNODE_GET(DILabel,
|
||||
(Metadata * Scope, MDString *Name, Metadata *File,
|
||||
unsigned Line),
|
||||
(Scope, Name, File, Line))
|
||||
|
||||
TempDILabel clone() const { return cloneImpl(); }
|
||||
|
||||
/// Get the local scope for this label.
|
||||
///
|
||||
/// Labels must be defined in a local scope.
|
||||
DILocalScope *getScope() const {
|
||||
return cast_or_null<DILocalScope>(getRawScope());
|
||||
}
|
||||
unsigned getLine() const { return Line; }
|
||||
StringRef getName() const { return getStringOperand(1); }
|
||||
DIFile *getFile() const { return cast_or_null<DIFile>(getRawFile()); }
|
||||
|
||||
Metadata *getRawScope() const { return getOperand(0); }
|
||||
MDString *getRawName() const { return getOperandAs<MDString>(1); }
|
||||
Metadata *getRawFile() const { return getOperand(2); }
|
||||
|
||||
/// Check that a location is valid for this label.
|
||||
///
|
||||
/// Check that \c DL exists, is in the same subprogram, and has the same
|
||||
/// inlined-at location as \c this. (Otherwise, it's not a valid attachment
|
||||
/// to a \a DbgInfoIntrinsic.)
|
||||
bool isValidLocationForIntrinsic(const DILocation *DL) const {
|
||||
return DL && getScope()->getSubprogram() == DL->getScope()->getSubprogram();
|
||||
}
|
||||
|
||||
static bool classof(const Metadata *MD) {
|
||||
return MD->getMetadataID() == DILabelKind;
|
||||
}
|
||||
};
|
||||
|
||||
class DIObjCProperty : public DINode {
|
||||
friend class LLVMContextImpl;
|
||||
friend class MDNode;
|
||||
|
@ -213,6 +213,7 @@ public:
|
||||
// Handle the special instrinsic instruction classes.
|
||||
RetTy visitDbgDeclareInst(DbgDeclareInst &I) { DELEGATE(DbgInfoIntrinsic);}
|
||||
RetTy visitDbgValueInst(DbgValueInst &I) { DELEGATE(DbgInfoIntrinsic);}
|
||||
RetTy visitDbgLabelInst(DbgLabelInst &I) { DELEGATE(DbgInfoIntrinsic);}
|
||||
RetTy visitDbgInfoIntrinsic(DbgInfoIntrinsic &I) { DELEGATE(IntrinsicInst); }
|
||||
RetTy visitMemSetInst(MemSetInst &I) { DELEGATE(MemIntrinsic); }
|
||||
RetTy visitMemCpyInst(MemCpyInst &I) { DELEGATE(MemTransferInst); }
|
||||
@ -272,6 +273,7 @@ private:
|
||||
default: DELEGATE(IntrinsicInst);
|
||||
case Intrinsic::dbg_declare: DELEGATE(DbgDeclareInst);
|
||||
case Intrinsic::dbg_value: DELEGATE(DbgValueInst);
|
||||
case Intrinsic::dbg_label: DELEGATE(DbgLabelInst);
|
||||
case Intrinsic::memcpy: DELEGATE(MemCpyInst);
|
||||
case Intrinsic::memmove: DELEGATE(MemMoveInst);
|
||||
case Intrinsic::memset: DELEGATE(MemSetInst);
|
||||
|
@ -100,6 +100,7 @@ namespace llvm {
|
||||
case Intrinsic::dbg_declare:
|
||||
case Intrinsic::dbg_value:
|
||||
case Intrinsic::dbg_addr:
|
||||
case Intrinsic::dbg_label:
|
||||
return true;
|
||||
default: return false;
|
||||
}
|
||||
@ -159,6 +160,32 @@ namespace llvm {
|
||||
/// @}
|
||||
};
|
||||
|
||||
/// This represents the llvm.dbg.label instruction.
|
||||
class DbgLabelInst : public DbgInfoIntrinsic {
|
||||
public:
|
||||
DILabel *getLabel() const {
|
||||
return cast<DILabel>(getRawVariable());
|
||||
}
|
||||
|
||||
Metadata *getRawVariable() const {
|
||||
return cast<MetadataAsValue>(getArgOperand(0))->getMetadata();
|
||||
}
|
||||
|
||||
Metadata *getRawExpression() const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
/// @{
|
||||
static bool classof(const IntrinsicInst *I) {
|
||||
return I->getIntrinsicID() == Intrinsic::dbg_label;
|
||||
}
|
||||
static bool classof(const Value *V) {
|
||||
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
|
||||
}
|
||||
/// @}
|
||||
};
|
||||
|
||||
/// This is the common base class for constrained floating point intrinsics.
|
||||
class ConstrainedFPIntrinsic : public IntrinsicInst {
|
||||
public:
|
||||
|
@ -599,6 +599,8 @@ let IntrProperties = [IntrNoMem, IntrSpeculatable] in {
|
||||
[llvm_metadata_ty,
|
||||
llvm_metadata_ty,
|
||||
llvm_metadata_ty]>;
|
||||
def int_dbg_label : Intrinsic<[],
|
||||
[llvm_metadata_ty]>;
|
||||
}
|
||||
|
||||
//===------------------ Exception Handling Intrinsics----------------------===//
|
||||
|
@ -108,6 +108,7 @@ HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DITemplateValueParameter)
|
||||
HANDLE_SPECIALIZED_MDNODE_BRANCH(DIVariable)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGlobalVariable)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocalVariable)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILabel)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIObjCProperty)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIImportedEntity)
|
||||
HANDLE_SPECIALIZED_MDNODE_BRANCH(DIMacroNode)
|
||||
|
@ -209,6 +209,7 @@ static bool isInertIntrinsic(unsigned ID) {
|
||||
// Don't let dbg info affect our results.
|
||||
case Intrinsic::dbg_declare:
|
||||
case Intrinsic::dbg_value:
|
||||
case Intrinsic::dbg_label:
|
||||
// Short cut: Some intrinsics obviously don't use ObjC pointers.
|
||||
return true;
|
||||
default:
|
||||
|
@ -501,6 +501,7 @@ bool llvm::isAssumeLikeIntrinsic(const Instruction *I) {
|
||||
case Intrinsic::sideeffect:
|
||||
case Intrinsic::dbg_declare:
|
||||
case Intrinsic::dbg_value:
|
||||
case Intrinsic::dbg_label:
|
||||
case Intrinsic::invariant_start:
|
||||
case Intrinsic::invariant_end:
|
||||
case Intrinsic::lifetime_start:
|
||||
|
@ -4347,7 +4347,7 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) {
|
||||
/// virtuality: DW_VIRTUALTIY_pure_virtual,
|
||||
/// virtualIndex: 10, thisAdjustment: 4, flags: 11,
|
||||
/// isOptimized: false, templateParams: !4, declaration: !5,
|
||||
/// variables: !6, thrownTypes: !7)
|
||||
/// retainedNodes: !6, thrownTypes: !7)
|
||||
bool LLParser::ParseDISubprogram(MDNode *&Result, bool IsDistinct) {
|
||||
auto Loc = Lex.getLoc();
|
||||
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
|
||||
@ -4369,7 +4369,7 @@ bool LLParser::ParseDISubprogram(MDNode *&Result, bool IsDistinct) {
|
||||
OPTIONAL(unit, MDField, ); \
|
||||
OPTIONAL(templateParams, MDField, ); \
|
||||
OPTIONAL(declaration, MDField, ); \
|
||||
OPTIONAL(variables, MDField, ); \
|
||||
OPTIONAL(retainedNodes, MDField, ); \
|
||||
OPTIONAL(thrownTypes, MDField, );
|
||||
PARSE_MD_FIELDS();
|
||||
#undef VISIT_MD_FIELDS
|
||||
@ -4385,7 +4385,7 @@ bool LLParser::ParseDISubprogram(MDNode *&Result, bool IsDistinct) {
|
||||
type.Val, isLocal.Val, isDefinition.Val, scopeLine.Val,
|
||||
containingType.Val, virtuality.Val, virtualIndex.Val, thisAdjustment.Val,
|
||||
flags.Val, isOptimized.Val, unit.Val, templateParams.Val,
|
||||
declaration.Val, variables.Val, thrownTypes.Val));
|
||||
declaration.Val, retainedNodes.Val, thrownTypes.Val));
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -4568,6 +4568,22 @@ bool LLParser::ParseDILocalVariable(MDNode *&Result, bool IsDistinct) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// ParseDILabel:
|
||||
/// ::= !DILabel(scope: !0, name: "foo", file: !1, line: 7)
|
||||
bool LLParser::ParseDILabel(MDNode *&Result, bool IsDistinct) {
|
||||
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
|
||||
REQUIRED(scope, MDField, (/* AllowNull */ false)); \
|
||||
REQUIRED(name, MDStringField, ); \
|
||||
REQUIRED(file, MDField, ); \
|
||||
REQUIRED(line, LineField, );
|
||||
PARSE_MD_FIELDS();
|
||||
#undef VISIT_MD_FIELDS
|
||||
|
||||
Result = GET_OR_DISTINCT(DILabel,
|
||||
(Context, scope.Val, name.Val, file.Val, line.Val));
|
||||
return false;
|
||||
}
|
||||
|
||||
/// ParseDIExpression:
|
||||
/// ::= !DIExpression(0, 7, -1)
|
||||
bool LLParser::ParseDIExpression(MDNode *&Result, bool IsDistinct) {
|
||||
|
@ -822,6 +822,7 @@ MetadataLoader::MetadataLoaderImpl::lazyLoadModuleMetadataBlock() {
|
||||
case bitc::METADATA_TEMPLATE_VALUE:
|
||||
case bitc::METADATA_GLOBAL_VAR:
|
||||
case bitc::METADATA_LOCAL_VAR:
|
||||
case bitc::METADATA_LABEL:
|
||||
case bitc::METADATA_EXPRESSION:
|
||||
case bitc::METADATA_OBJC_PROPERTY:
|
||||
case bitc::METADATA_IMPORTED_ENTITY:
|
||||
@ -1438,7 +1439,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
|
||||
HasUnit ? CUorFn : nullptr, // unit
|
||||
getMDOrNull(Record[15 + Offset]), // templateParams
|
||||
getMDOrNull(Record[16 + Offset]), // declaration
|
||||
getMDOrNull(Record[17 + Offset]), // variables
|
||||
getMDOrNull(Record[17 + Offset]), // retainedNodes
|
||||
HasThrownTypes ? getMDOrNull(Record[20]) : nullptr // thrownTypes
|
||||
));
|
||||
MetadataList.assignValue(SP, NextMetadataNo);
|
||||
@ -1647,6 +1648,20 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
|
||||
NextMetadataNo++;
|
||||
break;
|
||||
}
|
||||
case bitc::METADATA_LABEL: {
|
||||
if (Record.size() != 5)
|
||||
return error("Invalid record");
|
||||
|
||||
IsDistinct = Record[0] & 1;
|
||||
MetadataList.assignValue(
|
||||
GET_OR_DISTINCT(DILabel,
|
||||
(Context, getMDOrNull(Record[1]),
|
||||
getMDString(Record[2]),
|
||||
getMDOrNull(Record[3]), Record[4])),
|
||||
NextMetadataNo);
|
||||
NextMetadataNo++;
|
||||
break;
|
||||
}
|
||||
case bitc::METADATA_EXPRESSION: {
|
||||
if (Record.size() < 1)
|
||||
return error("Invalid record");
|
||||
|
@ -335,6 +335,8 @@ private:
|
||||
unsigned Abbrev);
|
||||
void writeDILocalVariable(const DILocalVariable *N,
|
||||
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev);
|
||||
void writeDILabel(const DILabel *N,
|
||||
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev);
|
||||
void writeDIExpression(const DIExpression *N,
|
||||
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev);
|
||||
void writeDIGlobalVariableExpression(const DIGlobalVariableExpression *N,
|
||||
@ -1628,7 +1630,7 @@ void ModuleBitcodeWriter::writeDISubprogram(const DISubprogram *N,
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawUnit()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getTemplateParams().get()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getDeclaration()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getVariables().get()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRetainedNodes().get()));
|
||||
Record.push_back(N->getThisAdjustment());
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getThrownTypes().get()));
|
||||
|
||||
@ -1785,6 +1787,19 @@ void ModuleBitcodeWriter::writeDILocalVariable(
|
||||
Record.clear();
|
||||
}
|
||||
|
||||
void ModuleBitcodeWriter::writeDILabel(
|
||||
const DILabel *N, SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev) {
|
||||
Record.push_back((uint64_t)N->isDistinct());
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
|
||||
Record.push_back(N->getLine());
|
||||
|
||||
Stream.EmitRecord(bitc::METADATA_LABEL, Record, Abbrev);
|
||||
Record.clear();
|
||||
}
|
||||
|
||||
void ModuleBitcodeWriter::writeDIExpression(const DIExpression *N,
|
||||
SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev) {
|
||||
|
@ -1202,10 +1202,12 @@ void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU,
|
||||
}
|
||||
|
||||
// Collect info for variables that were optimized out.
|
||||
for (const DILocalVariable *DV : SP->getVariables()) {
|
||||
if (Processed.insert(InlinedVariable(DV, nullptr)).second)
|
||||
if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope()))
|
||||
createConcreteVariable(TheCU, *Scope, InlinedVariable(DV, nullptr));
|
||||
for (const DINode *DN : SP->getRetainedNodes()) {
|
||||
if (auto *DV = dyn_cast<DILocalVariable>(DN)) {
|
||||
if (Processed.insert(InlinedVariable(DV, nullptr)).second)
|
||||
if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope()))
|
||||
createConcreteVariable(TheCU, *Scope, InlinedVariable(DV, nullptr));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1386,14 +1388,16 @@ void DwarfDebug::endFunctionImpl(const MachineFunction *MF) {
|
||||
// Construct abstract scopes.
|
||||
for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
|
||||
auto *SP = cast<DISubprogram>(AScope->getScopeNode());
|
||||
// Collect info for variables that were optimized out.
|
||||
for (const DILocalVariable *DV : SP->getVariables()) {
|
||||
if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second)
|
||||
continue;
|
||||
ensureAbstractVariableIsCreated(TheCU, InlinedVariable(DV, nullptr),
|
||||
DV->getScope());
|
||||
assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
|
||||
&& "ensureAbstractVariableIsCreated inserted abstract scopes");
|
||||
for (const DINode *DN : SP->getRetainedNodes()) {
|
||||
if (auto *DV = dyn_cast<DILocalVariable>(DN)) {
|
||||
// Collect info for variables that were optimized out.
|
||||
if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second)
|
||||
continue;
|
||||
ensureAbstractVariableIsCreated(TheCU, InlinedVariable(DV, nullptr),
|
||||
DV->getScope());
|
||||
assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
|
||||
&& "ensureAbstractVariableIsCreated inserted abstract scopes");
|
||||
}
|
||||
}
|
||||
constructAbstractSubprogramScopeDIE(TheCU, AScope);
|
||||
}
|
||||
|
@ -456,6 +456,7 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
|
||||
}
|
||||
|
||||
case Intrinsic::dbg_declare:
|
||||
case Intrinsic::dbg_label:
|
||||
break; // Simply strip out debugging intrinsics
|
||||
|
||||
case Intrinsic::eh_typeid_for:
|
||||
|
@ -1831,7 +1831,7 @@ static void writeDISubprogram(raw_ostream &Out, const DISubprogram *N,
|
||||
Printer.printMetadata("unit", N->getRawUnit());
|
||||
Printer.printMetadata("templateParams", N->getRawTemplateParams());
|
||||
Printer.printMetadata("declaration", N->getRawDeclaration());
|
||||
Printer.printMetadata("variables", N->getRawVariables());
|
||||
Printer.printMetadata("retainedNodes", N->getRawRetainedNodes());
|
||||
Printer.printMetadata("thrownTypes", N->getRawThrownTypes());
|
||||
Out << ")";
|
||||
}
|
||||
@ -1971,6 +1971,18 @@ static void writeDILocalVariable(raw_ostream &Out, const DILocalVariable *N,
|
||||
Out << ")";
|
||||
}
|
||||
|
||||
static void writeDILabel(raw_ostream &Out, const DILabel *N,
|
||||
TypePrinting *TypePrinter,
|
||||
SlotTracker *Machine, const Module *Context) {
|
||||
Out << "!DILabel(";
|
||||
MDFieldPrinter Printer(Out, TypePrinter, Machine, Context);
|
||||
Printer.printMetadata("scope", N->getRawScope(), /* ShouldSkipNull */ false);
|
||||
Printer.printString("name", N->getName());
|
||||
Printer.printMetadata("file", N->getRawFile());
|
||||
Printer.printInt("line", N->getLine());
|
||||
Out << ")";
|
||||
}
|
||||
|
||||
static void writeDIExpression(raw_ostream &Out, const DIExpression *N,
|
||||
TypePrinting *TypePrinter, SlotTracker *Machine,
|
||||
const Module *Context) {
|
||||
|
@ -33,7 +33,7 @@ cl::opt<bool>
|
||||
|
||||
DIBuilder::DIBuilder(Module &m, bool AllowUnresolvedNodes, DICompileUnit *CU)
|
||||
: M(m), VMContext(M.getContext()), CUNode(CU),
|
||||
DeclareFn(nullptr), ValueFn(nullptr),
|
||||
DeclareFn(nullptr), ValueFn(nullptr), LabelFn(nullptr),
|
||||
AllowUnresolvedNodes(AllowUnresolvedNodes) {}
|
||||
|
||||
void DIBuilder::trackIfUnresolved(MDNode *N) {
|
||||
@ -47,18 +47,23 @@ void DIBuilder::trackIfUnresolved(MDNode *N) {
|
||||
}
|
||||
|
||||
void DIBuilder::finalizeSubprogram(DISubprogram *SP) {
|
||||
MDTuple *Temp = SP->getVariables().get();
|
||||
MDTuple *Temp = SP->getRetainedNodes().get();
|
||||
if (!Temp || !Temp->isTemporary())
|
||||
return;
|
||||
|
||||
SmallVector<Metadata *, 4> Variables;
|
||||
SmallVector<Metadata *, 16> RetainedNodes;
|
||||
|
||||
auto PV = PreservedVariables.find(SP);
|
||||
if (PV != PreservedVariables.end())
|
||||
Variables.append(PV->second.begin(), PV->second.end());
|
||||
RetainedNodes.append(PV->second.begin(), PV->second.end());
|
||||
|
||||
DINodeArray AV = getOrCreateArray(Variables);
|
||||
TempMDTuple(Temp)->replaceAllUsesWith(AV.get());
|
||||
auto PL = PreservedLabels.find(SP);
|
||||
if (PL != PreservedLabels.end())
|
||||
RetainedNodes.append(PL->second.begin(), PL->second.end());
|
||||
|
||||
DINodeArray Node = getOrCreateArray(RetainedNodes);
|
||||
|
||||
TempMDTuple(Temp)->replaceAllUsesWith(Node.get());
|
||||
}
|
||||
|
||||
void DIBuilder::finalize() {
|
||||
@ -699,6 +704,26 @@ DILocalVariable *DIBuilder::createParameterVariable(
|
||||
/* AlignInBits */0);
|
||||
}
|
||||
|
||||
DILabel *DIBuilder::createLabel(
|
||||
DIScope *Scope, StringRef Name, DIFile *File,
|
||||
unsigned LineNo, bool AlwaysPreserve) {
|
||||
DIScope *Context = getNonCompileUnitScope(Scope);
|
||||
|
||||
auto *Node =
|
||||
DILabel::get(VMContext, cast_or_null<DILocalScope>(Context), Name,
|
||||
File, LineNo);
|
||||
|
||||
if (AlwaysPreserve) {
|
||||
/// The optimizer may remove labels. If there is an interest
|
||||
/// to preserve label info in such situation then append it to
|
||||
/// the list of retained nodes of the DISubprogram.
|
||||
DISubprogram *Fn = getDISubprogram(Scope);
|
||||
assert(Fn && "Missing subprogram for label");
|
||||
PreservedLabels[Fn].emplace_back(Node);
|
||||
}
|
||||
return Node;
|
||||
}
|
||||
|
||||
DIExpression *DIBuilder::createExpression(ArrayRef<uint64_t> Addr) {
|
||||
return DIExpression::get(VMContext, Addr);
|
||||
}
|
||||
@ -821,6 +846,18 @@ Instruction *DIBuilder::insertDeclare(Value *Storage, DILocalVariable *VarInfo,
|
||||
return insertDeclare(Storage, VarInfo, Expr, DL, InsertAtEnd, InsertBefore);
|
||||
}
|
||||
|
||||
Instruction *DIBuilder::insertLabel(DILabel *LabelInfo, const DILocation *DL,
|
||||
Instruction *InsertBefore) {
|
||||
return insertLabel(
|
||||
LabelInfo, DL, InsertBefore ? InsertBefore->getParent() : nullptr,
|
||||
InsertBefore);
|
||||
}
|
||||
|
||||
Instruction *DIBuilder::insertLabel(DILabel *LabelInfo, const DILocation *DL,
|
||||
BasicBlock *InsertAtEnd) {
|
||||
return insertLabel(LabelInfo, DL, InsertAtEnd, nullptr);
|
||||
}
|
||||
|
||||
Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V,
|
||||
DILocalVariable *VarInfo,
|
||||
DIExpression *Expr,
|
||||
@ -906,6 +943,24 @@ Instruction *DIBuilder::insertDbgValueIntrinsic(
|
||||
return B.CreateCall(ValueFn, Args);
|
||||
}
|
||||
|
||||
Instruction *DIBuilder::insertLabel(
|
||||
DILabel *LabelInfo, const DILocation *DL,
|
||||
BasicBlock *InsertBB, Instruction *InsertBefore) {
|
||||
assert(LabelInfo && "empty or invalid DILabel* passed to dbg.label");
|
||||
assert(DL && "Expected debug loc");
|
||||
assert(DL->getScope()->getSubprogram() ==
|
||||
LabelInfo->getScope()->getSubprogram() &&
|
||||
"Expected matching subprograms");
|
||||
if (!LabelFn)
|
||||
LabelFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_label);
|
||||
|
||||
trackIfUnresolved(LabelInfo);
|
||||
Value *Args[] = {MetadataAsValue::get(VMContext, LabelInfo)};
|
||||
|
||||
IRBuilder<> B = getIRBForDbgInsertion(DL, InsertBB, InsertBefore);
|
||||
return B.CreateCall(LabelFn, Args);
|
||||
}
|
||||
|
||||
void DIBuilder::replaceVTableHolder(DICompositeType *&T,
|
||||
DIType *VTableHolder) {
|
||||
{
|
||||
|
@ -568,7 +568,7 @@ void DebugTypeInfoRemoval::traverse(MDNode *N) {
|
||||
// parts of the graph.
|
||||
auto prune = [](MDNode *Parent, MDNode *Child) {
|
||||
if (auto *MDS = dyn_cast<DISubprogram>(Parent))
|
||||
return Child == MDS->getVariables().get();
|
||||
return Child == MDS->getRetainedNodes().get();
|
||||
return false;
|
||||
};
|
||||
|
||||
|
@ -489,7 +489,7 @@ DISubprogram *DISubprogram::getImpl(
|
||||
bool IsLocalToUnit, bool IsDefinition, unsigned ScopeLine,
|
||||
Metadata *ContainingType, unsigned Virtuality, unsigned VirtualIndex,
|
||||
int ThisAdjustment, DIFlags Flags, bool IsOptimized, Metadata *Unit,
|
||||
Metadata *TemplateParams, Metadata *Declaration, Metadata *Variables,
|
||||
Metadata *TemplateParams, Metadata *Declaration, Metadata *RetainedNodes,
|
||||
Metadata *ThrownTypes, StorageType Storage, bool ShouldCreate) {
|
||||
assert(isCanonical(Name) && "Expected canonical MDString");
|
||||
assert(isCanonical(LinkageName) && "Expected canonical MDString");
|
||||
@ -497,10 +497,10 @@ DISubprogram *DISubprogram::getImpl(
|
||||
DISubprogram, (Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
|
||||
IsDefinition, ScopeLine, ContainingType, Virtuality,
|
||||
VirtualIndex, ThisAdjustment, Flags, IsOptimized, Unit,
|
||||
TemplateParams, Declaration, Variables, ThrownTypes));
|
||||
TemplateParams, Declaration, RetainedNodes, ThrownTypes));
|
||||
SmallVector<Metadata *, 11> Ops = {
|
||||
File, Scope, Name, LinkageName, Type, Unit,
|
||||
Declaration, Variables, ContainingType, TemplateParams, ThrownTypes};
|
||||
File, Scope, Name, LinkageName, Type, Unit,
|
||||
Declaration, RetainedNodes, ContainingType, TemplateParams, ThrownTypes};
|
||||
if (!ThrownTypes) {
|
||||
Ops.pop_back();
|
||||
if (!TemplateParams) {
|
||||
@ -653,6 +653,18 @@ Optional<uint64_t> DIVariable::getSizeInBits() const {
|
||||
return None;
|
||||
}
|
||||
|
||||
DILabel *DILabel::getImpl(LLVMContext &Context, Metadata *Scope,
|
||||
MDString *Name, Metadata *File, unsigned Line,
|
||||
StorageType Storage,
|
||||
bool ShouldCreate) {
|
||||
assert(Scope && "Expected scope");
|
||||
assert(isCanonical(Name) && "Expected canonical MDString");
|
||||
DEFINE_GETIMPL_LOOKUP(DILabel,
|
||||
(Scope, Name, File, Line));
|
||||
Metadata *Ops[] = {Scope, Name, File};
|
||||
DEFINE_GETIMPL_STORE(DILabel, (Line), Ops);
|
||||
}
|
||||
|
||||
DIExpression *DIExpression::getImpl(LLVMContext &Context,
|
||||
ArrayRef<uint64_t> Elements,
|
||||
StorageType Storage, bool ShouldCreate) {
|
||||
|
@ -619,7 +619,7 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
Metadata *Unit;
|
||||
Metadata *TemplateParams;
|
||||
Metadata *Declaration;
|
||||
Metadata *Variables;
|
||||
Metadata *RetainedNodes;
|
||||
Metadata *ThrownTypes;
|
||||
|
||||
MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *LinkageName,
|
||||
@ -628,7 +628,7 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
Metadata *ContainingType, unsigned Virtuality,
|
||||
unsigned VirtualIndex, int ThisAdjustment, unsigned Flags,
|
||||
bool IsOptimized, Metadata *Unit, Metadata *TemplateParams,
|
||||
Metadata *Declaration, Metadata *Variables,
|
||||
Metadata *Declaration, Metadata *RetainedNodes,
|
||||
Metadata *ThrownTypes)
|
||||
: Scope(Scope), Name(Name), LinkageName(LinkageName), File(File),
|
||||
Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit),
|
||||
@ -637,7 +637,7 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
VirtualIndex(VirtualIndex), ThisAdjustment(ThisAdjustment),
|
||||
Flags(Flags), IsOptimized(IsOptimized), Unit(Unit),
|
||||
TemplateParams(TemplateParams), Declaration(Declaration),
|
||||
Variables(Variables), ThrownTypes(ThrownTypes) {}
|
||||
RetainedNodes(RetainedNodes), ThrownTypes(ThrownTypes) {}
|
||||
MDNodeKeyImpl(const DISubprogram *N)
|
||||
: Scope(N->getRawScope()), Name(N->getRawName()),
|
||||
LinkageName(N->getRawLinkageName()), File(N->getRawFile()),
|
||||
@ -648,7 +648,7 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
ThisAdjustment(N->getThisAdjustment()), Flags(N->getFlags()),
|
||||
IsOptimized(N->isOptimized()), Unit(N->getRawUnit()),
|
||||
TemplateParams(N->getRawTemplateParams()),
|
||||
Declaration(N->getRawDeclaration()), Variables(N->getRawVariables()),
|
||||
Declaration(N->getRawDeclaration()), RetainedNodes(N->getRawRetainedNodes()),
|
||||
ThrownTypes(N->getRawThrownTypes()) {}
|
||||
|
||||
bool isKeyOf(const DISubprogram *RHS) const {
|
||||
@ -666,7 +666,7 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
Unit == RHS->getUnit() &&
|
||||
TemplateParams == RHS->getRawTemplateParams() &&
|
||||
Declaration == RHS->getRawDeclaration() &&
|
||||
Variables == RHS->getRawVariables() &&
|
||||
RetainedNodes == RHS->getRawRetainedNodes() &&
|
||||
ThrownTypes == RHS->getRawThrownTypes();
|
||||
}
|
||||
|
||||
@ -948,6 +948,29 @@ template <> struct MDNodeKeyImpl<DILocalVariable> {
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct MDNodeKeyImpl<DILabel> {
|
||||
Metadata *Scope;
|
||||
MDString *Name;
|
||||
Metadata *File;
|
||||
unsigned Line;
|
||||
|
||||
MDNodeKeyImpl(Metadata *Scope, MDString *Name, Metadata *File, unsigned Line)
|
||||
: Scope(Scope), Name(Name), File(File), Line(Line) {}
|
||||
MDNodeKeyImpl(const DILabel *N)
|
||||
: Scope(N->getRawScope()), Name(N->getRawName()), File(N->getRawFile()),
|
||||
Line(N->getLine()) {}
|
||||
|
||||
bool isKeyOf(const DILabel *RHS) const {
|
||||
return Scope == RHS->getRawScope() && Name == RHS->getRawName() &&
|
||||
File == RHS->getRawFile() && Line == RHS->getLine();
|
||||
}
|
||||
|
||||
/// Using name and line to get hash value. It should already be mostly unique.
|
||||
unsigned getHashValue() const {
|
||||
return hash_combine(Scope, Name, Line);
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct MDNodeKeyImpl<DIExpression> {
|
||||
ArrayRef<uint64_t> Elements;
|
||||
|
||||
|
@ -467,6 +467,7 @@ private:
|
||||
void visitIntrinsicCallSite(Intrinsic::ID ID, CallSite CS);
|
||||
void visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI);
|
||||
void visitDbgIntrinsic(StringRef Kind, DbgInfoIntrinsic &DII);
|
||||
void visitDbgLabelIntrinsic(StringRef Kind, DbgLabelInst &DLI);
|
||||
void visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI);
|
||||
void visitAtomicRMWInst(AtomicRMWInst &RMWI);
|
||||
void visitFenceInst(FenceInst &FI);
|
||||
@ -1085,12 +1086,13 @@ void Verifier::visitDISubprogram(const DISubprogram &N) {
|
||||
if (auto *S = N.getRawDeclaration())
|
||||
AssertDI(isa<DISubprogram>(S) && !cast<DISubprogram>(S)->isDefinition(),
|
||||
"invalid subprogram declaration", &N, S);
|
||||
if (auto *RawVars = N.getRawVariables()) {
|
||||
auto *Vars = dyn_cast<MDTuple>(RawVars);
|
||||
AssertDI(Vars, "invalid variable list", &N, RawVars);
|
||||
for (Metadata *Op : Vars->operands()) {
|
||||
AssertDI(Op && isa<DILocalVariable>(Op), "invalid local variable", &N,
|
||||
Vars, Op);
|
||||
if (auto *RawNode = N.getRawRetainedNodes()) {
|
||||
auto *Node = dyn_cast<MDTuple>(RawNode);
|
||||
AssertDI(Node, "invalid retained nodes list", &N, RawNode);
|
||||
for (Metadata *Op : Node->operands()) {
|
||||
AssertDI(Op && (isa<DILocalVariable>(Op) || isa<DILabel>(Op)),
|
||||
"invalid retained nodes, expected DILocalVariable or DILabel",
|
||||
&N, Node, Op);
|
||||
}
|
||||
}
|
||||
AssertDI(!hasConflictingReferenceFlags(N.getFlags()),
|
||||
@ -1222,6 +1224,17 @@ void Verifier::visitDILocalVariable(const DILocalVariable &N) {
|
||||
"local variable requires a valid scope", &N, N.getRawScope());
|
||||
}
|
||||
|
||||
void Verifier::visitDILabel(const DILabel &N) {
|
||||
if (auto *S = N.getRawScope())
|
||||
AssertDI(isa<DIScope>(S), "invalid scope", &N, S);
|
||||
if (auto *F = N.getRawFile())
|
||||
AssertDI(isa<DIFile>(F), "invalid file", &N, F);
|
||||
|
||||
AssertDI(N.getTag() == dwarf::DW_TAG_label, "invalid tag", &N);
|
||||
AssertDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
|
||||
"label requires a valid scope", &N, N.getRawScope());
|
||||
}
|
||||
|
||||
void Verifier::visitDIExpression(const DIExpression &N) {
|
||||
AssertDI(N.isValid(), "invalid expression", &N);
|
||||
}
|
||||
@ -4065,6 +4078,9 @@ void Verifier::visitIntrinsicCallSite(Intrinsic::ID ID, CallSite CS) {
|
||||
case Intrinsic::dbg_value: // llvm.dbg.value
|
||||
visitDbgIntrinsic("value", cast<DbgInfoIntrinsic>(*CS.getInstruction()));
|
||||
break;
|
||||
case Intrinsic::dbg_label: // llvm.dbg.label
|
||||
visitDbgLabelIntrinsic("label", cast<DbgLabelInst>(*CS.getInstruction()));
|
||||
break;
|
||||
case Intrinsic::memcpy:
|
||||
case Intrinsic::memmove:
|
||||
case Intrinsic::memset: {
|
||||
@ -4494,7 +4510,40 @@ void Verifier::visitDbgIntrinsic(StringRef Kind, DbgInfoIntrinsic &DII) {
|
||||
verifyFnArgs(DII);
|
||||
}
|
||||
|
||||
void Verifier::visitDbgLabelIntrinsic(StringRef Kind, DbgLabelInst &DLI) {
|
||||
AssertDI(isa<DILabel>(DLI.getRawVariable()),
|
||||
"invalid llvm.dbg." + Kind + " intrinsic variable", &DLI,
|
||||
DLI.getRawVariable());
|
||||
|
||||
// Ignore broken !dbg attachments; they're checked elsewhere.
|
||||
if (MDNode *N = DLI.getDebugLoc().getAsMDNode())
|
||||
if (!isa<DILocation>(N))
|
||||
return;
|
||||
|
||||
BasicBlock *BB = DLI.getParent();
|
||||
Function *F = BB ? BB->getParent() : nullptr;
|
||||
|
||||
// The scopes for variables and !dbg attachments must agree.
|
||||
DILabel *Label = DLI.getLabel();
|
||||
DILocation *Loc = DLI.getDebugLoc();
|
||||
Assert(Loc, "llvm.dbg." + Kind + " intrinsic requires a !dbg attachment",
|
||||
&DLI, BB, F);
|
||||
|
||||
DISubprogram *LabelSP = getSubprogram(Label->getRawScope());
|
||||
DISubprogram *LocSP = getSubprogram(Loc->getRawScope());
|
||||
if (!LabelSP || !LocSP)
|
||||
return;
|
||||
|
||||
AssertDI(LabelSP == LocSP, "mismatched subprogram between llvm.dbg." + Kind +
|
||||
" label and !dbg attachment",
|
||||
&DLI, BB, F, Label, Label->getScope()->getSubprogram(), Loc,
|
||||
Loc->getScope()->getSubprogram());
|
||||
}
|
||||
|
||||
void Verifier::verifyFragmentExpression(const DbgInfoIntrinsic &I) {
|
||||
if (dyn_cast<DbgLabelInst>(&I))
|
||||
return;
|
||||
|
||||
DILocalVariable *V = dyn_cast_or_null<DILocalVariable>(I.getRawVariable());
|
||||
DIExpression *E = dyn_cast_or_null<DIExpression>(I.getRawExpression());
|
||||
|
||||
|
@ -372,6 +372,11 @@ bool llvm::wouldInstructionBeTriviallyDead(Instruction *I,
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
if (DbgLabelInst *DLI = dyn_cast<DbgLabelInst>(I)) {
|
||||
if (DLI->getLabel())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!I->mayHaveSideEffects())
|
||||
return true;
|
||||
|
@ -3896,6 +3896,7 @@ static bool removeEmptyCleanup(CleanupReturnInst *RI) {
|
||||
switch (IntrinsicID) {
|
||||
case Intrinsic::dbg_declare:
|
||||
case Intrinsic::dbg_value:
|
||||
case Intrinsic::dbg_label:
|
||||
case Intrinsic::lifetime_end:
|
||||
break;
|
||||
default:
|
||||
|
@ -40,7 +40,7 @@ attributes #0 = { nounwind readnone speculatable }
|
||||
!8 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!9 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!10 = !{!"My Compiler"}
|
||||
!11 = distinct !DISubprogram(name: "func_5", scope: !0, file: !0, line: 117, type: !12, isLocal: true, isDefinition: true, scopeLine: 118, isOptimized: false, unit: !5, variables: !6)
|
||||
!11 = distinct !DISubprogram(name: "func_5", scope: !0, file: !0, line: 117, type: !12, isLocal: true, isDefinition: true, scopeLine: 118, isOptimized: false, unit: !5, retainedNodes: !6)
|
||||
!12 = !DISubroutineType(types: !13)
|
||||
!13 = !{}
|
||||
!14 = !DILocalVariable(name: "p_6", arg: 1, scope: !11, line: 117, type: !1)
|
||||
|
@ -52,7 +52,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{i32 1, !"PIC Level", i32 2}
|
||||
!6 = !{!"clang version 3.9.0 (llvm/trunk 271857)"}
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!8 = !DISubroutineType(types: !9)
|
||||
!9 = !{null, !10, !11}
|
||||
!10 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
55
test/Assembler/debug-label-bitcode.ll
Normal file
55
test/Assembler/debug-label-bitcode.ll
Normal file
@ -0,0 +1,55 @@
|
||||
; Test bitcode writer/reader for DILabel metadata.
|
||||
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
|
||||
; RUN: verify-uselistorder %s
|
||||
;
|
||||
; CHECK: top:
|
||||
; CHECK: call void @llvm.dbg.label(metadata [[LABEL_METADATA:![0-9]+]])
|
||||
; CHECK: distinct !DISubprogram(name: "foo", {{.*}}, retainedNodes: [[ELEMENTS:![0-9]+]])
|
||||
; CHECK: [[ELEMENTS]] = !{[[LABEL_METADATA]]}
|
||||
; CHECK: [[LABEL_METADATA]] = !DILabel({{.*}}, name: "top", {{.*}}, line: 4)
|
||||
|
||||
source_filename = "debug-label-bitcode.c"
|
||||
|
||||
; Function Attrs: noinline nounwind optnone
|
||||
define i32 @foo(i32 signext %a, i32 signext %b) !dbg !4 {
|
||||
entry:
|
||||
%a.addr = alloca i32, align 4
|
||||
%b.addr = alloca i32, align 4
|
||||
%sum = alloca i32, align 4
|
||||
store i32 %a, i32* %a.addr, align 4
|
||||
store i32 %b, i32* %b.addr, align 4
|
||||
br label %top
|
||||
|
||||
top: ; preds = %entry
|
||||
call void @llvm.dbg.label(metadata !9), !dbg !10
|
||||
%0 = load i32, i32* %a.addr, align 4
|
||||
%1 = load i32, i32* %b.addr, align 4
|
||||
%add = add nsw i32 %0, %1
|
||||
store i32 %add, i32* %sum, align 4
|
||||
br label %done
|
||||
|
||||
done: ; preds = %top
|
||||
call void @llvm.dbg.label(metadata !11), !dbg !12
|
||||
%2 = load i32, i32* %sum, align 4
|
||||
ret i32 %2
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind readnone speculatable
|
||||
declare void @llvm.dbg.label(metadata)
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
!llvm.module.flags = !{!3}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang 6.0.0", isOptimized: false, emissionKind: FullDebug, enums: !2)
|
||||
!1 = !DIFile(filename: "debug-label-bitcode.c", directory: "./")
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, unit: !0, retainedNodes: !5)
|
||||
!5 = !{!9}
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8, !8}
|
||||
!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
!9 = !DILabel(scope: !4, name: "top", file: !1, line: 4)
|
||||
!10 = !DILocation(line: 4, column: 1, scope: !4)
|
||||
!11 = !DILabel(scope: !4, name: "done", file: !1, line: 7)
|
||||
!12 = !DILocation(line: 7, column: 1, scope: !4)
|
@ -28,7 +28,7 @@ define void @_Z3foov() !dbg !9 {
|
||||
; CHECK: !9 = !DISubprogram(scope: null, isLocal: false, isDefinition: false, isOptimized: false)
|
||||
!9 = !DISubprogram(isDefinition: false)
|
||||
|
||||
; CHECK: !10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, file: !2, line: 7, type: !3, isLocal: true, isDefinition: true, scopeLine: 8, containingType: !4, virtuality: DW_VIRTUALITY_pure_virtual, virtualIndex: 10, thisAdjustment: 3, flags: DIFlagPrototyped | DIFlagNoReturn, isOptimized: true, unit: !8, templateParams: !5, declaration: !9, variables: !6)
|
||||
; CHECK: !10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, file: !2, line: 7, type: !3, isLocal: true, isDefinition: true, scopeLine: 8, containingType: !4, virtuality: DW_VIRTUALITY_pure_virtual, virtualIndex: 10, thisAdjustment: 3, flags: DIFlagPrototyped | DIFlagNoReturn, isOptimized: true, unit: !8, templateParams: !5, declaration: !9, retainedNodes: !6)
|
||||
!10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1,
|
||||
file: !2, line: 7, type: !3, isLocal: true,
|
||||
isDefinition: true, scopeLine: 8,
|
||||
@ -36,7 +36,7 @@ define void @_Z3foov() !dbg !9 {
|
||||
virtuality: DW_VIRTUALITY_pure_virtual,
|
||||
virtualIndex: 10, thisAdjustment: 3, flags: DIFlagPrototyped | DIFlagNoReturn,
|
||||
isOptimized: true, unit: !8, templateParams: !5,
|
||||
declaration: !9, variables: !6)
|
||||
declaration: !9, retainedNodes: !6)
|
||||
|
||||
; CHECK: !11 = distinct !DISubprogram
|
||||
; CHECK-SAME: virtualIndex: 0,
|
||||
@ -48,7 +48,7 @@ define void @_Z3foov() !dbg !9 {
|
||||
virtualIndex: 0,
|
||||
flags: DIFlagPrototyped, isOptimized: true,
|
||||
unit: !8, templateParams: !5, declaration: !9,
|
||||
variables: !6)
|
||||
retainedNodes: !6)
|
||||
|
||||
; CHECK: !12 = distinct !DISubprogram
|
||||
; CHECK-NOT: virtualIndex
|
||||
@ -59,7 +59,7 @@ define void @_Z3foov() !dbg !9 {
|
||||
virtuality: DW_VIRTUALITY_none,
|
||||
flags: DIFlagPrototyped, isOptimized: true,
|
||||
unit: !8,
|
||||
templateParams: !5, declaration: !9, variables: !6)
|
||||
templateParams: !5, declaration: !9, retainedNodes: !6)
|
||||
|
||||
!13 = !{!4}
|
||||
; CHECK: !13 = !{!4}
|
||||
|
@ -15,7 +15,7 @@ entry:
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.5 (trunk 195495) (llvm/trunk 195495:195504M)", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "../llvm/tools/clang/test/CodeGen/debug-info-version.c", directory: "/Users/manmanren/llvm_gmail/release")
|
||||
!2 = !{i32 0}
|
||||
!4 = distinct !DISubprogram(name: "main", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 3, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "main", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 3, file: !1, scope: !5, type: !6, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "../llvm/tools/clang/test/CodeGen/debug-info-version.c", directory: "/Users/manmanren/llvm_gmail/release")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8}
|
||||
|
@ -34,7 +34,7 @@
|
||||
; CHECK-NEXT: !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "MyStruct", scope: !14, file: !1, size: 192, elements: !15, runtimeLang: DW_LANG_C89, identifier: "MyStruct")
|
||||
; CHECK-NEXT: !14 = !DINamespace(name: "NameSpace", scope: !6)
|
||||
; CHECK-NEXT: !15 = !{!7, !7, !7}
|
||||
; CHECK-NEXT: !16 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !1, file: !1, line: 42, type: !17, isLocal: true, isDefinition: true, scopeLine: 42, isOptimized: false, unit: !0, variables: !22)
|
||||
; CHECK-NEXT: !16 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !1, file: !1, line: 42, type: !17, isLocal: true, isDefinition: true, scopeLine: 42, isOptimized: false, unit: !0, retainedNodes: !22)
|
||||
; CHECK-NEXT: !17 = !DISubroutineType(types: !18)
|
||||
; CHECK-NEXT: !18 = !{!7, !7, !19}
|
||||
; CHECK-NEXT: !19 = !DICompositeType(tag: DW_TAG_array_type, baseType: !7, size: 640, flags: DIFlagVector, elements: !20)
|
||||
|
@ -3,7 +3,7 @@
|
||||
;
|
||||
; RUN: llvm-dis < %s.bc -o - | llvm-as | llvm-dis | FileCheck %s
|
||||
|
||||
; CHECK: ![[SP:[0-9]+]] = distinct !DISubprogram(name: "foo",{{.*}} variables: ![[VARS:[0-9]+]]
|
||||
; CHECK: ![[SP:[0-9]+]] = distinct !DISubprogram(name: "foo",{{.*}} retainedNodes: ![[VARS:[0-9]+]]
|
||||
; CHECK: ![[VARS]] = !{![[PARAM:[0-9]+]], ![[AUTO:[0-9]+]]}
|
||||
; CHECK: ![[PARAM]] = !DILocalVariable(name: "param", arg: 1, scope: ![[SP]])
|
||||
; CHECK: ![[AUTO]] = !DILocalVariable(name: "auto", scope: ![[SP]])
|
||||
@ -13,7 +13,7 @@
|
||||
!llvm.module.flags = !{!6}
|
||||
!llvm.dbg.cu = !{!4}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "foo", scope: null, isLocal: false, isDefinition: true, isOptimized: false, variables: !1)
|
||||
!0 = distinct !DISubprogram(name: "foo", scope: null, isLocal: false, isDefinition: true, isOptimized: false, retainedNodes: !1)
|
||||
!1 = !{!2, !3}
|
||||
!2 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "param", arg: 1, scope: !0)
|
||||
!3 = !DILocalVariable(tag: DW_TAG_auto_variable, name: "auto", scope: !0)
|
||||
|
@ -13,7 +13,7 @@
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{!"clang version 3.9.1 (http://llvm.org/git/clang.git c3709e72d22432f53f8e2f14354def31a96734fe)"}
|
||||
!6 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, unit: !0, variables: !2)
|
||||
!6 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{null}
|
||||
!9 = !DILocalVariable(name: "i", scope: !6, file: !1, line: 1, type: !10)
|
||||
|
@ -22,7 +22,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{!"clang version 5.0.1"}
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 20, type: !8, isLocal: false, isDefinition: true, scopeLine: 20, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !11)
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 20, type: !8, isLocal: false, isDefinition: true, scopeLine: 20, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !11)
|
||||
!8 = !DISubroutineType(types: !9)
|
||||
!9 = !{null, !10}
|
||||
!10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
|
@ -23,7 +23,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{!"clang version 5.0.1"}
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 20, type: !8, isLocal: false, isDefinition: true, scopeLine: 20, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !11)
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 20, type: !8, isLocal: false, isDefinition: true, scopeLine: 20, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !11)
|
||||
!8 = !DISubroutineType(types: !9)
|
||||
!9 = !{null, !10}
|
||||
!10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
|
@ -22,7 +22,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "llc r309174", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
|
||||
!1 = !DIFile(filename: "a.c", directory: "/")
|
||||
!2 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
!3 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !7)
|
||||
!3 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, retainedNodes: !7)
|
||||
!4 = !DISubroutineType(types: !5)
|
||||
!5 = !{!6}
|
||||
!6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -24,7 +24,7 @@ entry:
|
||||
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
|
||||
!2 = !{}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!7 = distinct !DISubprogram(name: "f", linkageName: "\01?f@@YAXXZ", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!7 = distinct !DISubprogram(name: "f", linkageName: "\01?f@@YAXXZ", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!8 = !DISubroutineType(types: !9)
|
||||
!9 = !{null}
|
||||
!10 = !DILocation(line: 1, column: 11, scope: !7)
|
||||
|
@ -58,15 +58,15 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{i32 1, !"PIC Level", i32 2}
|
||||
!6 = !{!"clang version 4.0.0 (trunk 289075) (llvm/trunk 289080)"}
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!8 = !DISubroutineType(types: !9)
|
||||
!9 = !{null, !10}
|
||||
!10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
!11 = !DILocalVariable(name: "in", arg: 1, scope: !7, file: !1, line: 1, type: !10)
|
||||
!12 = !DILocation(line: 1, column: 14, scope: !7)
|
||||
!13 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!13 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!14 = !DILocalVariable(name: "in", arg: 1, scope: !13, file: !1, line: 1, type: !10)
|
||||
!15 = !DILocation(line: 1, column: 14, scope: !13)
|
||||
!16 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!16 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!17 = !DILocalVariable(name: "in", arg: 1, scope: !16, file: !1, line: 1, type: !10)
|
||||
!18 = !DILocation(line: 1, column: 14, scope: !16)
|
||||
|
@ -19,7 +19,7 @@
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = distinct !DISubprogram(name: "test_dbg_value", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!5 = distinct !DISubprogram(name: "test_dbg_value", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!6 = !DISubroutineType(types: !2)
|
||||
!7 = !DILocalVariable(name: "in", arg: 1, scope: !5, file: !1, line: 1, type: !8)
|
||||
!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
|
@ -25,12 +25,12 @@
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = distinct !DISubprogram(name: "test_dbg_value", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!5 = distinct !DISubprogram(name: "test_dbg_value", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!6 = !DISubroutineType(types: !2)
|
||||
!7 = !DILocalVariable(name: "in", arg: 1, scope: !5, file: !1, line: 1, type: !8)
|
||||
!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
!9 = !DILocation(line: 1, column: 1, scope: !5)
|
||||
!10 = distinct !DISubprogram(name: "test_dbg_value", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!10 = distinct !DISubprogram(name: "test_dbg_value", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!11 = !DILocalVariable(name: "in", arg: 1, scope: !10, file: !1, line: 1, type: !8)
|
||||
!12 = !DILocation(line: 1, column: 1, scope: !10)
|
||||
...
|
||||
|
@ -47,7 +47,7 @@ attributes #1 = { nounwind readnone }
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.6.0 ", isOptimized: true, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "test.c", directory: "")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "", line: 140, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 141, file: !1, scope: !1, type: !6, variables: !12)
|
||||
!4 = distinct !DISubprogram(name: "", line: 140, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 141, file: !1, scope: !1, type: !6, retainedNodes: !12)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null, !8}
|
||||
!8 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !9)
|
||||
|
@ -53,7 +53,7 @@ end3:
|
||||
!3 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!4 = !{i32 1, !"PIC Level", i32 2}
|
||||
!5 = !{!"clang version 3.9.0 "}
|
||||
!6 = distinct !DISubprogram(name: "success", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2)
|
||||
!6 = distinct !DISubprogram(name: "success", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !2)
|
||||
!7 = !DISubroutineType(types: !2)
|
||||
!8 = !DILocation(line: 1, column: 20, scope: !6)
|
||||
!9 = !DILocation(line: 2, column: 20, scope: !6)
|
||||
|
@ -135,7 +135,7 @@ end3:
|
||||
!3 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!4 = !{i32 1, !"PIC Level", i32 2}
|
||||
!5 = !{!"clang version 3.9.0 "}
|
||||
!6 = distinct !DISubprogram(name: "success", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2)
|
||||
!6 = distinct !DISubprogram(name: "success", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !2)
|
||||
!7 = !DISubroutineType(types: !2)
|
||||
!8 = !DILocation(line: 1, column: 20, scope: !6)
|
||||
!9 = !DILocation(line: 2, column: 20, scope: !6)
|
||||
|
@ -109,15 +109,15 @@ attributes #0 = { noredzone nounwind ssp uwtable "no-frame-pointer-elim"="false"
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{i32 7, !"PIC Level", i32 2}
|
||||
!7 = !{!""}
|
||||
!8 = distinct !DISubprogram(name: "dog", scope: !1, file: !1, line: 2, type: !9, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!8 = distinct !DISubprogram(name: "dog", scope: !1, file: !1, line: 2, type: !9, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!9 = !DISubroutineType(types: !10)
|
||||
!10 = !{null}
|
||||
!12 = !DILocation(line: 5, column: 9, scope: !8)
|
||||
!14 = distinct !DISubprogram(name: "cat", scope: !1, file: !1, line: 10, type: !9, isLocal: false, isDefinition: true, scopeLine: 11, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!14 = distinct !DISubprogram(name: "cat", scope: !1, file: !1, line: 10, type: !9, isLocal: false, isDefinition: true, scopeLine: 11, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!16 = !DILocation(line: 13, column: 9, scope: !14)
|
||||
!18 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 26, type: !9, isLocal: false, isDefinition: true, scopeLine: 26, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!18 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 26, type: !9, isLocal: false, isDefinition: true, scopeLine: 26, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!24 = !DILocation(line: 27, column: 9, scope: !18)
|
||||
!26 = !DILocation(line: 29, column: 9, scope: !18)
|
||||
!27 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 35, type: !9, isLocal: false, isDefinition: true, scopeLine: 35, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!27 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 35, type: !9, isLocal: false, isDefinition: true, scopeLine: 35, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!33 = !DILocation(line: 36, column: 1, scope: !27)
|
||||
!35 = !DILocation(line: 38, column: 1, scope: !27)
|
||||
|
@ -57,7 +57,7 @@ attributes #1 = { nounwind readnone }
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{i32 1, !"min_enum_size", i32 4}
|
||||
!7 = !{!"clang"}
|
||||
!8 = distinct !DISubprogram(name: "func", scope: !1, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!8 = distinct !DISubprogram(name: "func", scope: !1, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!9 = !DISubroutineType(types: !10)
|
||||
!10 = !{!11, !11}
|
||||
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -388,7 +388,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
|
||||
!107 = !{i32 2, i32 0}
|
||||
!108 = !{!"clang version 7.0.0 (https://github.com/llvm-mirror/clang.git 3edc9a6d1f98fec61a944167cb5c36c40104918a) (https://github.com/llvm-mirror/llvm.git 90eddc791688f226397e600c287c043d9b0e35fa)"}
|
||||
!109 = !{!"clang version 4.0 "}
|
||||
!110 = distinct !DISubprogram(name: "Scene_transformT", scope: !4, file: !4, line: 2182, type: !111, isLocal: false, isDefinition: true, scopeLine: 2183, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !116)
|
||||
!110 = distinct !DISubprogram(name: "Scene_transformT", scope: !4, file: !4, line: 2182, type: !111, isLocal: false, isDefinition: true, scopeLine: 2183, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !116)
|
||||
!111 = !DISubroutineType(types: !112)
|
||||
!112 = !{!77, !83, !77, !80, !113, !115}
|
||||
!113 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !114, size: 64)
|
||||
|
@ -64,7 +64,7 @@ attributes #1 = { nounwind readnone }
|
||||
!9 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!10 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!11 = !{!"clang version 3.9.0 (trunk 269772)"}
|
||||
!12 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !13, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!12 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !13, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!13 = !DISubroutineType(types: !14)
|
||||
!14 = !{null, !15}
|
||||
!15 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !16, size: 64, align: 32)
|
||||
|
@ -63,7 +63,7 @@ attributes #1 = { nounwind readnone }
|
||||
!9 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!10 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!11 = !{!"clang version 3.9.0 (trunk 268929)"}
|
||||
!12 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !13, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!12 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !13, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!13 = !DISubroutineType(types: !14)
|
||||
!14 = !{null, !15}
|
||||
!15 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !16, size: 64, align: 32)
|
||||
|
@ -47,7 +47,7 @@ attributes #1 = { nounwind readnone }
|
||||
!9 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!10 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!11 = !{!"clang version 3.9.0 (trunk 268929)"}
|
||||
!12 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !13, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!12 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !13, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!13 = !DISubroutineType(types: !14)
|
||||
!14 = !{null, !15}
|
||||
!15 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !16, size: 64, align: 32)
|
||||
|
@ -50,7 +50,7 @@ attributes #0 = { noinline nounwind "correctly-rounded-divide-sqrt-fp-math"="fal
|
||||
!4 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!5 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!6 = !{!"clang version 5.0.0"}
|
||||
!7 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!7 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!8 = !DISubroutineType(types: !9)
|
||||
!9 = !{null, !10}
|
||||
!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64)
|
||||
|
@ -34,7 +34,7 @@
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !DILocalVariable(name: "A", arg: 1, scope: !6, file: !1, line: 1, type: !9)
|
||||
!6 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!6 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{null, !9}
|
||||
!9 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !10, size: 64, align: 32)
|
||||
|
@ -42,7 +42,7 @@ attributes #1 = { nounwind readnone }
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.8.0 (trunk 244715) (llvm/trunk 244718)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
|
||||
!1 = !DIFile(filename: "/tmp/test_debug_value.cl", directory: "/Users/matt/src/llvm/build_debug")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "test_debug_value", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !9)
|
||||
!4 = distinct !DISubprogram(name: "test_debug_value", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !9)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{null, !7}
|
||||
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 32)
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !4, producer: "llvm", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !4)
|
||||
!1 = !DILocalVariable(name: "a", scope: !2, file: !4, line: 126, type: !6)
|
||||
!2 = distinct !DISubprogram(name: "test", scope: !4, file: !4, line: 1, type: !3, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !5)
|
||||
!2 = distinct !DISubprogram(name: "test", scope: !4, file: !4, line: 1, type: !3, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !5)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{null}
|
||||
!5 = !{!1}
|
||||
|
@ -812,7 +812,7 @@ attributes #2 = { alwaysinline nounwind }
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!5 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null, !8}
|
||||
!8 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 64)
|
||||
|
@ -99,7 +99,7 @@ attributes #1 = { nounwind readnone }
|
||||
!13 = !{}
|
||||
!14 = !{!0, !4, !6, !8, !10}
|
||||
!15 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
!16 = distinct !DISubprogram(name: "get1", linkageName: "get1", scope: !2, file: !2, line: 4, type: !17, isLocal: false, isDefinition: true, scopeLine: 4, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, variables: !19)
|
||||
!16 = distinct !DISubprogram(name: "get1", linkageName: "get1", scope: !2, file: !2, line: 4, type: !17, isLocal: false, isDefinition: true, scopeLine: 4, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, retainedNodes: !19)
|
||||
!17 = !DISubroutineType(types: !18)
|
||||
!18 = !{!3, !3}
|
||||
!19 = !{!20, !21}
|
||||
@ -109,28 +109,28 @@ attributes #1 = { nounwind readnone }
|
||||
!23 = !DIExpression()
|
||||
!24 = !DILocation(line: 4, scope: !16)
|
||||
!25 = !DILocation(line: 4, scope: !22)
|
||||
!26 = distinct !DISubprogram(name: "get2", linkageName: "get2", scope: !2, file: !2, line: 7, type: !17, isLocal: false, isDefinition: true, scopeLine: 7, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, variables: !27)
|
||||
!26 = distinct !DISubprogram(name: "get2", linkageName: "get2", scope: !2, file: !2, line: 7, type: !17, isLocal: false, isDefinition: true, scopeLine: 7, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, retainedNodes: !27)
|
||||
!27 = !{!28, !29}
|
||||
!28 = !DILocalVariable(name: "a", arg: 1, scope: !26, file: !2, line: 7, type: !3)
|
||||
!29 = !DILocalVariable(name: "b", scope: !30, file: !2, line: 7, type: !3)
|
||||
!30 = distinct !DILexicalBlock(scope: !26, file: !2, line: 7)
|
||||
!31 = !DILocation(line: 7, scope: !26)
|
||||
!32 = !DILocation(line: 7, scope: !30)
|
||||
!33 = distinct !DISubprogram(name: "get3", linkageName: "get3", scope: !2, file: !2, line: 10, type: !17, isLocal: false, isDefinition: true, scopeLine: 10, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, variables: !34)
|
||||
!33 = distinct !DISubprogram(name: "get3", linkageName: "get3", scope: !2, file: !2, line: 10, type: !17, isLocal: false, isDefinition: true, scopeLine: 10, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, retainedNodes: !34)
|
||||
!34 = !{!35, !36}
|
||||
!35 = !DILocalVariable(name: "a", arg: 1, scope: !33, file: !2, line: 10, type: !3)
|
||||
!36 = !DILocalVariable(name: "b", scope: !37, file: !2, line: 10, type: !3)
|
||||
!37 = distinct !DILexicalBlock(scope: !33, file: !2, line: 10)
|
||||
!38 = !DILocation(line: 10, scope: !33)
|
||||
!39 = !DILocation(line: 10, scope: !37)
|
||||
!40 = distinct !DISubprogram(name: "get4", linkageName: "get4", scope: !2, file: !2, line: 13, type: !17, isLocal: false, isDefinition: true, scopeLine: 13, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, variables: !41)
|
||||
!40 = distinct !DISubprogram(name: "get4", linkageName: "get4", scope: !2, file: !2, line: 13, type: !17, isLocal: false, isDefinition: true, scopeLine: 13, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, retainedNodes: !41)
|
||||
!41 = !{!42, !43}
|
||||
!42 = !DILocalVariable(name: "a", arg: 1, scope: !40, file: !2, line: 13, type: !3)
|
||||
!43 = !DILocalVariable(name: "b", scope: !44, file: !2, line: 13, type: !3)
|
||||
!44 = distinct !DILexicalBlock(scope: !40, file: !2, line: 13)
|
||||
!45 = !DILocation(line: 13, scope: !40)
|
||||
!46 = !DILocation(line: 13, scope: !44)
|
||||
!47 = distinct !DISubprogram(name: "get5", linkageName: "get5", scope: !2, file: !2, line: 16, type: !17, isLocal: false, isDefinition: true, scopeLine: 16, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, variables: !48)
|
||||
!47 = distinct !DISubprogram(name: "get5", linkageName: "get5", scope: !2, file: !2, line: 16, type: !17, isLocal: false, isDefinition: true, scopeLine: 16, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !12, retainedNodes: !48)
|
||||
!48 = !{!49, !50}
|
||||
!49 = !DILocalVariable(name: "a", arg: 1, scope: !47, file: !2, line: 16, type: !3)
|
||||
!50 = !DILocalVariable(name: "b", scope: !51, file: !2, line: 16, type: !3)
|
||||
|
@ -90,7 +90,7 @@ attributes #1 = { nounwind readnone }
|
||||
!7 = !DIGlobalVariable(name: "x2", scope: !2, file: !3, line: 7, type: !8, isLocal: true, isDefinition: true)
|
||||
!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!9 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
!10 = distinct !DISubprogram(name: "get1", scope: !3, file: !3, line: 5, type: !11, isLocal: false, isDefinition: true, scopeLine: 5, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, variables: !13)
|
||||
!10 = distinct !DISubprogram(name: "get1", scope: !3, file: !3, line: 5, type: !11, isLocal: false, isDefinition: true, scopeLine: 5, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, retainedNodes: !13)
|
||||
!11 = !DISubroutineType(types: !12)
|
||||
!12 = !{!8}
|
||||
!13 = !{!14, !15}
|
||||
@ -100,28 +100,28 @@ attributes #1 = { nounwind readnone }
|
||||
!17 = !DIExpression()
|
||||
!18 = !DILocation(line: 5, column: 16, scope: !10)
|
||||
!19 = !DILocation(line: 5, column: 32, scope: !16)
|
||||
!20 = distinct !DISubprogram(name: "get2", scope: !3, file: !3, line: 8, type: !11, isLocal: false, isDefinition: true, scopeLine: 8, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, variables: !21)
|
||||
!20 = distinct !DISubprogram(name: "get2", scope: !3, file: !3, line: 8, type: !11, isLocal: false, isDefinition: true, scopeLine: 8, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, retainedNodes: !21)
|
||||
!21 = !{!22, !23}
|
||||
!22 = !DILocalVariable(name: "a", arg: 1, scope: !20, file: !3, line: 8, type: !8)
|
||||
!23 = !DILocalVariable(name: "b", scope: !24, file: !3, line: 8, type: !8)
|
||||
!24 = distinct !DILexicalBlock(scope: !20, file: !3, line: 8, column: 17)
|
||||
!25 = !DILocation(line: 8, column: 14, scope: !20)
|
||||
!26 = !DILocation(line: 8, column: 29, scope: !24)
|
||||
!27 = distinct !DISubprogram(name: "get3", scope: !3, file: !3, line: 11, type: !11, isLocal: false, isDefinition: true, scopeLine: 11, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, variables: !28)
|
||||
!27 = distinct !DISubprogram(name: "get3", scope: !3, file: !3, line: 11, type: !11, isLocal: false, isDefinition: true, scopeLine: 11, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, retainedNodes: !28)
|
||||
!28 = !{!29, !30}
|
||||
!29 = !DILocalVariable(name: "a", arg: 1, scope: !27, file: !3, line: 11, type: !8)
|
||||
!30 = !DILocalVariable(name: "b", scope: !31, file: !3, line: 11, type: !8)
|
||||
!31 = distinct !DILexicalBlock(scope: !27, file: !3, line: 11, column: 19)
|
||||
!32 = !DILocation(line: 11, column: 16, scope: !27)
|
||||
!33 = !DILocation(line: 11, column: 32, scope: !31)
|
||||
!34 = distinct !DISubprogram(name: "get4", scope: !3, file: !3, line: 14, type: !11, isLocal: false, isDefinition: true, scopeLine: 14, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, variables: !35)
|
||||
!34 = distinct !DISubprogram(name: "get4", scope: !3, file: !3, line: 14, type: !11, isLocal: false, isDefinition: true, scopeLine: 14, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, retainedNodes: !35)
|
||||
!35 = !{!36, !37}
|
||||
!36 = !DILocalVariable(name: "a", arg: 1, scope: !34, file: !3, line: 14, type: !8)
|
||||
!37 = !DILocalVariable(name: "b", scope: !38, file: !3, line: 14, type: !8)
|
||||
!38 = distinct !DILexicalBlock(scope: !34, file: !3, line: 14, column: 19)
|
||||
!39 = !DILocation(line: 14, column: 16, scope: !34)
|
||||
!40 = !DILocation(line: 14, column: 32, scope: !38)
|
||||
!41 = distinct !DISubprogram(name: "get5", scope: !3, file: !3, line: 17, type: !11, isLocal: false, isDefinition: true, scopeLine: 17, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, variables: !42)
|
||||
!41 = distinct !DISubprogram(name: "get5", scope: !3, file: !3, line: 17, type: !11, isLocal: false, isDefinition: true, scopeLine: 17, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, retainedNodes: !42)
|
||||
!42 = !{!43, !44}
|
||||
!43 = !DILocalVariable(name: "a", arg: 1, scope: !41, file: !3, line: 17, type: !8)
|
||||
!44 = !DILocalVariable(name: "b", scope: !45, file: !3, line: 17, type: !8)
|
||||
|
@ -39,7 +39,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) #1
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{i32 1, !"min_enum_size", i32 4}
|
||||
!7 = !{!"clang version 4.0.0 "}
|
||||
!8 = distinct !DISubprogram(name: "s_idx", scope: !1, file: !1, line: 6, type: !9, isLocal: false, isDefinition: true, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !16)
|
||||
!8 = distinct !DISubprogram(name: "s_idx", scope: !1, file: !1, line: 6, type: !9, isLocal: false, isDefinition: true, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !16)
|
||||
!9 = !DISubroutineType(types: !10)
|
||||
!10 = !{!11, !11}
|
||||
!11 = !DIDerivedType(tag: DW_TAG_typedef, name: "ezxml_t", file: !1, line: 1, baseType: !12)
|
||||
|
@ -42,7 +42,7 @@
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.7.0 (llvm/trunk 237059)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "<stdin>", directory: "/Users/compnerd/Source/llvm")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !17)
|
||||
!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !17)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{!7, !8, !11, !12, !16}
|
||||
!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -95,7 +95,7 @@ attributes #3 = { nounwind }
|
||||
!12 = !{}
|
||||
!13 = !{!6, !4, !0, !9}
|
||||
!14 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
!15 = distinct !DISubprogram(name: "pr16110", scope: !2, file: !2, line: 7, type: !16, isLocal: false, isDefinition: true, scopeLine: 7, virtualIndex: 6, isOptimized: true, unit: !11, variables: !18)
|
||||
!15 = distinct !DISubprogram(name: "pr16110", scope: !2, file: !2, line: 7, type: !16, isLocal: false, isDefinition: true, scopeLine: 7, virtualIndex: 6, isOptimized: true, unit: !11, retainedNodes: !18)
|
||||
!16 = !DISubroutineType(types: !17)
|
||||
!17 = !{!3}
|
||||
!18 = !{!19, !20}
|
||||
|
@ -33,12 +33,12 @@ attributes #0 = { minsize norecurse nounwind optsize readnone "disable-tail-call
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{i32 1, !"min_enum_size", i32 4}
|
||||
!7 = !{!"clang version 3.9.0 (http://llvm.org/git/clang.git 075a2bc2570dfcbb6d6aed6c836e4c62b37afea6)"}
|
||||
!8 = distinct !DISubprogram(name: "fn1", scope: !1, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: true, unit: !0, variables: !2)
|
||||
!8 = distinct !DISubprogram(name: "fn1", scope: !1, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: true, unit: !0, retainedNodes: !2)
|
||||
!9 = !DISubroutineType(types: !10)
|
||||
!10 = !{!11}
|
||||
!11 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !12, size: 32, align: 32)
|
||||
!12 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !13)
|
||||
!13 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)
|
||||
!14 = !DILocation(line: 2, column: 5, scope: !8)
|
||||
!15 = distinct !DISubprogram(name: "fn2", scope: !1, file: !1, line: 4, type: !9, isLocal: false, isDefinition: true, scopeLine: 4, isOptimized: true, unit: !0, variables: !2)
|
||||
!15 = distinct !DISubprogram(name: "fn2", scope: !1, file: !1, line: 4, type: !9, isLocal: false, isDefinition: true, scopeLine: 4, isOptimized: true, unit: !0, retainedNodes: !2)
|
||||
!16 = !DILocation(line: 5, column: 5, scope: !15)
|
||||
|
@ -123,7 +123,7 @@
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{i32 1, !"min_enum_size", i32 4}
|
||||
!7 = !{!"clang version 4.0.0 (http://llvm.org/git/clang.git b8f10df3679b36f51e1de7c4351b82d297825089) (http://llvm.org/git/llvm.git c2a5d16d1e3b8c49f5bbb1ff87a76ac4f88edb89)"}
|
||||
!8 = distinct !DISubprogram(name: "func", scope: !1, file: !1, line: 2, type: !9, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !12)
|
||||
!8 = distinct !DISubprogram(name: "func", scope: !1, file: !1, line: 2, type: !9, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !12)
|
||||
!9 = !DISubroutineType(types: !10)
|
||||
!10 = !{null, !11}
|
||||
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -28,7 +28,7 @@
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.5 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "var.c", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "sum", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "sum", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !5, type: !6, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "var.c", directory: "/tmp")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -128,7 +128,7 @@ declare void @_ZSt9terminatev()
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "exp.cpp", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "test", linkageName: "_Z4testiiiiiddddd", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test", linkageName: "_Z4testiiiiiddddd", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !5, type: !6, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "exp.cpp", directory: "/tmp")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null, !8, !8, !8, !8, !8, !9, !9, !9, !9, !9}
|
||||
|
@ -33,7 +33,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
|
||||
!llvm.module.flags = !{!33}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "Apple clang version 3.0 (tags/Apple/clang-211.10.1) (based on LLVM 3.0svn)", isOptimized: true, emissionKind: FullDebug, file: !32, enums: !{}, retainedTypes: !{}, imports: null)
|
||||
!1 = distinct !DISubprogram(name: "foo", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 11, file: !2, scope: !2, type: !3, variables: !31)
|
||||
!1 = distinct !DISubprogram(name: "foo", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 11, file: !2, scope: !2, type: !3, retainedNodes: !31)
|
||||
!2 = !DIFile(filename: "one.c", directory: "/Volumes/Athwagate/R10048772")
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{null}
|
||||
|
@ -42,7 +42,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
|
||||
!llvm.module.flags = !{!56}
|
||||
!llvm.dbg.cu = !{!2}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "test0001", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, file: !54, scope: null, type: !3, variables: !51)
|
||||
!0 = distinct !DISubprogram(name: "test0001", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, file: !54, scope: null, type: !3, retainedNodes: !51)
|
||||
!1 = !DIFile(filename: "build2.c", directory: "/private/tmp")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.0 (trunk 129915)", isOptimized: true, emissionKind: FullDebug, file: !54, enums: !{}, retainedTypes: !{}, imports: null)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
@ -52,11 +52,11 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
|
||||
!7 = !DIBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float)
|
||||
!8 = !{!9}
|
||||
!9 = !DISubrange(count: 4)
|
||||
!10 = distinct !DISubprogram(name: "main", line: 59, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, file: !54, scope: null, type: !11, variables: !52)
|
||||
!10 = distinct !DISubprogram(name: "main", line: 59, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, file: !54, scope: null, type: !11, retainedNodes: !52)
|
||||
!11 = !DISubroutineType(types: !12)
|
||||
!12 = !{!13}
|
||||
!13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!14 = distinct !DISubprogram(name: "printFV", line: 41, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, file: !55, scope: null, type: !16, variables: !53)
|
||||
!14 = distinct !DISubprogram(name: "printFV", line: 41, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, file: !55, scope: null, type: !16, retainedNodes: !53)
|
||||
!15 = !DIFile(filename: "/Volumes/Lalgate/work/llvm/projects/llvm-test/SingleSource/UnitTests/Vector/helpers.h", directory: "/private/tmp")
|
||||
!16 = !DISubroutineType(types: !17)
|
||||
!17 = !{null}
|
||||
|
@ -59,7 +59,7 @@ declare i32 @puts(i8* nocapture) nounwind
|
||||
!llvm.dbg.cu = !{!2}
|
||||
!llvm.module.flags = !{!48}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "printer", linkageName: "printer", line: 12, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 12, file: !46, scope: !1, type: !3, variables: !43)
|
||||
!0 = distinct !DISubprogram(name: "printer", linkageName: "printer", line: 12, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 12, file: !46, scope: !1, type: !3, retainedNodes: !43)
|
||||
!1 = !DIFile(filename: "a.c", directory: "/tmp/")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C89, producer: "(LLVM build 00)", isOptimized: true, emissionKind: FullDebug, file: !46, enums: !47, retainedTypes: !47, imports: null)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
@ -68,8 +68,8 @@ declare i32 @puts(i8* nocapture) nounwind
|
||||
!6 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, file: !46, scope: !1, baseType: null)
|
||||
!7 = !DIBasicType(tag: DW_TAG_base_type, name: "double", size: 64, align: 32, encoding: DW_ATE_float)
|
||||
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "unsigned char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)
|
||||
!9 = distinct !DISubprogram(name: "inlineprinter", linkageName: "inlineprinter", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 5, file: !46, scope: !1, type: !3, variables: !44)
|
||||
!10 = distinct !DISubprogram(name: "main", linkageName: "main", line: 18, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 18, file: !46, scope: !1, type: !11, variables: !45)
|
||||
!9 = distinct !DISubprogram(name: "inlineprinter", linkageName: "inlineprinter", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 5, file: !46, scope: !1, type: !3, retainedNodes: !44)
|
||||
!10 = distinct !DISubprogram(name: "main", linkageName: "main", line: 18, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 18, file: !46, scope: !1, type: !11, retainedNodes: !45)
|
||||
!11 = !DISubroutineType(types: !12)
|
||||
!12 = !{!5, !5, !13}
|
||||
!13 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, file: !46, scope: !1, baseType: !14)
|
||||
|
@ -24,7 +24,7 @@ attributes #1 = { nounwind readnone }
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "", isOptimized: false, emissionKind: FullDebug)
|
||||
!1 = !DIFile(filename: "file.c", directory: "/dir")
|
||||
!2 = !{}
|
||||
!3 = distinct !DISubprogram(name: "need_cfi_def_cfa_offset", scope: !1, file: !1, line: 1, type: !4, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, unit: !0, variables: !2)
|
||||
!3 = distinct !DISubprogram(name: "need_cfi_def_cfa_offset", scope: !1, file: !1, line: 1, type: !4, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!4 = !DISubroutineType(types: !5)
|
||||
!5 = !{null}
|
||||
!6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -40,7 +40,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
|
||||
!llvm.dbg.cu = !{!2}
|
||||
!llvm.module.flags = !{!56}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "test0001", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 3, file: !54, scope: !1, type: !3, variables: !51)
|
||||
!0 = distinct !DISubprogram(name: "test0001", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 3, file: !54, scope: !1, type: !3, retainedNodes: !51)
|
||||
!1 = !DIFile(filename: "build2.c", directory: "/private/tmp")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.0 (trunk 129915)", isOptimized: true, emissionKind: FullDebug, file: !54, enums: !{}, retainedTypes: !{}, imports: null)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
@ -50,11 +50,11 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
|
||||
!7 = !DIBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float)
|
||||
!8 = !{!9}
|
||||
!9 = !DISubrange(count: 4)
|
||||
!10 = distinct !DISubprogram(name: "main", line: 59, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 59, file: !54, scope: !1, type: !11, variables: !52)
|
||||
!10 = distinct !DISubprogram(name: "main", line: 59, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 59, file: !54, scope: !1, type: !11, retainedNodes: !52)
|
||||
!11 = !DISubroutineType(types: !12)
|
||||
!12 = !{!13}
|
||||
!13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!14 = distinct !DISubprogram(name: "printFV", line: 41, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 41, file: !55, scope: !15, type: !16, variables: !53)
|
||||
!14 = distinct !DISubprogram(name: "printFV", line: 41, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 41, file: !55, scope: !15, type: !16, retainedNodes: !53)
|
||||
!15 = !DIFile(filename: "/Volumes/Lalgate/work/llvm/projects/llvm-test/SingleSource/UnitTests/Vector/helpers.h", directory: "/private/tmp")
|
||||
!16 = !DISubroutineType(types: !17)
|
||||
!17 = !{null}
|
||||
|
@ -63,14 +63,14 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
|
||||
!llvm.dbg.cu = !{!2}
|
||||
!llvm.module.flags = !{!53}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "inlineprinter", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 5, file: !51, scope: !1, type: !3, variables: !48)
|
||||
!0 = distinct !DISubprogram(name: "inlineprinter", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 5, file: !51, scope: !1, type: !3, retainedNodes: !48)
|
||||
!1 = !DIFile(filename: "a.c", directory: "/private/tmp")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.0 (trunk 129915)", isOptimized: true, emissionKind: FullDebug, file: !51, enums: !52, retainedTypes: !52, imports: null)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{!5}
|
||||
!5 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!6 = distinct !DISubprogram(name: "printer", line: 12, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 12, file: !51, scope: !1, type: !3, variables: !49)
|
||||
!7 = distinct !DISubprogram(name: "main", line: 18, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 18, file: !51, scope: !1, type: !3, variables: !50)
|
||||
!6 = distinct !DISubprogram(name: "printer", line: 12, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 12, file: !51, scope: !1, type: !3, retainedNodes: !49)
|
||||
!7 = distinct !DISubprogram(name: "main", line: 18, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !2, scopeLine: 18, file: !51, scope: !1, type: !3, retainedNodes: !50)
|
||||
!8 = !DILocalVariable(name: "ptr", line: 4, arg: 1, scope: !0, file: !1, type: !9)
|
||||
!9 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, scope: !2, baseType: null)
|
||||
!10 = !DILocalVariable(name: "val", line: 4, arg: 2, scope: !0, file: !1, type: !11)
|
||||
|
@ -41,7 +41,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
|
||||
!llvm.module.flags = !{!20}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.0 (trunk 130845)", isOptimized: true, emissionKind: FullDebug, file: !18, enums: !19, retainedTypes: !19, imports: null)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 5, file: !18, scope: !2, type: !3, variables: !17)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 5, file: !18, scope: !2, type: !3, retainedNodes: !17)
|
||||
!2 = !DIFile(filename: "k.cc", directory: "/private/tmp")
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{null}
|
||||
|
@ -42,7 +42,7 @@ define void @test_basic() #0 !dbg !4 {
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.5 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "var.c", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "test_basic", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test_basic", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !5, type: !6, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "var.c", directory: "/tmp")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -25,7 +25,7 @@ attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disa
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{i32 1, !"min_enum_size", i32 4}
|
||||
!7 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!7 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!8 = !DISubroutineType(types: !9)
|
||||
!9 = !{null}
|
||||
!10 = !DILocation(line: 1, column: 1, scope: !7)
|
||||
|
@ -26,7 +26,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
|
||||
!5 = distinct !DICompileUnit(language: DW_LANG_C, file: !6, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !7)
|
||||
!6 = !DIFile(filename: "/Users/vsk/Desktop/test.ll", directory: "/")
|
||||
!7 = !{}
|
||||
!8 = distinct !DISubprogram(name: "i", linkageName: "i", scope: null, file: !6, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: true, unit: !5, variables: !10)
|
||||
!8 = distinct !DISubprogram(name: "i", linkageName: "i", scope: null, file: !6, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: true, unit: !5, retainedNodes: !10)
|
||||
!9 = !DISubroutineType(types: !7)
|
||||
!10 = !{!11, !13}
|
||||
!11 = !DILocalVariable(name: "1", scope: !8, file: !6, line: 1, type: !12)
|
||||
|
@ -26,7 +26,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
|
||||
!5 = distinct !DICompileUnit(language: DW_LANG_C, file: !6, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !7)
|
||||
!6 = !DIFile(filename: "/Users/vsk/Desktop/test.ll", directory: "/")
|
||||
!7 = !{}
|
||||
!8 = distinct !DISubprogram(name: "i", linkageName: "i", scope: null, file: !6, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: true, unit: !5, variables: !10)
|
||||
!8 = distinct !DISubprogram(name: "i", linkageName: "i", scope: null, file: !6, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: true, unit: !5, retainedNodes: !10)
|
||||
!9 = !DISubroutineType(types: !7)
|
||||
!10 = !{!11, !13}
|
||||
!11 = !DILocalVariable(name: "1", scope: !8, file: !6, line: 1, type: !12)
|
||||
|
@ -53,7 +53,7 @@
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.7.0 (llvm/trunk 237059)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "<stdin>", directory: "/Users/compnerd/Source/llvm")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !17)
|
||||
!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !17)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{!7, !8, !11, !12, !16}
|
||||
!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -34,7 +34,7 @@ define void @stack_offsets() !dbg !4 {
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "tmp.c", directory: "/Users/tim/llvm/build")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "bar", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, unit: !0, scopeLine: 1, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "bar", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, unit: !0, scopeLine: 1, file: !1, scope: !5, type: !6, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "tmp.c", directory: "/Users/tim/llvm/build")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null}
|
||||
|
@ -32,7 +32,7 @@ attributes #1 = { nounwind readnone }
|
||||
|
||||
!0 = distinct !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
|
||||
!1 = !DIGlobalVariable(name: "myvar_c", scope: !2, file: !3, line: 3, type: !6, isLocal: true, isDefinition: true)
|
||||
!2 = distinct !DISubprogram(name: "testprog", scope: !3, file: !3, line: 1, type: !4, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !7, variables: !10)
|
||||
!2 = distinct !DISubprogram(name: "testprog", scope: !3, file: !3, line: 1, type: !4, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !7, retainedNodes: !10)
|
||||
!3 = !DIFile(filename: "testprog.c", directory: "/w/llvm/bld")
|
||||
!4 = !DISubroutineType(types: !5)
|
||||
!5 = !{!6, !6, !6}
|
||||
|
@ -37,7 +37,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #4
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{!"clang version 5.0.0 (trunk 292174) (llvm/trunk 292179)"}
|
||||
!6 = distinct !DISubprogram(name: "warn", scope: !1, file: !1, line: 4, type: !7, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !13)
|
||||
!6 = distinct !DISubprogram(name: "warn", scope: !1, file: !1, line: 4, type: !7, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !13)
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{!9, !9, !10, !12}
|
||||
!9 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)
|
||||
@ -56,7 +56,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #4
|
||||
!22 = !DILocation(line: 7, column: 2, scope: !6)
|
||||
!23 = !DILocation(line: 8, column: 9, scope: !6)
|
||||
!24 = !DILocation(line: 8, column: 2, scope: !6)
|
||||
!25 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 2, type: !7, isLocal: true, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !26)
|
||||
!25 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 2, type: !7, isLocal: true, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !26)
|
||||
!26 = !{!27, !28, !29}
|
||||
!27 = !DILocalVariable(name: "dst", arg: 1, scope: !25, file: !1, line: 2, type: !9)
|
||||
!28 = !DILocalVariable(name: "src", arg: 2, scope: !25, file: !1, line: 2, type: !10)
|
||||
|
@ -50,7 +50,7 @@ attributes #4 = { nounwind }
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{!"clang version 5.0.0 (trunk 292141) (llvm/trunk 292156)"}
|
||||
!6 = distinct !DISubprogram(name: "nowarn", scope: !1, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !9)
|
||||
!6 = distinct !DISubprogram(name: "nowarn", scope: !1, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !9)
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{null}
|
||||
!9 = !{!10}
|
||||
@ -64,7 +64,7 @@ attributes #4 = { nounwind }
|
||||
!17 = !DILocation(line: 4, column: 7, scope: !6)
|
||||
!18 = !DILocation(line: 5, column: 2, scope: !6)
|
||||
!19 = !DILocation(line: 6, column: 1, scope: !6)
|
||||
!20 = distinct !DISubprogram(name: "warn", scope: !1, file: !1, line: 7, type: !7, isLocal: false, isDefinition: true, scopeLine: 8, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !21)
|
||||
!20 = distinct !DISubprogram(name: "warn", scope: !1, file: !1, line: 7, type: !7, isLocal: false, isDefinition: true, scopeLine: 8, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !21)
|
||||
!21 = !{!22}
|
||||
!22 = !DILocalVariable(name: "buf", scope: !20, file: !1, line: 9, type: !23)
|
||||
!23 = !DICompositeType(tag: DW_TAG_array_type, baseType: !12, size: 4096, elements: !24)
|
||||
|
@ -33,7 +33,7 @@ attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
!6 = !{i32 1, !"min_enum_size", i32 4}
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 2, type: !8, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 2, type: !8, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!8 = !DISubroutineType(types: !9)
|
||||
!9 = !{!10}
|
||||
!10 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -46,7 +46,7 @@ attributes #3 = { nounwind }
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 3, type: !6, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !9)
|
||||
!5 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 3, type: !6, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !9)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8, !8}
|
||||
!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -44,7 +44,7 @@ attributes #3 = { nounwind }
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.8.0 (http://llvm.org/git/clang.git 15506a21305e212c406f980ed9b6b1bac785df56)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
|
||||
!1 = !DIFile(filename: "cfi-late.c", directory: "/test")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !8)
|
||||
!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !8)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{!7, !7, !7}
|
||||
!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -47,7 +47,7 @@ attributes #1 = { nounwind readnone }
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{!"clang version 4.0.0 (http://llvm.org/git/clang.git 37afcb099ac2b001f4c826da7ca1d077b67a508c) (http://llvm.org/git/llvm.git 5887f1c75b3ba216850c834b186efdd3e54b7d4f)"}
|
||||
!6 = distinct !DISubprogram(name: "fred", scope: !1, file: !1, line: 116, type: !7, isLocal: false, isDefinition: true, scopeLine: 121, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !9)
|
||||
!6 = distinct !DISubprogram(name: "fred", scope: !1, file: !1, line: 116, type: !7, isLocal: false, isDefinition: true, scopeLine: 121, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !9)
|
||||
!7 = !DISubroutineType(types: !2)
|
||||
!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!9 = !{!10}
|
||||
|
@ -25,7 +25,7 @@ attributes #0 = { nounwind "target-cpu"="hexagonv55" }
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, unit: !0, variables: !2)
|
||||
!5 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8}
|
||||
!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
|
@ -49,7 +49,7 @@ attributes #1 = { nounwind readnone speculatable }
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!5 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8, !8}
|
||||
!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
@ -65,7 +65,7 @@ attributes #1 = { nounwind readnone speculatable }
|
||||
!18 = !DILocation(line: 3, column: 12, scope: !5)
|
||||
!19 = !DILocation(line: 3, column: 11, scope: !5)
|
||||
!20 = !DILocation(line: 3, column: 3, scope: !5)
|
||||
!21 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 7, type: !22, isLocal: false, isDefinition: true, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!21 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 7, type: !22, isLocal: false, isDefinition: true, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!22 = !DISubroutineType(types: !23)
|
||||
!23 = !{!8, !14}
|
||||
!24 = !DILocalVariable(name: "var", arg: 1, scope: !21, file: !1, line: 7, type: !14)
|
||||
|
@ -51,7 +51,7 @@ attributes #1 = { nounwind readnone speculatable }
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = distinct !DISubprogram(name: "factorial", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!5 = distinct !DISubprogram(name: "factorial", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -33,7 +33,7 @@ attributes #1 = { nounwind readnone speculatable }
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !9)
|
||||
!5 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !9)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8, !8}
|
||||
!8 = !DIBasicType(name: "long int", size: 32, encoding: DW_ATE_signed)
|
||||
@ -47,7 +47,7 @@ attributes #1 = { nounwind readnone speculatable }
|
||||
!16 = !DILocation(line: 2, column: 1, scope: !5)
|
||||
!17 = !DILocation(line: 4, column: 12, scope: !5)
|
||||
!18 = !DILocation(line: 4, column: 3, scope: !5)
|
||||
!19 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 7, type: !20, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: true, unit: !0, variables: !2)
|
||||
!19 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 7, type: !20, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: true, unit: !0, retainedNodes: !2)
|
||||
!20 = !DISubroutineType(types: !21)
|
||||
!21 = !{!22}
|
||||
!22 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
|
@ -58,7 +58,7 @@ attributes #1 = { nounwind readnone speculatable }
|
||||
!30 = !{!"foo1", !".text"}
|
||||
!31 = !{!"foo2", !".text"}
|
||||
!32 = !{!"foo3", !".text"}
|
||||
!33 = distinct !DISubprogram(name: "foo1", scope: !34, file: !34, line: 84, type: !35, isLocal: false, isDefinition: true, scopeLine: 85, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !44)
|
||||
!33 = distinct !DISubprogram(name: "foo1", scope: !34, file: !34, line: 84, type: !35, isLocal: false, isDefinition: true, scopeLine: 85, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !44)
|
||||
!34 = !DIFile(filename: "foo.c", directory: "/path")
|
||||
!35 = !DISubroutineType(types: !36)
|
||||
!36 = !{!37, !38, !39, !40, !41, !42, !43, !37}
|
||||
|
@ -59,7 +59,7 @@ attributes #1 = { nounwind readnone speculatable }
|
||||
!30 = !{!"foo1", !".text"}
|
||||
!31 = !{!"foo2", !".text"}
|
||||
!32 = !{!"foo3", !".text"}
|
||||
!33 = distinct !DISubprogram(name: "foo1", scope: !34, file: !34, line: 84, type: !35, isLocal: false, isDefinition: true, scopeLine: 85, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !44)
|
||||
!33 = distinct !DISubprogram(name: "foo1", scope: !34, file: !34, line: 84, type: !35, isLocal: false, isDefinition: true, scopeLine: 85, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !44)
|
||||
!34 = !DIFile(filename: "foo.c", directory: "/path")
|
||||
!35 = !DISubroutineType(types: !36)
|
||||
!36 = !{!37, !38, !39, !40, !41, !42, !43, !37}
|
||||
|
@ -39,7 +39,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "QuIC LLVM Hexagon Clang version 6.1-pre-unknown, (git://git-hexagon-aus.quicinc.com/llvm/clang-mainline.git e9382867661454cdf44addb39430741578e9765c) (llvm/llvm-mainline.git 36412bb1fcf03ed426d4437b41198bae066675ac)", isOptimized: true, emissionKind: FullDebug, file: !28, enums: !2, retainedTypes: !2, globals: !2)
|
||||
!2 = !{}
|
||||
!5 = distinct !DISubprogram(name: "foo", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 1, file: !28, scope: null, type: !7, variables: !11)
|
||||
!5 = distinct !DISubprogram(name: "foo", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 1, file: !28, scope: null, type: !7, retainedNodes: !11)
|
||||
!6 = !DIFile(filename: "hwloop-dbg.c", directory: "/usr2/kparzysz/s.hex/t")
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{null, !9, !9}
|
||||
|
@ -85,7 +85,7 @@ attributes #1 = { nounwind readnone }
|
||||
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{!"clang version 3.9.0 (http://llvm.org/git/clang.git 4b380bc1db8b0c72bdbdaf0e4697b1a84100a369) (http://llvm.org/git/llvm.git 6217a62bc009d55e160dbb694f2e94a22c80809f)"}
|
||||
!6 = distinct !DISubprogram(name: "fred", scope: !1, file: !1, line: 138, type: !7, isLocal: false, isDefinition: true, scopeLine: 139, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !25)
|
||||
!6 = distinct !DISubprogram(name: "fred", scope: !1, file: !1, line: 138, type: !7, isLocal: false, isDefinition: true, scopeLine: 139, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !25)
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{null, !9, !15}
|
||||
!9 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !10, size: 32, align: 32)
|
||||
|
@ -123,7 +123,7 @@
|
||||
!9 = !{!"clang version 6.0.0 "}
|
||||
!10 = !DIExpression(DW_OP_plus_uconst, 12)
|
||||
!11 = !DIExpression(DW_OP_plus_uconst, 8, DW_OP_deref)
|
||||
!12 = distinct !DISubprogram(name: "fun", linkageName: "fun", scope: !1, file: !1, line: 9, type: !13, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!12 = distinct !DISubprogram(name: "fun", linkageName: "fun", scope: !1, file: !1, line: 9, type: !13, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!13 = !DISubroutineType(types: !14)
|
||||
!14 = !{!15}
|
||||
!15 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "string", file: !1, line: 1, size: 96, elements: !16, identifier: ".?AUstring@@")
|
||||
@ -142,7 +142,7 @@
|
||||
!28 = !DIExpression(DW_OP_constu, 4, DW_OP_minus)
|
||||
!29 = !DILocation(line: 11, scope: !12)
|
||||
!30 = !DILocation(line: 12, scope: !12)
|
||||
!31 = distinct !DISubprogram(name: "len", linkageName: "len", scope: !1, file: !1, line: 14, type: !32, isLocal: false, isDefinition: true, scopeLine: 14, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!31 = distinct !DISubprogram(name: "len", linkageName: "len", scope: !1, file: !1, line: 14, type: !32, isLocal: false, isDefinition: true, scopeLine: 14, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!32 = !DISubroutineType(types: !33)
|
||||
!33 = !{!18}
|
||||
!34 = !DILocation(line: 15, scope: !31)
|
||||
|
@ -23,7 +23,7 @@
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.7.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -23,7 +23,7 @@
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.7.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -34,7 +34,7 @@
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.7.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -25,7 +25,7 @@
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.7.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -23,7 +23,7 @@
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.7.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -60,7 +60,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
|
||||
!16 = distinct !DIGlobalVariable(name: "d", scope: !0, file: !6, line: 8, type: !12, isLocal: false, isDefinition: true)
|
||||
!17 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!18 = !{i32 7, !"PIC Level", i32 2}
|
||||
!19 = distinct !DISubprogram(name: "e", scope: !6, file: !6, line: 9, type: !20, isLocal: false, isDefinition: true, scopeLine: 9, isOptimized: true, unit: !0, variables: !22)
|
||||
!19 = distinct !DISubprogram(name: "e", scope: !6, file: !6, line: 9, type: !20, isLocal: false, isDefinition: true, scopeLine: 9, isOptimized: true, unit: !0, retainedNodes: !22)
|
||||
!20 = !DISubroutineType(types: !21)
|
||||
!21 = !{!12}
|
||||
!22 = !{!23}
|
||||
|
@ -48,7 +48,7 @@ version 6.0.0", isOptimized: true, runtimeVersion:
|
||||
!4 = !{i32 7, !"PIC Level", i32 2}
|
||||
!5 = distinct !DISubprogram(name: "f", scope: !6, file: !6, line: 8, type: !7,
|
||||
isLocal: false, isDefinition: true, scopeLine: 8, isOptimized: true, unit: !0,
|
||||
variables: !10)
|
||||
retainedNodes: !10)
|
||||
!6 = !DIFile(filename:
|
||||
"/tmp/test.c",
|
||||
directory: "/tmp")
|
||||
|
@ -54,7 +54,7 @@ declare void @extfunc(i8 signext)
|
||||
!7 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!8 = distinct !DISubprogram(name: "foo", linkageName: "func",
|
||||
scope: !1, file: !1, line: 3, type: !9, isLocal: false, isDefinition: true, scopeLine: 3,
|
||||
flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
; CHECK: [[FUNCNODE]] = distinct !DISubprogram(name: "foo",
|
||||
; CHECK-SAME: type: [[STYPENODE:![0-9]+]]
|
||||
; CHECK-SAME: unit: [[CUNODE]],
|
||||
|
@ -19,7 +19,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.1", isOptimized: true, emissionKind: FullDebug, file: !21, enums: !1, retainedTypes: !1, globals: !1, imports: !1)
|
||||
!1 = !{}
|
||||
!5 = distinct !DISubprogram(name: "main", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, file: !21, scope: null, type: !7, variables: !13)
|
||||
!5 = distinct !DISubprogram(name: "main", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, file: !21, scope: null, type: !7, retainedNodes: !13)
|
||||
!6 = !DIFile(filename: "dbg.c", directory: "/src")
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{!9, !9, !10}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user