DIBuilder.h revision d67c5cab3b770b0709dcb05256aef51b35f3f113
116eeb6f5ebc978b03745177b9ac82684ab1c6932Bill Wendling//===--- llvm/DIBuilder.h - Debug Information Builder -----------*- C++ -*-===//
235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//
335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//                     The LLVM Compiler Infrastructure
435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//
535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// This file is distributed under the University of Illinois Open Source
635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// License. See LICENSE.TXT for details.
735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//
835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//===----------------------------------------------------------------------===//
935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//
1035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// This file defines a DIBuilder that is useful for creating debugging
1135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// information entries in LLVM IR form.
1235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//
1335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//===----------------------------------------------------------------------===//
1435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
15674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_DIBUILDER_H
16674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_DIBUILDER_H
1735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
18685501836bc60f53892854253b5bbea6c48b6d7fJay Foad#include "llvm/ADT/ArrayRef.h"
1935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#include "llvm/ADT/StringRef.h"
20255f89faee13dc491cb64fbeae3c763e7e2ea4e6Chandler Carruth#include "llvm/Support/DataTypes.h"
2135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
2235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patelnamespace llvm {
23fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class BasicBlock;
24fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class Instruction;
25fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class Function;
2635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class Module;
27fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class Value;
2835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class LLVMContext;
2935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class MDNode;
3035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class StringRef;
312ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie  class DIBasicType;
32d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie  class DICompositeType;
33d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie  class DIDerivedType;
3435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIDescriptor;
3535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIFile;
3635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIEnumerator;
3735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIType;
38fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class DIArray;
39fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class DIGlobalVariable;
40fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class DINameSpace;
41fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class DIVariable;
4243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel  class DISubrange;
436618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher  class DILexicalBlockFile;
4443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel  class DILexicalBlock;
4544498a640daa827220bc4758770190318f0ec69fDevang Patel  class DISubprogram;
467e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel  class DITemplateTypeParameter;
47e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel  class DITemplateValueParameter;
481ea02d467a311b4846b942377d0b00fde987be65Devang Patel  class DIObjCProperty;
4935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
5035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIBuilder {
5135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    private:
5235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    Module &M;
5335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    LLVMContext & VMContext;
5435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    MDNode *TheCU;
5535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
5694c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    MDNode *TempEnumTypes;
5794c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    MDNode *TempRetainTypes;
5894c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    MDNode *TempSubprograms;
5994c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    MDNode *TempGVs;
6094c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel
61fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    Function *DeclareFn;     // llvm.dbg.declare
62fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    Function *ValueFn;       // llvm.dbg.value
63fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
6494c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    SmallVector<Value *, 4> AllEnumTypes;
6594c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    SmallVector<Value *, 4> AllRetainTypes;
6694c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    SmallVector<Value *, 4> AllSubprograms;
6794c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    SmallVector<Value *, 4> AllGVs;
6894c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel
699f9ce61972871efcf794bdc6125835c2c32cd863Craig Topper    DIBuilder(const DIBuilder &) LLVM_DELETED_FUNCTION;
709f9ce61972871efcf794bdc6125835c2c32cd863Craig Topper    void operator=(const DIBuilder &) LLVM_DELETED_FUNCTION;
7135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
7235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    public:
7335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    explicit DIBuilder(Module &M);
7435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    const MDNode *getCU() { return TheCU; }
75dc8c3fdcf15a6fff6251a63869de718527c91940Devang Patel    enum ComplexAddrKind { OpPlus=1, OpDeref };
7635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
776326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel    /// finalize - Construct any deferred debug info descriptors.
786326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel    void finalize();
796326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel
8050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createCompileUnit - A CompileUnit provides an anchor for all debugging
8135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// information generated during this instance of compilation.
822c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Lang     Source programming language, eg. dwarf::DW_LANG_C99
832c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param File     File name
842c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Dir      Directory
852c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Producer String identify producer of debugging information.
862c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 Usuall this is a compiler version string.
872c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param isOptimized A boolean flag which indicates whether optimization
882c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                    is ON or not.
892c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Flags    This string lists command line options. This string is
902c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 directly embedded in debug info output which may be used
912c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 by a tool analyzing generated debugging information.
922c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param RV       This indicates runtime version for languages like
932c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 Objective-C.
9450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    void createCompileUnit(unsigned Lang, StringRef File, StringRef Dir,
952c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel                           StringRef Producer,
9635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                           bool isOptimized, StringRef Flags, unsigned RV);
9735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
9850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFile - Create a file descriptor to hold debugging information
9935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// for a file.
10050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIFile createFile(StringRef Filename, StringRef Directory);
10135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
10250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createEnumerator - Create a single enumerator value.
10350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIEnumerator createEnumerator(StringRef Name, uint64_t Val);
10435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
105734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel    /// createNullPtrType - Create C++0x nullptr type.
106734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel    DIType createNullPtrType(StringRef Name);
107734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel
10850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createBasicType - Create debugging information entry for a basic
1092c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// type.
1102c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Name        Type name.
1112c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param SizeInBits  Size of the type.
1122c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param AlignInBits Type alignment.
1132c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Encoding    DWARF encoding code, e.g. dwarf::DW_ATE_float.
1142ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie    DIBasicType createBasicType(StringRef Name, uint64_t SizeInBits,
1152ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie                                uint64_t AlignInBits, unsigned Encoding);
11635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
11750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createQualifiedType - Create debugging information entry for a qualified
11835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// type, e.g. 'const int'.
1192c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Tag         Tag identifing type, e.g. dwarf::TAG_volatile_type
1202c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param FromTy      Base Type.
121d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createQualifiedType(unsigned Tag, DIType FromTy);
12235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
12350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createPointerType - Create debugging information entry for a pointer.
124fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param PointeeTy   Type pointed by this pointer.
125fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param SizeInBits  Size.
126fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param AlignInBits Alignment. (optional)
127fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Pointer type name. (optional)
128d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType
129d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    createPointerType(DIType PointeeTy, uint64_t SizeInBits,
130d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                      uint64_t AlignInBits = 0, StringRef Name = StringRef());
13135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
13262fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie    /// \brief Create debugging information entry for a pointer to member.
13362fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie    /// @param PointeeTy Type pointed to by this pointer.
13462fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie    /// @param Class Type for which this pointer points to members of.
135d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createMemberPointerType(DIType PointeeTy, DIType Class);
13662fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie
13750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createReferenceType - Create debugging information entry for a c++
138791e629deef7e4a410e67527da26405916415d3aEric Christopher    /// style reference or rvalue reference type.
139d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createReferenceType(unsigned Tag, DIType RTy);
14035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
14150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTypedef - Create debugging information entry for a typedef.
142fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Original type.
143fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Typedef name.
144fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this type is defined.
145fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
146da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel    /// @param Context     The surrounding context for the typedef.
147d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createTypedef(DIType Ty, StringRef Name, DIFile File,
148d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                                unsigned LineNo, DIDescriptor Context);
14935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
15050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFriend - Create debugging information entry for a 'friend'.
15150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createFriend(DIType Ty, DIType FriendTy);
15235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
15350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createInheritance - Create debugging information entry to establish
1542c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// inheritance relationship between two types.
155fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty           Original type.
156fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param BaseTy       Base type. Ty is inherits from base.
157fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param BaseOffset   Base offset.
158fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Flags        Flags to describe inheritance attribute,
159fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                     e.g. private
160d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createInheritance(DIType Ty, DIType BaseTy,
161d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                                    uint64_t BaseOffset, unsigned Flags);
16235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
16350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createMemberType - Create debugging information entry for a member.
164fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel    /// @param Scope        Member scope.
165fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name         Member name.
166fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File         File where this member is defined.
167fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo       Line number.
168fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param SizeInBits   Member size.
169fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param AlignInBits  Member alignment.
170fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param OffsetInBits Member offset.
171fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
172fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty           Parent type.
173d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType
174d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    createMemberType(DIDescriptor Scope, StringRef Name, DIFile File,
175d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                     unsigned LineNo, uint64_t SizeInBits, uint64_t AlignInBits,
176d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                     uint64_t OffsetInBits, unsigned Flags, DIType Ty);
17735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
1786b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// createStaticMemberType - Create debugging information entry for a
1796b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// C++ static data member.
1806b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Scope      Member scope.
1816b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Name       Member name.
1826b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param File       File where this member is declared.
1836b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param LineNo     Line number.
1846b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Ty         Type of the static member.
1856b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Flags      Flags to encode member attribute, e.g. private.
1866b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Val        Const initializer of the member.
1876b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    DIType createStaticMemberType(DIDescriptor Scope, StringRef Name,
1886b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher                                  DIFile File, unsigned LineNo, DIType Ty,
1896b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher                                  unsigned Flags, llvm::Value *Val);
1906b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher
191e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// createObjCIVar - Create debugging information entry for Objective-C
192e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// instance variable.
193e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Name         Member name.
194e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param File         File where this member is defined.
195e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param LineNo       Line number.
196e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param SizeInBits   Member size.
197e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param AlignInBits  Member alignment.
198e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param OffsetInBits Member offset.
199e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
200e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Ty           Parent type.
201d9b0b025612992a0b724eeca8bdf10b1d7a5c355Benjamin Kramer    /// @param PropertyName Name of the Objective C property associated with
202e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    ///                     this ivar.
203a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param PropertyGetterName Name of the Objective C property getter
204a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    ///                           selector.
205a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param PropertySetterName Name of the Objective C property setter
206a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    ///                           selector.
207e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param PropertyAttributes Objective C property attributes.
208e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    DIType createObjCIVar(StringRef Name, DIFile File,
209e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned LineNo, uint64_t SizeInBits,
210e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          uint64_t AlignInBits, uint64_t OffsetInBits,
211e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned Flags, DIType Ty,
212e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertyName = StringRef(),
213e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertyGetterName = StringRef(),
214e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertySetterName = StringRef(),
215e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned PropertyAttributes = 0);
216e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel
2176588abf377b7381274236e651462ec83052f6013Devang Patel    /// createObjCIVar - Create debugging information entry for Objective-C
2186588abf377b7381274236e651462ec83052f6013Devang Patel    /// instance variable.
2196588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param Name         Member name.
2206588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param File         File where this member is defined.
2216588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param LineNo       Line number.
2226588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param SizeInBits   Member size.
2236588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param AlignInBits  Member alignment.
2246588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param OffsetInBits Member offset.
2256588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
2266588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param Ty           Parent type.
227a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param PropertyNode Property associated with this ivar.
2286588abf377b7381274236e651462ec83052f6013Devang Patel    DIType createObjCIVar(StringRef Name, DIFile File,
2296588abf377b7381274236e651462ec83052f6013Devang Patel                          unsigned LineNo, uint64_t SizeInBits,
2306588abf377b7381274236e651462ec83052f6013Devang Patel                          uint64_t AlignInBits, uint64_t OffsetInBits,
2316588abf377b7381274236e651462ec83052f6013Devang Patel                          unsigned Flags, DIType Ty,
2326588abf377b7381274236e651462ec83052f6013Devang Patel                          MDNode *PropertyNode);
2336588abf377b7381274236e651462ec83052f6013Devang Patel
2341ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// createObjCProperty - Create debugging information entry for Objective-C
2351ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// property.
2361ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param Name         Property name.
237b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    /// @param File         File where this property is defined.
238b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    /// @param LineNumber   Line number.
2391ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param GetterName   Name of the Objective C property getter selector.
2401ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param SetterName   Name of the Objective C property setter selector.
2411ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param PropertyAttributes Objective C property attributes.
242b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    /// @param Ty           Type.
243b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    DIObjCProperty createObjCProperty(StringRef Name,
24417689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      DIFile File, unsigned LineNumber,
24517689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      StringRef GetterName,
24617689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      StringRef SetterName,
24717689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      unsigned PropertyAttributes,
24817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      DIType Ty);
249b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher
25050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createClassType - Create debugging information entry for a class.
2510a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Scope        Scope in which this class is defined.
2520a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Name         class name.
2530a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param File         File where this member is defined.
254a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
2550a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param SizeInBits   Member size.
2560a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param AlignInBits  Member alignment.
2570a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param OffsetInBits Member offset.
2580a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
2590a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Elements     class members.
2600a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param VTableHolder Debug info of the base class that contains vtable
2610a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     for this type. This is used in
2620a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     DW_AT_containing_type. See DWARF documentation
2630a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     for more info.
2647e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param TemplateParms Template type parameters.
26550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createClassType(DIDescriptor Scope, StringRef Name, DIFile File,
2660a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           unsigned LineNumber, uint64_t SizeInBits,
2670a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           uint64_t AlignInBits, uint64_t OffsetInBits,
2680a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           unsigned Flags, DIType DerivedFrom,
2697e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                           DIArray Elements, MDNode *VTableHolder = 0,
2707e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                           MDNode *TemplateParms = 0);
2710a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel
27250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createStructType - Create debugging information entry for a struct.
27343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this struct is defined.
27443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Struct name.
27543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
276a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
27743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
27843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
27943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
28043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Struct elements.
28143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param RunTimeLang  Optional parameter, Objective-C runtime version.
28250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createStructType(DIDescriptor Scope, StringRef Name, DIFile File,
283fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            unsigned LineNumber, uint64_t SizeInBits,
284fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            uint64_t AlignInBits, unsigned Flags,
285fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            DIArray Elements, unsigned RunTimeLang = 0);
286fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
28750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createUnionType - Create debugging information entry for an union.
28843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this union is defined.
28943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Union name.
29043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
291a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
29243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
29343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
29443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
29543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Union elements.
29643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param RunTimeLang  Optional parameter, Objective-C runtime version.
297d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DICompositeType createUnionType(
298d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        DIDescriptor Scope, StringRef Name, DIFile File, unsigned LineNumber,
299d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        uint64_t SizeInBits, uint64_t AlignInBits, unsigned Flags,
300d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        DIArray Elements, unsigned RunTimeLang = 0);
30143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
30250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemplateTypeParameter - Create debugging information for template
3037e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// type parameter.
304e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Scope        Scope in which this type is defined.
3057e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param Name         Type parameter name.
3067e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param Ty           Parameter type.
3077e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param File         File where this type parameter is defined.
3087e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param LineNo       Line number.
3097e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param ColumnNo     Column Number.
3107e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    DITemplateTypeParameter
31150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createTemplateTypeParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
3127e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                                MDNode *File = 0, unsigned LineNo = 0,
3137e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                                unsigned ColumnNo = 0);
3147e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel
31550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemplateValueParameter - Create debugging information for template
316e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// value parameter.
317e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Scope        Scope in which this type is defined.
318e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Name         Value parameter name.
319e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Ty           Parameter type.
320e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Value        Constant parameter value.
321e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param File         File where this type parameter is defined.
322e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param LineNo       Line number.
323e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param ColumnNo     Column Number.
324e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    DITemplateValueParameter
32550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
326e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 uint64_t Value,
327e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 MDNode *File = 0, unsigned LineNo = 0,
328e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 unsigned ColumnNo = 0);
329e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel
33050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createArrayType - Create debugging information entry for an array.
33143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Size         Array size.
33243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Alignment.
33343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Ty           Element type.
33443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Subscripts   Subscripts.
335d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DICompositeType createArrayType(uint64_t Size, uint64_t AlignInBits,
336d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                                    DIType Ty, DIArray Subscripts);
33743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
33850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createVectorType - Create debugging information entry for a vector type.
33943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Size         Array size.
34043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Alignment.
34143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Ty           Element type.
34243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Subscripts   Subscripts.
34350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createVectorType(uint64_t Size, uint64_t AlignInBits,
34443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                            DIType Ty, DIArray Subscripts);
34543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
34650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createEnumerationType - Create debugging information entry for an
34743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// enumeration.
34843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this enumeration is defined.
34943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Union name.
35043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
351a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
35243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
35343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
35443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Enumeration elements.
355d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DICompositeType createEnumerationType(
356d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        DIDescriptor Scope, StringRef Name, DIFile File, unsigned LineNumber,
357d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        uint64_t SizeInBits, uint64_t AlignInBits, DIArray Elements,
358d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        DIType ClassType);
35943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
36050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createSubroutineType - Create subroutine type.
361a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param File           File in which this subroutine is defined.
362a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param ParameterTypes An array of subroutine parameter types. This
363a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    ///                       includes return type at 0th index.
364d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DICompositeType createSubroutineType(DIFile File, DIArray ParameterTypes);
36543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
36650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createArtificialType - Create a new DIType with "artificial" flag set.
36750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createArtificialType(DIType Ty);
368fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
369e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher    /// createObjectPointerType - Create a new DIType with the "object pointer"
370e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher    /// flag set.
371e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher    DIType createObjectPointerType(DIType Ty);
372e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher
37350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemporaryType - Create a temporary forward-declared type.
37450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTemporaryType();
37550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTemporaryType(DIFile F);
376fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
3774fe345729285ae634c657ab854057464d03220f7Eric Christopher    /// createForwardDecl - Create a temporary forward-declared type.
378216432df5ac897327a0cb6323f08811910481038Eric Christopher    DIType createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope,
379ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman                             DIFile F, unsigned Line, unsigned RuntimeLang = 0,
380ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman                             uint64_t SizeInBits = 0, uint64_t AlignInBits = 0);
3814fe345729285ae634c657ab854057464d03220f7Eric Christopher
38250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// retainType - Retain DIType in a module even if it is not referenced
38343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// through debug info anchors.
38450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    void retainType(DIType T);
38543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
38650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createUnspecifiedParameter - Create unspeicified type descriptor
38743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// for a subroutine type.
38850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIDescriptor createUnspecifiedParameter();
38943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
39050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// getOrCreateArray - Get a DIArray, create one if required.
391685501836bc60f53892854253b5bbea6c48b6d7fJay Foad    DIArray getOrCreateArray(ArrayRef<Value *> Elements);
392fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
39350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// getOrCreateSubrange - Create a descriptor for a value range.  This
39443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// implicitly uniques the values returned.
3959493dae613847b01b79914502f337814fe3e00acBill Wendling    DISubrange getOrCreateSubrange(int64_t Lo, int64_t Count);
39643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
39750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createGlobalVariable - Create a new descriptor for the specified global.
398fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of the variable.
399fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this variable is defined.
400fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
401fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type.
402fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param isLocalToUnit Boolean flag indicate whether this variable is
403fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                      externally visible or not.
404fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val         llvm::Value of the variable.
405fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    DIGlobalVariable
40650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createGlobalVariable(StringRef Name, DIFile File, unsigned LineNo,
407fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         DIType Ty, bool isLocalToUnit, llvm::Value *Val);
408fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
409fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
41050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createStaticVariable - Create a new descriptor for the specified
411fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// variable.
412a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param Context     Variable scope.
413fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of the variable.
414a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LinkageName Mangled  name of the variable.
415fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this variable is defined.
416fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
417fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type.
418fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param isLocalToUnit Boolean flag indicate whether this variable is
419fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                      externally visible or not.
420fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val         llvm::Value of the variable.
4216b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Decl        Reference to the corresponding declaration.
422fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    DIGlobalVariable
42350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createStaticVariable(DIDescriptor Context, StringRef Name,
424fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         StringRef LinkageName, DIFile File, unsigned LineNo,
4256b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher                         DIType Ty, bool isLocalToUnit, llvm::Value *Val,
4266b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher                         MDNode *Decl = NULL);
427fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
428fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
42950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createLocalVariable - Create a new descriptor for the specified
43048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// local variable.
43148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Tag         Dwarf TAG. Usually DW_TAG_auto_variable or
43248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    ///                    DW_TAG_arg_variable.
43348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Scope       Variable scope.
43448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Name        Variable name.
43548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param File        File where this variable is defined.
43648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param LineNo      Line number.
43748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Ty          Variable Type
43848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param AlwaysPreserve Boolean. Set to true if debug info for this
43948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    ///                       variable should be preserved in optimized build.
44048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Flags          Flags, e.g. artificial variable.
441e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    /// @param ArgNo       If this variable is an arugment then this argument's
442e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    ///                    number. 1 indicates 1st argument.
44350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIVariable createLocalVariable(unsigned Tag, DIDescriptor Scope,
44448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   StringRef Name,
44548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   DIFile File, unsigned LineNo,
44648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   DIType Ty, bool AlwaysPreserve = false,
447e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel                                   unsigned Flags = 0,
448e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel                                   unsigned ArgNo = 0);
44948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel
45048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel
45150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createComplexVariable - Create a new descriptor for the specified
452fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// variable which has a complex address expression for its address.
453fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Tag         Dwarf TAG. Usually DW_TAG_auto_variable or
454fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                    DW_TAG_arg_variable.
455fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Scope       Variable scope.
456fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Variable name.
457a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param F           File where this variable is defined.
458fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
459fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type
460685501836bc60f53892854253b5bbea6c48b6d7fJay Foad    /// @param Addr        An array of complex address operations.
461e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    /// @param ArgNo       If this variable is an arugment then this argument's
462e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    ///                    number. 1 indicates 1st argument.
46350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIVariable createComplexVariable(unsigned Tag, DIDescriptor Scope,
464fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                     StringRef Name, DIFile F, unsigned LineNo,
465685501836bc60f53892854253b5bbea6c48b6d7fJay Foad                                     DIType Ty, ArrayRef<Value *> Addr,
466685501836bc60f53892854253b5bbea6c48b6d7fJay Foad                                     unsigned ArgNo = 0);
467fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
46850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFunction - Create a new descriptor for the specified subprogram.
46944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// See comments in DISubprogram for descriptions of these fields.
47044498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Scope         Function scope.
47144498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Name          Function name.
47244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LinkageName   Mangled function name.
47344498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param File          File where this variable is defined.
47444498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LineNo        Line number.
47544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Ty            Function type.
47644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isLocalToUnit True if this function is not externally visible..
47744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isDefinition  True if this is a function definition.
4786126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher    /// @param ScopeLine     Set to the beginning of the scope this starts
47944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Flags         e.g. is this function prototyped or not.
48044498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      This flags are used to emit dwarf attributes.
48144498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isOptimized   True if optimization is ON.
48244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Fn            llvm::Function pointer.
483da19475328ece3da19437a2e9eef035dcafa2814Devang Patel    /// @param TParam        Function template parameters.
48450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DISubprogram createFunction(DIDescriptor Scope, StringRef Name,
48544498a640daa827220bc4758770190318f0ec69fDevang Patel                                StringRef LinkageName,
48644498a640daa827220bc4758770190318f0ec69fDevang Patel                                DIFile File, unsigned LineNo,
48744498a640daa827220bc4758770190318f0ec69fDevang Patel                                DIType Ty, bool isLocalToUnit,
48844498a640daa827220bc4758770190318f0ec69fDevang Patel                                bool isDefinition,
4896126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher                                unsigned ScopeLine,
49044498a640daa827220bc4758770190318f0ec69fDevang Patel                                unsigned Flags = 0,
49144498a640daa827220bc4758770190318f0ec69fDevang Patel                                bool isOptimized = false,
492da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                                Function *Fn = 0,
4935e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel                                MDNode *TParam = 0,
4945e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel                                MDNode *Decl = 0);
49544498a640daa827220bc4758770190318f0ec69fDevang Patel
49650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createMethod - Create a new descriptor for the specified C++ method.
49744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// See comments in DISubprogram for descriptions of these fields.
49844498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Scope         Function scope.
49944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Name          Function name.
50044498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LinkageName   Mangled function name.
50144498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param File          File where this variable is defined.
50244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LineNo        Line number.
50344498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Ty            Function type.
50444498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isLocalToUnit True if this function is not externally visible..
50544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isDefinition  True if this is a function definition.
5060d4b81519dc3f02bbebb4ecad86bfb590c4d1898Jay Foad    /// @param Virtuality    Attributes describing virtualness. e.g. pure
50744498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      virtual function.
50844498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param VTableIndex   Index no of this method in virtual table.
50944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param VTableHolder  Type that holds vtable.
51044498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Flags         e.g. is this function prototyped or not.
51144498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      This flags are used to emit dwarf attributes.
51244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isOptimized   True if optimization is ON.
51344498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Fn            llvm::Function pointer.
514da19475328ece3da19437a2e9eef035dcafa2814Devang Patel    /// @param TParam        Function template parameters.
51550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DISubprogram createMethod(DIDescriptor Scope, StringRef Name,
51644498a640daa827220bc4758770190318f0ec69fDevang Patel                              StringRef LinkageName,
51744498a640daa827220bc4758770190318f0ec69fDevang Patel                              DIFile File, unsigned LineNo,
51844498a640daa827220bc4758770190318f0ec69fDevang Patel                              DIType Ty, bool isLocalToUnit,
51944498a640daa827220bc4758770190318f0ec69fDevang Patel                              bool isDefinition,
52044498a640daa827220bc4758770190318f0ec69fDevang Patel                              unsigned Virtuality = 0, unsigned VTableIndex = 0,
52144498a640daa827220bc4758770190318f0ec69fDevang Patel                              MDNode *VTableHolder = 0,
52244498a640daa827220bc4758770190318f0ec69fDevang Patel                              unsigned Flags = 0,
52344498a640daa827220bc4758770190318f0ec69fDevang Patel                              bool isOptimized = false,
524da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                              Function *Fn = 0,
525da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                              MDNode *TParam = 0);
526fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
52750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createNameSpace - This creates new descriptor for a namespace
528fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// with the specified parent scope.
529fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Scope       Namespace scope
530fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of this namespace
531fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        Source file
532fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number
53350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DINameSpace createNameSpace(DIDescriptor Scope, StringRef Name,
534fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                DIFile File, unsigned LineNo);
535fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
536fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
5376618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// createLexicalBlockFile - This creates a descriptor for a lexical
5386618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// block with a new file attached. This merely extends the existing
5396618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// lexical block as it crosses a file.
5406618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// @param Scope       Lexical block.
5416618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// @param File        Source file.
5426618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    DILexicalBlockFile createLexicalBlockFile(DIDescriptor Scope,
5439f99721a1882cdef9f7cca25de7ea43627d23958Devang Patel                                              DIFile File);
5446618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher
54550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createLexicalBlock - This creates a descriptor for a lexical block
54643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// with the specified parent context.
54743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope       Parent lexical scope.
54843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File        Source file
54943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Line        Line number
55043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Col         Column number
55150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DILexicalBlock createLexicalBlock(DIDescriptor Scope, DIFile File,
55243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                                      unsigned Line, unsigned Col);
55343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
55450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
555fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Storage     llvm::Value of the variable
556fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo     Variable's debug info descriptor.
557fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertAtEnd Location for the new intrinsic.
55850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo,
559fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                               BasicBlock *InsertAtEnd);
560fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
56150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
562fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Storage      llvm::Value of the variable
563fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
564fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertBefore Location for the new intrinsic.
56550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo,
566fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                               Instruction *InsertBefore);
567fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
568fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
56950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
570fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val          llvm::Value of the variable
571fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Offset       Offset
572fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
573fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertAtEnd Location for the new intrinsic.
57450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset,
575fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         DIVariable VarInfo,
576fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         BasicBlock *InsertAtEnd);
577fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
57850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
579fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val          llvm::Value of the variable
580fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Offset       Offset
581fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
582fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertBefore Location for the new intrinsic.
58350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset,
584fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         DIVariable VarInfo,
585fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         Instruction *InsertBefore);
586fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
58735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  };
58835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel} // end namespace llvm
58935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
59035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#endif
591