summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorSam Kolton <Sam.Kolton@amd.com>2016-04-21 13:14:24 +0000
committerSam Kolton <Sam.Kolton@amd.com>2016-04-21 13:14:24 +0000
commit201398e8a308fdeda8d9f9ddb7797bbb3d919381 (patch)
treec3a7ab69ec6c41464017210aca69c77d701abde4 /llvm/lib/Target
parent4fa96af4dbf2d9b050181af592795da7cac7ab6e (diff)
downloadbcm5719-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.cpp16
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;
}
}
}
OpenPOWER on IntegriCloud