DIBuilder.h revision 9493dae613847b01b79914502f337814fe3e00ac
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
1535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#ifndef LLVM_ANALYSIS_DIBUILDER_H
1635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#define LLVM_ANALYSIS_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;
3135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIDescriptor;
3235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIFile;
3335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIEnumerator;
3435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIType;
35fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class DIArray;
36fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class DIGlobalVariable;
37fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class DINameSpace;
38fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel  class DIVariable;
3943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel  class DISubrange;
406618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher  class DILexicalBlockFile;
4143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel  class DILexicalBlock;
4244498a640daa827220bc4758770190318f0ec69fDevang Patel  class DISubprogram;
437e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel  class DITemplateTypeParameter;
44e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel  class DITemplateValueParameter;
451ea02d467a311b4846b942377d0b00fde987be65Devang Patel  class DIObjCProperty;
4635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
4735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIBuilder {
4835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    private:
4935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    Module &M;
5035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    LLVMContext & VMContext;
5135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    MDNode *TheCU;
5235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
5394c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    MDNode *TempEnumTypes;
5494c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    MDNode *TempRetainTypes;
5594c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    MDNode *TempSubprograms;
5694c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    MDNode *TempGVs;
5794c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel
58fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    Function *DeclareFn;     // llvm.dbg.declare
59fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    Function *ValueFn;       // llvm.dbg.value
60fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
6194c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    SmallVector<Value *, 4> AllEnumTypes;
6294c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    SmallVector<Value *, 4> AllRetainTypes;
6394c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    SmallVector<Value *, 4> AllSubprograms;
6494c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel    SmallVector<Value *, 4> AllGVs;
6594c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel
669f9ce61972871efcf794bdc6125835c2c32cd863Craig Topper    DIBuilder(const DIBuilder &) LLVM_DELETED_FUNCTION;
679f9ce61972871efcf794bdc6125835c2c32cd863Craig Topper    void operator=(const DIBuilder &) LLVM_DELETED_FUNCTION;
6835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
6935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    public:
7035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    explicit DIBuilder(Module &M);
7135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    const MDNode *getCU() { return TheCU; }
72dc8c3fdcf15a6fff6251a63869de718527c91940Devang Patel    enum ComplexAddrKind { OpPlus=1, OpDeref };
7335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
746326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel    /// finalize - Construct any deferred debug info descriptors.
756326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel    void finalize();
766326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel
7750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createCompileUnit - A CompileUnit provides an anchor for all debugging
7835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// information generated during this instance of compilation.
792c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Lang     Source programming language, eg. dwarf::DW_LANG_C99
802c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param File     File name
812c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Dir      Directory
822c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Producer String identify producer of debugging information.
832c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 Usuall this is a compiler version string.
842c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param isOptimized A boolean flag which indicates whether optimization
852c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                    is ON or not.
862c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Flags    This string lists command line options. This string is
872c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 directly embedded in debug info output which may be used
882c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 by a tool analyzing generated debugging information.
892c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param RV       This indicates runtime version for languages like
902c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 Objective-C.
9150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    void createCompileUnit(unsigned Lang, StringRef File, StringRef Dir,
922c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel                           StringRef Producer,
9335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                           bool isOptimized, StringRef Flags, unsigned RV);
9435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
9550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFile - Create a file descriptor to hold debugging information
9635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// for a file.
9750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIFile createFile(StringRef Filename, StringRef Directory);
9835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
9950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createEnumerator - Create a single enumerator value.
10050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIEnumerator createEnumerator(StringRef Name, uint64_t Val);
10135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
102734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel    /// createNullPtrType - Create C++0x nullptr type.
103734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel    DIType createNullPtrType(StringRef Name);
104734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel
10550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createBasicType - Create debugging information entry for a basic
1062c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// type.
1072c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Name        Type name.
1082c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param SizeInBits  Size of the type.
1092c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param AlignInBits Type alignment.
1102c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Encoding    DWARF encoding code, e.g. dwarf::DW_ATE_float.
11150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createBasicType(StringRef Name, uint64_t SizeInBits,
11235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                           uint64_t AlignInBits, unsigned Encoding);
11335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
11450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createQualifiedType - Create debugging information entry for a qualified
11535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// type, e.g. 'const int'.
1162c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Tag         Tag identifing type, e.g. dwarf::TAG_volatile_type
1172c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param FromTy      Base Type.
11850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createQualifiedType(unsigned Tag, DIType FromTy);
11935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
12050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createPointerType - Create debugging information entry for a pointer.
121fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param PointeeTy   Type pointed by this pointer.
122fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param SizeInBits  Size.
123fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param AlignInBits Alignment. (optional)
124fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Pointer type name. (optional)
12550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createPointerType(DIType PointeeTy, uint64_t SizeInBits,
126fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                             uint64_t AlignInBits = 0,
127fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                             StringRef Name = StringRef());
12835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
12950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createReferenceType - Create debugging information entry for a c++
130791e629deef7e4a410e67527da26405916415d3aEric Christopher    /// style reference or rvalue reference type.
131791e629deef7e4a410e67527da26405916415d3aEric Christopher    DIType createReferenceType(unsigned Tag, DIType RTy);
13235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
13350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTypedef - Create debugging information entry for a typedef.
134fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Original type.
135fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Typedef name.
136fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this type is defined.
137fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
138da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel    /// @param Context     The surrounding context for the typedef.
13950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTypedef(DIType Ty, StringRef Name, DIFile File,
140da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel                         unsigned LineNo, DIDescriptor Context);
14135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
14250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFriend - Create debugging information entry for a 'friend'.
14350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createFriend(DIType Ty, DIType FriendTy);
14435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
14550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createInheritance - Create debugging information entry to establish
1462c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// inheritance relationship between two types.
147fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty           Original type.
148fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param BaseTy       Base type. Ty is inherits from base.
149fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param BaseOffset   Base offset.
150fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Flags        Flags to describe inheritance attribute,
151fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                     e.g. private
15250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createInheritance(DIType Ty, DIType BaseTy, uint64_t BaseOffset,
15335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                             unsigned Flags);
15435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
15550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createMemberType - Create debugging information entry for a member.
156fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel    /// @param Scope        Member scope.
157fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name         Member name.
158fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File         File where this member is defined.
159fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo       Line number.
160fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param SizeInBits   Member size.
161fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param AlignInBits  Member alignment.
162fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param OffsetInBits Member offset.
163fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
164fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty           Parent type.
165fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel    DIType createMemberType(DIDescriptor Scope, StringRef Name, DIFile File,
166fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            unsigned LineNo, uint64_t SizeInBits,
16735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                            uint64_t AlignInBits, uint64_t OffsetInBits,
16835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                            unsigned Flags, DIType Ty);
16935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
170e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// createObjCIVar - Create debugging information entry for Objective-C
171e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// instance variable.
172e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Name         Member name.
173e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param File         File where this member is defined.
174e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param LineNo       Line number.
175e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param SizeInBits   Member size.
176e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param AlignInBits  Member alignment.
177e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param OffsetInBits Member offset.
178e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
179e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Ty           Parent type.
180d9b0b025612992a0b724eeca8bdf10b1d7a5c355Benjamin Kramer    /// @param PropertyName Name of the Objective C property associated with
181e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    ///                     this ivar.
182a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param PropertyGetterName Name of the Objective C property getter
183a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    ///                           selector.
184a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param PropertySetterName Name of the Objective C property setter
185a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    ///                           selector.
186e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param PropertyAttributes Objective C property attributes.
187e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    DIType createObjCIVar(StringRef Name, DIFile File,
188e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned LineNo, uint64_t SizeInBits,
189e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          uint64_t AlignInBits, uint64_t OffsetInBits,
190e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned Flags, DIType Ty,
191e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertyName = StringRef(),
192e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertyGetterName = StringRef(),
193e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertySetterName = StringRef(),
194e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned PropertyAttributes = 0);
195e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel
1966588abf377b7381274236e651462ec83052f6013Devang Patel    /// createObjCIVar - Create debugging information entry for Objective-C
1976588abf377b7381274236e651462ec83052f6013Devang Patel    /// instance variable.
1986588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param Name         Member name.
1996588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param File         File where this member is defined.
2006588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param LineNo       Line number.
2016588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param SizeInBits   Member size.
2026588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param AlignInBits  Member alignment.
2036588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param OffsetInBits Member offset.
2046588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
2056588abf377b7381274236e651462ec83052f6013Devang Patel    /// @param Ty           Parent type.
206a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param PropertyNode Property associated with this ivar.
2076588abf377b7381274236e651462ec83052f6013Devang Patel    DIType createObjCIVar(StringRef Name, DIFile File,
2086588abf377b7381274236e651462ec83052f6013Devang Patel                          unsigned LineNo, uint64_t SizeInBits,
2096588abf377b7381274236e651462ec83052f6013Devang Patel                          uint64_t AlignInBits, uint64_t OffsetInBits,
2106588abf377b7381274236e651462ec83052f6013Devang Patel                          unsigned Flags, DIType Ty,
2116588abf377b7381274236e651462ec83052f6013Devang Patel                          MDNode *PropertyNode);
2126588abf377b7381274236e651462ec83052f6013Devang Patel
2131ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// createObjCProperty - Create debugging information entry for Objective-C
2141ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// property.
2151ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param Name         Property name.
216b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    /// @param File         File where this property is defined.
217b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    /// @param LineNumber   Line number.
2181ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param GetterName   Name of the Objective C property getter selector.
2191ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param SetterName   Name of the Objective C property setter selector.
2201ea02d467a311b4846b942377d0b00fde987be65Devang Patel    /// @param PropertyAttributes Objective C property attributes.
221b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    /// @param Ty           Type.
222b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher    DIObjCProperty createObjCProperty(StringRef Name,
22317689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      DIFile File, unsigned LineNumber,
22417689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      StringRef GetterName,
22517689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      StringRef SetterName,
22617689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      unsigned PropertyAttributes,
22717689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling                                      DIType Ty);
228b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher
22950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createClassType - Create debugging information entry for a class.
2300a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Scope        Scope in which this class is defined.
2310a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Name         class name.
2320a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param File         File where this member is defined.
233a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
2340a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param SizeInBits   Member size.
2350a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param AlignInBits  Member alignment.
2360a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param OffsetInBits Member offset.
2370a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
2380a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Elements     class members.
2390a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param VTableHolder Debug info of the base class that contains vtable
2400a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     for this type. This is used in
2410a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     DW_AT_containing_type. See DWARF documentation
2420a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     for more info.
2437e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param TemplateParms Template type parameters.
24450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createClassType(DIDescriptor Scope, StringRef Name, DIFile File,
2450a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           unsigned LineNumber, uint64_t SizeInBits,
2460a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           uint64_t AlignInBits, uint64_t OffsetInBits,
2470a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           unsigned Flags, DIType DerivedFrom,
2487e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                           DIArray Elements, MDNode *VTableHolder = 0,
2497e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                           MDNode *TemplateParms = 0);
2500a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel
25150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createStructType - Create debugging information entry for a struct.
25243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this struct is defined.
25343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Struct name.
25443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
255a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
25643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
25743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
25843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
25943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Struct elements.
26043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param RunTimeLang  Optional parameter, Objective-C runtime version.
26150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createStructType(DIDescriptor Scope, StringRef Name, DIFile File,
262fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            unsigned LineNumber, uint64_t SizeInBits,
263fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            uint64_t AlignInBits, unsigned Flags,
264fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            DIArray Elements, unsigned RunTimeLang = 0);
265fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
26650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createUnionType - Create debugging information entry for an union.
26743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this union is defined.
26843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Union name.
26943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
270a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
27143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
27243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
27343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
27443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Union elements.
27543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param RunTimeLang  Optional parameter, Objective-C runtime version.
27650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createUnionType(DIDescriptor Scope, StringRef Name, DIFile File,
27743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                           unsigned LineNumber, uint64_t SizeInBits,
27843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                           uint64_t AlignInBits, unsigned Flags,
27943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                           DIArray Elements, unsigned RunTimeLang = 0);
28043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
28150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemplateTypeParameter - Create debugging information for template
2827e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// type parameter.
283e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Scope        Scope in which this type is defined.
2847e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param Name         Type parameter name.
2857e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param Ty           Parameter type.
2867e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param File         File where this type parameter is defined.
2877e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param LineNo       Line number.
2887e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param ColumnNo     Column Number.
2897e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    DITemplateTypeParameter
29050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createTemplateTypeParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
2917e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                                MDNode *File = 0, unsigned LineNo = 0,
2927e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                                unsigned ColumnNo = 0);
2937e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel
29450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemplateValueParameter - Create debugging information for template
295e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// value parameter.
296e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Scope        Scope in which this type is defined.
297e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Name         Value parameter name.
298e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Ty           Parameter type.
299e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Value        Constant parameter value.
300e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param File         File where this type parameter is defined.
301e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param LineNo       Line number.
302e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param ColumnNo     Column Number.
303e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    DITemplateValueParameter
30450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
305e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 uint64_t Value,
306e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 MDNode *File = 0, unsigned LineNo = 0,
307e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 unsigned ColumnNo = 0);
308e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel
30950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createArrayType - Create debugging information entry for an array.
31043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Size         Array size.
31143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Alignment.
31243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Ty           Element type.
31343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Subscripts   Subscripts.
31450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createArrayType(uint64_t Size, uint64_t AlignInBits,
31543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                           DIType Ty, DIArray Subscripts);
31643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
31750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createVectorType - Create debugging information entry for a vector type.
31843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Size         Array size.
31943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Alignment.
32043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Ty           Element type.
32143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Subscripts   Subscripts.
32250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createVectorType(uint64_t Size, uint64_t AlignInBits,
32343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                            DIType Ty, DIArray Subscripts);
32443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
32550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createEnumerationType - Create debugging information entry for an
32643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// enumeration.
32743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this enumeration is defined.
32843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Union name.
32943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
330a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LineNumber   Line number.
33143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
33243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
33343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Enumeration elements.
33450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createEnumerationType(DIDescriptor Scope, StringRef Name,
33543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                                 DIFile File, unsigned LineNumber,
336bb0f6eac1f2d04e485607f0726c31a84ce9b8cedEric Christopher                                 uint64_t SizeInBits, uint64_t AlignInBits,
337ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman                                 DIArray Elements, DIType ClassType);
33843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
33950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createSubroutineType - Create subroutine type.
340a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param File           File in which this subroutine is defined.
341a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param ParameterTypes An array of subroutine parameter types. This
342a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    ///                       includes return type at 0th index.
34350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createSubroutineType(DIFile File, DIArray ParameterTypes);
34443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
34550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createArtificialType - Create a new DIType with "artificial" flag set.
34650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createArtificialType(DIType Ty);
347fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
348e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher    /// createObjectPointerType - Create a new DIType with the "object pointer"
349e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher    /// flag set.
350e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher    DIType createObjectPointerType(DIType Ty);
351e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher
35250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemporaryType - Create a temporary forward-declared type.
35350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTemporaryType();
35450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTemporaryType(DIFile F);
355fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
3564fe345729285ae634c657ab854057464d03220f7Eric Christopher    /// createForwardDecl - Create a temporary forward-declared type.
357216432df5ac897327a0cb6323f08811910481038Eric Christopher    DIType createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope,
358ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman                             DIFile F, unsigned Line, unsigned RuntimeLang = 0,
359ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman                             uint64_t SizeInBits = 0, uint64_t AlignInBits = 0);
3604fe345729285ae634c657ab854057464d03220f7Eric Christopher
36150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// retainType - Retain DIType in a module even if it is not referenced
36243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// through debug info anchors.
36350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    void retainType(DIType T);
36443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
36550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createUnspecifiedParameter - Create unspeicified type descriptor
36643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// for a subroutine type.
36750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIDescriptor createUnspecifiedParameter();
36843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
36950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// getOrCreateArray - Get a DIArray, create one if required.
370685501836bc60f53892854253b5bbea6c48b6d7fJay Foad    DIArray getOrCreateArray(ArrayRef<Value *> Elements);
371fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
37250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// getOrCreateSubrange - Create a descriptor for a value range.  This
37343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// implicitly uniques the values returned.
3749493dae613847b01b79914502f337814fe3e00acBill Wendling    DISubrange getOrCreateSubrange(int64_t Lo, int64_t Count);
37543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
37650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createGlobalVariable - Create a new descriptor for the specified global.
377fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of the variable.
378fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this variable is defined.
379fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
380fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type.
381fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param isLocalToUnit Boolean flag indicate whether this variable is
382fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                      externally visible or not.
383fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val         llvm::Value of the variable.
384fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    DIGlobalVariable
38550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createGlobalVariable(StringRef Name, DIFile File, unsigned LineNo,
386fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         DIType Ty, bool isLocalToUnit, llvm::Value *Val);
387fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
388fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
38950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createStaticVariable - Create a new descriptor for the specified
390fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// variable.
391a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param Context     Variable scope.
392fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of the variable.
393a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param LinkageName Mangled  name of the variable.
394fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this variable is defined.
395fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
396fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type.
397fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param isLocalToUnit Boolean flag indicate whether this variable is
398fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                      externally visible or not.
399fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val         llvm::Value of the variable.
400fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    DIGlobalVariable
40150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createStaticVariable(DIDescriptor Context, StringRef Name,
402fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         StringRef LinkageName, DIFile File, unsigned LineNo,
403fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         DIType Ty, bool isLocalToUnit, llvm::Value *Val);
404fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
405fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
40650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createLocalVariable - Create a new descriptor for the specified
40748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// local variable.
40848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Tag         Dwarf TAG. Usually DW_TAG_auto_variable or
40948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    ///                    DW_TAG_arg_variable.
41048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Scope       Variable scope.
41148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Name        Variable name.
41248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param File        File where this variable is defined.
41348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param LineNo      Line number.
41448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Ty          Variable Type
41548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param AlwaysPreserve Boolean. Set to true if debug info for this
41648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    ///                       variable should be preserved in optimized build.
41748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Flags          Flags, e.g. artificial variable.
418e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    /// @param ArgNo       If this variable is an arugment then this argument's
419e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    ///                    number. 1 indicates 1st argument.
42050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIVariable createLocalVariable(unsigned Tag, DIDescriptor Scope,
42148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   StringRef Name,
42248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   DIFile File, unsigned LineNo,
42348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   DIType Ty, bool AlwaysPreserve = false,
424e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel                                   unsigned Flags = 0,
425e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel                                   unsigned ArgNo = 0);
42648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel
42748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel
42850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createComplexVariable - Create a new descriptor for the specified
429fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// variable which has a complex address expression for its address.
430fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Tag         Dwarf TAG. Usually DW_TAG_auto_variable or
431fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                    DW_TAG_arg_variable.
432fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Scope       Variable scope.
433fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Variable name.
434a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko    /// @param F           File where this variable is defined.
435fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
436fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type
437685501836bc60f53892854253b5bbea6c48b6d7fJay Foad    /// @param Addr        An array of complex address operations.
438e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    /// @param ArgNo       If this variable is an arugment then this argument's
439e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    ///                    number. 1 indicates 1st argument.
44050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIVariable createComplexVariable(unsigned Tag, DIDescriptor Scope,
441fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                     StringRef Name, DIFile F, unsigned LineNo,
442685501836bc60f53892854253b5bbea6c48b6d7fJay Foad                                     DIType Ty, ArrayRef<Value *> Addr,
443685501836bc60f53892854253b5bbea6c48b6d7fJay Foad                                     unsigned ArgNo = 0);
444fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
44550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFunction - Create a new descriptor for the specified subprogram.
44644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// See comments in DISubprogram for descriptions of these fields.
44744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Scope         Function scope.
44844498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Name          Function name.
44944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LinkageName   Mangled function name.
45044498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param File          File where this variable is defined.
45144498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LineNo        Line number.
45244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Ty            Function type.
45344498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isLocalToUnit True if this function is not externally visible..
45444498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isDefinition  True if this is a function definition.
4556126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher    /// @param ScopeLine     Set to the beginning of the scope this starts
45644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Flags         e.g. is this function prototyped or not.
45744498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      This flags are used to emit dwarf attributes.
45844498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isOptimized   True if optimization is ON.
45944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Fn            llvm::Function pointer.
460da19475328ece3da19437a2e9eef035dcafa2814Devang Patel    /// @param TParam        Function template parameters.
46150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DISubprogram createFunction(DIDescriptor Scope, StringRef Name,
46244498a640daa827220bc4758770190318f0ec69fDevang Patel                                StringRef LinkageName,
46344498a640daa827220bc4758770190318f0ec69fDevang Patel                                DIFile File, unsigned LineNo,
46444498a640daa827220bc4758770190318f0ec69fDevang Patel                                DIType Ty, bool isLocalToUnit,
46544498a640daa827220bc4758770190318f0ec69fDevang Patel                                bool isDefinition,
4666126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher                                unsigned ScopeLine,
46744498a640daa827220bc4758770190318f0ec69fDevang Patel                                unsigned Flags = 0,
46844498a640daa827220bc4758770190318f0ec69fDevang Patel                                bool isOptimized = false,
469da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                                Function *Fn = 0,
4705e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel                                MDNode *TParam = 0,
4715e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel                                MDNode *Decl = 0);
47244498a640daa827220bc4758770190318f0ec69fDevang Patel
47350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createMethod - Create a new descriptor for the specified C++ method.
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.
4830d4b81519dc3f02bbebb4ecad86bfb590c4d1898Jay Foad    /// @param Virtuality    Attributes describing virtualness. e.g. pure
48444498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      virtual function.
48544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param VTableIndex   Index no of this method in virtual table.
48644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param VTableHolder  Type that holds vtable.
48744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Flags         e.g. is this function prototyped or not.
48844498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      This flags are used to emit dwarf attributes.
48944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isOptimized   True if optimization is ON.
49044498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Fn            llvm::Function pointer.
491da19475328ece3da19437a2e9eef035dcafa2814Devang Patel    /// @param TParam        Function template parameters.
49250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DISubprogram createMethod(DIDescriptor Scope, StringRef Name,
49344498a640daa827220bc4758770190318f0ec69fDevang Patel                              StringRef LinkageName,
49444498a640daa827220bc4758770190318f0ec69fDevang Patel                              DIFile File, unsigned LineNo,
49544498a640daa827220bc4758770190318f0ec69fDevang Patel                              DIType Ty, bool isLocalToUnit,
49644498a640daa827220bc4758770190318f0ec69fDevang Patel                              bool isDefinition,
49744498a640daa827220bc4758770190318f0ec69fDevang Patel                              unsigned Virtuality = 0, unsigned VTableIndex = 0,
49844498a640daa827220bc4758770190318f0ec69fDevang Patel                              MDNode *VTableHolder = 0,
49944498a640daa827220bc4758770190318f0ec69fDevang Patel                              unsigned Flags = 0,
50044498a640daa827220bc4758770190318f0ec69fDevang Patel                              bool isOptimized = false,
501da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                              Function *Fn = 0,
502da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                              MDNode *TParam = 0);
503fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
50450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createNameSpace - This creates new descriptor for a namespace
505fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// with the specified parent scope.
506fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Scope       Namespace scope
507fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of this namespace
508fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        Source file
509fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number
51050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DINameSpace createNameSpace(DIDescriptor Scope, StringRef Name,
511fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                DIFile File, unsigned LineNo);
512fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
513fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
5146618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// createLexicalBlockFile - This creates a descriptor for a lexical
5156618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// block with a new file attached. This merely extends the existing
5166618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// lexical block as it crosses a file.
5176618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// @param Scope       Lexical block.
5186618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    /// @param File        Source file.
5196618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher    DILexicalBlockFile createLexicalBlockFile(DIDescriptor Scope,
5209f99721a1882cdef9f7cca25de7ea43627d23958Devang Patel                                              DIFile File);
5216618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher
52250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createLexicalBlock - This creates a descriptor for a lexical block
52343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// with the specified parent context.
52443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope       Parent lexical scope.
52543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File        Source file
52643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Line        Line number
52743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Col         Column number
52850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DILexicalBlock createLexicalBlock(DIDescriptor Scope, DIFile File,
52943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                                      unsigned Line, unsigned Col);
53043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
53150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
532fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Storage     llvm::Value of the variable
533fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo     Variable's debug info descriptor.
534fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertAtEnd Location for the new intrinsic.
53550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo,
536fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                               BasicBlock *InsertAtEnd);
537fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
53850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
539fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Storage      llvm::Value of the variable
540fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
541fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertBefore Location for the new intrinsic.
54250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo,
543fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                               Instruction *InsertBefore);
544fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
545fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
54650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
547fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val          llvm::Value of the variable
548fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Offset       Offset
549fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
550fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertAtEnd Location for the new intrinsic.
55150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset,
552fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         DIVariable VarInfo,
553fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         BasicBlock *InsertAtEnd);
554fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
55550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
556fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val          llvm::Value of the variable
557fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Offset       Offset
558fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
559fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertBefore Location for the new intrinsic.
56050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset,
561fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         DIVariable VarInfo,
562fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         Instruction *InsertBefore);
563fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
56435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  };
56535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel} // end namespace llvm
56635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
56735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#endif
568