diff options
author | Sam Kolton <Sam.Kolton@amd.com> | 2016-04-21 13:14:24 +0000 |
---|---|---|
committer | Sam Kolton <Sam.Kolton@amd.com> | 2016-04-21 13:14:24 +0000 |
commit | 201398e8a308fdeda8d9f9ddb7797bbb3d919381 (patch) | |
tree | c3a7ab69ec6c41464017210aca69c77d701abde4 /llvm/lib/Target | |
parent | 4fa96af4dbf2d9b050181af592795da7cac7ab6e (diff) | |
download | bcm5719-llvm-201398e8a308fdeda8d9f9ddb7797bbb3d919381.tar.gz bcm5719-llvm-201398e8a308fdeda8d9f9ddb7797bbb3d919381.zip |
[AMDGPU] Assembler: prevent parseDPPCtrlOps from eating invalid tokens
Reviewers: nhaustov, tstellarAMD
Subscribers: arsenm
Differential Revision: http://reviews.llvm.org/D19317
llvm-svn: 266984
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp index d8213504dae..e6462689d24 100644 --- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -2027,7 +2027,6 @@ bool AMDGPUOperand::isDPPCtrl() const { AMDGPUAsmParser::OperandMatchResultTy AMDGPUAsmParser::parseDPPCtrlOps(OperandVector &Operands) { - // ToDo: use same syntax as sp3 for dpp_ctrl SMLoc S = Parser.getTok().getLoc(); StringRef Prefix; int64_t Int; @@ -2043,6 +2042,19 @@ AMDGPUAsmParser::parseDPPCtrlOps(OperandVector &Operands) { } else if (Prefix == "row_half_mirror") { Int = 0x141; } else { + // Check to prevent parseDPPCtrlOps from eating invalid tokens + if (Prefix != "quad_perm" + && Prefix != "row_shl" + && Prefix != "row_shr" + && Prefix != "row_ror" + && Prefix != "wave_shl" + && Prefix != "wave_rol" + && Prefix != "wave_shr" + && Prefix != "wave_ror" + && Prefix != "row_bcast") { + return MatchOperand_NoMatch; + } + Parser.Lex(); if (getLexer().isNot(AsmToken::Colon)) return MatchOperand_ParseFail; @@ -2114,7 +2126,7 @@ AMDGPUAsmParser::parseDPPCtrlOps(OperandVector &Operands) { Int = 0x143; } } else { - return MatchOperand_NoMatch; + return MatchOperand_ParseFail; } } } |