diff options
author | Adrian Prantl <aprantl@apple.com> | 2014-08-11 21:06:00 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2014-08-11 21:06:00 +0000 |
commit | 1c6f2ec1121f581edf7fb54d75bb448cea15654a (patch) | |
tree | 2640062b93f41a55db71f4554c85e12850b1da8f /llvm/lib | |
parent | caaf053c79f1583f8034daa5ccc6ac3868af7f20 (diff) | |
download | bcm5719-llvm-1c6f2ec1121f581edf7fb54d75bb448cea15654a.tar.gz bcm5719-llvm-1c6f2ec1121f581edf7fb54d75bb448cea15654a.zip |
Debug info: Modify DebugLocEntry::addValue to take multiple values so it
only has to sort/unique values once per batch.
llvm-svn: 215386
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DebugLocEntry.h | 12 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 5 |
2 files changed, 9 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DebugLocEntry.h b/llvm/lib/CodeGen/AsmPrinter/DebugLocEntry.h index 41735fca376..ba05aa71157 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DebugLocEntry.h +++ b/llvm/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<Value> 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<DebugLocEntry::Value> 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/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 57dda88b002..a669077f08b 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1288,8 +1288,9 @@ DwarfDebug::buildLocationList(SmallVectorImpl<DebugLocEntry> &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)); } |