DIBuilder.h revision 6172f0298391e00cb669cc246e70ae2531f2cdec
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.
94e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher    /// @param SplitName The name of the file that we'll split debug info out
95e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher    ///                  into.
9650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    void createCompileUnit(unsigned Lang, StringRef File, StringRef Dir,
97e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher                           StringRef Producer, bool isOptimized,
98e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher                           StringRef Flags, unsigned RV,
99e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher                           StringRef SplitName = StringRef());
10035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
10150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFile - Create a file descriptor to hold debugging information
10235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// for a file.
10350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIFile createFile(StringRef Filename, StringRef Directory);
10435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
10550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createEnumerator - Create a single enumerator value.
10650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIEnumerator createEnumerator(StringRef Name, uint64_t Val);
10735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
108734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel    /// createNullPtrType - Create C++0x nullptr type.
109734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel    DIType createNullPtrType(StringRef Name);
110734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel
11150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createBasicType - Create debugging information entry for a basic
1122c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// type.
1132c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Name        Type name.
1142c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param SizeInBits  Size of the type.
1152c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param AlignInBits Type alignment.
1162c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Encoding    DWARF encoding code, e.g. dwarf::DW_ATE_float.
1172ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie    DIBasicType createBasicType(StringRef Name, uint64_t SizeInBits,
1182ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie                                uint64_t AlignInBits, unsigned Encoding);
11935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
12050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createQualifiedType - Create debugging information entry for a qualified
12135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// type, e.g. 'const int'.
1222c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Tag         Tag identifing type, e.g. dwarf::TAG_volatile_type
1232c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param FromTy      Base Type.
124d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createQualifiedType(unsigned Tag, DIType FromTy);
12535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
12650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createPointerType - Create debugging information entry for a pointer.
127fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param PointeeTy   Type pointed by this pointer.
128fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param SizeInBits  Size.
129fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param AlignInBits Alignment. (optional)
130fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Pointer type name. (optional)
131d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType
132d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    createPointerType(DIType PointeeTy, uint64_t SizeInBits,
133d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                      uint64_t AlignInBits = 0, StringRef Name = StringRef());
13435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
13562fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie    /// \brief Create debugging information entry for a pointer to member.
13662fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie    /// @param PointeeTy Type pointed to by this pointer.
13762fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie    /// @param Class Type for which this pointer points to members of.
138d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createMemberPointerType(DIType PointeeTy, DIType Class);
13962fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie
14050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createReferenceType - Create debugging information entry for a c++
141791e629deef7e4a410e67527da26405916415d3aEric Christopher    /// style reference or rvalue reference type.
142d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createReferenceType(unsigned Tag, DIType RTy);
14335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
14450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTypedef - Create debugging information entry for a typedef.
145fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Original type.
146fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Typedef name.
147fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this type is defined.
148fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
149da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel    /// @param Context     The surrounding context for the typedef.
150d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createTypedef(DIType Ty, StringRef Name, DIFile File,
151d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                                unsigned LineNo, DIDescriptor Context);
15235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
15350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFriend - Create debugging information entry for a 'friend'.
15450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createFriend(DIType Ty, DIType FriendTy);
15535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
15650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createInheritance - Create debugging information entry to establish
1572c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// inheritance relationship between two types.
158fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty           Original type.
159fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param BaseTy       Base type. Ty is inherits from base.
160fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param BaseOffset   Base offset.
161fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Flags        Flags to describe inheritance attribute,
162fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                     e.g. private
163d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType createInheritance(DIType Ty, DIType BaseTy,
164d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                                    uint64_t BaseOffset, unsigned Flags);
16535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
16650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createMemberType - Create debugging information entry for a member.
167fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel    /// @param Scope        Member scope.
168fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name         Member name.
169fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File         File where this member is defined.
170fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo       Line number.
171fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param SizeInBits   Member size.
172fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param AlignInBits  Member alignment.
173fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param OffsetInBits Member offset.
174fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
175fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty           Parent type.
176d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DIDerivedType
177d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    createMemberType(DIDescriptor Scope, StringRef Name, DIFile File,
178d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                     unsigned LineNo, uint64_t SizeInBits, uint64_t AlignInBits,
179d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                     uint64_t OffsetInBits, unsigned Flags, DIType Ty);
18035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
1816b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// createStaticMemberType - Create debugging information entry for a
1826b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// C++ static data member.
1836b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Scope      Member scope.
1846b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Name       Member name.
1856b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param File       File where this member is declared.
1866b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param LineNo     Line number.
1876b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Ty         Type of the static member.
1886b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Flags      Flags to encode member attribute, e.g. private.
1896b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Val        Const initializer of the member.
1906b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    DIType createStaticMemberType(DIDescriptor Scope, StringRef Name,
1916b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher                                  DIFile File, unsigned LineNo, DIType Ty,
1926b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher                                  unsigned Flags, llvm::Value *Val);
1936b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher
194e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// createObjCIVar - Create debugging information entry for Objective-C
195e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// instance variable.
196e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Name         Member name.
197e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param File         File where this member is defined.
198e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param LineNo       Line number.
199e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param SizeInBits   Member size.
200e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param AlignInBits  Member alignment.
201e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param OffsetInBits Member offset.
202e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
203e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Ty           Parent type.
204d9b0b025612992a0b724eeca8bdf10b1d7a5c355Benjamin Kramer    /// @param PropertyName Name of the Objective C property associated with
205e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    ///                     this ivar.
206a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param PropertyGetterName Name of the Objective C property getter
207a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    ///                           selector.
208a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param PropertySetterName Name of the Objective C property setter
209a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    ///                           selector.
210e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param PropertyAttributes Objective C property attributes.
211e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    DIType createObjCIVar(StringRef Name, DIFile File,
212e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned LineNo, uint64_t SizeInBits,
213e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          uint64_t AlignInBits, uint64_t OffsetInBits,
214e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned Flags, DIType Ty,
215e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertyName = StringRef(),
216e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertyGetterName = StringRef(),
217e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertySetterName = StringRef(),
218e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned PropertyAttributes = 0);
219e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel
2206588abf377b7381274236e651462ec83052f6013Devang Patel    /// createObjCIVar - Create debugging information entry for Objective-C
2216588abf377b7381274236e651462ec83052f6013Devang Patel    /// instance variable.
2226588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param Name         Member name.
2236588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param File         File where this member is defined.
2246588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param LineNo       Line number.
2256588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param SizeInBits   Member size.
2266588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param AlignInBits  Member alignment.
2276588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param OffsetInBits Member offset.
2286588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
2296588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param Ty           Parent type.
230a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param PropertyNode Property associated with this ivar.
2316588abf377b7381274236e651462ec83052f6013Devang Patel    DIType createObjCIVar(StringRef Name, DIFile File,
2326588abf377b7381274236e651462ec83052f6013Devang Patel                          unsigned LineNo, uint64_t SizeInBits,
2336588abf377b7381274236e651462ec83052f6013Devang Patel                          uint64_t AlignInBits, uint64_t OffsetInBits,
2346588abf377b7381274236e651462ec83052f6013Devang Patel                          unsigned Flags, DIType Ty,
2356588abf377b7381274236e651462ec83052f6013Devang Patel                          MDNode *PropertyNode);
2366588abf377b7381274236e651462ec83052f6013Devang Patel
2371ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// createObjCProperty - Create debugging information entry for Objective-C
2381ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// property.
2391ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param Name         Property name.
240b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    /// @param File         File where this property is defined.
241b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    /// @param LineNumber   Line number.
2421ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param GetterName   Name of the Objective C property getter selector.
2431ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param SetterName   Name of the Objective C property setter selector.
2441ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param PropertyAttributes Objective C property attributes.
245b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    /// @param Ty           Type.
246b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    DIObjCProperty createObjCProperty(StringRef Name,
24717689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      DIFile File, unsigned LineNumber,
24817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      StringRef GetterName,
24917689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      StringRef SetterName,
25017689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      unsigned PropertyAttributes,
25117689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      DIType Ty);
252b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher
25350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createClassType - Create debugging information entry for a class.
2540a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Scope        Scope in which this class is defined.
2550a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Name         class name.
2560a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param File         File where this member is defined.
257a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
2580a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param SizeInBits   Member size.
2590a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param AlignInBits  Member alignment.
2600a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param OffsetInBits Member offset.
2610a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
2620a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Elements     class members.
2630a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param VTableHolder Debug info of the base class that contains vtable
2640a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     for this type. This is used in
2650a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     DW_AT_containing_type. See DWARF documentation
2660a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     for more info.
2677e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param TemplateParms Template type parameters.
26850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createClassType(DIDescriptor Scope, StringRef Name, DIFile File,
2690a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           unsigned LineNumber, uint64_t SizeInBits,
2700a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           uint64_t AlignInBits, uint64_t OffsetInBits,
2710a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           unsigned Flags, DIType DerivedFrom,
2727e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                           DIArray Elements, MDNode *VTableHolder = 0,
2737e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                           MDNode *TemplateParms = 0);
2740a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel
27550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createStructType - Create debugging information entry for a struct.
27643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this struct is defined.
27743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Struct name.
27843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
279a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
28043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
28143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
28243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
28343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Struct elements.
28443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param RunTimeLang  Optional parameter, Objective-C runtime version.
2856172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie    DICompositeType createStructType(DIDescriptor Scope, StringRef Name,
2866172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie                                     DIFile File, unsigned LineNumber,
2876172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie                                     uint64_t SizeInBits, uint64_t AlignInBits,
2886172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie                                     unsigned Flags, DIType DerivedFrom,
2896172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie                                     DIArray Elements, unsigned RunTimeLang = 0,
2906172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie                                     MDNode *VTableHolder = 0);
291fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
29250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createUnionType - Create debugging information entry for an union.
29343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this union is defined.
29443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Union name.
29543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
296a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
29743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
29843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
29943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
30043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Union elements.
30143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param RunTimeLang  Optional parameter, Objective-C runtime version.
302d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DICompositeType createUnionType(
303d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        DIDescriptor Scope, StringRef Name, DIFile File, unsigned LineNumber,
304d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        uint64_t SizeInBits, uint64_t AlignInBits, unsigned Flags,
305d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        DIArray Elements, unsigned RunTimeLang = 0);
30643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
30750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemplateTypeParameter - Create debugging information for template
3087e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// type parameter.
309e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Scope        Scope in which this type is defined.
3107e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param Name         Type parameter name.
3117e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param Ty           Parameter type.
3127e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param File         File where this type parameter is defined.
3137e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param LineNo       Line number.
3147e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param ColumnNo     Column Number.
3157e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    DITemplateTypeParameter
31650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createTemplateTypeParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
3177e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                                MDNode *File = 0, unsigned LineNo = 0,
3187e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                                unsigned ColumnNo = 0);
3197e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel
32050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemplateValueParameter - Create debugging information for template
321e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// value parameter.
322e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Scope        Scope in which this type is defined.
323e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Name         Value parameter name.
324e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Ty           Parameter type.
325e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Value        Constant parameter value.
326e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param File         File where this type parameter is defined.
327e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param LineNo       Line number.
328e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param ColumnNo     Column Number.
329e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    DITemplateValueParameter
33050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
331e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 uint64_t Value,
332e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 MDNode *File = 0, unsigned LineNo = 0,
333e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 unsigned ColumnNo = 0);
334e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel
33550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createArrayType - Create debugging information entry for an array.
33643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Size         Array size.
33743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Alignment.
33843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Ty           Element type.
33943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Subscripts   Subscripts.
340d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DICompositeType createArrayType(uint64_t Size, uint64_t AlignInBits,
341d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie                                    DIType Ty, DIArray Subscripts);
34243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
34350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createVectorType - Create debugging information entry for a vector type.
34443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Size         Array size.
34543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Alignment.
34643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Ty           Element type.
34743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Subscripts   Subscripts.
34850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createVectorType(uint64_t Size, uint64_t AlignInBits,
34943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                            DIType Ty, DIArray Subscripts);
35043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
35150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createEnumerationType - Create debugging information entry for an
35243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// enumeration.
35343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this enumeration is defined.
35443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Union name.
35543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
356a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
35743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
35843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
35943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Enumeration elements.
360d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DICompositeType createEnumerationType(
361d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        DIDescriptor Scope, StringRef Name, DIFile File, unsigned LineNumber,
362d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        uint64_t SizeInBits, uint64_t AlignInBits, DIArray Elements,
363d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie        DIType ClassType);
36443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
36550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createSubroutineType - Create subroutine type.
366a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param File           File in which this subroutine is defined.
367a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param ParameterTypes An array of subroutine parameter types. This
368a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    ///                       includes return type at 0th index.
369d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie    DICompositeType createSubroutineType(DIFile File, DIArray ParameterTypes);
37043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
37150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createArtificialType - Create a new DIType with "artificial" flag set.
37250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createArtificialType(DIType Ty);
373fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
374e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher    /// createObjectPointerType - Create a new DIType with the "object pointer"
375e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher    /// flag set.
376e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher    DIType createObjectPointerType(DIType Ty);
377e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher
37850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemporaryType - Create a temporary forward-declared type.
37950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTemporaryType();
38050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTemporaryType(DIFile F);
381fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
3824fe345729285ae634c657ab854057464d03220f7Eric Christopher    /// createForwardDecl - Create a temporary forward-declared type.
383216432df5ac897327a0cb6323f08811910481038Eric Christopher    DIType createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope,
384ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman                             DIFile F, unsigned Line, unsigned RuntimeLang = 0,
385ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman                             uint64_t SizeInBits = 0, uint64_t AlignInBits = 0);
3864fe345729285ae634c657ab854057464d03220f7Eric Christopher
38750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// retainType - Retain DIType in a module even if it is not referenced
38843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// through debug info anchors.
38950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    void retainType(DIType T);
39043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
39150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createUnspecifiedParameter - Create unspeicified type descriptor
39243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// for a subroutine type.
39350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIDescriptor createUnspecifiedParameter();
39443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
39550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// getOrCreateArray - Get a DIArray, create one if required.
396685501836bc60f53892854253b5bbea6c48b6d7fJay Foad    DIArray getOrCreateArray(ArrayRef<Value *> Elements);
397fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
39850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// getOrCreateSubrange - Create a descriptor for a value range.  This
39943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// implicitly uniques the values returned.
4009493dae613847b01b79914502f337814fe3e00acBill Wendling    DISubrange getOrCreateSubrange(int64_t Lo, int64_t Count);
40143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
40250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createGlobalVariable - Create a new descriptor for the specified global.
403fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of the variable.
404fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this variable is defined.
405fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
406fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type.
407fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param isLocalToUnit Boolean flag indicate whether this variable is
408fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                      externally visible or not.
409fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val         llvm::Value of the variable.
410fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    DIGlobalVariable
41150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createGlobalVariable(StringRef Name, DIFile File, unsigned LineNo,
412fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         DIType Ty, bool isLocalToUnit, llvm::Value *Val);
413fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
414fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
41550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createStaticVariable - Create a new descriptor for the specified
416fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// variable.
417a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param Context     Variable scope.
418fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of the variable.
419a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LinkageName Mangled  name of the variable.
420fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this variable is defined.
421fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
422fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type.
423fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param isLocalToUnit Boolean flag indicate whether this variable is
424fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                      externally visible or not.
425fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val         llvm::Value of the variable.
4266b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher    /// @param Decl        Reference to the corresponding declaration.
427fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    DIGlobalVariable
42850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createStaticVariable(DIDescriptor Context, StringRef Name,
429fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         StringRef LinkageName, DIFile File, unsigned LineNo,
4306b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher                         DIType Ty, bool isLocalToUnit, llvm::Value *Val,
4316b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher                         MDNode *Decl = NULL);
432fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
433fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
43450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createLocalVariable - Create a new descriptor for the specified
43548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// local variable.
43648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Tag         Dwarf TAG. Usually DW_TAG_auto_variable or
43748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    ///                    DW_TAG_arg_variable.
43848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Scope       Variable scope.
43948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Name        Variable name.
44048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param File        File where this variable is defined.
44148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param LineNo      Line number.
44248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Ty          Variable Type
44348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param AlwaysPreserve Boolean. Set to true if debug info for this
44448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    ///                       variable should be preserved in optimized build.
44548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Flags          Flags, e.g. artificial variable.
446e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    /// @param ArgNo       If this variable is an arugment then this argument's
447e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    ///                    number. 1 indicates 1st argument.
44850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIVariable createLocalVariable(unsigned Tag, DIDescriptor Scope,
44948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   StringRef Name,
45048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   DIFile File, unsigned LineNo,
45148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   DIType Ty, bool AlwaysPreserve = false,
452e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel                                   unsigned Flags = 0,
453e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel                                   unsigned ArgNo = 0);
45448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel
45548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel
45650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createComplexVariable - Create a new descriptor for the specified
457fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// variable which has a complex address expression for its address.
458fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Tag         Dwarf TAG. Usually DW_TAG_auto_variable or
459fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                    DW_TAG_arg_variable.
460fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Scope       Variable scope.
461fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Variable name.
462a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param F           File where this variable is defined.
463fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
464fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type
465685501836bc60f53892854253b5bbea6c48b6d7fJay Foad    /// @param Addr        An array of complex address operations.
466e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    /// @param ArgNo       If this variable is an arugment then this argument's
467e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    ///                    number. 1 indicates 1st argument.
46850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIVariable createComplexVariable(unsigned Tag, DIDescriptor Scope,
469fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                     StringRef Name, DIFile F, unsigned LineNo,
470685501836bc60f53892854253b5bbea6c48b6d7fJay Foad                                     DIType Ty, ArrayRef<Value *> Addr,
471685501836bc60f53892854253b5bbea6c48b6d7fJay Foad                                     unsigned ArgNo = 0);
472fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
47350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFunction - Create a new descriptor for the specified subprogram.
47444498a640daa827220bc4758770190318f0ec69fDevang Patel    /// See comments in DISubprogram for descriptions of these fields.
47544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Scope         Function scope.
47644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Name          Function name.
47744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LinkageName   Mangled function name.
47844498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param File          File where this variable is defined.
47944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LineNo        Line number.
48044498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Ty            Function type.
48144498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isLocalToUnit True if this function is not externally visible..
48244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isDefinition  True if this is a function definition.
4836126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher    /// @param ScopeLine     Set to the beginning of the scope this starts
48444498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Flags         e.g. is this function prototyped or not.
48544498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      This flags are used to emit dwarf attributes.
48644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isOptimized   True if optimization is ON.
48744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Fn            llvm::Function pointer.
488da19475328ece3da19437a2e9eef035dcafa2814Devang Patel    /// @param TParam        Function template parameters.
48950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DISubprogram createFunction(DIDescriptor Scope, StringRef Name,
49044498a640daa827220bc4758770190318f0ec69fDevang Patel                                StringRef LinkageName,
49144498a640daa827220bc4758770190318f0ec69fDevang Patel                                DIFile File, unsigned LineNo,
49244498a640daa827220bc4758770190318f0ec69fDevang Patel                                DIType Ty, bool isLocalToUnit,
49344498a640daa827220bc4758770190318f0ec69fDevang Patel                                bool isDefinition,
4946126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher                                unsigned ScopeLine,
49544498a640daa827220bc4758770190318f0ec69fDevang Patel                                unsigned Flags = 0,
49644498a640daa827220bc4758770190318f0ec69fDevang Patel                                bool isOptimized = false,
497da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                                Function *Fn = 0,
4985e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel                                MDNode *TParam = 0,
4995e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel                                MDNode *Decl = 0);
50044498a640daa827220bc4758770190318f0ec69fDevang Patel
50150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createMethod - Create a new descriptor for the specified C++ method.
50244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// See comments in DISubprogram for descriptions of these fields.
50344498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Scope         Function scope.
50444498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Name          Function name.
50544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LinkageName   Mangled function name.
50644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param File          File where this variable is defined.
50744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LineNo        Line number.
50844498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Ty            Function type.
50944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isLocalToUnit True if this function is not externally visible..
51044498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isDefinition  True if this is a function definition.
5110d4b81519dc3f02bbebb4ecad86bfb590c4d1898Jay Foad    /// @param Virtuality    Attributes describing virtualness. e.g. pure
51244498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      virtual function.
51344498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param VTableIndex   Index no of this method in virtual table.
51444498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param VTableHolder  Type that holds vtable.
51544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Flags         e.g. is this function prototyped or not.
51644498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      This flags are used to emit dwarf attributes.
51744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isOptimized   True if optimization is ON.
51844498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Fn            llvm::Function pointer.
519da19475328ece3da19437a2e9eef035dcafa2814Devang Patel    /// @param TParam        Function template parameters.
52050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DISubprogram createMethod(DIDescriptor Scope, StringRef Name,
52144498a640daa827220bc4758770190318f0ec69fDevang Patel                              StringRef LinkageName,
52244498a640daa827220bc4758770190318f0ec69fDevang Patel                              DIFile File, unsigned LineNo,
52344498a640daa827220bc4758770190318f0ec69fDevang Patel                              DIType Ty, bool isLocalToUnit,
52444498a640daa827220bc4758770190318f0ec69fDevang Patel                              bool isDefinition,
52544498a640daa827220bc4758770190318f0ec69fDevang Patel                              unsigned Virtuality = 0, unsigned VTableIndex = 0,
52644498a640daa827220bc4758770190318f0ec69fDevang Patel                              MDNode *VTableHolder = 0,
52744498a640daa827220bc4758770190318f0ec69fDevang Patel                              unsigned Flags = 0,
52844498a640daa827220bc4758770190318f0ec69fDevang Patel                              bool isOptimized = false,
529da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                              Function *Fn = 0,
530da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                              MDNode *TParam = 0);
531fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
53250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createNameSpace - This creates new descriptor for a namespace
533fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// with the specified parent scope.
534fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Scope       Namespace scope
535fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of this namespace
536fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        Source file
537fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number
53850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DINameSpace createNameSpace(DIDescriptor Scope, StringRef Name,
539fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                DIFile File, unsigned LineNo);
540fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
541fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
5426618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// createLexicalBlockFile - This creates a descriptor for a lexical
5436618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// block with a new file attached. This merely extends the existing
5446618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// lexical block as it crosses a file.
5456618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// @param Scope       Lexical block.
5466618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// @param File        Source file.
5476618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    DILexicalBlockFile createLexicalBlockFile(DIDescriptor Scope,
5489f99721a1882cdef9f7cca25de7ea43627d23958Devang Patel                                              DIFile File);
5496618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher
55050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createLexicalBlock - This creates a descriptor for a lexical block
55143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// with the specified parent context.
55243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope       Parent lexical scope.
55343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File        Source file
55443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Line        Line number
55543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Col         Column number
55650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DILexicalBlock createLexicalBlock(DIDescriptor Scope, DIFile File,
55743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                                      unsigned Line, unsigned Col);
55843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
55950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
560fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Storage     llvm::Value of the variable
561fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo     Variable's debug info descriptor.
562fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertAtEnd Location for the new intrinsic.
56350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo,
564fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                               BasicBlock *InsertAtEnd);
565fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
56650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
567fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Storage      llvm::Value of the variable
568fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
569fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertBefore Location for the new intrinsic.
57050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo,
571fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                               Instruction *InsertBefore);
572fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
573fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
57450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
575fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val          llvm::Value of the variable
576fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Offset       Offset
577fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
578fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertAtEnd Location for the new intrinsic.
57950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset,
580fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         DIVariable VarInfo,
581fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         BasicBlock *InsertAtEnd);
582fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
58350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
584fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val          llvm::Value of the variable
585fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Offset       Offset
586fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
587fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertBefore Location for the new intrinsic.
58850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset,
589fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         DIVariable VarInfo,
590fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         Instruction *InsertBefore);
591fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
59235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  };
59335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel} // end namespace llvm
59435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
59535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#endif
596