Convert some more random-comment-printing stuff to use
authorChris Lattner <sabre@nondot.org>
Fri, 22 Jan 2010 19:52:01 +0000 (19:52 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 22 Jan 2010 19:52:01 +0000 (19:52 +0000)
AddComment and GetCommentOS.  Add a blank line between globals
(even in non-verbose mode) to make the assembly more readable.

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

include/llvm/MC/MCStreamer.h
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/MC/MCAsmStreamer.cpp

index 0842a24962c8c5c8de9f17f9d0bf5eb1ab5e1ceb..bd21ec574b4ecb844b02486337e7df1ec414af10 100644 (file)
@@ -81,6 +81,9 @@ namespace llvm {
 
     MCContext &getContext() const { return Context; }
 
+    /// @name Assembly File Formatting.
+    /// @{
+
     /// AddComment - Add a comment that can be emitted to the generated .s
     /// file if applicable as a QoI issue to make the output of the compiler
     /// more readable.  This only affects the MCAsmStreamer, and only when
@@ -95,6 +98,11 @@ namespace llvm {
     /// use this method.
     virtual raw_ostream &GetCommentOS();
     
+    /// AddBlankLine - Emit a blank line to a .s file to pretty it up.
+    virtual void AddBlankLine() {}
+    
+    /// @}
+    
     /// @name Symbol & Section Management
     /// @{
     
index 3f0a9def7fe3c1de0d3779aee55370c9cf08883b..276b334f67d183ae4dd3ac16c2e5a82c486b64ea 100644 (file)
@@ -32,6 +32,7 @@
 #include "llvm/MC/MCSymbol.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/Format.h"
 #include "llvm/Support/FormattedStream.h"
 #include "llvm/MC/MCAsmInfo.h"
 #include "llvm/Target/Mangler.h"
@@ -173,10 +174,9 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
     if (Size == 0) Size = 1;   // .comm Foo, 0 is undefined, avoid it.
     
     if (VerboseAsm) {
-      O.PadToColumn(MAI->getCommentColumn());
-      O << MAI->getCommentString() << ' ';
-      WriteAsOperand(O, GV, /*PrintType=*/false, GV->getParent());
-      O << '\n';
+      WriteAsOperand(OutStreamer.GetCommentOS(), GV,
+                     /*PrintType=*/false, GV->getParent());
+      OutStreamer.GetCommentOS() << '\n';
     }
     
     // Handle common symbols.
@@ -266,10 +266,9 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
 
   EmitAlignment(AlignLog, GV);
   if (VerboseAsm) {
-    O.PadToColumn(MAI->getCommentColumn());
-    O << MAI->getCommentString() << ' ';
-    WriteAsOperand(O, GV, /*PrintType=*/false, GV->getParent());
-    O << '\n';
+    WriteAsOperand(OutStreamer.GetCommentOS(), GV,
+                   /*PrintType=*/false, GV->getParent());
+    OutStreamer.GetCommentOS() << '\n';
   }
   OutStreamer.EmitLabel(GVSym);
 
@@ -277,6 +276,8 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
 
   if (MAI->hasDotTypeDotSizeDirective())
     O << "\t.size\t" << *GVSym << ", " << Size << '\n';
+  
+  OutStreamer.AddBlankLine();
 }
 
 
@@ -1141,9 +1142,8 @@ static void EmitGlobalConstantFP(const ConstantFP *CFP, unsigned AddrSpace,
   
   if (CFP->getType()->isFloatTy()) {
     if (AP.VerboseAsm) {
-      float Val = CFP->getValueAPF().convertToFloat();  // for comment only
-      AP.O.PadToColumn(AP.MAI->getCommentColumn());
-      AP.O << AP.MAI->getCommentString() << " float " << Val << '\n';
+      float Val = CFP->getValueAPF().convertToFloat();
+      AP.OutStreamer.GetCommentOS() << "float " << Val << '\n';
     }
     uint64_t Val = CFP->getValueAPF().bitcastToAPInt().getZExtValue();
     AP.OutStreamer.EmitIntValue(Val, 4, AddrSpace);
@@ -1161,9 +1161,8 @@ static void EmitGlobalConstantFP(const ConstantFP *CFP, unsigned AddrSpace,
       bool ignored;
       DoubleVal.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven,
                         &ignored);
-      AP.O.PadToColumn(AP.MAI->getCommentColumn());
-      AP.O << AP.MAI->getCommentString() << " x86_fp80 ~= "
-           << DoubleVal.convertToDouble() << '\n';
+      AP.OutStreamer.GetCommentOS() << "x86_fp80 ~= "
+        << DoubleVal.convertToDouble() << '\n';
     }
     
     if (AP.TM.getTargetData()->isBigEndian()) {
@@ -1226,12 +1225,8 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV, unsigned AddrSpace) {
     case 2:
     case 4:
     case 8:
-      if (VerboseAsm) {
-        O.PadToColumn(MAI->getCommentColumn());
-        O << MAI->getCommentString() << " 0x";
-        O.write_hex(CI->getZExtValue());
-        O << '\n';
-      }
+      if (VerboseAsm)
+        OutStreamer.GetCommentOS() << format("0x%llx\n", CI->getZExtValue());
       OutStreamer.EmitIntValue(CI->getZExtValue(), Size, AddrSpace);
       return;
     default:
@@ -1670,30 +1665,32 @@ void AsmPrinter::EmitBasicBlockStart(const MachineBasicBlock *MBB) const {
   // will be.
   if (MBB->hasAddressTaken()) {
     const BasicBlock *BB = MBB->getBasicBlock();
+    if (VerboseAsm)
+      OutStreamer.AddComment("Address Taken");
     OutStreamer.EmitLabel(GetBlockAddressSymbol(BB->getParent(), BB));
-    if (VerboseAsm) {
-      O.PadToColumn(MAI->getCommentColumn());
-      O << MAI->getCommentString() << " Address Taken" << '\n';
-    }
   }
 
   // Print the main label for the block.
   if (MBB->pred_empty() || MBB->isOnlyReachableByFallthrough()) {
-    if (VerboseAsm)
+    if (VerboseAsm) {
       O << MAI->getCommentString() << " BB#" << MBB->getNumber() << ':';
+      if (const BasicBlock *BB = MBB->getBasicBlock())
+        if (BB->hasName())
+          OutStreamer.AddComment("%" + BB->getName());
+      OutStreamer.AddBlankLine();
+    }
   } else {
+    if (VerboseAsm) {
+      if (const BasicBlock *BB = MBB->getBasicBlock())
+        if (BB->hasName())
+          OutStreamer.AddComment("%" + BB->getName());
+    }
     OutStreamer.EmitLabel(GetMBBSymbol(MBB->getNumber()));
   }
   
   // Print some comments to accompany the label.
-  if (VerboseAsm) {
-    if (const BasicBlock *BB = MBB->getBasicBlock())
-      if (BB->hasName()) {
-        O.PadToColumn(MAI->getCommentColumn());
-        O << MAI->getCommentString() << ' ';
-        WriteAsOperand(O, BB, /*PrintType=*/false);
-      }
-
+  // FIXME: REENABLE.
+  if (0 && VerboseAsm) {
     EmitComments(*MBB);
     O << '\n';
   }
index 4eb1bcdfb818d8c154a46f911124d862fce1e032..e284e15bca22a6a6ebcc651ad3466fae3e84cfc7 100644 (file)
@@ -73,6 +73,11 @@ public:
     return CommentStream;
   }
   
+  /// AddBlankLine - Emit a blank line to a .s file to pretty it up.
+  virtual void AddBlankLine() {
+    EmitEOL();
+  }
+  
   /// @name MCStreamer Interface
   /// @{