change MatchInstructionImpl to return an enum instead of bool.
authorChris Lattner <sabre@nondot.org>
Mon, 6 Sep 2010 19:22:17 +0000 (19:22 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 6 Sep 2010 19:22:17 +0000 (19:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113165 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/AsmParser/ARMAsmParser.cpp
lib/Target/X86/AsmParser/X86AsmParser.cpp
utils/TableGen/AsmMatcherEmitter.cpp

index fef8eb08103df60f6e4be2cc7a6ef9e1ec673203..8507070fc6615d729014a17913d4c2ccc7f025ba 100644 (file)
@@ -83,7 +83,7 @@ private:
   bool MatchInstruction(SMLoc IDLoc,
                         const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
                         MCInst &Inst) {
-    if (!MatchInstructionImpl(Operands, Inst))
+    if (MatchInstructionImpl(Operands, Inst) == Match_Success)
       return false;
 
     // FIXME: We should give nicer diagnostics about the exact failure.
index 7e922ed4f86b6306dd3b63e6aa74f7d5cd7e36fe..10c2b9c46163b1763aa9d42feb90bcefcd3f79b7 100644 (file)
@@ -881,7 +881,7 @@ X86ATTAsmParser::MatchInstruction(SMLoc IDLoc,
   assert(!Operands.empty() && "Unexpect empty operand list!");
 
   // First, try a direct match.
-  if (!MatchInstructionImpl(Operands, Inst))
+  if (MatchInstructionImpl(Operands, Inst) == Match_Success)
     return false;
 
   // 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.
   Tmp[Base.size()] = 'b';
-  bool MatchB = MatchInstructionImpl(Operands, Inst);
+  bool MatchB = MatchInstructionImpl(Operands, Inst) != Match_Success;
   Tmp[Base.size()] = 'w';
-  bool MatchW = MatchInstructionImpl(Operands, Inst);
+  bool MatchW = MatchInstructionImpl(Operands, Inst) != Match_Success;
   Tmp[Base.size()] = 'l';
-  bool MatchL = MatchInstructionImpl(Operands, Inst);
+  bool MatchL = MatchInstructionImpl(Operands, Inst) != Match_Success;
   Tmp[Base.size()] = 'q';
-  bool MatchQ = MatchInstructionImpl(Operands, Inst);
+  bool MatchQ = MatchInstructionImpl(Operands, Inst) != Match_Success;
 
   // Restore the old token.
   Op->setTokenValue(Base);
index 515916efde7694da025ed43d52f60f67280df358..1ecc1327b4044e7220bd654b64b5fdbe887876e5 100644 (file)
@@ -1544,9 +1544,14 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
   // Information for the class declaration.
   OS << "\n#ifdef 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 " <<
            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";
   OS << "#endif // GET_ASSEMBLER_HEADER_INFO\n\n";
 
@@ -1594,7 +1599,8 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
        it != ie; ++it)
     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*>"
      << " &Operands,\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.
   OS << "  // Eliminate obvious mismatches.\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 << "  MatchClassKind Classes[" << MaxNumOperands << "];\n";
@@ -1662,7 +1668,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
 
   OS << "    // Check for invalid operands before matching.\n";
   OS << "    if (Classes[i] == InvalidMatchClass)\n";
-  OS << "      return true;\n";
+  OS << "      return Match_Fail;\n";
   OS << "  }\n\n";
 
   OS << "  // Mark unused classes.\n";
@@ -1697,10 +1703,10 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
   if (!InsnCleanupFn.empty())
     OS << "    " << InsnCleanupFn << "(Inst);\n";
 
-  OS << "    return false;\n";
+  OS << "    return Match_Success;\n";
   OS << "  }\n\n";
 
-  OS << "  return true;\n";
+  OS << "  return Match_Fail;\n";
   OS << "}\n\n";
   
   OS << "#endif // GET_MATCHER_IMPLEMENTATION\n\n";