From 79fb67b835ccc4b401d316025abc2555efedf8cc Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Mon, 11 Aug 2014 23:22:59 +0000 Subject: [PATCH] Add a couple of convenience accessors to DebugLocEntry::Value to further simplify common usage patterns. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215407 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DebugLocEntry.h | 10 +++++----- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 15 +++++++-------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DebugLocEntry.h b/lib/CodeGen/AsmPrinter/DebugLocEntry.h index c60a958c073..a4e37e13841 100644 --- a/lib/CodeGen/AsmPrinter/DebugLocEntry.h +++ b/lib/CodeGen/AsmPrinter/DebugLocEntry.h @@ -67,7 +67,9 @@ public: const ConstantFP *getConstantFP() const { return Constant.CFP; } const ConstantInt *getConstantInt() const { return Constant.CIP; } MachineLocation getLoc() const { return Loc; } - const MDNode *getVariable() const { return Variable; } + const MDNode *getVariableNode() const { return Variable; } + DIVariable getVariable() const { return DIVariable(Variable); } + bool isVariablePiece() const { return getVariable().isVariablePiece(); } friend bool operator==(const Value &, const Value &); friend bool operator<(const Value &, const Value &); }; @@ -121,7 +123,7 @@ public: Values.append(Vals.begin(), Vals.end()); sortUniqueValues(); assert(std::all_of(Values.begin(), Values.end(), [](DebugLocEntry::Value V){ - return DIVariable(V.Variable).isVariablePiece(); + return V.isVariablePiece(); }) && "value must be a piece"); } @@ -158,9 +160,7 @@ inline bool operator==(const DebugLocEntry::Value &A, /// Compare two pieces based on their offset. inline bool operator<(const DebugLocEntry::Value &A, const DebugLocEntry::Value &B) { - DIVariable Var(A.getVariable()); - DIVariable OtherVar(B.getVariable()); - return Var.getPieceOffset() < OtherVar.getPieceOffset(); + return A.getVariable().getPieceOffset() < B.getVariable().getPieceOffset(); } } diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index a669077f08b..5fd27e10eaa 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1251,9 +1251,9 @@ DwarfDebug::buildLocationList(SmallVectorImpl &DebugLoc, // If this piece overlaps with any open ranges, truncate them. DIVariable DIVar = Begin->getDebugVariable(); auto Last = std::remove_if(OpenRanges.begin(), OpenRanges.end(), - [&](DebugLocEntry::Value R) { - return piecesOverlap(DIVar, DIVariable(R.getVariable())); - }); + [&](DebugLocEntry::Value R) { + return piecesOverlap(DIVar, R.getVariable()); + }); OpenRanges.erase(Last, OpenRanges.end()); const MCSymbol *StartLabel = getLabelBeforeInsn(Begin); @@ -2067,14 +2067,14 @@ void DwarfDebug::emitLocPieces(ByteStreamer &Streamer, const DITypeIdentifierMap &Map, ArrayRef Values) { assert(std::all_of(Values.begin(), Values.end(), [](DebugLocEntry::Value P) { - return DIVariable(P.getVariable()).isVariablePiece(); + return P.isVariablePiece(); }) && "all values are expected to be pieces"); assert(std::is_sorted(Values.begin(), Values.end()) && "pieces are expected to be sorted"); unsigned Offset = 0; for (auto Piece : Values) { - DIVariable Var(Piece.getVariable()); + DIVariable Var = Piece.getVariable(); unsigned PieceOffset = Var.getPieceOffset(); unsigned PieceSize = Var.getPieceSize(); assert(Offset <= PieceOffset && "overlapping or duplicate pieces"); @@ -2110,8 +2110,7 @@ void DwarfDebug::emitLocPieces(ByteStreamer &Streamer, void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer, const DebugLocEntry &Entry) { const DebugLocEntry::Value Value = Entry.getValues()[0]; - DIVariable DV(Value.getVariable()); - if (DV.isVariablePiece()) + if (Value.isVariablePiece()) // Emit all pieces that belong to the same variable and range. return emitLocPieces(Streamer, TypeIdentifierMap, Entry.getValues()); @@ -2121,7 +2120,7 @@ void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer, void DwarfDebug::emitDebugLocValue(ByteStreamer &Streamer, const DebugLocEntry::Value &Value) { - DIVariable DV(Value.getVariable()); + DIVariable DV = Value.getVariable(); // Regular entry. if (Value.isInt()) { DIBasicType BTy(resolve(DV.getType())); -- 2.40.0