X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FCodeGen%2FAsmPrinter%2FDebugLocEntry.h;h=b60ab9151ef23d1807d9e7ce7be7cb1f114b67bb;hp=184fb295784a6e5f5e5d321fbcf74724a74ea94e;hb=770ec8cf9ae215e26cb6d946b9d533151fe0558d;hpb=f98df953fb9dc50411d9c6582a7f4e830c13845b diff --git a/lib/CodeGen/AsmPrinter/DebugLocEntry.h b/lib/CodeGen/AsmPrinter/DebugLocEntry.h index 184fb295784..b60ab9151ef 100644 --- a/lib/CodeGen/AsmPrinter/DebugLocEntry.h +++ b/lib/CodeGen/AsmPrinter/DebugLocEntry.h @@ -9,6 +9,8 @@ #ifndef LLVM_LIB_CODEGEN_ASMPRINTER_DEBUGLOCENTRY_H #define LLVM_LIB_CODEGEN_ASMPRINTER_DEBUGLOCENTRY_H + +#include "DebugLocStream.h" #include "llvm/ADT/SmallString.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DebugInfo.h" @@ -17,7 +19,7 @@ namespace llvm { class AsmPrinter; -class MDNode; + /// \brief This struct describes location entries emitted in the .debug_loc /// section. class DebugLocEntry { @@ -28,25 +30,25 @@ class DebugLocEntry { public: /// \brief A single location or constant. struct Value { - Value(const MDNode *Expr, int64_t i) + Value(const DIExpression *Expr, int64_t i) : Expression(Expr), EntryKind(E_Integer) { Constant.Int = i; } - Value(const MDNode *Expr, const ConstantFP *CFP) + Value(const DIExpression *Expr, const ConstantFP *CFP) : Expression(Expr), EntryKind(E_ConstantFP) { Constant.CFP = CFP; } - Value(const MDNode *Expr, const ConstantInt *CIP) + Value(const DIExpression *Expr, const ConstantInt *CIP) : Expression(Expr), EntryKind(E_ConstantInt) { Constant.CIP = CIP; } - Value(const MDNode *Expr, MachineLocation Loc) + Value(const DIExpression *Expr, MachineLocation Loc) : Expression(Expr), EntryKind(E_Location), Loc(Loc) { - assert(cast(Expr)->isValid()); + assert(cast(Expr)->isValid()); } /// Any complex address location expression for this Value. - const MDNode *Expression; + const DIExpression *Expression; /// Type of entry that this represents. enum EntryType { E_Location, E_Integer, E_ConstantFP, E_ConstantInt }; @@ -71,9 +73,7 @@ public: const ConstantInt *getConstantInt() const { return Constant.CIP; } MachineLocation getLoc() const { return Loc; } bool isBitPiece() const { return getExpression()->isBitPiece(); } - DIExpression getExpression() const { - return cast_or_null(Expression); - } + const DIExpression *getExpression() const { return Expression; } friend bool operator==(const Value &, const Value &); friend bool operator<(const Value &, const Value &); }; @@ -82,8 +82,6 @@ private: /// A nonempty list of locations/constants belonging to this entry, /// sorted by offset. SmallVector Values; - SmallString<8> DWARFBytes; - SmallVector Comments; public: DebugLocEntry(const MCSymbol *B, const MCSymbol *E, Value Val) @@ -95,19 +93,7 @@ public: /// variable, merge them by appending Next's values to the current /// list of values. /// Return true if the merge was successful. - bool MergeValues(const DebugLocEntry &Next) { - if (Begin == Next.Begin) { - DIExpression Expr = cast_or_null(Values[0].Expression); - DIExpression NextExpr = - cast_or_null(Next.Values[0].Expression); - if (Expr->isBitPiece() && NextExpr->isBitPiece()) { - addValues(Next.Values); - End = Next.End; - return true; - } - } - return false; - } + bool MergeValues(const DebugLocEntry &Next); /// \brief Attempt to merge this DebugLocEntry with Next and return /// true if the merge was successful. Entries can be merged if they @@ -146,12 +132,8 @@ public: } /// \brief Lower this entry into a DWARF expression. - void finalize(const AsmPrinter &AP, const MDBasicType *TypeIdentifierMap); - - /// \brief Return the lowered DWARF expression. - StringRef getDWARFBytes() const { return DWARFBytes; } - /// \brief Return the assembler comments for the lowered DWARF expression. - const SmallVectorImpl &getComments() const { return Comments; } + void finalize(const AsmPrinter &AP, DebugLocStream::ListBuilder &List, + const DIBasicType *BT); }; /// \brief Compare two Values for equality.