mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-18 09:27:27 +00:00
implement DOTGraphTraits<SelectionDAG*>::getNodeLabel in terms of
SDNode::print_details to eliminate a ton of near-duplicate code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74311 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
89ca575c31
commit
d212bb8ef2
@ -123,145 +123,12 @@ namespace llvm {
|
||||
std::string DOTGraphTraits<SelectionDAG*>::getNodeLabel(const SDNode *Node,
|
||||
const SelectionDAG *G,
|
||||
bool ShortNames) {
|
||||
std::string Op = Node->getOperationName(G);
|
||||
|
||||
if (const ConstantSDNode *CSDN = dyn_cast<ConstantSDNode>(Node)) {
|
||||
Op += ": " + utostr(CSDN->getZExtValue());
|
||||
} else if (const ConstantFPSDNode *CSDN = dyn_cast<ConstantFPSDNode>(Node)) {
|
||||
Op += ": " + ftostr(CSDN->getValueAPF());
|
||||
} else if (const GlobalAddressSDNode *GADN =
|
||||
dyn_cast<GlobalAddressSDNode>(Node)) {
|
||||
Op += ": " + GADN->getGlobal()->getName();
|
||||
if (int64_t Offset = GADN->getOffset()) {
|
||||
if (Offset > 0)
|
||||
Op += "+" + itostr(Offset);
|
||||
else
|
||||
Op += itostr(Offset);
|
||||
}
|
||||
if (unsigned char TF = GADN->getTargetFlags())
|
||||
Op += " [TF=" + utostr(TF) + "]";
|
||||
|
||||
} else if (const FrameIndexSDNode *FIDN = dyn_cast<FrameIndexSDNode>(Node)) {
|
||||
Op += " " + itostr(FIDN->getIndex());
|
||||
} else if (const JumpTableSDNode *JTDN = dyn_cast<JumpTableSDNode>(Node)) {
|
||||
Op += " " + itostr(JTDN->getIndex());
|
||||
if (unsigned char TF = JTDN->getTargetFlags())
|
||||
Op += " [TF=" + utostr(TF) + "]";
|
||||
} else if (const ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(Node)){
|
||||
if (CP->isMachineConstantPoolEntry()) {
|
||||
Op += '<';
|
||||
{
|
||||
raw_string_ostream OSS(Op);
|
||||
OSS << *CP->getMachineCPVal();
|
||||
}
|
||||
Op += '>';
|
||||
} else {
|
||||
if (ConstantFP *CFP = dyn_cast<ConstantFP>(CP->getConstVal()))
|
||||
Op += "<" + ftostr(CFP->getValueAPF()) + ">";
|
||||
else if (ConstantInt *CI = dyn_cast<ConstantInt>(CP->getConstVal()))
|
||||
Op += "<" + utostr(CI->getZExtValue()) + ">";
|
||||
else {
|
||||
Op += '<';
|
||||
{
|
||||
raw_string_ostream OSS(Op);
|
||||
WriteAsOperand(OSS, CP->getConstVal(), false);
|
||||
}
|
||||
Op += '>';
|
||||
}
|
||||
}
|
||||
Op += " A=" + itostr(CP->getAlignment());
|
||||
if (unsigned char TF = CP->getTargetFlags())
|
||||
Op += " TF=" + utostr(TF);
|
||||
} else if (const BasicBlockSDNode *BBDN = dyn_cast<BasicBlockSDNode>(Node)) {
|
||||
Op = "BB: ";
|
||||
const Value *LBB = (const Value*)BBDN->getBasicBlock()->getBasicBlock();
|
||||
if (LBB)
|
||||
Op += LBB->getName();
|
||||
//Op += " " + (const void*)BBDN->getBasicBlock();
|
||||
} else if (const RegisterSDNode *R = dyn_cast<RegisterSDNode>(Node)) {
|
||||
if (G && R->getReg() != 0 &&
|
||||
TargetRegisterInfo::isPhysicalRegister(R->getReg())) {
|
||||
Op = Op + " " +
|
||||
G->getTarget().getRegisterInfo()->getName(R->getReg());
|
||||
} else {
|
||||
Op += " #" + utostr(R->getReg());
|
||||
}
|
||||
} else if (const DbgStopPointSDNode *D = dyn_cast<DbgStopPointSDNode>(Node)) {
|
||||
DICompileUnit CU(cast<GlobalVariable>(D->getCompileUnit()));
|
||||
std::string FN;
|
||||
Op += ": " + CU.getFilename(FN);
|
||||
Op += ":" + utostr(D->getLine());
|
||||
if (D->getColumn() != 0)
|
||||
Op += ":" + utostr(D->getColumn());
|
||||
} else if (const LabelSDNode *L = dyn_cast<LabelSDNode>(Node)) {
|
||||
Op += ": LabelID=" + utostr(L->getLabelID());
|
||||
} else if (const CallSDNode *C = dyn_cast<CallSDNode>(Node)) {
|
||||
Op += ": CallingConv=" + utostr(C->getCallingConv());
|
||||
if (C->isVarArg())
|
||||
Op += ", isVarArg";
|
||||
if (C->isTailCall())
|
||||
Op += ", isTailCall";
|
||||
} else if (const ExternalSymbolSDNode *ES =
|
||||
dyn_cast<ExternalSymbolSDNode>(Node)) {
|
||||
Op += "'" + std::string(ES->getSymbol()) + "'";
|
||||
} else if (const SrcValueSDNode *M = dyn_cast<SrcValueSDNode>(Node)) {
|
||||
if (M->getValue())
|
||||
Op += "<" + M->getValue()->getName() + ">";
|
||||
else
|
||||
Op += "<null>";
|
||||
} else if (const MemOperandSDNode *M = dyn_cast<MemOperandSDNode>(Node)) {
|
||||
const Value *V = M->MO.getValue();
|
||||
Op += '<';
|
||||
if (!V) {
|
||||
Op += "(unknown)";
|
||||
} else if (const PseudoSourceValue *PSV = dyn_cast<PseudoSourceValue>(V)) {
|
||||
// PseudoSourceValues don't have names, so use their print method.
|
||||
raw_string_ostream OSS(Op);
|
||||
PSV->print(OSS);
|
||||
} else {
|
||||
Op += V->getName();
|
||||
}
|
||||
Op += '+' + itostr(M->MO.getOffset()) + '>';
|
||||
} else if (const ARG_FLAGSSDNode *N = dyn_cast<ARG_FLAGSSDNode>(Node)) {
|
||||
Op = Op + " AF=" + N->getArgFlags().getArgFlagsString();
|
||||
} else if (const VTSDNode *N = dyn_cast<VTSDNode>(Node)) {
|
||||
Op = Op + " VT=" + N->getVT().getMVTString();
|
||||
} else if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(Node)) {
|
||||
bool doExt = true;
|
||||
switch (LD->getExtensionType()) {
|
||||
default: doExt = false; break;
|
||||
case ISD::EXTLOAD:
|
||||
Op = Op + "<anyext ";
|
||||
break;
|
||||
case ISD::SEXTLOAD:
|
||||
Op = Op + " <sext ";
|
||||
break;
|
||||
case ISD::ZEXTLOAD:
|
||||
Op = Op + " <zext ";
|
||||
break;
|
||||
}
|
||||
if (doExt)
|
||||
Op += LD->getMemoryVT().getMVTString() + ">";
|
||||
if (LD->isVolatile())
|
||||
Op += "<V>";
|
||||
Op += LD->getIndexedModeName(LD->getAddressingMode());
|
||||
if (LD->getAlignment() > 1)
|
||||
Op += " A=" + utostr(LD->getAlignment());
|
||||
} else if (const StoreSDNode *ST = dyn_cast<StoreSDNode>(Node)) {
|
||||
if (ST->isTruncatingStore())
|
||||
Op += "<trunc " + ST->getMemoryVT().getMVTString() + ">";
|
||||
if (ST->isVolatile())
|
||||
Op += "<V>";
|
||||
Op += ST->getIndexedModeName(ST->getAddressingMode());
|
||||
if (ST->getAlignment() > 1)
|
||||
Op += " A=" + utostr(ST->getAlignment());
|
||||
std::string Result = Node->getOperationName(G);
|
||||
{
|
||||
raw_string_ostream OS(Result);
|
||||
Node->print_details(OS, G);
|
||||
}
|
||||
|
||||
#if 0
|
||||
Op += " Id=" + itostr(Node->getNodeId());
|
||||
#endif
|
||||
|
||||
return Op;
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user