Add bool to DebugLocDwarfExpression to control emitting comments.
authorPete Cooper <peter_cooper@apple.com>
Wed, 20 May 2015 19:50:03 +0000 (19:50 +0000)
committerPete Cooper <peter_cooper@apple.com>
Wed, 20 May 2015 19:50:03 +0000 (19:50 +0000)
DebugLocDwarfExpression::EmitOp was creating temporary strings by concatenating Twine's.

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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237827 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfExpression.h
lib/CodeGen/AsmPrinter/DwarfUnit.cpp

index 6f48767c1df4c2f665e57ffa4c9fa4c2beb5fa75..61e74260454efec44e5dbe918e6dd1cdf897e08e 100644 (file)
@@ -185,7 +185,8 @@ void AsmPrinter::emitSectionOffset(const MCSymbol *Label) 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) {
index 8c792ed53a63b1fbebb4a0919d65a57624bdc56a..7b051d4c577d63e08538d75c322c35eb79b8a739 100644 (file)
@@ -108,6 +108,8 @@ static const char *const DWARFGroupName = "DWARF Emission";
 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 AsmPrinter &AP, const DIBasicType *BT,
                               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 AsmPrinter &AP, DebugLocStream &Locs,
         // 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;
index 78ec937a6b602d35bec8fcac5a05e63afeb6f45a..15e29164d2fafbd17bbf8b26bcf92ab4c81d8878 100644 (file)
@@ -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 DwarfExpression {
 
 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;
index ee233f710f2f1af81a73ae27746ef02db31707dd..9d523dd35411a3afe7dc0cf9c6a4ed2d06787fcb 100644 (file)
@@ -47,7 +47,7 @@ GenerateDwarfTypeUnits("generate-type-units", cl::Hidden,
 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) {