[llvm] r237827 - Add bool to DebugLocDwarfExpression to control emitting comments.

Pete Cooper peter_cooper at apple.com
Wed May 20 13:29:20 PDT 2015


> On May 20, 2015, at 1:08 PM, David Blaikie <dblaikie at gmail.com> wrote:
> 
> 
> 
> On Wed, May 20, 2015 at 12:50 PM, Pete Cooper <peter_cooper at apple.com <mailto:peter_cooper at apple.com>> wrote:
> Author: pete
> Date: Wed May 20 14:50:03 2015
> New Revision: 237827
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=237827&view=rev <http://llvm.org/viewvc/llvm-project?rev=237827&view=rev>
> Log:
> Add bool to DebugLocDwarfExpression to control emitting comments.
> 
> DebugLocDwarfExpression::EmitOp was creating temporary strings by concatenating Twine's.
> 
> Constructing Twines should be cheap as long as they're never manifest (so long as you never tostring them or anything) - what performance issue/unnecessary work was this creating?
Ah yeah, you’re right.

The allocations I was seeing were ultimately calls to BufferByteStreamer::EmitInt8 which always calls Twine::str().  The BufferedByteStreamer itself is returned from DebugLocStream::getStreamer().

Unlike the other ByteStreamers, BufferByteStreamer seems to always add the comments to the stream, even if the stream doesn’t ultimately support them.  On closer inspection, there’s comments in both DebugLocStream, and BufferByteStreamer which mention not emitting the comments on object file output.

So i’ve fixed that, but probably not in the right way.  I’ll take a look to see if there’s anything useful in this patch.  If there is i’ll follow up with another incremental improvement.  Otherwise i’ll revert this and try another approach.

Cheers,
Pete
>  
> 
> When emitting to object files, these comments are thrown away.
> 
> This commit adds a boolean to the constructor of the DwarfExpression to control whether it will actually emit
> any comments.  This prevents it from even generating the temporary comments which would have been thrown away anyway.
> 
> Modified:
>     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp?rev=237827&r1=237826&r2=237827&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp?rev=237827&r1=237826&r2=237827&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp Wed May 20 14:50:03 2015
> @@ -185,7 +185,8 @@ void AsmPrinter::emitSectionOffset(const
>  void AsmPrinter::EmitDwarfRegOp(ByteStreamer &Streamer,
>                                  const MachineLocation &MLoc) const {
>    DebugLocDwarfExpression Expr(*MF->getSubtarget().getRegisterInfo(),
> -                               getDwarfDebug()->getDwarfVersion(), Streamer);
> +                               getDwarfDebug()->getDwarfVersion(),
> +                               OutStreamer->hasRawTextSupport(), Streamer);
>    const MCRegisterInfo *MRI = MMI->getContext().getRegisterInfo();
>    int Reg = MRI->getDwarfRegNum(MLoc.getReg(), false);
>    if (Reg < 0) {
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=237827&r1=237826&r2=237827&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=237827&r1=237826&r2=237827&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed May 20 14:50:03 2015
> @@ -108,6 +108,8 @@ static const char *const DWARFGroupName
>  static const char *const DbgTimerName = "DWARF Debug Writer";
> 
>  void DebugLocDwarfExpression::EmitOp(uint8_t Op, const char *Comment) {
> +  if (!PrintComments)
> +    return BS.EmitInt8(Op, Twine());
>    BS.EmitInt8(
>        Op, Comment ? Twine(Comment) + " " + dwarf::OperationEncodingString(Op)
>                    : dwarf::OperationEncodingString(Op));
> @@ -1477,6 +1479,7 @@ static void emitDebugLocValue(const AsmP
>                                unsigned PieceOffsetInBits) {
>    DebugLocDwarfExpression DwarfExpr(*AP.MF->getSubtarget().getRegisterInfo(),
>                                      AP.getDwarfDebug()->getDwarfVersion(),
> +                                    AP.OutStreamer->hasRawTextSupport(),
>                                      Streamer);
>    // Regular entry.
>    if (Value.isInt()) {
> @@ -1530,6 +1533,7 @@ void DebugLocEntry::finalize(const AsmPr
>          // The DWARF spec seriously mandates pieces with no locations for gaps.
>          DebugLocDwarfExpression Expr(*AP.MF->getSubtarget().getRegisterInfo(),
>                                       AP.getDwarfDebug()->getDwarfVersion(),
> +                                     AP.OutStreamer->hasRawTextSupport(),
>                                       Streamer);
>          Expr.AddOpPiece(PieceOffset-Offset, 0);
>          Offset += PieceOffset-Offset;
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h?rev=237827&r1=237826&r2=237827&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h?rev=237827&r1=237826&r2=237827&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h Wed May 20 14:50:03 2015
> @@ -34,10 +34,15 @@ protected:
>    const TargetRegisterInfo &TRI;
>    unsigned DwarfVersion;
> 
> +  /// \brief Set to true if we want comments to be emitted.  This is usually
> +  /// only the case when the AsmPrinter is emitting to a text stream with
> +  /// comments enabled.
> +  bool PrintComments;
> +
>  public:
>    DwarfExpression(const TargetRegisterInfo &TRI,
> -                  unsigned DwarfVersion)
> -    : TRI(TRI), DwarfVersion(DwarfVersion) {}
> +                  unsigned DwarfVersion, bool PrintComments)
> +    : TRI(TRI), DwarfVersion(DwarfVersion), PrintComments(PrintComments) {}
>    virtual ~DwarfExpression() {}
> 
>    /// Output a dwarf operand and an optional assembler comment.
> @@ -109,8 +114,9 @@ class DebugLocDwarfExpression : public D
> 
>  public:
>    DebugLocDwarfExpression(const TargetRegisterInfo &TRI,
> -                          unsigned DwarfVersion, ByteStreamer &BS)
> -    : DwarfExpression(TRI, DwarfVersion), BS(BS) {}
> +                          unsigned DwarfVersion, bool PrintComments,
> +                          ByteStreamer &BS)
> +    : DwarfExpression(TRI, DwarfVersion, PrintComments), BS(BS) {}
> 
>    void EmitOp(uint8_t Op, const char *Comment = nullptr) override;
>    void EmitSigned(int64_t Value) override;
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=237827&r1=237826&r2=237827&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=237827&r1=237826&r2=237827&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Wed May 20 14:50:03 2015
> @@ -47,7 +47,7 @@ GenerateDwarfTypeUnits("generate-type-un
>  DIEDwarfExpression::DIEDwarfExpression(const AsmPrinter &AP, DwarfUnit &DU,
>                                         DIELoc &DIE)
>      : DwarfExpression(*AP.MF->getSubtarget().getRegisterInfo(),
> -                      AP.getDwarfDebug()->getDwarfVersion()),
> +                      AP.getDwarfDebug()->getDwarfVersion(), false),
>        AP(AP), DU(DU), DIE(DIE) {}
> 
>  void DIEDwarfExpression::EmitOp(uint8_t Op, const char* Comment) {
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits <http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150520/a5fae591/attachment.html>


More information about the llvm-commits mailing list