Index: llvm/include/llvm/MC/MCInst.h =================================================================== --- llvm/include/llvm/MC/MCInst.h +++ llvm/include/llvm/MC/MCInst.h @@ -28,6 +28,7 @@ class MCExpr; class MCInst; class MCInstPrinter; +class MCRegisterInfo; class raw_ostream; /// Instances of this class represent operands of the MCInst class. @@ -172,7 +173,7 @@ return Op; } - void print(raw_ostream &OS) const; + void print(raw_ostream &OS, const MCRegisterInfo *RegInfo = nullptr) const; void dump() const; bool isBareSymbolRef() const; bool evaluateAsConstantImm(int64_t &Imm) const; @@ -224,16 +225,17 @@ return Operands.insert(I, Op); } - void print(raw_ostream &OS) const; + void print(raw_ostream &OS, const MCRegisterInfo *RegInfo = nullptr) const; void dump() const; /// Dump the MCInst as prettily as possible using the additional MC /// structures, if given. Operators are separated by the \p Separator /// string. void dump_pretty(raw_ostream &OS, const MCInstPrinter *Printer = nullptr, - StringRef Separator = " ") const; - void dump_pretty(raw_ostream &OS, StringRef Name, - StringRef Separator = " ") const; + StringRef Separator = " ", + const MCRegisterInfo *RegInfo = nullptr) const; + void dump_pretty(raw_ostream &OS, StringRef Name, StringRef Separator = " ", + const MCRegisterInfo *RegInfo = nullptr) const; }; inline raw_ostream& operator<<(raw_ostream &OS, const MCOperand &MO) { Index: llvm/lib/MC/MCInst.cpp =================================================================== --- llvm/lib/MC/MCInst.cpp +++ llvm/lib/MC/MCInst.cpp @@ -10,6 +10,7 @@ #include "llvm/Config/llvm-config.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCInstPrinter.h" +#include "llvm/MC/MCRegisterInfo.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/Debug.h" @@ -17,13 +18,17 @@ using namespace llvm; -void MCOperand::print(raw_ostream &OS) const { +void MCOperand::print(raw_ostream &OS, const MCRegisterInfo *RegInfo) const { OS << "getName(getReg()); + else + OS << getReg(); + } else if (isImm()) OS << "Imm:" << getImm(); else if (isSFPImm()) OS << "SFPImm:" << bit_cast(getSFPImm()); @@ -32,7 +37,9 @@ else if (isExpr()) { OS << "Expr:(" << *getExpr() << ")"; } else if (isInst()) { - OS << "Inst:(" << *getInst() << ")"; + OS << "Inst:("; + getInst()->print(OS, RegInfo); + OS << ")"; } else OS << "UNDEFINED"; OS << ">"; @@ -62,23 +69,24 @@ } #endif -void MCInst::print(raw_ostream &OS) const { +void MCInst::print(raw_ostream &OS, const MCRegisterInfo *RegInfo) const { OS << ""; } void MCInst::dump_pretty(raw_ostream &OS, const MCInstPrinter *Printer, - StringRef Separator) const { + StringRef Separator, + const MCRegisterInfo *RegInfo) const { StringRef InstName = Printer ? Printer->getOpcodeName(getOpcode()) : ""; - dump_pretty(OS, InstName, Separator); + dump_pretty(OS, InstName, Separator, RegInfo); } -void MCInst::dump_pretty(raw_ostream &OS, StringRef Name, - StringRef Separator) const { +void MCInst::dump_pretty(raw_ostream &OS, StringRef Name, StringRef Separator, + const MCRegisterInfo *RegInfo) const { OS << ""; }