aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/CodeGen/MachineModuleInfo.h
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2008-06-27 00:09:40 +0000
committerBill Wendling <isanbard@gmail.com>2008-06-27 00:09:40 +0000
commit305635abeae1d20519b60856c89479e8b7b5d4dd (patch)
treebc0fa4982f774073b591b551e1b7d7b5b0a72821 /include/llvm/CodeGen/MachineModuleInfo.h
parent72efde2dc736fde5a838a9771af3d99c0dd08540 (diff)
Refactor the DebugInfoDesc stuff out of the MachineModuleInfo file. Clean up
some uses of std::vector, where it's return std::vector by value. Yuck! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52800 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/MachineModuleInfo.h')
-rw-r--r--include/llvm/CodeGen/MachineModuleInfo.h702
1 files changed, 12 insertions, 690 deletions
diff --git a/include/llvm/CodeGen/MachineModuleInfo.h b/include/llvm/CodeGen/MachineModuleInfo.h
index b7066f4c65..5b27da1f9a 100644
--- a/include/llvm/CodeGen/MachineModuleInfo.h
+++ b/include/llvm/CodeGen/MachineModuleInfo.h
@@ -31,18 +31,20 @@
#ifndef LLVM_CODEGEN_MACHINEMODULEINFO_H
#define LLVM_CODEGEN_MACHINEMODULEINFO_H
-#include "llvm/Support/Dwarf.h"
-#include "llvm/Support/DataTypes.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/UniqueVector.h"
-#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/GlobalValue.h"
#include "llvm/Pass.h"
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/UniqueVector.h"
+#include "llvm/Support/DataTypes.h"
+#include "llvm/Support/Dwarf.h"
namespace llvm {
//===----------------------------------------------------------------------===//
// Forward declarations.
+class AnchoredDesc;
+class CompileUnitDesc;
class Constant;
class DebugInfoDesc;
class GlobalVariable;
@@ -52,16 +54,7 @@ class MachineMove;
class Module;
class PointerType;
class StructType;
-
-//===----------------------------------------------------------------------===//
-// Debug info constants.
-
-enum {
- LLVMDebugVersion = (6 << 16), // Current version of debug information.
- LLVMDebugVersion5 = (5 << 16), // Constant for version 5.
- LLVMDebugVersion4 = (4 << 16), // Constant for version 4.
- LLVMDebugVersionMask = 0xffff0000 // Mask for version number.
-};
+class VariableDesc;
//===----------------------------------------------------------------------===//
/// DIVisitor - Subclasses of this class apply steps to each of the fields in
@@ -89,662 +82,6 @@ public:
};
//===----------------------------------------------------------------------===//
-/// DebugInfoDesc - This class is the base class for debug info descriptors.
-///
-class DebugInfoDesc {
-private:
- unsigned Tag; // Content indicator. Dwarf values are
- // used but that does not limit use to
- // Dwarf writers.
-
-protected:
- explicit DebugInfoDesc(unsigned T) : Tag(T | LLVMDebugVersion) {}
-
-public:
- virtual ~DebugInfoDesc() {}
-
- // Accessors
- unsigned getTag() const { return Tag & ~LLVMDebugVersionMask; }
- unsigned getVersion() const { return Tag & LLVMDebugVersionMask; }
- void setTag(unsigned T) { Tag = T | LLVMDebugVersion; }
-
- /// TagFromGlobal - Returns the tag number from a debug info descriptor
- /// GlobalVariable. Return DIIValid if operand is not an unsigned int.
- static unsigned TagFromGlobal(GlobalVariable *GV);
-
- /// VersionFromGlobal - Returns the version number from a debug info
- /// descriptor GlobalVariable. Return DIIValid if operand is not an unsigned
- /// int.
- static unsigned VersionFromGlobal(GlobalVariable *GV);
-
- /// DescFactory - Create an instance of debug info descriptor based on Tag.
- /// Return NULL if not a recognized Tag.
- static DebugInfoDesc *DescFactory(unsigned Tag);
-
- /// getLinkage - get linkage appropriate for this type of descriptor.
- ///
- virtual GlobalValue::LinkageTypes getLinkage() const;
-
- //===--------------------------------------------------------------------===//
- // Subclasses should supply the following static methods.
-
- // Implement isa/cast/dyncast.
- static bool classof(const DebugInfoDesc *) { return true; }
-
- //===--------------------------------------------------------------------===//
- // Subclasses should supply the following virtual methods.
-
- /// ApplyToFields - Target the vistor to the fields of the descriptor.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const = 0;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const = 0;
-
-#ifndef NDEBUG
- virtual void dump() = 0;
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// AnchorDesc - Descriptors of this class act as markers for identifying
-/// descriptors of certain groups.
-class AnchoredDesc;
-class AnchorDesc : public DebugInfoDesc {
-private:
- unsigned AnchorTag; // Tag number of descriptors anchored
- // by this object.
-
-public:
- AnchorDesc();
- explicit AnchorDesc(AnchoredDesc *D);
-
- // Accessors
- unsigned getAnchorTag() const { return AnchorTag; }
-
- // Implement isa/cast/dyncast.
- static bool classof(const AnchorDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// getLinkage - get linkage appropriate for this type of descriptor.
- ///
- virtual GlobalValue::LinkageTypes getLinkage() const;
-
- /// ApplyToFields - Target the visitor to the fields of the AnchorDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// AnchoredDesc - This class manages anchors for a variety of top level
-/// descriptors.
-class AnchoredDesc : public DebugInfoDesc {
-private:
- DebugInfoDesc *Anchor; // Anchor for all descriptors of the
- // same type.
-
-protected:
-
- explicit AnchoredDesc(unsigned T);
-
-public:
- // Accessors.
- AnchorDesc *getAnchor() const { return static_cast<AnchorDesc *>(Anchor); }
- void setAnchor(AnchorDesc *A) { Anchor = static_cast<DebugInfoDesc *>(A); }
-
- //===--------------------------------------------------------------------===//
- // Subclasses should supply the following virtual methods.
-
- /// getAnchorString - Return a string used to label descriptor's anchor.
- ///
- virtual const char *getAnchorString() const = 0;
-
- /// ApplyToFields - Target the visitor to the fields of the AnchoredDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-};
-
-//===----------------------------------------------------------------------===//
-/// CompileUnitDesc - This class packages debug information associated with a
-/// source/header file.
-class CompileUnitDesc : public AnchoredDesc {
-private:
- unsigned Language; // Language number (ex. DW_LANG_C89.)
- std::string FileName; // Source file name.
- std::string Directory; // Source file directory.
- std::string Producer; // Compiler string.
-
-public:
- CompileUnitDesc();
-
-
- // Accessors
- unsigned getLanguage() const { return Language; }
- const std::string &getFileName() const { return FileName; }
- const std::string &getDirectory() const { return Directory; }
- const std::string &getProducer() const { return Producer; }
- void setLanguage(unsigned L) { Language = L; }
- void setFileName(const std::string &FN) { FileName = FN; }
- void setDirectory(const std::string &D) { Directory = D; }
- void setProducer(const std::string &P) { Producer = P; }
-
- // FIXME - Need translation unit getter/setter.
-
- // Implement isa/cast/dyncast.
- static bool classof(const CompileUnitDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the CompileUnitDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
- /// getAnchorString - Return a string used to label this descriptor's anchor.
- ///
- static const char *const AnchorString;
- virtual const char *getAnchorString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// TypeDesc - This class packages debug information associated with a type.
-///
-class TypeDesc : public DebugInfoDesc {
-private:
- enum {
- FlagPrivate = 1 << 0,
- FlagProtected = 1 << 1
- };
- DebugInfoDesc *Context; // Context debug descriptor.
- std::string Name; // Type name (may be empty.)
- DebugInfoDesc *File; // Defined compile unit (may be NULL.)
- unsigned Line; // Defined line# (may be zero.)
- uint64_t Size; // Type bit size (may be zero.)
- uint64_t Align; // Type bit alignment (may be zero.)
- uint64_t Offset; // Type bit offset (may be zero.)
- unsigned Flags; // Miscellaneous flags.
-
-public:
- explicit TypeDesc(unsigned T);
-
- // Accessors
- DebugInfoDesc *getContext() const { return Context; }
- const std::string &getName() const { return Name; }
- CompileUnitDesc *getFile() const {
- return static_cast<CompileUnitDesc *>(File);
- }
- unsigned getLine() const { return Line; }
- uint64_t getSize() const { return Size; }
- uint64_t getAlign() const { return Align; }
- uint64_t getOffset() const { return Offset; }
- bool isPrivate() const {
- return (Flags & FlagPrivate) != 0;
- }
- bool isProtected() const {
- return (Flags & FlagProtected) != 0;
- }
- void setContext(DebugInfoDesc *C) { Context = C; }
- void setName(const std::string &N) { Name = N; }
- void setFile(CompileUnitDesc *U) {
- File = static_cast<DebugInfoDesc *>(U);
- }
- void setLine(unsigned L) { Line = L; }
- void setSize(uint64_t S) { Size = S; }
- void setAlign(uint64_t A) { Align = A; }
- void setOffset(uint64_t O) { Offset = O; }
- void setIsPrivate() { Flags |= FlagPrivate; }
- void setIsProtected() { Flags |= FlagProtected; }
-
- /// ApplyToFields - Target the visitor to the fields of the TypeDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// BasicTypeDesc - This class packages debug information associated with a
-/// basic type (eg. int, bool, double.)
-class BasicTypeDesc : public TypeDesc {
-private:
- unsigned Encoding; // Type encoding.
-
-public:
- BasicTypeDesc();
-
- // Accessors
- unsigned getEncoding() const { return Encoding; }
- void setEncoding(unsigned E) { Encoding = E; }
-
- // Implement isa/cast/dyncast.
- static bool classof(const BasicTypeDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the BasicTypeDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-
-//===----------------------------------------------------------------------===//
-/// DerivedTypeDesc - This class packages debug information associated with a
-/// derived types (eg., typedef, pointer, reference.)
-class DerivedTypeDesc : public TypeDesc {
-private:
- DebugInfoDesc *FromType; // Type derived from.
-
-public:
- explicit DerivedTypeDesc(unsigned T);
-
- // Accessors
- TypeDesc *getFromType() const {
- return static_cast<TypeDesc *>(FromType);
- }
- void setFromType(TypeDesc *F) {
- FromType = static_cast<DebugInfoDesc *>(F);
- }
-
- // Implement isa/cast/dyncast.
- static bool classof(const DerivedTypeDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the DerivedTypeDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// CompositeTypeDesc - This class packages debug information associated with a
-/// array/struct types (eg., arrays, struct, union, enums.)
-class CompositeTypeDesc : public DerivedTypeDesc {
-private:
- std::vector<DebugInfoDesc *> Elements;// Information used to compose type.
-
-public:
- explicit CompositeTypeDesc(unsigned T);
-
- // Accessors
- std::vector<DebugInfoDesc *> &getElements() { return Elements; }
-
- // Implement isa/cast/dyncast.
- static bool classof(const CompositeTypeDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the CompositeTypeDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// SubrangeDesc - This class packages debug information associated with integer
-/// value ranges.
-class SubrangeDesc : public DebugInfoDesc {
-private:
- int64_t Lo; // Low value of range.
- int64_t Hi; // High value of range.
-
-public:
- SubrangeDesc();
-
- // Accessors
- int64_t getLo() const { return Lo; }
- int64_t getHi() const { return Hi; }
- void setLo(int64_t L) { Lo = L; }
- void setHi(int64_t H) { Hi = H; }
-
- // Implement isa/cast/dyncast.
- static bool classof(const SubrangeDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the SubrangeDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// EnumeratorDesc - This class packages debug information associated with
-/// named integer constants.
-class EnumeratorDesc : public DebugInfoDesc {
-private:
- std::string Name; // Enumerator name.
- int64_t Value; // Enumerator value.
-
-public:
- EnumeratorDesc();
-
- // Accessors
- const std::string &getName() const { return Name; }
- int64_t getValue() const { return Value; }
- void setName(const std::string &N) { Name = N; }
- void setValue(int64_t V) { Value = V; }
-
- // Implement isa/cast/dyncast.
- static bool classof(const EnumeratorDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the EnumeratorDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// VariableDesc - This class packages debug information associated with a
-/// subprogram variable.
-///
-class VariableDesc : public DebugInfoDesc {
-private:
- DebugInfoDesc *Context; // Context debug descriptor.
- std::string Name; // Type name (may be empty.)
- DebugInfoDesc *File; // Defined compile unit (may be NULL.)
- unsigned Line; // Defined line# (may be zero.)
- DebugInfoDesc *TyDesc; // Type of variable.
-
-public:
- explicit VariableDesc(unsigned T);
-
- // Accessors
- DebugInfoDesc *getContext() const { return Context; }
- const std::string &getName() const { return Name; }
- CompileUnitDesc *getFile() const {
- return static_cast<CompileUnitDesc *>(File);
- }
- unsigned getLine() const { return Line; }
- TypeDesc *getType() const {
- return static_cast<TypeDesc *>(TyDesc);
- }
- void setContext(DebugInfoDesc *C) { Context = C; }
- void setName(const std::string &N) { Name = N; }
- void setFile(CompileUnitDesc *U) {
- File = static_cast<DebugInfoDesc *>(U);
- }
- void setLine(unsigned L) { Line = L; }
- void setType(TypeDesc *T) {
- TyDesc = static_cast<DebugInfoDesc *>(T);
- }
-
- // Implement isa/cast/dyncast.
- static bool classof(const VariableDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the VariableDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// GlobalDesc - This class is the base descriptor for global functions and
-/// variables.
-class GlobalDesc : public AnchoredDesc {
-private:
- DebugInfoDesc *Context; // Context debug descriptor.
- std::string Name; // Global name.
- std::string FullName; // Fully qualified name.
- std::string LinkageName; // Name for binding to MIPS linkage.
- DebugInfoDesc *File; // Defined compile unit (may be NULL.)
- unsigned Line; // Defined line# (may be zero.)
- DebugInfoDesc *TyDesc; // Type debug descriptor.
- bool IsStatic; // Is the global a static.
- bool IsDefinition; // Is the global defined in context.
-
-protected:
- explicit GlobalDesc(unsigned T);
-
-public:
- // Accessors
- DebugInfoDesc *getContext() const { return Context; }
- const std::string &getName() const { return Name; }
- const std::string &getFullName() const { return FullName; }
- const std::string &getLinkageName() const { return LinkageName; }
- CompileUnitDesc *getFile() const {
- return static_cast<CompileUnitDesc *>(File);
- }
- unsigned getLine() const { return Line; }
- TypeDesc *getType() const {
- return static_cast<TypeDesc *>(TyDesc);
- }
- bool isStatic() const { return IsStatic; }
- bool isDefinition() const { return IsDefinition; }
- void setContext(DebugInfoDesc *C) { Context = C; }
- void setName(const std::string &N) { Name = N; }
- void setFullName(const std::string &N) { FullName = N; }
- void setLinkageName(const std::string &N) { LinkageName = N; }
- void setFile(CompileUnitDesc *U) {
- File = static_cast<DebugInfoDesc *>(U);
- }
- void setLine(unsigned L) { Line = L; }
- void setType(TypeDesc *T) {
- TyDesc = static_cast<DebugInfoDesc *>(T);
- }
- void setIsStatic(bool IS) { IsStatic = IS; }
- void setIsDefinition(bool ID) { IsDefinition = ID; }
-
- /// ApplyToFields - Target the visitor to the fields of the GlobalDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-};
-
-//===----------------------------------------------------------------------===//
-/// GlobalVariableDesc - This class packages debug information associated with a
-/// GlobalVariable.
-class GlobalVariableDesc : public GlobalDesc {
-private:
- GlobalVariable *Global; // llvm global.
-
-public:
- GlobalVariableDesc();
-
- // Accessors.
- GlobalVariable *getGlobalVariable() const { return Global; }
- void setGlobalVariable(GlobalVariable *GV) { Global = GV; }
-
- // Implement isa/cast/dyncast.
- static bool classof(const GlobalVariableDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the
- /// GlobalVariableDesc.
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
- /// getAnchorString - Return a string used to label this descriptor's anchor.
- ///
- static const char *const AnchorString;
- virtual const char *getAnchorString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// SubprogramDesc - This class packages debug information associated with a
-/// subprogram/function.
-class SubprogramDesc : public GlobalDesc {
-private:
-
-public:
- SubprogramDesc();
-
- // Accessors
-
- // Implement isa/cast/dyncast.
- static bool classof(const SubprogramDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the SubprogramDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
- /// getAnchorString - Return a string used to label this descriptor's anchor.
- ///
- static const char *const AnchorString;
- virtual const char *getAnchorString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
-/// BlockDesc - This descriptor groups variables and blocks nested in a block.
-///
-class BlockDesc : public DebugInfoDesc {
-private:
- DebugInfoDesc *Context; // Context debug descriptor.
-
-public:
- BlockDesc();
-
- // Accessors
- DebugInfoDesc *getContext() const { return Context; }
- void setContext(DebugInfoDesc *C) { Context = C; }
-
- // Implement isa/cast/dyncast.
- static bool classof(const BlockDesc *) { return true; }
- static bool classof(const DebugInfoDesc *D);
-
- /// ApplyToFields - Target the visitor to the fields of the BlockDesc.
- ///
- virtual void ApplyToFields(DIVisitor *Visitor);
-
- /// getDescString - Return a string used to compose global names and labels.
- ///
- virtual const char *getDescString() const;
-
- /// getTypeString - Return a string used to label this descriptor's type.
- ///
- virtual const char *getTypeString() const;
-
-#ifndef NDEBUG
- virtual void dump();
-#endif
-};
-
-//===----------------------------------------------------------------------===//
/// DIDeserializer - This class is responsible for casting GlobalVariables
/// into DebugInfoDesc objects.
class DIDeserializer {
@@ -1168,28 +505,13 @@ public:
/// getGlobalVariablesUsing - Return all of the GlobalVariables that use the
/// named GlobalVariable.
- std::vector<GlobalVariable*>
- getGlobalVariablesUsing(Module &M, const std::string &RootName);
+ void getGlobalVariablesUsing(Module &M, const std::string &RootName,
+ std::vector<GlobalVariable*> &Result);
/// getAnchoredDescriptors - Return a vector of anchored debug descriptors.
///
- template <class T>std::vector<T *> getAnchoredDescriptors(Module &M) {
- T Desc;
- std::vector<GlobalVariable *> Globals =
- getGlobalVariablesUsing(M, Desc.getAnchorString());
- std::vector<T *> AnchoredDescs;
- for (unsigned i = 0, N = Globals.size(); i < N; ++i) {
- GlobalVariable *GV = Globals[i];
-
- // FIXME - In the short term, changes are too drastic to continue.
- if (DebugInfoDesc::TagFromGlobal(GV) == Desc.getTag() &&
- DebugInfoDesc::VersionFromGlobal(GV) == LLVMDebugVersion) {
- AnchoredDescs.push_back(cast<T>(DR.Deserialize(GV)));
- }
- }
-
- return AnchoredDescs;
- }
+ void getAnchoredDescriptors(Module &M, const AnchoredDesc *Desc,
+ std::vector<void*> &AnchoredDescs);
/// RecordRegionStart - Indicate the start of a region.
///