diff options
author | Coby Tayree <coby.tayree@intel.com> | 2017-08-09 12:32:05 +0000 |
---|---|---|
committer | Coby Tayree <coby.tayree@intel.com> | 2017-08-09 12:32:05 +0000 |
commit | 3bfb365f52f779dcad3f0835f4bb4a5e3c39df50 (patch) | |
tree | a54ae225171254604ef3045a42655d74ae1a88d3 /llvm/lib | |
parent | 40d083956cc3f5a5b275c619a9bdd28c040a7f4d (diff) | |
download | bcm5719-llvm-3bfb365f52f779dcad3f0835f4bb4a5e3c39df50.tar.gz bcm5719-llvm-3bfb365f52f779dcad3f0835f4bb4a5e3c39df50.zip |
[AsmParser][AVX512]Enhance OpMask/Zero/Merge syntax check rubostness
Adopt a more strict approach regarding what marks should/can appear after a destination register, when operating upon an AVX512 platform.
Differential Revision: https://reviews.llvm.org/D35785
llvm-svn: 310467
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index ea081fd546e..27dcb8a4883 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -2089,14 +2089,17 @@ bool X86AsmParser::HandleAVX512Operand(OperandVector &Operands, // no errors. // Query for the need of further parsing for a {%k<NUM>} mark if (!Z || getLexer().is(AsmToken::LCurly)) { - const SMLoc StartLoc = Z ? consumeToken() : consumedToken; + SMLoc StartLoc = Z ? consumeToken() : consumedToken; // Parse an op-mask register mark ({%k<NUM>}), which is now to be // expected - if (std::unique_ptr<X86Operand> Op = ParseOperand()) { + unsigned RegNo; + if (!ParseRegister(RegNo, StartLoc, StartLoc) && + X86MCRegisterClasses[X86::VK1RegClassID].contains(RegNo)) { if (!getLexer().is(AsmToken::RCurly)) return Error(getLexer().getLoc(), "Expected } at this point"); Operands.push_back(X86Operand::CreateToken("{", StartLoc)); - Operands.push_back(std::move(Op)); + Operands.push_back(std::move(X86Operand::CreateReg(RegNo, StartLoc, + StartLoc))); Operands.push_back(X86Operand::CreateToken("}", consumeToken())); } else return Error(getLexer().getLoc(), @@ -2106,7 +2109,8 @@ bool X86AsmParser::HandleAVX512Operand(OperandVector &Operands, // Have we've found a parsing error, or found no (expected) {z} mark // - report an error if (ParseZ(Z, consumeToken()) || !Z) - return true; + return Error(getLexer().getLoc(), + "Expected a {z} mark at this point"); } // '{z}' on its own is meaningless, hence should be ignored. |