+ Op += "<null>";
+ } else if (const MemOperandSDNode *M = dyn_cast<MemOperandSDNode>(Node)) {
+ const Value *V = M->MO.getValue();
+ Op += '<';
+ if (!V) {
+ Op += "(unknown)";
+ } else if (isa<PseudoSourceValue>(V)) {
+ // PseudoSourceValues don't have names, so use their print method.
+ {
+ raw_string_ostream OSS(Op);
+ OSS << *M->MO.getValue();
+ }
+ } 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());