DIBuilder: Use Constant instead of Value

Make explicit the requirement that most IR values in `DIBuilder` are
`Constant`.  This requires a follow-up change in clang.

Part of PR21532.

llvm-svn: 222070
This commit is contained in:
Duncan P. N. Exon Smith 2014-11-15 00:23:49 +00:00
parent 3196805321
commit dbf64acd29
2 changed files with 37 additions and 47 deletions

View File

@ -27,6 +27,7 @@ namespace llvm {
class Function; class Function;
class Module; class Module;
class Value; class Value;
class Constant;
class LLVMContext; class LLVMContext;
class MDNode; class MDNode;
class StringRef; class StringRef;
@ -211,10 +212,10 @@ namespace llvm {
/// @param Ty Type of the static member. /// @param Ty Type of the static member.
/// @param Flags Flags to encode member attribute, e.g. private. /// @param Flags Flags to encode member attribute, e.g. private.
/// @param Val Const initializer of the member. /// @param Val Const initializer of the member.
DIDerivedType DIDerivedType createStaticMemberType(DIDescriptor Scope, StringRef Name,
createStaticMemberType(DIDescriptor Scope, StringRef Name, DIFile File, unsigned LineNo,
DIFile File, unsigned LineNo, DIType Ty, DIType Ty, unsigned Flags,
unsigned Flags, llvm::Value *Val); llvm::Constant *Val);
/// createObjCIVar - Create debugging information entry for Objective-C /// createObjCIVar - Create debugging information entry for Objective-C
/// instance variable. /// instance variable.
@ -333,8 +334,8 @@ namespace llvm {
/// @param LineNo Line number. /// @param LineNo Line number.
/// @param ColumnNo Column Number. /// @param ColumnNo Column Number.
DITemplateValueParameter DITemplateValueParameter
createTemplateValueParameter(DIDescriptor Scope, StringRef Name, createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
DIType Ty, Value *Val, MDNode *File = nullptr, Constant *Val, MDNode *File = nullptr,
unsigned LineNo = 0, unsigned ColumnNo = 0); unsigned LineNo = 0, unsigned ColumnNo = 0);
/// \brief Create debugging information for a template template parameter. /// \brief Create debugging information for a template template parameter.
@ -458,21 +459,19 @@ namespace llvm {
/// externally visible or not. /// externally visible or not.
/// @param Val llvm::Value of the variable. /// @param Val llvm::Value of the variable.
/// @param Decl Reference to the corresponding declaration. /// @param Decl Reference to the corresponding declaration.
DIGlobalVariable DIGlobalVariable createGlobalVariable(DIDescriptor Context, StringRef Name,
createGlobalVariable(DIDescriptor Context, StringRef Name, StringRef LinkageName, DIFile File,
StringRef LinkageName, DIFile File, unsigned LineNo, unsigned LineNo, DITypeRef Ty,
DITypeRef Ty, bool isLocalToUnit, llvm::Value *Val, bool isLocalToUnit,
MDNode *Decl = nullptr); llvm::Constant *Val,
MDNode *Decl = nullptr);
/// createTempGlobalVariableFwdDecl - Identical to createGlobalVariable /// createTempGlobalVariableFwdDecl - Identical to createGlobalVariable
/// except that the resulting DbgNode is temporary and meant to be RAUWed. /// except that the resulting DbgNode is temporary and meant to be RAUWed.
DIGlobalVariable DIGlobalVariable createTempGlobalVariableFwdDecl(
createTempGlobalVariableFwdDecl(DIDescriptor Context, StringRef Name, DIDescriptor Context, StringRef Name, StringRef LinkageName,
StringRef LinkageName, DIFile File, DIFile File, unsigned LineNo, DITypeRef Ty, bool isLocalToUnit,
unsigned LineNo, DITypeRef Ty, llvm::Constant *Val, MDNode *Decl = nullptr);
bool isLocalToUnit, llvm::Value *Val,
MDNode *Decl = nullptr);
/// createLocalVariable - Create a new descriptor for the specified /// createLocalVariable - Create a new descriptor for the specified
/// local variable. /// local variable.

View File

@ -406,11 +406,11 @@ DIDerivedType DIBuilder::createMemberType(DIDescriptor Scope, StringRef Name,
return DIDerivedType(MDNode::get(VMContext, Elts)); return DIDerivedType(MDNode::get(VMContext, Elts));
} }
DIDerivedType DIDerivedType DIBuilder::createStaticMemberType(DIDescriptor Scope,
DIBuilder::createStaticMemberType(DIDescriptor Scope, StringRef Name, StringRef Name, DIFile File,
DIFile File, unsigned LineNumber, unsigned LineNumber, DIType Ty,
DIType Ty, unsigned Flags, unsigned Flags,
llvm::Value *Val) { llvm::Constant *Val) {
// TAG_member is encoded in DIDerivedType format. // TAG_member is encoded in DIDerivedType format.
Flags |= DIDescriptor::FlagStaticMember; Flags |= DIDescriptor::FlagStaticMember;
Value *Elts[] = {HeaderBuilder::get(dwarf::DW_TAG_member) Value *Elts[] = {HeaderBuilder::get(dwarf::DW_TAG_member)
@ -489,9 +489,8 @@ static DITemplateValueParameter createTemplateValueParameterHelper(
DITemplateValueParameter DITemplateValueParameter
DIBuilder::createTemplateValueParameter(DIDescriptor Context, StringRef Name, DIBuilder::createTemplateValueParameter(DIDescriptor Context, StringRef Name,
DIType Ty, Value *Val, DIType Ty, Constant *Val, MDNode *File,
MDNode *File, unsigned LineNo, unsigned LineNo, unsigned ColumnNo) {
unsigned ColumnNo) {
return createTemplateValueParameterHelper( return createTemplateValueParameterHelper(
VMContext, dwarf::DW_TAG_template_value_parameter, Context, Name, Ty, Val, VMContext, dwarf::DW_TAG_template_value_parameter, Context, Name, Ty, Val,
File, LineNo, ColumnNo); File, LineNo, ColumnNo);
@ -832,12 +831,11 @@ DISubrange DIBuilder::getOrCreateSubrange(int64_t Lo, int64_t Count) {
return DISubrange(MDNode::get(VMContext, Elts)); return DISubrange(MDNode::get(VMContext, Elts));
} }
static DIGlobalVariable static DIGlobalVariable createGlobalVariableHelper(
createGlobalVariableHelper(LLVMContext &VMContext, DIDescriptor Context, LLVMContext &VMContext, DIDescriptor Context, StringRef Name,
StringRef Name, StringRef LinkageName, DIFile F, StringRef LinkageName, DIFile F, unsigned LineNumber, DITypeRef Ty,
unsigned LineNumber, DITypeRef Ty, bool isLocalToUnit, bool isLocalToUnit, Constant *Val, MDNode *Decl, bool isDefinition,
Value *Val, MDNode *Decl, bool isDefinition, std::function<MDNode *(ArrayRef<Value *>)> CreateFunc) {
std::function<MDNode *(ArrayRef<Value *>)> CreateFunc) {
Value *Elts[] = {HeaderBuilder::get(dwarf::DW_TAG_variable) Value *Elts[] = {HeaderBuilder::get(dwarf::DW_TAG_variable)
.concat(Name) .concat(Name)
.concat(Name) .concat(Name)
@ -852,13 +850,10 @@ createGlobalVariableHelper(LLVMContext &VMContext, DIDescriptor Context,
return DIGlobalVariable(CreateFunc(Elts)); return DIGlobalVariable(CreateFunc(Elts));
} }
DIGlobalVariable DIBuilder::createGlobalVariable(DIDescriptor Context, DIGlobalVariable DIBuilder::createGlobalVariable(
StringRef Name, DIDescriptor Context, StringRef Name, StringRef LinkageName, DIFile F,
StringRef LinkageName, unsigned LineNumber, DITypeRef Ty, bool isLocalToUnit, Constant *Val,
DIFile F, unsigned LineNumber, MDNode *Decl) {
DITypeRef Ty,
bool isLocalToUnit,
Value *Val, MDNode *Decl) {
return createGlobalVariableHelper(VMContext, Context, Name, LinkageName, F, return createGlobalVariableHelper(VMContext, Context, Name, LinkageName, F,
LineNumber, Ty, isLocalToUnit, Val, Decl, true, LineNumber, Ty, isLocalToUnit, Val, Decl, true,
[&] (ArrayRef<Value *> Elts) -> MDNode * { [&] (ArrayRef<Value *> Elts) -> MDNode * {
@ -868,14 +863,10 @@ DIGlobalVariable DIBuilder::createGlobalVariable(DIDescriptor Context,
}); });
} }
DIGlobalVariable DIGlobalVariable DIBuilder::createTempGlobalVariableFwdDecl(
DIBuilder::createTempGlobalVariableFwdDecl(DIDescriptor Context, DIDescriptor Context, StringRef Name, StringRef LinkageName, DIFile F,
StringRef Name, unsigned LineNumber, DITypeRef Ty, bool isLocalToUnit, Constant *Val,
StringRef LinkageName, MDNode *Decl) {
DIFile F, unsigned LineNumber,
DITypeRef Ty,
bool isLocalToUnit,
Value *Val, MDNode *Decl) {
return createGlobalVariableHelper(VMContext, Context, Name, LinkageName, F, return createGlobalVariableHelper(VMContext, Context, Name, LinkageName, F,
LineNumber, Ty, isLocalToUnit, Val, Decl, false, LineNumber, Ty, isLocalToUnit, Val, Decl, false,
[&] (ArrayRef<Value *> Elts) { [&] (ArrayRef<Value *> Elts) {