Skip to content

Commit 799fa2c

Browse files
author
Coby Tayree
committed
[X86][AsmParser][AVX512] Error appropriately when K0 is tried as a write-mask
K0 isn't expected as a write-mask, so provide a detailed error here, instead of the more generic one (invalid op for insn) Conforms with gas Differential Revision: https://reviews.llvm.org/D36570 llvm-svn: 310789
1 parent 808ce12 commit 799fa2c

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2088,8 +2088,11 @@ bool X86AsmParser::HandleAVX512Operand(OperandVector &Operands,
20882088
// Parse an op-mask register mark ({%k<NUM>}), which is now to be
20892089
// expected
20902090
unsigned RegNo;
2091-
if (!ParseRegister(RegNo, StartLoc, StartLoc) &&
2091+
SMLoc RegLoc;
2092+
if (!ParseRegister(RegNo, RegLoc, StartLoc) &&
20922093
X86MCRegisterClasses[X86::VK1RegClassID].contains(RegNo)) {
2094+
if (RegNo == X86::K0)
2095+
return Error(RegLoc, "Register k0 can't be used as write mask");
20932096
if (!getLexer().is(AsmToken::RCurly))
20942097
return Error(getLexer().getLoc(), "Expected } at this point");
20952098
Operands.push_back(X86Operand::CreateToken("{", StartLoc));

llvm/test/MC/X86/avx512-err.s

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
// RUN: not llvm-mc -triple x86_64-unknown-unknown -mcpu=knl -mattr=+avx512dq -mattr=+avx512f --show-encoding %s 2> %t.err
2-
// RUN: FileCheck --check-prefix=ERR < %t.err %s
1+
// RUN: not llvm-mc %s -triple x86_64-unknown-unknown -mcpu=knl -mattr=+avx512dq -mattr=+avx512f --show-encoding -o /dev/null 2>&1 | FileCheck --check-prefix=ERR %s
32

4-
// ERR: invalid operand for instruction
3+
// ERR: Register k0 can't be used as write mask
54
vpcmpd $1, %zmm24, %zmm7, %k5{%k0}
65

76
// ERR: Expected a {z} mark at this point

llvm/test/MC/X86/intel-syntax-avx512-error.s

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@
77
// CHECK: error: Expected a {z} mark at this point
88
vfmsub213ps zmm8{rn-sae}, zmm8, zmm8
99
// CHECK: error: Expected an op-mask register at this point
10+
vpcmpltd k5{k0}, zmm7, zmm24
11+
// CHECK: error: Register k0 can't be used as write mask
12+

0 commit comments

Comments
 (0)