mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
[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.
This commit is contained in:
parent
7c35883ebc
commit
72e8d61b27
@ -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) {
|
||||
|
@ -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 << ">";
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user