[LLVM-C] Add Accessors For Global Variable Metadata Properties

Summary: Metadata for a global variable is really a  (GlobalVariable, Expression) tuple.  Allow access to these, then allow retrieving the file, scope, and line for a DIVariable, whether global or local.  This should be the last of the accessors required for uniform access to location and file information metadata.

Reviewers: jberdine, whitequark, deadalnix

Reviewed By: jberdine, whitequark

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D60725

llvm-svn: 358532
This commit is contained in:
Robert Widmann 2019-04-16 21:39:48 +00:00
parent e8de5cd602
commit d6eb4bb801
2 changed files with 75 additions and 0 deletions

View File

@ -1038,6 +1038,48 @@ LLVMMetadataRef LLVMDIBuilderCreateGlobalVariableExpression(
size_t NameLen, const char *Linkage, size_t LinkLen, LLVMMetadataRef File,
unsigned LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit,
LLVMMetadataRef Expr, LLVMMetadataRef Decl, uint32_t AlignInBits);
/**
* Retrieves the \c DIVariable associated with this global variable expression.
* \param GVE The global variable expression.
*
* @see llvm::DIGlobalVariableExpression::getVariable()
*/
LLVMMetadataRef LLVMDIGlobalVariableExpressionGetVariable(LLVMMetadataRef GVE);
/**
* Retrieves the \c DIExpression associated with this global variable expression.
* \param GVE The global variable expression.
*
* @see llvm::DIGlobalVariableExpression::getExpression()
*/
LLVMMetadataRef LLVMDIGlobalVariableExpressionGetExpression(
LLVMMetadataRef GVE);
/**
* Get the metadata of the file associated with a given variable.
* \param Var The variable object.
*
* @see DIVariable::getFile()
*/
LLVMMetadataRef LLVMDIVariableGetFile(LLVMMetadataRef Var);
/**
* Get the metadata of the scope associated with a given variable.
* \param Var The variable object.
*
* @see DIVariable::getScope()
*/
LLVMMetadataRef LLVMDIVariableGetScope(LLVMMetadataRef Var);
/**
* Get the source line where this \c DIVariable is declared.
* \param Var The DIVariable.
*
* @see DIVariable::getLine()
*/
unsigned LLVMDIVariableGetLine(LLVMMetadataRef Var);
/**
* Create a new temporary \c MDNode. Suitable for use in constructing cyclic
* \c MDNode structures. A temporary \c MDNode is not uniqued, may be RAUW'd,
@ -1201,6 +1243,14 @@ LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func);
*/
void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP);
/**
* Get the line associated with a given subprogram.
* \param Subprogram The subprogram object.
*
* @see DISubprogram::getLine()
*/
unsigned LLVMDISubprogramGetLine(LLVMMetadataRef Subprogram);
/**
* Get the debug location for the given instruction.
*

View File

@ -1248,6 +1248,27 @@ LLVMMetadataRef LLVMDIBuilderCreateGlobalVariableExpression(
nullptr, AlignInBits));
}
LLVMMetadataRef LLVMDIGlobalVariableExpressionGetVariable(LLVMMetadataRef GVE) {
return wrap(unwrapDI<DIGlobalVariableExpression>(GVE)->getVariable());
}
LLVMMetadataRef LLVMDIGlobalVariableExpressionGetExpression(
LLVMMetadataRef GVE) {
return wrap(unwrapDI<DIGlobalVariableExpression>(GVE)->getExpression());
}
LLVMMetadataRef LLVMDIVariableGetFile(LLVMMetadataRef Var) {
return wrap(unwrapDI<DIVariable>(Var)->getFile());
}
LLVMMetadataRef LLVMDIVariableGetScope(LLVMMetadataRef Var) {
return wrap(unwrapDI<DIVariable>(Var)->getScope());
}
unsigned LLVMDIVariableGetLine(LLVMMetadataRef Var) {
return unwrapDI<DIVariable>(Var)->getLine();
}
LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef *Data,
size_t Count) {
return wrap(
@ -1359,6 +1380,10 @@ void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP) {
unwrap<Function>(Func)->setSubprogram(unwrap<DISubprogram>(SP));
}
unsigned LLVMDISubprogramGetLine(LLVMMetadataRef Subprogram) {
return unwrapDI<DISubprogram>(Subprogram)->getLine();
}
LLVMMetadataRef LLVMInstructionGetDebugLoc(LLVMValueRef Inst) {
return wrap(unwrap<Instruction>(Inst)->getDebugLoc().getAsMDNode());
}