mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +00:00
Avoid exponential blow-up when printing DAGs.
David Greene changed CannotYetSelect() to print the full DAG including multiple copies of operands reached through different paths in the DAG. Unfortunately this blows up exponentially in some cases. The depth limit of 100 is way too high to prevent this -- I'm seeing a message string of 150MB with a depth of only 40 in one particularly bad case, even though the DAG has less than 200 nodes. Part of the problem is that the printing code is following chain operands, so if you fail to select an operation with a chain, the printer will follow all the chained operations back to the entry node. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126899 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a2cae58411
commit
254c63e336
@ -6226,6 +6226,9 @@ static void printrWithDepthHelper(raw_ostream &OS, const SDNode *N,
|
||||
return;
|
||||
|
||||
for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
|
||||
// Don't follow chain operands.
|
||||
if (N->getOperand(i).getValueType() == MVT::Other)
|
||||
continue;
|
||||
OS << '\n';
|
||||
printrWithDepthHelper(OS, N->getOperand(i).getNode(), G, depth-1, indent+2);
|
||||
}
|
||||
@ -6238,7 +6241,7 @@ void SDNode::printrWithDepth(raw_ostream &OS, const SelectionDAG *G,
|
||||
|
||||
void SDNode::printrFull(raw_ostream &OS, const SelectionDAG *G) const {
|
||||
// Don't print impossibly deep things.
|
||||
printrWithDepth(OS, G, 100);
|
||||
printrWithDepth(OS, G, 10);
|
||||
}
|
||||
|
||||
void SDNode::dumprWithDepth(const SelectionDAG *G, unsigned depth) const {
|
||||
@ -6247,7 +6250,7 @@ void SDNode::dumprWithDepth(const SelectionDAG *G, unsigned depth) const {
|
||||
|
||||
void SDNode::dumprFull(const SelectionDAG *G) const {
|
||||
// Don't print impossibly deep things.
|
||||
dumprWithDepth(G, 100);
|
||||
dumprWithDepth(G, 10);
|
||||
}
|
||||
|
||||
static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user