mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-10 02:29:32 +00:00
change MatchInstructionImpl to return an enum instead of bool.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113165 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
702f2d42bb
commit
79ed3f77e8
@ -83,7 +83,7 @@ private:
|
|||||||
bool MatchInstruction(SMLoc IDLoc,
|
bool MatchInstruction(SMLoc IDLoc,
|
||||||
const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
|
const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
|
||||||
MCInst &Inst) {
|
MCInst &Inst) {
|
||||||
if (!MatchInstructionImpl(Operands, Inst))
|
if (MatchInstructionImpl(Operands, Inst) == Match_Success)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// FIXME: We should give nicer diagnostics about the exact failure.
|
// FIXME: We should give nicer diagnostics about the exact failure.
|
||||||
|
@ -881,7 +881,7 @@ X86ATTAsmParser::MatchInstruction(SMLoc IDLoc,
|
|||||||
assert(!Operands.empty() && "Unexpect empty operand list!");
|
assert(!Operands.empty() && "Unexpect empty operand list!");
|
||||||
|
|
||||||
// First, try a direct match.
|
// First, try a direct match.
|
||||||
if (!MatchInstructionImpl(Operands, Inst))
|
if (MatchInstructionImpl(Operands, Inst) == Match_Success)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// FIXME: Ideally, we would only attempt suffix matches for things which are
|
// FIXME: Ideally, we would only attempt suffix matches for things which are
|
||||||
@ -901,13 +901,13 @@ X86ATTAsmParser::MatchInstruction(SMLoc IDLoc,
|
|||||||
|
|
||||||
// Check for the various suffix matches.
|
// Check for the various suffix matches.
|
||||||
Tmp[Base.size()] = 'b';
|
Tmp[Base.size()] = 'b';
|
||||||
bool MatchB = MatchInstructionImpl(Operands, Inst);
|
bool MatchB = MatchInstructionImpl(Operands, Inst) != Match_Success;
|
||||||
Tmp[Base.size()] = 'w';
|
Tmp[Base.size()] = 'w';
|
||||||
bool MatchW = MatchInstructionImpl(Operands, Inst);
|
bool MatchW = MatchInstructionImpl(Operands, Inst) != Match_Success;
|
||||||
Tmp[Base.size()] = 'l';
|
Tmp[Base.size()] = 'l';
|
||||||
bool MatchL = MatchInstructionImpl(Operands, Inst);
|
bool MatchL = MatchInstructionImpl(Operands, Inst) != Match_Success;
|
||||||
Tmp[Base.size()] = 'q';
|
Tmp[Base.size()] = 'q';
|
||||||
bool MatchQ = MatchInstructionImpl(Operands, Inst);
|
bool MatchQ = MatchInstructionImpl(Operands, Inst) != Match_Success;
|
||||||
|
|
||||||
// Restore the old token.
|
// Restore the old token.
|
||||||
Op->setTokenValue(Base);
|
Op->setTokenValue(Base);
|
||||||
|
@ -1544,9 +1544,14 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
|
|||||||
// Information for the class declaration.
|
// Information for the class declaration.
|
||||||
OS << "\n#ifdef GET_ASSEMBLER_HEADER\n";
|
OS << "\n#ifdef GET_ASSEMBLER_HEADER\n";
|
||||||
OS << "#undef GET_ASSEMBLER_HEADER\n";
|
OS << "#undef GET_ASSEMBLER_HEADER\n";
|
||||||
|
OS << " // This should be included into the middle of the declaration of \n";
|
||||||
|
OS << " // your subclasses implementation of TargetAsmParser.\n";
|
||||||
OS << " unsigned ComputeAvailableFeatures(const " <<
|
OS << " unsigned ComputeAvailableFeatures(const " <<
|
||||||
Target.getName() << "Subtarget *Subtarget) const;\n";
|
Target.getName() << "Subtarget *Subtarget) const;\n";
|
||||||
OS << "bool MatchInstructionImpl(const SmallVectorImpl<MCParsedAsmOperand*>"
|
OS << " enum MatchResultTy {\n";
|
||||||
|
OS << " Match_Success, Match_Fail\n";
|
||||||
|
OS << " };\n";
|
||||||
|
OS << " MatchResultTy MatchInstructionImpl(const SmallVectorImpl<MCParsedAsmOperand*>"
|
||||||
<< " &Operands, MCInst &Inst);\n\n";
|
<< " &Operands, MCInst &Inst);\n\n";
|
||||||
OS << "#endif // GET_ASSEMBLER_HEADER_INFO\n\n";
|
OS << "#endif // GET_ASSEMBLER_HEADER_INFO\n\n";
|
||||||
|
|
||||||
@ -1594,7 +1599,8 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
|
|||||||
it != ie; ++it)
|
it != ie; ++it)
|
||||||
MaxNumOperands = std::max(MaxNumOperands, (*it)->Operands.size());
|
MaxNumOperands = std::max(MaxNumOperands, (*it)->Operands.size());
|
||||||
|
|
||||||
OS << "bool " << Target.getName() << ClassName << "::\n"
|
OS << Target.getName() << ClassName << "::MatchResultTy "
|
||||||
|
<< Target.getName() << ClassName << "::\n"
|
||||||
<< "MatchInstructionImpl(const SmallVectorImpl<MCParsedAsmOperand*>"
|
<< "MatchInstructionImpl(const SmallVectorImpl<MCParsedAsmOperand*>"
|
||||||
<< " &Operands,\n";
|
<< " &Operands,\n";
|
||||||
OS << " MCInst &Inst) {\n";
|
OS << " MCInst &Inst) {\n";
|
||||||
@ -1653,7 +1659,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
|
|||||||
// Emit code to compute the class list for this operand vector.
|
// Emit code to compute the class list for this operand vector.
|
||||||
OS << " // Eliminate obvious mismatches.\n";
|
OS << " // Eliminate obvious mismatches.\n";
|
||||||
OS << " if (Operands.size() > " << MaxNumOperands << ")\n";
|
OS << " if (Operands.size() > " << MaxNumOperands << ")\n";
|
||||||
OS << " return true;\n\n";
|
OS << " return Match_Fail;\n\n";
|
||||||
|
|
||||||
OS << " // Compute the class list for this operand vector.\n";
|
OS << " // Compute the class list for this operand vector.\n";
|
||||||
OS << " MatchClassKind Classes[" << MaxNumOperands << "];\n";
|
OS << " MatchClassKind Classes[" << MaxNumOperands << "];\n";
|
||||||
@ -1662,7 +1668,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
|
|||||||
|
|
||||||
OS << " // Check for invalid operands before matching.\n";
|
OS << " // Check for invalid operands before matching.\n";
|
||||||
OS << " if (Classes[i] == InvalidMatchClass)\n";
|
OS << " if (Classes[i] == InvalidMatchClass)\n";
|
||||||
OS << " return true;\n";
|
OS << " return Match_Fail;\n";
|
||||||
OS << " }\n\n";
|
OS << " }\n\n";
|
||||||
|
|
||||||
OS << " // Mark unused classes.\n";
|
OS << " // Mark unused classes.\n";
|
||||||
@ -1697,10 +1703,10 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
|
|||||||
if (!InsnCleanupFn.empty())
|
if (!InsnCleanupFn.empty())
|
||||||
OS << " " << InsnCleanupFn << "(Inst);\n";
|
OS << " " << InsnCleanupFn << "(Inst);\n";
|
||||||
|
|
||||||
OS << " return false;\n";
|
OS << " return Match_Success;\n";
|
||||||
OS << " }\n\n";
|
OS << " }\n\n";
|
||||||
|
|
||||||
OS << " return true;\n";
|
OS << " return Match_Fail;\n";
|
||||||
OS << "}\n\n";
|
OS << "}\n\n";
|
||||||
|
|
||||||
OS << "#endif // GET_MATCHER_IMPLEMENTATION\n\n";
|
OS << "#endif // GET_MATCHER_IMPLEMENTATION\n\n";
|
||||||
|
Loading…
Reference in New Issue
Block a user