DIBuilder.h revision fa3f9c001fe771af7dfcd7663b9d5dc345649d43
135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//===--- llvm/Analysis/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
181f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/DataTypes.h"
19685501836bc60f53892854253b5bbea6c48b6d7fJay Foad#include "llvm/ADT/ArrayRef.h"
2035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#include "llvm/ADT/StringRef.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;
4043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel  class DILexicalBlock;
4144498a640daa827220bc4758770190318f0ec69fDevang Patel  class DISubprogram;
427e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel  class DITemplateTypeParameter;
43e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel  class DITemplateValueParameter;
4435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
4535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  class DIBuilder {
4635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    private:
4735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    Module &M;
4835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    LLVMContext & VMContext;
4935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    MDNode *TheCU;
5035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
51fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    Function *DeclareFn;     // llvm.dbg.declare
52fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    Function *ValueFn;       // llvm.dbg.value
53fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
5435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    DIBuilder(const DIBuilder &);       // DO NOT IMPLEMENT
5535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    void operator=(const DIBuilder &);  // DO NOT IMPLEMENT
5635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
5735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    public:
5835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    explicit DIBuilder(Module &M);
5935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    const MDNode *getCU() { return TheCU; }
60dc8c3fdcf15a6fff6251a63869de718527c91940Devang Patel    enum ComplexAddrKind { OpPlus=1, OpDeref };
6135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
6250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createCompileUnit - A CompileUnit provides an anchor for all debugging
6335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// information generated during this instance of compilation.
642c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Lang     Source programming language, eg. dwarf::DW_LANG_C99
652c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param File     File name
662c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Dir      Directory
672c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Producer String identify producer of debugging information.
682c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 Usuall this is a compiler version string.
692c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param isOptimized A boolean flag which indicates whether optimization
702c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                    is ON or not.
712c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Flags    This string lists command line options. This string is
722c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 directly embedded in debug info output which may be used
732c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 by a tool analyzing generated debugging information.
742c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param RV       This indicates runtime version for languages like
752c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    ///                 Objective-C.
7650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    void createCompileUnit(unsigned Lang, StringRef File, StringRef Dir,
772c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel                           StringRef Producer,
7835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                           bool isOptimized, StringRef Flags, unsigned RV);
7935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
8050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFile - Create a file descriptor to hold debugging information
8135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// for a file.
8250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIFile createFile(StringRef Filename, StringRef Directory);
8335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
8450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createEnumerator - Create a single enumerator value.
8550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIEnumerator createEnumerator(StringRef Name, uint64_t Val);
8635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
8750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createBasicType - Create debugging information entry for a basic
882c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// type.
892c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Name        Type name.
902c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param SizeInBits  Size of the type.
912c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param AlignInBits Type alignment.
922c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Encoding    DWARF encoding code, e.g. dwarf::DW_ATE_float.
9350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createBasicType(StringRef Name, uint64_t SizeInBits,
9435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                           uint64_t AlignInBits, unsigned Encoding);
9535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
9650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createQualifiedType - Create debugging information entry for a qualified
9735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel    /// type, e.g. 'const int'.
982c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param Tag         Tag identifing type, e.g. dwarf::TAG_volatile_type
992c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// @param FromTy      Base Type.
10050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createQualifiedType(unsigned Tag, DIType FromTy);
10135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
10250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createPointerType - Create debugging information entry for a pointer.
103fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param PointeeTy   Type pointed by this pointer.
104fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param SizeInBits  Size.
105fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param AlignInBits Alignment. (optional)
106fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Pointer type name. (optional)
10750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createPointerType(DIType PointeeTy, uint64_t SizeInBits,
108fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                             uint64_t AlignInBits = 0,
109fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                             StringRef Name = StringRef());
11035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
11150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createReferenceType - Create debugging information entry for a c++
112fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// style reference.
11350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createReferenceType(DIType RTy);
11435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
11550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTypedef - Create debugging information entry for a typedef.
116fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Original type.
117fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Typedef name.
118fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this type is defined.
119fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
120da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel    /// @param Context     The surrounding context for the typedef.
12150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTypedef(DIType Ty, StringRef Name, DIFile File,
122da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel                         unsigned LineNo, DIDescriptor Context);
12335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
12450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFriend - Create debugging information entry for a 'friend'.
12550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createFriend(DIType Ty, DIType FriendTy);
12635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
12750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createInheritance - Create debugging information entry to establish
1282c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel    /// inheritance relationship between two types.
129fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty           Original type.
130fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param BaseTy       Base type. Ty is inherits from base.
131fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param BaseOffset   Base offset.
132fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Flags        Flags to describe inheritance attribute,
133fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                     e.g. private
13450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createInheritance(DIType Ty, DIType BaseTy, uint64_t BaseOffset,
13535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                             unsigned Flags);
13635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
13750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createMemberType - Create debugging information entry for a member.
138fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel    /// @param Scope        Member scope.
139fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name         Member name.
140fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File         File where this member is defined.
141fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo       Line number.
142fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param SizeInBits   Member size.
143fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param AlignInBits  Member alignment.
144fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param OffsetInBits Member offset.
145fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
146fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty           Parent type.
147fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel    DIType createMemberType(DIDescriptor Scope, StringRef Name, DIFile File,
148fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            unsigned LineNo, uint64_t SizeInBits,
14935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                            uint64_t AlignInBits, uint64_t OffsetInBits,
15035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel                            unsigned Flags, DIType Ty);
15135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
152e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// createObjCIVar - Create debugging information entry for Objective-C
153e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// instance variable.
154e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Name         Member name.
155e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param File         File where this member is defined.
156e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param LineNo       Line number.
157e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param SizeInBits   Member size.
158e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param AlignInBits  Member alignment.
159e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param OffsetInBits Member offset.
160e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
161e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param Ty           Parent type.
162e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param PropertyName Name of the Objective C property assoicated with
163e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    ///                     this ivar.
164e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param GetterName   Name of the Objective C property getter selector.
165e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param SetterName   Name of the Objective C property setter selector.
166e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    /// @param PropertyAttributes Objective C property attributes.
167e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel    DIType createObjCIVar(StringRef Name, DIFile File,
168e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned LineNo, uint64_t SizeInBits,
169e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          uint64_t AlignInBits, uint64_t OffsetInBits,
170e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned Flags, DIType Ty,
171e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertyName = StringRef(),
172e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertyGetterName = StringRef(),
173e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          StringRef PropertySetterName = StringRef(),
174e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel                          unsigned PropertyAttributes = 0);
175e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel
17650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createClassType - Create debugging information entry for a class.
1770a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Scope        Scope in which this class is defined.
1780a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Name         class name.
1790a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param File         File where this member is defined.
1800a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param LineNo       Line number.
1810a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param SizeInBits   Member size.
1820a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param AlignInBits  Member alignment.
1830a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param OffsetInBits Member offset.
1840a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
1850a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param Elements     class members.
1860a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    /// @param VTableHolder Debug info of the base class that contains vtable
1870a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     for this type. This is used in
1880a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     DW_AT_containing_type. See DWARF documentation
1890a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel    ///                     for more info.
1907e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param TemplateParms Template type parameters.
19150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createClassType(DIDescriptor Scope, StringRef Name, DIFile File,
1920a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           unsigned LineNumber, uint64_t SizeInBits,
1930a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           uint64_t AlignInBits, uint64_t OffsetInBits,
1940a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel                           unsigned Flags, DIType DerivedFrom,
1957e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                           DIArray Elements, MDNode *VTableHolder = 0,
1967e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                           MDNode *TemplateParms = 0);
1970a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel
19850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createStructType - Create debugging information entry for a struct.
19943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this struct is defined.
20043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Struct name.
20143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
20243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param LineNo       Line number.
20343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
20443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
20543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
20643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Struct elements.
20743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param RunTimeLang  Optional parameter, Objective-C runtime version.
20850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createStructType(DIDescriptor Scope, StringRef Name, DIFile File,
209fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            unsigned LineNumber, uint64_t SizeInBits,
210fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            uint64_t AlignInBits, unsigned Flags,
211fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                            DIArray Elements, unsigned RunTimeLang = 0);
212fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
21350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createUnionType - Create debugging information entry for an union.
21443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this union is defined.
21543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Union name.
21643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
21743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param LineNo       Line number.
21843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
21943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
22043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Flags        Flags to encode member attribute, e.g. private
22143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Union elements.
22243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param RunTimeLang  Optional parameter, Objective-C runtime version.
22350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createUnionType(DIDescriptor Scope, StringRef Name, DIFile File,
22443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                           unsigned LineNumber, uint64_t SizeInBits,
22543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                           uint64_t AlignInBits, unsigned Flags,
22643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                           DIArray Elements, unsigned RunTimeLang = 0);
22743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
22850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemplateTypeParameter - Create debugging information for template
2297e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// type parameter.
230e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Scope        Scope in which this type is defined.
2317e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param Name         Type parameter name.
2327e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param Ty           Parameter type.
2337e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param File         File where this type parameter is defined.
2347e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param LineNo       Line number.
2357e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    /// @param ColumnNo     Column Number.
2367e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel    DITemplateTypeParameter
23750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createTemplateTypeParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
2387e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                                MDNode *File = 0, unsigned LineNo = 0,
2397e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel                                unsigned ColumnNo = 0);
2407e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel
24150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemplateValueParameter - Create debugging information for template
242e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// value parameter.
243e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Scope        Scope in which this type is defined.
244e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Name         Value parameter name.
245e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Ty           Parameter type.
246e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param Value        Constant parameter value.
247e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param File         File where this type parameter is defined.
248e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param LineNo       Line number.
249e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    /// @param ColumnNo     Column Number.
250e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel    DITemplateValueParameter
25150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
252e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 uint64_t Value,
253e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 MDNode *File = 0, unsigned LineNo = 0,
254e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel                                 unsigned ColumnNo = 0);
255e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel
25650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createArrayType - Create debugging information entry for an array.
25743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Size         Array size.
25843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Alignment.
25943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Ty           Element type.
26043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Subscripts   Subscripts.
26150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createArrayType(uint64_t Size, uint64_t AlignInBits,
26243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                           DIType Ty, DIArray Subscripts);
26343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
26450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createVectorType - Create debugging information entry for a vector type.
26543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Size         Array size.
26643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Alignment.
26743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Ty           Element type.
26843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Subscripts   Subscripts.
26950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createVectorType(uint64_t Size, uint64_t AlignInBits,
27043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                            DIType Ty, DIArray Subscripts);
27143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
27250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createEnumerationType - Create debugging information entry for an
27343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// enumeration.
27443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope        Scope in which this enumeration is defined.
27543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Name         Union name.
27643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File         File where this member is defined.
27743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param LineNo       Line number.
27843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param SizeInBits   Member size.
27943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param AlignInBits  Member alignment.
28043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Elements     Enumeration elements.
28150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createEnumerationType(DIDescriptor Scope, StringRef Name,
28243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                                 DIFile File, unsigned LineNumber,
28343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                                 uint64_t SizeInBits,
28443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                                 uint64_t AlignInBits, DIArray Elements);
28543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
28650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createSubroutineType - Create subroutine type.
28743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File          File in which this subroutine is defined.
28843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param ParamterTypes An array of subroutine parameter types. This
28943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    ///                      includes return type at 0th index.
29050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createSubroutineType(DIFile File, DIArray ParameterTypes);
29143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
29250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createArtificialType - Create a new DIType with "artificial" flag set.
29350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createArtificialType(DIType Ty);
294fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
29550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createTemporaryType - Create a temporary forward-declared type.
29650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTemporaryType();
29750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIType createTemporaryType(DIFile F);
298fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
29950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// retainType - Retain DIType in a module even if it is not referenced
30043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// through debug info anchors.
30150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    void retainType(DIType T);
30243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
30350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createUnspecifiedParameter - Create unspeicified type descriptor
30443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// for a subroutine type.
30550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIDescriptor createUnspecifiedParameter();
30643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
30750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// getOrCreateArray - Get a DIArray, create one if required.
308685501836bc60f53892854253b5bbea6c48b6d7fJay Foad    DIArray getOrCreateArray(ArrayRef<Value *> Elements);
309fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
31050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// getOrCreateSubrange - Create a descriptor for a value range.  This
31143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// implicitly uniques the values returned.
31250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DISubrange getOrCreateSubrange(int64_t Lo, int64_t Hi);
31343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
31450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createGlobalVariable - Create a new descriptor for the specified global.
315fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of the variable.
316fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this variable is defined.
317fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
318fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type.
319fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param isLocalToUnit Boolean flag indicate whether this variable is
320fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                      externally visible or not.
321fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val         llvm::Value of the variable.
322fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    DIGlobalVariable
32350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createGlobalVariable(StringRef Name, DIFile File, unsigned LineNo,
324fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         DIType Ty, bool isLocalToUnit, llvm::Value *Val);
325fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
326fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
32750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createStaticVariable - Create a new descriptor for the specified
328fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// variable.
329fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Conext      Variable scope.
330fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of the variable.
331fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LinakgeName Mangled  name of the variable.
332fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this variable is defined.
333fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
334fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type.
335fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param isLocalToUnit Boolean flag indicate whether this variable is
336fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                      externally visible or not.
337fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val         llvm::Value of the variable.
338fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    DIGlobalVariable
33950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    createStaticVariable(DIDescriptor Context, StringRef Name,
340fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         StringRef LinkageName, DIFile File, unsigned LineNo,
341fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                         DIType Ty, bool isLocalToUnit, llvm::Value *Val);
342fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
343fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
34450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createLocalVariable - Create a new descriptor for the specified
34548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// local variable.
34648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Tag         Dwarf TAG. Usually DW_TAG_auto_variable or
34748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    ///                    DW_TAG_arg_variable.
34848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Scope       Variable scope.
34948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Name        Variable name.
35048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param File        File where this variable is defined.
35148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param LineNo      Line number.
35248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Ty          Variable Type
35348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param AlwaysPreserve Boolean. Set to true if debug info for this
35448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    ///                       variable should be preserved in optimized build.
35548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel    /// @param Flags          Flags, e.g. artificial variable.
356e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    /// @param ArgNo       If this variable is an arugment then this argument's
357e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    ///                    number. 1 indicates 1st argument.
35850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIVariable createLocalVariable(unsigned Tag, DIDescriptor Scope,
35948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   StringRef Name,
36048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   DIFile File, unsigned LineNo,
36148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel                                   DIType Ty, bool AlwaysPreserve = false,
362e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel                                   unsigned Flags = 0,
363e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel                                   unsigned ArgNo = 0);
36448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel
36548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel
36650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createComplexVariable - Create a new descriptor for the specified
367fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// variable which has a complex address expression for its address.
368fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Tag         Dwarf TAG. Usually DW_TAG_auto_variable or
369fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    ///                    DW_TAG_arg_variable.
370fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Scope       Variable scope.
371fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Variable name.
372fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        File where this variable is defined.
373fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number.
374fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Ty          Variable Type
375685501836bc60f53892854253b5bbea6c48b6d7fJay Foad    /// @param Addr        An array of complex address operations.
376e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    /// @param ArgNo       If this variable is an arugment then this argument's
377e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel    ///                    number. 1 indicates 1st argument.
37850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DIVariable createComplexVariable(unsigned Tag, DIDescriptor Scope,
379fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                     StringRef Name, DIFile F, unsigned LineNo,
380685501836bc60f53892854253b5bbea6c48b6d7fJay Foad                                     DIType Ty, ArrayRef<Value *> Addr,
381685501836bc60f53892854253b5bbea6c48b6d7fJay Foad                                     unsigned ArgNo = 0);
382fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
38350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createFunction - Create a new descriptor for the specified subprogram.
38444498a640daa827220bc4758770190318f0ec69fDevang Patel    /// See comments in DISubprogram for descriptions of these fields.
38544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Scope         Function scope.
38644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Name          Function name.
38744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LinkageName   Mangled function name.
38844498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param File          File where this variable is defined.
38944498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LineNo        Line number.
39044498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Ty            Function type.
39144498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isLocalToUnit True if this function is not externally visible..
39244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isDefinition  True if this is a function definition.
39344498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Flags         e.g. is this function prototyped or not.
39444498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      This flags are used to emit dwarf attributes.
39544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isOptimized   True if optimization is ON.
39644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Fn            llvm::Function pointer.
397da19475328ece3da19437a2e9eef035dcafa2814Devang Patel    /// @param TParam        Function template parameters.
39850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DISubprogram createFunction(DIDescriptor Scope, StringRef Name,
39944498a640daa827220bc4758770190318f0ec69fDevang Patel                                StringRef LinkageName,
40044498a640daa827220bc4758770190318f0ec69fDevang Patel                                DIFile File, unsigned LineNo,
40144498a640daa827220bc4758770190318f0ec69fDevang Patel                                DIType Ty, bool isLocalToUnit,
40244498a640daa827220bc4758770190318f0ec69fDevang Patel                                bool isDefinition,
40344498a640daa827220bc4758770190318f0ec69fDevang Patel                                unsigned Flags = 0,
40444498a640daa827220bc4758770190318f0ec69fDevang Patel                                bool isOptimized = false,
405da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                                Function *Fn = 0,
4065e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel                                MDNode *TParam = 0,
4075e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel                                MDNode *Decl = 0);
40844498a640daa827220bc4758770190318f0ec69fDevang Patel
40950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createMethod - Create a new descriptor for the specified C++ method.
41044498a640daa827220bc4758770190318f0ec69fDevang Patel    /// See comments in DISubprogram for descriptions of these fields.
41144498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Scope         Function scope.
41244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Name          Function name.
41344498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LinkageName   Mangled function name.
41444498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param File          File where this variable is defined.
41544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param LineNo        Line number.
41644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Ty            Function type.
41744498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isLocalToUnit True if this function is not externally visible..
41844498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isDefinition  True if this is a function definition.
4190d4b81519dc3f02bbebb4ecad86bfb590c4d1898Jay Foad    /// @param Virtuality    Attributes describing virtualness. e.g. pure
42044498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      virtual function.
42144498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param VTableIndex   Index no of this method in virtual table.
42244498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param VTableHolder  Type that holds vtable.
42344498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Flags         e.g. is this function prototyped or not.
42444498a640daa827220bc4758770190318f0ec69fDevang Patel    ///                      This flags are used to emit dwarf attributes.
42544498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param isOptimized   True if optimization is ON.
42644498a640daa827220bc4758770190318f0ec69fDevang Patel    /// @param Fn            llvm::Function pointer.
427da19475328ece3da19437a2e9eef035dcafa2814Devang Patel    /// @param TParam        Function template parameters.
42850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DISubprogram createMethod(DIDescriptor Scope, StringRef Name,
42944498a640daa827220bc4758770190318f0ec69fDevang Patel                              StringRef LinkageName,
43044498a640daa827220bc4758770190318f0ec69fDevang Patel                              DIFile File, unsigned LineNo,
43144498a640daa827220bc4758770190318f0ec69fDevang Patel                              DIType Ty, bool isLocalToUnit,
43244498a640daa827220bc4758770190318f0ec69fDevang Patel                              bool isDefinition,
43344498a640daa827220bc4758770190318f0ec69fDevang Patel                              unsigned Virtuality = 0, unsigned VTableIndex = 0,
43444498a640daa827220bc4758770190318f0ec69fDevang Patel                              MDNode *VTableHolder = 0,
43544498a640daa827220bc4758770190318f0ec69fDevang Patel                              unsigned Flags = 0,
43644498a640daa827220bc4758770190318f0ec69fDevang Patel                              bool isOptimized = false,
437da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                              Function *Fn = 0,
438da19475328ece3da19437a2e9eef035dcafa2814Devang Patel                              MDNode *TParam = 0);
439fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
44050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createNameSpace - This creates new descriptor for a namespace
441fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// with the specified parent scope.
442fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Scope       Namespace scope
443fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Name        Name of this namespace
444fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param File        Source file
445fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param LineNo      Line number
44650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DINameSpace createNameSpace(DIDescriptor Scope, StringRef Name,
447fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                DIFile File, unsigned LineNo);
448fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
449fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
45050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// createLexicalBlock - This creates a descriptor for a lexical block
45143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// with the specified parent context.
45243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Scope       Parent lexical scope.
45343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param File        Source file
45443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Line        Line number
45543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel    /// @param Col         Column number
45650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    DILexicalBlock createLexicalBlock(DIDescriptor Scope, DIFile File,
45743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel                                      unsigned Line, unsigned Col);
45843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel
45950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
460fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Storage     llvm::Value of the variable
461fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo     Variable's debug info descriptor.
462fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertAtEnd Location for the new intrinsic.
46350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo,
464fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                               BasicBlock *InsertAtEnd);
465fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
46650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
467fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Storage      llvm::Value of the variable
468fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
469fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertBefore Location for the new intrinsic.
47050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo,
471fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                               Instruction *InsertBefore);
472fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
473fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
47450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
475fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val          llvm::Value of the variable
476fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Offset       Offset
477fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
478fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertAtEnd Location for the new intrinsic.
47950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset,
480fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         DIVariable VarInfo,
481fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         BasicBlock *InsertAtEnd);
482fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
48350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
484fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Val          llvm::Value of the variable
485fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param Offset       Offset
486fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param VarInfo      Variable's debug info descriptor.
487fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel    /// @param InsertBefore Location for the new intrinsic.
48850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel    Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset,
489fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         DIVariable VarInfo,
490fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel                                         Instruction *InsertBefore);
491fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel
49235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel  };
49335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel} // end namespace llvm
49435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel
49535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#endif
496