[PATCH] D18918: [DebugInfo] Try to make class memory layout more efficient
Robinson, Paul via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 13 11:08:59 PDT 2016
> -----Original Message-----
> From: dexonsmith at apple.com [mailto:dexonsmith at apple.com]
> Sent: Wednesday, April 13, 2016 10:46 AM
> To: reviews+D18918+public+652e7f8ee94138cf at reviews.llvm.org
> Cc: dccitaliano at gmail.com; Adrian Prantl; Eric Christopher; Robinson,
> Paul; llvm-commits at lists.llvm.org
> Subject: Re: [PATCH] D18918: [DebugInfo] Try to make class memory layout
> more efficient
>
>
> > On 2016-Apr-13, at 10:03, Davide Italiano <dccitaliano at gmail.com> wrote:
> >
> > davide updated this revision to Diff 53584.
> > davide added a comment.
> >
> > Done. Any other comments?
>
> This LGTM if you address a couple of nitpicks below.
>
> Adrian and Paul, anything else from you?
My comment has been addressed, thanks for checking.
--paulr
>
> > http://reviews.llvm.org/D18918
> >
> > Files:
> > include/llvm/IR/DebugInfoMetadata.h
> > unittests/IR/MetadataTest.cpp
> >
> > Index: unittests/IR/MetadataTest.cpp
> > ===================================================================
> > --- unittests/IR/MetadataTest.cpp
> > +++ unittests/IR/MetadataTest.cpp
> > @@ -1413,7 +1413,7 @@
> > bool IsDefinition = true;
> > unsigned ScopeLine = 3;
> > DITypeRef ContainingType = getCompositeType();
> > - unsigned Virtuality = 4;
> > + unsigned Virtuality = 2;
> > unsigned VirtualIndex = 5;
> > unsigned Flags = 6;
> > bool IsOptimized = false;
> > Index: include/llvm/IR/DebugInfoMetadata.h
> > ===================================================================
> > --- include/llvm/IR/DebugInfoMetadata.h
> > +++ include/llvm/IR/DebugInfoMetadata.h
> > @@ -1229,22 +1229,34 @@
> >
> > unsigned Line;
> > unsigned ScopeLine;
> > - unsigned Virtuality;
> > unsigned VirtualIndex;
> > - unsigned Flags;
> > - bool IsLocalToUnit;
> > - bool IsDefinition;
> > - bool IsOptimized;
> > +
> > + // Virtuality can only assume three values, so we can pack
> > + // in 2 bits (none/pure/pure_virtual).
> > + unsigned Virtuality:2;
>
> I'm accustomed to seeing spaces before/after the `:` and I think
> they'd make it easier to read. What does clang-format-diff.py
> say about this one? (If it's happy without spaces then I'll
> adjust.)
>
> > +
> > + unsigned Flags:27;
>
> What do we actually use right now? Should this just be an
> `unsigned short` or something (outside the bitfield)?
>
> > +
> > + // These are boolean flags so one bit is enough.
> > + // MSVC starts a new container field every time the base
> > + // type changes so we can't use 'bool' to ensure these bits
> > + // are packed.
> > + unsigned IsLocalToUnit:1;
> > + unsigned IsDefinition:1;
> > + unsigned IsOptimized:1;
> >
> > DISubprogram(LLVMContext &C, StorageType Storage, unsigned Line,
> > unsigned ScopeLine, unsigned Virtuality, unsigned
> VirtualIndex,
> > unsigned Flags, bool IsLocalToUnit, bool IsDefinition,
> > bool IsOptimized, ArrayRef<Metadata *> Ops)
> > : DILocalScope(C, DISubprogramKind, Storage,
> dwarf::DW_TAG_subprogram,
> > Ops),
> > - Line(Line), ScopeLine(ScopeLine), Virtuality(Virtuality),
> > - VirtualIndex(VirtualIndex), Flags(Flags),
> IsLocalToUnit(IsLocalToUnit),
> > - IsDefinition(IsDefinition), IsOptimized(IsOptimized) {}
> > + Line(Line), ScopeLine(ScopeLine), VirtualIndex(VirtualIndex),
> > + Virtuality(Virtuality), Flags(Flags),
> IsLocalToUnit(IsLocalToUnit),
> > + IsDefinition(IsDefinition), IsOptimized(IsOptimized) {
> > + static_assert(dwarf::DW_VIRTUALITY_max < 4, "Virtuality out of
> range");
> > + assert(Virtuality < 4 && "Virtuality out of range");
>
> Please add an assertion for `Flags` (whatever the size).
>
> > + }
> > ~DISubprogram() = default;
> >
> > static DISubprogram *
> >
> >
> > <D18918.53584.patch>
More information about the llvm-commits
mailing list