summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/CodeGen/AsmPrinter/DIE.cpp32
-rw-r--r--lib/CodeGen/AsmPrinter/DIE.h12
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.cpp4
3 files changed, 30 insertions, 18 deletions
diff --git a/lib/CodeGen/AsmPrinter/DIE.cpp b/lib/CodeGen/AsmPrinter/DIE.cpp
index 79c4b438f8..845bb4610a 100644
--- a/lib/CodeGen/AsmPrinter/DIE.cpp
+++ b/lib/CodeGen/AsmPrinter/DIE.cpp
@@ -424,14 +424,16 @@ void DIETypeSignature::dump() const { print(dbgs()); }
/// ComputeSize - calculate the size of the location expression.
///
-unsigned DIELoc::ComputeSize(AsmPrinter *AP) {
- if (!Size) {
- const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
- for (unsigned i = 0, N = Values.size(); i < N; ++i)
- Size += Values[i]->SizeOf(AP, AbbrevData[i].getForm());
- }
+unsigned DIELoc::ComputeSize(AsmPrinter *AP) const {
+ if (Size)
+ return Size;
+
+ unsigned Sz = 0;
+ const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
+ for (unsigned i = 0, N = Values.size(); i < N; ++i)
+ Sz += Values[i]->SizeOf(AP, AbbrevData[i].getForm());
- return Size;
+ return Sz;
}
/// EmitValue - Emit location data.
@@ -479,14 +481,16 @@ void DIELoc::print(raw_ostream &O) const {
/// ComputeSize - calculate the size of the block.
///
-unsigned DIEBlock::ComputeSize(AsmPrinter *AP) {
- if (!Size) {
- const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
- for (unsigned i = 0, N = Values.size(); i < N; ++i)
- Size += Values[i]->SizeOf(AP, AbbrevData[i].getForm());
- }
+unsigned DIEBlock::ComputeSize(AsmPrinter *AP) const {
+ if (Size)
+ return Size;
+
+ unsigned Sz = 0;
+ const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
+ for (unsigned i = 0, N = Values.size(); i < N; ++i)
+ Sz += Values[i]->SizeOf(AP, AbbrevData[i].getForm());
- return Size;
+ return Sz;
}
/// EmitValue - Emit block data.
diff --git a/lib/CodeGen/AsmPrinter/DIE.h b/lib/CodeGen/AsmPrinter/DIE.h
index a35229da91..d4f3154d15 100644
--- a/lib/CodeGen/AsmPrinter/DIE.h
+++ b/lib/CodeGen/AsmPrinter/DIE.h
@@ -451,7 +451,11 @@ namespace llvm {
/// ComputeSize - Calculate the size of the location expression.
///
- unsigned ComputeSize(AsmPrinter *AP);
+ unsigned ComputeSize(AsmPrinter *AP) const;
+
+ /// setSize - Set the size of the location entry.
+ ///
+ void setSize(unsigned Sz) { Size = Sz; }
/// BestForm - Choose the best form for data.
///
@@ -490,7 +494,11 @@ namespace llvm {
/// ComputeSize - Calculate the size of the location expression.
///
- unsigned ComputeSize(AsmPrinter *AP);
+ unsigned ComputeSize(AsmPrinter *AP) const;
+
+ /// setSize - Set the size of the block.
+ ///
+ void setSize(unsigned Sz) { Size = Sz; }
/// BestForm - Choose the best form for data.
///
diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
index dfffcadf61..81dbfc505a 100644
--- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
@@ -348,14 +348,14 @@ DIE *DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, DIDescriptor N) {
/// addBlock - Add block data.
///
void DwarfUnit::addBlock(DIE *Die, dwarf::Attribute Attribute, DIELoc *Loc) {
- Loc->ComputeSize(Asm);
+ Loc->setSize(Loc->ComputeSize(Asm));
DIELocs.push_back(Loc); // Memoize so we can call the destructor later on.
Die->addValue(Attribute, Loc->BestForm(DD->getDwarfVersion()), Loc);
}
void DwarfUnit::addBlock(DIE *Die, dwarf::Attribute Attribute,
DIEBlock *Block) {
- Block->ComputeSize(Asm);
+ Block->setSize(Block->ComputeSize(Asm));
DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
Die->addValue(Attribute, Block->BestForm(), Block);
}