[llvm] 9d8e83b - [MC] Add the ability to pass MCRegisterInfo to dump_pretty.
Hendrik Greving via llvm-commits
llvm-commits at lists.llvm.org
Fri May 14 18:24:50 PDT 2021
Author: Hendrik Greving
Date: 2021-05-14T18:21:57-07:00
New Revision: 9d8e83b50e45db98af83b4003b628a70066e64d3
URL: https://github.com/llvm/llvm-project/commit/9d8e83b50e45db98af83b4003b628a70066e64d3
DIFF: https://github.com/llvm/llvm-project/commit/9d8e83b50e45db98af83b4003b628a70066e64d3.diff
LOG: [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.
Added:
Modified:
llvm/include/llvm/MC/MCInst.h
llvm/lib/MC/MCInst.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCInst.h b/llvm/include/llvm/MC/MCInst.h
index 35f9d94dec749..cb2616533bf5b 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 @@ class MCOperand {
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 @@ class MCInst {
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 be312b9a8d337..3cc50ff43513e 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 << "<MCOperand ";
if (!isValid())
OS << "INVALID";
- else if (isReg())
- OS << "Reg:" << getReg();
- else if (isImm())
+ else if (isReg()) {
+ OS << "Reg:";
+ if (RegInfo)
+ OS << RegInfo->getName(getReg());
+ else
+ OS << getReg();
+ } else if (isImm())
OS << "Imm:" << getImm();
else if (isSFPImm())
OS << "SFPImm:" << bit_cast<float>(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 << "<MCInst " << getOpcode();
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
OS << " ";
- getOperand(i).print(OS);
+ getOperand(i).print(OS, RegInfo);
}
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 << "<MCInst #" << getOpcode();
// Show the instruction opcode name if we have it.
@@ -87,7 +95,7 @@ void MCInst::dump_pretty(raw_ostream &OS, StringRef Name,
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
OS << Separator;
- getOperand(i).print(OS);
+ getOperand(i).print(OS, RegInfo);
}
OS << ">";
}
More information about the llvm-commits
mailing list