mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
llvm-mc: Add -show-inst-operands, for dumping the parsed instruction representation before matching.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110791 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b3cb696794
commit
3c14ca47fc
@ -39,6 +39,8 @@ private:
|
||||
|
||||
TargetAsmParser *TargetParser;
|
||||
|
||||
unsigned ShowParsedOperands : 1;
|
||||
|
||||
protected: // Can only create subclasses.
|
||||
MCAsmParser();
|
||||
|
||||
@ -61,6 +63,9 @@ public:
|
||||
TargetAsmParser &getTargetParser() const { return *TargetParser; }
|
||||
void setTargetParser(TargetAsmParser &P);
|
||||
|
||||
bool getShowParsedOperands() const { return ShowParsedOperands; }
|
||||
void setShowParsedOperands(bool Value) { ShowParsedOperands = Value; }
|
||||
|
||||
/// Run - Run the parser on the input source buffer.
|
||||
virtual bool Run(bool NoInitialTextSection, bool NoFinalize = false) = 0;
|
||||
|
||||
|
@ -916,6 +916,21 @@ bool AsmParser::ParseStatement() {
|
||||
if (!HadError && Lexer.isNot(AsmToken::EndOfStatement))
|
||||
HadError = TokError("unexpected token in argument list");
|
||||
|
||||
// Dump the parsed representation, if requested.
|
||||
if (getShowParsedOperands()) {
|
||||
SmallString<256> Str;
|
||||
raw_svector_ostream OS(Str);
|
||||
OS << "parsed instruction: [";
|
||||
for (unsigned i = 0; i != ParsedOperands.size(); ++i) {
|
||||
if (i != 0)
|
||||
OS << ", ";
|
||||
ParsedOperands[i]->dump(OS);
|
||||
}
|
||||
OS << "]";
|
||||
|
||||
PrintMessage(IDLoc, OS.str(), "note");
|
||||
}
|
||||
|
||||
// If parsing succeeded, match the instruction.
|
||||
if (!HadError) {
|
||||
MCInst Inst;
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include "llvm/Target/TargetAsmParser.h"
|
||||
using namespace llvm;
|
||||
|
||||
MCAsmParser::MCAsmParser() : TargetParser(0) {
|
||||
MCAsmParser::MCAsmParser() : TargetParser(0), ShowParsedOperands(0) {
|
||||
}
|
||||
|
||||
MCAsmParser::~MCAsmParser() {
|
||||
|
@ -51,6 +51,10 @@ ShowEncoding("show-encoding", cl::desc("Show instruction encodings"));
|
||||
static cl::opt<bool>
|
||||
ShowInst("show-inst", cl::desc("Show internal instruction representation"));
|
||||
|
||||
static cl::opt<bool>
|
||||
ShowInstOperands("show-inst-operands",
|
||||
cl::desc("Show instructions operands as parsed"));
|
||||
|
||||
static cl::opt<unsigned>
|
||||
OutputAsmVariant("output-asm-variant",
|
||||
cl::desc("Syntax variant to use for output printing"));
|
||||
@ -320,6 +324,7 @@ static int AssembleInput(const char *ProgName) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
Parser->setShowParsedOperands(ShowInstOperands);
|
||||
Parser->setTargetParser(*TAP.get());
|
||||
|
||||
int Res = Parser->Run(NoInitialTextSection);
|
||||
|
Loading…
Reference in New Issue
Block a user