mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-06 20:09:02 +00:00
Add some new debugging APIs to print out "raw" SelectionDAGs to make
understanding CannotYTetSelect and other errors easier. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93901 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b9a25b7744
commit
ce6715faa3
@ -1285,37 +1285,55 @@ public:
|
||||
void print_details(raw_ostream &OS, const SelectionDAG *G) const;
|
||||
void print(raw_ostream &OS, const SelectionDAG *G = 0) const;
|
||||
void printr(raw_ostream &OS, const SelectionDAG *G = 0) const;
|
||||
/// printWithDepth - Print a SelectionDAG node and children up to
|
||||
/// depth "depth." "limit" controls whether a message should be
|
||||
/// printed if we hit depth "depth."
|
||||
|
||||
/// printrFull - Print a SelectionDAG node and all children down to
|
||||
/// the leaves. The given SelectionDAG allows target-specific nodes
|
||||
/// to be printed in human-readable form. Unlike printr, this will
|
||||
/// print the whole DAG, including children that appear multiple
|
||||
/// times.
|
||||
///
|
||||
void printWithDepth(raw_ostream &O, const SelectionDAG *G = 0,
|
||||
unsigned depth = -1, unsigned indent = 0,
|
||||
bool limit = false) const;
|
||||
/// printWithFullDepth - Print a SelectionDAG node and all children
|
||||
/// down to the leaves.
|
||||
void printrFull(raw_ostream &O, const SelectionDAG *G = 0) const;
|
||||
|
||||
/// printrWithDepth - Print a SelectionDAG node and children up to
|
||||
/// depth "depth." The given SelectionDAG allows target-specific
|
||||
/// nodes to be printed in human-readable form. Unlike printr, this
|
||||
/// will print children that appear multiple times wherever they are
|
||||
/// used.
|
||||
///
|
||||
void printWithFullDepth(raw_ostream &O, const SelectionDAG *G = 0,
|
||||
unsigned indent = 0) const;
|
||||
void printrWithDepth(raw_ostream &O, const SelectionDAG *G = 0,
|
||||
unsigned depth = 100) const;
|
||||
|
||||
|
||||
/// dump - Dump this node, for debugging.
|
||||
void dump() const;
|
||||
|
||||
/// dumpr - Dump (recursively) this node and its use-def subgraph.
|
||||
void dumpr() const;
|
||||
|
||||
/// dump - Dump this node, for debugging.
|
||||
/// The given SelectionDAG allows target-specific nodes to be printed
|
||||
/// in human-readable form.
|
||||
void dump(const SelectionDAG *G) const;
|
||||
|
||||
/// dumpr - Dump (recursively) this node and its use-def subgraph.
|
||||
/// The given SelectionDAG allows target-specific nodes to be printed
|
||||
/// in human-readable form.
|
||||
void dumpr(const SelectionDAG *G) const;
|
||||
/// dumpWithDepth - printWithDepth to dbgs().
|
||||
|
||||
/// dumprFull - printrFull to dbgs(). The given SelectionDAG allows
|
||||
/// target-specific nodes to be printed in human-readable form.
|
||||
/// Unlike dumpr, this will print the whole DAG, including children
|
||||
/// that appear multiple times.
|
||||
///
|
||||
void dumpWithDepth(const SelectionDAG *G = 0, unsigned depth = 1,
|
||||
unsigned indent = 0, bool limit = false) const;
|
||||
/// dumpWithFullDepth - printWithFullDepth to dbgs().
|
||||
void dumprFull(const SelectionDAG *G = 0) const;
|
||||
|
||||
/// dumprWithDepth - printrWithDepth to dbgs(). The given
|
||||
/// SelectionDAG allows target-specific nodes to be printed in
|
||||
/// human-readable form. Unlike dumpr, this will print children
|
||||
/// that appear multiple times wherever they are used.
|
||||
///
|
||||
void dumpWithFullDepth(const SelectionDAG *G = 0, unsigned indent = 0) const;
|
||||
void dumprWithDepth(const SelectionDAG *G = 0, unsigned depth = 100) const;
|
||||
|
||||
|
||||
static bool classof(const SDNode *) { return true; }
|
||||
|
||||
|
@ -5893,47 +5893,43 @@ 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";
|
||||
static void printrWithDepthHelper(raw_ostream &OS, const SDNode *N,
|
||||
const SelectionDAG *G, unsigned depth,
|
||||
unsigned indent)
|
||||
{
|
||||
if (depth == 0)
|
||||
return;
|
||||
|
||||
OS.indent(indent);
|
||||
|
||||
N->print(OS, G);
|
||||
|
||||
if (depth < 1)
|
||||
return;
|
||||
|
||||
for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
|
||||
OS << '\n';
|
||||
printrWithDepthHelper(OS, N->getOperand(i).getNode(), G, depth-1, indent+2);
|
||||
}
|
||||
|
||||
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 {
|
||||
void SDNode::printrWithDepth(raw_ostream &OS, const SelectionDAG *G,
|
||||
unsigned depth) const {
|
||||
printrWithDepthHelper(OS, this, G, depth, 0);
|
||||
}
|
||||
|
||||
void SDNode::printrFull(raw_ostream &OS, const SelectionDAG *G) const {
|
||||
// Don't print impossibly deep things.
|
||||
dumpWithDepth(G, 100, indent, true);
|
||||
printrWithDepth(OS, G, 100);
|
||||
}
|
||||
|
||||
void SDNode::dumprWithDepth(const SelectionDAG *G, unsigned depth) const {
|
||||
printrWithDepth(dbgs(), G, depth);
|
||||
}
|
||||
|
||||
void SDNode::dumprFull(const SelectionDAG *G) const {
|
||||
// Don't print impossibly deep things.
|
||||
dumprWithDepth(G, 100);
|
||||
}
|
||||
|
||||
static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {
|
||||
|
@ -1426,7 +1426,7 @@ void SelectionDAGISel::CannotYetSelect(SDNode *N) {
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "Cannot yet select: ";
|
||||
N->printWithFullDepth(Msg, CurDAG);
|
||||
N->printrFull(Msg, CurDAG);
|
||||
llvm_report_error(Msg.str());
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user