Make DIELoc/DIEBlock's ComputeSize method const. Add a setSize

method to actually set it in the class to avoid computing it
multiple times.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201751 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Christopher 2014-02-20 02:40:45 +00:00
parent 0af815c0dc
commit eed3d708ee
3 changed files with 30 additions and 18 deletions

View File

@ -424,14 +424,16 @@ void DIETypeSignature::dump() const { print(dbgs()); }
/// ComputeSize - calculate the size of the location expression. /// ComputeSize - calculate the size of the location expression.
/// ///
unsigned DIELoc::ComputeSize(AsmPrinter *AP) { unsigned DIELoc::ComputeSize(AsmPrinter *AP) const {
if (!Size) { if (Size)
const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData(); return Size;
for (unsigned i = 0, N = Values.size(); i < N; ++i)
Size += Values[i]->SizeOf(AP, AbbrevData[i].getForm());
}
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 Sz;
} }
/// EmitValue - Emit location data. /// EmitValue - Emit location data.
@ -479,14 +481,16 @@ void DIELoc::print(raw_ostream &O) const {
/// ComputeSize - calculate the size of the block. /// ComputeSize - calculate the size of the block.
/// ///
unsigned DIEBlock::ComputeSize(AsmPrinter *AP) { unsigned DIEBlock::ComputeSize(AsmPrinter *AP) const {
if (!Size) { if (Size)
const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData(); return Size;
for (unsigned i = 0, N = Values.size(); i < N; ++i)
Size += Values[i]->SizeOf(AP, AbbrevData[i].getForm());
}
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 Sz;
} }
/// EmitValue - Emit block data. /// EmitValue - Emit block data.

View File

@ -451,7 +451,11 @@ namespace llvm {
/// ComputeSize - Calculate the size of the location expression. /// 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. /// BestForm - Choose the best form for data.
/// ///
@ -490,7 +494,11 @@ namespace llvm {
/// ComputeSize - Calculate the size of the location expression. /// 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. /// BestForm - Choose the best form for data.
/// ///

View File

@ -348,14 +348,14 @@ DIE *DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, DIDescriptor N) {
/// addBlock - Add block data. /// addBlock - Add block data.
/// ///
void DwarfUnit::addBlock(DIE *Die, dwarf::Attribute Attribute, DIELoc *Loc) { 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. DIELocs.push_back(Loc); // Memoize so we can call the destructor later on.
Die->addValue(Attribute, Loc->BestForm(DD->getDwarfVersion()), Loc); Die->addValue(Attribute, Loc->BestForm(DD->getDwarfVersion()), Loc);
} }
void DwarfUnit::addBlock(DIE *Die, dwarf::Attribute Attribute, void DwarfUnit::addBlock(DIE *Die, dwarf::Attribute Attribute,
DIEBlock *Block) { DIEBlock *Block) {
Block->ComputeSize(Asm); Block->setSize(Block->ComputeSize(Asm));
DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on. DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
Die->addValue(Attribute, Block->BestForm(), Block); Die->addValue(Attribute, Block->BestForm(), Block);
} }