From: Hendrik Greving Date: Thu, 13 May 2021 15:22:27 +0000 (-0700) Subject: [MC] Add the ability to pass MCRegisterInfo to dump_pretty. X-Git-Tag: llvmorg-14-init~6550 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9d8e83b50e45db98af83b4003b628a70066e64d3;p=platform%2Fupstream%2Fllvm.git [MC] Add the ability to pass MCRegisterInfo to dump_pretty. Adds the ability to pass MCRegisterInfo to dump_pretty and to the print functions, so that if present, target specific enums names are printed instead of enum values. --- diff --git a/llvm/include/llvm/MC/MCInst.h b/llvm/include/llvm/MC/MCInst.h index 35f9d94..cb261653 100644 --- a/llvm/include/llvm/MC/MCInst.h +++ b/llvm/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/llvm/lib/MC/MCInst.cpp b/llvm/lib/MC/MCInst.cpp index be312b9..3cc50ff 100644 --- a/llvm/lib/MC/MCInst.cpp +++ b/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 @@ 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 << ""; }