diff options
| author | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2019-06-28 15:22:47 +0000 |
|---|---|---|
| committer | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2019-06-28 15:22:47 +0000 |
| commit | d12966c088357bcdf6fbc796f6414cd019f1996a (patch) | |
| tree | 9c1469bd75665da466c851e73d84920f9228b3b7 /llvm/lib/Target/AMDGPU/AsmParser | |
| parent | b7c31ff4a22e05da367503f5f7e845d1a98169a5 (diff) | |
| download | bcm5719-llvm-d12966c088357bcdf6fbc796f6414cd019f1996a.tar.gz bcm5719-llvm-d12966c088357bcdf6fbc796f6414cd019f1996a.zip | |
[AMDGPU][MC] Fix for sanitizer failure in 364645
llvm-svn: 364651
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AsmParser')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp index 5449fc1bd08..80309b4e6e6 100644 --- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -1148,7 +1148,7 @@ private: }; bool parseSendMsgBody(OperandInfoTy &Msg, OperandInfoTy &Op, OperandInfoTy &Stream); - void validateSendMsg(const OperandInfoTy &Msg, + bool validateSendMsg(const OperandInfoTy &Msg, const OperandInfoTy &Op, const OperandInfoTy &Stream, const SMLoc Loc); @@ -4743,7 +4743,7 @@ AMDGPUAsmParser::parseSendMsgBody(OperandInfoTy &Msg, return skipToken(AsmToken::RParen, "expected a closing parenthesis"); } -void +bool AMDGPUAsmParser::validateSendMsg(const OperandInfoTy &Msg, const OperandInfoTy &Op, const OperandInfoTy &Stream, @@ -4757,17 +4757,23 @@ AMDGPUAsmParser::validateSendMsg(const OperandInfoTy &Msg, if (!isValidMsgId(Msg.Id, getSTI(), Strict)) { Error(S, "invalid message id"); + return false; } else if (Strict && (msgRequiresOp(Msg.Id) != Op.IsDefined)) { Error(S, Op.IsDefined ? "message does not support operations" : "missing message operation"); + return false; } else if (!isValidMsgOp(Msg.Id, Op.Id, Strict)) { Error(S, "invalid operation id"); + return false; } else if (Strict && !msgSupportsStream(Msg.Id, Op.Id) && Stream.IsDefined) { Error(S, "message operation does not support streams"); + return false; } else if (!isValidMsgStream(Msg.Id, Op.Id, Stream.Id, Strict)) { Error(S, "invalid message stream id"); + return false; } + return true; } OperandMatchResultTy @@ -4783,8 +4789,8 @@ AMDGPUAsmParser::parseSendMsgOp(OperandVector &Operands) { OperandInfoTy Msg(ID_UNKNOWN_); OperandInfoTy Op(OP_NONE_); OperandInfoTy Stream(STREAM_ID_NONE_); - if (parseSendMsgBody(Msg, Op, Stream)) { - validateSendMsg(Msg, Op, Stream, Loc); + if (parseSendMsgBody(Msg, Op, Stream) && + validateSendMsg(Msg, Op, Stream, Loc)) { ImmVal = encodeMsg(Msg.Id, Op.Id, Stream.Id); } } else if (parseExpr(ImmVal)) { |

