From: Andrea Di Biagio Date: Wed, 18 Jul 2018 11:03:22 +0000 (+0000) Subject: [Tablegen][PredicateExpander] Add the ability to define checks for invalid registers. X-Git-Tag: llvmorg-7.0.0-rc1~1152 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9a2e9db7126a4a3bacf932e34484b187ee12fc74;p=platform%2Fupstream%2Fllvm.git [Tablegen][PredicateExpander] Add the ability to define checks for invalid registers. This was discussed in review D49436. llvm-svn: 337378 --- diff --git a/llvm/utils/TableGen/PredicateExpander.cpp b/llvm/utils/TableGen/PredicateExpander.cpp index 56ffa77..68eb327 100644 --- a/llvm/utils/TableGen/PredicateExpander.cpp +++ b/llvm/utils/TableGen/PredicateExpander.cpp @@ -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")); diff --git a/llvm/utils/TableGen/PredicateExpander.h b/llvm/utils/TableGen/PredicateExpander.h index bc4de90..398b376 100644 --- a/llvm/utils/TableGen/PredicateExpander.h +++ b/llvm/utils/TableGen/PredicateExpander.h @@ -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);