mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
Add some debug routines to SelectionDAG to dump full DAGs.
print/dumpWithDepth allows one to dump a DAG up to N levels deep. dump/printWithFullDepth prints the whole DAG, subject to a depth limit on 100 in the default case (to prevent infinite recursion). Have CannotYetSelect to a dumpWithFullDepth so it is clearer exactly what the non-matching DAG looks like. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93538 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -5893,6 +5893,49 @@ void SDNode::print(raw_ostream &OS, const SelectionDAG *G) const {
|
||||
print_details(OS, G);
|
||||
}
|
||||
|
||||
void SDNode::printWithDepth(raw_ostream &OS, const SelectionDAG *G,
|
||||
unsigned depth, unsigned indent,
|
||||
bool limit) const {
|
||||
if (depth == 0) {
|
||||
if (limit)
|
||||
OS << "*** <max depth> - Cycle? ***\n";
|
||||
return;
|
||||
}
|
||||
|
||||
int myindent = indent;
|
||||
|
||||
while (myindent--) {
|
||||
OS << ' ';
|
||||
}
|
||||
|
||||
print(OS, G);
|
||||
|
||||
if (depth > 1) {
|
||||
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
|
||||
OS << '\n';
|
||||
getOperand(i).getNode()->printWithDepth(OS, G,
|
||||
depth > 0 ? depth-1 : depth,
|
||||
indent+2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SDNode::printWithFullDepth(raw_ostream &OS, const SelectionDAG *G,
|
||||
unsigned indent) const {
|
||||
// Don't print impossibly deep things.
|
||||
printWithDepth(OS, G, 100, indent, true);
|
||||
}
|
||||
|
||||
void SDNode::dumpWithDepth(const SelectionDAG *G, unsigned depth,
|
||||
unsigned indent, bool limit) const {
|
||||
printWithDepth(dbgs(), G, depth, indent, limit);
|
||||
}
|
||||
|
||||
void SDNode::dumpWithFullDepth(const SelectionDAG *G, unsigned indent) const {
|
||||
// Don't print impossibly deep things.
|
||||
dumpWithDepth(G, 100, indent, true);
|
||||
}
|
||||
|
||||
static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {
|
||||
for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
|
||||
if (N->getOperand(i).getNode()->hasOneUse())
|
||||
|
||||
@@ -1426,7 +1426,7 @@ void SelectionDAGISel::CannotYetSelect(SDNode *N) {
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "Cannot yet select: ";
|
||||
N->print(Msg, CurDAG);
|
||||
N->printWithFullDepth(Msg, CurDAG);
|
||||
llvm_report_error(Msg.str());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user