For blocks that are not loop headers, just print their loop depth and header BB.
authorChris Lattner <sabre@nondot.org>
Fri, 22 Jan 2010 21:11:06 +0000 (21:11 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 22 Jan 2010 21:11:06 +0000 (21:11 +0000)
For loop headers, print Inner loop along with the other stuff so it doesn't take
an extra line.  We now get stuff like this:

LBB1_4:                                                     ## %land.end
                                                            ##   in Loop: Header=BB1_1 Depth=1
        notb    %al
        testb   $1, %al
        jne     LBB1_8

and:

LBB1_6:                                                     ## %while.cond7
                                                            ## Inner Loop Header: Depth=3
                                                            ##     Inside Loop BB1_5 Depth 2
                                                            ##   Inside Loop BB1_1 Depth 1

which still isn't great for loop headers, but is much less verbose.

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

lib/CodeGen/AsmPrinter/AsmPrinter.cpp

index 0b8633bf59744e36bf69325bd251936c4727b363..e0186d145f6b81b6cec60c318aaa80648753525d 100644 (file)
@@ -1847,9 +1847,8 @@ void AsmPrinter::EmitComments(const MachineInstr &MI) const {
 
 /// PrintChildLoopComment - Print comments about child loops within
 /// the loop for this basic block, with nesting.
-static void PrintChildLoopComment(MCStreamer &O, const MachineLoop *Loop,
+static void PrintChildLoopComment(raw_ostream &OS, const MachineLoop *Loop,
                                   unsigned FunctionNumber) {
-  raw_ostream &OS = O.GetCommentOS();
   // Add child loop information
   for (MachineLoop::iterator CL = Loop->begin(), E = Loop->end();CL != E; ++CL){
     MachineBasicBlock *Header = (*CL)->getHeader();
@@ -1857,7 +1856,7 @@ static void PrintChildLoopComment(MCStreamer &O, const MachineLoop *Loop,
     OS.indent(((*CL)->getLoopDepth()-1)*2)
       << "Child Loop BB" << FunctionNumber << "_"
       << Header->getNumber() << " Depth " << (*CL)->getLoopDepth() << '\n';
-    PrintChildLoopComment(O, *CL, FunctionNumber);
+    PrintChildLoopComment(OS, *CL, FunctionNumber);
   }
 }
 
@@ -1869,23 +1868,27 @@ void AsmPrinter::EmitComments(const MachineBasicBlock &MBB) const {
   const MachineLoop *Loop = LI->getLoopFor(&MBB);
   if (Loop == 0) return;
 
-  OutStreamer.AddComment("Loop Depth " + Twine(Loop->getLoopDepth()));
-
   MachineBasicBlock *Header = Loop->getHeader();
   assert(Header && "No header for loop");
-  
+
+  // If this block is not a loop header, just print out what is the loop header
+  // and return.
   if (Header != &MBB) {
-    OutStreamer.AddComment("Loop Header is BB" + Twine(getFunctionNumber()) +
-                           "_" + Twine(Loop->getHeader()->getNumber()));
-  } else {
-    OutStreamer.AddComment("Loop Header");
-    PrintChildLoopComment(OutStreamer, Loop, getFunctionNumber());
+    OutStreamer.AddComment("  in Loop: Header=BB" + Twine(getFunctionNumber())+
+                           "_" + Twine(Loop->getHeader()->getNumber())+
+                           " Depth="+Twine(Loop->getLoopDepth()));
+    return;
   }
 
+  // Otherwise, it is a loop header.  Print out information about child and
+  // parent loops.
+  raw_ostream &OS = OutStreamer.GetCommentOS();
+
   if (Loop->empty())
-    OutStreamer.AddComment("Inner Loop");
+    OS << "Inner ";
+  OS << "Loop Header: Depth=" + Twine(Loop->getLoopDepth()) << '\n';
 
-  raw_ostream &OS = OutStreamer.GetCommentOS();
+  PrintChildLoopComment(OS, Loop, getFunctionNumber());
 
   // Add parent loop information.
   for (const MachineLoop *CurLoop = Loop->getParentLoop(); CurLoop;