From f3e133a35f5aa6ed32ca29aa3675eff349d61008 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 16 Aug 2005 18:33:07 +0000 Subject: [PATCH] Allow passing a dag into dump and getOperationName. If one is available when printing a node, use it to render target operations with their target instruction name instead of "<>". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22804 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 30 ++++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index e921c12295e..cf3cb706ecb 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -18,6 +18,8 @@ #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/Support/MathExtras.h" #include "llvm/Target/TargetLowering.h" +#include "llvm/Target/TargetInstrInfo.h" +#include "llvm/Target/TargetMachine.h" #include #include #include @@ -1752,9 +1754,18 @@ bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) { } -const char *SDNode::getOperationName() const { +const char *SDNode::getOperationName(const SelectionDAG *G) const { switch (getOpcode()) { - default: return "<>"; + default: + if (getOpcode() < ISD::BUILTIN_OP_END) + return "<>"; + else { + if (G) + if (const TargetInstrInfo *TII = G->getTarget().getInstrInfo()) + return TII->getName(getOpcode()-ISD::BUILTIN_OP_END); + return "<>"; + } + case ISD::PCMARKER: return "PCMarker"; case ISD::SRCVALUE: return "SrcValue"; case ISD::EntryToken: return "EntryToken"; @@ -1883,7 +1894,8 @@ const char *SDNode::getOperationName() const { } } -void SDNode::dump() const { +void SDNode::dump() const { dump(0); } +void SDNode::dump(const SelectionDAG *G) const { std::cerr << (void*)this << ": "; for (unsigned i = 0, e = getNumValues(); i != e; ++i) { @@ -1893,7 +1905,7 @@ void SDNode::dump() const { else std::cerr << MVT::getValueTypeString(getValueType(i)); } - std::cerr << " = " << getOperationName(); + std::cerr << " = " << getOperationName(G); std::cerr << " "; for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { @@ -1934,17 +1946,17 @@ void SDNode::dump() const { } } -static void DumpNodes(SDNode *N, unsigned indent) { +static void DumpNodes(SDNode *N, unsigned indent, const SelectionDAG *G) { for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) if (N->getOperand(i).Val->hasOneUse()) - DumpNodes(N->getOperand(i).Val, indent+2); + DumpNodes(N->getOperand(i).Val, indent+2, G); else std::cerr << "\n" << std::string(indent+2, ' ') << (void*)N->getOperand(i).Val << ": "; std::cerr << "\n" << std::string(indent, ' '); - N->dump(); + N->dump(G); } void SelectionDAG::dump() const { @@ -1954,10 +1966,10 @@ void SelectionDAG::dump() const { for (unsigned i = 0, e = Nodes.size(); i != e; ++i) { if (!Nodes[i]->hasOneUse() && Nodes[i] != getRoot().Val) - DumpNodes(Nodes[i], 2); + DumpNodes(Nodes[i], 2, this); } - DumpNodes(getRoot().Val, 2); + DumpNodes(getRoot().Val, 2, this); std::cerr << "\n\n"; }