[llvm] r287839 - Rely on a single DWARF version instead of having two copies

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 12 15:51:19 PST 2016


Greg: Ping on unaddressed CR feedback.

On Mon, Nov 28, 2016 at 10:17 AM Robinson, Paul via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

>
>
> > -----Original Message-----
> > From: llvm-commits [mailto:llvm-commits-bounces at lists.llvm.org] On
> Behalf
> > Of Greg Clayton via llvm-commits
> > Sent: Wednesday, November 23, 2016 3:31 PM
> > To: llvm-commits at lists.llvm.org
> > Subject: [llvm] r287839 - Rely on a single DWARF version instead of
> having
> > two copies
> >
> > Author: gclayton
> > Date: Wed Nov 23 17:30:37 2016
> > New Revision: 287839
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=287839&view=rev
> > Log:
> > Rely on a single DWARF version instead of having two copies
> >
> > This patch makes AsmPrinter less reliant on DwarfDebug by relying on the
> > DWARF version in the AsmPrinter's MCStreamer's MCContext. This allows us
> > to remove the redundant DWARF version from DwarfDebug. It also lets us
> > change code that used to access the AsmPrinter's DwarfDebug just to get
> to
> > the DWARF version by changing the DWARF version accessor on AsmPrinter so
> > that it grabs the version from its MCStreamer's MCContext.
> >
> > Differential Revision: https://reviews.llvm.org/D27032
> >
> > Modified:
> >     llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
> >     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> >     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> >     llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp
> >     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> >     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> >     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> >
> > Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
> > URL: http://llvm.org/viewvc/llvm-
> >
> project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=287839&r1=287838&
> > r2=287839&view=diff
> >
> ==========================================================================
> > ====
> > --- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
> > +++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Wed Nov 23 17:30:37 2016
> > @@ -149,6 +149,9 @@ public:
> >    DwarfDebug *getDwarfDebug() { return DD; }
> >    DwarfDebug *getDwarfDebug() const { return DD; }
> >
> > +  uint16_t getDwarfVersion() const;
> > +  void setDwarfVersion(uint16_t Version);
> > +
> >    bool isPositionIndependent() const;
> >
> >    /// Return true if assembly output should contain comments.
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> > URL: http://llvm.org/viewvc/llvm-
> >
> project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=287839&r1=287
> > 838&r2=287839&view=diff
> >
> ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Wed Nov 23 17:30:37
> > 2016
> > @@ -2620,3 +2620,11 @@ void AsmPrinter::recordSled(MCSymbol *Sl
> >    Sleds.emplace_back(
> >      XRayFunctionEntry{ Sled, CurrentFnSym, Kind, AlwaysInstrument, Fn
> });
> >  }
> > +
> > +uint16_t AsmPrinter::getDwarfVersion() const {
> > +  return OutStreamer->getContext().getDwarfVersion();
> > +}
> > +
> > +void AsmPrinter::setDwarfVersion(uint16_t Version) {
> > +  OutStreamer->getContext().setDwarfVersion(Version);
> > +}
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> > URL: http://llvm.org/viewvc/llvm-
> >
> project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp?rev=287839&r
> > 1=287838&r2=287839&view=diff
> >
> ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp Wed Nov 23
> > 17:30:37 2016
> > @@ -177,7 +177,7 @@ void AsmPrinter::emitDwarfStringOffset(D
> >  /// EmitDwarfRegOp - Emit dwarf register operation.
> >  void AsmPrinter::EmitDwarfRegOp(ByteStreamer &Streamer,
> >                                  const MachineLocation &MLoc) const {
> > -  DebugLocDwarfExpression Expr(getDwarfDebug()->getDwarfVersion(),
> > Streamer);
> > +  DebugLocDwarfExpression Expr(getDwarfVersion(), Streamer);
> >    const MCRegisterInfo *MRI = MMI->getContext().getRegisterInfo();
> >    int Reg = MRI->getDwarfRegNum(MLoc.getReg(), false);
> >    if (Reg < 0) {
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp
> > URL: http://llvm.org/viewvc/llvm-
> >
> project/llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp?rev=287839&r1=287838&r2=
> > 287839&view=diff
> >
> ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp Wed Nov 23 17:30:37 2016
> > @@ -298,7 +298,7 @@ unsigned DIEInteger::SizeOf(const AsmPri
> >    case dwarf::DW_FORM_addr:
> >      return AP->getPointerSize();
> >    case dwarf::DW_FORM_ref_addr:
> > -    if (AP->OutStreamer->getContext().getDwarfVersion() == 2)
> > +    if (AP->getDwarfVersion() == 2)
> >        return AP->getPointerSize();
> >      return sizeof(int32_t);
> >    default: llvm_unreachable("DIE Value form not supported yet");
> > @@ -466,9 +466,7 @@ unsigned DIEEntry::getRefAddrSize(const
> >    // specified to be four bytes in the DWARF 32-bit format and eight
> > bytes
> >    // in the DWARF 64-bit format, while DWARF Version 2 specifies that
> > such
> >    // references have the same size as an address on the target system.
> > -  const DwarfDebug *DD = AP->getDwarfDebug();
> > -  assert(DD && "Expected Dwarf Debug info to be available");
> > -  if (DD->getDwarfVersion() == 2)
> > +  if (AP->getDwarfVersion() == 2)
> >      return AP->getPointerSize();
> >    return sizeof(int32_t);
> >  }
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> > URL: http://llvm.org/viewvc/llvm-
> >
> project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=287839&r1=287
> > 838&r2=287839&view=diff
> >
> ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Nov 23 17:30:37
> > 2016
> > @@ -256,7 +256,7 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Mo
> >      UseAllLinkageNames = DwarfLinkageNames == AllLinkageNames;
> >
> >    unsigned DwarfVersionNumber = Asm->TM.Options.MCOptions.DwarfVersion;
> > -  DwarfVersion = DwarfVersionNumber ? DwarfVersionNumber
> > +  unsigned DwarfVersion = DwarfVersionNumber ? DwarfVersionNumber
> >                                      : MMI->getModule()-
> > >getDwarfVersion();
> >    // Use dwarf 4 by default if nothing is requested.
> >    DwarfVersion = DwarfVersion ? DwarfVersion : dwarf::DWARF_VERSION;
>
> This all looks funny, now that DwarfDebug is not caching its own notion of
> the
> DWARF version.  At the time this constructor runs, is
> Asm->getDwarfVersion()
> not going to return a consistently useful answer?
> --paulr
>
> > @@ -1197,7 +1197,7 @@ void DwarfDebug::recordSourceLine(unsign
> >      Fn = Scope->getFilename();
> >      Dir = Scope->getDirectory();
> >      if (auto *LBF = dyn_cast<DILexicalBlockFile>(Scope))
> > -      if (DwarfVersion >= 4)
> > +      if (getDwarfVersion() >= 4)
> >          Discriminator = LBF->getDiscriminator();
> >
> >      unsigned CUID = Asm->OutStreamer-
> > >getContext().getDwarfCompileUnitID();
> > @@ -1415,8 +1415,7 @@ static void emitDebugLocValue(const AsmP
> >                                const DebugLocEntry::Value &Value,
> >                                unsigned PieceOffsetInBits) {
> >    DIExpressionCursor ExprCursor(Value.getExpression());
> > -  DebugLocDwarfExpression DwarfExpr(AP.getDwarfDebug()-
> > >getDwarfVersion(),
> > -                                    Streamer);
> > +  DebugLocDwarfExpression DwarfExpr(AP.getDwarfVersion(), Streamer);
> >    // Regular entry.
> >    if (Value.isInt()) {
> >      if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed ||
> > @@ -1467,8 +1466,7 @@ void DebugLocEntry::finalize(const AsmPr
> >        assert(Offset <= PieceOffset && "overlapping or duplicate
> pieces");
> >        if (Offset < PieceOffset) {
> >          // The DWARF spec seriously mandates pieces with no locations
> for
> > gaps.
> > -        DebugLocDwarfExpression Expr(AP.getDwarfDebug()-
> > >getDwarfVersion(),
> > -                                     Streamer);
> > +        DebugLocDwarfExpression Expr(AP.getDwarfVersion(), Streamer);
> >          Expr.AddOpPiece(PieceOffset-Offset, 0);
> >          Offset += PieceOffset-Offset;
> >        }
> > @@ -1983,3 +1981,7 @@ void DwarfDebug::addAccelType(StringRef
> >      return;
> >    AccelTypes.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name),
> > &Die);
> >  }
> > +
> > +uint16_t DwarfDebug::getDwarfVersion() const {
> > +  return Asm->OutStreamer->getContext().getDwarfVersion();
> > +}
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> > URL: http://llvm.org/viewvc/llvm-
> >
> project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=287839&r1=28783
> > 8&r2=287839&view=diff
> >
> ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Wed Nov 23 17:30:37
> > 2016
> > @@ -254,9 +254,6 @@ class DwarfDebug : public DebugHandlerBa
> >    /// Whether to emit all linkage names, or just abstract subprograms.
> >    bool UseAllLinkageNames;
> >
> > -  /// Version of dwarf we're emitting.
> > -  unsigned DwarfVersion;
> > -
> >    /// DWARF5 Experimental Options
> >    /// @{
> >    bool HasDwarfAccelTables;
> > @@ -515,7 +512,7 @@ public:
> >    bool useSplitDwarf() const { return HasSplitDwarf; }
> >
> >    /// Returns the Dwarf Version.
> > -  unsigned getDwarfVersion() const { return DwarfVersion; }
> > +  uint16_t getDwarfVersion() const;
> >
> >    /// Returns the previous CU that was being updated
> >    const DwarfCompileUnit *getPrevCU() const { return PrevCU; }
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> > URL: http://llvm.org/viewvc/llvm-
> >
> project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=287839&r1=2878
> > 38&r2=287839&view=diff
> >
> ==========================================================================
> > ====
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Wed Nov 23 17:30:37
> > 2016
> > @@ -51,7 +51,7 @@ GenerateDwarfTypeUnits("generate-type-un
> >
> >  DIEDwarfExpression::DIEDwarfExpression(const AsmPrinter &AP, DwarfUnit
> > &DU,
> >                                         DIELoc &DIE)
> > -    : DwarfExpression(AP.getDwarfDebug()->getDwarfVersion()), AP(AP),
> > DU(DU),
> > +    : DwarfExpression(AP.getDwarfVersion()), AP(AP), DU(DU),
> >        DIE(DIE) {}
> >
> >  void DIEDwarfExpression::EmitOp(uint8_t Op, const char* Comment) {
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161212/4920a56f/attachment-0001.html>


More information about the llvm-commits mailing list