Newer
Older
// Omit the directory, because it's likely to be long and uninteresting.
if (!Scope.isNull())
O << Scope.getFilename();
else
O << "<unknown>";
O << ':' << DLT.getLineNumber();
if (DLT.getColumnNumber() != 0)
O << ':' << DLT.getColumnNumber();
// Check for spills and reloads
int FI;
const MachineFrameInfo *FrameInfo =
MI.getParent()->getParent()->getFrameInfo();
// We assume a single instruction only has a spill or reload, not
// both.
if (TM.getInstrInfo()->isLoadFromStackSlotPostFE(&MI, FI)) {
if (FrameInfo->isSpillSlotObjectIndex(FI)) {
O << MAI->getCommentString() << ' ' << MMO->getSize() << "-byte Reload";
if (FrameInfo->isSpillSlotObjectIndex(FI)) {
if (Newline) O << '\n';
O.PadToColumn(MAI->getCommentColumn());
O << MAI->getCommentString() << ' '
<< MMO->getSize() << "-byte Folded Reload";
Newline = true;
}
}
else if (TM.getInstrInfo()->isStoreToStackSlotPostFE(&MI, FI)) {
if (FrameInfo->isSpillSlotObjectIndex(FI)) {
O << MAI->getCommentString() << ' ' << MMO->getSize() << "-byte Spill";
if (FrameInfo->isSpillSlotObjectIndex(FI)) {
if (Newline) O << '\n';
O.PadToColumn(MAI->getCommentColumn());
O << MAI->getCommentString() << ' '
<< MMO->getSize() << "-byte Folded Spill";
Newline = true;
}
}
// Check for spill-induced copies
unsigned SrcReg, DstReg, SrcSubIdx, DstSubIdx;
if (TM.getInstrInfo()->isMoveInstr(MI, SrcReg, DstReg,
SrcSubIdx, DstSubIdx)) {
if (MI.getAsmPrinterFlag(ReloadReuse)) {
if (Newline) O << '\n';
O.PadToColumn(MAI->getCommentColumn());
O << MAI->getCommentString() << " Reload Reuse";
}
}
/// PrintChildLoopComment - Print comments about child loops within
/// the loop for this basic block, with nesting.
///
static void PrintChildLoopComment(formatted_raw_ostream &O,
const MachineLoop *loop,
const MCAsmInfo *MAI,
int FunctionNumber) {
// Add child loop information
for(MachineLoop::iterator cl = loop->begin(),
clend = loop->end();
cl != clend;
++cl) {
MachineBasicBlock *Header = (*cl)->getHeader();
assert(Header && "No header for loop");
O << '\n';
O.PadToColumn(MAI->getCommentColumn());
O << MAI->getCommentString();
O.indent(((*cl)->getLoopDepth()-1)*2)
<< " Child Loop BB" << FunctionNumber << "_"
<< Header->getNumber() << " Depth " << (*cl)->getLoopDepth();
PrintChildLoopComment(O, *cl, MAI, FunctionNumber);
// Add loop depth information
const MachineLoop *loop = LI->getLoopFor(&MBB);
if (loop) {
// Print a newline after bb# annotation.
O << "\n";
O.PadToColumn(MAI->getCommentColumn());
O << MAI->getCommentString() << " Loop Depth " << loop->getLoopDepth()
O.PadToColumn(MAI->getCommentColumn());
MachineBasicBlock *Header = loop->getHeader();
assert(Header && "No header for loop");
if (Header == &MBB) {
O << MAI->getCommentString() << " Loop Header";
PrintChildLoopComment(O, loop, MAI, getFunctionNumber());
O << MAI->getCommentString() << " Loop Header is BB"
<< getFunctionNumber() << "_" << loop->getHeader()->getNumber();
}
if (loop->empty()) {
O << '\n';
O.PadToColumn(MAI->getCommentColumn());
O << MAI->getCommentString() << " Inner Loop";
}
// Add parent loop information
for (const MachineLoop *CurLoop = loop->getParentLoop();
CurLoop;
CurLoop = CurLoop->getParentLoop()) {
MachineBasicBlock *Header = CurLoop->getHeader();
assert(Header && "No header for loop");
O << '\n';
O.PadToColumn(MAI->getCommentColumn());
O << MAI->getCommentString();
O.indent((CurLoop->getLoopDepth()-1)*2)