From: Adrian Prantl Date: Mon, 11 Aug 2014 21:06:00 +0000 (+0000) Subject: Debug info: Modify DebugLocEntry::addValue to take multiple values so it X-Git-Tag: v01.01.07.01~5171 X-Git-Url: https://git.ti.com/gitweb?p=opencl%2Fllvm.git;a=commitdiff_plain;h=db72188598a8764ffa02f6491dd2f6ec7e9b9ab3 Debug info: Modify DebugLocEntry::addValue to take multiple values so it only has to sort/unique values once per batch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215386 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DebugLocEntry.h b/lib/CodeGen/AsmPrinter/DebugLocEntry.h index 41735fca37..ba05aa7115 100644 --- a/lib/CodeGen/AsmPrinter/DebugLocEntry.h +++ b/lib/CodeGen/AsmPrinter/DebugLocEntry.h @@ -114,8 +114,7 @@ public: DIVariable NextVar(Next.Values[0].Variable); if (Var.getName() == NextVar.getName() && Var.isVariablePiece() && NextVar.isVariablePiece()) { - Values.append(Next.Values.begin(), Next.Values.end()); - sortUniqueValues(); + addValues(Next.Values); End = Next.End; return true; } @@ -139,11 +138,12 @@ public: const MCSymbol *getBeginSym() const { return Begin; } const MCSymbol *getEndSym() const { return End; } const ArrayRef getValues() const { return Values; } - void addValue(Value Val) { - assert(DIVariable(Val.Variable).isVariablePiece() && - "multi-value DebugLocEntries must be pieces"); - Values.push_back(Val); + void addValues(ArrayRef Vals) { + Values.append(Vals.begin(), Vals.end()); sortUniqueValues(); + assert(std::all_of(Values.begin(), Values.end(), [](DebugLocEntry::Value V){ + return DIVariable(V.Variable).isVariablePiece(); + }) && "value must be a piece"); } // Sort the pieces by offset. diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 57dda88b00..a669077f08 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1288,8 +1288,9 @@ DwarfDebug::buildLocationList(SmallVectorImpl &DebugLoc, if (!couldMerge) { // Need to add a new DebugLocEntry. Add all values from still // valid non-overlapping pieces. - for (auto Range : OpenRanges) - Loc.addValue(Range.second); + if (OpenRanges.size()) + Loc.addValues(OpenRanges); + DebugLoc.push_back(std::move(Loc)); }