diff options
| author | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-04-22 15:53:21 +0000 |
|---|---|---|
| committer | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-04-22 15:53:21 +0000 |
| commit | 658541fe69741eb5c7d8fae8fea427ea9add4cd7 (patch) | |
| tree | 49cba72d11eecb24e2cea71b49b3cbc07a9f1fc2 /llvm/utils | |
| parent | 2deea1878ead012b60398773163fb34ec28aabfa (diff) | |
| download | bcm5719-llvm-658541fe69741eb5c7d8fae8fea427ea9add4cd7.tar.gz bcm5719-llvm-658541fe69741eb5c7d8fae8fea427ea9add4cd7.zip | |
[globalisel][tablegen] Add support for RegisterOperand.
Summary:
It functions just like RegisterClass except that the class is obtained
from a field.
Depends on D31761.
Reviewers: ab, qcolombet, t.p.northover, rovka, kristof.beyls, aditya_nandakumar
Reviewed By: ab
Subscribers: dberris, llvm-commits, igorb
Differential Revision: https://reviews.llvm.org/D32229
llvm-svn: 301080
Diffstat (limited to 'llvm/utils')
| -rw-r--r-- | llvm/utils/TableGen/GlobalISelEmitter.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp index b637114a2e0..e2b120e1347 100644 --- a/llvm/utils/TableGen/GlobalISelEmitter.cpp +++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp @@ -1384,6 +1384,12 @@ Error GlobalISelEmitter::importChildMatcher(InstructionMatcher &InsnMatcher, return Error::success(); } + if (ChildRec->isSubClassOf("RegisterOperand")) { + OM.addPredicate<RegisterBankOperandMatcher>( + Target.getRegisterClass(ChildRec->getValueAsDef("RegClass"))); + return Error::success(); + } + // Check for ComplexPattern's. if (ChildRec->isSubClassOf("ComplexPattern")) { const auto &ComplexPattern = ComplexPatternEquivs.find(ChildRec); @@ -1447,7 +1453,8 @@ Error GlobalISelEmitter::importExplicitUseRenderer( return Error::success(); } - if (ChildRec->isSubClassOf("RegisterClass")) { + if (ChildRec->isSubClassOf("RegisterClass") || + ChildRec->isSubClassOf("RegisterOperand")) { DstMIBuilder.addRenderer<CopyRenderer>(InsnMatcher, DstChild->getName()); return Error::success(); } @@ -1614,6 +1621,8 @@ Expected<RuleMatcher> GlobalISelEmitter::runOnPattern(const PatternToMatch &P) { const auto &DstIOperand = DstI.Operands[OpIdx]; Record *DstIOpRec = DstIOperand.Rec; + if (DstIOpRec->isSubClassOf("RegisterOperand")) + DstIOpRec = DstIOpRec->getValueAsDef("RegClass"); if (!DstIOpRec->isSubClassOf("RegisterClass")) return failedImport("Dst MI def isn't a register class"); |

