diff --git a/include/llvm/MC/MCInst.h b/include/llvm/MC/MCInst.h index 35f9d94dec7..cb2616533bf 100644 --- a/include/llvm/MC/MCInst.h +++ b/include/llvm/MC/MCInst.h @@ -28,6 +28,7 @@ namespace llvm { 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 @@ public: 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 @@ public: 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) { diff --git a/lib/MC/MCInst.cpp b/lib/MC/MCInst.cpp index be312b9a8d3..3cc50ff4351 100644 --- a/lib/MC/MCInst.cpp +++ b/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 @@ void MCOperand::print(raw_ostream &OS) const { 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 @@ LLVM_DUMP_METHOD void MCOperand::dump() const { } #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 << ""; }