[Tablegen][PredicateExpander] Add the ability to define checks for invalid registers.
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Wed, 18 Jul 2018 11:03:22 +0000 (11:03 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Wed, 18 Jul 2018 11:03:22 +0000 (11:03 +0000)
This was discussed in review D49436.

llvm-svn: 337378

llvm/utils/TableGen/PredicateExpander.cpp
llvm/utils/TableGen/PredicateExpander.h

index 56ffa77..68eb327 100644 (file)
@@ -44,6 +44,12 @@ void PredicateExpander::expandCheckRegOperand(formatted_raw_ostream &OS,
   OS << Reg->getName();
 }
 
+void PredicateExpander::expandCheckInvalidRegOperand(formatted_raw_ostream &OS,
+                                                     int OpIndex) {
+  OS << "MI" << (isByRef() ? "." : "->") << "getOperand(" << OpIndex
+     << ").getReg() " << (shouldNegate() ? "!= " : "== ") << "0";
+}
+
 void PredicateExpander::expandCheckSameRegOperand(formatted_raw_ostream &OS,
                                                   int First, int Second) {
   OS << "MI" << (isByRef() ? "." : "->") << "getOperand(" << First
@@ -206,6 +212,9 @@ void PredicateExpander::expandPredicate(formatted_raw_ostream &OS,
     return expandCheckRegOperand(OS, Rec->getValueAsInt("OpIndex"),
                                  Rec->getValueAsDef("Reg"));
 
+  if (Rec->isSubClassOf("CheckInvalidRegOperand"))
+    return expandCheckInvalidRegOperand(OS, Rec->getValueAsInt("OpIndex"));
+
   if (Rec->isSubClassOf("CheckImmOperand"))
     return expandCheckImmOperand(OS, Rec->getValueAsInt("OpIndex"),
                                  Rec->getValueAsInt("ImmVal"));
index bc4de90..398b376 100644 (file)
@@ -73,6 +73,7 @@ public:
                              StringRef MethodName);
   void expandCheckIsRegOperand(formatted_raw_ostream &OS, int OpIndex);
   void expandCheckIsImmOperand(formatted_raw_ostream &OS, int OpIndex);
+  void expandCheckInvalidRegOperand(formatted_raw_ostream &OS, int OpIndex);
   void expandCheckFunctionPredicate(formatted_raw_ostream &OS,
                                     StringRef MCInstFn,
                                     StringRef MachineInstrFn);