diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-07-22 15:02:34 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-07-22 15:02:34 +0000 |
| commit | 542720b2bc48d243d2eec93157feebc37af0e202 (patch) | |
| tree | 329e82ce7ea94f5afa8290491bd0debe65636265 /llvm/utils/TableGen/DAGISelMatcherEmitter.cpp | |
| parent | 1b2da771f561affe36eb5eb0c7a3d2862c5a5c1c (diff) | |
| download | bcm5719-llvm-542720b2bc48d243d2eec93157feebc37af0e202.tar.gz bcm5719-llvm-542720b2bc48d243d2eec93157feebc37af0e202.zip | |
TableGen: Support physical register inputs > 255
This was truncating register value that didn't fit in unsigned char.
Switch AMDGPU sendmsg intrinsics to using a tablegen pattern.
llvm-svn: 366695
Diffstat (limited to 'llvm/utils/TableGen/DAGISelMatcherEmitter.cpp')
| -rw-r--r-- | llvm/utils/TableGen/DAGISelMatcherEmitter.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp b/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp index cecbc6cccdf..e9f1fb93d51 100644 --- a/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp +++ b/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp @@ -670,12 +670,22 @@ EmitMatcher(const Matcher *N, unsigned Indent, unsigned CurrentIdx, OS << '\n'; return 2+MN->getNumNodes(); } - case Matcher::EmitCopyToReg: - OS << "OPC_EmitCopyToReg, " - << cast<EmitCopyToRegMatcher>(N)->getSrcSlot() << ", " - << getQualifiedName(cast<EmitCopyToRegMatcher>(N)->getDestPhysReg()) - << ",\n"; - return 3; + case Matcher::EmitCopyToReg: { + const auto *C2RMatcher = cast<EmitCopyToRegMatcher>(N); + int Bytes = 3; + const CodeGenRegister *Reg = C2RMatcher->getDestPhysReg(); + if (Reg->EnumValue > 255) { + assert(isUInt<16>(Reg->EnumValue) && "not handled"); + OS << "OPC_EmitCopyToReg2, " << C2RMatcher->getSrcSlot() << ", " + << "TARGET_VAL(" << getQualifiedName(Reg->TheDef) << "),\n"; + ++Bytes; + } else { + OS << "OPC_EmitCopyToReg, " << C2RMatcher->getSrcSlot() << ", " + << getQualifiedName(Reg->TheDef) << ",\n"; + } + + return Bytes; + } case Matcher::EmitNodeXForm: { const EmitNodeXFormMatcher *XF = cast<EmitNodeXFormMatcher>(N); OS << "OPC_EmitNodeXForm, " << getNodeXFormID(XF->getNodeXForm()) << ", " |

