diff options
author | Bob Wilson <bob.wilson@apple.com> | 2011-01-14 22:58:09 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@apple.com> | 2011-01-14 22:58:09 +0000 |
commit | dc1a2bd3aa199693413f39dd723cc14a77e9f131 (patch) | |
tree | 9760cd259762986e7a75a5d63836f49f7da95552 /utils/TableGen/CodeGenInstruction.cpp | |
parent | 7cefd0e9d596e0adc45b693d3f18d53ed0db259b (diff) |
Fix some tablegen issues to allow using zero_reg for InstAlias definitions.
This is needed to allow an InstAlias for an instruction with an "OptionalDef"
result register (like ARM's cc_out) where you want to set the optional register
to reg0.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123490 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/CodeGenInstruction.cpp')
-rw-r--r-- | utils/TableGen/CodeGenInstruction.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/utils/TableGen/CodeGenInstruction.cpp b/utils/TableGen/CodeGenInstruction.cpp index a28b1d58d7..08005fb5e1 100644 --- a/utils/TableGen/CodeGenInstruction.cpp +++ b/utils/TableGen/CodeGenInstruction.cpp @@ -442,6 +442,21 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) { ++AliasOpNo; continue; } + if (ADI->getDef()->getName() == "zero_reg") { + if (!Result->getArgName(AliasOpNo).empty()) + throw TGError(R->getLoc(), "result fixed register argument must " + "not have a name!"); + + // Check if this is an optional def. + if (!ResultOpRec->isSubClassOf("OptionalDefOperand")) + throw TGError(R->getLoc(), "reg0 used for result that is not an " + "OptionalDefOperand!"); + + // Now that it is validated, add it. + ResultOperands.push_back(ResultOperand(static_cast<Record*>(0))); + ++AliasOpNo; + continue; + } } // If the operand is a record, it must have a name, and the record type must |