mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 04:09:45 +00:00
DI: Reverse direction of subprogram -> function edge.
Previously, subprograms contained a metadata reference to the function they described. Because most clients need to get or set a subprogram for a given function rather than the other way around, this created unneeded inefficiency. For example, many passes needed to call the function llvm::makeSubprogramMap() to build a mapping from functions to subprograms, and the IR linker needed to fix up function references in a way that caused quadratic complexity in the IR linking phase of LTO. This change reverses the direction of the edge by storing the subprogram as function-level metadata and removing DISubprogram's function field. Since this is an IR change, a bitcode upgrade has been provided. Fixes PR23367. An upgrade script for textual IR for out-of-tree clients is attached to the PR. Differential Revision: http://reviews.llvm.org/D14265 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252219 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cc5dc01d7f
commit
5f220beefc
@ -74,13 +74,13 @@ LLVMMetadataRef LLVMDIBuilderCreateFunction(
|
||||
LLVMDIBuilderRef Dref, LLVMMetadataRef Scope, const char *Name,
|
||||
const char *LinkageName, LLVMMetadataRef File, unsigned Line,
|
||||
LLVMMetadataRef CompositeType, int IsLocalToUnit, int IsDefinition,
|
||||
unsigned ScopeLine, unsigned Flags, int IsOptimized, LLVMValueRef Func) {
|
||||
unsigned ScopeLine, unsigned Flags, int IsOptimized) {
|
||||
DIBuilder *D = unwrap(Dref);
|
||||
return wrap(D->createFunction(unwrap<DIScope>(Scope), Name, LinkageName,
|
||||
File ? unwrap<DIFile>(File) : nullptr, Line,
|
||||
unwrap<DISubroutineType>(CompositeType),
|
||||
IsLocalToUnit, IsDefinition, ScopeLine, Flags,
|
||||
IsOptimized, unwrap<Function>(Func)));
|
||||
IsOptimized));
|
||||
}
|
||||
|
||||
LLVMMetadataRef
|
||||
|
@ -55,7 +55,7 @@ LLVMMetadataRef LLVMDIBuilderCreateFunction(
|
||||
LLVMDIBuilderRef D, LLVMMetadataRef Scope, const char *Name,
|
||||
const char *LinkageName, LLVMMetadataRef File, unsigned Line,
|
||||
LLVMMetadataRef CompositeType, int IsLocalToUnit, int IsDefinition,
|
||||
unsigned ScopeLine, unsigned Flags, int IsOptimized, LLVMValueRef Function);
|
||||
unsigned ScopeLine, unsigned Flags, int IsOptimized);
|
||||
|
||||
LLVMMetadataRef
|
||||
LLVMDIBuilderCreateAutoVariable(LLVMDIBuilderRef D, LLVMMetadataRef Scope,
|
||||
|
@ -98,3 +98,7 @@ void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Bref, unsigned Line,
|
||||
DebugLoc::get(Line, Col, Scope ? unwrap<MDNode>(Scope) : nullptr,
|
||||
InlinedAt ? unwrap<MDNode>(InlinedAt) : nullptr));
|
||||
}
|
||||
|
||||
void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP) {
|
||||
unwrap<Function>(Func)->setSubprogram(unwrap<DISubprogram>(SP));
|
||||
}
|
||||
|
@ -55,6 +55,8 @@ void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Bref, unsigned Line,
|
||||
unsigned Col, LLVMMetadataRef Scope,
|
||||
LLVMMetadataRef InlinedAt);
|
||||
|
||||
void LLVMSetSubprogram(LLVMValueRef Fn, LLVMMetadataRef SP);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
|
@ -189,7 +189,6 @@ type DIFunction struct {
|
||||
ScopeLine int
|
||||
Flags int
|
||||
Optimized bool
|
||||
Function Value
|
||||
}
|
||||
|
||||
// CreateCompileUnit creates function debug metadata.
|
||||
@ -211,7 +210,6 @@ func (d *DIBuilder) CreateFunction(diScope Metadata, f DIFunction) Metadata {
|
||||
C.unsigned(f.ScopeLine),
|
||||
C.unsigned(f.Flags),
|
||||
boolToCInt(f.Optimized),
|
||||
f.Function.C,
|
||||
)
|
||||
return Metadata{C: result}
|
||||
}
|
||||
|
@ -1057,6 +1057,9 @@ func (v Value) AddTargetDependentFunctionAttr(attr, value string) {
|
||||
func (v Value) SetPersonality(p Value) {
|
||||
C.LLVMSetPersonalityFn(v.C, p.C)
|
||||
}
|
||||
func (v Value) SetSubprogram(sp Metadata) {
|
||||
C.LLVMSetSubprogram(v.C, sp.C)
|
||||
}
|
||||
|
||||
// Operations on parameters
|
||||
func (v Value) ParamsCount() int { return int(C.LLVMCountParams(v.C)) }
|
||||
|
@ -515,14 +515,15 @@ namespace llvm {
|
||||
/// These flags are used to emit dwarf attributes.
|
||||
/// \param isOptimized True if optimization is ON.
|
||||
/// \param Fn llvm::Function pointer.
|
||||
/// \param TParam Function template parameters.
|
||||
DISubprogram *
|
||||
createFunction(DIScope *Scope, StringRef Name, StringRef LinkageName,
|
||||
DIFile *File, unsigned LineNo, DISubroutineType *Ty,
|
||||
bool isLocalToUnit, bool isDefinition, unsigned ScopeLine,
|
||||
unsigned Flags = 0, bool isOptimized = false,
|
||||
Function *Fn = nullptr, MDNode *TParam = nullptr,
|
||||
MDNode *Decl = nullptr);
|
||||
/// \param TParams Function template parameters.
|
||||
DISubprogram *createFunction(DIScope *Scope, StringRef Name,
|
||||
StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DISubroutineType *Ty,
|
||||
bool isLocalToUnit, bool isDefinition,
|
||||
unsigned ScopeLine, unsigned Flags = 0,
|
||||
bool isOptimized = false,
|
||||
DITemplateParameterArray TParams = nullptr,
|
||||
DISubprogram *Decl = nullptr);
|
||||
|
||||
/// Identical to createFunction,
|
||||
/// except that the resulting DbgNode is meant to be RAUWed.
|
||||
@ -530,18 +531,19 @@ namespace llvm {
|
||||
DIScope *Scope, StringRef Name, StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DISubroutineType *Ty, bool isLocalToUnit,
|
||||
bool isDefinition, unsigned ScopeLine, unsigned Flags = 0,
|
||||
bool isOptimized = false, Function *Fn = nullptr,
|
||||
MDNode *TParam = nullptr, MDNode *Decl = nullptr);
|
||||
bool isOptimized = false, DITemplateParameterArray TParams = nullptr,
|
||||
DISubprogram *Decl = nullptr);
|
||||
|
||||
/// FIXME: this is added for dragonegg. Once we update dragonegg
|
||||
/// to call resolve function, this will be removed.
|
||||
DISubprogram *
|
||||
createFunction(DIScopeRef Scope, StringRef Name, StringRef LinkageName,
|
||||
DIFile *File, unsigned LineNo, DISubroutineType *Ty,
|
||||
bool isLocalToUnit, bool isDefinition, unsigned ScopeLine,
|
||||
unsigned Flags = 0, bool isOptimized = false,
|
||||
Function *Fn = nullptr, MDNode *TParam = nullptr,
|
||||
MDNode *Decl = nullptr);
|
||||
DISubprogram *createFunction(DIScopeRef Scope, StringRef Name,
|
||||
StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DISubroutineType *Ty,
|
||||
bool isLocalToUnit, bool isDefinition,
|
||||
unsigned ScopeLine, unsigned Flags = 0,
|
||||
bool isOptimized = false,
|
||||
DITemplateParameterArray TParams = nullptr,
|
||||
DISubprogram *Decl = nullptr);
|
||||
|
||||
/// Create a new descriptor for the specified C++ method.
|
||||
/// See comments in \a DISubprogram* for descriptions of these fields.
|
||||
@ -561,14 +563,14 @@ namespace llvm {
|
||||
/// This flags are used to emit dwarf attributes.
|
||||
/// \param isOptimized True if optimization is ON.
|
||||
/// \param Fn llvm::Function pointer.
|
||||
/// \param TParam Function template parameters.
|
||||
/// \param TParams Function template parameters.
|
||||
DISubprogram *
|
||||
createMethod(DIScope *Scope, StringRef Name, StringRef LinkageName,
|
||||
DIFile *File, unsigned LineNo, DISubroutineType *Ty,
|
||||
bool isLocalToUnit, bool isDefinition, unsigned Virtuality = 0,
|
||||
unsigned VTableIndex = 0, DIType *VTableHolder = nullptr,
|
||||
unsigned Flags = 0, bool isOptimized = false,
|
||||
Function *Fn = nullptr, MDNode *TParam = nullptr);
|
||||
DITemplateParameterArray TParams = nullptr);
|
||||
|
||||
/// This creates new descriptor for a namespace with the specified
|
||||
/// parent scope.
|
||||
|
@ -143,8 +143,6 @@ private:
|
||||
bool TypeMapInitialized;
|
||||
};
|
||||
|
||||
DenseMap<const Function *, DISubprogram *> makeSubprogramMap(const Module &M);
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
#endif
|
||||
|
@ -1237,14 +1237,13 @@ class DISubprogram : public DILocalScope {
|
||||
DISubroutineType *Type, bool IsLocalToUnit, bool IsDefinition,
|
||||
unsigned ScopeLine, DITypeRef ContainingType, unsigned Virtuality,
|
||||
unsigned VirtualIndex, unsigned Flags, bool IsOptimized,
|
||||
Constant *Function, DITemplateParameterArray TemplateParams,
|
||||
DISubprogram *Declaration, DILocalVariableArray Variables,
|
||||
StorageType Storage, bool ShouldCreate = true) {
|
||||
DITemplateParameterArray TemplateParams, DISubprogram *Declaration,
|
||||
DILocalVariableArray Variables, StorageType Storage,
|
||||
bool ShouldCreate = true) {
|
||||
return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
|
||||
getCanonicalMDString(Context, LinkageName), File, Line, Type,
|
||||
IsLocalToUnit, IsDefinition, ScopeLine, ContainingType,
|
||||
Virtuality, VirtualIndex, Flags, IsOptimized,
|
||||
Function ? ConstantAsMetadata::get(Function) : nullptr,
|
||||
TemplateParams.get(), Declaration, Variables.get(), Storage,
|
||||
ShouldCreate);
|
||||
}
|
||||
@ -1253,17 +1252,16 @@ class DISubprogram : public DILocalScope {
|
||||
MDString *LinkageName, Metadata *File, unsigned Line, Metadata *Type,
|
||||
bool IsLocalToUnit, bool IsDefinition, unsigned ScopeLine,
|
||||
Metadata *ContainingType, unsigned Virtuality, unsigned VirtualIndex,
|
||||
unsigned Flags, bool IsOptimized, Metadata *Function,
|
||||
Metadata *TemplateParams, Metadata *Declaration, Metadata *Variables,
|
||||
StorageType Storage, bool ShouldCreate = true);
|
||||
unsigned Flags, bool IsOptimized, Metadata *TemplateParams,
|
||||
Metadata *Declaration, Metadata *Variables, StorageType Storage,
|
||||
bool ShouldCreate = true);
|
||||
|
||||
TempDISubprogram cloneImpl() const {
|
||||
return getTemporary(getContext(), getScope(), getName(), getLinkageName(),
|
||||
getFile(), getLine(), getType(), isLocalToUnit(),
|
||||
isDefinition(), getScopeLine(), getContainingType(),
|
||||
getVirtuality(), getVirtualIndex(), getFlags(),
|
||||
isOptimized(), getFunctionConstant(),
|
||||
getTemplateParams(), getDeclaration(), getVariables());
|
||||
return getTemporary(
|
||||
getContext(), getScope(), getName(), getLinkageName(), getFile(),
|
||||
getLine(), getType(), isLocalToUnit(), isDefinition(), getScopeLine(),
|
||||
getContainingType(), getVirtuality(), getVirtualIndex(), getFlags(),
|
||||
isOptimized(), getTemplateParams(), getDeclaration(), getVariables());
|
||||
}
|
||||
|
||||
public:
|
||||
@ -1273,13 +1271,12 @@ public:
|
||||
bool IsLocalToUnit, bool IsDefinition, unsigned ScopeLine,
|
||||
DITypeRef ContainingType, unsigned Virtuality,
|
||||
unsigned VirtualIndex, unsigned Flags, bool IsOptimized,
|
||||
Constant *Function = nullptr,
|
||||
DITemplateParameterArray TemplateParams = nullptr,
|
||||
DISubprogram *Declaration = nullptr,
|
||||
DILocalVariableArray Variables = nullptr),
|
||||
(Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
|
||||
IsDefinition, ScopeLine, ContainingType, Virtuality,
|
||||
VirtualIndex, Flags, IsOptimized, Function, TemplateParams,
|
||||
VirtualIndex, Flags, IsOptimized, TemplateParams,
|
||||
Declaration, Variables))
|
||||
DEFINE_MDNODE_GET(
|
||||
DISubprogram,
|
||||
@ -1287,11 +1284,11 @@ public:
|
||||
unsigned Line, Metadata *Type, bool IsLocalToUnit, bool IsDefinition,
|
||||
unsigned ScopeLine, Metadata *ContainingType, unsigned Virtuality,
|
||||
unsigned VirtualIndex, unsigned Flags, bool IsOptimized,
|
||||
Metadata *Function = nullptr, Metadata *TemplateParams = nullptr,
|
||||
Metadata *Declaration = nullptr, Metadata *Variables = nullptr),
|
||||
Metadata *TemplateParams = nullptr, Metadata *Declaration = nullptr,
|
||||
Metadata *Variables = nullptr),
|
||||
(Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition,
|
||||
ScopeLine, ContainingType, Virtuality, VirtualIndex, Flags, IsOptimized,
|
||||
Function, TemplateParams, Declaration, Variables))
|
||||
TemplateParams, Declaration, Variables))
|
||||
|
||||
TempDISubprogram clone() const { return cloneImpl(); }
|
||||
|
||||
@ -1350,11 +1347,6 @@ public:
|
||||
return DITypeRef(getRawContainingType());
|
||||
}
|
||||
|
||||
Constant *getFunctionConstant() const {
|
||||
if (auto *C = cast_or_null<ConstantAsMetadata>(getRawFunction()))
|
||||
return C->getValue();
|
||||
return nullptr;
|
||||
}
|
||||
DITemplateParameterArray getTemplateParams() const {
|
||||
return cast_or_null<MDTuple>(getRawTemplateParams());
|
||||
}
|
||||
@ -1368,28 +1360,9 @@ public:
|
||||
Metadata *getRawScope() const { return getOperand(1); }
|
||||
Metadata *getRawType() const { return getOperand(5); }
|
||||
Metadata *getRawContainingType() const { return getOperand(6); }
|
||||
Metadata *getRawFunction() const { return getOperand(7); }
|
||||
Metadata *getRawTemplateParams() const { return getOperand(8); }
|
||||
Metadata *getRawDeclaration() const { return getOperand(9); }
|
||||
Metadata *getRawVariables() const { return getOperand(10); }
|
||||
|
||||
/// \brief Get a pointer to the function this subprogram describes.
|
||||
///
|
||||
/// This dyn_casts \a getFunctionConstant() to \a Function.
|
||||
///
|
||||
/// FIXME: Should this be looking through bitcasts?
|
||||
Function *getFunction() const;
|
||||
|
||||
/// \brief Replace the function.
|
||||
///
|
||||
/// If \a isUniqued() and not \a isResolved(), this could node will be
|
||||
/// RAUW'ed and deleted out from under the caller. Use a \a TrackingMDRef if
|
||||
/// that's a problem.
|
||||
/// @{
|
||||
void replaceFunction(Function *F);
|
||||
void replaceFunction(ConstantAsMetadata *MD) { replaceOperandWith(7, MD); }
|
||||
void replaceFunction(std::nullptr_t) { replaceOperandWith(7, nullptr); }
|
||||
/// @}
|
||||
Metadata *getRawTemplateParams() const { return getOperand(7); }
|
||||
Metadata *getRawDeclaration() const { return getOperand(8); }
|
||||
Metadata *getRawVariables() const { return getOperand(9); }
|
||||
|
||||
/// \brief Check if this subprogram describes the given function.
|
||||
///
|
||||
|
@ -3807,8 +3807,8 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) {
|
||||
/// isDefinition: true, scopeLine: 8, containingType: !3,
|
||||
/// virtuality: DW_VIRTUALTIY_pure_virtual,
|
||||
/// virtualIndex: 10, flags: 11,
|
||||
/// isOptimized: false, function: void ()* @_Z3foov,
|
||||
/// templateParams: !4, declaration: !5, variables: !6)
|
||||
/// isOptimized: false, templateParams: !4, declaration: !5,
|
||||
/// variables: !6)
|
||||
bool LLParser::ParseDISubprogram(MDNode *&Result, bool IsDistinct) {
|
||||
auto Loc = Lex.getLoc();
|
||||
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
|
||||
@ -3826,7 +3826,6 @@ bool LLParser::ParseDISubprogram(MDNode *&Result, bool IsDistinct) {
|
||||
OPTIONAL(virtualIndex, MDUnsignedField, (0, UINT32_MAX)); \
|
||||
OPTIONAL(flags, DIFlagField, ); \
|
||||
OPTIONAL(isOptimized, MDBoolField, ); \
|
||||
OPTIONAL(function, MDConstant, ); \
|
||||
OPTIONAL(templateParams, MDField, ); \
|
||||
OPTIONAL(declaration, MDField, ); \
|
||||
OPTIONAL(variables, MDField, );
|
||||
@ -3839,11 +3838,11 @@ bool LLParser::ParseDISubprogram(MDNode *&Result, bool IsDistinct) {
|
||||
"missing 'distinct', required for !DISubprogram when 'isDefinition'");
|
||||
|
||||
Result = GET_OR_DISTINCT(
|
||||
DISubprogram, (Context, scope.Val, name.Val, linkageName.Val, file.Val,
|
||||
line.Val, type.Val, isLocal.Val, isDefinition.Val,
|
||||
scopeLine.Val, containingType.Val, virtuality.Val,
|
||||
virtualIndex.Val, flags.Val, isOptimized.Val, function.Val,
|
||||
templateParams.Val, declaration.Val, variables.Val));
|
||||
DISubprogram,
|
||||
(Context, scope.Val, name.Val, linkageName.Val, file.Val, line.Val,
|
||||
type.Val, isLocal.Val, isDefinition.Val, scopeLine.Val,
|
||||
containingType.Val, virtuality.Val, virtualIndex.Val, flags.Val,
|
||||
isOptimized.Val, templateParams.Val, declaration.Val, variables.Val));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -232,6 +232,10 @@ class BitcodeReader : public GVMaterializer {
|
||||
|
||||
bool StripDebugInfo = false;
|
||||
|
||||
/// Functions that need to be matched with subprograms when upgrading old
|
||||
/// metadata.
|
||||
SmallDenseMap<Function *, DISubprogram *, 16> FunctionsWithSPs;
|
||||
|
||||
std::vector<std::string> BundleTags;
|
||||
|
||||
public:
|
||||
@ -2182,20 +2186,33 @@ std::error_code BitcodeReader::parseMetadata() {
|
||||
break;
|
||||
}
|
||||
case bitc::METADATA_SUBPROGRAM: {
|
||||
if (Record.size() != 19)
|
||||
if (Record.size() != 18 && Record.size() != 19)
|
||||
return error("Invalid record");
|
||||
|
||||
MDValueList.assignValue(
|
||||
GET_OR_DISTINCT(
|
||||
DISubprogram,
|
||||
Record[0] || Record[8], // All definitions should be distinct.
|
||||
(Context, getMDOrNull(Record[1]), getMDString(Record[2]),
|
||||
getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
|
||||
getMDOrNull(Record[6]), Record[7], Record[8], Record[9],
|
||||
getMDOrNull(Record[10]), Record[11], Record[12], Record[13],
|
||||
Record[14], getMDOrNull(Record[15]), getMDOrNull(Record[16]),
|
||||
getMDOrNull(Record[17]), getMDOrNull(Record[18]))),
|
||||
NextMDValueNo++);
|
||||
bool HasFn = Record.size() == 19;
|
||||
DISubprogram *SP = GET_OR_DISTINCT(
|
||||
DISubprogram,
|
||||
Record[0] || Record[8], // All definitions should be distinct.
|
||||
(Context, getMDOrNull(Record[1]), getMDString(Record[2]),
|
||||
getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
|
||||
getMDOrNull(Record[6]), Record[7], Record[8], Record[9],
|
||||
getMDOrNull(Record[10]), Record[11], Record[12], Record[13],
|
||||
Record[14], getMDOrNull(Record[15 + HasFn]),
|
||||
getMDOrNull(Record[16 + HasFn]), getMDOrNull(Record[17 + HasFn])));
|
||||
MDValueList.assignValue(SP, NextMDValueNo++);
|
||||
|
||||
// Upgrade sp->function mapping to function->sp mapping.
|
||||
if (HasFn && Record[15]) {
|
||||
if (auto *CMD = dyn_cast<ConstantAsMetadata>(getMDOrNull(Record[15])))
|
||||
if (auto *F = dyn_cast<Function>(CMD->getValue())) {
|
||||
if (F->isMaterializable())
|
||||
// Defer until materialized; unmaterialized functions may not have
|
||||
// metadata.
|
||||
FunctionsWithSPs[F] = SP;
|
||||
else if (!F->empty())
|
||||
F->setSubprogram(SP);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case bitc::METADATA_LEXICAL_BLOCK: {
|
||||
@ -5139,6 +5156,10 @@ std::error_code BitcodeReader::materialize(GlobalValue *GV) {
|
||||
}
|
||||
}
|
||||
|
||||
// Finish fn->subprogram upgrade for materialized functions.
|
||||
if (DISubprogram *SP = FunctionsWithSPs.lookup(F))
|
||||
F->setSubprogram(SP);
|
||||
|
||||
// Bring in any functions that this function forward-referenced via
|
||||
// blockaddresses.
|
||||
return materializeForwardReferencedFunctions();
|
||||
|
@ -1024,7 +1024,6 @@ static void WriteDISubprogram(const DISubprogram *N, const ValueEnumerator &VE,
|
||||
Record.push_back(N->getVirtualIndex());
|
||||
Record.push_back(N->getFlags());
|
||||
Record.push_back(N->isOptimized());
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawFunction()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getTemplateParams().get()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getDeclaration()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getVariables().get()));
|
||||
|
@ -476,8 +476,6 @@ void DwarfDebug::beginModule() {
|
||||
|
||||
const Module *M = MMI->getModule();
|
||||
|
||||
FunctionDIs = makeSubprogramMap(*M);
|
||||
|
||||
NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
|
||||
if (!CU_Nodes)
|
||||
return;
|
||||
@ -1113,8 +1111,8 @@ void DwarfDebug::beginFunction(const MachineFunction *MF) {
|
||||
if (!MMI->hasDebugInfo())
|
||||
return;
|
||||
|
||||
auto DI = FunctionDIs.find(MF->getFunction());
|
||||
if (DI == FunctionDIs.end())
|
||||
auto DI = MF->getFunction()->getSubprogram();
|
||||
if (!DI)
|
||||
return;
|
||||
|
||||
// Grab the lexical scopes for the function, if we don't have any of those
|
||||
@ -1205,7 +1203,7 @@ void DwarfDebug::endFunction(const MachineFunction *MF) {
|
||||
"endFunction should be called with the same function as beginFunction");
|
||||
|
||||
if (!MMI->hasDebugInfo() || LScopes.empty() ||
|
||||
!FunctionDIs.count(MF->getFunction())) {
|
||||
!MF->getFunction()->getSubprogram()) {
|
||||
// If we don't have a lexical scope for this function then there will
|
||||
// be a hole in the range information. Keep note of this by setting the
|
||||
// previously used section to nullptr.
|
||||
|
@ -761,7 +761,7 @@ static void removeDebugValues(MachineFunction &mf) {
|
||||
bool LiveDebugVariables::runOnMachineFunction(MachineFunction &mf) {
|
||||
if (!EnableLDV)
|
||||
return false;
|
||||
if (!FunctionDIs.count(mf.getFunction())) {
|
||||
if (!mf.getFunction()->getSubprogram()) {
|
||||
removeDebugValues(mf);
|
||||
return false;
|
||||
}
|
||||
@ -1045,7 +1045,6 @@ void LiveDebugVariables::emitDebugValues(VirtRegMap *VRM) {
|
||||
}
|
||||
|
||||
bool LiveDebugVariables::doInitialization(Module &M) {
|
||||
FunctionDIs = makeSubprogramMap(M);
|
||||
return Pass::doInitialization(M);
|
||||
}
|
||||
|
||||
|
@ -1692,7 +1692,6 @@ static void writeDISubprogram(raw_ostream &Out, const DISubprogram *N,
|
||||
Printer.printInt("virtualIndex", N->getVirtualIndex());
|
||||
Printer.printDIFlags("flags", N->getFlags());
|
||||
Printer.printBool("isOptimized", N->isOptimized());
|
||||
Printer.printMetadata("function", N->getRawFunction());
|
||||
Printer.printMetadata("templateParams", N->getRawTemplateParams());
|
||||
Printer.printMetadata("declaration", N->getRawDeclaration());
|
||||
Printer.printMetadata("variables", N->getRawVariables());
|
||||
|
@ -659,19 +659,17 @@ DIExpression *DIBuilder::createBitPieceExpression(unsigned OffsetInBytes,
|
||||
return DIExpression::get(VMContext, Addr);
|
||||
}
|
||||
|
||||
DISubprogram *DIBuilder::createFunction(DIScopeRef Context, StringRef Name,
|
||||
StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DISubroutineType *Ty,
|
||||
bool isLocalToUnit, bool isDefinition,
|
||||
unsigned ScopeLine, unsigned Flags,
|
||||
bool isOptimized, Function *Fn,
|
||||
MDNode *TParams, MDNode *Decl) {
|
||||
DISubprogram *DIBuilder::createFunction(
|
||||
DIScopeRef Context, StringRef Name, StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DISubroutineType *Ty, bool isLocalToUnit,
|
||||
bool isDefinition, unsigned ScopeLine, unsigned Flags, bool isOptimized,
|
||||
DITemplateParameterArray TParams, DISubprogram *Decl) {
|
||||
// dragonegg does not generate identifier for types, so using an empty map
|
||||
// to resolve the context should be fine.
|
||||
DITypeIdentifierMap EmptyMap;
|
||||
return createFunction(Context.resolve(EmptyMap), Name, LinkageName, File,
|
||||
LineNo, Ty, isLocalToUnit, isDefinition, ScopeLine,
|
||||
Flags, isOptimized, Fn, TParams, Decl);
|
||||
Flags, isOptimized, TParams, Decl);
|
||||
}
|
||||
|
||||
template <class... Ts>
|
||||
@ -681,20 +679,17 @@ static DISubprogram *getSubprogram(bool IsDistinct, Ts &&... Args) {
|
||||
return DISubprogram::get(std::forward<Ts>(Args)...);
|
||||
}
|
||||
|
||||
DISubprogram *DIBuilder::createFunction(DIScope *Context, StringRef Name,
|
||||
StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DISubroutineType *Ty,
|
||||
bool isLocalToUnit, bool isDefinition,
|
||||
unsigned ScopeLine, unsigned Flags,
|
||||
bool isOptimized, Function *Fn,
|
||||
MDNode *TParams, MDNode *Decl) {
|
||||
auto *Node = getSubprogram(/* IsDistinct = */ isDefinition, VMContext,
|
||||
DIScopeRef::get(getNonCompileUnitScope(Context)),
|
||||
Name, LinkageName, File, LineNo, Ty, isLocalToUnit,
|
||||
isDefinition, ScopeLine, nullptr, 0, 0, Flags,
|
||||
isOptimized, Fn, cast_or_null<MDTuple>(TParams),
|
||||
cast_or_null<DISubprogram>(Decl),
|
||||
MDTuple::getTemporary(VMContext, None).release());
|
||||
DISubprogram *DIBuilder::createFunction(
|
||||
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DISubroutineType *Ty, bool isLocalToUnit,
|
||||
bool isDefinition, unsigned ScopeLine, unsigned Flags, bool isOptimized,
|
||||
DITemplateParameterArray TParams, DISubprogram *Decl) {
|
||||
auto *Node =
|
||||
getSubprogram(/* IsDistinct = */ isDefinition, VMContext,
|
||||
DIScopeRef::get(getNonCompileUnitScope(Context)), Name,
|
||||
LinkageName, File, LineNo, Ty, isLocalToUnit, isDefinition,
|
||||
ScopeLine, nullptr, 0, 0, Flags, isOptimized, TParams, Decl,
|
||||
MDTuple::getTemporary(VMContext, None).release());
|
||||
|
||||
if (isDefinition)
|
||||
AllSubprograms.push_back(Node);
|
||||
@ -706,12 +701,11 @@ DISubprogram *DIBuilder::createTempFunctionFwdDecl(
|
||||
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DISubroutineType *Ty, bool isLocalToUnit,
|
||||
bool isDefinition, unsigned ScopeLine, unsigned Flags, bool isOptimized,
|
||||
Function *Fn, MDNode *TParams, MDNode *Decl) {
|
||||
DITemplateParameterArray TParams, DISubprogram *Decl) {
|
||||
return DISubprogram::getTemporary(
|
||||
VMContext, DIScopeRef::get(getNonCompileUnitScope(Context)), Name,
|
||||
LinkageName, File, LineNo, Ty, isLocalToUnit, isDefinition,
|
||||
ScopeLine, nullptr, 0, 0, Flags, isOptimized, Fn,
|
||||
cast_or_null<MDTuple>(TParams), cast_or_null<DISubprogram>(Decl),
|
||||
ScopeLine, nullptr, 0, 0, Flags, isOptimized, TParams, Decl,
|
||||
nullptr)
|
||||
.release();
|
||||
}
|
||||
@ -721,17 +715,16 @@ DIBuilder::createMethod(DIScope *Context, StringRef Name, StringRef LinkageName,
|
||||
DIFile *F, unsigned LineNo, DISubroutineType *Ty,
|
||||
bool isLocalToUnit, bool isDefinition, unsigned VK,
|
||||
unsigned VIndex, DIType *VTableHolder, unsigned Flags,
|
||||
bool isOptimized, Function *Fn, MDNode *TParam) {
|
||||
bool isOptimized, DITemplateParameterArray TParams) {
|
||||
assert(getNonCompileUnitScope(Context) &&
|
||||
"Methods should have both a Context and a context that isn't "
|
||||
"the compile unit.");
|
||||
// FIXME: Do we want to use different scope/lines?
|
||||
auto *SP = getSubprogram(/* IsDistinct = */ isDefinition, VMContext,
|
||||
DIScopeRef::get(cast<DIScope>(Context)), Name,
|
||||
LinkageName, F, LineNo, Ty, isLocalToUnit,
|
||||
isDefinition, LineNo, DITypeRef::get(VTableHolder),
|
||||
VK, VIndex, Flags, isOptimized, Fn,
|
||||
cast_or_null<MDTuple>(TParam), nullptr, nullptr);
|
||||
auto *SP = getSubprogram(
|
||||
/* IsDistinct = */ isDefinition, VMContext,
|
||||
DIScopeRef::get(cast<DIScope>(Context)), Name, LinkageName, F, LineNo, Ty,
|
||||
isLocalToUnit, isDefinition, LineNo, DITypeRef::get(VTableHolder), VK,
|
||||
VIndex, Flags, isOptimized, TParams, nullptr, nullptr);
|
||||
|
||||
if (isDefinition)
|
||||
AllSubprograms.push_back(SP);
|
||||
|
@ -300,6 +300,10 @@ bool DebugInfoFinder::addScope(DIScope *Scope) {
|
||||
|
||||
bool llvm::stripDebugInfo(Function &F) {
|
||||
bool Changed = false;
|
||||
if (F.getSubprogram()) {
|
||||
Changed = true;
|
||||
F.setSubprogram(nullptr);
|
||||
}
|
||||
for (BasicBlock &BB : F) {
|
||||
for (Instruction &I : BB) {
|
||||
if (I.getDebugLoc()) {
|
||||
@ -359,21 +363,3 @@ unsigned llvm::getDebugMetadataVersionFromModule(const Module &M) {
|
||||
return Val->getZExtValue();
|
||||
return 0;
|
||||
}
|
||||
|
||||
DenseMap<const llvm::Function *, DISubprogram *>
|
||||
llvm::makeSubprogramMap(const Module &M) {
|
||||
DenseMap<const Function *, DISubprogram *> R;
|
||||
|
||||
NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu");
|
||||
if (!CU_Nodes)
|
||||
return R;
|
||||
|
||||
for (MDNode *N : CU_Nodes->operands()) {
|
||||
auto *CUNode = cast<DICompileUnit>(N);
|
||||
for (auto *SP : CUNode->getSubprograms()) {
|
||||
if (Function *F = SP->getFunction())
|
||||
R.insert(std::make_pair(F, SP));
|
||||
}
|
||||
}
|
||||
return R;
|
||||
}
|
||||
|
@ -342,34 +342,28 @@ DISubprogram *DISubprogram::getImpl(
|
||||
MDString *LinkageName, Metadata *File, unsigned Line, Metadata *Type,
|
||||
bool IsLocalToUnit, bool IsDefinition, unsigned ScopeLine,
|
||||
Metadata *ContainingType, unsigned Virtuality, unsigned VirtualIndex,
|
||||
unsigned Flags, bool IsOptimized, Metadata *Function,
|
||||
Metadata *TemplateParams, Metadata *Declaration, Metadata *Variables,
|
||||
StorageType Storage, bool ShouldCreate) {
|
||||
unsigned Flags, bool IsOptimized, Metadata *TemplateParams,
|
||||
Metadata *Declaration, Metadata *Variables, StorageType Storage,
|
||||
bool ShouldCreate) {
|
||||
assert(isCanonical(Name) && "Expected canonical MDString");
|
||||
assert(isCanonical(LinkageName) && "Expected canonical MDString");
|
||||
DEFINE_GETIMPL_LOOKUP(DISubprogram,
|
||||
(Scope, getString(Name), getString(LinkageName), File,
|
||||
Line, Type, IsLocalToUnit, IsDefinition, ScopeLine,
|
||||
ContainingType, Virtuality, VirtualIndex, Flags,
|
||||
IsOptimized, Function, TemplateParams, Declaration,
|
||||
Variables));
|
||||
Metadata *Ops[] = {File, Scope, Name, Name,
|
||||
LinkageName, Type, ContainingType, Function,
|
||||
TemplateParams, Declaration, Variables};
|
||||
IsOptimized, TemplateParams, Declaration, Variables));
|
||||
Metadata *Ops[] = {File, Scope, Name, Name,
|
||||
LinkageName, Type, ContainingType, TemplateParams,
|
||||
Declaration, Variables};
|
||||
DEFINE_GETIMPL_STORE(DISubprogram,
|
||||
(Line, ScopeLine, Virtuality, VirtualIndex, Flags,
|
||||
IsLocalToUnit, IsDefinition, IsOptimized),
|
||||
Ops);
|
||||
}
|
||||
|
||||
Function *DISubprogram::getFunction() const {
|
||||
// FIXME: Should this be looking through bitcasts?
|
||||
return dyn_cast_or_null<Function>(getFunctionConstant());
|
||||
}
|
||||
|
||||
bool DISubprogram::describes(const Function *F) const {
|
||||
assert(F && "Invalid function");
|
||||
if (F == getFunction())
|
||||
if (F->getSubprogram() == this)
|
||||
return true;
|
||||
StringRef Name = getLinkageName();
|
||||
if (Name.empty())
|
||||
@ -377,11 +371,6 @@ bool DISubprogram::describes(const Function *F) const {
|
||||
return F->getName() == Name;
|
||||
}
|
||||
|
||||
void DISubprogram::replaceFunction(Function *F) {
|
||||
replaceFunction(F ? ConstantAsMetadata::get(F)
|
||||
: static_cast<ConstantAsMetadata *>(nullptr));
|
||||
}
|
||||
|
||||
DILexicalBlock *DILexicalBlock::getImpl(LLVMContext &Context, Metadata *Scope,
|
||||
Metadata *File, unsigned Line,
|
||||
unsigned Column, StorageType Storage,
|
||||
|
@ -473,7 +473,6 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
unsigned VirtualIndex;
|
||||
unsigned Flags;
|
||||
bool IsOptimized;
|
||||
Metadata *Function;
|
||||
Metadata *TemplateParams;
|
||||
Metadata *Declaration;
|
||||
Metadata *Variables;
|
||||
@ -483,15 +482,15 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
bool IsLocalToUnit, bool IsDefinition, unsigned ScopeLine,
|
||||
Metadata *ContainingType, unsigned Virtuality,
|
||||
unsigned VirtualIndex, unsigned Flags, bool IsOptimized,
|
||||
Metadata *Function, Metadata *TemplateParams,
|
||||
Metadata *Declaration, Metadata *Variables)
|
||||
Metadata *TemplateParams, Metadata *Declaration,
|
||||
Metadata *Variables)
|
||||
: Scope(Scope), Name(Name), LinkageName(LinkageName), File(File),
|
||||
Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit),
|
||||
IsDefinition(IsDefinition), ScopeLine(ScopeLine),
|
||||
ContainingType(ContainingType), Virtuality(Virtuality),
|
||||
VirtualIndex(VirtualIndex), Flags(Flags), IsOptimized(IsOptimized),
|
||||
Function(Function), TemplateParams(TemplateParams),
|
||||
Declaration(Declaration), Variables(Variables) {}
|
||||
TemplateParams(TemplateParams), Declaration(Declaration),
|
||||
Variables(Variables) {}
|
||||
MDNodeKeyImpl(const DISubprogram *N)
|
||||
: Scope(N->getRawScope()), Name(N->getName()),
|
||||
LinkageName(N->getLinkageName()), File(N->getRawFile()),
|
||||
@ -500,7 +499,6 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
ScopeLine(N->getScopeLine()), ContainingType(N->getRawContainingType()),
|
||||
Virtuality(N->getVirtuality()), VirtualIndex(N->getVirtualIndex()),
|
||||
Flags(N->getFlags()), IsOptimized(N->isOptimized()),
|
||||
Function(N->getRawFunction()),
|
||||
TemplateParams(N->getRawTemplateParams()),
|
||||
Declaration(N->getRawDeclaration()), Variables(N->getRawVariables()) {}
|
||||
|
||||
@ -515,7 +513,6 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
Virtuality == RHS->getVirtuality() &&
|
||||
VirtualIndex == RHS->getVirtualIndex() && Flags == RHS->getFlags() &&
|
||||
IsOptimized == RHS->isOptimized() &&
|
||||
Function == RHS->getRawFunction() &&
|
||||
TemplateParams == RHS->getRawTemplateParams() &&
|
||||
Declaration == RHS->getRawDeclaration() &&
|
||||
Variables == RHS->getRawVariables();
|
||||
@ -523,7 +520,7 @@ template <> struct MDNodeKeyImpl<DISubprogram> {
|
||||
unsigned getHashValue() const {
|
||||
return hash_combine(Scope, Name, LinkageName, File, Line, Type,
|
||||
IsLocalToUnit, IsDefinition, ScopeLine, ContainingType,
|
||||
Virtuality, VirtualIndex, Flags, IsOptimized, Function,
|
||||
Virtuality, VirtualIndex, Flags, IsOptimized,
|
||||
TemplateParams, Declaration, Variables);
|
||||
}
|
||||
};
|
||||
|
@ -937,13 +937,6 @@ void Verifier::visitDISubprogram(const DISubprogram &N) {
|
||||
Assert(isa<DISubroutineType>(T), "invalid subroutine type", &N, T);
|
||||
Assert(isTypeRef(N, N.getRawContainingType()), "invalid containing type", &N,
|
||||
N.getRawContainingType());
|
||||
if (auto *RawF = N.getRawFunction()) {
|
||||
auto *FMD = dyn_cast<ConstantAsMetadata>(RawF);
|
||||
auto *F = FMD ? FMD->getValue() : nullptr;
|
||||
auto *FT = F ? dyn_cast<PointerType>(F->getType()) : nullptr;
|
||||
Assert(F && FT && isa<FunctionType>(FT->getElementType()),
|
||||
"invalid function", &N, F, FT);
|
||||
}
|
||||
if (auto *Params = N.getRawTemplateParams())
|
||||
visitTemplateParams(N, *Params);
|
||||
if (auto *S = N.getRawDeclaration()) {
|
||||
@ -963,41 +956,6 @@ void Verifier::visitDISubprogram(const DISubprogram &N) {
|
||||
|
||||
if (N.isDefinition())
|
||||
Assert(N.isDistinct(), "subprogram definitions must be distinct", &N);
|
||||
|
||||
auto *F = N.getFunction();
|
||||
if (!F)
|
||||
return;
|
||||
|
||||
// Check that all !dbg attachments lead to back to N (or, at least, another
|
||||
// subprogram that describes the same function).
|
||||
//
|
||||
// FIXME: Check this incrementally while visiting !dbg attachments.
|
||||
// FIXME: Only check when N is the canonical subprogram for F.
|
||||
SmallPtrSet<const MDNode *, 32> Seen;
|
||||
for (auto &BB : *F)
|
||||
for (auto &I : BB) {
|
||||
// Be careful about using DILocation here since we might be dealing with
|
||||
// broken code (this is the Verifier after all).
|
||||
DILocation *DL =
|
||||
dyn_cast_or_null<DILocation>(I.getDebugLoc().getAsMDNode());
|
||||
if (!DL)
|
||||
continue;
|
||||
if (!Seen.insert(DL).second)
|
||||
continue;
|
||||
|
||||
DILocalScope *Scope = DL->getInlinedAtScope();
|
||||
if (Scope && !Seen.insert(Scope).second)
|
||||
continue;
|
||||
|
||||
DISubprogram *SP = Scope ? Scope->getSubprogram() : nullptr;
|
||||
if (SP && !Seen.insert(SP).second)
|
||||
continue;
|
||||
|
||||
// FIXME: Once N is canonical, check "SP == &N".
|
||||
Assert(SP->describes(F),
|
||||
"!dbg attachment points at wrong subprogram for function", &N, F,
|
||||
&I, DL, Scope, SP);
|
||||
}
|
||||
}
|
||||
|
||||
void Verifier::visitDILexicalBlockBase(const DILexicalBlockBase &N) {
|
||||
@ -1812,6 +1770,41 @@ void Verifier::visitFunction(const Function &F) {
|
||||
(F.isDeclaration() && F.hasExternalLinkage()) ||
|
||||
F.hasAvailableExternallyLinkage(),
|
||||
"Function is marked as dllimport, but not external.", &F);
|
||||
|
||||
auto *N = F.getSubprogram();
|
||||
if (!N)
|
||||
return;
|
||||
|
||||
// Check that all !dbg attachments lead to back to N (or, at least, another
|
||||
// subprogram that describes the same function).
|
||||
//
|
||||
// FIXME: Check this incrementally while visiting !dbg attachments.
|
||||
// FIXME: Only check when N is the canonical subprogram for F.
|
||||
SmallPtrSet<const MDNode *, 32> Seen;
|
||||
for (auto &BB : F)
|
||||
for (auto &I : BB) {
|
||||
// Be careful about using DILocation here since we might be dealing with
|
||||
// broken code (this is the Verifier after all).
|
||||
DILocation *DL =
|
||||
dyn_cast_or_null<DILocation>(I.getDebugLoc().getAsMDNode());
|
||||
if (!DL)
|
||||
continue;
|
||||
if (!Seen.insert(DL).second)
|
||||
continue;
|
||||
|
||||
DILocalScope *Scope = DL->getInlinedAtScope();
|
||||
if (Scope && !Seen.insert(Scope).second)
|
||||
continue;
|
||||
|
||||
DISubprogram *SP = Scope ? Scope->getSubprogram() : nullptr;
|
||||
if (SP && !Seen.insert(SP).second)
|
||||
continue;
|
||||
|
||||
// FIXME: Once N is canonical, check "SP == &N".
|
||||
Assert(SP->describes(&F),
|
||||
"!dbg attachment points at wrong subprogram for function", N, &F,
|
||||
&I, DL, Scope, SP);
|
||||
}
|
||||
}
|
||||
|
||||
// verifyBasicBlock - Verify that a basic block is well formed...
|
||||
|
@ -421,9 +421,6 @@ class ModuleLinker {
|
||||
// Vector of GlobalValues to lazily link in.
|
||||
std::vector<GlobalValue *> LazilyLinkGlobalValues;
|
||||
|
||||
/// Functions that have replaced other functions.
|
||||
SmallPtrSet<const Function *, 16> OverridingFunctions;
|
||||
|
||||
DiagnosticHandlerFunction DiagnosticHandler;
|
||||
|
||||
/// For symbol clashes, prefer those from Src.
|
||||
@ -581,7 +578,6 @@ private:
|
||||
const GlobalValue *DGV = nullptr);
|
||||
|
||||
void linkNamedMDNodes();
|
||||
void stripReplacedSubprograms();
|
||||
};
|
||||
}
|
||||
|
||||
@ -1416,10 +1412,6 @@ bool ModuleLinker::linkGlobalValueProto(GlobalValue *SGV) {
|
||||
}
|
||||
|
||||
NewGV = copyGlobalValueProto(TypeMap, SGV, DGV);
|
||||
|
||||
if (DGV && isa<Function>(DGV))
|
||||
if (auto *NewF = dyn_cast<Function>(NewGV))
|
||||
OverridingFunctions.insert(NewF);
|
||||
}
|
||||
|
||||
NewGV->setUnnamedAddr(HasUnnamedAddr);
|
||||
@ -1603,41 +1595,6 @@ void ModuleLinker::linkNamedMDNodes() {
|
||||
}
|
||||
}
|
||||
|
||||
/// Drop DISubprograms that have been superseded.
|
||||
///
|
||||
/// FIXME: this creates an asymmetric result: we strip functions from losing
|
||||
/// subprograms in DstM, but leave losing subprograms in SrcM.
|
||||
/// TODO: Remove this logic once the backend can correctly determine canonical
|
||||
/// subprograms.
|
||||
void ModuleLinker::stripReplacedSubprograms() {
|
||||
// Avoid quadratic runtime by returning early when there's nothing to do.
|
||||
if (OverridingFunctions.empty())
|
||||
return;
|
||||
|
||||
// Move the functions now, so the set gets cleared even on early returns.
|
||||
auto Functions = std::move(OverridingFunctions);
|
||||
OverridingFunctions.clear();
|
||||
|
||||
// Drop functions from subprograms if they've been overridden by the new
|
||||
// compile unit.
|
||||
NamedMDNode *CompileUnits = DstM->getNamedMetadata("llvm.dbg.cu");
|
||||
if (!CompileUnits)
|
||||
return;
|
||||
for (unsigned I = 0, E = CompileUnits->getNumOperands(); I != E; ++I) {
|
||||
auto *CU = cast<DICompileUnit>(CompileUnits->getOperand(I));
|
||||
assert(CU && "Expected valid compile unit");
|
||||
|
||||
for (DISubprogram *SP : CU->getSubprograms()) {
|
||||
if (!SP || !SP->getFunction() || !Functions.count(SP->getFunction()))
|
||||
continue;
|
||||
|
||||
// Prevent DebugInfoFinder from tagging this as the canonical subprogram,
|
||||
// since the canonical one is in the incoming module.
|
||||
SP->replaceFunction(nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Merge the linker flags in Src into the Dest module.
|
||||
bool ModuleLinker::linkModuleFlagsMetadata() {
|
||||
// If the source module has no module flags, we are done.
|
||||
@ -1909,13 +1866,6 @@ bool ModuleLinker::run() {
|
||||
MapValue(GV, ValueMap, RF_MoveDistinctMDs, &TypeMap, &ValMaterializer);
|
||||
}
|
||||
|
||||
// Strip replaced subprograms before mapping any metadata -- so that we're
|
||||
// not changing metadata from the source module (note that
|
||||
// linkGlobalValueBody() eventually calls RemapInstruction() and therefore
|
||||
// MapMetadata()) -- but after linking global value protocols -- so that
|
||||
// OverridingFunctions has been built.
|
||||
stripReplacedSubprograms();
|
||||
|
||||
// Link in the function bodies that are defined in the source module into
|
||||
// DstM.
|
||||
for (Function &SF : *SrcM) {
|
||||
|
@ -95,7 +95,6 @@ namespace {
|
||||
bool doInitialization(CallGraph &CG) override;
|
||||
/// The maximum number of elements to expand, or 0 for unlimited.
|
||||
unsigned maxElements;
|
||||
DenseMap<const Function *, DISubprogram *> FunctionDIs;
|
||||
};
|
||||
}
|
||||
|
||||
@ -732,15 +731,8 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
NF->copyAttributesFrom(F);
|
||||
|
||||
// Patch the pointer to LLVM function in debug info descriptor.
|
||||
auto DI = FunctionDIs.find(F);
|
||||
if (DI != FunctionDIs.end()) {
|
||||
DISubprogram *SP = DI->second;
|
||||
SP->replaceFunction(NF);
|
||||
// Ensure the map is updated so it can be reused on subsequent argument
|
||||
// promotions of the same function.
|
||||
FunctionDIs.erase(DI);
|
||||
FunctionDIs[NF] = SP;
|
||||
}
|
||||
NF->setSubprogram(F->getSubprogram());
|
||||
F->setSubprogram(nullptr);
|
||||
|
||||
DEBUG(dbgs() << "ARG PROMOTION: Promoting to:" << *NF << "\n"
|
||||
<< "From: " << *F);
|
||||
@ -1023,6 +1015,5 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
}
|
||||
|
||||
bool ArgPromotion::doInitialization(CallGraph &CG) {
|
||||
FunctionDIs = makeSubprogramMap(CG.getModule());
|
||||
return CallGraphSCCPass::doInitialization(CG);
|
||||
}
|
||||
|
@ -122,14 +122,6 @@ namespace {
|
||||
|
||||
typedef SmallVector<RetOrArg, 5> UseVector;
|
||||
|
||||
// Map each LLVM function to corresponding metadata with debug info. If
|
||||
// the function is replaced with another one, we should patch the pointer
|
||||
// to LLVM function in metadata.
|
||||
// As the code generation for module is finished (and DIBuilder is
|
||||
// finalized) we assume that subprogram descriptors won't be changed, and
|
||||
// they are stored in map for short duration anyway.
|
||||
DenseMap<const Function *, DISubprogram *> FunctionDIs;
|
||||
|
||||
protected:
|
||||
// DAH uses this to specify a different ID.
|
||||
explicit DAE(char &ID) : ModulePass(ID) {}
|
||||
@ -309,15 +301,7 @@ bool DAE::DeleteDeadVarargs(Function &Fn) {
|
||||
}
|
||||
|
||||
// Patch the pointer to LLVM function in debug info descriptor.
|
||||
auto DI = FunctionDIs.find(&Fn);
|
||||
if (DI != FunctionDIs.end()) {
|
||||
DISubprogram *SP = DI->second;
|
||||
SP->replaceFunction(NF);
|
||||
// Ensure the map is updated so it can be reused on non-varargs argument
|
||||
// eliminations of the same function.
|
||||
FunctionDIs.erase(DI);
|
||||
FunctionDIs[NF] = SP;
|
||||
}
|
||||
NF->setSubprogram(Fn.getSubprogram());
|
||||
|
||||
// Fix up any BlockAddresses that refer to the function.
|
||||
Fn.replaceAllUsesWith(ConstantExpr::getBitCast(NF, Fn.getType()));
|
||||
@ -1097,9 +1081,7 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
|
||||
}
|
||||
|
||||
// Patch the pointer to LLVM function in debug info descriptor.
|
||||
auto DI = FunctionDIs.find(F);
|
||||
if (DI != FunctionDIs.end())
|
||||
DI->second->replaceFunction(NF);
|
||||
NF->setSubprogram(F->getSubprogram());
|
||||
|
||||
// Now that the old function is dead, delete it.
|
||||
F->eraseFromParent();
|
||||
@ -1110,9 +1092,6 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
|
||||
bool DAE::runOnModule(Module &M) {
|
||||
bool Changed = false;
|
||||
|
||||
// Collect debug info descriptors for functions.
|
||||
FunctionDIs = makeSubprogramMap(M);
|
||||
|
||||
// First pass: Do a simple check to see if any functions can have their "..."
|
||||
// removed. We can do this if they never call va_start. This loop cannot be
|
||||
// fused with the next loop, because deleting a function invalidates
|
||||
|
@ -305,6 +305,12 @@ bool StripDeadDebugInfo::runOnModule(Module &M) {
|
||||
SmallVector<Metadata *, 64> LiveSubprograms;
|
||||
DenseSet<const MDNode *> VisitedSet;
|
||||
|
||||
std::set<DISubprogram *> LiveSPs;
|
||||
for (Function &F : M) {
|
||||
if (DISubprogram *SP = F.getSubprogram())
|
||||
LiveSPs.insert(SP);
|
||||
}
|
||||
|
||||
for (DICompileUnit *DIC : F.compile_units()) {
|
||||
// Create our live subprogram list.
|
||||
bool SubprogramChange = false;
|
||||
@ -314,7 +320,7 @@ bool StripDeadDebugInfo::runOnModule(Module &M) {
|
||||
continue;
|
||||
|
||||
// If the function referenced by DISP is not null, the function is live.
|
||||
if (DISP->getFunction())
|
||||
if (LiveSPs.count(DISP))
|
||||
LiveSubprograms.push_back(DISP);
|
||||
else
|
||||
SubprogramChange = true;
|
||||
|
@ -258,7 +258,6 @@ class DataFlowSanitizer : public ModulePass {
|
||||
DFSanABIList ABIList;
|
||||
DenseMap<Value *, Function *> UnwrappedFnMap;
|
||||
AttributeSet ReadOnlyNoneAttrs;
|
||||
DenseMap<const Function *, DISubprogram *> FunctionDIs;
|
||||
|
||||
Value *getShadowAddress(Value *Addr, Instruction *Pos);
|
||||
bool isInstrumented(const Function *F);
|
||||
@ -610,8 +609,6 @@ bool DataFlowSanitizer::runOnModule(Module &M) {
|
||||
if (ABIList.isIn(M, "skip"))
|
||||
return false;
|
||||
|
||||
FunctionDIs = makeSubprogramMap(M);
|
||||
|
||||
if (!GetArgTLSPtr) {
|
||||
Type *ArgTLSTy = ArrayType::get(ShadowTy, 64);
|
||||
ArgTLS = Mod->getOrInsertGlobal("__dfsan_arg_tls", ArgTLSTy);
|
||||
@ -768,11 +765,6 @@ bool DataFlowSanitizer::runOnModule(Module &M) {
|
||||
ConstantExpr::getBitCast(NewF, PointerType::getUnqual(FT));
|
||||
F.replaceAllUsesWith(WrappedFnCst);
|
||||
|
||||
// Patch the pointer to LLVM function in debug info descriptor.
|
||||
auto DI = FunctionDIs.find(&F);
|
||||
if (DI != FunctionDIs.end())
|
||||
DI->second->replaceFunction(&F);
|
||||
|
||||
UnwrappedFnMap[WrappedFnCst] = &F;
|
||||
*i = NewF;
|
||||
|
||||
|
@ -138,6 +138,7 @@ namespace {
|
||||
Module *M;
|
||||
LLVMContext *Ctx;
|
||||
SmallVector<std::unique_ptr<GCOVFunction>, 16> Funcs;
|
||||
DenseMap<DISubprogram *, Function *> FnMap;
|
||||
};
|
||||
}
|
||||
|
||||
@ -309,13 +310,12 @@ namespace {
|
||||
// object users can construct, the blocks and lines will be rooted here.
|
||||
class GCOVFunction : public GCOVRecord {
|
||||
public:
|
||||
GCOVFunction(const DISubprogram *SP, raw_ostream *os, uint32_t Ident,
|
||||
bool UseCfgChecksum, bool ExitBlockBeforeBody)
|
||||
GCOVFunction(const DISubprogram *SP, Function *F, raw_ostream *os,
|
||||
uint32_t Ident, bool UseCfgChecksum, bool ExitBlockBeforeBody)
|
||||
: SP(SP), Ident(Ident), UseCfgChecksum(UseCfgChecksum), CfgChecksum(0),
|
||||
ReturnBlock(1, os) {
|
||||
this->os = os;
|
||||
|
||||
Function *F = SP->getFunction();
|
||||
DEBUG(dbgs() << "Function: " << getFunctionName(SP) << "\n");
|
||||
|
||||
uint32_t i = 0;
|
||||
@ -450,6 +450,12 @@ bool GCOVProfiler::runOnModule(Module &M) {
|
||||
this->M = &M;
|
||||
Ctx = &M.getContext();
|
||||
|
||||
FnMap.clear();
|
||||
for (Function &F : M) {
|
||||
if (DISubprogram *SP = F.getSubprogram())
|
||||
FnMap[SP] = &F;
|
||||
}
|
||||
|
||||
if (Options.EmitNotes) emitProfileNotes();
|
||||
if (Options.EmitData) return emitProfileArcs();
|
||||
return false;
|
||||
@ -494,7 +500,7 @@ void GCOVProfiler::emitProfileNotes() {
|
||||
|
||||
unsigned FunctionIdent = 0;
|
||||
for (auto *SP : CU->getSubprograms()) {
|
||||
Function *F = SP->getFunction();
|
||||
Function *F = FnMap[SP];
|
||||
if (!F) continue;
|
||||
if (!functionHasLines(F)) continue;
|
||||
|
||||
@ -506,7 +512,7 @@ void GCOVProfiler::emitProfileNotes() {
|
||||
++It;
|
||||
EntryBlock.splitBasicBlock(It);
|
||||
|
||||
Funcs.push_back(make_unique<GCOVFunction>(SP, &out, FunctionIdent++,
|
||||
Funcs.push_back(make_unique<GCOVFunction>(SP, F, &out, FunctionIdent++,
|
||||
Options.UseCfgChecksum,
|
||||
Options.ExitBlockBeforeBody));
|
||||
GCOVFunction &Func = *Funcs.back();
|
||||
@ -573,7 +579,7 @@ bool GCOVProfiler::emitProfileArcs() {
|
||||
auto *CU = cast<DICompileUnit>(CU_Nodes->getOperand(i));
|
||||
SmallVector<std::pair<GlobalVariable *, MDNode *>, 8> CountersBySP;
|
||||
for (auto *SP : CU->getSubprograms()) {
|
||||
Function *F = SP->getFunction();
|
||||
Function *F = FnMap[SP];
|
||||
if (!F) continue;
|
||||
if (!functionHasLines(F)) continue;
|
||||
if (!Result) Result = true;
|
||||
|
@ -188,11 +188,9 @@ static void CloneDebugInfoMetadata(Function *NewFunc, const Function *OldFunc,
|
||||
const DISubprogram *OldSubprogramMDNode = FindSubprogram(OldFunc, Finder);
|
||||
if (!OldSubprogramMDNode) return;
|
||||
|
||||
// Ensure that OldFunc appears in the map.
|
||||
// (if it's already there it must point to NewFunc anyway)
|
||||
VMap[OldFunc] = NewFunc;
|
||||
auto *NewSubprogram =
|
||||
cast<DISubprogram>(MapMetadata(OldSubprogramMDNode, VMap));
|
||||
NewFunc->setSubprogram(NewSubprogram);
|
||||
|
||||
for (auto *CU : Finder.compile_units()) {
|
||||
auto Subprograms = CU->getSubprograms();
|
||||
|
@ -10,7 +10,7 @@ target triple = "x86_64-apple-darwin10.2"
|
||||
@TestArrayPtr = global %struct.test* getelementptr inbounds ([10 x %struct.test], [10 x %struct.test]* @TestArray, i64 0, i64 3) ; <%struct.test**> [#uses=1]
|
||||
@TestArray = common global [10 x %struct.test] zeroinitializer, align 32 ; <[10 x %struct.test]*> [#uses=2]
|
||||
|
||||
define i32 @main() nounwind readonly {
|
||||
define i32 @main() nounwind readonly !dbg !1 {
|
||||
%diff1 = alloca i64 ; <i64*> [#uses=2]
|
||||
; CHECK: call void @llvm.dbg.value(metadata i64 72,
|
||||
call void @llvm.dbg.declare(metadata i64* %diff1, metadata !0, metadata !DIExpression()), !dbg !DILocation(scope: !1)
|
||||
@ -27,7 +27,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
||||
!7 = !{!1}
|
||||
!6 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.0 (trunk 131941)", isOptimized: true, emissionKind: 0, file: !8, enums: !9, retainedTypes: !9, subprograms: !7)
|
||||
!0 = !DILocalVariable(name: "c", line: 2, scope: !1, file: !2, type: !5)
|
||||
!1 = distinct !DISubprogram(name: "main", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 1, file: !8, scope: !2, type: !3, function: i32 ()* @main)
|
||||
!1 = distinct !DISubprogram(name: "main", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 1, file: !8, scope: !2, type: !3)
|
||||
!2 = !DIFile(filename: "/d/j/debug-test.c", directory: "/Volumes/Data/b")
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{!5}
|
||||
|
@ -1,7 +1,10 @@
|
||||
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
|
||||
; RUN: verify-uselistorder %s
|
||||
|
||||
declare void @_Z3foov()
|
||||
; CHECK: define void @_Z3foov() !dbg !9
|
||||
define void @_Z3foov() !dbg !9 {
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
|
||||
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
|
||||
@ -20,10 +23,13 @@ declare void @_Z3foov()
|
||||
; CHECK: !8 = !DISubprogram(scope: null, isLocal: false, isDefinition: false, isOptimized: false)
|
||||
!8 = !DISubprogram(isDefinition: false)
|
||||
|
||||
; CHECK: !9 = 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, flags: DIFlagPrototyped, isOptimized: true, function: void ()* @_Z3foov, templateParams: !5, declaration: !8, variables: !6)
|
||||
; CHECK: !9 = 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, flags: DIFlagPrototyped, isOptimized: true, templateParams: !5, declaration: !8, variables: !6)
|
||||
!9 = 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,
|
||||
flags: DIFlagPrototyped, isOptimized: true, function: void ()* @_Z3foov,
|
||||
flags: DIFlagPrototyped, isOptimized: true,
|
||||
templateParams: !5, declaration: !8, variables: !6)
|
||||
|
||||
!10 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
!llvm.module.flags = !{!10}
|
||||
|
@ -2,7 +2,7 @@
|
||||
; RUN: llvm-dis < %t.bc | FileCheck %s
|
||||
; RUN: verify-uselistorder < %t.bc
|
||||
|
||||
define i32 @main() {
|
||||
define i32 @main() !dbg !4 {
|
||||
entry:
|
||||
%retval = alloca i32, align 4
|
||||
store i32 0, i32* %retval
|
||||
@ -16,7 +16,7 @@ entry:
|
||||
!1 = !DIFile(filename: "../llvm/tools/clang/test/CodeGen/debug-info-version.c", directory: "/Users/manmanren/llvm_gmail/release")
|
||||
!2 = !{i32 0}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "main", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 3, file: !1, scope: !5, type: !6, function: i32 ()* @main, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "main", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 3, file: !1, scope: !5, type: !6, variables: !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}
|
||||
|
17
test/Bitcode/upgrade-subprogram.ll
Normal file
17
test/Bitcode/upgrade-subprogram.ll
Normal file
@ -0,0 +1,17 @@
|
||||
; RUN: llvm-dis < %s.bc | FileCheck %s
|
||||
; RUN: verify-uselistorder < %s.bc
|
||||
|
||||
; CHECK: define void @foo() !dbg [[SP:![0-9]+]]
|
||||
define void @foo() {
|
||||
ret void
|
||||
}
|
||||
|
||||
!llvm.module.flags = !{!0}
|
||||
!0 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
|
||||
!llvm.dbg.cu = !{!1}
|
||||
!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, subprograms: !{!3}, emissionKind: 1)
|
||||
!2 = !DIFile(filename: "foo.c", directory: "/path/to/dir")
|
||||
; CHECK: [[SP]] = distinct !DISubprogram
|
||||
!3 = distinct !DISubprogram(file: !2, scope: !2, line: 51, name: "foo", function: void ()* @foo, type: !4)
|
||||
!4 = !DISubroutineType(types: !{})
|
BIN
test/Bitcode/upgrade-subprogram.ll.bc
Normal file
BIN
test/Bitcode/upgrade-subprogram.ll.bc
Normal file
Binary file not shown.
@ -3,7 +3,7 @@
|
||||
; Bug 20598
|
||||
|
||||
|
||||
define void @test() #0 {
|
||||
define void @test() #0 !dbg !4 {
|
||||
entry:
|
||||
br label %for.body, !dbg !39
|
||||
|
||||
@ -48,7 +48,7 @@ attributes #1 = { nounwind readnone }
|
||||
!1 = !DIFile(filename: "test.c", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "", line: 140, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 141, file: !1, scope: !1, type: !6, function: void ()* @test, variables: !12)
|
||||
!4 = distinct !DISubprogram(name: "", line: 140, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 141, file: !1, scope: !1, type: !6, variables: !12)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null, !8}
|
||||
!8 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !9)
|
||||
|
@ -5,7 +5,7 @@
|
||||
; CHECK: DEBUG_VALUE: test_debug_value:globalptr_arg <- SGPR0_SGPR1
|
||||
; CHECK: buffer_store_dword
|
||||
; CHECK: s_endpgm
|
||||
define void @test_debug_value(i32 addrspace(1)* nocapture %globalptr_arg) #0 {
|
||||
define void @test_debug_value(i32 addrspace(1)* nocapture %globalptr_arg) #0 !dbg !4 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i32 addrspace(1)* %globalptr_arg, i64 0, metadata !10, metadata !13), !dbg !14
|
||||
store i32 123, i32 addrspace(1)* %globalptr_arg, align 4
|
||||
@ -24,7 +24,7 @@ attributes #1 = { nounwind readnone }
|
||||
!1 = !DIFile(filename: "/tmp/test_debug_value.cl", directory: "/Users/matt/src/llvm/build_debug")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!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, function: void (i32 addrspace(1)*)* @test_debug_value, 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, variables: !9)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{null, !7}
|
||||
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 32)
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
%struct.SVal = type { i8*, i32 }
|
||||
|
||||
define i32 @_Z3fooi4SVal(i32 %i, %struct.SVal* noalias %location) nounwind ssp {
|
||||
define i32 @_Z3fooi4SVal(i32 %i, %struct.SVal* noalias %location) nounwind ssp !dbg !17 {
|
||||
entry:
|
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
|
||||
call void @llvm.dbg.value(metadata i32 %i, i64 0, metadata !23, metadata !DIExpression()), !dbg !24
|
||||
@ -31,7 +31,7 @@ return: ; preds = %bb2
|
||||
ret i32 %.0, !dbg !29
|
||||
}
|
||||
|
||||
define linkonce_odr void @_ZN4SValC1Ev(%struct.SVal* %this) nounwind ssp align 2 {
|
||||
define linkonce_odr void @_ZN4SValC1Ev(%struct.SVal* %this) nounwind ssp align 2 !dbg !16 {
|
||||
entry:
|
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
|
||||
call void @llvm.dbg.value(metadata %struct.SVal* %this, i64 0, metadata !31, metadata !DIExpression()), !dbg !34
|
||||
@ -47,7 +47,7 @@ return: ; preds = %entry
|
||||
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
||||
|
||||
define i32 @main() nounwind ssp {
|
||||
define i32 @main() nounwind ssp !dbg !20 {
|
||||
entry:
|
||||
%0 = alloca %struct.SVal ; <%struct.SVal*> [#uses=3]
|
||||
%v = alloca %struct.SVal ; <%struct.SVal*> [#uses=4]
|
||||
@ -93,11 +93,11 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!14 = !DISubroutineType(types: !15)
|
||||
!15 = !{null, !12}
|
||||
!16 = distinct !DISubprogram(name: "SVal", linkageName: "_ZN4SValC1Ev", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !48, scope: !1, type: !14, function: void (%struct.SVal*)* @_ZN4SValC1Ev)
|
||||
!17 = distinct !DISubprogram(name: "foo", linkageName: "_Z3fooi4SVal", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !48, scope: !2, type: !18, function: i32 (i32, %struct.SVal*)* @_Z3fooi4SVal)
|
||||
!16 = distinct !DISubprogram(name: "SVal", linkageName: "_ZN4SValC1Ev", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !48, scope: !1, type: !14)
|
||||
!17 = distinct !DISubprogram(name: "foo", linkageName: "_Z3fooi4SVal", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !48, scope: !2, type: !18)
|
||||
!18 = !DISubroutineType(types: !19)
|
||||
!19 = !{!13, !13, !1}
|
||||
!20 = distinct !DISubprogram(name: "main", linkageName: "main", line: 23, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !48, scope: !2, type: !21, function: i32 ()* @main)
|
||||
!20 = distinct !DISubprogram(name: "main", linkageName: "main", line: 23, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !48, scope: !2, type: !21)
|
||||
!21 = !DISubroutineType(types: !22)
|
||||
!22 = !{!13}
|
||||
!23 = !DILocalVariable(name: "i", line: 16, arg: 1, scope: !17, file: !2, type: !13)
|
||||
|
@ -28,7 +28,7 @@ target triple = "thumbv7-apple-darwin10"
|
||||
; CHECK-NOT: {{DW_TAG|NULL}}
|
||||
; CHECK: DW_AT_location [DW_FORM_exprloc] (<0x8> 03 [[ADDR]] 10 01 22 )
|
||||
|
||||
define zeroext i8 @get1(i8 zeroext %a) nounwind optsize {
|
||||
define zeroext i8 @get1(i8 zeroext %a) nounwind optsize !dbg !0 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i8 %a, i64 0, metadata !10, metadata !DIExpression()), !dbg !30
|
||||
%0 = load i8, i8* @x1, align 4, !dbg !30
|
||||
@ -39,7 +39,7 @@ entry:
|
||||
|
||||
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnone
|
||||
|
||||
define zeroext i8 @get2(i8 zeroext %a) nounwind optsize {
|
||||
define zeroext i8 @get2(i8 zeroext %a) nounwind optsize !dbg !6 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i8 %a, i64 0, metadata !18, metadata !DIExpression()), !dbg !32
|
||||
%0 = load i8, i8* @x2, align 4, !dbg !32
|
||||
@ -48,7 +48,7 @@ entry:
|
||||
ret i8 %0, !dbg !33
|
||||
}
|
||||
|
||||
define zeroext i8 @get3(i8 zeroext %a) nounwind optsize {
|
||||
define zeroext i8 @get3(i8 zeroext %a) nounwind optsize !dbg !7 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i8 %a, i64 0, metadata !21, metadata !DIExpression()), !dbg !34
|
||||
%0 = load i8, i8* @x3, align 4, !dbg !34
|
||||
@ -57,7 +57,7 @@ entry:
|
||||
ret i8 %0, !dbg !35
|
||||
}
|
||||
|
||||
define zeroext i8 @get4(i8 zeroext %a) nounwind optsize {
|
||||
define zeroext i8 @get4(i8 zeroext %a) nounwind optsize !dbg !8 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i8 %a, i64 0, metadata !24, metadata !DIExpression()), !dbg !36
|
||||
%0 = load i8, i8* @x4, align 4, !dbg !36
|
||||
@ -66,7 +66,7 @@ entry:
|
||||
ret i8 %0, !dbg !37
|
||||
}
|
||||
|
||||
define zeroext i8 @get5(i8 zeroext %a) nounwind optsize {
|
||||
define zeroext i8 @get5(i8 zeroext %a) nounwind optsize !dbg !9 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i8 %a, i64 0, metadata !27, metadata !DIExpression()), !dbg !38
|
||||
%0 = load i8, i8* @x5, align 4, !dbg !38
|
||||
@ -78,16 +78,16 @@ entry:
|
||||
!llvm.dbg.cu = !{!2}
|
||||
!llvm.module.flags = !{!49}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "get1", linkageName: "get1", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 4, file: !47, scope: !1, type: !3, function: i8 (i8)* @get1, variables: !42)
|
||||
!0 = distinct !DISubprogram(name: "get1", linkageName: "get1", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 4, file: !47, scope: !1, type: !3, variables: !42)
|
||||
!1 = !DIFile(filename: "foo.c", directory: "/tmp/")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C89, producer: "4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2369.8)", isOptimized: true, emissionKind: 0, file: !47, enums: !48, retainedTypes: !48, subprograms: !40, globals: !41, imports: !48)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{!5, !5}
|
||||
!5 = !DIBasicType(tag: DW_TAG_base_type, name: "_Bool", size: 8, align: 8, encoding: DW_ATE_boolean)
|
||||
!6 = distinct !DISubprogram(name: "get2", linkageName: "get2", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 7, file: !47, scope: !1, type: !3, function: i8 (i8)* @get2, variables: !43)
|
||||
!7 = distinct !DISubprogram(name: "get3", linkageName: "get3", line: 10, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 10, file: !47, scope: !1, type: !3, function: i8 (i8)* @get3, variables: !44)
|
||||
!8 = distinct !DISubprogram(name: "get4", linkageName: "get4", line: 13, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 13, file: !47, scope: !1, type: !3, function: i8 (i8)* @get4, variables: !45)
|
||||
!9 = distinct !DISubprogram(name: "get5", linkageName: "get5", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 16, file: !47, scope: !1, type: !3, function: i8 (i8)* @get5, variables: !46)
|
||||
!6 = distinct !DISubprogram(name: "get2", linkageName: "get2", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 7, file: !47, scope: !1, type: !3, variables: !43)
|
||||
!7 = distinct !DISubprogram(name: "get3", linkageName: "get3", line: 10, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 10, file: !47, scope: !1, type: !3, variables: !44)
|
||||
!8 = distinct !DISubprogram(name: "get4", linkageName: "get4", line: 13, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 13, file: !47, scope: !1, type: !3, variables: !45)
|
||||
!9 = distinct !DISubprogram(name: "get5", linkageName: "get5", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 16, file: !47, scope: !1, type: !3, variables: !46)
|
||||
!10 = !DILocalVariable(name: "a", line: 4, arg: 1, scope: !0, file: !1, type: !5)
|
||||
!11 = !DILocalVariable(name: "b", line: 4, scope: !12, file: !1, type: !5)
|
||||
!12 = distinct !DILexicalBlock(line: 4, column: 0, file: !47, scope: !0)
|
||||
|
@ -28,7 +28,7 @@ target triple = "thumbv7-apple-macosx10.7.0"
|
||||
@x4 = internal unnamed_addr global i32 4, align 4
|
||||
@x5 = global i32 0, align 4
|
||||
|
||||
define i32 @get1(i32 %a) nounwind optsize ssp {
|
||||
define i32 @get1(i32 %a) nounwind optsize ssp !dbg !1 {
|
||||
tail call void @llvm.dbg.value(metadata i32 %a, i64 0, metadata !10, metadata !DIExpression()), !dbg !30
|
||||
%1 = load i32, i32* @x1, align 4, !dbg !31
|
||||
tail call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !11, metadata !DIExpression()), !dbg !31
|
||||
@ -36,7 +36,7 @@ define i32 @get1(i32 %a) nounwind optsize ssp {
|
||||
ret i32 %1, !dbg !31
|
||||
}
|
||||
|
||||
define i32 @get2(i32 %a) nounwind optsize ssp {
|
||||
define i32 @get2(i32 %a) nounwind optsize ssp !dbg !6 {
|
||||
tail call void @llvm.dbg.value(metadata i32 %a, i64 0, metadata !13, metadata !DIExpression()), !dbg !32
|
||||
%1 = load i32, i32* @x2, align 4, !dbg !33
|
||||
tail call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !14, metadata !DIExpression()), !dbg !33
|
||||
@ -44,7 +44,7 @@ define i32 @get2(i32 %a) nounwind optsize ssp {
|
||||
ret i32 %1, !dbg !33
|
||||
}
|
||||
|
||||
define i32 @get3(i32 %a) nounwind optsize ssp {
|
||||
define i32 @get3(i32 %a) nounwind optsize ssp !dbg !7 {
|
||||
tail call void @llvm.dbg.value(metadata i32 %a, i64 0, metadata !16, metadata !DIExpression()), !dbg !34
|
||||
%1 = load i32, i32* @x3, align 4, !dbg !35
|
||||
tail call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !17, metadata !DIExpression()), !dbg !35
|
||||
@ -52,7 +52,7 @@ define i32 @get3(i32 %a) nounwind optsize ssp {
|
||||
ret i32 %1, !dbg !35
|
||||
}
|
||||
|
||||
define i32 @get4(i32 %a) nounwind optsize ssp {
|
||||
define i32 @get4(i32 %a) nounwind optsize ssp !dbg !8 {
|
||||
tail call void @llvm.dbg.value(metadata i32 %a, i64 0, metadata !19, metadata !DIExpression()), !dbg !36
|
||||
%1 = load i32, i32* @x4, align 4, !dbg !37
|
||||
tail call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !20, metadata !DIExpression()), !dbg !37
|
||||
@ -60,7 +60,7 @@ define i32 @get4(i32 %a) nounwind optsize ssp {
|
||||
ret i32 %1, !dbg !37
|
||||
}
|
||||
|
||||
define i32 @get5(i32 %a) nounwind optsize ssp {
|
||||
define i32 @get5(i32 %a) nounwind optsize ssp !dbg !9 {
|
||||
tail call void @llvm.dbg.value(metadata i32 %a, i64 0, metadata !27, metadata !DIExpression()), !dbg !38
|
||||
%1 = load i32, i32* @x5, align 4, !dbg !39
|
||||
tail call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !28, metadata !DIExpression()), !dbg !39
|
||||
@ -74,15 +74,15 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!llvm.module.flags = !{!49}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang", isOptimized: true, emissionKind: 1, file: !47, enums: !48, retainedTypes: !48, subprograms: !40, globals: !41, imports: !48)
|
||||
!1 = distinct !DISubprogram(name: "get1", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 5, file: !47, scope: !2, type: !3, function: i32 (i32)* @get1, variables: !42)
|
||||
!1 = distinct !DISubprogram(name: "get1", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 5, file: !47, scope: !2, type: !3, variables: !42)
|
||||
!2 = !DIFile(filename: "ss3.c", directory: "/private/tmp")
|
||||
!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: "get2", line: 8, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 8, file: !47, scope: !2, type: !3, function: i32 (i32)* @get2, variables: !43)
|
||||
!7 = distinct !DISubprogram(name: "get3", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !47, scope: !2, type: !3, function: i32 (i32)* @get3, variables: !44)
|
||||
!8 = distinct !DISubprogram(name: "get4", line: 14, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 14, file: !47, scope: !2, type: !3, function: i32 (i32)* @get4, variables: !45)
|
||||
!9 = distinct !DISubprogram(name: "get5", line: 17, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 17, file: !47, scope: !2, type: !3, function: i32 (i32)* @get5, variables: !46)
|
||||
!6 = distinct !DISubprogram(name: "get2", line: 8, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 8, file: !47, scope: !2, type: !3, variables: !43)
|
||||
!7 = distinct !DISubprogram(name: "get3", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !47, scope: !2, type: !3, variables: !44)
|
||||
!8 = distinct !DISubprogram(name: "get4", line: 14, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 14, file: !47, scope: !2, type: !3, variables: !45)
|
||||
!9 = distinct !DISubprogram(name: "get5", line: 17, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 17, file: !47, scope: !2, type: !3, variables: !46)
|
||||
!10 = !DILocalVariable(name: "a", line: 5, arg: 1, scope: !1, file: !2, type: !5)
|
||||
!11 = !DILocalVariable(name: "b", line: 5, scope: !12, file: !2, type: !5)
|
||||
!12 = distinct !DILexicalBlock(line: 5, column: 19, file: !47, scope: !1)
|
||||
|
@ -15,7 +15,7 @@ target triple = "thumbv7-apple-ios3.0.0"
|
||||
@d = common global i32 0, align 4
|
||||
|
||||
; Function Attrs: nounwind ssp
|
||||
define i32 @pr16110() #0 {
|
||||
define i32 @pr16110() #0 !dbg !4 {
|
||||
for.cond1.preheader:
|
||||
store i32 0, i32* @c, align 4, !dbg !21
|
||||
br label %for.cond1.outer, !dbg !26
|
||||
@ -83,7 +83,7 @@ attributes #3 = { nounwind }
|
||||
!1 = !DIFile(filename: "pr16110.c", directory: "/d/b")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "pr16110", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 7, file: !1, scope: !5, type: !6, function: i32 ()* @pr16110, variables: !9)
|
||||
!4 = distinct !DISubprogram(name: "pr16110", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 7, file: !1, scope: !5, type: !6, variables: !9)
|
||||
!5 = !DIFile(filename: "pr16110.c", directory: "/d/b")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8}
|
||||
|
@ -29,7 +29,7 @@
|
||||
!1 = !DIFile(filename: "var.c", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "sum", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !5, type: !6, function: i32 (i32, ...)* @sum, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "sum", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!5 = !DIFile(filename: "var.c", directory: "/tmp")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
@ -108,7 +108,7 @@
|
||||
; CHECK-THUMB-FP-ELIM: add r7, sp, #8
|
||||
; CHECK-THUMB-FP-ELIM: .cfi_def_cfa r7, 20
|
||||
|
||||
define i32 @sum(i32 %count, ...) {
|
||||
define i32 @sum(i32 %count, ...) !dbg !4 {
|
||||
entry:
|
||||
%vl = alloca i8*, align 4
|
||||
%vl1 = bitcast i8** %vl to i8*
|
||||
|
@ -129,7 +129,7 @@ declare void @_ZSt9terminatev()
|
||||
!1 = !DIFile(filename: "exp.cpp", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "test", linkageName: "_Z4testiiiiiddddd", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !5, type: !6, function: void (i32, i32, i32, i32, i32, double, double, double, double, double)* @_Z4testiiiiiddddd, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test", linkageName: "_Z4testiiiiiddddd", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!5 = !DIFile(filename: "exp.cpp", directory: "/tmp")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null, !8, !8, !8, !8, !8, !9, !9, !9, !9, !9}
|
||||
|
@ -6,7 +6,7 @@ target triple = "thumbv7-apple-ios"
|
||||
|
||||
%struct.tag_s = type { i32, i32, i32 }
|
||||
|
||||
define void @foo(%struct.tag_s* nocapture %this, %struct.tag_s* %c, i64 %x, i64 %y, %struct.tag_s* nocapture %ptr1, %struct.tag_s* nocapture %ptr2) nounwind ssp {
|
||||
define void @foo(%struct.tag_s* nocapture %this, %struct.tag_s* %c, i64 %x, i64 %y, %struct.tag_s* nocapture %ptr1, %struct.tag_s* nocapture %ptr2) nounwind ssp !dbg !1 {
|
||||
tail call void @llvm.dbg.value(metadata %struct.tag_s* %this, i64 0, metadata !5, metadata !DIExpression()), !dbg !20
|
||||
tail call void @llvm.dbg.value(metadata %struct.tag_s* %c, i64 0, metadata !13, metadata !DIExpression()), !dbg !21
|
||||
tail call void @llvm.dbg.value(metadata i64 %x, i64 0, metadata !14, metadata !DIExpression()), !dbg !22
|
||||
@ -33,7 +33,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!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: 1, file: !32, enums: !{}, retainedTypes: !{}, subprograms: !30, imports: null)
|
||||
!1 = distinct !DISubprogram(name: "foo", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !2, scope: !2, type: !3, function: void (%struct.tag_s*, %struct.tag_s*, i64, i64, %struct.tag_s*, %struct.tag_s*)* @foo, variables: !31)
|
||||
!1 = distinct !DISubprogram(name: "foo", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !2, scope: !2, type: !3, variables: !31)
|
||||
!2 = !DIFile(filename: "one.c", directory: "/Volumes/Athwagate/R10048772")
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{null}
|
||||
|
@ -27,7 +27,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
|
||||
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
|
||||
|
||||
define hidden void @foobar_func_block_invoke_0(i8* %.block_descriptor, %0* %loadedMydata, [4 x i32] %bounds.coerce0, [4 x i32] %data.coerce0) ssp {
|
||||
define hidden void @foobar_func_block_invoke_0(i8* %.block_descriptor, %0* %loadedMydata, [4 x i32] %bounds.coerce0, [4 x i32] %data.coerce0) ssp !dbg !23 {
|
||||
%1 = alloca %0*, align 4
|
||||
%bounds = alloca %struct.CR, align 4
|
||||
%data = alloca %struct.CR, align 4
|
||||
@ -118,7 +118,7 @@ define hidden void @foobar_func_block_invoke_0(i8* %.block_descriptor, %0* %load
|
||||
!20 = !DIFile(filename: "header4.h", directory: "/Volumes/Sandbox/llvm")
|
||||
!21 = !{!22}
|
||||
!22 = !DIEnumerator(name: "Eleven", value: 0) ; [ DW_TAG_enumerator ]
|
||||
!23 = distinct !DISubprogram(name: "foobar_func_block_invoke_0", line: 609, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 609, file: !152, scope: !24, type: !25, function: void (i8*, %0*, [4 x i32], [4 x i32])* @foobar_func_block_invoke_0)
|
||||
!23 = distinct !DISubprogram(name: "foobar_func_block_invoke_0", line: 609, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 609, file: !152, scope: !24, type: !25)
|
||||
!24 = !DIFile(filename: "MyLibrary.m", directory: "/Volumes/Sandbox/llvm")
|
||||
!25 = !DISubroutineType(types: !26)
|
||||
!26 = !{null}
|
||||
|
@ -14,7 +14,7 @@ target triple = "thumbv7-apple-macosx10.6.7"
|
||||
|
||||
declare <4 x float> @test0001(float) nounwind readnone ssp
|
||||
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv, i1 %cond) nounwind ssp {
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv, i1 %cond) nounwind ssp !dbg !10 {
|
||||
entry:
|
||||
br label %for.body9
|
||||
|
||||
@ -42,7 +42,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!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, file: !54, scope: null, type: !3, function: <4 x float> (float)* @test0001, variables: !51)
|
||||
!0 = distinct !DISubprogram(name: "test0001", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, file: !54, scope: null, type: !3, variables: !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: 1, file: !54, enums: !{}, retainedTypes: !{}, subprograms: !50, imports: null)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
@ -52,7 +52,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!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, file: !54, scope: null, type: !11, function: i32 (i32, i8**, i1)* @main, variables: !52)
|
||||
!10 = distinct !DISubprogram(name: "main", line: 59, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, file: !54, scope: null, type: !11, variables: !52)
|
||||
!11 = !DISubroutineType(types: !12)
|
||||
!12 = !{!13}
|
||||
!13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -10,7 +10,7 @@ target triple = "thumbv7-apple-darwin10"
|
||||
@.str = private unnamed_addr constant [11 x i8] c"%p %lf %c\0A\00", align 4
|
||||
@.str1 = private unnamed_addr constant [6 x i8] c"point\00", align 4
|
||||
|
||||
define i32 @inlineprinter(i8* %ptr, double %val, i8 zeroext %c) nounwind optsize {
|
||||
define i32 @inlineprinter(i8* %ptr, double %val, i8 zeroext %c) nounwind optsize !dbg !9 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i8* %ptr, i64 0, metadata !19, metadata !DIExpression()), !dbg !26
|
||||
tail call void @llvm.dbg.value(metadata double %val, i64 0, metadata !20, metadata !DIExpression()), !dbg !26
|
||||
@ -20,7 +20,7 @@ entry:
|
||||
ret i32 0, !dbg !29
|
||||
}
|
||||
|
||||
define i32 @printer(i8* %ptr, double %val, i8 zeroext %c) nounwind optsize noinline {
|
||||
define i32 @printer(i8* %ptr, double %val, i8 zeroext %c) nounwind optsize noinline !dbg !0 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i8* %ptr, i64 0, metadata !16, metadata !DIExpression()), !dbg !30
|
||||
tail call void @llvm.dbg.value(metadata double %val, i64 0, metadata !17, metadata !DIExpression()), !dbg !30
|
||||
@ -34,7 +34,7 @@ declare i32 @printf(i8* nocapture, ...) nounwind
|
||||
|
||||
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnone
|
||||
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind optsize {
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind optsize !dbg !10 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !22, metadata !DIExpression()), !dbg !34
|
||||
tail call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !23, metadata !DIExpression()), !dbg !34
|
||||
@ -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, scopeLine: 12, file: !46, scope: !1, type: !3, function: i32 (i8*, double, i8)* @printer, variables: !43)
|
||||
!0 = distinct !DISubprogram(name: "printer", linkageName: "printer", line: 12, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 12, file: !46, scope: !1, type: !3, variables: !43)
|
||||
!1 = !DIFile(filename: "a.c", directory: "/tmp/")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C89, producer: "(LLVM build 00)", isOptimized: true, emissionKind: 1, file: !46, enums: !47, retainedTypes: !47, subprograms: !42, 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, scopeLine: 5, file: !46, scope: !1, type: !3, function: i32 (i8*, double, i8)* @inlineprinter, variables: !44)
|
||||
!10 = distinct !DISubprogram(name: "main", linkageName: "main", line: 18, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 18, file: !46, scope: !1, type: !11, function: i32 (i32, i8**)* @main, variables: !45)
|
||||
!9 = distinct !DISubprogram(name: "inlineprinter", linkageName: "inlineprinter", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, 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, scopeLine: 18, file: !46, scope: !1, type: !11, variables: !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)
|
||||
|
@ -1,7 +1,7 @@
|
||||
; RUN: llc -mtriple=armv7-none-linux-gnueabihf < %s -o - | FileCheck %s
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define void @need_cfi_def_cfa_offset() #0 {
|
||||
define void @need_cfi_def_cfa_offset() #0 !dbg !3 {
|
||||
; CHECK-LABEL: need_cfi_def_cfa_offset:
|
||||
; CHECK: sub sp, sp, #4
|
||||
; CHECK: .cfi_def_cfa_offset 4
|
||||
@ -24,7 +24,7 @@ attributes #1 = { nounwind readnone }
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "", isOptimized: false, subprograms: !{!3})
|
||||
!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, function: void ()* @need_cfi_def_cfa_offset, 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, variables: !2)
|
||||
!4 = !DISubroutineType(types: !5)
|
||||
!5 = !{null}
|
||||
!6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -15,7 +15,7 @@ target triple = "thumbv7-apple-macosx10.6.7"
|
||||
|
||||
declare <4 x float> @test0001(float) nounwind readnone ssp
|
||||
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind ssp {
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind ssp !dbg !10 {
|
||||
entry:
|
||||
br label %for.body9
|
||||
|
||||
@ -38,7 +38,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!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, scopeLine: 3, file: !54, scope: !1, type: !3, function: <4 x float> (float)* @test0001, variables: !51)
|
||||
!0 = distinct !DISubprogram(name: "test0001", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !54, scope: !1, type: !3, variables: !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: 1, file: !54, enums: !{}, retainedTypes: !{}, subprograms: !50, imports: null)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
@ -48,7 +48,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!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, scopeLine: 59, file: !54, scope: !1, type: !11, function: i32 (i32, i8**)* @main, variables: !52)
|
||||
!10 = distinct !DISubprogram(name: "main", line: 59, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 59, file: !54, scope: !1, type: !11, variables: !52)
|
||||
!11 = !DISubroutineType(types: !12)
|
||||
!12 = !{!13}
|
||||
!13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -12,7 +12,7 @@ target triple = "thumbv7-apple-macosx10.6.7"
|
||||
@.str = private unnamed_addr constant [11 x i8] c"%p %lf %c\0A\00"
|
||||
@.str1 = private unnamed_addr constant [6 x i8] c"point\00"
|
||||
|
||||
define i32 @inlineprinter(i8* %ptr, float %val, i8 zeroext %c) nounwind optsize ssp {
|
||||
define i32 @inlineprinter(i8* %ptr, float %val, i8 zeroext %c) nounwind optsize ssp !dbg !0 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i8* %ptr, i64 0, metadata !8, metadata !DIExpression()), !dbg !24
|
||||
tail call void @llvm.dbg.value(metadata float %val, i64 0, metadata !10, metadata !DIExpression()), !dbg !25
|
||||
@ -25,7 +25,7 @@ entry:
|
||||
|
||||
declare i32 @printf(i8* nocapture, ...) nounwind optsize
|
||||
|
||||
define i32 @printer(i8* %ptr, float %val, i8 zeroext %c) nounwind optsize noinline ssp {
|
||||
define i32 @printer(i8* %ptr, float %val, i8 zeroext %c) nounwind optsize noinline ssp !dbg !6 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i8* %ptr, i64 0, metadata !14, metadata !DIExpression()), !dbg !30
|
||||
tail call void @llvm.dbg.value(metadata float %val, i64 0, metadata !15, metadata !DIExpression()), !dbg !31
|
||||
@ -36,7 +36,7 @@ entry:
|
||||
ret i32 0, !dbg !35
|
||||
}
|
||||
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind optsize ssp {
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind optsize ssp !dbg !7 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !17, metadata !DIExpression()), !dbg !36
|
||||
tail call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !18, metadata !DIExpression()), !dbg !37
|
||||
@ -65,14 +65,14 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!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, scopeLine: 5, file: !51, scope: !1, type: !3, function: i32 (i8*, float, i8)* @inlineprinter, variables: !48)
|
||||
!0 = distinct !DISubprogram(name: "inlineprinter", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 5, file: !51, scope: !1, type: !3, variables: !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: 1, file: !51, enums: !52, retainedTypes: !52, subprograms: !47, 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, scopeLine: 12, file: !51, scope: !1, type: !3, function: i32 (i8*, float, i8)* @printer, variables: !49)
|
||||
!7 = distinct !DISubprogram(name: "main", line: 18, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 18, file: !51, scope: !1, type: !3, function: i32 (i32, i8**)* @main, variables: !50)
|
||||
!6 = distinct !DISubprogram(name: "printer", line: 12, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, 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, scopeLine: 18, file: !51, scope: !1, type: !3, variables: !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)
|
||||
|
@ -12,7 +12,7 @@ target triple = "thumbv7-apple-macosx10.6.7"
|
||||
; CHECK-NEXT: Ending address offset:
|
||||
; CHECK-NEXT: Location description: 90 {{.. .. .. .. $}}
|
||||
|
||||
define void @_Z3foov() optsize ssp {
|
||||
define void @_Z3foov() optsize ssp !dbg !1 {
|
||||
entry:
|
||||
%call = tail call float @_Z3barv() optsize, !dbg !11
|
||||
tail call void @llvm.dbg.value(metadata float %call, i64 0, metadata !5, metadata !DIExpression()), !dbg !11
|
||||
@ -44,7 +44,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!llvm.module.flags = !{!20}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.0 (trunk 130845)", isOptimized: true, emissionKind: 1, file: !18, enums: !19, retainedTypes: !19, subprograms: !16, imports: null)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 5, file: !18, scope: !2, type: !3, function: void ()* @_Z3foov, variables: !17)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 5, file: !18, scope: !2, type: !3, variables: !17)
|
||||
!2 = !DIFile(filename: "k.cc", directory: "/private/tmp")
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{null}
|
||||
|
@ -5,7 +5,7 @@
|
||||
!llvm.module.flags = !{!9, !10}
|
||||
!llvm.ident = !{!11}
|
||||
|
||||
define void @test_basic() #0 {
|
||||
define void @test_basic() #0 !dbg !4 {
|
||||
%mem = alloca i32, i32 10
|
||||
call void @dummy_use (i32* %mem, i32 10)
|
||||
ret void
|
||||
@ -43,7 +43,7 @@ define void @test_basic() #0 {
|
||||
!1 = !DIFile(filename: "var.c", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "test_basic", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !5, type: !6, function: void ()* @test_basic, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test_basic", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!5 = !DIFile(filename: "var.c", directory: "/tmp")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -7,7 +7,7 @@ target triple = "thumbv7"
|
||||
%struct.s = type opaque
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define arm_aapcscc i32 @f(%struct.s* %s, i32 %u, i8* %b, i32 %n) #0 {
|
||||
define arm_aapcscc i32 @f(%struct.s* %s, i32 %u, i8* %b, i32 %n) #0 !dbg !4 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata %struct.s* %s, i64 0, metadata !19, metadata !28), !dbg !29
|
||||
tail call void @llvm.dbg.value(metadata i32 %u, i64 0, metadata !20, metadata !28), !dbg !29
|
||||
@ -54,7 +54,7 @@ attributes #3 = { nounwind }
|
||||
!1 = !DIFile(filename: "<stdin>", directory: "/Users/compnerd/Source/llvm")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "f", scope: !5, file: !5, line: 9, type: !6, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, function: i32 (%struct.s*, i32, i8*, i32)* @f, variables: !18)
|
||||
!4 = distinct !DISubprogram(name: "f", scope: !5, file: !5, line: 9, type: !6, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, variables: !18)
|
||||
!5 = !DIFile(filename: "<stdin>", directory: "/Users/compnerd/Source/llvm")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !9, !12, !13, !17}
|
||||
|
@ -10,7 +10,7 @@
|
||||
; the layout of the VFP registers correctly. The fact that the numbers are
|
||||
; monotonic in memory is also a nice property to have.
|
||||
|
||||
define void @stack_offsets() {
|
||||
define void @stack_offsets() !dbg !4 {
|
||||
; CHECK-LABEL: stack_offsets:
|
||||
; CHECK: vpush {d13}
|
||||
; CHECK: vpush {d11}
|
||||
@ -35,7 +35,7 @@ define void @stack_offsets() {
|
||||
!1 = !DIFile(filename: "tmp.c", directory: "/Users/tim/llvm/build")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "bar", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 1, file: !1, scope: !5, type: !6, function: void ()* @stack_offsets, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "bar", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 1, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!5 = !DIFile(filename: "tmp.c", directory: "/Users/tim/llvm/build")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null}
|
||||
|
@ -16,7 +16,7 @@ target triple = "hexagon-unknown--elf"
|
||||
; CHECK: }
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define i32 @foo(i32 %x, i32 %y) #0 {
|
||||
define i32 @foo(i32 %x, i32 %y) #0 !dbg !4 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i32 %x, i64 0, metadata !9, metadata !14), !dbg !15
|
||||
tail call void @llvm.dbg.value(metadata i32 %y, i64 0, metadata !10, metadata !14), !dbg !16
|
||||
@ -45,7 +45,7 @@ attributes #3 = { nounwind }
|
||||
!1 = !DIFile(filename: "cfi-late.c", directory: "/test")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, function: i32 (i32, i32)* @foo, 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, variables: !8)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{!7, !7, !7}
|
||||
!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -3,7 +3,7 @@
|
||||
target datalayout = "e-p:32:32:32-i64:64:64-i32:32:32-i16:16:16-i1:32:32-f64:64:64-f32:32:32-v64:64:64-v32:32:32-a0:0-n16:32"
|
||||
target triple = "hexagon"
|
||||
|
||||
define void @foo(i32* nocapture %a, i32* nocapture %b) nounwind {
|
||||
define void @foo(i32* nocapture %a, i32* nocapture %b) nounwind !dbg !5 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i32* %a, i64 0, metadata !13, metadata !DIExpression()), !dbg !17
|
||||
tail call void @llvm.dbg.value(metadata i32* %b, i64 0, metadata !14, metadata !DIExpression()), !dbg !18
|
||||
@ -40,7 +40,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: 1, file: !28, enums: !2, retainedTypes: !2, subprograms: !3, globals: !2)
|
||||
!2 = !{}
|
||||
!3 = !{!5}
|
||||
!5 = distinct !DISubprogram(name: "foo", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !28, scope: null, type: !7, function: void (i32*, i32*)* @foo, variables: !11)
|
||||
!5 = distinct !DISubprogram(name: "foo", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !28, scope: null, type: !7, variables: !11)
|
||||
!6 = !DIFile(filename: "hwloop-dbg.c", directory: "/usr2/kparzysz/s.hex/t")
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{null, !9, !9}
|
||||
|
@ -1,6 +1,6 @@
|
||||
; Check that DEBUG_VALUE comments come through on a variety of targets.
|
||||
|
||||
define i32 @main() nounwind ssp {
|
||||
define i32 @main() nounwind ssp !dbg !0 {
|
||||
entry:
|
||||
; CHECK: DEBUG_VALUE
|
||||
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !7, metadata !DIExpression()), !dbg !9
|
||||
@ -14,7 +14,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!llvm.dbg.cu = !{!2}
|
||||
!llvm.module.flags = !{!13}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "main", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !12, scope: !1, type: !3, function: i32 ()* @main)
|
||||
!0 = distinct !DISubprogram(name: "main", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !12, scope: !1, type: !3)
|
||||
!1 = !DIFile(filename: "/tmp/x.c", directory: "/Users/manav")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 2.9 (trunk 120996)", isOptimized: false, emissionKind: 0, file: !12, enums: !6, retainedTypes: !6, subprograms: !11)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
--- |
|
||||
|
||||
define i32 @test(i32 %x) #0 {
|
||||
define i32 @test(i32 %x) #0 !dbg !4 {
|
||||
entry:
|
||||
%x.addr = alloca i32, align 4
|
||||
store i32 %x, i32* %x.addr, align 4
|
||||
@ -24,7 +24,7 @@
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, function: i32 (i32)* @test, 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, variables: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
--- |
|
||||
|
||||
define i32 @test(i32 %x) #0 {
|
||||
define i32 @test(i32 %x) #0 !dbg !4 {
|
||||
entry:
|
||||
%x.addr = alloca i32, align 4
|
||||
store i32 %x, i32* %x.addr, align 4
|
||||
@ -24,7 +24,7 @@
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, function: i32 (i32)* @test, 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, variables: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
--- |
|
||||
|
||||
define i32 @test(i32 %x) #0 {
|
||||
define i32 @test(i32 %x) #0 !dbg !4 {
|
||||
entry:
|
||||
%x.addr = alloca i32, align 4
|
||||
store i32 %x, i32* %x.addr, align 4
|
||||
@ -35,7 +35,7 @@
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, function: i32 (i32)* @test, 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, variables: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
--- |
|
||||
|
||||
define i32 @test(i32 %x) #0 {
|
||||
define i32 @test(i32 %x) #0 !dbg !4 {
|
||||
entry:
|
||||
%x.addr = alloca i32, align 4
|
||||
store i32 %x, i32* %x.addr, align 4
|
||||
@ -26,7 +26,7 @@
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, function: i32 (i32)* @test, 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, variables: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
--- |
|
||||
|
||||
define i32 @test(i32 %x) #0 {
|
||||
define i32 @test(i32 %x) #0 !dbg !4 {
|
||||
entry:
|
||||
%x.addr = alloca i32, align 4
|
||||
store i32 %x, i32* %x.addr, align 4
|
||||
@ -24,7 +24,7 @@
|
||||
!1 = !DIFile(filename: "test.ll", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, function: i32 (i32)* @test, 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, variables: !2)
|
||||
!5 = !DIFile(filename: "test.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
|
@ -4,7 +4,7 @@
|
||||
target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64"
|
||||
target triple = "powerpc64-unknown-linux-gnu"
|
||||
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind readnone {
|
||||
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind readnone !dbg !5 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !15, metadata !DIExpression()), !dbg !17
|
||||
tail call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !16, metadata !DIExpression()), !dbg !18
|
||||
@ -20,7 +20,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: 0, file: !21, enums: !1, retainedTypes: !1, subprograms: !3, globals: !1, imports: !1)
|
||||
!1 = !{}
|
||||
!3 = !{!5}
|
||||
!5 = distinct !DISubprogram(name: "main", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, file: !21, scope: null, type: !7, function: i32 (i32, i8**)* @main, variables: !13)
|
||||
!5 = distinct !DISubprogram(name: "main", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, file: !21, scope: null, type: !7, variables: !13)
|
||||
!6 = !DIFile(filename: "dbg.c", directory: "/src")
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{!9, !9, !10}
|
||||
|
@ -9,7 +9,7 @@ target triple = "powerpc64-unknown-linux-gnu"
|
||||
@grid_points = external global [3 x i32], align 4
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define fastcc void @compute_rhs() #0 {
|
||||
define fastcc void @compute_rhs() #0 !dbg !114 {
|
||||
entry:
|
||||
br i1 undef, label %for.cond871.preheader.for.inc960_crit_edge, label %for.end1042, !dbg !439
|
||||
|
||||
@ -168,7 +168,7 @@ attributes #1 = { nounwind readnone }
|
||||
!111 = !DILocalVariable(name: "d", line: 271, scope: !102, file: !5, type: !8)
|
||||
!112 = !DILocalVariable(name: "m", line: 271, scope: !102, file: !5, type: !8)
|
||||
!113 = !DILocalVariable(name: "add", line: 272, scope: !102, file: !5, type: !20)
|
||||
!114 = distinct !DISubprogram(name: "compute_rhs", line: 1767, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1767, file: !1, scope: !5, type: !115, function: void ()* @compute_rhs, variables: !117)
|
||||
!114 = distinct !DISubprogram(name: "compute_rhs", line: 1767, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1767, file: !1, scope: !5, type: !115, variables: !117)
|
||||
!115 = !DISubroutineType(types: !116)
|
||||
!116 = !{null}
|
||||
!117 = !{!118, !119, !120, !121, !122, !123, !124, !125, !126, !127, !128, !129, !130, !131}
|
||||
|
@ -6,7 +6,7 @@
|
||||
@php_intpow10.powers = external unnamed_addr constant [23 x double], align 8
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define double @_php_math_round(double %value, i32 signext %places, i32 signext %mode) #0 {
|
||||
define double @_php_math_round(double %value, i32 signext %places, i32 signext %mode) #0 !dbg !6 {
|
||||
entry:
|
||||
br i1 undef, label %if.then, label %if.else, !dbg !32
|
||||
|
||||
@ -62,7 +62,7 @@ attributes #3 = { nounwind }
|
||||
!3 = !{!4}
|
||||
!4 = !DIBasicType(name: "double", size: 64, align: 64, encoding: DW_ATE_float)
|
||||
!5 = !{!6, !18}
|
||||
!6 = distinct !DISubprogram(name: "_php_math_round", scope: !1, file: !1, line: 15, type: !7, isLocal: false, isDefinition: true, scopeLine: 16, flags: DIFlagPrototyped, isOptimized: true, function: double (double, i32, i32)* @_php_math_round, variables: !10)
|
||||
!6 = distinct !DISubprogram(name: "_php_math_round", scope: !1, file: !1, line: 15, type: !7, isLocal: false, isDefinition: true, scopeLine: 16, flags: DIFlagPrototyped, isOptimized: true, variables: !10)
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{!4, !4, !9, !9}
|
||||
!9 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -3,7 +3,7 @@ target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
|
||||
target triple = "powerpc64-unknown-linux-gnu"
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define void @foo() #0 {
|
||||
define void @foo() #0 !dbg !4 {
|
||||
entry:
|
||||
call void @llvm.eh.unwind.init(), !dbg !9
|
||||
ret void, !dbg !10
|
||||
@ -25,7 +25,7 @@ attributes #0 = { nounwind }
|
||||
!1 = !DIFile(filename: "/tmp/unwind-dw2.c", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "foo", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 1, file: !1, scope: !5, type: !6, function: void ()* @foo, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "foo", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 1, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!5 = !DIFile(filename: "/tmp/unwind-dw2.c", directory: "/tmp")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null}
|
||||
|
@ -453,7 +453,7 @@ exit:
|
||||
; CHECK-NEXT: call void @f()
|
||||
; CHECK-NEXT: unreachable
|
||||
|
||||
define void @test12() personality i32 (...)* @__CxxFrameHandler3 {
|
||||
define void @test12() personality i32 (...)* @__CxxFrameHandler3 !dbg !5 {
|
||||
entry:
|
||||
invoke void @f()
|
||||
to label %cont unwind label %left, !dbg !8
|
||||
@ -559,7 +559,7 @@ exit:
|
||||
!2 = !DIFile(filename: "test.cpp", directory: ".")
|
||||
!3 = !{}
|
||||
!4 = !{!5}
|
||||
!5 = distinct !DISubprogram(name: "test12", scope: !2, file: !2, type: !6, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, function: void ()* @test12, variables: !3)
|
||||
!5 = distinct !DISubprogram(name: "test12", scope: !2, file: !2, type: !6, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, variables: !3)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null}
|
||||
!8 = !DILocation(line: 1, scope: !5)
|
||||
|
@ -6,7 +6,7 @@
|
||||
%struct.Pt = type { double, double }
|
||||
%struct.Rect = type { %struct.Pt, %struct.Pt }
|
||||
|
||||
define double @foo(%struct.Rect* byval %my_r0) nounwind ssp {
|
||||
define double @foo(%struct.Rect* byval %my_r0) nounwind ssp !dbg !1 {
|
||||
entry:
|
||||
;CHECK: DEBUG_VALUE
|
||||
%retval = alloca double ; <double*> [#uses=2]
|
||||
@ -32,7 +32,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
||||
!llvm.module.flags = !{!21}
|
||||
|
||||
!0 = !DILocalVariable(name: "my_r0", line: 11, arg: 1, scope: !1, file: !2, type: !7)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 11, file: !19, scope: !2, type: !4, function: double (%struct.Rect*)* @foo)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 11, file: !19, scope: !2, type: !4)
|
||||
!2 = !DIFile(filename: "b2.c", directory: "/tmp/")
|
||||
!3 = distinct !DICompileUnit(language: DW_LANG_C89, producer: "4.2.1 (Based on Apple Inc. build 5658) (LLVM build)", isOptimized: false, emissionKind: 0, file: !19, enums: !20, retainedTypes: !20, subprograms: !18)
|
||||
!4 = !DISubroutineType(types: !5)
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
%0 = type { double }
|
||||
|
||||
define hidden %0 @__divsc3(float %a, float %b, float %c, float %d) nounwind readnone {
|
||||
define hidden %0 @__divsc3(float %a, float %b, float %c, float %d) nounwind readnone !dbg !1 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata float %a, i64 0, metadata !0, metadata !DIExpression()), !dbg !DILocation(scope: !1)
|
||||
tail call void @llvm.dbg.value(metadata float %b, i64 0, metadata !11, metadata !DIExpression()), !dbg !DILocation(scope: !1)
|
||||
@ -200,7 +200,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!llvm.module.flags = !{!48}
|
||||
|
||||
!0 = !DILocalVariable(name: "a", line: 1921, arg: 1, scope: !1, file: !2, type: !9)
|
||||
!1 = distinct !DISubprogram(name: "__divsc3", linkageName: "__divsc3", line: 1922, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 1922, file: !45, scope: !2, type: !4, function: %0 (float, float, float, float)* @__divsc3, variables: !43)
|
||||
!1 = distinct !DISubprogram(name: "__divsc3", linkageName: "__divsc3", line: 1922, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 1922, file: !45, scope: !2, type: !4, variables: !43)
|
||||
!2 = !DIFile(filename: "libgcc2.c", directory: "/Users/yash/clean/LG.D/gcc/../../llvmgcc/gcc")
|
||||
!3 = distinct !DICompileUnit(language: DW_LANG_C89, producer: "4.2.1 (Based on Apple Inc. build 5658) (LLVM build)", isOptimized: true, emissionKind: 1, file: !45, enums: !47, retainedTypes: !47, subprograms: !44, imports: null)
|
||||
!4 = !DISubroutineType(types: !5)
|
||||
|
@ -7,7 +7,7 @@ target triple = "x86_64-apple-darwin10"
|
||||
|
||||
@llvm.used = appending global [1 x i8*] [i8* bitcast (i8* (%struct.a*)* @bar to i8*)], section "llvm.metadata" ; <[1 x i8*]*> [#uses=0]
|
||||
|
||||
define i8* @bar(%struct.a* %myvar) nounwind optsize noinline ssp {
|
||||
define i8* @bar(%struct.a* %myvar) nounwind optsize noinline ssp !dbg !9 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata %struct.a* %myvar, i64 0, metadata !8, metadata !DIExpression()), !dbg !DILocation(scope: !9)
|
||||
%0 = getelementptr inbounds %struct.a, %struct.a* %myvar, i64 0, i32 0, !dbg !28 ; <i32*> [#uses=1]
|
||||
@ -29,11 +29,11 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C89, producer: "4.2.1 (Based on Apple Inc. build 5658) (LLVM build)", isOptimized: true, emissionKind: 1, file: !36, enums: !37, retainedTypes: !37, subprograms: !32, globals: !31, imports: !37)
|
||||
!3 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!4 = !DILocalVariable(name: "x", line: 12, arg: 1, scope: !5, file: !1, type: !3)
|
||||
!5 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 13, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 13, file: !36, scope: !1, type: !6, function: void (i32)* @foo, variables: !33)
|
||||
!5 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 13, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 13, file: !36, scope: !1, type: !6, variables: !33)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{null, !3}
|
||||
!8 = !DILocalVariable(name: "myvar", line: 17, arg: 1, scope: !9, file: !1, type: !13)
|
||||
!9 = distinct !DISubprogram(name: "bar", linkageName: "bar", line: 17, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 17, file: !36, scope: !1, type: !10, function: i8* (%struct.a*)* @bar, variables: !34)
|
||||
!9 = distinct !DISubprogram(name: "bar", linkageName: "bar", line: 17, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 17, file: !36, scope: !1, type: !10, variables: !34)
|
||||
!10 = !DISubroutineType(types: !11)
|
||||
!11 = !{!12, !13}
|
||||
!12 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, file: !36, scope: !1, baseType: null)
|
||||
|
@ -2,7 +2,7 @@
|
||||
; RUN: llc -mtriple=x86_64-apple-darwin -regalloc=basic < %s | FileCheck %s
|
||||
; Test to check separate label for inlined function argument.
|
||||
|
||||
define i32 @foo(i32 %y) nounwind optsize ssp {
|
||||
define i32 @foo(i32 %y) nounwind optsize ssp !dbg !1 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i32 %y, i64 0, metadata !0, metadata !DIExpression()), !dbg !DILocation(scope: !1)
|
||||
%0 = tail call i32 (...) @zoo(i32 %y) nounwind, !dbg !9 ; <i32> [#uses=1]
|
||||
@ -13,7 +13,7 @@ declare i32 @zoo(...)
|
||||
|
||||
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnone
|
||||
|
||||
define i32 @bar(i32 %x) nounwind optsize ssp {
|
||||
define i32 @bar(i32 %x) nounwind optsize ssp !dbg !8 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i32 %x, i64 0, metadata !7, metadata !DIExpression()), !dbg !DILocation(scope: !8)
|
||||
tail call void @llvm.dbg.value(metadata i32 1, i64 0, metadata !0, metadata !DIExpression()) nounwind, !dbg !DILocation(scope: !1)
|
||||
@ -26,14 +26,14 @@ entry:
|
||||
!llvm.module.flags = !{!20}
|
||||
|
||||
!0 = !DILocalVariable(name: "y", line: 2, arg: 1, scope: !1, file: !2, type: !6)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 2, file: !18, scope: !2, type: !4, function: i32 (i32)* @foo, variables: !15)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 2, file: !18, scope: !2, type: !4, variables: !15)
|
||||
!2 = !DIFile(filename: "f.c", directory: "/tmp")
|
||||
!3 = distinct !DICompileUnit(language: DW_LANG_C89, producer: "4.2.1 (Based on Apple Inc. build 5658) (LLVM build)", isOptimized: true, emissionKind: 1, file: !18, enums: !19, retainedTypes: !19, subprograms: !17, imports: null)
|
||||
!4 = !DISubroutineType(types: !5)
|
||||
!5 = !{!6, !6}
|
||||
!6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!7 = !DILocalVariable(name: "x", line: 6, arg: 1, scope: !8, file: !2, type: !6)
|
||||
!8 = distinct !DISubprogram(name: "bar", linkageName: "bar", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 6, file: !18, scope: !2, type: !4, function: i32 (i32)* @bar, variables: !16)
|
||||
!8 = distinct !DISubprogram(name: "bar", linkageName: "bar", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 6, file: !18, scope: !2, type: !4, variables: !16)
|
||||
!9 = !DILocation(line: 3, scope: !10)
|
||||
!10 = distinct !DILexicalBlock(line: 2, column: 0, file: !18, scope: !1)
|
||||
!11 = !{i32 1}
|
||||
|
@ -7,7 +7,7 @@ target triple = "x86_64-apple-darwin10.2"
|
||||
|
||||
@llvm.used = appending global [1 x i8*] [i8* bitcast (i32 (%struct.foo*, i32)* @_ZN3foo3bazEi to i8*)], section "llvm.metadata" ; <[1 x i8*]*> [#uses=0]
|
||||
|
||||
define i32 @_ZN3foo3bazEi(%struct.foo* nocapture %this, i32 %x) nounwind readnone optsize noinline ssp align 2 {
|
||||
define i32 @_ZN3foo3bazEi(%struct.foo* nocapture %this, i32 %x) nounwind readnone optsize noinline ssp align 2 !dbg !8 {
|
||||
;CHECK: DEBUG_VALUE: baz:this <- RDI{{$}}
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata %struct.foo* %this, i64 0, metadata !15, metadata !DIExpression()), !dbg !DILocation(scope: !8)
|
||||
@ -24,14 +24,14 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!llvm.dbg.lv = !{!0, !14, !15, !16, !17, !24, !25, !28}
|
||||
|
||||
!0 = !DILocalVariable(name: "this", line: 11, arg: 1, scope: !1, file: !3, type: !12)
|
||||
!1 = distinct !DISubprogram(name: "bar", linkageName: "_ZN3foo3barEi", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 11, file: !31, scope: !2, type: !9, function: i32 (%struct.foo*, i32)* null)
|
||||
!1 = distinct !DISubprogram(name: "bar", linkageName: "_ZN3foo3barEi", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 11, file: !31, scope: !2, type: !9)
|
||||
!2 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", line: 3, size: 32, align: 32, file: !31, scope: !3, elements: !5)
|
||||
!3 = !DIFile(filename: "foo.cp", directory: "/tmp/")
|
||||
!4 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "4.2.1 LLVM build", isOptimized: true, emissionKind: 0, file: !31, enums: !32, retainedTypes: !32, subprograms: !33)
|
||||
!5 = !{!6, !1, !8}
|
||||
!6 = !DIDerivedType(tag: DW_TAG_member, name: "y", line: 8, size: 32, align: 32, file: !31, scope: !2, baseType: !7)
|
||||
!7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!8 = distinct !DISubprogram(name: "baz", linkageName: "_ZN3foo3bazEi", line: 15, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 15, file: !31, scope: !2, type: !9, function: i32 (%struct.foo*, i32)* @_ZN3foo3bazEi)
|
||||
!8 = distinct !DISubprogram(name: "baz", linkageName: "_ZN3foo3bazEi", line: 15, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 15, file: !31, scope: !2, type: !9)
|
||||
!9 = !DISubroutineType(types: !10)
|
||||
!10 = !{!7, !11, !7}
|
||||
!11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial, file: !31, scope: !3, baseType: !2)
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
%struct.SVal = type { i8*, i32 }
|
||||
|
||||
define i32 @_Z3fooi4SVal(i32 %i, %struct.SVal* noalias %location) nounwind ssp {
|
||||
define i32 @_Z3fooi4SVal(i32 %i, %struct.SVal* noalias %location) nounwind ssp !dbg !17 {
|
||||
entry:
|
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
|
||||
call void @llvm.dbg.value(metadata i32 %i, i64 0, metadata !23, metadata !DIExpression()), !dbg !24
|
||||
@ -31,7 +31,7 @@ return: ; preds = %bb2
|
||||
ret i32 %.0, !dbg !29
|
||||
}
|
||||
|
||||
define linkonce_odr void @_ZN4SValC1Ev(%struct.SVal* %this) nounwind ssp align 2 {
|
||||
define linkonce_odr void @_ZN4SValC1Ev(%struct.SVal* %this) nounwind ssp align 2 !dbg !16 {
|
||||
entry:
|
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
|
||||
call void @llvm.dbg.value(metadata %struct.SVal* %this, i64 0, metadata !31, metadata !DIExpression()), !dbg !34
|
||||
@ -47,7 +47,7 @@ return: ; preds = %entry
|
||||
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
||||
|
||||
define i32 @main() nounwind ssp {
|
||||
define i32 @main() nounwind ssp !dbg !20 {
|
||||
entry:
|
||||
%0 = alloca %struct.SVal ; <%struct.SVal*> [#uses=3]
|
||||
%v = alloca %struct.SVal ; <%struct.SVal*> [#uses=4]
|
||||
@ -94,11 +94,11 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!14 = !DISubroutineType(types: !15)
|
||||
!15 = !{null, !12}
|
||||
!16 = distinct !DISubprogram(name: "SVal", linkageName: "_ZN4SValC1Ev", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 11, file: !47, scope: !1, type: !14, function: void (%struct.SVal*)* @_ZN4SValC1Ev)
|
||||
!17 = distinct !DISubprogram(name: "foo", linkageName: "_Z3fooi4SVal", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 16, file: !47, scope: !2, type: !18, function: i32 (i32, %struct.SVal*)* @_Z3fooi4SVal)
|
||||
!16 = distinct !DISubprogram(name: "SVal", linkageName: "_ZN4SValC1Ev", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 11, file: !47, scope: !1, type: !14)
|
||||
!17 = distinct !DISubprogram(name: "foo", linkageName: "_Z3fooi4SVal", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 16, file: !47, scope: !2, type: !18)
|
||||
!18 = !DISubroutineType(types: !19)
|
||||
!19 = !{!13, !13, !1}
|
||||
!20 = distinct !DISubprogram(name: "main", linkageName: "main", line: 23, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 23, file: !47, scope: !2, type: !21, function: i32 ()* @main)
|
||||
!20 = distinct !DISubprogram(name: "main", linkageName: "main", line: 23, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 23, file: !47, scope: !2, type: !21)
|
||||
!21 = !DISubroutineType(types: !22)
|
||||
!22 = !{!13}
|
||||
!23 = !DILocalVariable(name: "i", line: 16, arg: 1, scope: !17, file: !2, type: !13)
|
||||
|
@ -2,12 +2,12 @@
|
||||
; Radar 8286101
|
||||
; CHECK: .file {{[0-9]+}} "<stdin>"
|
||||
|
||||
define i32 @foo() nounwind ssp {
|
||||
define i32 @foo() nounwind ssp !dbg !0 {
|
||||
entry:
|
||||
ret i32 42, !dbg !8
|
||||
}
|
||||
|
||||
define i32 @bar() nounwind ssp {
|
||||
define i32 @bar() nounwind ssp !dbg !6 {
|
||||
entry:
|
||||
ret i32 21, !dbg !10
|
||||
}
|
||||
@ -15,13 +15,13 @@ entry:
|
||||
!llvm.dbg.cu = !{!2}
|
||||
!llvm.module.flags = !{!17}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 53, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !14, scope: !1, type: !3, function: i32 ()* @foo)
|
||||
!0 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 53, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !14, scope: !1, type: !3)
|
||||
!1 = !DIFile(filename: "", directory: "/private/tmp")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 2.9 (trunk 114084)", isOptimized: false, emissionKind: 0, file: !15, enums: !16, retainedTypes: !16, subprograms: !13)
|
||||
!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: "bar", linkageName: "bar", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !15, scope: !7, type: !3, function: i32 ()* @bar)
|
||||
!6 = distinct !DISubprogram(name: "bar", linkageName: "bar", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !15, scope: !7, type: !3)
|
||||
!7 = !DIFile(filename: "bug.c", directory: "/private/tmp")
|
||||
!8 = !DILocation(line: 53, column: 13, scope: !9)
|
||||
!9 = distinct !DILexicalBlock(line: 53, column: 11, file: !14, scope: !0)
|
||||
|
@ -6,7 +6,7 @@ target triple = "i386-apple-darwin11.0.0"
|
||||
|
||||
%struct.bar = type { i32, i32 }
|
||||
|
||||
define i32 @foo(%struct.bar* nocapture %i) nounwind readnone optsize noinline ssp {
|
||||
define i32 @foo(%struct.bar* nocapture %i) nounwind readnone optsize noinline ssp !dbg !0 {
|
||||
; CHECK: TAG_formal_parameter
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata %struct.bar* %i, i64 0, metadata !6, metadata !DIExpression()), !dbg !12
|
||||
@ -18,7 +18,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!llvm.dbg.cu = !{!2}
|
||||
!llvm.module.flags = !{!19}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "foo", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !17, scope: !1, type: !3, function: i32 (%struct.bar*)* @foo, variables: !16)
|
||||
!0 = distinct !DISubprogram(name: "foo", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !17, scope: !1, type: !3, variables: !16)
|
||||
!1 = !DIFile(filename: "one.c", directory: "/private/tmp")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 2.9 (trunk 117922)", isOptimized: true, emissionKind: 0, file: !17, enums: !18, retainedTypes: !18, subprograms: !15, imports: null)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
|
@ -20,7 +20,7 @@ target triple = "x86_64-apple-darwin10.0.0"
|
||||
@.str1 = private unnamed_addr constant [14 x i8] c"m=%u, z_s=%d\0A\00"
|
||||
@str = internal constant [21 x i8] c"Failing test vector:\00"
|
||||
|
||||
define i64 @gcd(i64 %a, i64 %b) nounwind readnone optsize noinline ssp {
|
||||
define i64 @gcd(i64 %a, i64 %b) nounwind readnone optsize noinline ssp !dbg !0 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i64 %a, i64 0, metadata !10, metadata !DIExpression()), !dbg !18
|
||||
tail call void @llvm.dbg.value(metadata i64 %b, i64 0, metadata !11, metadata !DIExpression()), !dbg !19
|
||||
@ -38,7 +38,7 @@ if.then: ; preds = %while.body
|
||||
ret i64 %b.addr.0, !dbg !23
|
||||
}
|
||||
|
||||
define i32 @main() nounwind optsize ssp {
|
||||
define i32 @main() nounwind optsize ssp !dbg !6 {
|
||||
entry:
|
||||
%call = tail call i32 @rand() nounwind optsize, !dbg !24
|
||||
tail call void @llvm.dbg.value(metadata i32 %call, i64 0, metadata !14, metadata !DIExpression()), !dbg !24
|
||||
@ -78,13 +78,13 @@ declare i32 @puts(i8* nocapture) nounwind
|
||||
!llvm.dbg.cu = !{!2}
|
||||
!llvm.module.flags = !{!33}
|
||||
|
||||
!0 = distinct !DISubprogram(name: "gcd", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, file: !31, scope: !1, type: !3, function: i64 (i64, i64)* @gcd, variables: !29)
|
||||
!0 = distinct !DISubprogram(name: "gcd", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, file: !31, scope: !1, type: !3, variables: !29)
|
||||
!1 = !DIFile(filename: "rem_small.c", directory: "/private/tmp")
|
||||
!2 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 2.9 (trunk 124117)", isOptimized: true, emissionKind: 1, file: !31, enums: !32, retainedTypes: !32, subprograms: !28, imports: null)
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{!5}
|
||||
!5 = !DIBasicType(tag: DW_TAG_base_type, name: "long int", size: 64, align: 64, encoding: DW_ATE_signed)
|
||||
!6 = distinct !DISubprogram(name: "main", line: 25, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, file: !31, scope: !1, type: !7, function: i32 ()* @main, variables: !30)
|
||||
!6 = distinct !DISubprogram(name: "main", line: 25, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, file: !31, scope: !1, type: !7, variables: !30)
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
!8 = !{!9}
|
||||
!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
||||
|
||||
define signext i16 @subdivp(%struct.node.0.27* nocapture %p, double %dsq, double %tolsq, %struct.hgstruct.2.29* nocapture byval align 8 %hg) nounwind uwtable readonly ssp {
|
||||
define signext i16 @subdivp(%struct.node.0.27* nocapture %p, double %dsq, double %tolsq, %struct.hgstruct.2.29* nocapture byval align 8 %hg) nounwind uwtable readonly ssp !dbg !14 {
|
||||
entry:
|
||||
call void @llvm.dbg.declare(metadata %struct.hgstruct.2.29* %hg, metadata !4, metadata !DIExpression()), !dbg !DILocation(scope: !14)
|
||||
%type = getelementptr inbounds %struct.node.0.27, %struct.node.0.27* %p, i64 0, i32 0
|
||||
@ -47,6 +47,6 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!11 = !DIFile(filename: "MultiSource/Benchmarks/Olden/bh/newbh.c", directory: "MultiSource/Benchmarks/Olden/bh")
|
||||
!12 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
!13 = !{!14}
|
||||
!14 = distinct !DISubprogram(name: "subdivp", isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !11, scope: !5, type: !15, function: i16 (%struct.node.0.27*, double, double, %struct.hgstruct.2.29* )* @subdivp)
|
||||
!14 = distinct !DISubprogram(name: "subdivp", isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !11, scope: !5, type: !15)
|
||||
!15 = !DISubroutineType(types: !16)
|
||||
!16 = !{null}
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
||||
|
||||
define i32 @AttachGalley(%union.rec** nocapture %suspend_pt) nounwind uwtable ssp {
|
||||
define i32 @AttachGalley(%union.rec** nocapture %suspend_pt) nounwind uwtable ssp !dbg !21 {
|
||||
entry:
|
||||
%num14075 = alloca [20 x i8], align 16
|
||||
br label %if.end33
|
||||
@ -86,7 +86,7 @@ declare i32 @__sprintf_chk(i8*, i32, i64, i8*, ...)
|
||||
!19 = !DIFile(filename: "MultiSource/Benchmarks/MiBench/consumer-typeset/z19.c", directory: "MultiSource/Benchmarks/MiBench/consumer-typeset")
|
||||
|
||||
!20 = !{!21}
|
||||
!21 = distinct !DISubprogram(name: "AttachGalley", isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !19, scope: !14, type: !22, function: i32 (%union.rec**)* @AttachGalley)
|
||||
!21 = distinct !DISubprogram(name: "AttachGalley", isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !19, scope: !14, type: !22)
|
||||
!22 = !DISubroutineType(types: !23)
|
||||
!23 = !{null}
|
||||
|
||||
@ -99,7 +99,7 @@ declare i32 @__sprintf_chk(i8*, i32, i64, i8*, ...)
|
||||
%"class.__gnu_cxx::hash_map" = type { %"class.__gnu_cxx::hashtable" }
|
||||
%"class.__gnu_cxx::hashtable" = type { i64, i64, i64, i64, i64, i64 }
|
||||
|
||||
define void @main() uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
|
||||
define void @main() uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !dbg !37 {
|
||||
entry:
|
||||
%X = alloca %"class.__gnu_cxx::hash_map", align 8
|
||||
br i1 undef, label %cond.true, label %cond.end
|
||||
@ -141,4 +141,4 @@ declare void @_Znwm()
|
||||
!34 = !DIFile(filename: "SingleSource/Benchmarks/Shootout-C++/hash.cpp", directory: "SingleSource/Benchmarks/Shootout-C++")
|
||||
!35 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
!36 = !{!37}
|
||||
!37 = distinct !DISubprogram(name: "main", isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !19, scope: !14, type: !22, function: void ()* @main)
|
||||
!37 = distinct !DISubprogram(name: "main", isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !19, scope: !14, type: !22)
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
||||
|
||||
define void @test() unnamed_addr uwtable ssp align 2 {
|
||||
define void @test() unnamed_addr uwtable ssp align 2 !dbg !2 {
|
||||
entry:
|
||||
%callback = alloca %struct.btCompoundLeafCallback, align 8
|
||||
br i1 undef, label %if.end, label %if.then
|
||||
@ -38,7 +38,7 @@ invoke.cont44: ; preds = %if.end
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.3 (trunk 168984) (llvm/trunk 168983)", isOptimized: true, emissionKind: 0, file: !6, subprograms: !1)
|
||||
!1 = !{!2}
|
||||
!2 = distinct !DISubprogram(name: "test", isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !6, scope: !5, type: !7, function: void ()* @test)
|
||||
!2 = distinct !DISubprogram(name: "test", isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !6, scope: !5, type: !7)
|
||||
!3 = !DILocalVariable(name: "callback", line: 214, scope: !2, type: !4)
|
||||
!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "btCompoundLeafCallback", line: 90, size: 512, align: 64, file: !6)
|
||||
!5 = !DIFile(filename: "MultiSource/Benchmarks/Bullet/btCompoundCollisionAlgorithm.cpp", directory: "MultiSource/Benchmarks/Bullet")
|
||||
|
@ -3,7 +3,7 @@
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||
target triple = "x86_64-apple-macosx10.7.0"
|
||||
|
||||
define i32 @foo(i32 %i, i32* nocapture %c) nounwind uwtable readonly ssp {
|
||||
define i32 @foo(i32 %i, i32* nocapture %c) nounwind uwtable readonly ssp !dbg !1 {
|
||||
tail call void @llvm.dbg.value(metadata i32 %i, i64 0, metadata !6, metadata !DIExpression()), !dbg !12
|
||||
%ab = load i32, i32* %c, align 1, !dbg !14
|
||||
tail call void @llvm.dbg.value(metadata i32* %c, i64 0, metadata !7, metadata !DIExpression()), !dbg !13
|
||||
@ -29,7 +29,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!llvm.module.flags = !{!22}
|
||||
|
||||
!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: 1, file: !20, enums: !21, retainedTypes: !21, subprograms: !18, imports: null)
|
||||
!1 = distinct !DISubprogram(name: "foo", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, file: !20, scope: !2, type: !3, function: i32 (i32, i32*)* @foo, variables: !19)
|
||||
!1 = distinct !DISubprogram(name: "foo", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, file: !20, scope: !2, type: !3, variables: !19)
|
||||
!2 = !DIFile(filename: "a.c", directory: "/private/tmp")
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
!4 = !{!5}
|
||||
|
@ -48,7 +48,7 @@
|
||||
@.str2 = private unnamed_addr constant [2 x i8] c"-\00", align 1
|
||||
|
||||
; Function Attrs: uwtable
|
||||
define void @_Z3barii(i32 %param1, i32 %param2) #0 {
|
||||
define void @_Z3barii(i32 %param1, i32 %param2) #0 !dbg !24 {
|
||||
entry:
|
||||
%var1 = alloca %struct.AAA3, align 1
|
||||
%var2 = alloca %struct.AAA3, align 1
|
||||
@ -137,7 +137,7 @@ attributes #2 = { nounwind readnone }
|
||||
!21 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !22)
|
||||
!22 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !"_ZTS4AAA3")
|
||||
!23 = !{!24, !35, !40}
|
||||
!24 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barii", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !1, scope: !25, type: !26, function: void (i32, i32)* @_Z3barii, variables: !29)
|
||||
!24 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barii", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !1, scope: !25, type: !26, variables: !29)
|
||||
!25 = !DIFile(filename: "dbg-changes-codegen-branch-folding.cpp", directory: "/tmp/dbginfo")
|
||||
!26 = !DISubroutineType(types: !27)
|
||||
!27 = !{null, !28, !28}
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
; ModuleID = 'dbg-combine.c'
|
||||
; Function Attrs: nounwind uwtable
|
||||
define i32 @foo() #0 {
|
||||
define i32 @foo() #0 !dbg !4 {
|
||||
entry:
|
||||
%elems = alloca i32, align 4
|
||||
%saved_stack = alloca i8*
|
||||
@ -78,7 +78,7 @@ attributes #2 = { nounwind }
|
||||
!1 = !DIFile(filename: "dbg-combine.c", directory: "/home/probinson/projects/scratch")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "foo", line: 1, isLocal: false, isDefinition: true, isOptimized: false, scopeLine: 2, file: !1, scope: !5, type: !6, function: i32 ()* @foo, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "foo", line: 1, isLocal: false, isDefinition: true, isOptimized: false, scopeLine: 2, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!5 = !DIFile(filename: "dbg-combine.c", directory: "/home/probinson/projects/scratch")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8}
|
||||
|
@ -3,7 +3,7 @@
|
||||
; CHECK-LABEL: _Z3foov:
|
||||
; CHECK: .loc 1 4 3 prologue_end
|
||||
; CHECK: .cfi_escape 0x2e, 0x10
|
||||
define void @_Z3foov() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
|
||||
define void @_Z3foov() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !dbg !4 {
|
||||
entry:
|
||||
tail call void @_Z3bariii(i32 0, i32 1, i32 2) #1, !dbg !10
|
||||
invoke void @_Z3bariii(i32 4, i32 5, i32 6) #1
|
||||
@ -42,7 +42,7 @@ attributes #2 = { nounwind }
|
||||
!1 = !DIFile(filename: "foo.cpp", directory: "foo")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, function: void ()* @_Z3foov, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, variables: !2)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{null}
|
||||
!7 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
|
@ -3,7 +3,7 @@
|
||||
@g1 = global double 0.000000e+00, align 8
|
||||
@g2 = global i32 0, align 4
|
||||
|
||||
define void @_Z16fpuop_arithmeticjj(i32, i32) {
|
||||
define void @_Z16fpuop_arithmeticjj(i32, i32) !dbg !4 {
|
||||
entry:
|
||||
switch i32 undef, label %sw.bb.i1921 [
|
||||
]
|
||||
@ -47,7 +47,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!1 = !DIFile(filename: "fpu_ieee.cpp", directory: "x87stackifier")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "fpuop_arithmetic", linkageName: "_Z16fpuop_arithmeticjj", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 13, file: !5, scope: !6, type: !7, function: void (i32, i32)* @_Z16fpuop_arithmeticjj, variables: !10)
|
||||
!4 = distinct !DISubprogram(name: "fpuop_arithmetic", linkageName: "_Z16fpuop_arithmeticjj", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 13, file: !5, scope: !6, type: !7, variables: !10)
|
||||
!5 = !DIFile(filename: "f1.cpp", directory: "x87stackifier")
|
||||
!6 = !DIFile(filename: "f1.cpp", directory: "x87stackifier")
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
|
@ -54,7 +54,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, isOptimized: true, runtimeVersion: 0, emissionKind: 1)
|
||||
!1 = !DIFile(filename: "24199.cpp", directory: "/bin")
|
||||
!2 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!3 = distinct !DISubprogram(linkageName: "foo", file: !1, line: 18, isLocal: false, isDefinition: true, scopeLine: 18, function: void (%struct.A*)* @foo)
|
||||
!3 = distinct !DISubprogram(linkageName: "foo", file: !1, line: 18, isLocal: false, isDefinition: true, scopeLine: 18)
|
||||
!4 = !DIExpression()
|
||||
!5 = !DILocalVariable(name: "this", arg: 1, scope: !3, flags: DIFlagArtificial | DIFlagObjectPointer)
|
||||
!6 = !DILocation(line: 0, scope: !3)
|
||||
|
@ -43,7 +43,7 @@ entry:
|
||||
; CHECK-LABEL: test_with_debug
|
||||
; CHECK: movl [[A]], [[B]]
|
||||
; CHECK-NEXT: movl [[A]], [[C]]
|
||||
define void @test_with_debug() {
|
||||
define void @test_with_debug() !dbg !13 {
|
||||
entry:
|
||||
%c = alloca %class.C, align 1
|
||||
%0 = load i8, i8* @argc, align 1
|
||||
@ -75,7 +75,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!10 = !DIDerivedType(baseType: !"_ZTS1C", tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial)
|
||||
!11 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
|
||||
!12 = !{!13}
|
||||
!13 = distinct !DISubprogram(name: "test_with_debug", linkageName: "test_with_debug", line: 6, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !1, scope: !14, type: !15, function: void ()* @test_with_debug, variables: !17)
|
||||
!13 = distinct !DISubprogram(name: "test_with_debug", linkageName: "test_with_debug", line: 6, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !1, scope: !14, type: !15, variables: !17)
|
||||
!14 = !DIFile(filename: "test.cpp", directory: "")
|
||||
!15 = !DISubroutineType(types: !16)
|
||||
!16 = !{null}
|
||||
|
@ -4,7 +4,7 @@ target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
|
||||
target triple = "i686-pc-linux"
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define void @test() #0 {
|
||||
define void @test() #0 !dbg !4 {
|
||||
entry:
|
||||
call void bitcast (void (...)* @bar to void ()*)(), !dbg !11
|
||||
ret void, !dbg !12
|
||||
@ -23,7 +23,7 @@ attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-
|
||||
!1 = !DIFile(filename: "test.c", directory: "movpc-test")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, isOptimized: false, function: void ()* @test, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, isOptimized: false, variables: !2)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{null}
|
||||
!7 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
|
@ -18,7 +18,7 @@ define void @f1() {
|
||||
!1 = !DIFile(filename: "file.c", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 2, file: !1, scope: !1, type: !6, function: i32 ()* null, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 2, file: !1, scope: !1, type: !6, variables: !2)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8}
|
||||
!8 = !DIBasicType(tag: DW_TAG_base_type, size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -25,7 +25,7 @@ declare x86_stdcallcc void @stdfoo(i32, i32) #0
|
||||
; CHECK: .cfi_adjust_cfa_offset -8
|
||||
; CHECK: addl $8, %esp
|
||||
; CHECK: .cfi_adjust_cfa_offset -8
|
||||
define void @test1() #0 {
|
||||
define void @test1() #0 !dbg !4 {
|
||||
entry:
|
||||
tail call void @foo(i32 1, i32 2) #1, !dbg !10
|
||||
tail call x86_stdcallcc void @stdfoo(i32 3, i32 4) #1, !dbg !11
|
||||
@ -42,7 +42,7 @@ attributes #0 = { nounwind optsize }
|
||||
!1 = !DIFile(filename: "foo.c", directory: "foo")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "test1", scope: !1, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, isOptimized: true, function: void ()* @test1, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "test1", scope: !1, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, isOptimized: true, variables: !2)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{null}
|
||||
!7 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
|
@ -8,7 +8,7 @@
|
||||
@a = external global { i64, [56 x i8] }, align 32
|
||||
|
||||
; Function Attrs: nounwind sspreq
|
||||
define i32 @_Z18read_response_sizev() #0 {
|
||||
define i32 @_Z18read_response_sizev() #0 !dbg !9 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata !22, i64 0, metadata !23, metadata !DIExpression()), !dbg !39
|
||||
%0 = load i64, i64* getelementptr inbounds ({ i64, [56 x i8] }, { i64, [56 x i8] }* @a, i32 0, i32 0), align 8, !dbg !40
|
||||
@ -34,7 +34,7 @@ attributes #0 = { sspreq }
|
||||
!6 = !{!7}
|
||||
!7 = !DIEnumerator(name: "max_frame_size", value: 0) ; [ DW_TAG_enumerator ] [max_frame_size :: 0]
|
||||
!8 = !{!9, !24, !41, !65}
|
||||
!9 = distinct !DISubprogram(name: "read_response_size", linkageName: "_Z18read_response_sizev", line: 27, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 27, file: !1, scope: !10, type: !11, function: i32 ()* @_Z18read_response_sizev, variables: !14)
|
||||
!9 = distinct !DISubprogram(name: "read_response_size", linkageName: "_Z18read_response_sizev", line: 27, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 27, file: !1, scope: !10, type: !11, variables: !14)
|
||||
!10 = !DIFile(filename: "<unknown>", directory: "/Users/matt/ryan_bug")
|
||||
!11 = !DISubroutineType(types: !12)
|
||||
!12 = !{!13}
|
||||
|
@ -10,7 +10,7 @@
|
||||
; CHECK-NEXT: idivl
|
||||
; CHECK-NEXT: .loc 1 4 3
|
||||
|
||||
define i32 @foo(i32 %w, i32 %x, i32 %y, i32 %z) nounwind {
|
||||
define i32 @foo(i32 %w, i32 %x, i32 %y, i32 %z) nounwind !dbg !1 {
|
||||
entry:
|
||||
%a = add i32 %w, %x, !dbg !8
|
||||
%b = sdiv i32 %a, %y
|
||||
@ -22,7 +22,7 @@ entry:
|
||||
!llvm.module.flags = !{!12}
|
||||
|
||||
!0 = !DILocalVariable(name: "x", line: 1, arg: 2, scope: !1, file: !2, type: !6)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 1, file: !10, scope: !2, type: !4, function: i32 (i32, i32, i32, i32)* @foo)
|
||||
!1 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 1, file: !10, scope: !2, type: !4)
|
||||
!2 = !DIFile(filename: "test.c", directory: "/dir")
|
||||
!3 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "producer", isOptimized: false, emissionKind: 0, file: !10, enums: !11, retainedTypes: !11, subprograms: !9)
|
||||
!4 = !DISubroutineType(types: !5)
|
||||
|
@ -9,7 +9,7 @@
|
||||
; CHECK: .loc 1 2 0 prologue_end # test.c:2:0
|
||||
; CHECK: add r0, r0, 1
|
||||
; CHECK: retsp 2
|
||||
define i32 @f(i32 %a) {
|
||||
define i32 @f(i32 %a) !dbg !4 {
|
||||
entry:
|
||||
%a.addr = alloca i32, align 4
|
||||
store i32 %a, i32* %a.addr, align 4
|
||||
@ -27,7 +27,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
|
||||
!1 = !DIFile(filename: "test.c", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "f", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !1, type: !6, function: i32 (i32)* @f, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "f", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !1, type: !6, variables: !2)
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !8}
|
||||
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -26,7 +26,7 @@ target triple = "aarch64-apple-ios"
|
||||
@_ZTV1B = external unnamed_addr constant [4 x i8*]
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define %struct.B* @_ZN1BC2Ev(%struct.B* %this) unnamed_addr #0 align 2 {
|
||||
define %struct.B* @_ZN1BC2Ev(%struct.B* %this) unnamed_addr #0 align 2 !dbg !28 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata %struct.B* %this, i64 0, metadata !30, metadata !38), !dbg !39
|
||||
%0 = getelementptr inbounds %struct.B, %struct.B* %this, i64 0, i32 0, !dbg !40
|
||||
@ -39,7 +39,7 @@ entry:
|
||||
declare %struct.A* @_ZN1AC2Ev(%struct.A*)
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define %struct.B* @_ZN1BC1Ev(%struct.B* %this) unnamed_addr #0 align 2 {
|
||||
define %struct.B* @_ZN1BC1Ev(%struct.B* %this) unnamed_addr #0 align 2 !dbg !32 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata %struct.B* %this, i64 0, metadata !34, metadata !38), !dbg !44
|
||||
tail call void @llvm.dbg.value(metadata %struct.B* %this, i64 0, metadata !45, metadata !38) #3, !dbg !47
|
||||
@ -89,11 +89,11 @@ attributes #3 = { nounwind }
|
||||
!25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
|
||||
!26 = !DISubprogram(name: "~A", line: 3, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !"_ZTS1A", type: !23, containingType: !"_ZTS1A")
|
||||
!27 = !{!28, !32}
|
||||
!28 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, function: %struct.B* (%struct.B*)* @_ZN1BC2Ev, declaration: !8, variables: !29)
|
||||
!28 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, declaration: !8, variables: !29)
|
||||
!29 = !{!30}
|
||||
!30 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !28, type: !31)
|
||||
!31 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1B")
|
||||
!32 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC1Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, function: %struct.B* (%struct.B*)* @_ZN1BC1Ev, declaration: !8, variables: !33)
|
||||
!32 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC1Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, declaration: !8, variables: !33)
|
||||
!33 = !{!34}
|
||||
!34 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !32, type: !31)
|
||||
!35 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
|
@ -14,7 +14,7 @@ target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
|
||||
target triple = "arm64-apple-ios"
|
||||
|
||||
; Function Attrs: nounwind optsize
|
||||
define void @_Z5startv() #0 {
|
||||
define void @_Z5startv() #0 !dbg !4 {
|
||||
entry:
|
||||
%size = alloca i32, align 4
|
||||
%0 = bitcast i32* %size to i8*, !dbg !15
|
||||
@ -48,7 +48,7 @@ attributes #3 = { nounwind optsize }
|
||||
!1 = !DIFile(filename: "<stdin>", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "start", linkageName: "_Z5startv", line: 2, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !6, type: !7, function: void ()* @_Z5startv, variables: !9)
|
||||
!4 = distinct !DISubprogram(name: "start", linkageName: "_Z5startv", line: 2, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !6, type: !7, variables: !9)
|
||||
!5 = !DIFile(filename: "test1.c", directory: "")
|
||||
!6 = !DIFile(filename: "test1.c", directory: "")
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
|
@ -13,7 +13,7 @@ target triple = "aarch64--linux-gnueabihf"
|
||||
; CHECK: movn
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define i32 @main() {
|
||||
define i32 @main() !dbg !4 {
|
||||
entry:
|
||||
%retval = alloca i32, align 4
|
||||
store i32 0, i32* %retval
|
||||
@ -27,7 +27,7 @@ entry:
|
||||
!1 = !DIFile(filename: "test.c", directory: "/home/user/clang/build")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, function: i32 ()* @main, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{!7}
|
||||
!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -18,7 +18,7 @@
|
||||
; CHECK-4: DW_AT_high_pc [DW_FORM_data4] (0x00000008)
|
||||
; CHECK-3: DW_AT_high_pc [DW_FORM_addr] (0x0000000000000008)
|
||||
|
||||
define i32 @main() nounwind {
|
||||
define i32 @main() nounwind !dbg !3 {
|
||||
ret i32 0, !dbg !8
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ attributes #0 = { nounwind }
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.3 ", isOptimized: false, emissionKind: 0, file: !9, enums: !1, retainedTypes: !1, subprograms: !2, globals: !1, imports: !1)
|
||||
!1 = !{}
|
||||
!2 = !{!3}
|
||||
!3 = distinct !DISubprogram(name: "main", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 1, file: !9, scope: !4, type: !5, function: i32 ()* @main, variables: !1)
|
||||
!3 = distinct !DISubprogram(name: "main", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 1, file: !9, scope: !4, type: !5, variables: !1)
|
||||
!4 = !DIFile(filename: "tmp.c", directory: "/home/tim/llvm/build")
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{!7}
|
||||
|
@ -42,7 +42,7 @@ target triple = "aarch64-apple-ios"
|
||||
@a = global i64 0, align 8
|
||||
@b = global i32* null, align 8
|
||||
|
||||
define void @_Z3f131A(%struct.A* nocapture readonly %p1) #0 {
|
||||
define void @_Z3f131A(%struct.A* nocapture readonly %p1) #0 !dbg !25 {
|
||||
entry:
|
||||
%agg.tmp = alloca %struct.A, align 8
|
||||
tail call void @llvm.dbg.declare(metadata %struct.A* %p1, metadata !30, metadata !46), !dbg !47
|
||||
@ -67,7 +67,7 @@ declare void @_Z2f91A(%struct.A*) #0
|
||||
; Function Attrs: nounwind
|
||||
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #3
|
||||
|
||||
define void @_Z3f111A(%struct.A* nocapture readonly %p1) #0 {
|
||||
define void @_Z3f111A(%struct.A* nocapture readonly %p1) #0 !dbg !31 {
|
||||
entry:
|
||||
%agg.tmp.i = alloca %struct.A, align 8
|
||||
tail call void @llvm.dbg.declare(metadata %struct.A* %p1, metadata !33, metadata !46), !dbg !63
|
||||
@ -83,7 +83,7 @@ entry:
|
||||
ret void, !dbg !73
|
||||
}
|
||||
|
||||
define void @_Z3f16v() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
|
||||
define void @_Z3f16v() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !dbg !34 {
|
||||
entry:
|
||||
%agg.tmp.i.i = alloca %struct.A, align 8
|
||||
%d = alloca %struct.B, align 1
|
||||
@ -185,16 +185,16 @@ attributes #5 = { builtin }
|
||||
!22 = !DISubroutineType(types: !23)
|
||||
!23 = !{null, !19}
|
||||
!24 = !{!25, !31, !34}
|
||||
!25 = distinct !DISubprogram(name: "f13", linkageName: "_Z3f131A", line: 13, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 13, file: !5, scope: !26, type: !27, function: void (%struct.A*)* @_Z3f131A, variables: !29)
|
||||
!25 = distinct !DISubprogram(name: "f13", linkageName: "_Z3f131A", line: 13, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 13, file: !5, scope: !26, type: !27, variables: !29)
|
||||
!26 = !DIFile(filename: "test.cpp", directory: "")
|
||||
!27 = !DISubroutineType(types: !28)
|
||||
!28 = !{null, !"_ZTS1A"}
|
||||
!29 = !{!30}
|
||||
!30 = !DILocalVariable(name: "p1", line: 13, arg: 1, scope: !25, file: !26, type: !"_ZTS1A")
|
||||
!31 = distinct !DISubprogram(name: "f11", linkageName: "_Z3f111A", line: 17, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 17, file: !5, scope: !26, type: !27, function: void (%struct.A*)* @_Z3f111A, variables: !32)
|
||||
!31 = distinct !DISubprogram(name: "f11", linkageName: "_Z3f111A", line: 17, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 17, file: !5, scope: !26, type: !27, variables: !32)
|
||||
!32 = !{!33}
|
||||
!33 = !DILocalVariable(name: "p1", line: 17, arg: 1, scope: !31, file: !26, type: !"_ZTS1A")
|
||||
!34 = distinct !DISubprogram(name: "f16", linkageName: "_Z3f16v", line: 18, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 18, file: !5, scope: !26, type: !35, function: void ()* @_Z3f16v, variables: !37)
|
||||
!34 = distinct !DISubprogram(name: "f16", linkageName: "_Z3f16v", line: 18, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 18, file: !5, scope: !26, type: !35, variables: !37)
|
||||
!35 = !DISubroutineType(types: !36)
|
||||
!36 = !{null}
|
||||
!37 = !{!38, !39}
|
||||
|
@ -6,7 +6,7 @@
|
||||
; func();
|
||||
; }
|
||||
|
||||
define void @prologue_end_test() nounwind uwtable {
|
||||
define void @prologue_end_test() nounwind uwtable !dbg !4 {
|
||||
; CHECK: prologue_end_test:
|
||||
; CHECK: .cfi_startproc
|
||||
; CHECK: stp x29, x30
|
||||
@ -31,7 +31,7 @@ declare i32 @func()
|
||||
!1 = !DIFile(filename: "foo.c", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "prologue_end_test", scope: !1, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, function: void ()* @prologue_end_test, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "prologue_end_test", scope: !1, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, variables: !2)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{null}
|
||||
!7 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
|
@ -31,7 +31,7 @@ target triple = "arm64-apple-ios3.0.0"
|
||||
%struct.five = type { i32, i32, i32, i32, i32 }
|
||||
|
||||
; Function Attrs: nounwind ssp
|
||||
define i32 @return_five_int(%struct.five* %f) #0 {
|
||||
define i32 @return_five_int(%struct.five* %f) #0 !dbg !4 {
|
||||
entry:
|
||||
call void @llvm.dbg.declare(metadata %struct.five* %f, metadata !17, metadata !DIExpression(DW_OP_deref)), !dbg !18
|
||||
%a = getelementptr inbounds %struct.five, %struct.five* %f, i32 0, i32 0, !dbg !19
|
||||
@ -52,7 +52,7 @@ attributes #1 = { nounwind readnone }
|
||||
!1 = !DIFile(filename: "struct_by_value.c", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "return_five_int", line: 13, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 14, file: !1, scope: !5, type: !6, function: i32 (%struct.five*)* @return_five_int, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "return_five_int", line: 13, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 14, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!5 = !DIFile(filename: "struct_by_value.c", directory: "")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8, !9}
|
||||
|
@ -13,7 +13,7 @@ target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:64:64-
|
||||
target triple = "thumbv7-apple-ios"
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define arm_aapcscc void @_Z1hiiiif(i32, i32, i32, i32, float %x) #0 {
|
||||
define arm_aapcscc void @_Z1hiiiif(i32, i32, i32, i32, float %x) #0 !dbg !4 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !12, metadata !DIExpression()), !dbg !18
|
||||
tail call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !13, metadata !DIExpression()), !dbg !18
|
||||
@ -45,7 +45,7 @@ attributes #3 = { nounwind }
|
||||
!1 = !DIFile(filename: "/<unknown>", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "h", linkageName: "_Z1hiiiif", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !6, type: !7, function: void (i32, i32, i32, i32, float)* @_Z1hiiiif, variables: !11)
|
||||
!4 = distinct !DISubprogram(name: "h", linkageName: "_Z1hiiiif", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !6, type: !7, variables: !11)
|
||||
!5 = !DIFile(filename: "/arm.cpp", directory: "")
|
||||
!6 = !DIFile(filename: "/arm.cpp", directory: "")
|
||||
!7 = !DISubroutineType(types: !8)
|
||||
|
@ -27,7 +27,7 @@ target triple = "thumbv7-apple-ios"
|
||||
@_ZTV1B = external unnamed_addr constant [4 x i8*]
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define %struct.B* @_ZN1BC2Ev(%struct.B* %this) unnamed_addr #0 align 2 {
|
||||
define %struct.B* @_ZN1BC2Ev(%struct.B* %this) unnamed_addr #0 align 2 !dbg !28 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata %struct.B* %this, i64 0, metadata !30, metadata !40), !dbg !41
|
||||
%0 = getelementptr inbounds %struct.B, %struct.B* %this, i32 0, i32 0, !dbg !42
|
||||
@ -40,7 +40,7 @@ entry:
|
||||
declare %struct.A* @_ZN1AC2Ev(%struct.A*)
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define %struct.B* @_ZN1BC1Ev(%struct.B* %this) unnamed_addr #0 align 2 {
|
||||
define %struct.B* @_ZN1BC1Ev(%struct.B* %this) unnamed_addr #0 align 2 !dbg !32 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata %struct.B* %this, i64 0, metadata !34, metadata !40), !dbg !46
|
||||
tail call void @llvm.dbg.value(metadata %struct.B* %this, i64 0, metadata !47, metadata !40) #3, !dbg !49
|
||||
@ -90,11 +90,11 @@ attributes #3 = { nounwind }
|
||||
!25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
|
||||
!26 = !DISubprogram(name: "~A", line: 3, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !"_ZTS1A", type: !23, containingType: !"_ZTS1A")
|
||||
!27 = !{!28, !32}
|
||||
!28 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, function: %struct.B* (%struct.B*)* @_ZN1BC2Ev, declaration: !8, variables: !29)
|
||||
!28 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, declaration: !8, variables: !29)
|
||||
!29 = !{!30}
|
||||
!30 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !28, type: !31)
|
||||
!31 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !"_ZTS1B")
|
||||
!32 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC1Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, function: %struct.B* (%struct.B*)* @_ZN1BC1Ev, declaration: !8, variables: !33)
|
||||
!32 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC1Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, declaration: !8, variables: !33)
|
||||
!33 = !{!34}
|
||||
!34 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !32, type: !31)
|
||||
!35 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
|
@ -13,7 +13,7 @@ target triple = "armv7--linux-gnueabihf"
|
||||
; CHECK: mvn
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define i32 @main() {
|
||||
define i32 @main() !dbg !4 {
|
||||
entry:
|
||||
%retval = alloca i32, align 4
|
||||
store i32 0, i32* %retval
|
||||
@ -27,7 +27,7 @@ entry:
|
||||
!1 = !DIFile(filename: "test.c", directory: "/home/user/clang/build")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, function: i32 ()* @main, variables: !2)
|
||||
!4 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{!7}
|
||||
!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -16,7 +16,7 @@
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7--none-eabi"
|
||||
|
||||
define float @foo(float %p) {
|
||||
define float @foo(float %p) !dbg !4 {
|
||||
entry:
|
||||
tail call void @llvm.dbg.value(metadata float %p, i64 0, metadata !9, metadata !15), !dbg !16
|
||||
ret float %p, !dbg !18
|
||||
@ -31,7 +31,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!1 = !DIFile(filename: "test.c", directory: "")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, function: float (float)* @foo, variables: !8)
|
||||
!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, variables: !8)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{!7, !7}
|
||||
!7 = !DIBasicType(name: "float", size: 32, align: 32, encoding: DW_ATE_float)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user