For blocks that are not loop headers, just print their loop depth and header BB.

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
This commit is contained in:
Chris Lattner 2010-01-22 21:11:06 +00:00
parent d8d0aee26a
commit 965df54254

View 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,24 +1868,28 @@ 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;
}
if (Loop->empty())
OutStreamer.AddComment("Inner Loop");
// Otherwise, it is a loop header. Print out information about child and
// parent loops.
raw_ostream &OS = OutStreamer.GetCommentOS();
if (Loop->empty())
OS << "Inner ";
OS << "Loop Header: Depth=" + Twine(Loop->getLoopDepth()) << '\n';
PrintChildLoopComment(OS, Loop, getFunctionNumber());
// Add parent loop information.
for (const MachineLoop *CurLoop = Loop->getParentLoop(); CurLoop;
CurLoop = CurLoop->getParentLoop()) {